harperdb 4.3.6 → 4.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/harperdb.js CHANGED
@@ -1,23 +1,23 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var QV=Object.create;var Bl=Object.defineProperty;var jV=Object.getOwnPropertyDescriptor;var zV=Object.getOwnPropertyNames;var JV=Object.getPrototypeOf,XV=Object.prototype.hasOwnProperty;var a=(e,t)=>Bl(e,"name",{value:t,configurable:!0});var Oe=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Fe=(e,t)=>{for(var r in t)Bl(e,r,{get:t[r],enumerable:!0})},ly=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of zV(t))!XV.call(e,s)&&s!==r&&Bl(e,s,{get:()=>t[s],enumerable:!(n=jV(t,s))||n.enumerable});return e};var B=(e,t,r)=>(r=e!=null?QV(JV(e)):{},ly(t||!e||!e.__esModule?Bl(r,"default",{value:e,enumerable:!0}):r,e)),ie=e=>ly(Bl({},"__esModule",{value:!0}),e);var dy=T((Ohe,_y)=>{var ZV=require("fast-glob"),{statSync:jm,existsSync:zm,readFileSync:eY,writeFileSync:tY}=require("fs"),{spawnSync:rY,spawn:nY,execFileSync:Ahe}=require("child_process"),{isMainThread:sY}=require("worker_threads"),{join:ji,relative:uy}=require("path"),{PACKAGE_ROOT:Xn}=D(),{tmpdir:iY,platform:oY}=require("os");require("source-map-support").install();var aY=["resources","server","dataLayer","components"],Hl="ts-build",Jm,cY=__filename.endsWith("tsBuild.js");if(cY){if(sY){let r;try{jm(ji(Xn,Hl)),r=!0}catch{}if(r)for(let n of ZV.sync(aY.map(s=>s+"/**/*.ts"),{cwd:Xn})){let s=0,i=0;try{s=jm(ji(Xn,n)).mtimeMs-5e3,i=jm(ji(Xn,Hl,n.replace(/.ts$/,".js"))).mtimeMs}catch{}if(s>i){console.warn(`TypeScript ${n} is not compiled`+(i?` (TS source file was modified at ${new Date(s)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),Jm=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),Jm=!0;if(Jm){let n=ji(Xn,"node_modules/.bin/tsc");oY()==="win32"&&(n+=".cmd");let s=rY(n,{cwd:Xn});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=ji(iY(),"harperdb-tsc.pid"),o;if(zm(i))try{process.kill(+eY(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=nY(n,["--watch"],{cwd:Xn,detached:!0,stdio:"ignore"});tY(i,c.pid.toString()),c.unref()}}}}let e=_y.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(Xn)&&!n[0].includes("node_modules")){let i=uy(Xn,n[0]),o;i.startsWith(Hl)?o=ji(Xn,uy(Hl,i)):o=ji(Xn,Hl,i);let c=ji(o,r),l=c+".js";if(zm(l))return l;if(c.includes(".")&&zm(c))return c}return t(r,n,s)}}});var D=T((yhe,yy)=>{"use strict";var Dn=require("path"),lY=require("fs"),{relative:bhe,join:Nhe}=Dn,{existsSync:uY}=lY;function _Y(){let e=__dirname;for(;!uY(Dn.join(e,"package.json"));){let t=Dn.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(_Y,"getHDBPackageRoot");var zi=_Y(),fy="js",$d=fy,dY="harperdb-config.yaml",fY="defaultConfig.yaml",EY="hdb",Ey=`harperdb.${$d}`,hy=`customFunctionsServer.${$d}`,hY=`restartHdb.${$d}`,Zm="HarperDB",kd="Custom Functions",Vd="Clustering Hub",Yd="Clustering Leaf",pY="Clustering Ingest Service",mY="Clustering Reply Service",SY="foreground.pid",TY="hdb.pid",gY="data",RY={HDB:Zm,CLUSTERING_HUB:Vd,CLUSTERING_LEAF:Yd,CLUSTERING_INGEST_SERVICE:pY,CLUSTERING_REPLY_SERVICE:mY,CUSTOM_FUNCTIONS:kd,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"},AY={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},OY={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},bY={harperdb:Zm,"clustering hub":Vd,"clustering leaf":Yd,"custom functions":kd,custom_functions:kd,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},NY={CLUSTERING_HUB_PROC_DESCRIPTOR:Vd,CLUSTERING_LEAF_PROC_DESCRIPTOR:Yd},Xm={HDB:Dn.join(zi,"server/harperdb"),CUSTOM_FUNCTIONS:Dn.join(zi,"server/customFunctions"),CLUSTERING_HUB:Dn.join(zi,"server/nats"),CLUSTERING_LEAF:Dn.join(zi,"server/nats")},yY={HDB:Dn.join(Xm.HDB,Ey),CUSTOM_FUNCTIONS:Dn.join(Xm.CUSTOM_FUNCTIONS,hy)},IY={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Dn.join(zi,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Dn.join(zi,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Dn.join(zi,"launchServiceScripts/launchUpdateNodes4-0-0.js")},wY={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},py="support@harperdb.io",CY="customer-success@harperdb.io",my=1,DY=4141,Sy="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",LY="https://www.harperdb.io/product",PY=`For support, please submit a request at ${Sy} or contact ${py}`,Ty=`For license support, please contact ${CY}`,MY="None of the specified records were found.",UY="hash attribute not found",vY=`Your current license only supports ${my} role. ${Ty}`,BY="Your current license only supports 3 connections to a node.",HY="127.0.0.1",GY=1,qY=/^\.$/,xY=/^\.\.$/,FY="U+002E",kY=/\//g,$Y="U+002F",VY=/U\+002F/g,YY=/^U\+002E$/,KY=/^U\+002EU\+002E$/,WY="d",QY=999999,jY="*",zY="--max-old-space-size=",JY="system",XY="__hdb_hash",ZY=".harperdb",e1=".hdb",t1="keys",r1="hdb_boot_properties.file",n1=".updateConfig.json",s1="SIGTSTP",i1=24,o1=6e4,a1=448,c1="blob",l1="trash",u1="database",_1="schema",d1="transactions",f1=".count",E1="id",h1="PROCESS_NAME",gy={SETTINGS_PATH_KEY:"settings_path"},Ry=require("lodash"),p1={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",HDB_CONFIG:"HDB_CONFIG",OPERATIONSAPI_NETWORK_SECUREPORT:"OPERATIONSAPI_NETWORK_SECUREPORT",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},m1={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},S1={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},T1={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"},g1={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"},Xr="hdb_internal:",R1={CREATE_SCHEMA:Xr+"create_schema",CREATE_TABLE:Xr+"create_table",CREATE_ATTRIBUTE:Xr+"create_attribute",ADD_USER:Xr+"add_user",ALTER_USER:Xr+"alter_user",DROP_USER:Xr+"drop_user",HDB_NODES:Xr+"hdb_nodes",HDB_USERS:Xr+"hdb_users",HDB_WORKERS:Xr+"hdb_workers",CATCHUP:Xr+"catchup",SCHEMA_CATCHUP:Xr+"schema_catchup",WORKER_ROOM:Xr+"cluster_workers"},A1={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"},O1="060493.ks",b1=".license",N1={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},ee={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",SET_NODE_REPLICATION:"set_node_replication",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"},y1={CSV:".csv",JSON:".json"},I1={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},w1={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Gl={};Gl[ee.INSERT]=ee.INSERT;Gl[ee.UPDATE]=ee.UPDATE;Gl[ee.UPSERT]=ee.UPSERT;Gl[ee.DELETE]=ee.DELETE;var xe=Object.create(null);xe[ee.DESCRIBE_ALL]=ee.DESCRIBE_ALL;xe[ee.DESCRIBE_TABLE]=ee.DESCRIBE_TABLE;xe[ee.DESCRIBE_SCHEMA]=ee.DESCRIBE_SCHEMA;xe[ee.READ_LOG]=ee.READ_LOG;xe[ee.ADD_NODE]=ee.ADD_NODE;xe[ee.LIST_USERS]=ee.LIST_USERS;xe[ee.LIST_ROLES]=ee.LIST_ROLES;xe[ee.USER_INFO]=ee.USER_INFO;xe[ee.SQL]=ee.SQL;xe[ee.GET_JOB]=ee.GET_JOB;xe[ee.SEARCH_JOBS_BY_START_DATE]=ee.SEARCH_JOBS_BY_START_DATE;xe[ee.DELETE_FILES_BEFORE]=ee.DELETE_FILES_BEFORE;xe[ee.EXPORT_LOCAL]=ee.EXPORT_LOCAL;xe[ee.EXPORT_TO_S3]=ee.EXPORT_TO_S3;xe[ee.CLUSTER_STATUS]=ee.CLUSTER_STATUS;xe[ee.REMOVE_NODE]=ee.REMOVE_NODE;xe[ee.RESTART]=ee.RESTART;xe[ee.CUSTOM_FUNCTIONS_STATUS]=ee.CUSTOM_FUNCTIONS_STATUS;xe[ee.GET_CUSTOM_FUNCTIONS]=ee.GET_CUSTOM_FUNCTIONS;xe[ee.GET_CUSTOM_FUNCTION]=ee.GET_CUSTOM_FUNCTION;xe[ee.SET_CUSTOM_FUNCTION]=ee.SET_CUSTOM_FUNCTION;xe[ee.DROP_CUSTOM_FUNCTION]=ee.DROP_CUSTOM_FUNCTION;xe[ee.ADD_CUSTOM_FUNCTION_PROJECT]=ee.ADD_CUSTOM_FUNCTION_PROJECT;xe[ee.DROP_CUSTOM_FUNCTION_PROJECT]=ee.DROP_CUSTOM_FUNCTION_PROJECT;xe[ee.PACKAGE_CUSTOM_FUNCTION_PROJECT]=ee.PACKAGE_CUSTOM_FUNCTION_PROJECT;xe[ee.DEPLOY_CUSTOM_FUNCTION_PROJECT]=ee.DEPLOY_CUSTOM_FUNCTION_PROJECT;var C1={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},D1={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Ay={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"},L1=Ry.invert(Ay),P1={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"},w={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_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",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_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",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_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_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",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",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",CLONED:"cloned"},Oy={settings_path:gy.SETTINGS_PATH_KEY,hdb_root_key:w.ROOTPATH,hdb_root:w.ROOTPATH,rootpath:w.ROOTPATH,server_port_key:w.OPERATIONSAPI_NETWORK_PORT,server_port:w.OPERATIONSAPI_NETWORK_PORT,cert_key:w.TLS_CERTIFICATE,certificate:w.TLS_CERTIFICATE,private_key_key:w.TLS_PRIVATEKEY,private_key:w.TLS_PRIVATEKEY,http_secure_enabled_key:w.OPERATIONSAPI_NETWORK_HTTPS,https_on:w.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:w.OPERATIONSAPI_NETWORK_CORS,cors_on:w.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:w.LOGGING_LEVEL,log_level:w.LOGGING_LEVEL,log_path_key:w.LOGGING_ROOT,log_path:w.LOGGING_ROOT,clustering_node_name_key:w.CLUSTERING_NODENAME,node_name:w.CLUSTERING_NODENAME,clustering_enabled_key:w.CLUSTERING_ENABLED,clustering:w.CLUSTERING_ENABLED,max_http_threads:w.THREADS_COUNT,max_hdb_processes:w.THREADS_COUNT,server_timeout_key:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:w.LOGGING_AUDITLOG,disable_transaction_log:w.LOGGING_AUDITLOG,operation_token_timeout_key:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:w.HTTP_PORT,custom_functions_port:w.HTTP_PORT,custom_functions_directory_key:w.COMPONENTSROOT,custom_functions_directory:w.COMPONENTSROOT,max_custom_function_processes:w.THREADS_COUNT,log_to_file:w.LOGGING_FILE,log_to_stdstreams:w.LOGGING_STDSTREAMS,local_studio_on:w.LOCALSTUDIO_ENABLED,clustering_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:w.CLUSTERING_USER,clustering_enabled:w.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:w.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:w.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:w.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:w.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:w.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:w.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:w.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxconsumemsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS,clustering_leafserver_streams_maxingestthreads:w.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS,clustering_leafserver_streams_maxmsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:w.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:w.CLUSTERING_NODENAME,clustering_tls_certificate:w.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:w.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:w.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:w.CLUSTERING_TLS_INSECURE,clustering_tls_verify:w.CLUSTERING_TLS_VERIFY,clustering_loglevel:w.CLUSTERING_LOGLEVEL,clustering_republishmessages:w.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:w.CLUSTERING_DATABASELEVEL,customfunctions_network_port:w.HTTP_PORT,customfunctions_tls_certificate:w.TLS_CERTIFICATE,customfunctions_network_cors:w.HTTP_CORS,customfunctions_network_corsaccesslist:w.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:w.HTTP_HEADERSTIMEOUT,customfunctions_network_https:w.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:w.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:w.HTTP_TIMEOUT,http_threads:w.THREADS_COUNT,threads:w.THREADS_COUNT,threads_count:w.THREADS_COUNT,threads_debug:w.THREADS_DEBUG,threads_debug_startingport:w.THREADS_DEBUG_STARTINGPORT,threads_debug_port:w.THREADS_DEBUG_PORT,threads_debug_host:w.THREADS_DEBUG_HOST,threads_debug_waitfordebugger:w.THREADS_DEBUG_WAITFORDEBUGGER,threads_maxheapmemory:w.THREADS_MAXHEAPMEMORY,http_session_affinity:w.HTTP_SESSIONAFFINITY,http_compressionthreshold:w.HTTP_COMPRESSIONTHRESHOLD,http_cors:w.HTTP_CORS,http_corsaccesslist:w.HTTP_CORSACCESSLIST,http_headerstimeout:w.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,http_timeout:w.HTTP_TIMEOUT,http_port:w.HTTP_PORT,http_secureport:w.HTTP_SECUREPORT,http_mtls:w.HTTP_MTLS,http_mtls_user:w.HTTP_MTLS_USER,http_mtls_required:w.HTTP_MTLS_REQUIRED,customfunctions_processes:w.THREADS_COUNT,customfunctions_root:w.COMPONENTSROOT,localstudio_enabled:w.LOCALSTUDIO_ENABLED,logging_file:w.LOGGING_FILE,logging_level:w.LOGGING_LEVEL,logging_root:w.LOGGING_ROOT,logging_rotation_enabled:w.LOGGING_ROTATION_ENABLED,logging_rotation_compress:w.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:w.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:w.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:w.LOGGING_ROTATION_PATH,logging_stdstreams:w.LOGGING_STDSTREAMS,logging_auditlog:w.LOGGING_AUDITLOG,logging_auditretention:w.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:w.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:w.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:w.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:w.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:w.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:w.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:w.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:w.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:w.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:w.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:w.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:w.ROOTPATH,databases:w.DATABASES,storage_path:w.STORAGE_PATH,ignorescripts:w.IGNORE_SCRIPTS,mqtt_network_port:w.MQTT_NETWORK_PORT,mqtt_websocket:w.MQTT_WEBSOCKET,mqtt_network_secureport:w.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:w.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:w.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:w.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:w.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:w.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:w.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:w.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:w.AUTHENTICATION_CACHETTL,authentication_enablesessions:w.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:w.COMPONENTSROOT,tls_certificate:w.TLS_CERTIFICATE,tls_privatekey:w.TLS_PRIVATEKEY,tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,tls_ciphers:w.TLS_CIPHERS};for(let e in w){let t=w[e];Oy[t.toLowerCase()]=t}var M1={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},U1={csv_file_load:"csv_file_load",csv_data_load:ee.CSV_DATA_LOAD,csv_url_load:ee.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"},v1={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"},B1={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},H1={VERSION_DEFAULT:"2.2.0"},G1={DEVELOPMENT:8192,DEFAULT:512},q1={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"},x1={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"},F1={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},by={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},k1=Symbol("metadata"),$1="__clustering__",V1=Object.values(by),Y1=15984864e5,Ny={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},K1=Ry.invert(Ny),W1={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"},Q1=111,j1=`\r
3
- `,z1={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},J1=["*","%"],X1="unauthorized_access",Z1="func_val",eK={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},tK={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},rK={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",NATS_CONSUMER_UPDATE:"nats_consumer_update"},nK={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},sK={HTTP:"http"},iK={STOPPED:"stopped",ONLINE:"online"},oK="3.x.x",aK={SUCCESS:"success",FAILURE:"failure"},cK={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};yy.exports={LOCAL_HARPERDB_OPERATIONS:xe,HDB_SUPPORT_ADDRESS:py,HDB_SUPPORT_URL:Sy,HDB_PRICING_URL:LY,SUPPORT_HELP_MSG:PY,LICENSE_HELP_MSG:Ty,HDB_PROC_NAME:Ey,HDB_PROC_DESCRIPTOR:Zm,CLUSTERING_LEAF_PROC_DESCRIPTOR:Yd,CLUSTERING_HUB_PROC_DESCRIPTOR:Vd,SYSTEM_SCHEMA_NAME:JY,HASH_FOLDER_NAME:XY,HDB_HOME_DIR_NAME:ZY,UPDATE_FILE_NAME:n1,LICENSE_KEY_DIR_NAME:t1,BOOT_PROPS_FILE_NAME:r1,JOB_TYPE_ENUM:U1,JOB_STATUS_ENUM:N1,SYSTEM_TABLE_NAMES:T1,SYSTEM_TABLE_HASH_ATTRIBUTES:g1,OPERATIONS_ENUM:ee,VALID_S3_FILE_TYPES:y1,S3_BUCKET_AUTH_KEYS:I1,VALID_SQL_OPS_ENUM:w1,GEO_CONVERSION_ENUM:D1,HDB_SETTINGS_NAMES:Ay,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:L1,SERVICE_ACTIONS_ENUM:C1,CLUSTER_MESSAGE_TYPE_ENUM:v1,CLUSTER_CONNECTION_DIRECTION_ENUM:B1,CLUSTER_EVENTS_DEFS_ENUM:q1,PERIOD_REGEX:qY,DOUBLE_PERIOD_REGEX:xY,UNICODE_PERIOD:FY,FORWARD_SLASH_REGEX:kY,UNICODE_FORWARD_SLASH:$Y,ESCAPED_FORWARD_SLASH_REGEX:VY,ESCAPED_PERIOD_REGEX:YY,ESCAPED_DOUBLE_PERIOD_REGEX:KY,REG_KEY_FILE_NAME:O1,RESTART_TIMEOUT_MS:o1,HDB_FILE_PERMISSIONS:a1,DATABASES_DIR_NAME:u1,LEGACY_DATABASES_DIR_NAME:_1,TRANSACTIONS_DIR_NAME:d1,LIMIT_COUNT_NAME:f1,ID_ATTRIBUTE_STRING:E1,INSERT_MODULE_ENUM:m1,UPGRADE_JSON_FIELD_NAMES_ENUM:S1,RESTART_CODE:s1,RESTART_CODE_NUM:i1,CLUSTER_OPERATIONS:Gl,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:A1,HDB_INTERNAL_SC_CHANNEL_PREFIX:Xr,INTERNAL_SC_CHANNELS:R1,CLUSTERING_MESSAGE_TYPES:W1,HDB_FILE_SUFFIX:e1,BLOB_FOLDER_NAME:c1,HDB_TRASH_DIR:l1,ORIGINATOR_SET_VALUE:Q1,LICENSE_VALUES:H1,RAM_ALLOCATION_ENUM:G1,TIME_STAMP_NAMES_ENUM:by,TIME_STAMP_NAMES:V1,PERMS_UPDATE_RELEASE_TIMESTAMP:Y1,SEARCH_NOT_FOUND_MESSAGE:MY,SEARCH_ATTRIBUTE_NOT_FOUND:UY,LICENSE_ROLE_DENIED_RESPONSE:vY,LICENSE_MAX_CONNS_REACHED:BY,BASIC_LICENSE_MAX_NON_CU_ROLES:my,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:DY,VALUE_SEARCH_COMPARATORS:Ny,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:K1,LICENSE_FILE_NAME:b1,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:x1,NEW_LINE:j1,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:GY,MOMENT_DAYS_TAG:WY,API_TURNOVER_SEC:QY,LOOPBACK:HY,CODE_EXTENSION:$d,WILDCARD_SEARCH_VALUE:jY,NODE_ERROR_CODES:F1,JAVASCRIPT_EXTENSION:fy,PERMS_CRUD_ENUM:z1,UNAUTHORIZED_PERMISSION_NAME:X1,SEARCH_WILDCARDS:J1,FUNC_VAL:Z1,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:eK,JWT_ENUM:tK,CLUSTERING_FLAG:$1,ITC_EVENT_TYPES:rK,CUSTOM_FUNCTION_PROC_NAME:hy,CUSTOM_FUNCTION_PROC_DESCRIPTOR:kd,SERVICES:nK,THREAD_TYPES:sK,MEM_SETTING_KEY:zY,HDB_RESTART_SCRIPT:hY,PROCESS_DESCRIPTORS:RY,SERVICE_SERVERS:yY,SERVICE_SERVERS_CWD:Xm,PROCESS_DESCRIPTORS_VALIDATE:bY,LAUNCH_SERVICE_SCRIPTS:IY,LOG_LEVELS:OY,PROCESS_NAME_ENV_PROP:h1,LOG_NAMES:AY,PM2_PROCESS_STATUSES:iK,CONFIG_PARAM_MAP:Oy,CONFIG_PARAMS:w,HDB_CONFIG_FILE:dY,HDB_DEFAULT_CONFIG_FILE:fY,ROLE_TYPES_ENUM:wY,BOOT_PROP_PARAMS:gy,INSTALL_PROMPTS:p1,HDB_ROOT_DIR_NAME:EY,CLUSTERING_PROCESSES:NY,FOREGROUND_PID_FILE:SY,PACKAGE_ROOT:zi,PRE_4_0_0_VERSION:oK,DATABASES_PARAM_CONFIG:M1,METADATA_PROPERTY:k1,AUTH_AUDIT_STATUS:aK,AUTH_AUDIT_TYPES:cK,HDB_PID_FILE:TY,DEFAULT_DATABASE_NAME:gY,LEGACY_CONFIG_PARAMS:P1};dy()});var Ji=T((whe,Cy)=>{"use strict";var Iy=require("minimist");Cy.exports=lK;function lK(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=wy(process.env),n=wy(Iy(process.argv))):(r=process.env,n=Iy(process.argv));let s={};for(let i=0,o=e.length;i<o;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}a(lK,"assignCMDENVVariables");function wy(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(wy,"objKeysToLowerCase")});var x=T((Dhe,oS)=>{"use strict";var Ko=require("fs-extra"),{workerData:uK,threadId:_K}=require("worker_threads"),ii=require("path"),Py=require("yaml"),My=require("properties-reader"),Rt=D(),Dy=Ji(),dK=require("os"),{PACKAGE_ROOT:tS}=D(),{_assignPackageExport:fK}=require("../index"),xl={};for(let e in console)xl[e]||(xl[e]=console[e]);var gr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Uy={STDOUT:"stdOut",STDERR:"stdErr"},EK=ii.join(tS,"logs"),hK=ii.join(tS,"config/yaml/",Rt.HDB_DEFAULT_CONFIG_FILE),pK=1e4,si,Ns,Tr,Kd,Wd,Fl,cc,ql;ql===void 0&&vy();oS.exports={notify:Gy,fatal:qy,error:kl,warn:iS,info:Qd,debug:sS,trace:nS,setLogLevel:OK,log_level:Tr,loggerWithTag:mK,suppressLogging:SK,initLogSettings:vy,setupConsoleLogging:By,logCustomLevel:RK,closeLogFile:rS,getLogFilePath:()=>Fl,OUTPUTS:Uy,AuthAuditLog:yK};fK("logger",oS.exports);function vy(e=!1){try{if(ql===void 0||e){rS();let t=AK(),r=Dy(["ROOTPATH"]);try{ql=My(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Ko.pathExistsSync(ii.join(r.ROOTPATH,Rt.HDB_CONFIG_FILE)))throw n}({level:Tr,config_log_path:Wd,to_file:si,to_stream:Ns}=bK(r.ROOTPATH?ii.join(r.ROOTPATH,Rt.HDB_CONFIG_FILE):ql.get("settings_path"))),Kd=Rt.LOG_NAMES.HDB,Fl=ii.join(Wd,Kd)}}catch(t){if(ql=void 0,t.code===Rt.NODE_ERROR_CODES.ENOENT||t.code===Rt.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=Dy(Object.keys(Rt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Rt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Rt.CONFIG_PARAMS.LOGGING_LEVEL){Tr=l;continue}if(c===Rt.CONFIG_PARAMS.LOGGING_STDSTREAMS){Ns=l;continue}c===Rt.CONFIG_PARAMS.LOGGING_FILE&&(si=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=NK();si=si===void 0?s:si,si=Ly(si),Ns=Ns===void 0?i:Ns,Ns=Ly(Ns),Tr=Tr===void 0?n:Tr,Wd=EK,Kd=Rt.LOG_NAMES.INSTALL,Fl=ii.join(Wd,Kd);return}throw kl("Error initializing log settings"),kl(t),t}process.env.DEV_MODE&&(Ns=!0),By()}a(vy,"initLogSettings");var eS=!0;function By(){ac("error",kl),ac("warn",iS),ac("log",Qd),ac("info",Qd),ac("debug",sS),ac("trace",nS)}a(By,"setupConsoleLogging");function ac(e,t){console[e]=function(...r){if(eS&&t(...r),!/PM2 log:|App \[/.test(r[0]))return xl[e](...r)}}a(ac,"logConsole");function mK(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Gy),fatal:r(qy),error:r(kl),warn:r(iS),info:r(Qd),debug:r(sS),trace:r(nS)};function r(n){return function(...s){return n(t,...s)}}}a(mK,"loggerWithTag");function SK(e){try{eS=!1,e()}finally{eS=!0}}a(SK,"suppressLogging");var TK=uK?.name?.replace(/ /g,"-")||"main";function oi(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-1,o=[e],c=0,l;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(l=t[0]?.serviceName,c++)),o.unshift(l||TK+"/"+_K);c<s;c++){let _=t[c];_ instanceof Error&&_.stack?n+=_.stack:typeof _=="object"?n+=JSON.stringify(_):n+=_,c<i&&(n+=" ")}return`${r} [${o.join("] [")}]: ${n}
4
- `}a(oi,"createLogRecord");function $l(e){si&&Hy(e),Ns&&process.stdout.write(e)}a($l,"logStdOut");function jd(e){si&&Hy(e),Ns&&process.stderr.write(e)}a(jd,"logStdErr");function Hy(e){gK(),cc?Ko.appendFileSync(cc,e):xl.log(e)}a(Hy,"logToFile");function rS(){try{Ko.closeSync(cc)}catch{}cc=null}a(rS,"closeLogFile");function gK(){if(!cc){try{if(!Fl)debugger;cc=Ko.openSync(Fl,"a")}catch(e){xl.error(e)}setTimeout(()=>{rS()},pK).unref()}}a(gK,"openLogFile");function Qd(...e){gr[Tr]<=gr.info&&$l(oi("info",e))}a(Qd,"info");function nS(...e){gr[Tr]<=gr.trace&&$l(oi("trace",e))}a(nS,"trace");function kl(...e){gr[Tr]<=gr.error&&jd(oi("error",e))}a(kl,"error");function sS(...e){gr[Tr]<=gr.debug&&$l(oi("debug",e))}a(sS,"debug");function Gy(...e){gr[Tr]<=gr.notify&&$l(oi("notify",e))}a(Gy,"notify");function qy(...e){gr[Tr]<=gr.fatal&&jd(oi("fatal",e))}a(qy,"fatal");function iS(...e){gr[Tr]<=gr.warn&&jd(oi("warn",e))}a(iS,"warn");function RK(e,t,...r){t===Uy.STDERR?jd(oi(e,r)):$l(oi(e,r))}a(RK,"logCustomLevel");function AK(){let e;try{e=dK.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ii.join(e,Rt.HDB_HOME_DIR_NAME,Rt.BOOT_PROPS_FILE_NAME);return Ko.existsSync(t)||(t=ii.join(tS,"utility/hdb_boot_properties.file")),t}a(AK,"getPropsFilePath");function OK(e){Tr=e}a(OK,"setLogLevel");function Ly(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Ly,"autoCastBoolean");function bK(e){try{if(e.includes("config/settings.js")){let o=My(e);return{level:o.get(Rt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ii.dirname(o.get(Rt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Rt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Rt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Py.parseDocument(Ko.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===Rt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(bK,"getLogConfig");function NK(){try{let e=Py.parseDocument(Ko.readFileSync(hK,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(NK,"getDefaultConfig");function yK(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}a(yK,"AuthAuditLog")});var aS=T((Phe,xy)=>{"use strict";var IK=require("util"),wK=require("path"),CK=require("child_process"),DK=IK.promisify(CK.execFile),LK=1e3*1e3*10;xy.exports={findPs:PK};async function PK(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await DK("ps",["wwxo",`pid,${r}`],{maxBuffer:LK});for(let s of n.trim().split(`
5
- `).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.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,n])=>({pid:Number.parseInt(r,10),name:wK.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(PK,"findPs")});var at=T((Uhe,ky)=>{"use strict";var MK="__dbis__",UK="__txns__",vK="__environment_name__",BK="__dbi_defintion__",HK={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"},GK=["__createdtime__","__updatedtime__"],qK="\uFFFF",Fy={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},xK=Object.values(Fy);ky.exports={AUDIT_STORE_NAME:UK,INTERNAL_DBIS_NAME:MK,DBI_DEFINITION_NAME:BK,SEARCH_TYPES:HK,TIMESTAMP_NAMES:GK,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:vK,TRANSACTIONS_DBI_NAMES_ENUM:Fy,TRANSACTIONS_DBIS:xK,OVERFLOW_MARKER:qK}});var Zr=T((vhe,Jy)=>{"use strict";var $y=D(),Vy=at(),Yy={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},Ky=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Wy={500:Ky("There was an error processing your request."),400:"Invalid request"},FK=Wy[Yy.INTERNAL_SERVER_ERROR],kK={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.`},$K={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},VK={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"},YK={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 ${Vy.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Vy.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"},KK={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${$y.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 ${$y.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"},Qy={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"},WK={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."},QK={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`},jK={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"},zK={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},JK={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`},jy={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.`},zy={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}`},XK={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."},ZK={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},eW={...Qy,...VK,...kK,...WK,...QK,...jK,...zK,...JK,...KK,...jy,...zy,...XK,...ZK,...$K};Jy.exports={CHECK_LOGS_WRAPPER:Ky,HDB_ERROR_MSGS:eW,DEFAULT_ERROR_MSGS:Wy,DEFAULT_ERROR_RESP:FK,HTTP_STATUS_CODES:Yy,LMDB_ERRORS_ENUM:YK,AUTHENTICATION_ERROR_MSGS:Qy,VALIDATION_ERROR_MSGS:jy,ITC_ERRORS:zy}});var oe=T((Hhe,eI)=>{"use strict";var lc=Zr(),tW=x(),rW=D(),zd=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,Xy),this.statusCode=n||lc.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(lc.DEFAULT_ERROR_MSGS[n]?lc.DEFAULT_ERROR_MSGS[n]:lc.DEFAULT_ERROR_MSGS[lc.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&tW[s](i)}},cS=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}},lS=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Xy(e,t,r,n=rW.LOG_LEVELS.ERROR,s=null,i=!1){if(Zy(e))return e;let o=new zd(e,t,r,n,s);return i&&delete o.stack,o}a(Xy,"handleHDBError");function Zy(e){return e.__proto__.constructor.name===zd.name}a(Zy,"isHDBError");eI.exports={isHDBError:Zy,handleHDBError:Xy,ClientError:cS,ServerError:lS,hdb_errors:lc}});var je=T((qhe,aI)=>{"use strict";var Ql=D(),nW=K(),Rr=X(),jl=require("path"),sW=require("minimist"),tI=require("fs-extra"),rI=require("lodash");Rr.initSync();var{CONFIG_PARAMS:Xi,DATABASES_PARAM_CONFIG:Vl,SYSTEM_SCHEMA_NAME:Jd}=Ql,Yl,Kl,Wl;function nI(){if(Yl!==void 0)return Yl;if(Rr.getHdbBasePath()!==void 0)return Yl=Rr.get(Xi.STORAGE_PATH)||jl.join(Rr.getHdbBasePath(),Ql.DATABASES_DIR_NAME),Yl}a(nI,"getBaseSchemaPath");function sI(){if(Kl!==void 0)return Kl;if(Rr.getHdbBasePath()!==void 0)return Kl=oI(Jd),Kl}a(sI,"getSystemSchemaPath");function iI(){if(Wl!==void 0)return Wl;if(Rr.getHdbBasePath()!==void 0)return Wl=Rr.get(Ql.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||jl.join(Rr.getHdbBasePath(),Ql.TRANSACTIONS_DIR_NAME),Wl}a(iI,"getTransactionAuditStoreBasePath");function iW(e,t){let r=Rr.get(Xi.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||jl.join(iI(),e.toString())}a(iW,"getTransactionAuditStorePath");function oI(e,t){e=e.toString(),t=t&&t.toString();let r=Rr.get(Ql.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||jl.join(nI(),e)}a(oI,"getSchemaPath");function oW(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,sW(process.argv));let n=r[Xi.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!nW.isObject(n))throw o;i=n}for(let o of i){let c=o[Jd];if(!c)continue;let l=Rr.get(Xi.DATABASES);l=l??{};let _=c?.tables?.[t]?.[Vl.PATH];if(_)return rI.set(l,[Jd,Vl.TABLES,t,Vl.PATH],_),Rr.setProperty(Xi.DATABASES,l),_;let u=c?.[Vl.PATH];if(u)return rI.set(l,[Jd,Vl.PATH],u),Rr.setProperty(Xi.DATABASES,l),u}}let s=r[Xi.STORAGE_PATH.toUpperCase()];if(s){if(!tI.pathExistsSync(s))throw new Error(s+" does not exist");let i=jl.join(s,e);return tI.mkdirsSync(i),Rr.setProperty(Xi.STORAGE_PATH,s),i}return sI()}a(oW,"initSystemSchemaPaths");function aW(){Yl=void 0,Kl=void 0,Wl=void 0}a(aW,"resetPaths");aI.exports={getBaseSchemaPath:nI,getSystemSchemaPath:sI,getTransactionAuditStorePath:iW,getTransactionAuditStoreBasePath:iI,getSchemaPath:oI,initSystemSchemaPaths:oW,resetPaths:aW}});var Ar=T(($he,dI)=>{"use strict";var cW=Zr().LMDB_ERRORS_ENUM,Fhe=require("lmdb"),lW=at(),khe=require("buffer").Buffer,{OVERFLOW_MARKER:cI,MAX_SEARCH_KEY_LENGTH:Xd}=lW,lI=["number","string","symbol","boolean","bigint"];function uW(e){if(e=e?.primaryStore||e,!e)throw new Error(cW.ENV_REQUIRED)}a(uW,"validateEnv");function _W(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(_W,"stringifyData");function dW(e){return e instanceof Date?e.valueOf():e}a(dW,"convertKeyValueToWrite");function fW(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(lI.includes(typeof e))return e.length>Xd?[e.slice(0,Xd)+cI]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(lI.includes(typeof i))i.length>Xd?r.push(i.slice(0,Xd)+cI):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(fW,"getIndexedValues");var Zd=0,uI=0;function _I(){uI=Date.now()-performance.now()}a(_I,"adjustStartTime");_I();var EW=6e4;setInterval(_I,EW).unref();function hW(){let e=performance.now()+uI;return e>Zd?(Zd=e,e):(Zd+=488e-6,Zd)}a(hW,"getNextMonotonicTime");dI.exports={validateEnv:uW,stringifyData:_W,convertKeyValueToWrite:dW,getNextMonotonicTime:hW,getIndexedValues:fW}});var fI,Zn,uS,zl=Oe(()=>{fI=require("events"),Zn=class extends fI.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new uS;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)}},uS=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}}}});var Wo={};Fe(Wo,{server:()=>ct});var EI,ct,Or=Oe(()=>{EI=require("../index"),ct={};(0,EI._assignPackageExport)("server",ct)});var fS={};Fe(fS,{loadGQLSchema:()=>SW,start:()=>dS,startOnMainThread:()=>mW});function dS({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:_,StringValueNode:u}=await import("graphql"),d=o(new c(r.toString(),s)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case l.OBJECT_TYPE_DEFINITION:let U=function(v){if(v.kind==="NonNullType"){let j=U(v.type);return j.nullable=!1,j}if(v.kind==="ListType")return{type:"array",elements:U(v.type)};let H={type:v.name?.value};return Object.defineProperty(H,"location",{value:v.loc.startToken}),H};a(U,"getProperty");let R=S.name.value,g=[],A={table:null,database:null,properties:g};f.set(R,A);for(let v of S.directives){if(v.name.value==="table"){for(let k of v.arguments)A[k.name.value]=k.value.value;A.schema&&(A.database=A.schema),A.table||(A.table=R),A.audit&&(A.audit=A.audit!=="false"),A.attributes=A.properties,E.push(A)}if(v.name.value==="sealed"&&(A.sealed=!0),v.name.value==="export"){A.export=!0;for(let k of v.arguments)k.name.value==="name"&&(A.export={name:k.value.value})}}let P=!1;for(let v of S.fields){let k=U(v.type);k.name=v.name.value,g.push(k);for(let H of v.directives)if(H.name.value==="primaryKey")P?console.warn("Can not define two attributes as a primary key"):(k.isPrimaryKey=!0,P=!0);else if(H.name.value==="indexed")k.indexed=!0;else if(H.name.value==="relationship"){let j={};for(let z of H.arguments)j[z.name.value]=z.value.value;k.relationship=j}else if(H.name.value==="createdTime")k.assignCreatedTime=!0;else if(H.name.value==="updatedTime")k.assignUpdatedTime=!0;else if(H.name.value==="expiresAt")k.expiresAt=!0;else if(H.name.value==="allow"){let j=k.authorizedRoles=[];for(let z of H.arguments)z.name.value==="role"&&j.push(z.value.value)}}A.type=R,R==="Query"&&(h=A)}function m(S){let R=f.get(S.type);R?(Object.defineProperty(S,"properties",{value:R.properties}),Object.defineProperty(S,"definition",{value:R})):S.type==="array"?m(S.elements):pW.includes(S.type)||(0,hI.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(m,"connectPropertyType");for(let S of f.values())for(let R of S.properties)m(R);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,_S.dirname)(n),S.tableClass):i.set((0,_S.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var _S,hI,pW,mW,SW,pI=Oe(()=>{_S=require("path");ge();hI=B(et()),pW=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(dS,"start");mW=dS,SW=dS({ensureTable:Et}).handleFile});async function ef(e){return TW?(Jl||(Jl=gW(AW)),(await(await Jl).import(e)).namespace):import(e)}async function gW(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Jl=new Compartment({console,Math,Date,fetch:RW,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,SI.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Jt,tables:en,databases:lt})}};let n=await(0,mI.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Jl}function RW(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 AW(){return{Resource:Jt,tables:en}}var mI,SI,TW,Jl,ES=Oe(()=>{es();ge();mI=require("fs/promises"),SI=require("path"),TW=!1;a(ef,"secureImport");a(gW,"getCompartment");a(RW,"secureOnlyFetch");a(AW,"getGlobalVars")});var pS={};Fe(pS,{handleFile:()=>OW});async function OW(e,t,r,n){let s=new Map,i=(0,TI.pathToFileURL)(r).toString(),o=await ef(i);l(o.default)&&n.set((0,hS.dirname)(t),o.default),c(o,(0,hS.dirname)(t));function c(_,u){for(let d in _){let f=_[d];l(f)?n.set(u+"/"+d,f):typeof f=="object"&&c(f,u+"/"+d)}}a(c,"recurseForResources");function l(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(l,"isResource"),s}var TI,hS,gI=Oe(()=>{TI=require("url");ES();hS=require("path");a(OW,"handleFile")});var SS={};Fe(SS,{start:()=>bW});function bW({resources:e}){e.set("login",mS),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var mS,RI=Oe(()=>{es();a(bW,"start");mS=class extends Jt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var wI={};Fe(wI,{parse:()=>gS,streamAsJSON:()=>Xl,stringify:()=>Qo});function Xl(e){return new TS({value:e})}function AI(e){return console.error(e),JSON.stringify(e.toString())}function OI(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Qo(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===yI)return II(e);if(t.resolution)return t.resolution.then(()=>Qo(e));throw t}}function II(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let n=0;n<e.length;n++)n>0&&(r+=","),r+=II(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Qo(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function gS(e){return IW.test(e)?NW.parse(e):JSON.parse(e)}var bI,NI,NW,yW,yI,TS,IW,RS=Oe(()=>{bI=require("stream"),NI=B(require("json-bigint-fixes")),NW=(0,NI.default)({useNativeBigInt:!0}),yW=1e4,yI={};BigInt.prototype.toJSON=function(){throw yI};a(Xl,"streamAsJSON");TS=class extends bI.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),AI)}catch(s){yield AI(s)}else yield Qo(t)}else yield Qo(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);OI(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>yW?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 OI(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))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}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(AI,"handleError");a(OI,"when");a(Qo,"stringify");a(II,"jsStringify");IW=/[[,:]\s*-?\d{16,}/;a(gS,"parse")});var FI=T((ipe,xI)=>{"use strict";var AS=require("recursive-iterator"),wW=require("alasql"),OS=require("clone"),CI=K(),{handleHDBError:DI,hdb_errors:CW}=oe(),{HDB_ERROR_MSGS:LI,HTTP_STATUS_CODES:PI}=CW,{getDatabases:DW}=(ge(),ie(ke)),LW=["DISTINCT_ARRAY"],MI=Symbol("validateTables"),bS=Symbol("validateTable"),spe=Symbol("getAllColumns"),UI=Symbol("validateAllColumns"),tf=Symbol("findColumn"),vI=Symbol("validateOrderBy"),Zl=Symbol("validateSegment"),NS=Symbol("validateColumn"),BI=Symbol("setColumnsForTable"),HI=Symbol("checkColumnsForAsterisk"),GI=Symbol("validateGroupBy"),qI=Symbol("hasColumns"),yS=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[MI](),this[HI](),this[UI]()}[MI](){if(this[qI]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[bS](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[bS](t.table)})}}[qI](){let t=!1,r=new AS(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[bS](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=DW();if(!r[t.databaseid])throw DI(new Error,LI.SCHEMA_NOT_FOUND(t.databaseid),PI.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw DI(new Error,LI.TABLE_NOT_FOUND(t.databaseid,t.tableid),PI.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=OS(s);i.table=OS(t),this.attributes.push(i)})}[tf](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)}[HI](){let t=new AS(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[BI](r.tableid)}[BI](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new wW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[UI](){this[Zl](this.statement.columns,!1),this[Zl](this.statement.joins,!1),this[Zl](this.statement.where,!1),this[GI](this.statement.group,!1),this[Zl](this.statement.order,!0)}[Zl](t,r){if(!t)return;let n=new AS(t),s=[];for(let{node:i,path:o}of n)!CI.isEmpty(i)&&!CI.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[vI](i):s.push(this[NS](i)));return s}[GI](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&LW.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=OS(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[tf](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[tf](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.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`}[vI](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[NS](t)}[NS](t){let r=this[tf](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};xI.exports=yS});var $I=T((ape,kI)=>{"use strict";var IS=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")}};kI.exports=IS});var YI=T((lpe,VI)=>{"use strict";var wS=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};VI.exports=wS});var jI={};Fe(jI,{HAS_EXPIRATION:()=>vS,LAST_TIMESTAMP_PLACEHOLDER:()=>ru,LOCAL_TIMESTAMP:()=>PW,METADATA:()=>eu,NO_TIMESTAMP:()=>DS,PENDING_LOCAL_TIME:()=>BS,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>US,RecordEncoder:()=>MS,TIMESTAMP_ASSIGN_LAST:()=>UW,TIMESTAMP_ASSIGN_NEW:()=>WI,TIMESTAMP_ASSIGN_PREVIOUS:()=>QI,TIMESTAMP_PLACEHOLDER:()=>rf,TIMESTAMP_RECORD_PREVIOUS:()=>LS,getUpdateRecord:()=>HS,handleLocalTimeForGets:()=>af});function BW(){return tu[0]=tu[0]^64,MW.getFloat64(0)}function af(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),l=c?.value,_=l?.[eu];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,l.expiresAt>0&&(c.expiresAt=l.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[eu]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let l=c.value,_=l[eu];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,l.expiresAt>0&&(c.expiresAt=l.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,jo.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<jo.length;l++){let _=jo[l].deref();(!_||_.isDone||_.isCommitted)&&jo.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function HS(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",f,E){if(f||l==null?uc=i?.localTime?LS|QI:DS:uc=l?i?.localTime?LS|16384:WI|16384:DS,u>0&&(c|=vS),sf=c,PS=u,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:uc>0},m;try{f&&(h.ifVersion=m=i?.version??null);let S=e.put(n,s,h);if(l){let R=_?.user?.username;if(E&&(nf=e.encoder.encode(E)),f&&i?.localTime){let g=i?.localTime,A=r.get(g);if(A){let P=kt(A).previousLocalTime;return r.put(g,of(o,t,n,P,R,d,nf),{ifVersion:m}),S}}r.put(ru,of(o,t,n,i?.localTime?1:0,R,d,nf),{append:d!=="invalidate",instructedWrite:!0,ifVersion:m})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var KI,CS,rf,ru,US,PW,eu,tu,MW,DS,WI,UW,QI,LS,vS,BS,vW,nf,uc,sf,PS,MS,jo,nu=Oe(()=>{KI=require("msgpackr");Zi();CS=B(x()),rf=new Uint8Array([1,1,1,1,4,64,0,0]),ru=new Uint8Array([1,1,1,1,1,0,0,0]),US=new Uint8Array([1,1,1,1,3,64,0,0]),PW=Symbol("local-timestamp"),eu=Symbol("metadata"),tu=new Uint8Array(8),MW=new DataView(tu.buffer,0,8),DS=0,WI=0,UW=1,QI=3,LS=4,vS=16,BS=1,uc=0,sf=-1,PS=0,MS=class extends KI.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(uc||sf>=0){let i=0,o=uc;o&&(i+=8,uc=0);let c=sf,l=PS;c>=0&&(i+=2,sf=-1,l&&(i+=8,PS=0));let _=vW=r.call(this,n,s|2048|i);nf=_.subarray((_.start||0)+i,_.end);let u=_.start||0;return o&&(rf[4]=o,rf[5]=o>>8,_.set(rf,u),u+=8),c>=0&&(_[u++]=c,_[u++]=0,l&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(u,l)),_}else return r.call(this,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(tu,0,c),c+=8;else for(let d=0;d<8;d++)tu[d]=t[c++];l=BW(),i=t[c]}let _;i<32&&(o=i,c+=2,o&vS&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let u=super.decode(t.subarray(c,s),s-c);return{localTime:l,value:u,[eu]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(BW,"getTimestamp");a(af,"handleLocalTimeForGets");jo=[];setInterval(()=>{for(let e=0;e<jo.length;e++){let t=jo[e].deref();!t||t.isDone||t.isCommitted?jo.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(CS.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):CS.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();a(HS,"getUpdateRecord")});var su=T((Epe,JI)=>{"use strict";var zI=X(),HW=D(),{RecordEncoder:GW}=(nu(),ie(jI)),fpe=require("fs");zI.initSync();var qW=zI.get(HW.CONFIG_PARAMS.STORAGE_CACHING)!==!1,GS=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=qW&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:GW})}};JI.exports=GS});var iu=T((ppe,XI)=>{"use strict";var tn=X(),Ln=D();tn.initSync();var cf=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.eventTurnBatching=!1,this.noSync=tn.get(Ln.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||tn.get(Ln.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||tn.get(Ln.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",tn.get(Ln.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=tn.get(Ln.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),tn.get(Ln.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=tn.get(Ln.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),tn.get(Ln.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=tn.get(Ln.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),tn.get(Ln.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=tn.get(Ln.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=tn.get(Ln.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};XI.exports=cf;cf.MAX_DBS=1e4});var Ve=T((Spe,cw)=>{"use strict";var xS=require("lmdb"),ts=require("fs-extra"),rn=require("path"),lf=Ar(),tw=x(),br=Zr().LMDB_ERRORS_ENUM,uf=YI(),FS=su(),rw=iu(),eo=at(),ZI=D(),{table:xW,resetDatabases:FW}=(ge(),ie(ke)),ew=X(),rs=eo.INTERNAL_DBIS_NAME,nw=eo.DBI_DEFINITION_NAME,kW="data.mdb",$W="lock.mdb",ou=".mdb",VW="-lock",qS=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Pn(t,r),this.key_type=this.dbi[eo.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[eo.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new xS.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function _f(e,t){if(e===void 0)throw new Error(br.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(br.ENV_NAME_REQUIRED)}a(_f,"pathEnvNameValidation");async function kS(e,t,r=!0){try{await ts.access(e)}catch(n){throw n.code==="ENOENT"?new Error(br.INVALID_BASE_PATH):n}try{let n=rn.join(e,t+ou);return await ts.access(n,ts.constants.R_OK|ts.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await ts.access(rn.join(e,t,kW),ts.constants.R_OK|ts.constants.F_OK),rn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(br.INVALID_ENVIRONMENT)}else throw new Error(br.INVALID_ENVIRONMENT);throw n}}a(kS,"validateEnvironmentPath");function df(e,t){if(lf.validateEnv(e),t===void 0)throw new Error(br.DBI_NAME_REQUIRED)}a(df,"validateEnvDBIName");async function YW(e,t,r=!1,n=!1){_f(e,t);let s=rn.basename(e);t=t.toString();let i=ew.get(ZI.CONFIG_PARAMS.DATABASES);i||ew.setProperty(ZI.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await kS(e,t,n),sw(e,t,r)}catch(o){if(o.message===br.INVALID_ENVIRONMENT){let c=rn.join(e,t);await ts.mkdirp(n?c:e);let l=new rw(n?c:c+ou,!1),_=xS.open(l);_.dbis=Object.create(null);let u=new FS(!1);_.openDB(rs,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=$S(e,t,r);return _[eo.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(YW,"createEnvironment");async function KW(e,t,r,n=!0){_f(e,t),t=t.toString();let s=rn.join(e,t);return xW({table:t,database:rn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(KW,"copyEnvironment");async function sw(e,t,r=!1){_f(e,t),t=t.toString();let n=$S(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await kS(e,t),i=rn.join(e,t+ou),o=s!=i,c=new rw(s,o),l=xS.open(c);l.dbis=Object.create(null);let _=ow(l);for(let u=0;u<_.length;u++)Pn(l,_[u]);return l[eo.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(sw,"openEnvironment");async function WW(e,t,r=!1){_f(e,t),t=t.toString();let n=rn.join(e,t+ou),s=await kS(e,t);if(global.lmdb_map!==void 0){let i=$S(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await iw(o),delete global.lmdb_map[i]}}await ts.remove(s),await ts.remove(s===n?s+VW:rn.join(rn.dirname(s),$W))}a(WW,"deleteEnvironment");async function iw(e){lf.validateEnv(e);let t=e[eo.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(iw,"closeEnvironment");function $S(e,t,r=!1){let s=`${rn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a($S,"getCachedEnvironmentName");function QW(e){lf.validateEnv(e);let t=Object.create(null),r=Pn(e,rs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==rs)try{t[n]=Object.assign(new uf,s)}catch{tw.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(QW,"listDBIDefinitions");function ow(e){lf.validateEnv(e);let t=[],r=Pn(e,rs);for(let{key:n}of r.getRange({start:!1}))n!==rs&&t.push(n);return t}a(ow,"listDBIs");function jW(e,t){let n=Pn(e,rs).getEntry(t),s=new uf;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{tw.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(jW,"getDBIDefinition");function aw(e,t,r,n=!r){if(df(e,t),t=t.toString(),t===rs)throw new Error(br.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Pn(e,t)}catch(s){if(s.message===br.DBI_DOES_NOT_EXIST){let i=new FS(r,n===!0),o=e.openDB(t,i),c=new uf(r===!0,n);return o[nw]=c,Pn(e,rs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(aw,"createDBI");function Pn(e,t){if(df(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==rs?r=jW(e,t):r=new uf,r===void 0)throw new Error(br.DBI_DOES_NOT_EXIST);let n;try{let s=new FS(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(br.DBI_DOES_NOT_EXIST):s}return n[nw]=r,e.dbis[t]=n,n}a(Pn,"openDBI");function zW(e,t){df(e,t),t=t.toString();let r=Pn(e,t),n=r.getStats();return r[eo.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(zW,"statDBI");async function JW(e,t){try{let r=rn.join(e,t+ou);return(await ts.stat(r)).size}catch{throw new Error(br.INVALID_ENVIRONMENT)}}a(JW,"environmentDataSize");function XW(e,t){if(df(e,t),t=t.toString(),t===rs)throw new Error(br.CANNOT_DROP_INTERNAL_DBIS_NAME);Pn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Pn(e,rs).removeSync(t)}a(XW,"dropDBI");function ZW(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Pn(e,i)}catch(o){if(o.message===br.DBI_DOES_NOT_EXIST)aw(e,i,i!==t,i===t),n=!0;else throw o}}n&&FW()}a(ZW,"initializeDBIs");cw.exports={openDBI:Pn,openEnvironment:sw,createEnvironment:YW,listDBIs:ow,listDBIDefinitions:QW,createDBI:aw,dropDBI:XW,statDBI:zW,deleteEnvironment:WW,initializeDBIs:ZW,TransactionCursor:qS,environmentDataSize:JW,copyEnvironment:KW,closeEnvironment:iw}});var uw=T((gpe,lw)=>{"use strict";var VS=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};lw.exports=VS});var dw=T((Ape,_w)=>{"use strict";var YS=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};_w.exports=YS});var Ew=T((bpe,fw)=>{"use strict";var KS=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};fw.exports=KS});var Jo=T((Cpe,mw)=>{"use strict";var eQ=Ve(),tQ=uw(),rQ=dw(),nQ=Ew(),ys=Ar(),au=Zr().LMDB_ERRORS_ENUM,sQ=at(),ai=D(),iQ=K(),oQ=require("uuid"),ype=require("lmdb"),{handleHDBError:aQ,hdb_errors:cQ}=oe(),{OVERFLOW_MARKER:Ipe,MAX_SEARCH_KEY_LENGTH:wpe}=sQ,hw=X();hw.initSync();var ff=hw.get(ai.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),WS=ai.TIME_STAMP_NAMES_ENUM.CREATED_TIME,zo=ai.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function lQ(e,t,r,n,s=ys.getNextMonotonicTime()){JS(e,t,r,n),QS(e,t,r);let i=new tQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];pw(_,!0,s);let u=uQ(e,t,r,_),d=_[t];o.push(u),c.push(d)}return jS(o,c,n,i,s)}a(lQ,"insertRecords");function uQ(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let u=c([[{}]]);Array.isArray(u)&&(c=u[0][ai.FUNC_VAL],n[o]=c)}let l=ys.getIndexedValues(c),_=e.dbis[o];if(l){ff&&_.prefetch(l.map(u=>({key:u,value:s})),Ef);for(let u=0,d=l.length;u<d;u++)_.put(l[u],s)}}ff&&e.dbis[t].prefetch([s],Ef),e.dbis[t].put(s,n,n[zo])})}a(uQ,"insertRecord");function _Q(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(_Q,"removeSkippedRecords");function pw(e,t,r){let n=r>0;(n||!Number.isInteger(e[zo]))&&(e[zo]=r||(r=ys.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[WS]))&&(e[WS]=r||ys.getNextMonotonicTime()):delete e[WS]}a(pw,"setTimestamps");function QS(e,t,r){r.indexOf(ai.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ai.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ai.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ai.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),eQ.initializeDBIs(e,t,r)}a(QS,"initializeTransaction");async function dQ(e,t,r,n,s=ys.getNextMonotonicTime()){JS(e,t,r,n),QS(e,t,r);let i=new rQ,o=[],c=[],l=[];for(let _=0;_<n.length;_++){let u=n[_],d=u[t],f;try{f=zS(e,t,u,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),l.push(d)}return jS(c,l,n,i,s,o)}a(dQ,"updateRecords");async function fQ(e,t,r,n,s=ys.getNextMonotonicTime()){try{JS(e,t,r,n)}catch(l){throw aQ(l,l.message,cQ.HTTP_STATUS_CODES.BAD_REQUEST)}QS(e,t,r);let i=new nQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l],u;iQ.isEmpty(_[t])?(u=oQ.v4(),_[t]=u):u=_[t];let d=zS(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return jS(o,c,n,i,s)}a(fQ,"upsertRecords");async function jS(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||ys.getNextMonotonicTime(),_Q(r,i),n}a(jS,"finalizeWrite");function zS(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),_=l?.value,u=_;if(!_){if(i)return!1;_={}}if(pw(r,!u,o),Number.isInteger(r[zo])&&_[zo]>r[zo])return!1;u&&s.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let m=r[h],S=e.dbis[h];if(S===void 0)continue;let R=_[h];if(typeof m=="function"){let A=m([[_]]);Array.isArray(A)&&(m=A[0][ai.FUNC_VAL],r[h]=m)}if(m===R)continue;let g=ys.getIndexedValues(R);if(g){ff&&S.prefetch(g.map(A=>({key:A,value:n})),Ef);for(let A=0,P=g.length;A<P;A++)S.remove(g[A],n)}if(g=ys.getIndexedValues(m),g){ff&&S.prefetch(g.map(A=>({key:A,value:n})),Ef);for(let A=0,P=g.length;A<P;A++)S.put(g[A],n)}}let E=Object.assign({},_,r);c.put(n,E,E[zo])},"do_put");return l?d=c.ifVersion(n,l.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:zS(e,t,r,n,s,i,o))}a(zS,"updateUpsertRecord");function EQ(e,t,r){if(ys.validateEnv(e),t===void 0)throw new Error(au.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(au.WRITE_ATTRIBUTES_REQUIRED):new Error(au.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(EQ,"validateBasic");function JS(e,t,r,n){if(EQ(e,t,r),!Array.isArray(n))throw n===void 0?new Error(au.RECORDS_REQUIRED):new Error(au.RECORDS_MUST_BE_ARRAY)}a(JS,"validateWrite");function Ef(){}a(Ef,"noop");mw.exports={insertRecords:lQ,updateRecords:dQ,upsertRecords:fQ}});var ci=T((Lpe,hQ)=>{hQ.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",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var ws=T((Ppe,gw)=>{"use strict";var Tw=K(),Sw=D(),_c=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Is=require("joi"),to={schema_format:{pattern:_c,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},pQ=Is.alternatives(Is.string().min(1).max(to.schema_length.maximum).pattern(_c).messages({"string.pattern.base":"{:#label} "+to.schema_format.message}),Is.number(),Is.array()).required(),mQ=Is.alternatives(Is.string().min(1).max(to.schema_length.maximum).pattern(_c).messages({"string.pattern.base":"{:#label} "+to.schema_format.message}),Is.number()),SQ=Is.alternatives(Is.string().min(1).max(to.schema_length.maximum).pattern(_c).messages({"string.pattern.base":"{:#label} "+to.schema_format.message}),Is.number()).required();function TQ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>to.schema_length.maximum?`'${e}' maximum of 250 characters`:_c.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(TQ,"checkValidTable");function gQ(e,t){return Tw.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(gQ,"validateSchemaExists");function RQ(e,t){let r=t.state.ancestors[0].schema;return Tw.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(RQ,"validateTableExists");function AQ(e,t){return e.toLowerCase()===Sw.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Sw.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(AQ,"validateSchemaName");gw.exports={common_validators:to,schema_regex:_c,hdb_schema_table:pQ,validateSchemaExists:gQ,validateTableExists:RQ,validateSchemaName:AQ,checkValidTable:TQ,hdb_database:mQ,hdb_table:SQ}});var tt=T((Upe,Rw)=>{"use strict";var Nr=require("validate.js");Nr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Nr.validators.type.checks[t](e)?null:` must be a '${t}' value`};Nr.validators.type.checks={Object:function(e){return Nr.isObject(e)&&!Nr.isArray(e)},Array:Nr.isArray,Integer:Nr.isInteger,Number:Nr.isNumber,String:Nr.isString,Date:Nr.isDate,Boolean:function(e){return typeof e=="boolean"}};Nr.validators.hasValidFileExt=function(e,t){return Nr.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};Rw.exports={validateObject:OQ,validateObjectAsync:bQ,validateBySchema:NQ};function OQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Nr(e,t,{format:"flat"});return r?new Error(r):null}a(OQ,"validateObject");async function bQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Nr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(bQ,"validateObjectAsync");function NQ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(NQ,"validateBySchema")});var hf=T((Bpe,Aw)=>{var{common_validators:Cs}=ws(),lu=tt(),cu="is required",At={database:{presence:!1,format:Cs.schema_format,length:Cs.schema_length},schema:{presence:!1,format:Cs.schema_format,length:Cs.schema_length},table:{presence:!0,format:Cs.schema_format,length:Cs.schema_length},attribute:{presence:!0,format:Cs.schema_format,length:Cs.schema_length},hash_attribute:{presence:!0,format:Cs.schema_format,length:Cs.schema_length}};function uu(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(uu,"makeAttributesStrings");function yQ(e){return e=uu(e),At.table.presence=!1,At.attribute.presence=!1,At.hash_attribute.presence=!1,lu.validateObject(e,At)}a(yQ,"schema_object");function IQ(e){return e=uu(e),At.table.presence={message:cu},At.attribute.presence=!1,At.hash_attribute.presence=!1,lu.validateObject(e,At)}a(IQ,"table_object");function wQ(e){return e=uu(e),At.table.presence={message:cu},At.attribute.presence=!1,lu.validateObject(e,At)}a(wQ,"create_table_object");function CQ(e){return e=uu(e),At.table.presence={message:cu},At.attribute.presence={message:cu},At.hash_attribute.presence=!1,lu.validateObject(e,At)}a(CQ,"attribute_object");function DQ(e){return e=uu(e),At.table.presence={message:cu},At.attribute.presence=!1,At.hash_attribute.presence=!1,lu.validateObject(e,At)}a(DQ,"describe_table");function LQ(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(LQ,"validateTableResidence");Aw.exports={schema_object:yQ,create_table_object:wQ,table_object:IQ,attribute_object:CQ,describe_table:DQ,validateTableResidence:LQ}});var bw=T((Gpe,Ow)=>{"use strict";var PQ=require("uuid"),XS=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||PQ.v4(),this.schema_table=`${this.schema}.${this.table}`}};Ow.exports=XS});var pf=T((xpe,Nw)=>{"use strict";var MQ=bw(),ZS=class extends MQ{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};Nw.exports=ZS});var Iw=T((kpe,yw)=>{"use strict";yw.exports=vQ;var UQ="inserted";function vQ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===UQ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(vQ,"returnObject")});var mf=T((Vpe,Pw)=>{"use strict";var BQ=D(),eT=Ve(),HQ=Jo(),{getSystemSchemaPath:GQ,getSchemaPath:qQ}=je(),xQ=ci(),FQ=hf(),kQ=pf(),$Q=Iw(),{handleHDBError:ww,hdb_errors:Dw}=oe(),Cw=K(),{HTTP_STATUS_CODES:VQ}=Dw,tT=xQ.hdb_attribute,Lw=[];for(let e=0;e<tT.attributes.length;e++)Lw.push(tT.attributes[e].attribute);var YQ="inserted";Pw.exports=KQ;async function KQ(e){let t=FQ.attribute_object(e);if(t)throw ww(new Error,t.message,Dw.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&Cw.checkGlobalSchemaTable(e.schema,e.table);if(r)throw ww(new Error,r,VQ.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Cw.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new kQ(e.schema,e.table,e.attribute,e.id);try{let i=await eT.openEnvironment(qQ(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}`);eT.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await eT.openEnvironment(GQ(),BQ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await HQ.insertRecords(o,tT.hash_attribute,Lw,[s]);return $Q(YQ,c,{records:[s]},l)}catch(i){throw i}}a(KQ,"lmdbCreateAttribute")});var nT=T((Kpe,Uw)=>{var{hdb_table:WQ,hdb_database:Mw}=ws(),QQ=tt(),rT=require("joi"),jQ={undefined:"undefined",null:"null"},zQ=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||jQ[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),JQ=rT.object({database:Mw,schema:Mw,table:WQ,records:rT.array().items(rT.object().custom(zQ)).required()});Uw.exports=function(e){return QQ.validateBySchema(e,JQ)}});var _u=T((jpe,Bw)=>{"use strict";var li=K(),vw=x(),Qpe=nT(),{getDatabases:XQ}=(ge(),ie(ke)),{ClientError:Xo}=oe();Bw.exports=ZQ;function ZQ(e){if(li.isEmpty(e))throw new Xo("invalid update parameters defined.");if(li.isEmptyOrZeroLength(e.schema))throw new Xo("invalid schema specified.");if(li.isEmptyOrZeroLength(e.table))throw new Xo("invalid table specified.");if(!Array.isArray(e.records))throw new Xo("records must be an array");let t=XQ()[e.schema]?.[e.table];if(li.isEmpty(t))throw new Xo(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&li.isEmptyOrZeroLength(o[r]))throw vw.error("a valid hash attribute must be provided with update record:",o),new Xo("a valid hash attribute must be provided with update record, check log for more info");if(!li.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw vw.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Xo(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!li.isEmpty(o[r])&&o[r]!==""&&n.has(li.autoCast(o[r]))&&(o.skip=!0),n.add(li.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(ZQ,"insertUpdateValidate")});var du=T((Jpe,Hw)=>{"use strict";var ej=D().OPERATIONS_ENUM,sT=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=ej.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Hw.exports=sT});var fu=T((eme,qw)=>{"use strict";var Zpe=du(),Sf=D(),iT=K(),Gw=x(),tj=require("uuid"),{handleHDBError:Tf,hdb_errors:rj}=oe(),{HDB_ERROR_MSGS:gf,HTTP_STATUS_CODES:Rf}=rj;qw.exports=nj;function nj(e,t,r){for(let s=0;s<t.length;s++)sj(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];ij(i,r,e.operation)}}a(nj,"processRows");function sj(e){if(Buffer.byteLength(String(e))>Sf.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Tf(new Error,gf.ATTR_NAME_LENGTH_ERR(e),Rf.BAD_REQUEST,void 0,void 0,!0);if(iT.isEmptyOrZeroLength(e)||iT.isEmpty(e.trim()))throw Tf(new Error,gf.ATTR_NAME_NULLISH_ERR,Rf.BAD_REQUEST,void 0,void 0,!0)}a(sj,"validateAttribute");function ij(e,t,r){if(!e.hasOwnProperty(t)||iT.isEmptyOrZeroLength(e[t])){if(r===Sf.OPERATIONS_ENUM.INSERT||r===Sf.OPERATIONS_ENUM.UPSERT){e[t]=tj.v4();return}throw Gw.error("Update transaction aborted due to record with no hash value:",e),Tf(new Error,gf.RECORD_MISSING_HASH_ERR,Rf.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Sf.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Gw.error(e),Tf(new Error,gf.HASH_VAL_LENGTH_ERR,Rf.BAD_REQUEST,void 0,void 0,!0)}a(ij,"validateHash")});var Fw=T((rme,xw)=>{"use strict";var oT=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};xw.exports=oT});var Vw=T((sme,$w)=>{"use strict";var aT=Ve(),oj=x(),kw=Zr().LMDB_ERRORS_ENUM;$w.exports=aj;async function aj(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 aT.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==kw.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await aT.closeEnvironment(global.lmdb_map[n]),await aT.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==kw.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){oj.error(t)}}a(aj,"cleanLMDBMap")});var ui=T((ome,Qw)=>{"use strict";var Eu=require("crypto"),cj=X(),{CONFIG_PARAMS:lj}=D(),Kw="aes-256-cbc",uj=32,_j=16,cT=64,Ww=32,dj=cT+Ww,Yw=new Map;Qw.exports={encrypt:fj,decrypt:Ej,createNatsTableStreamName:hj};function fj(e){let t=Eu.randomBytes(uj),r=Eu.randomBytes(_j),n=Eu.createCipheriv(Kw,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(fj,"encrypt");function Ej(e){let t=e.substr(0,cT),r=e.substr(cT,Ww),n=e.substr(dj,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Eu.createDecipheriv(Kw,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Ej,"decrypt");function hj(e,t){let r=cj.get(lj.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=Yw.get(r);return n||(n=Eu.createHash("md5").update(r).digest("hex"),Yw.set(r,n)),n}a(hj,"createNatsTableStreamName")});var _i=T((lme,zw)=>{"use strict";var cme=ir(),Af=x(),jw=hf(),pj=ui(),Of=K(),{handleHDBError:bf,hdb_errors:mj}=oe(),{HDB_ERROR_MSGS:Nf,HTTP_STATUS_CODES:lT}=mj,Sj=X();Sj.initSync();var{getDatabases:uT}=(ge(),ie(ke));zw.exports={describeAll:Tj,describeTable:yf,describeSchema:gj};async function Tj(e){try{let t=Of.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=uT(),i={},o={},c=[],l=e?.exact_count;for(let u in s){i[u]=!0,!t&&!n&&(o[u]=e.hdb_user.role.permission[u].describe);let d=s[u];for(let f in d)try{let E;if(t||n)E=await yf({schema:u,table:f,exact_count:l});else if(r&&r[u].describe&&r[u].tables[f].describe){let h=r[u].tables[f].attribute_permissions;E=await yf({schema:u,table:f,exact_count:l},h)}E&&c.push(E)}catch(E){Af.error(E)}}let _={};for(let u in c)t||n?(_[c[u].schema]==null&&(_[c[u].schema]={}),_[c[u].schema][c[u].name]=c[u],i[c[u].schema]&&delete i[c[u].schema]):o[c[u].schema]&&(_[c[u].schema]==null&&(_[c[u].schema]={}),_[c[u].schema][c[u].name]=c[u],i[c[u].schema]&&delete i[c[u].schema]);for(let u in i)t||n?_[u]={}:o[u]&&(_[u]={});return _}catch(t){return Af.error("Got an error in describeAll"),Af.error(t),bf(new Error,Nf.DESCRIBE_ALL_ERR)}}a(Tj,"describeAll");async function yf(e,t){Of.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(s=e.hdb_user.role.permission[r].tables[n].attribute_permissions);let i=jw.describe_table(e);if(i)throw i;let c=uT()[r];if(!c)throw bf(new Error,Nf.SCHEMA_NOT_FOUND(e.schema),lT.NOT_FOUND);let l=c[n];if(!l)throw bf(new Error,Nf.TABLE_NOT_FOUND(e.schema,e.table),lT.NOT_FOUND);function _(f){u.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let u=[];if(s){let f={};s.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),l.attributes.forEach(E=>{f[E.name]&&_(E)})}else l.attributes?.forEach(f=>_(f));let d={schema:r,name:l.tableName,hash_attribute:l.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:u};d.clustering_stream_name=pj.createNatsTableStreamName(d.schema,d.name);try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=l.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&l.indices.__updatedtime__)for(let h of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){Af.warn(`unable to stat table dbi due to ${f}`)}return d}a(yf,"descTable");async function gj(e){Of.transformReq(e);let t=jw.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 n=e.schema.toString(),i=uT()[n];if(!i)throw bf(new Error,Nf.SCHEMA_NOT_FOUND(e.schema),lT.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Of.isEmpty(l)||l.describe){let _=await yf({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(gj,"describeSchema")});var Mn=T((fme,tC)=>{var Rj=ci(),{callbackify:Xw,promisify:Aj}=require("util"),{getDatabases:Zw}=(ge(),ie(ke));tC.exports={setSchemaDataToGlobal:Jw,getTableSchema:Oj,getSystemSchema:bj,setSchemaDataToGlobalAsync:Aj(Jw)};var eC=_i(),_me=Xw(eC.describeAll),dme=Xw(eC.describeTable);function Jw(e){global.hdb_schema=Zw(),e&&e()}a(Jw,"setSchemaDataToGlobal");function Oj(e,t,r){let n=Zw()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(Oj,"getTableSchema");function bj(){return Rj}a(bj,"getSystemSchema")});var yr=T((hme,iC)=>{"use strict";var wf=nT(),Xt=K(),Nj=require("util"),Cf=Un(),yj=Mn(),rC=x(),{handleHDBError:Zo,hdb_errors:Ij}=oe(),{HTTP_STATUS_CODES:ea}=Ij,wj=Nj.promisify(yj.getTableSchema),Cj="updated",nC="inserted",sC="upserted";iC.exports={insert:Lj,update:Pj,upsert:Mj,validation:Dj,flush:Uj};async function Dj(e){if(Xt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Xt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Xt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await wj(e.schema,e.table),r=wf(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Xt.isEmptyOrZeroLength(c[n]))throw rC.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(!Xt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw rC.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Xt.isEmpty(c[n])&&c[n]!==""&&s.has(Xt.autoCast(c[n]))&&(c.skip=!0),s.add(Xt.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(Dj,"validation");async function Lj(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=wf(e);if(t)throw Zo(new Error,t.message,ea.BAD_REQUEST);Xt.transformReq(e);let r=Xt.checkSchemaTableExist(e.schema,e.table);if(r)throw Zo(new Error,r,ea.BAD_REQUEST);let n=await Cf.createRecords(e);return If(nC,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(Lj,"insertData");async function Pj(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=wf(e);if(t)throw Zo(new Error,t.message,ea.BAD_REQUEST);Xt.transformReq(e);let r=Xt.checkSchemaTableExist(e.schema,e.table);if(r)throw Zo(new Error,r,ea.BAD_REQUEST);let n=await Cf.updateRecords(e);return Xt.isEmpty(n.existing_rows)?If(Cj,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):If(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Pj,"updateData");async function Mj(e){if(e.operation!=="upsert")throw Zo(new Error,"invalid operation, must be upsert",ea.INTERNAL_SERVER_ERROR);let t=wf(e);if(t)throw Zo(new Error,t.message,ea.BAD_REQUEST);Xt.transformReq(e);let r=Xt.checkSchemaTableExist(e.schema,e.table);if(r)throw Zo(new Error,r,ea.BAD_REQUEST);let n=await Cf.upsertRecords(e);return If(sC,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(Mj,"upsertData");function If(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===nC?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===sC?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(If,"returnObject");function Uj(e){return Xt.transformReq(e),Cf.flush(e.schema,e.table)}a(Uj,"flush")});var dT=T((mme,cC)=>{var vj=tt(),_T=require("joi"),{hdb_table:Bj,hdb_database:oC}=ws(),aC={schema:oC,database:oC,table:Bj},Hj={date:_T.date().iso().required()},Gj={timestamp:_T.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};cC.exports=function(e,t){let r=t==="timestamp"?{...aC,...Gj}:{...aC,...Hj},n=_T.object(r);return vj.validateBySchema(e,n)}});var _C=T((Sme,uC)=>{var qj=tt(),fT=require("joi"),{hdb_table:xj,hdb_database:lC}=ws(),Fj=fT.object({schema:lC,database:lC,table:xj,hash_values:fT.array().required(),ids:fT.array()});uC.exports=function(e){return qj.validateBySchema(e,Fj)}});var mT=T((Tme,dC)=>{"use strict";var ET=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},hT=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},pT=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};dC.exports={InsertObject:ET,NoSQLSeachObject:hT,DeleteResponseObject:pT}});var na=T((Rme,mC)=>{"use strict";var EC=dT(),kj=_C(),ta=K(),fC=require("moment"),hC=x(),{promisify:$j,callbackify:Vj}=require("util"),ra=D(),Yj=Mn(),ST=$j(Yj.getTableSchema),TT=Un(),{DeleteResponseObject:Kj}=mT(),{handleHDBError:ro,hdb_errors:Wj}=oe(),{HDB_ERROR_MSGS:Df,HTTP_STATUS_CODES:no}=Wj,Qj="records successfully deleted",jj=Vj(pC);mC.exports={delete:jj,deleteRecord:pC,deleteFilesBefore:zj,deleteAuditLogsBefore:Jj};async function zj(e){let t=EC(e,"date");if(t)throw ro(t,t.message,no.BAD_REQUEST,void 0,void 0,!0);if(ta.transformReq(e),!fC(e.date,fC.ISO_8601).isValid())throw ro(new Error,Df.INVALID_DATE,no.BAD_REQUEST,ra.LOG_LEVELS.ERROR,Df.INVALID_DATE,!0);let n=ta.checkSchemaTableExist(e.schema,e.table);if(n)throw ro(new Error,n,no.NOT_FOUND,ra.LOG_LEVELS.ERROR,n,!0);let s=await TT.deleteRecordsBefore(e);if(await ST(e.schema,e.table),hC.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(zj,"deleteFilesBefore");async function Jj(e){let t=EC(e,"timestamp");if(t)throw ro(t,t.message,no.BAD_REQUEST,void 0,void 0,!0);if(ta.transformReq(e),isNaN(e.timestamp))throw ro(new Error,Df.INVALID_VALUE("Timestamp"),no.BAD_REQUEST,ra.LOG_LEVELS.ERROR,Df.INVALID_VALUE("Timestamp"),!0);let r=ta.checkSchemaTableExist(e.schema,e.table);if(r)throw ro(new Error,r,no.NOT_FOUND,ra.LOG_LEVELS.ERROR,r,!0);let n=await TT.deleteAuditLogsBefore(e);return await ST(e.schema,e.table),hC.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(Jj,"deleteAuditLogsBefore");async function pC(e){e.ids&&(e.hash_values=e.ids);let t=kj(e);if(t)throw ro(t,t.message,no.BAD_REQUEST,void 0,void 0,!0);ta.transformReq(e);let r=ta.checkSchemaTableExist(e.schema,e.table);if(r)throw ro(new Error,r,no.NOT_FOUND,ra.LOG_LEVELS.ERROR,r,!0);try{await ST(e.schema,e.table);let n=await TT.deleteRecords(e);return ta.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Qj}`),n}catch(n){if(n.message===ra.SEARCH_NOT_FOUND_MESSAGE){let s=new Kj;return s.message=ra.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(pC,"deleteRecord")});var Lf=T((Ome,gC)=>{var Xj=require("crypto"),SC=9;function Zj(e){let t=tz(SC),r=TC(e+t);return t+r}a(Zj,"createHash");function ez(e,t){let r=e?.substr(0,SC),n=r+TC(t+r);return e===n}a(ez,"validateHash");function tz(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(tz,"generateSalt");function TC(e){return Xj.createHash("md5").update(e).digest("hex")}a(TC,"md5");gC.exports={hash:Zj,validate:ez}});var AC=T((Nme,RC)=>{var gT=tt(),or={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 rz(e){return or.password.presence=!0,or.username.presence=!0,or.role.presence=!0,or.active.presence=!0,gT.validateObject(e,or)}a(rz,"addUserValidation");function nz(e){return or.password.presence=!1,or.username.presence=!0,or.role.presence=!1,or.active.presence=!1,gT.validateObject(e,or)}a(nz,"alterUserValidation");function sz(e){return or.password.presence=!1,or.username.presence=!0,or.role.presence=!1,or.active.presence=!1,gT.validateObject(e,or)}a(sz,"dropUserValidation");RC.exports={addUserValidation:rz,alterUserValidation:nz,dropUserValidation:sz}});var Xe=T((wme,bC)=>{"use strict";var{platform:Ime}=require("os"),iz="nats-server.zip",RT="nats-server",oz=process.platform==="win32"?`${RT}.exe`:RT,az=/^[^\s.,*>]+$/,OC="__request__",cz=a(e=>`${e}.${OC}`,"REQUEST_SUBJECT"),lz={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},uz={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},_z={HUB:"hub.pid",LEAF:"leaf.pid"},dz={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},fz={SUCCESS:"success",ERROR:"error"},Ez={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},hz={TXN:"txn",MSGID:"msgid"},dc={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},pz={[dc.ERR]:1,[dc.WRN]:2,[dc.INF]:3,[dc.DBG]:4,[dc.TRC]:5},mz={debug:"-D",trace:"-DVV"};bC.exports={NATS_SERVER_ZIP:iz,NATS_SERVER_NAME:RT,NATS_BINARY_NAME:oz,PID_FILES:_z,NATS_CONFIG_FILES:uz,SERVER_SUFFIX:dz,NATS_TERM_CONSTRAINTS_RX:az,REQUEST_SUFFIX:OC,UPDATE_REMOTE_RESPONSE_STATUSES:fz,CLUSTER_STATUS_STATUSES:Ez,REQUEST_SUBJECT:cz,SUBJECT_PREFIXES:hz,MSG_HEADERS:lz,LOG_LEVELS:dc,LOG_LEVEL_FLAGS:mz,LOG_LEVEL_HIERARCHY:pz}});var AT=T((Dme,NC)=>{"use strict";var Sz={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,`\r
2
+ "use strict";var jV=Object.create;var Bl=Object.defineProperty;var zV=Object.getOwnPropertyDescriptor;var JV=Object.getOwnPropertyNames;var XV=Object.getPrototypeOf,ZV=Object.prototype.hasOwnProperty;var a=(e,t)=>Bl(e,"name",{value:t,configurable:!0});var be=(e,t)=>()=>(e&&(t=e(e=0)),t);var g=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Fe=(e,t)=>{for(var r in t)Bl(e,r,{get:t[r],enumerable:!0})},_y=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of JV(t))!ZV.call(e,s)&&s!==r&&Bl(e,s,{get:()=>t[s],enumerable:!(n=zV(t,s))||n.enumerable});return e};var B=(e,t,r)=>(r=e!=null?jV(XV(e)):{},_y(t||!e||!e.__esModule?Bl(r,"default",{value:e,enumerable:!0}):r,e)),ie=e=>_y(Bl({},"__esModule",{value:!0}),e);var Ey=g((Nhe,fy)=>{var eY=require("fast-glob"),{statSync:Jm,existsSync:Xm,readFileSync:tY,writeFileSync:rY}=require("fs"),{spawnSync:nY,spawn:sY,execFileSync:bhe}=require("child_process"),{isMainThread:iY}=require("worker_threads"),{join:zi,relative:dy}=require("path"),{PACKAGE_ROOT:Xn}=D(),{tmpdir:oY,platform:aY}=require("os");require("source-map-support").install();var cY=["resources","server","dataLayer","components"],Hl="ts-build",Zm,lY=__filename.endsWith("tsBuild.js");if(lY){if(iY){let r;try{Jm(zi(Xn,Hl)),r=!0}catch{}if(r)for(let n of eY.sync(cY.map(s=>s+"/**/*.ts"),{cwd:Xn})){let s=0,i=0;try{s=Jm(zi(Xn,n)).mtimeMs-5e3,i=Jm(zi(Xn,Hl,n.replace(/.ts$/,".js"))).mtimeMs}catch{}if(s>i){console.warn(`TypeScript ${n} is not compiled`+(i?` (TS source file was modified at ${new Date(s)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),Zm=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),Zm=!0;if(Zm){let n=zi(Xn,"node_modules/.bin/tsc");aY()==="win32"&&(n+=".cmd");let s=nY(n,{cwd:Xn});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=zi(oY(),"harperdb-tsc.pid"),o;if(Xm(i))try{process.kill(+tY(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=sY(n,["--watch"],{cwd:Xn,detached:!0,stdio:"ignore"});rY(i,c.pid.toString()),c.unref()}}}}let e=fy.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(Xn)&&!n[0].includes("node_modules")){let i=dy(Xn,n[0]),o;i.startsWith(Hl)?o=zi(Xn,dy(Hl,i)):o=zi(Xn,Hl,i);let c=zi(o,r),l=c+".js";if(Xm(l))return l;if(c.includes(".")&&Xm(c))return c}return t(r,n,s)}}});var D=g((whe,wy)=>{"use strict";var Ln=require("path"),uY=require("fs"),{relative:yhe,join:Ihe}=Ln,{existsSync:_Y}=uY;function dY(){let e=__dirname;for(;!_Y(Ln.join(e,"package.json"));){let t=Ln.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(dY,"getHDBPackageRoot");var Ji=dY(),hy="js",Vd=hy,fY="harperdb-config.yaml",EY="defaultConfig.yaml",hY="hdb",py=`harperdb.${Vd}`,my=`customFunctionsServer.${Vd}`,pY=`restartHdb.${Vd}`,tS="HarperDB",$d="Custom Functions",Yd="Clustering Hub",Kd="Clustering Leaf",mY="Clustering Ingest Service",SY="Clustering Reply Service",TY="foreground.pid",gY="hdb.pid",RY="data",AY={HDB:tS,CLUSTERING_HUB:Yd,CLUSTERING_LEAF:Kd,CLUSTERING_INGEST_SERVICE:mY,CLUSTERING_REPLY_SERVICE:SY,CUSTOM_FUNCTIONS:$d,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"},OY={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},bY={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},NY={harperdb:tS,"clustering hub":Yd,"clustering leaf":Kd,"custom functions":$d,custom_functions:$d,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},yY={CLUSTERING_HUB_PROC_DESCRIPTOR:Yd,CLUSTERING_LEAF_PROC_DESCRIPTOR:Kd},eS={HDB:Ln.join(Ji,"server/harperdb"),CUSTOM_FUNCTIONS:Ln.join(Ji,"server/customFunctions"),CLUSTERING_HUB:Ln.join(Ji,"server/nats"),CLUSTERING_LEAF:Ln.join(Ji,"server/nats")},IY={HDB:Ln.join(eS.HDB,py),CUSTOM_FUNCTIONS:Ln.join(eS.CUSTOM_FUNCTIONS,my)},wY={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Ln.join(Ji,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Ln.join(Ji,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Ln.join(Ji,"launchServiceScripts/launchUpdateNodes4-0-0.js")},CY={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Sy="support@harperdb.io",DY="customer-success@harperdb.io",Ty=1,LY=4141,gy="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",PY="https://www.harperdb.io/product",MY=`For support, please submit a request at ${gy} or contact ${Sy}`,Ry=`For license support, please contact ${DY}`,UY="None of the specified records were found.",vY="hash attribute not found",BY=`Your current license only supports ${Ty} role. ${Ry}`,HY="Your current license only supports 3 connections to a node.",GY="127.0.0.1",qY=1,xY=/^\.$/,FY=/^\.\.$/,kY="U+002E",$Y=/\//g,VY="U+002F",YY=/U\+002F/g,KY=/^U\+002E$/,WY=/^U\+002EU\+002E$/,QY="d",jY=999999,zY="*",JY="--max-old-space-size=",XY="system",ZY="__hdb_hash",e1=".harperdb",t1=".hdb",r1="keys",n1="hdb_boot_properties.file",s1=".updateConfig.json",i1="SIGTSTP",o1=24,a1=6e4,c1=448,l1="blob",u1="trash",_1="database",d1="schema",f1="transactions",E1=".count",h1="id",p1="PROCESS_NAME",Ay={SETTINGS_PATH_KEY:"settings_path"},Oy=require("lodash"),m1={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",HDB_CONFIG:"HDB_CONFIG",OPERATIONSAPI_NETWORK_SECUREPORT:"OPERATIONSAPI_NETWORK_SECUREPORT",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},S1={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},T1={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},g1={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"},R1={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"},Xr="hdb_internal:",A1={CREATE_SCHEMA:Xr+"create_schema",CREATE_TABLE:Xr+"create_table",CREATE_ATTRIBUTE:Xr+"create_attribute",ADD_USER:Xr+"add_user",ALTER_USER:Xr+"alter_user",DROP_USER:Xr+"drop_user",HDB_NODES:Xr+"hdb_nodes",HDB_USERS:Xr+"hdb_users",HDB_WORKERS:Xr+"hdb_workers",CATCHUP:Xr+"catchup",SCHEMA_CATCHUP:Xr+"schema_catchup",WORKER_ROOM:Xr+"cluster_workers"},O1={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"},b1="060493.ks",N1=".license",y1={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},ee={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",SET_NODE_REPLICATION:"set_node_replication",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"},I1={CSV:".csv",JSON:".json"},w1={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},C1={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Gl={};Gl[ee.INSERT]=ee.INSERT;Gl[ee.UPDATE]=ee.UPDATE;Gl[ee.UPSERT]=ee.UPSERT;Gl[ee.DELETE]=ee.DELETE;var xe=Object.create(null);xe[ee.DESCRIBE_ALL]=ee.DESCRIBE_ALL;xe[ee.DESCRIBE_TABLE]=ee.DESCRIBE_TABLE;xe[ee.DESCRIBE_SCHEMA]=ee.DESCRIBE_SCHEMA;xe[ee.READ_LOG]=ee.READ_LOG;xe[ee.ADD_NODE]=ee.ADD_NODE;xe[ee.LIST_USERS]=ee.LIST_USERS;xe[ee.LIST_ROLES]=ee.LIST_ROLES;xe[ee.USER_INFO]=ee.USER_INFO;xe[ee.SQL]=ee.SQL;xe[ee.GET_JOB]=ee.GET_JOB;xe[ee.SEARCH_JOBS_BY_START_DATE]=ee.SEARCH_JOBS_BY_START_DATE;xe[ee.DELETE_FILES_BEFORE]=ee.DELETE_FILES_BEFORE;xe[ee.EXPORT_LOCAL]=ee.EXPORT_LOCAL;xe[ee.EXPORT_TO_S3]=ee.EXPORT_TO_S3;xe[ee.CLUSTER_STATUS]=ee.CLUSTER_STATUS;xe[ee.REMOVE_NODE]=ee.REMOVE_NODE;xe[ee.RESTART]=ee.RESTART;xe[ee.CUSTOM_FUNCTIONS_STATUS]=ee.CUSTOM_FUNCTIONS_STATUS;xe[ee.GET_CUSTOM_FUNCTIONS]=ee.GET_CUSTOM_FUNCTIONS;xe[ee.GET_CUSTOM_FUNCTION]=ee.GET_CUSTOM_FUNCTION;xe[ee.SET_CUSTOM_FUNCTION]=ee.SET_CUSTOM_FUNCTION;xe[ee.DROP_CUSTOM_FUNCTION]=ee.DROP_CUSTOM_FUNCTION;xe[ee.ADD_CUSTOM_FUNCTION_PROJECT]=ee.ADD_CUSTOM_FUNCTION_PROJECT;xe[ee.DROP_CUSTOM_FUNCTION_PROJECT]=ee.DROP_CUSTOM_FUNCTION_PROJECT;xe[ee.PACKAGE_CUSTOM_FUNCTION_PROJECT]=ee.PACKAGE_CUSTOM_FUNCTION_PROJECT;xe[ee.DEPLOY_CUSTOM_FUNCTION_PROJECT]=ee.DEPLOY_CUSTOM_FUNCTION_PROJECT;var D1={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},L1={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},by={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"},P1=Oy.invert(by),M1={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"},w={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_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",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_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",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_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_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",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",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",CLONED:"cloned"},Ny={settings_path:Ay.SETTINGS_PATH_KEY,hdb_root_key:w.ROOTPATH,hdb_root:w.ROOTPATH,rootpath:w.ROOTPATH,server_port_key:w.OPERATIONSAPI_NETWORK_PORT,server_port:w.OPERATIONSAPI_NETWORK_PORT,cert_key:w.TLS_CERTIFICATE,certificate:w.TLS_CERTIFICATE,private_key_key:w.TLS_PRIVATEKEY,private_key:w.TLS_PRIVATEKEY,http_secure_enabled_key:w.OPERATIONSAPI_NETWORK_HTTPS,https_on:w.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:w.OPERATIONSAPI_NETWORK_CORS,cors_on:w.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:w.LOGGING_LEVEL,log_level:w.LOGGING_LEVEL,log_path_key:w.LOGGING_ROOT,log_path:w.LOGGING_ROOT,clustering_node_name_key:w.CLUSTERING_NODENAME,node_name:w.CLUSTERING_NODENAME,clustering_enabled_key:w.CLUSTERING_ENABLED,clustering:w.CLUSTERING_ENABLED,max_http_threads:w.THREADS_COUNT,max_hdb_processes:w.THREADS_COUNT,server_timeout_key:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:w.LOGGING_AUDITLOG,disable_transaction_log:w.LOGGING_AUDITLOG,operation_token_timeout_key:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:w.HTTP_PORT,custom_functions_port:w.HTTP_PORT,custom_functions_directory_key:w.COMPONENTSROOT,custom_functions_directory:w.COMPONENTSROOT,max_custom_function_processes:w.THREADS_COUNT,log_to_file:w.LOGGING_FILE,log_to_stdstreams:w.LOGGING_STDSTREAMS,local_studio_on:w.LOCALSTUDIO_ENABLED,clustering_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:w.CLUSTERING_USER,clustering_enabled:w.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:w.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:w.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:w.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:w.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:w.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:w.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:w.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxconsumemsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS,clustering_leafserver_streams_maxingestthreads:w.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS,clustering_leafserver_streams_maxmsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:w.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:w.CLUSTERING_NODENAME,clustering_tls_certificate:w.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:w.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:w.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:w.CLUSTERING_TLS_INSECURE,clustering_tls_verify:w.CLUSTERING_TLS_VERIFY,clustering_loglevel:w.CLUSTERING_LOGLEVEL,clustering_republishmessages:w.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:w.CLUSTERING_DATABASELEVEL,customfunctions_network_port:w.HTTP_PORT,customfunctions_tls_certificate:w.TLS_CERTIFICATE,customfunctions_network_cors:w.HTTP_CORS,customfunctions_network_corsaccesslist:w.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:w.HTTP_HEADERSTIMEOUT,customfunctions_network_https:w.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:w.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:w.HTTP_TIMEOUT,http_threads:w.THREADS_COUNT,threads:w.THREADS_COUNT,threads_count:w.THREADS_COUNT,threads_debug:w.THREADS_DEBUG,threads_debug_startingport:w.THREADS_DEBUG_STARTINGPORT,threads_debug_port:w.THREADS_DEBUG_PORT,threads_debug_host:w.THREADS_DEBUG_HOST,threads_debug_waitfordebugger:w.THREADS_DEBUG_WAITFORDEBUGGER,threads_maxheapmemory:w.THREADS_MAXHEAPMEMORY,http_session_affinity:w.HTTP_SESSIONAFFINITY,http_compressionthreshold:w.HTTP_COMPRESSIONTHRESHOLD,http_cors:w.HTTP_CORS,http_corsaccesslist:w.HTTP_CORSACCESSLIST,http_headerstimeout:w.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,http_timeout:w.HTTP_TIMEOUT,http_port:w.HTTP_PORT,http_secureport:w.HTTP_SECUREPORT,http_mtls:w.HTTP_MTLS,http_mtls_user:w.HTTP_MTLS_USER,http_mtls_required:w.HTTP_MTLS_REQUIRED,customfunctions_processes:w.THREADS_COUNT,customfunctions_root:w.COMPONENTSROOT,localstudio_enabled:w.LOCALSTUDIO_ENABLED,logging_file:w.LOGGING_FILE,logging_level:w.LOGGING_LEVEL,logging_root:w.LOGGING_ROOT,logging_rotation_enabled:w.LOGGING_ROTATION_ENABLED,logging_rotation_compress:w.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:w.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:w.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:w.LOGGING_ROTATION_PATH,logging_stdstreams:w.LOGGING_STDSTREAMS,logging_auditlog:w.LOGGING_AUDITLOG,logging_auditretention:w.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:w.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:w.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:w.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:w.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:w.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:w.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:w.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:w.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:w.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:w.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:w.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:w.ROOTPATH,databases:w.DATABASES,storage_path:w.STORAGE_PATH,ignorescripts:w.IGNORE_SCRIPTS,mqtt_network_port:w.MQTT_NETWORK_PORT,mqtt_websocket:w.MQTT_WEBSOCKET,mqtt_network_secureport:w.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:w.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:w.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:w.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:w.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:w.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:w.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:w.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:w.AUTHENTICATION_CACHETTL,authentication_enablesessions:w.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:w.COMPONENTSROOT,tls_certificate:w.TLS_CERTIFICATE,tls_privatekey:w.TLS_PRIVATEKEY,tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,tls_ciphers:w.TLS_CIPHERS};for(let e in w){let t=w[e];Ny[t.toLowerCase()]=t}var U1={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},v1={csv_file_load:"csv_file_load",csv_data_load:ee.CSV_DATA_LOAD,csv_url_load:ee.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"},B1={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"},H1={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},G1={VERSION_DEFAULT:"2.2.0"},q1={DEVELOPMENT:8192,DEFAULT:512},x1={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"},F1={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"},k1={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},yy={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},$1=Symbol("metadata"),V1="__clustering__",Y1=Object.values(yy),K1=15984864e5,Iy={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},W1=Oy.invert(Iy),Q1={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"},j1=111,z1=`\r
3
+ `,J1={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},X1=["*","%"],Z1="unauthorized_access",eK="func_val",tK={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},rK={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},nK={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",NATS_CONSUMER_UPDATE:"nats_consumer_update"},sK={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},iK={HTTP:"http"},oK={STOPPED:"stopped",ONLINE:"online"},aK="3.x.x",cK={SUCCESS:"success",FAILURE:"failure"},lK={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};wy.exports={LOCAL_HARPERDB_OPERATIONS:xe,HDB_SUPPORT_ADDRESS:Sy,HDB_SUPPORT_URL:gy,HDB_PRICING_URL:PY,SUPPORT_HELP_MSG:MY,LICENSE_HELP_MSG:Ry,HDB_PROC_NAME:py,HDB_PROC_DESCRIPTOR:tS,CLUSTERING_LEAF_PROC_DESCRIPTOR:Kd,CLUSTERING_HUB_PROC_DESCRIPTOR:Yd,SYSTEM_SCHEMA_NAME:XY,HASH_FOLDER_NAME:ZY,HDB_HOME_DIR_NAME:e1,UPDATE_FILE_NAME:s1,LICENSE_KEY_DIR_NAME:r1,BOOT_PROPS_FILE_NAME:n1,JOB_TYPE_ENUM:v1,JOB_STATUS_ENUM:y1,SYSTEM_TABLE_NAMES:g1,SYSTEM_TABLE_HASH_ATTRIBUTES:R1,OPERATIONS_ENUM:ee,VALID_S3_FILE_TYPES:I1,S3_BUCKET_AUTH_KEYS:w1,VALID_SQL_OPS_ENUM:C1,GEO_CONVERSION_ENUM:L1,HDB_SETTINGS_NAMES:by,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:P1,SERVICE_ACTIONS_ENUM:D1,CLUSTER_MESSAGE_TYPE_ENUM:B1,CLUSTER_CONNECTION_DIRECTION_ENUM:H1,CLUSTER_EVENTS_DEFS_ENUM:x1,PERIOD_REGEX:xY,DOUBLE_PERIOD_REGEX:FY,UNICODE_PERIOD:kY,FORWARD_SLASH_REGEX:$Y,UNICODE_FORWARD_SLASH:VY,ESCAPED_FORWARD_SLASH_REGEX:YY,ESCAPED_PERIOD_REGEX:KY,ESCAPED_DOUBLE_PERIOD_REGEX:WY,REG_KEY_FILE_NAME:b1,RESTART_TIMEOUT_MS:a1,HDB_FILE_PERMISSIONS:c1,DATABASES_DIR_NAME:_1,LEGACY_DATABASES_DIR_NAME:d1,TRANSACTIONS_DIR_NAME:f1,LIMIT_COUNT_NAME:E1,ID_ATTRIBUTE_STRING:h1,INSERT_MODULE_ENUM:S1,UPGRADE_JSON_FIELD_NAMES_ENUM:T1,RESTART_CODE:i1,RESTART_CODE_NUM:o1,CLUSTER_OPERATIONS:Gl,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:O1,HDB_INTERNAL_SC_CHANNEL_PREFIX:Xr,INTERNAL_SC_CHANNELS:A1,CLUSTERING_MESSAGE_TYPES:Q1,HDB_FILE_SUFFIX:t1,BLOB_FOLDER_NAME:l1,HDB_TRASH_DIR:u1,ORIGINATOR_SET_VALUE:j1,LICENSE_VALUES:G1,RAM_ALLOCATION_ENUM:q1,TIME_STAMP_NAMES_ENUM:yy,TIME_STAMP_NAMES:Y1,PERMS_UPDATE_RELEASE_TIMESTAMP:K1,SEARCH_NOT_FOUND_MESSAGE:UY,SEARCH_ATTRIBUTE_NOT_FOUND:vY,LICENSE_ROLE_DENIED_RESPONSE:BY,LICENSE_MAX_CONNS_REACHED:HY,BASIC_LICENSE_MAX_NON_CU_ROLES:Ty,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:LY,VALUE_SEARCH_COMPARATORS:Iy,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:W1,LICENSE_FILE_NAME:N1,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:F1,NEW_LINE:z1,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:qY,MOMENT_DAYS_TAG:QY,API_TURNOVER_SEC:jY,LOOPBACK:GY,CODE_EXTENSION:Vd,WILDCARD_SEARCH_VALUE:zY,NODE_ERROR_CODES:k1,JAVASCRIPT_EXTENSION:hy,PERMS_CRUD_ENUM:J1,UNAUTHORIZED_PERMISSION_NAME:Z1,SEARCH_WILDCARDS:X1,FUNC_VAL:eK,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:tK,JWT_ENUM:rK,CLUSTERING_FLAG:V1,ITC_EVENT_TYPES:nK,CUSTOM_FUNCTION_PROC_NAME:my,CUSTOM_FUNCTION_PROC_DESCRIPTOR:$d,SERVICES:sK,THREAD_TYPES:iK,MEM_SETTING_KEY:JY,HDB_RESTART_SCRIPT:pY,PROCESS_DESCRIPTORS:AY,SERVICE_SERVERS:IY,SERVICE_SERVERS_CWD:eS,PROCESS_DESCRIPTORS_VALIDATE:NY,LAUNCH_SERVICE_SCRIPTS:wY,LOG_LEVELS:bY,PROCESS_NAME_ENV_PROP:p1,LOG_NAMES:OY,PM2_PROCESS_STATUSES:oK,CONFIG_PARAM_MAP:Ny,CONFIG_PARAMS:w,HDB_CONFIG_FILE:fY,HDB_DEFAULT_CONFIG_FILE:EY,ROLE_TYPES_ENUM:CY,BOOT_PROP_PARAMS:Ay,INSTALL_PROMPTS:m1,HDB_ROOT_DIR_NAME:hY,CLUSTERING_PROCESSES:yY,FOREGROUND_PID_FILE:TY,PACKAGE_ROOT:Ji,PRE_4_0_0_VERSION:aK,DATABASES_PARAM_CONFIG:U1,METADATA_PROPERTY:$1,AUTH_AUDIT_STATUS:cK,AUTH_AUDIT_TYPES:lK,HDB_PID_FILE:gY,DEFAULT_DATABASE_NAME:RY,LEGACY_CONFIG_PARAMS:M1};Ey()});var Xi=g((Dhe,Ly)=>{"use strict";var Cy=require("minimist");Ly.exports=uK;function uK(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=Dy(process.env),n=Dy(Cy(process.argv))):(r=process.env,n=Cy(process.argv));let s={};for(let i=0,o=e.length;i<o;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}a(uK,"assignCMDENVVariables");function Dy(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(Dy,"objKeysToLowerCase")});var x=g((Phe,cS)=>{"use strict";var Yo=require("fs-extra"),{workerData:_K,threadId:dK}=require("worker_threads"),ii=require("path"),Uy=require("yaml"),vy=require("properties-reader"),At=D(),Py=Xi(),fK=require("os"),{PACKAGE_ROOT:nS}=D(),{_assignPackageExport:EK}=require("../index"),xl={};for(let e in console)xl[e]||(xl[e]=console[e]);var Rr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},By={STDOUT:"stdOut",STDERR:"stdErr"},hK=ii.join(nS,"logs"),pK=ii.join(nS,"config/yaml/",At.HDB_DEFAULT_CONFIG_FILE),mK=1e4,si,ys,gr,Wd,Qd,Fl,ac,ql;ql===void 0&&Hy();cS.exports={notify:xy,fatal:Fy,error:kl,warn:aS,info:jd,debug:oS,trace:iS,setLogLevel:bK,log_level:gr,loggerWithTag:SK,suppressLogging:TK,initLogSettings:Hy,setupConsoleLogging:Gy,logCustomLevel:AK,closeLogFile:sS,getLogFilePath:()=>Fl,OUTPUTS:By,AuthAuditLog:IK};EK("logger",cS.exports);function Hy(e=!1){try{if(ql===void 0||e){sS();let t=OK(),r=Py(["ROOTPATH"]);try{ql=vy(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Yo.pathExistsSync(ii.join(r.ROOTPATH,At.HDB_CONFIG_FILE)))throw n}({level:gr,config_log_path:Qd,to_file:si,to_stream:ys}=NK(r.ROOTPATH?ii.join(r.ROOTPATH,At.HDB_CONFIG_FILE):ql.get("settings_path"))),Wd=At.LOG_NAMES.HDB,Fl=ii.join(Qd,Wd)}}catch(t){if(ql=void 0,t.code===At.NODE_ERROR_CODES.ENOENT||t.code===At.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=Py(Object.keys(At.CONFIG_PARAM_MAP),!0);for(let o in r){let c=At.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===At.CONFIG_PARAMS.LOGGING_LEVEL){gr=l;continue}if(c===At.CONFIG_PARAMS.LOGGING_STDSTREAMS){ys=l;continue}c===At.CONFIG_PARAMS.LOGGING_FILE&&(si=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=yK();si=si===void 0?s:si,si=My(si),ys=ys===void 0?i:ys,ys=My(ys),gr=gr===void 0?n:gr,Qd=hK,Wd=At.LOG_NAMES.INSTALL,Fl=ii.join(Qd,Wd);return}throw kl("Error initializing log settings"),kl(t),t}process.env.DEV_MODE&&(ys=!0),Gy()}a(Hy,"initLogSettings");var rS=!0;function Gy(){oc("error",kl),oc("warn",aS),oc("log",jd),oc("info",jd),oc("debug",oS),oc("trace",iS)}a(Gy,"setupConsoleLogging");function oc(e,t){console[e]=function(...r){if(rS&&t(...r),!/PM2 log:|App \[/.test(r[0]))return xl[e](...r)}}a(oc,"logConsole");function SK(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(xy),fatal:r(Fy),error:r(kl),warn:r(aS),info:r(jd),debug:r(oS),trace:r(iS)};function r(n){return function(...s){return n(t,...s)}}}a(SK,"loggerWithTag");function TK(e){try{rS=!1,e()}finally{rS=!0}}a(TK,"suppressLogging");var gK=_K?.name?.replace(/ /g,"-")||"main";function oi(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-1,o=[e],c=0,l;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(l=t[0]?.serviceName,c++)),o.unshift(l||gK+"/"+dK);c<s;c++){let _=t[c];_ instanceof Error&&_.stack?n+=_.stack:typeof _=="object"?n+=JSON.stringify(_):n+=_,c<i&&(n+=" ")}return`${r} [${o.join("] [")}]: ${n}
4
+ `}a(oi,"createLogRecord");function $l(e){si&&qy(e),ys&&process.stdout.write(e)}a($l,"logStdOut");function zd(e){si&&qy(e),ys&&process.stderr.write(e)}a(zd,"logStdErr");function qy(e){RK(),ac?Yo.appendFileSync(ac,e):xl.log(e)}a(qy,"logToFile");function sS(){try{Yo.closeSync(ac)}catch{}ac=null}a(sS,"closeLogFile");function RK(){if(!ac){try{if(!Fl)debugger;ac=Yo.openSync(Fl,"a")}catch(e){xl.error(e)}setTimeout(()=>{sS()},mK).unref()}}a(RK,"openLogFile");function jd(...e){Rr[gr]<=Rr.info&&$l(oi("info",e))}a(jd,"info");function iS(...e){Rr[gr]<=Rr.trace&&$l(oi("trace",e))}a(iS,"trace");function kl(...e){Rr[gr]<=Rr.error&&zd(oi("error",e))}a(kl,"error");function oS(...e){Rr[gr]<=Rr.debug&&$l(oi("debug",e))}a(oS,"debug");function xy(...e){Rr[gr]<=Rr.notify&&$l(oi("notify",e))}a(xy,"notify");function Fy(...e){Rr[gr]<=Rr.fatal&&zd(oi("fatal",e))}a(Fy,"fatal");function aS(...e){Rr[gr]<=Rr.warn&&zd(oi("warn",e))}a(aS,"warn");function AK(e,t,...r){t===By.STDERR?zd(oi(e,r)):$l(oi(e,r))}a(AK,"logCustomLevel");function OK(){let e;try{e=fK.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ii.join(e,At.HDB_HOME_DIR_NAME,At.BOOT_PROPS_FILE_NAME);return Yo.existsSync(t)||(t=ii.join(nS,"utility/hdb_boot_properties.file")),t}a(OK,"getPropsFilePath");function bK(e){gr=e}a(bK,"setLogLevel");function My(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(My,"autoCastBoolean");function NK(e){try{if(e.includes("config/settings.js")){let o=vy(e);return{level:o.get(At.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ii.dirname(o.get(At.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(At.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(At.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Uy.parseDocument(Yo.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===At.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(NK,"getLogConfig");function yK(){try{let e=Uy.parseDocument(Yo.readFileSync(pK,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(yK,"getDefaultConfig");function IK(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}a(IK,"AuthAuditLog")});var lS=g((Uhe,ky)=>{"use strict";var wK=require("util"),CK=require("path"),DK=require("child_process"),LK=wK.promisify(DK.execFile),PK=1e3*1e3*10;ky.exports={findPs:MK};async function MK(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await LK("ps",["wwxo",`pid,${r}`],{maxBuffer:PK});for(let s of n.trim().split(`
5
+ `).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.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,n])=>({pid:Number.parseInt(r,10),name:CK.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(MK,"findPs")});var at=g((Bhe,Vy)=>{"use strict";var UK="__dbis__",vK="__txns__",BK="__environment_name__",HK="__dbi_defintion__",GK={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"},qK=["__createdtime__","__updatedtime__"],xK="\uFFFF",$y={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},FK=Object.values($y);Vy.exports={AUDIT_STORE_NAME:vK,INTERNAL_DBIS_NAME:UK,DBI_DEFINITION_NAME:HK,SEARCH_TYPES:GK,TIMESTAMP_NAMES:qK,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:BK,TRANSACTIONS_DBI_NAMES_ENUM:$y,TRANSACTIONS_DBIS:FK,OVERFLOW_MARKER:xK}});var Zr=g((Hhe,Zy)=>{"use strict";var Yy=D(),Ky=at(),Wy={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},Qy=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),jy={500:Qy("There was an error processing your request."),400:"Invalid request"},kK=jy[Wy.INTERNAL_SERVER_ERROR],$K={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.`},VK={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},YK={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"},KK={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 ${Ky.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Ky.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"},WK={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Yy.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 ${Yy.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"},zy={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"},QK={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."},jK={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`},zK={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"},JK={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},XK={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`},Jy={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.`},Xy={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}`},ZK={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."},eW={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},tW={...zy,...YK,...$K,...QK,...jK,...zK,...JK,...XK,...WK,...Jy,...Xy,...ZK,...eW,...VK};Zy.exports={CHECK_LOGS_WRAPPER:Qy,HDB_ERROR_MSGS:tW,DEFAULT_ERROR_MSGS:jy,DEFAULT_ERROR_RESP:kK,HTTP_STATUS_CODES:Wy,LMDB_ERRORS_ENUM:KK,AUTHENTICATION_ERROR_MSGS:zy,VALIDATION_ERROR_MSGS:Jy,ITC_ERRORS:Xy}});var oe=g((qhe,rI)=>{"use strict";var cc=Zr(),rW=x(),nW=D(),Jd=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,eI),this.statusCode=n||cc.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(cc.DEFAULT_ERROR_MSGS[n]?cc.DEFAULT_ERROR_MSGS[n]:cc.DEFAULT_ERROR_MSGS[cc.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&rW[s](i)}},uS=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}},_S=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function eI(e,t,r,n=nW.LOG_LEVELS.ERROR,s=null,i=!1){if(tI(e))return e;let o=new Jd(e,t,r,n,s);return i&&delete o.stack,o}a(eI,"handleHDBError");function tI(e){return e.__proto__.constructor.name===Jd.name}a(tI,"isHDBError");rI.exports={isHDBError:tI,handleHDBError:eI,ClientError:uS,ServerError:_S,hdb_errors:cc}});var je=g((Fhe,lI)=>{"use strict";var Ql=D(),sW=K(),Ar=X(),jl=require("path"),iW=require("minimist"),nI=require("fs-extra"),sI=require("lodash");Ar.initSync();var{CONFIG_PARAMS:Zi,DATABASES_PARAM_CONFIG:Vl,SYSTEM_SCHEMA_NAME:Xd}=Ql,Yl,Kl,Wl;function iI(){if(Yl!==void 0)return Yl;if(Ar.getHdbBasePath()!==void 0)return Yl=Ar.get(Zi.STORAGE_PATH)||jl.join(Ar.getHdbBasePath(),Ql.DATABASES_DIR_NAME),Yl}a(iI,"getBaseSchemaPath");function oI(){if(Kl!==void 0)return Kl;if(Ar.getHdbBasePath()!==void 0)return Kl=cI(Xd),Kl}a(oI,"getSystemSchemaPath");function aI(){if(Wl!==void 0)return Wl;if(Ar.getHdbBasePath()!==void 0)return Wl=Ar.get(Ql.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||jl.join(Ar.getHdbBasePath(),Ql.TRANSACTIONS_DIR_NAME),Wl}a(aI,"getTransactionAuditStoreBasePath");function oW(e,t){let r=Ar.get(Zi.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||jl.join(aI(),e.toString())}a(oW,"getTransactionAuditStorePath");function cI(e,t){e=e.toString(),t=t&&t.toString();let r=Ar.get(Ql.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||jl.join(iI(),e)}a(cI,"getSchemaPath");function aW(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,iW(process.argv));let n=r[Zi.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!sW.isObject(n))throw o;i=n}for(let o of i){let c=o[Xd];if(!c)continue;let l=Ar.get(Zi.DATABASES);l=l??{};let _=c?.tables?.[t]?.[Vl.PATH];if(_)return sI.set(l,[Xd,Vl.TABLES,t,Vl.PATH],_),Ar.setProperty(Zi.DATABASES,l),_;let u=c?.[Vl.PATH];if(u)return sI.set(l,[Xd,Vl.PATH],u),Ar.setProperty(Zi.DATABASES,l),u}}let s=r[Zi.STORAGE_PATH.toUpperCase()];if(s){if(!nI.pathExistsSync(s))throw new Error(s+" does not exist");let i=jl.join(s,e);return nI.mkdirsSync(i),Ar.setProperty(Zi.STORAGE_PATH,s),i}return oI()}a(aW,"initSystemSchemaPaths");function cW(){Yl=void 0,Kl=void 0,Wl=void 0}a(cW,"resetPaths");lI.exports={getBaseSchemaPath:iI,getSystemSchemaPath:oI,getTransactionAuditStorePath:oW,getTransactionAuditStoreBasePath:aI,getSchemaPath:cI,initSystemSchemaPaths:aW,resetPaths:cW}});var Or=g((Yhe,EI)=>{"use strict";var lW=Zr().LMDB_ERRORS_ENUM,$he=require("lmdb"),uW=at(),Vhe=require("buffer").Buffer,{OVERFLOW_MARKER:uI,MAX_SEARCH_KEY_LENGTH:Zd}=uW,_I=["number","string","symbol","boolean","bigint"];function _W(e){if(e=e?.primaryStore||e,!e)throw new Error(lW.ENV_REQUIRED)}a(_W,"validateEnv");function dW(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(dW,"stringifyData");function fW(e){return e instanceof Date?e.valueOf():e}a(fW,"convertKeyValueToWrite");function EW(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(_I.includes(typeof e))return e.length>Zd?[e.slice(0,Zd)+uI]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(_I.includes(typeof i))i.length>Zd?r.push(i.slice(0,Zd)+uI):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(EW,"getIndexedValues");var ef=0,dI=0;function fI(){dI=Date.now()-performance.now()}a(fI,"adjustStartTime");fI();var hW=6e4;setInterval(fI,hW).unref();function pW(){let e=performance.now()+dI;return e>ef?(ef=e,e):(ef+=488e-6,ef)}a(pW,"getNextMonotonicTime");EI.exports={validateEnv:_W,stringifyData:dW,convertKeyValueToWrite:fW,getNextMonotonicTime:pW,getIndexedValues:EW}});var hI,Zn,dS,zl=be(()=>{hI=require("events"),Zn=class extends hI.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new dS;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)}},dS=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}}}});var Ko={};Fe(Ko,{server:()=>ct});var pI,ct,br=be(()=>{pI=require("../index"),ct={};(0,pI._assignPackageExport)("server",ct)});var hS={};Fe(hS,{loadGQLSchema:()=>TW,start:()=>ES,startOnMainThread:()=>SW});function ES({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:_,StringValueNode:u}=await import("graphql"),d=o(new c(r.toString(),s)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case l.OBJECT_TYPE_DEFINITION:let U=function(v){if(v.kind==="NonNullType"){let j=U(v.type);return j.nullable=!1,j}if(v.kind==="ListType")return{type:"array",elements:U(v.type)};let H={type:v.name?.value};return Object.defineProperty(H,"location",{value:v.loc.startToken}),H};a(U,"getProperty");let R=S.name.value,T=[],A={table:null,database:null,properties:T};f.set(R,A);for(let v of S.directives){if(v.name.value==="table"){for(let k of v.arguments)A[k.name.value]=k.value.value;A.schema&&(A.database=A.schema),A.table||(A.table=R),A.audit&&(A.audit=A.audit!=="false"),A.attributes=A.properties,E.push(A)}if(v.name.value==="sealed"&&(A.sealed=!0),v.name.value==="export"){A.export=!0;for(let k of v.arguments)k.name.value==="name"&&(A.export={name:k.value.value})}}let L=!1;for(let v of S.fields){let k=U(v.type);k.name=v.name.value,T.push(k);for(let H of v.directives)if(H.name.value==="primaryKey")L?console.warn("Can not define two attributes as a primary key"):(k.isPrimaryKey=!0,L=!0);else if(H.name.value==="indexed")k.indexed=!0;else if(H.name.value==="relationship"){let j={};for(let z of H.arguments)j[z.name.value]=z.value.value;k.relationship=j}else if(H.name.value==="createdTime")k.assignCreatedTime=!0;else if(H.name.value==="updatedTime")k.assignUpdatedTime=!0;else if(H.name.value==="expiresAt")k.expiresAt=!0;else if(H.name.value==="allow"){let j=k.authorizedRoles=[];for(let z of H.arguments)z.name.value==="role"&&j.push(z.value.value)}}A.type=R,R==="Query"&&(h=A)}function m(S){let R=f.get(S.type);R?(Object.defineProperty(S,"properties",{value:R.properties}),Object.defineProperty(S,"definition",{value:R})):S.type==="array"?m(S.elements):mW.includes(S.type)||(0,mI.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(m,"connectPropertyType");for(let S of f.values())for(let R of S.properties)m(R);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,fS.dirname)(n),S.tableClass):i.set((0,fS.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var fS,mI,mW,SW,TW,SI=be(()=>{fS=require("path");Re();mI=B(et()),mW=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(ES,"start");SW=ES,TW=ES({ensureTable:Et}).handleFile});async function tf(e){return gW?(Jl||(Jl=RW(OW)),(await(await Jl).import(e)).namespace):import(e)}async function RW(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Jl=new Compartment({console,Math,Date,fetch:AW,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,gI.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Jt,tables:en,databases:lt})}};let n=await(0,TI.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Jl}function AW(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 OW(){return{Resource:Jt,tables:en}}var TI,gI,gW,Jl,pS=be(()=>{es();Re();TI=require("fs/promises"),gI=require("path"),gW=!1;a(tf,"secureImport");a(RW,"getCompartment");a(AW,"secureOnlyFetch");a(OW,"getGlobalVars")});var SS={};Fe(SS,{handleFile:()=>bW});async function bW(e,t,r,n){let s=new Map,i=(0,RI.pathToFileURL)(r).toString(),o=await tf(i);l(o.default)&&n.set((0,mS.dirname)(t),o.default),c(o,(0,mS.dirname)(t));function c(_,u){for(let d in _){let f=_[d];l(f)?n.set(u+"/"+d,f):typeof f=="object"&&c(f,u+"/"+d)}}a(c,"recurseForResources");function l(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(l,"isResource"),s}var RI,mS,AI=be(()=>{RI=require("url");pS();mS=require("path");a(bW,"handleFile")});var gS={};Fe(gS,{start:()=>NW});function NW({resources:e}){e.set("login",TS),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var TS,OI=be(()=>{es();a(NW,"start");TS=class extends Jt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var DI={};Fe(DI,{parse:()=>AS,streamAsJSON:()=>Xl,stringify:()=>Wo});function Xl(e){return new RS({value:e})}function bI(e){return console.error(e),JSON.stringify(e.toString())}function NI(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Wo(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===wI)return CI(e);if(t.resolution)return t.resolution.then(()=>Wo(e));throw t}}function CI(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let n=0;n<e.length;n++)n>0&&(r+=","),r+=CI(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Wo(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function AS(e){return wW.test(e)?yW.parse(e):JSON.parse(e)}var yI,II,yW,IW,wI,RS,wW,OS=be(()=>{yI=require("stream"),II=B(require("json-bigint-fixes")),yW=(0,II.default)({useNativeBigInt:!0}),IW=1e4,wI={};BigInt.prototype.toJSON=function(){throw wI};a(Xl,"streamAsJSON");RS=class extends yI.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),bI)}catch(s){yield bI(s)}else yield Wo(t)}else yield Wo(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);NI(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>IW?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 NI(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))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}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(bI,"handleError");a(NI,"when");a(Wo,"stringify");a(CI,"jsStringify");wW=/[[,:]\s*-?\d{16,}/;a(AS,"parse")});var $I=g((ape,kI)=>{"use strict";var bS=require("recursive-iterator"),CW=require("alasql"),NS=require("clone"),LI=K(),{handleHDBError:PI,hdb_errors:DW}=oe(),{HDB_ERROR_MSGS:MI,HTTP_STATUS_CODES:UI}=DW,{getDatabases:LW}=(Re(),ie(ke)),PW=["DISTINCT_ARRAY"],vI=Symbol("validateTables"),yS=Symbol("validateTable"),ope=Symbol("getAllColumns"),BI=Symbol("validateAllColumns"),rf=Symbol("findColumn"),HI=Symbol("validateOrderBy"),Zl=Symbol("validateSegment"),IS=Symbol("validateColumn"),GI=Symbol("setColumnsForTable"),qI=Symbol("checkColumnsForAsterisk"),xI=Symbol("validateGroupBy"),FI=Symbol("hasColumns"),wS=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[vI](),this[qI](),this[BI]()}[vI](){if(this[FI]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[yS](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[yS](t.table)})}}[FI](){let t=!1,r=new bS(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[yS](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=LW();if(!r[t.databaseid])throw PI(new Error,MI.SCHEMA_NOT_FOUND(t.databaseid),UI.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw PI(new Error,MI.TABLE_NOT_FOUND(t.databaseid,t.tableid),UI.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=NS(s);i.table=NS(t),this.attributes.push(i)})}[rf](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)}[qI](){let t=new bS(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[GI](r.tableid)}[GI](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new CW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[BI](){this[Zl](this.statement.columns,!1),this[Zl](this.statement.joins,!1),this[Zl](this.statement.where,!1),this[xI](this.statement.group,!1),this[Zl](this.statement.order,!0)}[Zl](t,r){if(!t)return;let n=new bS(t),s=[];for(let{node:i,path:o}of n)!LI.isEmpty(i)&&!LI.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[HI](i):s.push(this[IS](i)));return s}[xI](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&PW.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=NS(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[rf](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[rf](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.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`}[HI](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[IS](t)}[IS](t){let r=this[rf](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};kI.exports=wS});var YI=g((lpe,VI)=>{"use strict";var CS=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")}};VI.exports=CS});var WI=g((_pe,KI)=>{"use strict";var DS=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};KI.exports=DS});var JI={};Fe(JI,{HAS_EXPIRATION:()=>HS,LAST_TIMESTAMP_PLACEHOLDER:()=>ru,LOCAL_TIMESTAMP:()=>MW,METADATA:()=>eu,NO_TIMESTAMP:()=>PS,PENDING_LOCAL_TIME:()=>GS,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>BS,RecordEncoder:()=>vS,TIMESTAMP_ASSIGN_LAST:()=>vW,TIMESTAMP_ASSIGN_NEW:()=>jI,TIMESTAMP_ASSIGN_PREVIOUS:()=>zI,TIMESTAMP_PLACEHOLDER:()=>nf,TIMESTAMP_RECORD_PREVIOUS:()=>MS,getUpdateRecord:()=>qS,handleLocalTimeForGets:()=>cf});function HW(){return tu[0]=tu[0]^64,UW.getFloat64(0)}function cf(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),l=c?.value,_=l?.[eu];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,l.expiresAt>0&&(c.expiresAt=l.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[eu]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let l=c.value,_=l[eu];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,l.expiresAt>0&&(c.expiresAt=l.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Qo.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<Qo.length;l++){let _=Qo[l].deref();(!_||_.isDone||_.isCommitted)&&Qo.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function qS(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",f,E){if(f||l==null?lc=i?.localTime?MS|zI:PS:lc=l?i?.localTime?MS|16384:jI|16384:PS,u>0&&(c|=HS),of=c,US=u,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:lc>0},m;try{f&&(h.ifVersion=m=i?.version??null);let S=e.put(n,s,h);if(l){let R=_?.user?.username;if(E&&(sf=e.encoder.encode(E)),f&&i?.localTime){let T=i?.localTime,A=r.get(T);if(A){let L=kt(A).previousLocalTime;return r.put(T,af(o,t,n,L,R,d,sf),{ifVersion:m}),S}}r.put(ru,af(o,t,n,i?.localTime?1:0,R,d,sf),{append:d!=="invalidate",instructedWrite:!0,ifVersion:m})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var QI,LS,nf,ru,BS,MW,eu,tu,UW,PS,jI,vW,zI,MS,HS,GS,BW,sf,lc,of,US,vS,Qo,nu=be(()=>{QI=require("msgpackr");eo();LS=B(x()),nf=new Uint8Array([1,1,1,1,4,64,0,0]),ru=new Uint8Array([1,1,1,1,1,0,0,0]),BS=new Uint8Array([1,1,1,1,3,64,0,0]),MW=Symbol("local-timestamp"),eu=Symbol("metadata"),tu=new Uint8Array(8),UW=new DataView(tu.buffer,0,8),PS=0,jI=0,vW=1,zI=3,MS=4,HS=16,GS=1,lc=0,of=-1,US=0,vS=class extends QI.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(lc||of>=0){let i=0,o=lc;o&&(i+=8,lc=0);let c=of,l=US;c>=0&&(i+=2,of=-1,l&&(i+=8,US=0));let _=BW=r.call(this,n,s|2048|i);sf=_.subarray((_.start||0)+i,_.end);let u=_.start||0;return o&&(nf[4]=o,nf[5]=o>>8,_.set(nf,u),u+=8),c>=0&&(_[u++]=c,_[u++]=0,l&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(u,l)),_}else return r.call(this,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(tu,0,c),c+=8;else for(let d=0;d<8;d++)tu[d]=t[c++];l=HW(),i=t[c]}let _;i<32&&(o=i,c+=2,o&HS&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let u=super.decode(t.subarray(c,s),s-c);return{localTime:l,value:u,[eu]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(HW,"getTimestamp");a(cf,"handleLocalTimeForGets");Qo=[];setInterval(()=>{for(let e=0;e<Qo.length;e++){let t=Qo[e].deref();!t||t.isDone||t.isCommitted?Qo.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(LS.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):LS.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();a(qS,"getUpdateRecord")});var su=g((ppe,ZI)=>{"use strict";var XI=X(),GW=D(),{RecordEncoder:qW}=(nu(),ie(JI)),hpe=require("fs");XI.initSync();var xW=XI.get(GW.CONFIG_PARAMS.STORAGE_CACHING)!==!1,xS=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=xW&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:qW})}};ZI.exports=xS});var iu=g((Spe,ew)=>{"use strict";var tn=X(),Pn=D();tn.initSync();var lf=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.eventTurnBatching=!1,this.noSync=tn.get(Pn.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||tn.get(Pn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||tn.get(Pn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",tn.get(Pn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=tn.get(Pn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),tn.get(Pn.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=tn.get(Pn.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),tn.get(Pn.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=tn.get(Pn.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),tn.get(Pn.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=tn.get(Pn.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=tn.get(Pn.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};ew.exports=lf;lf.MAX_DBS=1e4});var Ve=g((gpe,uw)=>{"use strict";var kS=require("lmdb"),ts=require("fs-extra"),rn=require("path"),uf=Or(),nw=x(),Nr=Zr().LMDB_ERRORS_ENUM,_f=WI(),$S=su(),sw=iu(),to=at(),tw=D(),{table:FW,resetDatabases:kW}=(Re(),ie(ke)),rw=X(),rs=to.INTERNAL_DBIS_NAME,iw=to.DBI_DEFINITION_NAME,$W="data.mdb",VW="lock.mdb",ou=".mdb",YW="-lock",FS=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Mn(t,r),this.key_type=this.dbi[to.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[to.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new kS.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function df(e,t){if(e===void 0)throw new Error(Nr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Nr.ENV_NAME_REQUIRED)}a(df,"pathEnvNameValidation");async function VS(e,t,r=!0){try{await ts.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Nr.INVALID_BASE_PATH):n}try{let n=rn.join(e,t+ou);return await ts.access(n,ts.constants.R_OK|ts.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await ts.access(rn.join(e,t,$W),ts.constants.R_OK|ts.constants.F_OK),rn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Nr.INVALID_ENVIRONMENT)}else throw new Error(Nr.INVALID_ENVIRONMENT);throw n}}a(VS,"validateEnvironmentPath");function ff(e,t){if(uf.validateEnv(e),t===void 0)throw new Error(Nr.DBI_NAME_REQUIRED)}a(ff,"validateEnvDBIName");async function KW(e,t,r=!1,n=!1){df(e,t);let s=rn.basename(e);t=t.toString();let i=rw.get(tw.CONFIG_PARAMS.DATABASES);i||rw.setProperty(tw.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await VS(e,t,n),ow(e,t,r)}catch(o){if(o.message===Nr.INVALID_ENVIRONMENT){let c=rn.join(e,t);await ts.mkdirp(n?c:e);let l=new sw(n?c:c+ou,!1),_=kS.open(l);_.dbis=Object.create(null);let u=new $S(!1);_.openDB(rs,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=YS(e,t,r);return _[to.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(KW,"createEnvironment");async function WW(e,t,r,n=!0){df(e,t),t=t.toString();let s=rn.join(e,t);return FW({table:t,database:rn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(WW,"copyEnvironment");async function ow(e,t,r=!1){df(e,t),t=t.toString();let n=YS(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await VS(e,t),i=rn.join(e,t+ou),o=s!=i,c=new sw(s,o),l=kS.open(c);l.dbis=Object.create(null);let _=cw(l);for(let u=0;u<_.length;u++)Mn(l,_[u]);return l[to.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(ow,"openEnvironment");async function QW(e,t,r=!1){df(e,t),t=t.toString();let n=rn.join(e,t+ou),s=await VS(e,t);if(global.lmdb_map!==void 0){let i=YS(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await aw(o),delete global.lmdb_map[i]}}await ts.remove(s),await ts.remove(s===n?s+YW:rn.join(rn.dirname(s),VW))}a(QW,"deleteEnvironment");async function aw(e){uf.validateEnv(e);let t=e[to.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(aw,"closeEnvironment");function YS(e,t,r=!1){let s=`${rn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(YS,"getCachedEnvironmentName");function jW(e){uf.validateEnv(e);let t=Object.create(null),r=Mn(e,rs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==rs)try{t[n]=Object.assign(new _f,s)}catch{nw.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(jW,"listDBIDefinitions");function cw(e){uf.validateEnv(e);let t=[],r=Mn(e,rs);for(let{key:n}of r.getRange({start:!1}))n!==rs&&t.push(n);return t}a(cw,"listDBIs");function zW(e,t){let n=Mn(e,rs).getEntry(t),s=new _f;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{nw.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(zW,"getDBIDefinition");function lw(e,t,r,n=!r){if(ff(e,t),t=t.toString(),t===rs)throw new Error(Nr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Mn(e,t)}catch(s){if(s.message===Nr.DBI_DOES_NOT_EXIST){let i=new $S(r,n===!0),o=e.openDB(t,i),c=new _f(r===!0,n);return o[iw]=c,Mn(e,rs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(lw,"createDBI");function Mn(e,t){if(ff(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==rs?r=zW(e,t):r=new _f,r===void 0)throw new Error(Nr.DBI_DOES_NOT_EXIST);let n;try{let s=new $S(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(Nr.DBI_DOES_NOT_EXIST):s}return n[iw]=r,e.dbis[t]=n,n}a(Mn,"openDBI");function JW(e,t){ff(e,t),t=t.toString();let r=Mn(e,t),n=r.getStats();return r[to.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(JW,"statDBI");async function XW(e,t){try{let r=rn.join(e,t+ou);return(await ts.stat(r)).size}catch{throw new Error(Nr.INVALID_ENVIRONMENT)}}a(XW,"environmentDataSize");function ZW(e,t){if(ff(e,t),t=t.toString(),t===rs)throw new Error(Nr.CANNOT_DROP_INTERNAL_DBIS_NAME);Mn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Mn(e,rs).removeSync(t)}a(ZW,"dropDBI");function eQ(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Mn(e,i)}catch(o){if(o.message===Nr.DBI_DOES_NOT_EXIST)lw(e,i,i!==t,i===t),n=!0;else throw o}}n&&kW()}a(eQ,"initializeDBIs");uw.exports={openDBI:Mn,openEnvironment:ow,createEnvironment:KW,listDBIs:cw,listDBIDefinitions:jW,createDBI:lw,dropDBI:ZW,statDBI:JW,deleteEnvironment:QW,initializeDBIs:eQ,TransactionCursor:FS,environmentDataSize:XW,copyEnvironment:WW,closeEnvironment:aw}});var dw=g((Ape,_w)=>{"use strict";var KS=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};_w.exports=KS});var Ew=g((bpe,fw)=>{"use strict";var WS=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};fw.exports=WS});var pw=g((ype,hw)=>{"use strict";var QS=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};hw.exports=QS});var zo=g((Lpe,Tw)=>{"use strict";var tQ=Ve(),rQ=dw(),nQ=Ew(),sQ=pw(),Is=Or(),au=Zr().LMDB_ERRORS_ENUM,iQ=at(),ai=D(),oQ=K(),aQ=require("uuid"),wpe=require("lmdb"),{handleHDBError:cQ,hdb_errors:lQ}=oe(),{OVERFLOW_MARKER:Cpe,MAX_SEARCH_KEY_LENGTH:Dpe}=iQ,mw=X();mw.initSync();var Ef=mw.get(ai.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),jS=ai.TIME_STAMP_NAMES_ENUM.CREATED_TIME,jo=ai.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function uQ(e,t,r,n,s=Is.getNextMonotonicTime()){ZS(e,t,r,n),zS(e,t,r);let i=new rQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];Sw(_,!0,s);let u=_Q(e,t,r,_),d=_[t];o.push(u),c.push(d)}return JS(o,c,n,i,s)}a(uQ,"insertRecords");function _Q(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let u=c([[{}]]);Array.isArray(u)&&(c=u[0][ai.FUNC_VAL],n[o]=c)}let l=Is.getIndexedValues(c),_=e.dbis[o];if(l){Ef&&_.prefetch(l.map(u=>({key:u,value:s})),hf);for(let u=0,d=l.length;u<d;u++)_.put(l[u],s)}}Ef&&e.dbis[t].prefetch([s],hf),e.dbis[t].put(s,n,n[jo])})}a(_Q,"insertRecord");function dQ(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(dQ,"removeSkippedRecords");function Sw(e,t,r){let n=r>0;(n||!Number.isInteger(e[jo]))&&(e[jo]=r||(r=Is.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[jS]))&&(e[jS]=r||Is.getNextMonotonicTime()):delete e[jS]}a(Sw,"setTimestamps");function zS(e,t,r){r.indexOf(ai.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ai.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ai.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ai.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),tQ.initializeDBIs(e,t,r)}a(zS,"initializeTransaction");async function fQ(e,t,r,n,s=Is.getNextMonotonicTime()){ZS(e,t,r,n),zS(e,t,r);let i=new nQ,o=[],c=[],l=[];for(let _=0;_<n.length;_++){let u=n[_],d=u[t],f;try{f=XS(e,t,u,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),l.push(d)}return JS(c,l,n,i,s,o)}a(fQ,"updateRecords");async function EQ(e,t,r,n,s=Is.getNextMonotonicTime()){try{ZS(e,t,r,n)}catch(l){throw cQ(l,l.message,lQ.HTTP_STATUS_CODES.BAD_REQUEST)}zS(e,t,r);let i=new sQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l],u;oQ.isEmpty(_[t])?(u=aQ.v4(),_[t]=u):u=_[t];let d=XS(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return JS(o,c,n,i,s)}a(EQ,"upsertRecords");async function JS(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Is.getNextMonotonicTime(),dQ(r,i),n}a(JS,"finalizeWrite");function XS(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),_=l?.value,u=_;if(!_){if(i)return!1;_={}}if(Sw(r,!u,o),Number.isInteger(r[jo])&&_[jo]>r[jo])return!1;u&&s.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let m=r[h],S=e.dbis[h];if(S===void 0)continue;let R=_[h];if(typeof m=="function"){let A=m([[_]]);Array.isArray(A)&&(m=A[0][ai.FUNC_VAL],r[h]=m)}if(m===R)continue;let T=Is.getIndexedValues(R);if(T){Ef&&S.prefetch(T.map(A=>({key:A,value:n})),hf);for(let A=0,L=T.length;A<L;A++)S.remove(T[A],n)}if(T=Is.getIndexedValues(m),T){Ef&&S.prefetch(T.map(A=>({key:A,value:n})),hf);for(let A=0,L=T.length;A<L;A++)S.put(T[A],n)}}let E=Object.assign({},_,r);c.put(n,E,E[jo])},"do_put");return l?d=c.ifVersion(n,l.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:XS(e,t,r,n,s,i,o))}a(XS,"updateUpsertRecord");function hQ(e,t,r){if(Is.validateEnv(e),t===void 0)throw new Error(au.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(au.WRITE_ATTRIBUTES_REQUIRED):new Error(au.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(hQ,"validateBasic");function ZS(e,t,r,n){if(hQ(e,t,r),!Array.isArray(n))throw n===void 0?new Error(au.RECORDS_REQUIRED):new Error(au.RECORDS_MUST_BE_ARRAY)}a(ZS,"validateWrite");function hf(){}a(hf,"noop");Tw.exports={insertRecords:uQ,updateRecords:fQ,upsertRecords:EQ}});var ci=g((Mpe,pQ)=>{pQ.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",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var Cs=g((Upe,Aw)=>{"use strict";var Rw=K(),gw=D(),uc=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,ws=require("joi"),ro={schema_format:{pattern:uc,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},mQ=ws.alternatives(ws.string().min(1).max(ro.schema_length.maximum).pattern(uc).messages({"string.pattern.base":"{:#label} "+ro.schema_format.message}),ws.number(),ws.array()).required(),SQ=ws.alternatives(ws.string().min(1).max(ro.schema_length.maximum).pattern(uc).messages({"string.pattern.base":"{:#label} "+ro.schema_format.message}),ws.number()),TQ=ws.alternatives(ws.string().min(1).max(ro.schema_length.maximum).pattern(uc).messages({"string.pattern.base":"{:#label} "+ro.schema_format.message}),ws.number()).required();function gQ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>ro.schema_length.maximum?`'${e}' maximum of 250 characters`:uc.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(gQ,"checkValidTable");function RQ(e,t){return Rw.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(RQ,"validateSchemaExists");function AQ(e,t){let r=t.state.ancestors[0].schema;return Rw.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(AQ,"validateTableExists");function OQ(e,t){return e.toLowerCase()===gw.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${gw.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(OQ,"validateSchemaName");Aw.exports={common_validators:ro,schema_regex:uc,hdb_schema_table:mQ,validateSchemaExists:RQ,validateTableExists:AQ,validateSchemaName:OQ,checkValidTable:gQ,hdb_database:SQ,hdb_table:TQ}});var tt=g((Bpe,Ow)=>{"use strict";var yr=require("validate.js");yr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||yr.validators.type.checks[t](e)?null:` must be a '${t}' value`};yr.validators.type.checks={Object:function(e){return yr.isObject(e)&&!yr.isArray(e)},Array:yr.isArray,Integer:yr.isInteger,Number:yr.isNumber,String:yr.isString,Date:yr.isDate,Boolean:function(e){return typeof e=="boolean"}};yr.validators.hasValidFileExt=function(e,t){return yr.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};Ow.exports={validateObject:bQ,validateObjectAsync:NQ,validateBySchema:yQ};function bQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=yr(e,t,{format:"flat"});return r?new Error(r):null}a(bQ,"validateObject");async function NQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await yr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(NQ,"validateObjectAsync");function yQ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(yQ,"validateBySchema")});var pf=g((Gpe,bw)=>{var{common_validators:Ds}=Cs(),lu=tt(),cu="is required",Ot={database:{presence:!1,format:Ds.schema_format,length:Ds.schema_length},schema:{presence:!1,format:Ds.schema_format,length:Ds.schema_length},table:{presence:!0,format:Ds.schema_format,length:Ds.schema_length},attribute:{presence:!0,format:Ds.schema_format,length:Ds.schema_length},hash_attribute:{presence:!0,format:Ds.schema_format,length:Ds.schema_length}};function uu(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(uu,"makeAttributesStrings");function IQ(e){return e=uu(e),Ot.table.presence=!1,Ot.attribute.presence=!1,Ot.hash_attribute.presence=!1,lu.validateObject(e,Ot)}a(IQ,"schema_object");function wQ(e){return e=uu(e),Ot.table.presence={message:cu},Ot.attribute.presence=!1,Ot.hash_attribute.presence=!1,lu.validateObject(e,Ot)}a(wQ,"table_object");function CQ(e){return e=uu(e),Ot.table.presence={message:cu},Ot.attribute.presence=!1,lu.validateObject(e,Ot)}a(CQ,"create_table_object");function DQ(e){return e=uu(e),Ot.table.presence={message:cu},Ot.attribute.presence={message:cu},Ot.hash_attribute.presence=!1,lu.validateObject(e,Ot)}a(DQ,"attribute_object");function LQ(e){return e=uu(e),Ot.table.presence={message:cu},Ot.attribute.presence=!1,Ot.hash_attribute.presence=!1,lu.validateObject(e,Ot)}a(LQ,"describe_table");function PQ(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(PQ,"validateTableResidence");bw.exports={schema_object:IQ,create_table_object:CQ,table_object:wQ,attribute_object:DQ,describe_table:LQ,validateTableResidence:PQ}});var yw=g((xpe,Nw)=>{"use strict";var MQ=require("uuid"),eT=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||MQ.v4(),this.schema_table=`${this.schema}.${this.table}`}};Nw.exports=eT});var mf=g((kpe,Iw)=>{"use strict";var UQ=yw(),tT=class extends UQ{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};Iw.exports=tT});var Cw=g((Vpe,ww)=>{"use strict";ww.exports=BQ;var vQ="inserted";function BQ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===vQ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(BQ,"returnObject")});var Sf=g((Kpe,Uw)=>{"use strict";var HQ=D(),rT=Ve(),GQ=zo(),{getSystemSchemaPath:qQ,getSchemaPath:xQ}=je(),FQ=ci(),kQ=pf(),$Q=mf(),VQ=Cw(),{handleHDBError:Dw,hdb_errors:Pw}=oe(),Lw=K(),{HTTP_STATUS_CODES:YQ}=Pw,nT=FQ.hdb_attribute,Mw=[];for(let e=0;e<nT.attributes.length;e++)Mw.push(nT.attributes[e].attribute);var KQ="inserted";Uw.exports=WQ;async function WQ(e){let t=kQ.attribute_object(e);if(t)throw Dw(new Error,t.message,Pw.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&Lw.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Dw(new Error,r,YQ.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Lw.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new $Q(e.schema,e.table,e.attribute,e.id);try{let i=await rT.openEnvironment(xQ(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}`);rT.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await rT.openEnvironment(qQ(),HQ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await GQ.insertRecords(o,nT.hash_attribute,Mw,[s]);return VQ(KQ,c,{records:[s]},l)}catch(i){throw i}}a(WQ,"lmdbCreateAttribute")});var iT=g((Qpe,Bw)=>{var{hdb_table:QQ,hdb_database:vw}=Cs(),jQ=tt(),sT=require("joi"),zQ={undefined:"undefined",null:"null"},JQ=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||zQ[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),XQ=sT.object({database:vw,schema:vw,table:QQ,records:sT.array().items(sT.object().custom(JQ)).required()});Bw.exports=function(e){return jQ.validateBySchema(e,XQ)}});var _u=g((Jpe,Gw)=>{"use strict";var li=K(),Hw=x(),zpe=iT(),{getDatabases:ZQ}=(Re(),ie(ke)),{ClientError:Jo}=oe();Gw.exports=ej;function ej(e){if(li.isEmpty(e))throw new Jo("invalid update parameters defined.");if(li.isEmptyOrZeroLength(e.schema))throw new Jo("invalid schema specified.");if(li.isEmptyOrZeroLength(e.table))throw new Jo("invalid table specified.");if(!Array.isArray(e.records))throw new Jo("records must be an array");let t=ZQ()[e.schema]?.[e.table];if(li.isEmpty(t))throw new Jo(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&li.isEmptyOrZeroLength(o[r]))throw Hw.error("a valid hash attribute must be provided with update record:",o),new Jo("a valid hash attribute must be provided with update record, check log for more info");if(!li.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Hw.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Jo(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!li.isEmpty(o[r])&&o[r]!==""&&n.has(li.autoCast(o[r]))&&(o.skip=!0),n.add(li.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(ej,"insertUpdateValidate")});var du=g((Zpe,qw)=>{"use strict";var tj=D().OPERATIONS_ENUM,oT=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=tj.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};qw.exports=oT});var fu=g((rme,Fw)=>{"use strict";var tme=du(),Tf=D(),aT=K(),xw=x(),rj=require("uuid"),{handleHDBError:gf,hdb_errors:nj}=oe(),{HDB_ERROR_MSGS:Rf,HTTP_STATUS_CODES:Af}=nj;Fw.exports=sj;function sj(e,t,r){for(let s=0;s<t.length;s++)ij(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];oj(i,r,e.operation)}}a(sj,"processRows");function ij(e){if(Buffer.byteLength(String(e))>Tf.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw gf(new Error,Rf.ATTR_NAME_LENGTH_ERR(e),Af.BAD_REQUEST,void 0,void 0,!0);if(aT.isEmptyOrZeroLength(e)||aT.isEmpty(e.trim()))throw gf(new Error,Rf.ATTR_NAME_NULLISH_ERR,Af.BAD_REQUEST,void 0,void 0,!0)}a(ij,"validateAttribute");function oj(e,t,r){if(!e.hasOwnProperty(t)||aT.isEmptyOrZeroLength(e[t])){if(r===Tf.OPERATIONS_ENUM.INSERT||r===Tf.OPERATIONS_ENUM.UPSERT){e[t]=rj.v4();return}throw xw.error("Update transaction aborted due to record with no hash value:",e),gf(new Error,Rf.RECORD_MISSING_HASH_ERR,Af.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Tf.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw xw.error(e),gf(new Error,Rf.HASH_VAL_LENGTH_ERR,Af.BAD_REQUEST,void 0,void 0,!0)}a(oj,"validateHash")});var $w=g((sme,kw)=>{"use strict";var cT=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};kw.exports=cT});var Kw=g((ome,Yw)=>{"use strict";var lT=Ve(),aj=x(),Vw=Zr().LMDB_ERRORS_ENUM;Yw.exports=cj;async function cj(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 lT.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==Vw.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await lT.closeEnvironment(global.lmdb_map[n]),await lT.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==Vw.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){aj.error(t)}}a(cj,"cleanLMDBMap")});var ui=g((cme,zw)=>{"use strict";var Eu=require("crypto"),lj=X(),{CONFIG_PARAMS:uj}=D(),Qw="aes-256-cbc",_j=32,dj=16,uT=64,jw=32,fj=uT+jw,Ww=new Map;zw.exports={encrypt:Ej,decrypt:hj,createNatsTableStreamName:pj};function Ej(e){let t=Eu.randomBytes(_j),r=Eu.randomBytes(dj),n=Eu.createCipheriv(Qw,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(Ej,"encrypt");function hj(e){let t=e.substr(0,uT),r=e.substr(uT,jw),n=e.substr(fj,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Eu.createDecipheriv(Qw,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(hj,"decrypt");function pj(e,t){let r=lj.get(uj.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=Ww.get(r);return n||(n=Eu.createHash("md5").update(r).digest("hex"),Ww.set(r,n)),n}a(pj,"createNatsTableStreamName")});var _i=g((_me,Xw)=>{"use strict";var ume=or(),Of=x(),Jw=pf(),mj=ui(),bf=K(),{handleHDBError:Nf,hdb_errors:Sj}=oe(),{HDB_ERROR_MSGS:yf,HTTP_STATUS_CODES:_T}=Sj,Tj=X();Tj.initSync();var{getDatabases:dT}=(Re(),ie(ke));Xw.exports={describeAll:gj,describeTable:If,describeSchema:Rj};async function gj(e){try{let t=bf.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=dT(),i={},o={},c=[],l=e?.exact_count;for(let u in s){i[u]=!0,!t&&!n&&(o[u]=e.hdb_user.role.permission[u].describe);let d=s[u];for(let f in d)try{let E;if(t||n)E=await If({schema:u,table:f,exact_count:l});else if(r&&r[u].describe&&r[u].tables[f].describe){let h=r[u].tables[f].attribute_permissions;E=await If({schema:u,table:f,exact_count:l},h)}E&&c.push(E)}catch(E){Of.error(E)}}let _={};for(let u in c)t||n?(_[c[u].schema]==null&&(_[c[u].schema]={}),_[c[u].schema][c[u].name]=c[u],i[c[u].schema]&&delete i[c[u].schema]):o[c[u].schema]&&(_[c[u].schema]==null&&(_[c[u].schema]={}),_[c[u].schema][c[u].name]=c[u],i[c[u].schema]&&delete i[c[u].schema]);for(let u in i)t||n?_[u]={}:o[u]&&(_[u]={});return _}catch(t){return Of.error("Got an error in describeAll"),Of.error(t),Nf(new Error,yf.DESCRIBE_ALL_ERR)}}a(gj,"describeAll");async function If(e,t){bf.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(s=e.hdb_user.role.permission[r].tables[n].attribute_permissions);let i=Jw.describe_table(e);if(i)throw i;let c=dT()[r];if(!c)throw Nf(new Error,yf.SCHEMA_NOT_FOUND(e.schema),_T.NOT_FOUND);let l=c[n];if(!l)throw Nf(new Error,yf.TABLE_NOT_FOUND(e.schema,e.table),_T.NOT_FOUND);function _(f){u.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let u=[];if(s){let f={};s.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),l.attributes.forEach(E=>{f[E.name]&&_(E)})}else l.attributes?.forEach(f=>_(f));let d={schema:r,name:l.tableName,hash_attribute:l.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:u};d.clustering_stream_name=mj.createNatsTableStreamName(d.schema,d.name);try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=l.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&l.indices.__updatedtime__)for(let h of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){Of.warn(`unable to stat table dbi due to ${f}`)}return d}a(If,"descTable");async function Rj(e){bf.transformReq(e);let t=Jw.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 n=e.schema.toString(),i=dT()[n];if(!i)throw Nf(new Error,yf.SCHEMA_NOT_FOUND(e.schema),_T.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),bf.isEmpty(l)||l.describe){let _=await If({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(Rj,"describeSchema")});var Un=g((hme,nC)=>{var Aj=ci(),{callbackify:eC,promisify:Oj}=require("util"),{getDatabases:tC}=(Re(),ie(ke));nC.exports={setSchemaDataToGlobal:Zw,getTableSchema:bj,getSystemSchema:Nj,setSchemaDataToGlobalAsync:Oj(Zw)};var rC=_i(),fme=eC(rC.describeAll),Eme=eC(rC.describeTable);function Zw(e){global.hdb_schema=tC(),e&&e()}a(Zw,"setSchemaDataToGlobal");function bj(e,t,r){let n=tC()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(bj,"getTableSchema");function Nj(){return Aj}a(Nj,"getSystemSchema")});var Ir=g((mme,aC)=>{"use strict";var Cf=iT(),Xt=K(),yj=require("util"),Df=vn(),Ij=Un(),sC=x(),{handleHDBError:Xo,hdb_errors:wj}=oe(),{HTTP_STATUS_CODES:Zo}=wj,Cj=yj.promisify(Ij.getTableSchema),Dj="updated",iC="inserted",oC="upserted";aC.exports={insert:Pj,update:Mj,upsert:Uj,validation:Lj,flush:vj};async function Lj(e){if(Xt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Xt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Xt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Cj(e.schema,e.table),r=Cf(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Xt.isEmptyOrZeroLength(c[n]))throw sC.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(!Xt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw sC.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Xt.isEmpty(c[n])&&c[n]!==""&&s.has(Xt.autoCast(c[n]))&&(c.skip=!0),s.add(Xt.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(Lj,"validation");async function Pj(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Cf(e);if(t)throw Xo(new Error,t.message,Zo.BAD_REQUEST);Xt.transformReq(e);let r=Xt.checkSchemaTableExist(e.schema,e.table);if(r)throw Xo(new Error,r,Zo.BAD_REQUEST);let n=await Df.createRecords(e);return wf(iC,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(Pj,"insertData");async function Mj(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Cf(e);if(t)throw Xo(new Error,t.message,Zo.BAD_REQUEST);Xt.transformReq(e);let r=Xt.checkSchemaTableExist(e.schema,e.table);if(r)throw Xo(new Error,r,Zo.BAD_REQUEST);let n=await Df.updateRecords(e);return Xt.isEmpty(n.existing_rows)?wf(Dj,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):wf(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Mj,"updateData");async function Uj(e){if(e.operation!=="upsert")throw Xo(new Error,"invalid operation, must be upsert",Zo.INTERNAL_SERVER_ERROR);let t=Cf(e);if(t)throw Xo(new Error,t.message,Zo.BAD_REQUEST);Xt.transformReq(e);let r=Xt.checkSchemaTableExist(e.schema,e.table);if(r)throw Xo(new Error,r,Zo.BAD_REQUEST);let n=await Df.upsertRecords(e);return wf(oC,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(Uj,"upsertData");function wf(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===iC?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===oC?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(wf,"returnObject");function vj(e){return Xt.transformReq(e),Df.flush(e.schema,e.table)}a(vj,"flush")});var ET=g((Tme,uC)=>{var Bj=tt(),fT=require("joi"),{hdb_table:Hj,hdb_database:cC}=Cs(),lC={schema:cC,database:cC,table:Hj},Gj={date:fT.date().iso().required()},qj={timestamp:fT.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};uC.exports=function(e,t){let r=t==="timestamp"?{...lC,...qj}:{...lC,...Gj},n=fT.object(r);return Bj.validateBySchema(e,n)}});var fC=g((gme,dC)=>{var xj=tt(),hT=require("joi"),{hdb_table:Fj,hdb_database:_C}=Cs(),kj=hT.object({schema:_C,database:_C,table:Fj,hash_values:hT.array().required(),ids:hT.array()});dC.exports=function(e){return xj.validateBySchema(e,kj)}});var TT=g((Rme,EC)=>{"use strict";var pT=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},mT=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},ST=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};EC.exports={InsertObject:pT,NoSQLSeachObject:mT,DeleteResponseObject:ST}});var ra=g((Ome,TC)=>{"use strict";var pC=ET(),$j=fC(),ea=K(),hC=require("moment"),mC=x(),{promisify:Vj,callbackify:Yj}=require("util"),ta=D(),Kj=Un(),gT=Vj(Kj.getTableSchema),RT=vn(),{DeleteResponseObject:Wj}=TT(),{handleHDBError:no,hdb_errors:Qj}=oe(),{HDB_ERROR_MSGS:Lf,HTTP_STATUS_CODES:so}=Qj,jj="records successfully deleted",zj=Yj(SC);TC.exports={delete:zj,deleteRecord:SC,deleteFilesBefore:Jj,deleteAuditLogsBefore:Xj};async function Jj(e){let t=pC(e,"date");if(t)throw no(t,t.message,so.BAD_REQUEST,void 0,void 0,!0);if(ea.transformReq(e),!hC(e.date,hC.ISO_8601).isValid())throw no(new Error,Lf.INVALID_DATE,so.BAD_REQUEST,ta.LOG_LEVELS.ERROR,Lf.INVALID_DATE,!0);let n=ea.checkSchemaTableExist(e.schema,e.table);if(n)throw no(new Error,n,so.NOT_FOUND,ta.LOG_LEVELS.ERROR,n,!0);let s=await RT.deleteRecordsBefore(e);if(await gT(e.schema,e.table),mC.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(Jj,"deleteFilesBefore");async function Xj(e){let t=pC(e,"timestamp");if(t)throw no(t,t.message,so.BAD_REQUEST,void 0,void 0,!0);if(ea.transformReq(e),isNaN(e.timestamp))throw no(new Error,Lf.INVALID_VALUE("Timestamp"),so.BAD_REQUEST,ta.LOG_LEVELS.ERROR,Lf.INVALID_VALUE("Timestamp"),!0);let r=ea.checkSchemaTableExist(e.schema,e.table);if(r)throw no(new Error,r,so.NOT_FOUND,ta.LOG_LEVELS.ERROR,r,!0);let n=await RT.deleteAuditLogsBefore(e);return await gT(e.schema,e.table),mC.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(Xj,"deleteAuditLogsBefore");async function SC(e){e.ids&&(e.hash_values=e.ids);let t=$j(e);if(t)throw no(t,t.message,so.BAD_REQUEST,void 0,void 0,!0);ea.transformReq(e);let r=ea.checkSchemaTableExist(e.schema,e.table);if(r)throw no(new Error,r,so.NOT_FOUND,ta.LOG_LEVELS.ERROR,r,!0);try{await gT(e.schema,e.table);let n=await RT.deleteRecords(e);return ea.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${jj}`),n}catch(n){if(n.message===ta.SEARCH_NOT_FOUND_MESSAGE){let s=new Wj;return s.message=ta.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(SC,"deleteRecord")});var Pf=g((Nme,AC)=>{var Zj=require("crypto"),gC=9;function ez(e){let t=rz(gC),r=RC(e+t);return t+r}a(ez,"createHash");function tz(e,t){let r=e?.substr(0,gC),n=r+RC(t+r);return e===n}a(tz,"validateHash");function rz(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(rz,"generateSalt");function RC(e){return Zj.createHash("md5").update(e).digest("hex")}a(RC,"md5");AC.exports={hash:ez,validate:tz}});var bC=g((Ime,OC)=>{var AT=tt(),ar={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 nz(e){return ar.password.presence=!0,ar.username.presence=!0,ar.role.presence=!0,ar.active.presence=!0,AT.validateObject(e,ar)}a(nz,"addUserValidation");function sz(e){return ar.password.presence=!1,ar.username.presence=!0,ar.role.presence=!1,ar.active.presence=!1,AT.validateObject(e,ar)}a(sz,"alterUserValidation");function iz(e){return ar.password.presence=!1,ar.username.presence=!0,ar.role.presence=!1,ar.active.presence=!1,AT.validateObject(e,ar)}a(iz,"dropUserValidation");OC.exports={addUserValidation:nz,alterUserValidation:sz,dropUserValidation:iz}});var Xe=g((Dme,yC)=>{"use strict";var{platform:Cme}=require("os"),oz="nats-server.zip",OT="nats-server",az=process.platform==="win32"?`${OT}.exe`:OT,cz=/^[^\s.,*>]+$/,NC="__request__",lz=a(e=>`${e}.${NC}`,"REQUEST_SUBJECT"),uz={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},_z={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},dz={HUB:"hub.pid",LEAF:"leaf.pid"},fz={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Ez={SUCCESS:"success",ERROR:"error"},hz={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},pz={TXN:"txn",MSGID:"msgid"},_c={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},mz={[_c.ERR]:1,[_c.WRN]:2,[_c.INF]:3,[_c.DBG]:4,[_c.TRC]:5},Sz={debug:"-D",trace:"-DVV"};yC.exports={NATS_SERVER_ZIP:oz,NATS_SERVER_NAME:OT,NATS_BINARY_NAME:az,PID_FILES:dz,NATS_CONFIG_FILES:_z,SERVER_SUFFIX:fz,NATS_TERM_CONSTRAINTS_RX:cz,REQUEST_SUFFIX:NC,UPDATE_REMOTE_RESPONSE_STATUSES:Ez,CLUSTER_STATUS_STATUSES:hz,REQUEST_SUBJECT:lz,SUBJECT_PREFIXES:pz,MSG_HEADERS:uz,LOG_LEVELS:_c,LOG_LEVEL_FLAGS:Sz,LOG_LEVEL_HIERARCHY:mz}});var bT=g((Pme,IC)=>{"use strict";var Tz={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,`\r
6
6
  `),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,`\r
7
- `)},Tz="certificate.pem",gz="privateKey.pem",Rz="ca.pem";NC.exports={CERTIFICATE_VALUES:Sz,CERTIFICATE_PEM_NAME:Tz,PRIVATEKEY_PEM_NAME:gz,CA_PEM_NAME:Rz}});var bT=T((Pme,LC)=>{"use strict";var CC=require("fs-extra"),ce=require("joi"),Az=require("os"),{boolean:ye,string:ar,number:rt,array:OT}=ce.types(),{totalmem:yC}=require("os"),sa=require("path"),Oz=x(),Pf=K(),Lme=AT(),IC=D(),bz=tt(),wC="log",Nz="components",yz="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Iz="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",wz="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",Cz="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",Dz="rootPath config parameter is undefined",Lz="clustering.enabled config parameter is undefined",ia=rt.min(0).required(),Mf=OT.items({host:ar.required(),port:ia}).empty(null),Ds,DC=!1;LC.exports={configValidator:Pz,routesValidator:Gz,route_constraints:Mf};function Pz(e,t=!1){if(DC=t,Ds=e.rootPath,Pf.isEmpty(Ds))throw Dz;let r=ye.required(),n=rt.min(0).max(1e3).empty(null).default(Hz),s=ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(hu),i=ar.optional().empty(null),o=ar.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ce.string().empty(null).default(hu),l=ce.custom(Uz).empty(null).default(hu),_=e.clustering?.enabled;if(Pf.isEmpty(_))throw Lz;let u;return _===!0?u=ce.object({enabled:r,hubServer:ce.object({cluster:ce.object({name:ce.required().empty(null),network:ce.object({port:ia,routes:Mf}).required()}).required(),leafNodes:ce.object({network:ce.object({port:ia}).required()}).required(),network:ce.object({port:ia}).required()}).required(),leafServer:ce.object({network:ce.object({port:ia,routes:Mf}).required(),streams:ce.object({maxAge:rt.min(120).allow(null).optional(),maxBytes:rt.min(1).allow(null).optional(),maxMsgs:rt.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ce.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:ye.optional(),databaseLevel:ye.optional(),tls:ce.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required(),verify:ye.optional()}),user:ar.optional().empty(null)}).required():u=ce.object({enabled:r,tls:ce.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()})}).required(),ce.object({authentication:ce.object({authorizeLocal:ye,cacheTTL:rt.required(),enableSessions:ye}),analytics:ce.object({aggregatePeriod:rt}),componentsRoot:s.optional(),clustering:u,localStudio:ce.object({enabled:r}).required(),logging:ce.object({auditAuthEvents:ce.object({logFailed:ye,logSuccessful:ye}),file:ye.required(),level:ce.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ce.object({enabled:ye.optional(),compress:ye.optional(),interval:ar.custom(Bz).optional().empty(null),maxSize:ar.custom(vz).optional().empty(null),path:ar.optional().empty(null).default(hu)}).required(),root:s,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:ce.object({network:ce.object({cors:ye.optional(),corsAccessList:OT.optional(),headersTimeout:rt.min(1).optional(),keepAliveTimeout:rt.min(1).optional(),port:rt.optional().empty(null),domainSocket:ce.optional().empty("hdb/operations-server").default(hu),securePort:rt.optional().empty(null),timeout:rt.min(1).optional()}).optional(),tls:ce.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ce.object({network:ce.object({port:ia,securePort:ia,mtls:ce.alternatives([ye.optional(),ce.object({user:ar.optional(),certificateAuthority:i,required:ye.optional()})])}).required(),webSocket:ye.optional(),requireAuthentication:ye.optional()}),http:ce.object({compressionThreshold:rt.optional(),cors:ye.optional(),corsAccessList:OT.optional(),headersTimeout:rt.min(1).optional(),port:rt.min(0).optional().empty(null),securePort:rt.min(0).optional().empty(null),maxHeaderSize:rt.optional(),mtls:ce.alternatives([ye.optional(),ce.object({user:ar.optional(),certificateAuthority:i,required:ye.optional()})])}).required(),threads:ce.alternatives(n.optional(),ce.object({count:n.optional(),debug:ce.alternatives(ye.optional(),ce.object({startingPort:rt.min(1).optional(),host:ar.optional(),waitForDebugger:ye.optional()})),maxHeapMemory:rt.min(0).optional()})),storage:ce.object({writeAsync:ye.required(),overlappingSync:ye.optional(),caching:ye.optional(),compression:ce.alternatives([ye.optional(),ce.object({dictionary:ar.optional(),threshold:rt.optional()})]),compactOnStart:ye.optional(),compactOnStartKeepBackup:ye.optional(),noReadAhead:ye.optional(),path:l,prefetchWrites:ye.optional(),maxFreeSpaceToLoad:rt.optional(),maxFreeSpaceToRetain:rt.optional()}).required(),ignoreScripts:ye.optional(),tls:ce.object({certificate:i.optional(),certificateAuthority:i.optional(),privateKey:i.optional(),ciphers:ar.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(Pz,"configValidator");function Mz(e){return DC||CC.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Mz,"doesPathExist");function Uz(e,t){ce.assert(e,ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Mz(e);if(r)return t.message(r)}a(Uz,"validatePath");function vz(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(yz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(wz):e}a(vz,"validateRotationMaxSize");function Bz(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Iz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Cz):e}a(Bz,"validateRotationInterval");function Hz(e,t){let r=t.state.path.join("."),n=Az.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||yC();return i=Math.round(Math.min(i,yC())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),Oz.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(Hz,"setDefaultThreads");function hu(e,t){let r=t.state.path.join(".");if(!Pf.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Pf.isEmpty(Ds))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return sa.join(Ds,Nz);case"logging.root":return sa.join(Ds,wC);case"clustering.leafServer.streams.path":return sa.join(Ds,"clustering","leaf");case"storage.path":let n=sa.join(Ds,IC.LEGACY_DATABASES_DIR_NAME);return CC.existsSync(n)?n:sa.join(Ds,IC.DATABASES_DIR_NAME);case"logging.rotation.path":return sa.join(Ds,wC);case"operationsApi.network.domainSocket":return r==null?null:sa.join(Ds,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(hu,"setDefaultRoot");function Gz(e){let t=ce.object({routes:Mf});return bz.validateBySchema({routes:e},t)}a(Gz,"routesValidator")});var ut=T((vme,xC)=>{"use strict";var sn=D(),$t=K(),Mt=x(),{configValidator:qz,routesValidator:PC}=bT(),Ir=require("fs-extra"),xz=require("yaml"),ns=require("path"),Fz=require("is-number"),UC=require("properties-reader"),kz=require("lodash"),{handleHDBError:$z}=oe(),{HTTP_STATUS_CODES:Vz,HDB_ERROR_MSGS:Uf}=Zr(),Ume=require("minimist"),{server:Yz}=(Or(),ie(Wo)),{DATABASES_PARAM_CONFIG:pu,CONFIG_PARAMS:nn,CONFIG_PARAM_MAP:ss}=sn,Kz="Unable to get config value because config is uninitialized",Wz="Config successfully initialized",Qz="Error backing up config file",jz="Empty parameter sent to getConfigValue",vC=ns.join(sn.PACKAGE_ROOT,"config","yaml",sn.HDB_DEFAULT_CONFIG_FILE),zz="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",MC={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"},vf,Ut,Bf;xC.exports={createConfigFile:Jz,getDefaultConfig:Xz,getConfigValue:HC,initConfig:yT,flattenConfig:fc,updateConfigValue:GC,updateConfigObject:e2,getConfiguration:n2,setConfiguration:s2,readConfigFile:wT,getClusteringRoutes:i2,initOldConfig:qC,getConfigFromFile:o2,getConfigFilePath:oa,addConfig:a2,deleteConfigFromFile:c2,getConfigObj:l2};function Jz(e,t=!1){let r=so(vC);vf=fc(r.toJSON());let n;for(let c in e){let l=ss[c.toLowerCase()];if(l===nn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(_=>({[_]:e[c][_]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let _=l.split("_"),u=NT(l,e[c]);l==="rootPath"&&u?.endsWith("/")&&(u=u.slice(0,-1));try{r.setIn([..._],u)}catch(d){Mt.error(d)}}}n&&BC(r,n),IT(r,t);let s=r.toJSON();Ut=fc(s);let i=r.getIn(["rootPath"]),o=ns.join(i,sn.HDB_CONFIG_FILE);Ir.createFileSync(o),Ir.writeFileSync(o,String(r)),Mt.trace(`Config file written to ${o}`)}a(Jz,"createConfigFile");function BC(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!$t.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(pu.TABLES))for(let i in n[s][pu.TABLES])for(let o in n[s][pu.TABLES][i]){let c=n[s][pu.TABLES][i][o],l=[nn.DATABASES,s,pu.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[nn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Mt.error("Error parsing schemas CLI/env config arguments",n)}}a(BC,"setSchemasConfig");function Xz(e){if(vf===void 0){let r=so(vC);vf=fc(r.toJSON())}let t=ss[e.toLowerCase()];if(t!==void 0)return vf[t.toLowerCase()]}a(Xz,"getDefaultConfig");function HC(e){if(e==null){Mt.error(jz);return}if(Ut===void 0){Mt.trace(Kz);return}let t=ss[e.toLowerCase()];if(t!==void 0)return Ut[t.toLowerCase()]}a(HC,"getConfigValue");function oa(e=$t.getPropsFilePath()){let t=$t.getEnvCliRootPath();return t?ns.join(t,sn.HDB_CONFIG_FILE):UC(e).get(sn.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(oa,"getConfigFilePath");function yT(e=!1){if(Ut===void 0||e){let t;if(!$t.noBootFile()){t=$t.getPropsFilePath();try{Ir.accessSync(t,Ir.constants.F_OK|Ir.constants.R_OK)}catch(i){throw Mt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=oa(t),n;if(r.includes("config/settings.js"))try{qC(r);return}catch(i){if(i.code!==sn.NODE_ERROR_CODES.ENOENT)throw i}try{n=so(r)}catch(i){if(i.code===sn.NODE_ERROR_CODES.ENOENT){Mt.trace(`HarperDB config file not found at ${r}.
8
- This can occur during early stages of install where the config file has not yet been created`);return}else throw Mt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Zz(n,r),IT(n);let s=n.toJSON();if(Yz.config=s,Ut=fc(s),Ut.logging_rotation_rotate)for(let i in MC)Ut[i]&&Mt.error(`Config ${MC[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Mt.trace(Wz)}}a(yT,"initConfig");function Zz(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ns.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ns.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ns.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(Mt.trace("Updating config file with missing config params"),Ir.writeFileSync(t,String(e)))}a(Zz,"checkForUpdatedConfig");function IT(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=qz(r,t);if(n.error)throw Uf.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket)}a(IT,"validateConfig");function e2(e,t){Ut===void 0&&(Ut={});let r=ss[e.toLowerCase()];if(r===void 0){Mt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ut[r.toLowerCase()]=t}a(e2,"updateConfigObject");function GC(e,t,r=void 0,n=!1,s=!1,i=!1){Ut===void 0&&yT();let o=HC(ss.hdb_root),c=ns.join(o,sn.HDB_CONFIG_FILE),l=so(c),_;if(r===void 0&&e.toLowerCase()===nn.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=ss[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=NT(f,t);l.setIn([...E],h)}else for(let f in r){let E=ss[f.toLowerCase()];if(E===nn.HTTP_SECUREPORT&&r[f]===Ut[nn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),E===nn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===Ut[nn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),E===nn.DATABASES){_=r[f];continue}if(E?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!E&&(f.endsWith("_package")||f.endsWith("_port"))&&(E=f),E!==void 0){let h=E.split("_"),m=sn.LEGACY_CONFIG_PARAMS[f.toUpperCase()];m&&m.startsWith("customFunctions")&&l.hasIn(m.split("_"))&&(E=m,h=m.split("_"));let S=NT(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],S)}catch(R){Mt.error(R)}}}_&&BC(l,_),IT(l);let u=l.getIn(["rootPath"]),d=ns.join(u,sn.HDB_CONFIG_FILE);n===!0&&t2(c,u),Ir.writeFileSync(d,String(l)),s&&(Ut=fc(l.toJSON())),Mt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(GC,"updateConfigValue");function t2(e,t){try{let r=ns.join(t,"backup",`${sn.HDB_CONFIG_FILE}.bak`);Ir.copySync(e,r),Mt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Mt.error(Qz),Mt.error(r)}}a(t2,"backupConfigFile");var r2=["databases"];function fc(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),Bf=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!r2.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!nn[l.toUpperCase()]&&ss[l]&&(s[ss[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(fc,"flattenConfig");function NT(e,t){if(e===nn.CLUSTERING_NODENAME||e===nn.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(Fz(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(NT,"castConfigValue");function n2(){let e=$t.getPropsFilePath(),t=oa(e);return so(t).toJSON()}a(n2,"getConfiguration");async function s2(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return GC(void 0,void 0,s,!0),zz}catch(i){throw typeof i=="string"||i instanceof String?$z(i,i,Vz.BAD_REQUEST,void 0,void 0,!0):i}}a(s2,"setConfiguration");function wT(){let e=$t.getPropsFilePath();try{Ir.accessSync(e,Ir.constants.F_OK|Ir.constants.R_OK)}catch(n){if(!$t.noBootFile())throw Mt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=oa(e);return so(t).toJSON()}a(wT,"readConfigFile");function so(e){return xz.parseDocument(Ir.readFileSync(e,"utf8"),{simpleKeys:!0})}a(so,"parseYamlDoc");function i2(){let e=wT(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=$t.isEmptyOrZeroLength(t)?[]:t;let r=PC(t);if(r)throw Uf.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=$t.isEmptyOrZeroLength(n)?[]:n;let s=PC(n);if(s)throw Uf.CONFIG_VALIDATION(s.message);if(!$t.isEmptyOrZeroLength(n)&&!$t.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.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 Uf.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(i2,"getClusteringRoutes");function qC(e){let t=UC(e);Ut={};for(let r in ss){let n=t.get(r.toUpperCase());if($t.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ss[r].toLowerCase();s===nn.LOGGING_ROOT?Ut[s]=ns.dirname(n):Ut[s]=n}return Ut}a(qC,"initOldConfig");function o2(e){let t=wT();return kz.get(t,e.replaceAll("_","."))}a(o2,"getConfigFromFile");async function a2(e,t){let r=so(oa());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Ir.writeFile(oa(),String(r))}a(a2,"addConfig");function c2(e){let t=oa($t.getPropsFilePath()),r=so(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ns.join(n,sn.HDB_CONFIG_FILE);Ir.writeFileSync(s,String(r))}a(c2,"deleteConfigFromFile");function l2(){return Bf||(yT(),Bf)}a(l2,"getConfigObj")});var kC=T((Hme,FC)=>{"use strict";var Hf=D(),Gf=class{static{a(this,"BaseLicense")}constructor(t=0,r=Hf.RAM_ALLOCATION_ENUM.DEFAULT,n=Hf.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},CT=class extends Gf{static{a(this,"ExtendedLicense")}constructor(t=0,r=Hf.RAM_ALLOCATION_ENUM.DEFAULT,n=Hf.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};FC.exports={BaseLicense:Gf,ExtendedLicense:CT}});var aa=T((qme,QC)=>{"use strict";var hc=require("fs-extra"),VC=Lf(),YC=require("crypto"),u2=require("moment"),_2=require("uuid").v4,cr=x(),LT=require("path"),d2=K(),io=D(),{totalmem:$C}=require("os"),f2=kC().ExtendedLicense,Ec="invalid license key format",E2="061183",h2="mofi25",p2="aes-256-cbc",m2=16,S2=32,KC=X();KC.initSync();var DT;QC.exports={validateLicense:WC,generateFingerPrint:g2,licenseSearch:UT,getLicense:O2,checkMemoryLimit:b2};function PT(){return LT.join(KC.getHdbBasePath(),io.LICENSE_KEY_DIR_NAME,io.LICENSE_FILE_NAME)}a(PT,"getLicenseDirPath");function T2(){let e=PT();return LT.join(e,io.LICENSE_FILE_NAME)}a(T2,"getLicenseFilePath");function MT(){let e=PT();return LT.join(e,io.REG_KEY_FILE_NAME)}a(MT,"getFingerPrintFilePath");async function g2(){let e=MT();try{return await hc.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await R2();throw cr.error(`Error writing fingerprint file to ${e}`),cr.error(t),new Error("There was an error generating the fingerprint")}}a(g2,"generateFingerPrint");async function R2(){let e=_2(),t=VC.hash(e),r=MT();try{await hc.mkdirp(PT()),await hc.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw cr.error(`Error writing fingerprint file to ${r}`),cr.error(n),new Error("There was an error generating the fingerprint")}return t}a(R2,"writeFingerprint");function WC(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:io.RAM_ALLOCATION_ENUM.DEFAULT,version:io.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return cr.error("empty license key passed to validate."),r;let n=MT(),s=!1;try{s=hc.statSync(n)}catch(i){cr.error(i)}if(s){let i;try{i=hc.readFileSync(n,"utf8")}catch{cr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(h2),c=o[1];c=Buffer.concat([Buffer.from(c)],m2);let l=Buffer.concat([Buffer.from(i)],S2),_=YC.createDecipheriv(p2,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let u=null;try{u=_.update(o[0],"hex","utf8"),u.trim(),u+=_.final("utf8")}catch{let E=A2(o[0],i);if(E)u=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Ec),cr.error(Ec),new Error(Ec)}let d;if(isNaN(u))try{d=JSON.parse(u),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(Ec),cr.error(Ec),new Error(Ec)}else r.exp_date=u;r.exp_date<u2().valueOf()&&(r.valid_date=!1),VC.validate(o[1],`${E2}${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||cr.error("Invalid licence"),r}a(WC,"validateLicense");function A2(e,t){try{let r=YC.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{cr.warn("Check old license failed")}}a(A2,"checkOldLicense");function UT(){let e=new f2,t=[];try{t=hc.readFileSync(T2(),"utf-8").split(io.NEW_LINE)}catch(r){r.code==="ENOENT"?cr.info("no license file found"):cr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(d2.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=WC(s.license_key,s.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(s){cr.error("There was an error parsing the license string."),cr.error(s),e.ram_allocation=io.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return DT=e,e}a(UT,"licenseSearch");async function O2(){return DT||await UT(),DT}a(O2,"getLicense");function b2(){let e=UT().ram_allocation,t=process.constrainedMemory?.()||$C();if(t=Math.round(Math.min(t,$C())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(b2,"checkMemoryLimit")});var wr=T((Vme,uD)=>{"use strict";var XC="username is required",ZC="nothing to update, must supply active, role or password to update",eD="password cannot be an empty string",tD="If role is specified, it cannot be empty.",rD="active must be true or false";uD.exports={addUser:M2,alterUser:U2,dropUser:B2,getSuperUser:x2,userInfo:H2,listUsers:xf,listUsersExternal:G2,setUsersToGlobal:mc,findAndValidateUser:cD,getClusterUser:F2,USERNAME_REQUIRED:XC,ALTERUSER_NOTHING_TO_UPDATE:ZC,EMPTY_PASSWORD:eD,EMPTY_ROLE:tD,ACTIVE_BOOLEAN:rD};var nD=yr(),N2=na(),HT=Lf(),sD=AC(),iD=ir(),GT=di(),on=K(),oD=require("validate.js"),be=x(),{promisify:y2}=require("util"),qT=ui(),jC=D(),zC=Xe(),I2=ut(),Fme=X(),kme=aa(),w2=ci(),{table:$me}=(ge(),ie(ke)),{handleHDBError:Ls,hdb_errors:C2}=oe(),{HTTP_STATUS_CODES:Ps,AUTHENTICATION_ERROR_MSGS:vT,HDB_ERROR_MSGS:pc}=C2,{UserEventMsg:xT}=is(),BT=require("lodash"),{server:FT}=(Or(),ie(Wo)),D2=x();FT.getUser=(e,t)=>cD(e,t,t!=null);var aD={username:!0,active:!0,role:!0,password:!0},JC=new Map,qf=iD.searchByValue,L2=iD.searchByHash,P2=y2(N2.delete);async function M2(e){let t=oD.cleanAttributes(e,aD),r=sD.addUserValidation(t);if(r)throw Ls(new Error,r.message,Ps.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await qf(n),s=s&&Array.from(s)}catch(l){throw be.error("There was an error searching for a role in add user"),be.error(l),l}if(!s||s.length<1)throw Ls(new Error,pc.ROLE_NAME_NOT_FOUND(t.role),Ps.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Ls(new Error,pc.DUP_ROLES_FOUND(t.role),Ps.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=qT.encrypt(t.password)),t.password=HT.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await nD.insert(i)}catch(l){throw be.error("There was an error searching for a user."),be.error(l),l}be.debug(o);try{await mc()}catch(l){throw be.error("Got an error setting users to global"),be.error(l),l}if(o.skipped_hashes.length===1)throw Ls(new Error,pc.USER_ALREADY_EXISTS(t.username),Ps.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],GT.signalUserChange(new xT(process.pid)),`${c.username} successfully added`}a(M2,"addUser");async function U2(e){let t=oD.cleanAttributes(e,aD);if(on.isEmptyOrZeroLength(t.username))throw new Error(XC);if(on.isEmptyOrZeroLength(t.password)&&on.isEmptyOrZeroLength(t.role)&&on.isEmptyOrZeroLength(t.active))throw new Error(ZC);if(!on.isEmpty(t.password)&&on.isEmptyOrZeroLength(t.password.trim()))throw new Error(eD);if(!on.isEmpty(t.active)&&!on.isBoolean(t.active))throw new Error(rD);let r=v2(t.username);if(!on.isEmpty(t.password)&&!on.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=qT.encrypt(t.password)),t.password=HT.hash(t.password)),t.role==="")throw new Error(tD);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 qf(i)||[])}catch(c){throw be.error("Got an error searching for a role."),be.error(c),c}if(!o||o.length===0){let c=pc.ALTER_USER_ROLE_NOT_FOUND(t.role);throw be.error(c),Ls(new Error,c,Ps.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=pc.ALTER_USER_DUP_ROLES(t.role);throw be.error(c),Ls(new Error,c,Ps.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await nD.update(n)}catch(i){throw be.error("Error during update."),be.error(i),i}try{await mc()}catch(i){throw be.error("Got an error setting users to global"),be.error(i),i}return GT.signalUserChange(new xT(process.pid)),s}a(U2,"alterUser");function v2(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(v2,"isClusterUser");async function B2(e){try{let t=sD.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(on.isEmpty(global.hdb_users.get(e.username)))throw Ls(new Error,pc.USER_NOT_EXIST(e.username),Ps.NOT_FOUND,void 0,void 0,!0);let n;try{n=await P2(r)}catch(s){throw be.error("Got an error deleting a user."),be.error(s),s}be.debug(n);try{await mc()}catch(s){throw be.error("Got an error setting users to global."),be.error(s),s}return GT.signalUserChange(new xT(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(B2,"dropUser");async function H2(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=BT.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await L2(r)}catch(s){throw be.error("Got an error searching for a role."),be.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw be.error(r),r}return t}a(H2,"userInfo");async function G2(){let e;try{e=await xf()}catch(t){throw be.error("Got an error listing users."),be.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(G2,"listUsersExternal");async function xf(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await qf(e)}catch(o){throw be.error("Got an error searching for roles."),be.error(o),o}let r={};for(let o of t)r[o.id]=BT.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await qf(n)}catch(o){throw be.error("Got an error searching for users."),be.error(o),o}let i=new Map;for(let o of s)o=BT.cloneDeep(o),o.role=r[o.role],q2(o.role),i.set(o.username,o);return i}catch(e){throw be.error("got an error listing users"),be.error(e),on.errorizeMessage(e)}return null}a(xf,"listUsers");function q2(e){try{if(!e){be.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(w2)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){be.error("Got an error trying to set system permissions."),be.error(t)}}a(q2,"appendSystemTablesToRole");async function mc(){try{let e=await xf();global.hdb_users=e}catch(e){throw be.error(e),e}}a(mc,"setUsersToGlobal");async function cD(e,t,r=!0){global.hdb_users||await mc();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Ls(new Error,vT.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Ls(new Error,vT.USER_INACTIVE,Ps.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(JC.get(t)===n.password)return s;if(HT.validate(n.password,t))JC.set(t,n.password);else throw Ls(new Error,vT.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0)}return s}a(cD,"findAndValidateUser");async function x2(){global.hdb_users||await mc();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(x2,"getSuperUser");async function F2(){let e=await xf(),t=I2.getConfigFromFile(jC.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!on.isEmpty(r)&&r?.role?.role===jC.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=qT.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+zC.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+zC.SERVER_SUFFIX.ADMIN,r}a(F2,"getClusterUser");var lD=[];FT.invalidateUser=function(e){for(let t of lD)try{t(e)}catch(r){D2.error("Error invalidating user",r)}};FT.onInvalidatedUser=function(e){lD.push(e)}});var Su=T((Qme,ED)=>{"use strict";var ca=x(),an=D(),k2=Vw(),Kme=Mn(),Wme=_i(),$2=wr(),{validateEvent:_D}=is(),mu=Un(),V2=require("process"),{resetDatabases:Y2}=(ge(),ie(ke)),K2={[an.ITC_EVENT_TYPES.SCHEMA]:W2,[an.ITC_EVENT_TYPES.USER]:fD};async function W2(e){let t=_D(e);if(t){ca.error(t);return}ca.trace("ITC schemaHandler received schema event:",e),await k2(e.message),await Q2(e.message)}a(W2,"schemaHandler");async function Q2(e){try{mu.resetReadTxn(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),mu.resetReadTxn(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),mu.resetReadTxn(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=Y2();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ca.error(t)}}a(Q2,"syncSchemaMetadata");var dD=[];async function fD(e){try{try{mu.resetReadTxn(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),mu.resetReadTxn(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ca.warn(r)}let t=_D(e);if(t){ca.error(t);return}ca.trace(`ITC userHandler ${an.HDB_ITC_CLIENT_PREFIX}${V2.pid} received user event:`,e),await $2.setUsersToGlobal();for(let r of dD)r()}catch(t){ca.error(t)}}a(fD,"userHandler");fD.addListener=function(e){dD.push(e)};ED.exports=K2});var is=T((eSe,pD)=>{"use strict";var zme=x(),kT=K(),j2=D(),{ITC_ERRORS:Tu}=Zr(),{parentPort:Jme,threadId:z2,isMainThread:J2,workerData:Xme}=require("worker_threads"),{onMessageFromWorkers:X2,broadcast:Zme,broadcastWithAcknowledgement:Z2}=et();pD.exports={sendItcEvent:eJ,validateEvent:hD,SchemaEventMsg:tJ,UserEventMsg:rJ};var Ff;X2(async(e,t)=>{Ff=Ff||Su(),hD(e),Ff[e.type]&&await Ff[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function eJ(e){return!J2&&e.message&&(e.message.originator=z2),Z2(e)}a(eJ,"sendItcEvent");function hD(e){if(typeof e!="object")return Tu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||kT.isEmpty(e.type))return Tu.MISSING_TYPE;if(!e.hasOwnProperty("message")||kT.isEmpty(e.message))return Tu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||kT.isEmpty(e.message.originator))return Tu.MISSING_ORIGIN;if(j2.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Tu.INVALID_EVENT(e.type)}a(hD,"validateEvent");function tJ(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(tJ,"SchemaEventMsg");function rJ(e){this.originator=e}a(rJ,"UserEventMsg")});var di=T((nSe,gD)=>{"use strict";var mD=D(),rSe=K(),kf=x(),SD=Fw(),Sc,{sendItcEvent:TD}=is();function nJ(e){try{kf.trace("signalSchemaChange called with message:",e),Sc=Sc||Su();let t=new SD(mD.ITC_EVENT_TYPES.SCHEMA,e);return Sc.schema(t),TD(t)}catch(t){kf.error(t)}}a(nJ,"signalSchemaChange");function sJ(e){try{kf.trace("signalUserChange called with message:",e),Sc=Sc||Su();let t=new SD(mD.ITC_EVENT_TYPES.USER,e);return Sc.user(t),TD(t)}catch(t){kf.error(t)}}a(sJ,"signalUserChange");gD.exports={signalSchemaChange:nJ,signalUserChange:sJ}});var $f=T((iSe,AD)=>{"use strict";var RD=K(),iJ=D(),oJ=x(),aJ=mf(),cJ=pf(),lJ=di(),{SchemaEventMsg:uJ}=is(),_J="already exists in";AD.exports=dJ;async function dJ(e,t,r){if(RD.isEmptyOrZeroLength(r))return r;let n=[];RD.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await fJ(e,t.schema,t.name,i)})),s}a(dJ,"lmdbCheckForNewAttributes");async function fJ(e,t,r,n){let s=new cJ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await EJ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(_J))oJ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(fJ,"createNewAttribute");async function EJ(e){let t;return t=await aJ(e),lJ.signalSchemaChange(new uJ(process.pid,iJ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(EJ,"createAttribute")});var Tc=T((aSe,OD)=>{"use strict";var $T=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};OD.exports=$T});var ND=T((lSe,bD)=>{"use strict";var hJ=Tc(),pJ=D().OPERATIONS_ENUM,VT=class extends hJ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(pJ.INSERT,r,n,s,i),this.records=t}};bD.exports=VT});var ID=T((_Se,yD)=>{"use strict";var mJ=Tc(),SJ=D().OPERATIONS_ENUM,YT=class extends mJ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(SJ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};yD.exports=YT});var CD=T((fSe,wD)=>{"use strict";var TJ=Tc(),gJ=D().OPERATIONS_ENUM,KT=class extends TJ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(gJ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};wD.exports=KT});var LD=T((hSe,DD)=>{"use strict";var RJ=Tc(),AJ=D().OPERATIONS_ENUM,WT=class extends RJ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(AJ.DELETE,n,s,t,i),this.original_records=r}};DD.exports=WT});var gu=T((SSe,vD)=>{"use strict";var mSe=require("path"),PD=Ve(),OJ=ND(),bJ=ID(),NJ=CD(),yJ=LD(),gc=at(),MD=K(),{CONFIG_PARAMS:IJ}=D(),UD=X();UD.initSync();var Vf=D().OPERATIONS_ENUM,{getTransactionAuditStorePath:wJ}=je();vD.exports=CJ;async function CJ(e,t){if(UD.get(IJ.LOGGING_AUDITLOG)===!1)return;let r=wJ(e.schema,e.table),n=await PD.openEnvironment(r,e.table,!0),s=DJ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){PD.initializeDBIs(n,gc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,gc.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[gc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[gc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),MD.isEmpty(s.user_name)||n.dbis[gc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[gc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(CJ,"writeTransaction");function DJ(e,t){let r=MD.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Vf.INSERT)return new OJ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vf.UPDATE)return new bJ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vf.UPSERT)return new NJ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vf.DELETE)return new yJ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(DJ,"createTransactionObject")});var QT=T((RSe,BD)=>{"use strict";var LJ=_u(),gSe=du(),Ru=D(),PJ=fu(),MJ=Jo().insertRecords,UJ=Ve(),vJ=x(),BJ=$f(),{getSchemaPath:HJ}=je(),GJ=gu();BD.exports=qJ;async function qJ(e){try{let{schema_table:t,attributes:r}=LJ(e);PJ(e,r,t.hash_attribute),e.schema!==Ru.SYSTEM_SCHEMA_NAME&&(r.includes(Ru.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ru.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ru.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ru.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await BJ(e.hdb_auth_header,t,r),s=HJ(e.schema,e.table),i=await UJ.openEnvironment(s,e.table),o=await MJ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await GJ(e,o)}catch(c){vJ.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:n,txn_time:o.txn_time}}catch(t){throw t}}a(qJ,"lmdbCreateRecords")});var qD=T((OSe,GD)=>{"use strict";var HD=D(),xJ=QT(),FJ=du(),kJ=require("fs-extra"),{getSchemaPath:$J}=je();GD.exports=VJ;async function VJ(e){let t=[{name:e.schema,createddate:Date.now()}],r=new FJ(HD.SYSTEM_SCHEMA_NAME,HD.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await xJ(r),await kJ.mkdirp($J(e.schema))}a(VJ,"lmdbCreateSchema")});var FD=T((NSe,xD)=>{"use strict";var jT=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};xD.exports=jT});var YD=T((DSe,VD)=>{"use strict";var kD=Ve(),zT=Ar(),JT=Zr().LMDB_ERRORS_ENUM,YJ=at(),$D=x(),ISe=K(),KJ=require("lmdb"),WJ=FD(),QJ=D(),{OVERFLOW_MARKER:wSe,MAX_SEARCH_KEY_LENGTH:CSe}=YJ,jJ=QJ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function zJ(e,t,r,n){if(zT.validateEnv(e),t===void 0)throw new Error(JT.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(JT.IDS_REQUIRED):new Error(JT.IDS_MUST_BE_ITERABLE);try{let s=kD.listDBIs(e);kD.initializeDBIs(e,t,s);let i=new WJ,o,c=[],l=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||n&&h[jJ]>n){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,KJ.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let R=s[S];if(!h.hasOwnProperty(R)||R===t)continue;let g=e.dbis[R],A=h[R];if(A!=null)try{let P=zT.getIndexedValues(A);if(P)for(let U=0,v=P.length;U<v;U++)g.remove(P[U],o)}catch{$D.warn(`cannot delete from attribute: ${R}, ${A}:${o}`)}}});c.push(m),l.push(o),i.original_records.push(h)}catch(h){$D.warn(h),i.skipped.push(o)}let _=[],u=await Promise.all(c);for(let f=0,E=u.length;f<E;f++)u[f]===!0?i.deleted.push(l[f]):(i.skipped.push(l[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=zT.getNextMonotonicTime(),i}catch(s){throw s}}a(zJ,"deleteRecords");VD.exports={deleteRecords:zJ}});var Au=T((PSe,WD)=>{"use strict";var Rc=K(),JJ=YD(),XJ=Ve(),{getSchemaPath:ZJ}=je(),e4=gu(),t4=x();WD.exports=r4;async function r4(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Rc.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Rc.isEmptyOrZeroLength(e.hash_values)&&!Rc.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Rc.isEmpty(l)||e.hash_values.push(l)}}if(Rc.isEmptyOrZeroLength(e.hash_values))return KD([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Rc.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=ZJ(e.schema,e.table),i=await XJ.openEnvironment(s,e.table),o=await JJ.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await e4(e,o)}catch(c){t4.error(`unable to write transaction due to ${c.message}`)}return KD(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(r4,"lmdbDeleteRecords");function KD(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(KD,"createDeleteResponse")});var ZT=T((vSe,QD)=>{"use strict";var n4=D(),USe=Ar();function XT(e,t){let r=Object.create(null);if(t.length===1&&n4.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(XT,"parseRow");function s4(e,t,r,n){let s=XT(r,e);n.push(s)}a(s4,"searchAll");function i4(e,t,r,n){let s=XT(r,e);n[t]=s}a(i4,"searchAllToMap");function o4(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(o4,"iterateDBI");function la(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(la,"pushResults");function a4(e,t,r,n,s,i){t.toString().endsWith(e)&&la(t,r,n,s,i)}a(a4,"endsWith");function c4(e,t,r,n,s,i){t.toString().includes(e)&&la(t,r,n,s,i)}a(c4,"contains");function l4(e,t,r,n,s,i){t>e&&la(t,r,n,s,i)}a(l4,"greaterThanCompare");function u4(e,t,r,n,s,i){t>=e&&la(t,r,n,s,i)}a(u4,"greaterThanEqualCompare");function _4(e,t,r,n,s,i){t<e&&la(t,r,n,s,i)}a(_4,"lessThanCompare");function d4(e,t,r,n,s,i){t<=e&&la(t,r,n,s,i)}a(d4,"lessThanEqualCompare");QD.exports={parseRow:XT,searchAll:s4,searchAllToMap:i4,iterateDBI:o4,endsWith:a4,contains:c4,greaterThanCompare:l4,greaterThanEqualCompare:u4,lessThanCompare:_4,lessThanEqualCompare:d4,pushResults:la}});var Ac=T((xSe,tL)=>{"use strict";var oo=Ve(),HSe=x(),cn=Ar(),Yf=at(),ht=Zr().LMDB_ERRORS_ENUM,GSe=K(),f4=D(),Kf=ZT(),{parseRow:E4}=Kf,qSe=require("lmdb"),{OVERFLOW_MARKER:jD,MAX_SEARCH_KEY_LENGTH:h4}=Yf;function zD(e,t,r,n=!1,s=void 0,i=void 0){return ua(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(zD,"iterateFullIndex");function Ou(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return ua(e,t,r,(u,d,f,E)=>{let g={transaction:u,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!_,exclusiveStart:i===!0?_:l};return E===r?(g.values=!1,d.getRange(g).map(A=>({value:A}))):d.getRange(g)})}a(Ou,"iterateRangeBetween");function ua(e,t,r,n){let s=e.database||e,i=oo.openDBI(s,r);i[Yf.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&oo.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(ua,"setupTransaction");function JD(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(jD)){if(!s)if(r)s=oo.openDBI(e,r);else{let l=oo.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=oo.openDBI(e,l[_]),!s[Yf.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(JD,"getOverflowCheck");function p4(e,t,r,n=!1,s=void 0,i=void 0){if(cn.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return ua(e,t,t,(o,c,l)=>(Wf(r),r=bu(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>E4(_.value,r))))}a(p4,"searchAll");function m4(e,t,r,n=!1,s=void 0,i=void 0){if(cn.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);Wf(r),r=bu(e.database||e,r);let o=new Map;for(let{key:c,value:l}of zD(e,t,t,n,s,i))o.set(c,Kf.parseRow(l,r));return o}a(m4,"searchAllToMap");function S4(e,t,r=!1,n=void 0,s=void 0){if(cn.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=zD(e,void 0,t,r,n,s),c=o.transaction,l=JD(c.database,c,void 0,t);for(let{key:_,value:u}of o){let d=l(_,u);i[d]===void 0&&(i[d]=[]),i[d].push(u)}return i}a(S4,"iterateDBI");function T4(e,t){if(cn.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return oo.statDBI(e,t).entryCount}a(T4,"countAll");function g4(e,t,r,n,s=!1,i=void 0,o=void 0){return ao(e,r,n),ua(e,t,r,(c,l,_,u)=>(n=cn.convertKeyValueToWrite(n),u===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(g4,"equals");function R4(e,t,r){return ao(e,t,r),oo.openDBI(e,t).getValuesCount(r)}a(R4,"count");function A4(e,t,r,n,s=!1,i=void 0,o=void 0){return ao(e,r,n),ua(e,null,r,(c,l)=>{n=cn.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let u;if(s===!0){let d;for(let f of l.getKeys({transaction:c,start:n}))if(!f.startsWith(n)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),u=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(n))return f;if(_===!0)return u.DONE}}),u.filter(f=>f)}else return u=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return u.DONE}),_?u:u.filter(d=>d)})}a(A4,"startsWith");function O4(e,t,r,n,s=!1,i=void 0,o=void 0){return XD(e,t,r,n,s,i,o,!0)}a(O4,"endsWith");function XD(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ao(e,r,n),ua(e,null,r,(l,_,u,d)=>{let f=JD(u,l,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(E=>{let h=E.toString();return h.endsWith(jD)?_.getValues(E,{transaction:l}).map(m=>{let S=f(E,m);if(c?S.endsWith(n):S.includes(n))return{key:S,value:m}}).filter(m=>m):(c?h.endsWith(n):h.includes(n))?_[Yf.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:l}).map(m=>({key:E,value:m})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(XD,"contains");function b4(e,t,r,n,s=!1,i=void 0,o=void 0){ao(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Ou(e,t,r,n,l,s,i,o,!0,!1)}a(b4,"greaterThan");function N4(e,t,r,n,s=!1,i=void 0,o=void 0){ao(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Ou(e,t,r,n,l,s,i,o,!1,!1)}a(N4,"greaterThanEqual");function y4(e,t,r,n,s=!1,i=void 0,o=void 0){ao(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Ou(e,t,r,l,n,s,i,o,!1,!0)}a(y4,"lessThan");function I4(e,t,r,n,s=!1,i=void 0,o=void 0){ao(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Ou(e,t,r,l,n,s,i,o,!1,!1)}a(I4,"lessThanEqual");function w4(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(cn.validateEnv(e),r===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ht.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ht.END_VALUE_REQUIRED);if(n=cn.convertKeyValueToWrite(n),s=cn.convertKeyValueToWrite(s),n>s)throw new Error(ht.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ou(e,t,r,n,s,i,o,c)}a(w4,"between");function C4(e,t,r,n){cn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(Wf(r),r=bu(s,r),n===void 0)throw new Error(ht.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Kf.parseRow(c,r)),o}a(C4,"searchByHash");function D4(e,t,r){cn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(D4,"checkHashExists");function L4(e,t,r,n,s=[]){return eL(e,t,r,n,s),ZD(e,t,r,n,s).map(i=>i[1])}a(L4,"batchSearchByHash");function P4(e,t,r,n,s=[]){eL(e,t,r,n,s);let i=new Map;for(let[o,c]of ZD(e,t,r,n,s))i.set(o,c);return i}a(P4,"batchSearchByHashToMap");function ZD(e,t,r,n,s=[]){return ua(e,t,t,(i,o,c)=>{r=bu(c,r);let l=r.length<3;return n.map(_=>{let u=c.dbis[t].get(_,{transaction:i,lazy:l});if(u)return[_,Kf.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(ZD,"batchHashSearch");function eL(e,t,r,n,s){if(cn.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(Wf(r),n==null)throw new Error(ht.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ht.IDS_MUST_BE_ITERABLE)}a(eL,"initializeBatchSearchByHash");function Wf(e){if(!Array.isArray(e))throw e===void 0?new Error(ht.FETCH_ATTRIBUTES_REQUIRED):new Error(ht.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Wf,"validateFetchAttributes");function ao(e,t,r){if(cn.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.SEARCH_VALUE_REQUIRED);if(r?.length>h4)throw new Error(ht.SEARCH_VALUE_TOO_LARGE)}a(ao,"validateComparisonFunctions");function bu(e,t){return t.length===1&&f4.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=oo.listDBIs(e)),t}a(bu,"setGetWholeRowAttributes");tL.exports={searchAll:p4,searchAllToMap:m4,count:R4,countAll:T4,equals:g4,startsWith:A4,endsWith:O4,contains:XD,searchByHash:C4,setGetWholeRowAttributes:bu,batchSearchByHash:L4,batchSearchByHashToMap:P4,checkHashExists:D4,iterateDBI:S4,greaterThan:b4,greaterThanEqual:N4,lessThan:y4,lessThanEqual:I4,between:w4}});var Oc=T((kSe,oL)=>{var rL=require("lodash"),nL=tt(),he=require("joi"),M4=K(),{hdb_schema_table:Nu,checkValidTable:sL,hdb_table:iL,hdb_database:Qf}=ws(),{handleHDBError:U4,hdb_errors:v4}=oe(),{getDatabases:B4}=(ge(),ie(ke)),{HTTP_STATUS_CODES:H4}=v4,G4=he.object({database:Qf,schema:Qf,table:iL,search_attribute:Nu,search_value:he.any().required(),get_attributes:he.array().min(1).items(he.alternatives(Nu,he.object())).optional(),desc:he.bool(),limit:he.number().integer().min(1),offset:he.number().integer().min(0)}),q4=he.object({database:Qf,schema:Qf,table:iL,operator:he.string().valid("and","or").default("and").lowercase(),offset:he.number().integer().min(0),limit:he.number().integer().min(1),get_attributes:he.array().min(1).items(he.alternatives(Nu,he.object())).optional(),sort:he.object({attribute:he.alternatives(Nu,he.array().min(1)),descending:he.bool().optional()}).optional(),conditions:he.array().min(1).items(he.alternatives(he.object({operator:he.string().valid("and","or").default("and").lowercase(),conditions:he.array()}),he.object({search_attribute:he.alternatives(Nu,he.array().min(1)),search_type:he.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:he.when("search_type",{switch:[{is:"equals",then:he.any()},{is:"between",then:he.array().items(he.alternatives([he.string(),he.number()])).length(2)}],otherwise:he.alternatives(he.string(),he.number())}).required()}))).required()});oL.exports=function(e,t){let r=null;switch(t){case"value":r=nL.validateBySchema(e,G4);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(sL("database",e.schema)),i(sL("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"),s&&(r=new Error(s.trim()));break;case"conditions":r=nL.validateBySchema(e,q4);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=M4.checkGlobalSchemaTable(e.schema,e.table);if(s)return U4(new Error,s,H4.NOT_FOUND);let o=B4()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(u=>{for(let d=0,f=u.conditions.length;d<f;d++){let E=u.conditions[d];E.conditions?l(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&l(e);let _=rL.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!Array.isArray(u)&&!u.name&&!rL.some(o,d=>d===u||d.attribute===u||d.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var eg=T((VSe,aL)=>{"use strict";var x4=Ve(),F4=Oc(),{getSchemaPath:k4}=je();aL.exports=$4;function $4(e){let t=F4(e,"hashes");if(t)throw t;let r=k4(e.schema,e.table);return x4.openEnvironment(r,e.table)}a($4,"initialize")});var tg=T((KSe,cL)=>{"use strict";var V4=Ac(),Y4=eg();cL.exports=K4;async function K4(e){let t=await Y4(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return V4.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(K4,"lmdbGetDataByHash")});var bc=T((QSe,lL)=>{"use strict";var rg=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};lL.exports=rg});var _L=T((JSe,uL)=>{"use strict";var zSe=bc(),W4=Ac(),Q4=eg();uL.exports=j4;async function j4(e){let t=await Q4(e),r=global.hdb_schema[e.schema][e.table];return W4.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(j4,"lmdbSearchByHash")});var os=T((ZSe,dL)=>{"use strict";var ng=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,_=void 0,u=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=_,this.offset=u}};dL.exports=ng});var jf=T((tTe,SL)=>{"use strict";var lr=Ac(),z4=Ve(),J4=K(),pe=at(),_a=D(),X4=ci(),fL=Zr().LMDB_ERRORS_ENUM,{getSchemaPath:Z4}=je(),fi=_a.SEARCH_WILDCARDS;async function e3(e,t,r){let n;e.schema===_a.SYSTEM_SCHEMA_NAME?n=X4[e.table]:n=global.hdb_schema[e.schema][e.table];let s=mL(e,n.hash_attribute,r,t);return hL(e,s,n.hash_attribute,r)}a(e3,"prepSearch");async function hL(e,t,r,n){let s=Z4(e.schema,e.table),i=await z4.openEnvironment(s,e.table),o=pL(i,e,t,r),c=o.transaction||i;if([pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,pe.SEARCH_TYPES.SEARCH_ALL,pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(t3(e,r)===!1){let u=e.search_attribute;if(u===r)return n?EL(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[u]:f.key}),"toObject");return n?EL(o,d):o.map(d)}let _=e.search_attribute===r?o.map(u=>u.key):o.map(u=>u.value);return n===!0?lr.batchSearchByHashToMap(c,r,e.get_attributes,_):lr.batchSearchByHash(c,r,e.get_attributes,_)}a(hL,"executeSearch");function pL(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case pe.SEARCH_TYPES.EQUALS:s=lr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.CONTAINS:s=lr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.ENDS_WITH:case pe.SEARCH_TYPES._ENDS_WITH:s=lr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.STARTS_WITH:case pe.SEARCH_TYPES._STARTS_WITH:s=lr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return lr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return lr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.SEARCH_ALL:return lr.searchAll(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return lr.searchAllToMap(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.BETWEEN:s=lr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case pe.SEARCH_TYPES.GREATER_THAN:case pe.SEARCH_TYPES._GREATER_THAN:s=lr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.GREATER_THAN_EQUAL:case pe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=lr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.LESS_THAN:case pe.SEARCH_TYPES._LESS_THAN:s=lr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.LESS_THAN_EQUAL:case pe.SEARCH_TYPES._LESS_THAN_EQUAL:s=lr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(pL,"searchByType");function EL(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(EL,"createMapFromIterable");function t3(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 n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(t3,"checkToFetchMore");function mL(e,t,r,n){if(J4.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),fi.indexOf(s)>-1)return r===!0?pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:pe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(fi[0])<0&&s.indexOf(fi[1])<0)return c===!0?r===!0?pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:pe.SEARCH_TYPES.EQUALS;if(fi.indexOf(i)>=0&&fi.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),pe.SEARCH_TYPES.CONTAINS;if(fi.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),pe.SEARCH_TYPES.ENDS_WITH;if(fi.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),pe.SEARCH_TYPES.STARTS_WITH;if(s.includes(fi[0])||s.includes(fi[1]))return pe.SEARCH_TYPES.EQUALS;throw new Error(fL.UNKNOWN_SEARCH_TYPE)}else switch(n){case _a.VALUE_SEARCH_COMPARATORS.BETWEEN:return pe.SEARCH_TYPES.BETWEEN;case _a.VALUE_SEARCH_COMPARATORS.GREATER:return pe.SEARCH_TYPES.GREATER_THAN;case _a.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return pe.SEARCH_TYPES.GREATER_THAN_EQUAL;case _a.VALUE_SEARCH_COMPARATORS.LESS:return pe.SEARCH_TYPES.LESS_THAN;case _a.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return pe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(fL.UNKNOWN_SEARCH_TYPE)}}a(mL,"createSearchTypeFromSearchObject");SL.exports={executeSearch:hL,createSearchTypeFromSearchObject:mL,prepSearch:e3,searchByType:pL}});var gL=T((sTe,TL)=>{"use strict";var nTe=os(),r3=Oc(),n3=K(),s3=D(),i3=jf();TL.exports=o3;function o3(e,t){if(!n3.isEmpty(t)&&s3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=r3(e,"value");if(n)throw n;return i3.prepSearch(e,t,!0)}a(o3,"lmdbGetDataByValue")});var yu=T((aTe,RL)=>{"use strict";var oTe=os(),a3=Oc(),c3=K(),l3=D(),u3=jf();RL.exports=_3;async function _3(e,t){if(!c3.isEmpty(t)&&l3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=a3(e,"value");if(n)throw n;return u3.prepSearch(e,t,!1)}a(_3,"lmdbSearchByValue")});var OL=T((uTe,AL)=>{"use strict";var lTe=at(),sg=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},ig=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},og=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};AL.exports={SearchByConditionsObject:sg,SearchCondition:ig,SortAttribute:og}});var wL=T((ETe,IL)=>{"use strict";var dTe=OL().SearchByConditionsObject,d3=os(),f3=Oc(),ag=Ac(),zf=at(),{Resource:fTe}=(es(),ie(cg)),yL=jf(),E3=ZT(),h3=require("lodash"),{getSchemaPath:p3}=je(),bL=Ve(),{handleHDBError:m3,hdb_errors:S3}=oe(),{HTTP_STATUS_CODES:T3}=S3,g3=1e8;IL.exports=R3;async function R3(e){let t=f3(e,"conditions");if(t)throw m3(t,t.message,T3.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=p3(e.schema,e.table),n=await bL.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)bL.openDBI(n,_.search_attribute);let i=h3.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===zf.SEARCH_TYPES.EQUALS?_.estimated_count=ag.count(n,_.search_attribute,_.search_value):u===zf.SEARCH_TYPES.CONTAINS||u===zf.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=g3}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await NL(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],u=i.slice(1).map(yL.filterByType),d=u.length,f=ag.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(l=l.filter(E=>{for(let h=0;h<d;h++)if(!u[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(E=>E3.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await NL(o,e,f,s.hash_attribute);c=c.concat(E)}let _=new Set,u=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(u,e.limit&&e.limit+u),l=ag.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(R3,"lmdbSearchByConditions");async function NL(e,t,r,n){let s=new d3(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===zf.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,yL.searchByType(e,s,i,n).map(o=>o.value)}a(NL,"executeConditionSearch")});var Iu=T((pTe,CL)=>{"use strict";var A3=D().OPERATIONS_ENUM,lg=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=A3.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};CL.exports=lg});var ug=T((STe,HL)=>{"use strict";var ML=os(),UL=Iu(),vL=yu(),BL=Au(),Cr=D(),DL=K(),LL=Ve(),{getTransactionAuditStorePath:O3,getSchemaPath:b3}=je(),PL=x();HL.exports=N3;async function N3(e){try{if(DL.isEmpty(global.hdb_schema[e.schema])||DL.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await y3(e),await I3(e);let t=b3(e.schema,e.table);try{await LL.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")PL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=O3(e.schema,e.table);await LL.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")PL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(N3,"lmdbDropTable");async function y3(e){let t=new ML(Cr.SYSTEM_SCHEMA_NAME,Cr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await vL(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new UL(Cr.SYSTEM_SCHEMA_NAME,Cr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await BL(s)}a(y3,"deleteAttributesFromSystem");async function I3(e){let t=new ML(Cr.SYSTEM_SCHEMA_NAME,Cr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await vL(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&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new UL(Cr.SYSTEM_SCHEMA_NAME,Cr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await BL(s)}catch(i){throw i}}a(I3,"dropTableFromSystem")});var qL=T((gTe,GL)=>{"use strict";var w3=require("fs-extra"),C3=os(),D3=bc(),L3=Iu(),P3=ug(),M3=Au(),U3=tg(),v3=yu(),Ei=D(),{getSchemaPath:B3}=je(),{handleHDBError:H3,hdb_errors:G3}=oe(),{HDB_ERROR_MSGS:q3,HTTP_STATUS_CODES:x3}=G3;GL.exports=F3;async function F3(e){let t;try{t=await k3(e.schema);let r=new C3(Ei.SYSTEM_SCHEMA_NAME,Ei.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ei.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Ei.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await v3(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await P3(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new L3(Ei.SYSTEM_SCHEMA_NAME,Ei.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await M3(s);let i=B3(t);await w3.remove(i)}catch(r){throw r}}a(F3,"lmdbDropSchema");async function k3(e){let t=new D3(Ei.SYSTEM_SCHEMA_NAME,Ei.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Ei.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await U3(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw H3(new Error,q3.SCHEMA_NOT_FOUND(e),x3.NOT_FOUND,void 0,void 0,!0);return n}a(k3,"validateDropSchema")});var wu=T((ATe,xL)=>{"use strict";var _g=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};xL.exports=_g});var fg=T((NTe,FL)=>{"use strict";var $3=require("fs-extra"),Jf=Ve(),{getTransactionAuditStorePath:V3}=je(),dg=at(),bTe=wu();FL.exports=Y3;async function Y3(e){let t;try{let r=V3(e.schema,e.table);await $3.mkdirp(r),t=await Jf.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{Jf.createDBI(t,dg.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Jf.createDBI(t,dg.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Jf.createDBI(t,dg.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(Y3,"createTransactionsAuditEnvironment")});var YL=T((ITe,VL)=>{"use strict";var Eg=D(),kL=Ve(),K3=Jo(),{getSystemSchemaPath:W3,getSchemaPath:Q3}=je(),j3=ci(),z3=mf(),hg=pf(),J3=x(),X3=fg(),mg=j3.hdb_table,$L=[];for(let e=0;e<mg.attributes.length;e++)$L.push(mg.attributes[e].attribute);VL.exports=Z3;async function Z3(e,t){let r=Q3(t.schema,t.table),n=new hg(t.schema,t.table,Eg.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new hg(t.schema,t.table,Eg.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new hg(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await kL.createEnvironment(r,t.table),e!==void 0){let o=await kL.openEnvironment(W3(),Eg.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await K3.insertRecords(o,mg.hash_attribute,$L,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await pg(n),await pg(s),await pg(i)}await X3(t)}catch(o){throw o}}a(Z3,"lmdbCreateTable");async function pg(e){try{await z3(e)}catch(t){J3.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(pg,"createAttribute")});var WL=T((CTe,KL)=>{"use strict";var eX=_u(),tX=fu(),rX=$f(),Cu=D(),nX=Jo().updateRecords,sX=Ve(),{getSchemaPath:iX}=je(),oX=gu(),aX=x();KL.exports=cX;async function cX(e){try{let{schema_table:t,attributes:r}=eX(e);tX(e,r,t.hash_attribute),e.schema!==Cu.SYSTEM_SCHEMA_NAME&&(r.includes(Cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await rX(e.hdb_auth_header,t,r),s=iX(e.schema,e.table),i=await sX.openEnvironment(s,e.table),o=await nX(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await oX(e,o)}catch(c){aX.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:n,txn_time:o.txn_time}}catch(t){throw t}}a(cX,"lmdbUpdateRecords")});var jL=T((LTe,QL)=>{"use strict";var lX=D().OPERATIONS_ENUM,Sg=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=lX.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};QL.exports=Sg});var JL=T((UTe,zL)=>{"use strict";var MTe=jL(),uX=_u(),_X=fu(),dX=$f(),Du=D(),fX=Jo().upsertRecords,EX=Ve(),{getSchemaPath:hX}=je(),pX=gu(),mX=x(),{handleHDBError:SX,hdb_errors:TX}=oe();zL.exports=gX;async function gX(e){let t;try{t=uX(e)}catch(l){throw SX(l,l.message,TX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;_X(e,n,r.hash_attribute),e.schema!==Du.SYSTEM_SCHEMA_NAME&&(n.includes(Du.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Du.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Du.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Du.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await dX(e.hdb_auth_header,r,n),i=hX(e.schema,e.table),o=await EX.openEnvironment(i,e.table),c=await fX(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await pX(e,c)}catch(l){mX.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(gX,"lmdbUpsertRecords")});var ZL=T((BTe,XL)=>{"use strict";var Tg=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};XL.exports=Tg});var tP=T((GTe,eP)=>{"use strict";var gg=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};eP.exports=gg});var sP=T((FTe,nP)=>{"use strict";var Rg=Ve(),{getTransactionAuditStorePath:RX}=je(),xTe=ZL(),Lu=at(),AX=K(),rP=tP(),OX=require("util").promisify,bX=OX(setTimeout),NX=1e4,yX=100;nP.exports=IX;async function IX(e){let t=RX(e.schema,e.table),r=await Rg.openEnvironment(t,e.table,!0),n=Rg.listDBIs(r);Rg.initializeDBIs(r,Lu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new rP;do s=await wX(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await bX(yX);while(s.transactions_deleted>0);return i}a(IX,"deleteAuditLogsBefore");async function wX(e,t){let r=new rP;try{let n=e.dbis[Lu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[Lu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];AX.isEmpty(c)||(s=e.dbis[Lu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Lu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>NX)break}return await s,r}catch(n){throw n}}a(wX,"deleteTransactions")});var oP=T(($Te,iP)=>{"use strict";var Ag=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};iP.exports=Ag});var cP=T((KTe,aP)=>{"use strict";var CX=os(),DX=Iu(),YTe=oP(),Ms=D(),LX=K(),Og=Ve(),PX=ci(),MX=yu(),UX=Au(),{getSchemaPath:vX}=je();aP.exports=BX;async function BX(e,t=!0){let r;e.schema===Ms.SYSTEM_SCHEMA_NAME?r=PX[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await GX(e),s=vX(e.schema,e.table),i=await Og.openEnvironment(s,e.table);return t===!0&&await HX(e,i,r.hash_attribute),Og.dropDBI(i,e.attribute),n}a(BX,"lmdbDropAttribute");async function HX(e,t,r){let n=Og.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let _={};for(let u in c)u!==i&&(_[u]=c[u]);s=t.dbis[r].put(o,_,l)}await s}a(HX,"removeAttributeFromAllObjects");async function GX(e){let t=new CX(Ms.SYSTEM_SCHEMA_NAME,Ms.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Ms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await MX(t)).filter(o=>o[Ms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(LX.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Ms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new DX(Ms.SYSTEM_SCHEMA_NAME,Ms.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return UX(i)}a(GX,"dropAttributeFromSystem")});var EP=T((jTe,fP)=>{"use strict";var bg=Ve(),Nc=at(),QTe=Ar(),Ng=D(),lP=K(),{getTransactionAuditStorePath:qX}=je(),xX=Ac(),Xf=Tc(),FX=x();fP.exports=kX;async function kX(e){let t=qX(e.schema,e.table),r=await bg.openEnvironment(t,e.table,!0),n=bg.listDBIs(r);bg.initializeDBIs(r,Nc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Ng.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return uP(r,e.search_values);case Ng.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,VX(r,e.search_values,s);case Ng.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return $X(r,e.search_values);default:return uP(r)}}a(kX,"readAuditLog");function uP(e,t=[0,Date.now()]){lP.isEmpty(t[0])&&(t[0]=0),lP.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Nc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new Xf,s))}a(uP,"searchTransactionsByTimestamp");function $X(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[Nc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,dP(e,i))}return Object.fromEntries(r)}a($X,"searchTransactionsByUsername");function VX(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=xX.equals(e,Nc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Nc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of u){let f=Number(d);n.has(f)?n.get(f).push(_.toString()):n.set(f,[_.toString()])}}let s=Array.from(n.keys()),i=dP(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);_P(l,"records",r,u,o),_P(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(VX,"searchTransactionsByHashValues");function _P(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let _=s.get(l),u=_[_.length-1];if(u.timestamp===i)u[t]=[c];else{let d=new Xf(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Xf(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(l,[_])}}}a(_P,"loopRecords");function dP(e,t){let r=[];try{let n=e.dbis[Nc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new Xf,i);r.push(o)}}catch(i){FX.warn(i)}return r}catch(n){throw n}}a(dP,"batchSearchTransactions")});var pP=T((ZTe,hP)=>{"use strict";var{getSchemaPath:JTe}=je(),XTe=Ve(),{database:YX}=(ge(),ie(ke));hP.exports={writeTransaction:KX};async function KX(e,t,r){return YX({database:e,table:t}).transaction(r)}a(KX,"writeTransaction")});var gP=T((tge,TP)=>{"use strict";var{getSchemaPath:mP}=je(),SP=Ve();TP.exports={flush:WX,resetReadTxn:QX};async function WX(e,t){return(await SP.openEnvironment(mP(e,t),t.toString())).flushed}a(WX,"flush");async function QX(e,t){try{(await SP.openEnvironment(mP(e,t),t.toString())).resetReadTxn()}catch{}}a(QX,"resetReadTxn")});var bP=T((nge,OP)=>{"use strict";var{Readable:jX}=require("stream"),{getDatabases:zX}=(ge(),ie(ke)),{readSync:JX,openSync:XX,createReadStream:RP}=require("fs"),{open:ZX}=require("lmdb"),AP=su(),eZ=iu(),{AUDIT_STORE_OPTIONS:tZ}=(Zi(),ie(NP)),{INTERNAL_DBIS_NAME:rZ,AUDIT_STORE_NAME:nZ}=at();OP.exports=iZ;var yg=32768,sZ=100;async function iZ(e){let t=e.database||e.schema||"data",r=zX()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let u=_.dbisDB,d=ZX({noSync:!0,maxDbs:eZ.MAX_DBS}),f,E=d.openDB(rZ,new AP(!1)),h=u.useReadTransaction(),m=0,S=a(async function(g,A){A.encoding="binary",A.encoder=void 0;let P=d.openDB(g,A),U=u.openDB(g,A);for(let{key:v,version:k,value:H}of U.getRange({start:null,transaction:h,versions:U.useVersions}))f=P.put(v,H,k),m++%sZ===0&&(await new Promise(j=>setTimeout(j,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:g,value:A}of u.getRange({transaction:h,start:!1}))if(s.some(P=>g.startsWith?.(P+"/"))){E.put(g,A);let[,P]=g.split("/"),U=!P,v=new AP(!U,U);await S(g,v)}e.include_audit&&await S(nZ,Object.assign({},tZ)),await f;let R=RP(d.path);return R.headers=l(),R.on("close",()=>{h.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=XX(o.path);return o.transaction(()=>{let _=Buffer.alloc(yg);JX(c,_,0,yg),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=RP(null,{fd:c,start:yg}),f=new jX.from(async function*(){yield _;for await(let E of d)u.openTimer&&(u.openTimer=0),yield E;u.done()}());return f.headers=l(),f});function l(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(iZ,"getBackup")});var wP=T((ige,IP)=>{"use strict";var oZ=x(),{handleHDBError:aZ}=oe(),cZ=$I(),lZ=mf(),uZ=QT(),_Z=qD(),dZ=Au(),fZ=tg(),EZ=_L(),hZ=gL(),pZ=yu(),mZ=wL(),SZ=qL(),TZ=YL(),gZ=WL(),RZ=JL(),AZ=sP(),OZ=ug(),bZ=cP(),NZ=EP(),yZ=pP(),yP=gP(),IZ=bP(),Ig=class extends cZ{static{a(this,"LMDBBridge")}async searchByConditions(t){return mZ(t)}async getDataByHash(t){return await fZ(t)}async searchByHash(t){return await EZ(t)}async getDataByValue(t,r){return await hZ(t,r)}async searchByValue(t){return await pZ(t)}async createSchema(t){return await _Z(t)}async dropSchema(t){return await SZ(t)}async createTable(t,r){return await TZ(t,r)}async dropTable(t){return await OZ(t)}async createAttribute(t){return await lZ(t)}async createRecords(t){return await uZ(t)}async updateRecords(t){return await gZ(t)}async upsertRecords(t){try{return await RZ(t)}catch(r){throw aZ(r,null,null,oZ.ERR,r)}}async deleteRecords(t){return await dZ(t)}async dropAttribute(t){return await bZ(t)}async deleteAuditLogsBefore(t){return await AZ(t)}async readAuditLog(t){return await NZ(t)}writeTransaction(t,r,n){return yZ.writeTransaction(t,r,n)}flush(t,r){return yP.flush(t,r)}resetReadTxn(t,r){return yP.resetReadTxn(t,r)}getBackup(t){return IZ(t)}};IP.exports=Ig});function PZ(){LZ=setInterval(function(){for(let e of wg)if(e.stale){let t=e[Ie]?.url;LP.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},DZ).unref()}var Cg,DP,LP,wZ,wg,CZ,Pu,CP,da,Zf,DZ,LZ,Dg=Oe(()=>{Cg=B(Ar()),DP=B(oe()),LP=B(x());es();wZ=100,wg=new Set,CZ=25e3,da=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxnsUsed=1,this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0),wg.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(wg.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Pu&&performance.now()-CP>CZ)throw new DP.ServerError("Outstanding write transactions have too long of queue, please try again later",503)}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,Cg.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let u=this.validated;this.validated=this.writes.length;for(let f=u;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=u;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=u;h<this.validated;h++){let m=this.writes[h];if(!m)continue;let S=m[f===0?"before":"beforeIntermediate"];if(S){let R=S();E?E.push?E.push(R):E=[E,R]:E=R}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(u){throw this.abort(),u}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(u=>u);let c=a(u=>{u.commit(r,u.entry,n)},"doWrite"),l=a(()=>{let u=this.writes[o++];if(u)if(u.key){n>0&&(u.entry=u.store.getEntry(u.key));let d=u.store.ifVersion(u.key,u.entry?.version??null,l);s=s||d}else l();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<wZ>>n?l():s=this.writes[0].store.transaction(()=>{for(let u of this.writes)u.entry=u.store.getEntry(u.key),c(u);return!0}),s)return Pu||(Pu=s,CP=performance.now(),Pu.then(()=>{Pu=null})),s.then(u=>u?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=n+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let u=this.next?.commit(t);if(u?.then)return u?.then(d=>({txnTime:r,next:d}));_.next=u}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},Zf=class extends da{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Cg.getNextMonotonicTime)())}getReadTxn(){}},DZ=3e4;a(PZ,"startMonitoringTxns");PZ()});function Ze(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new da;e.timestamp&&(n.timestamp=e.timestamp),n[Ie]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var PP,fa=Oe(()=>{PP=require("../index");es();Dg();a(Ze,"transaction");(0,PP._assignPackageExport)("transaction",Ze);Ze.commit=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ze.abort=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var FP={};Fe(FP,{ResourceBridge:()=>Mg});function Ug({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 UP(e,t){let r=Us(e),n=Ug(e,r);if(!r)throw new as.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user},o;Ze(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let _=c[l++],u=await r.get({id:_,lazy:s,select:n},i);return u=u&&tE(u),t?{value:{key:_,value:u}}:{value:u}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function Us(e){let t=e.database||e.schema||UZ,r=Dr()[t];if(!r)throw(0,as.handleHDBError)(new Error,MZ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function vP(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*BP(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:l}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(l)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[l]})}n&&(yield n)}var HP,eE,as,GP,qP,cs,Lg,Pg,xP,MZ,UZ,vZ,BZ,MP,Mg,kP=Oe(()=>{"use strict";HP=B(wP()),eE=B(Oc()),as=B(oe());ge();GP=B(_u()),qP=B(fu()),cs=B(D()),Lg=B(di()),Pg=B(is()),xP=B(K());fa();rE();({HDB_ERROR_MSGS:MZ}=as.hdb_errors),UZ="data",vZ=1e4,BZ=10,Mg=class extends HP.default{static{a(this,"ResourceBridge")}constructor(t){super(t),MP=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,eE.default)(t,"conditions");if(r)throw(0,as.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Us(t);if(!n)throw new as.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Ug(t,n),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new as.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Et({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await Us(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Us(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(_=>{if(!_){let{value:u,version:d}=r.primaryStore.getEntry(o);return i(o,u,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Us(t).dropTable()}createSchema(t){return Mu({database:t.schema,table:null}),Lg.signalSchemaChange(new Pg.SchemaEventMsg(process.pid,cs.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await vg(t.schema),Lg.signalSchemaChange(new Pg.SchemaEventMsg(process.pid,cs.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,MP.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,GP.default)(t);(0,qP.default)(t,n,r.primaryKey);let s,i=Dr()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Ze(o,async c=>{if(!i.schemaDefined){s=[];for(let u of n)i.attributes.find(f=>f.name==u)||s.push(u);s.length>0&&await i.addAttributes(s.map(u=>({name:u,indexed:!0})))}let l=[],_=[];for(let u of t.records){let d=await i.get(u[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(u[i.primaryKey]);continue}d&&(d=tE(d));for(let f in u)if(Object.prototype.hasOwnProperty.call(u,f)){let E=u[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,u[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(u),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(u,f)||(u[f]=d[f]);await i.put(u,o),l.push(u[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=Dr()[t.schema][t.table],n={user:t.hdb_user};return Ze(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return vP(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Dr()[t.schema][t.table];if(!r.createdTimeProperty)throw new as.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:cs.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],_=a(async()=>{let u=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...u.deleted_hashes),o.push(...u.skipped_hashes),await(0,xP.async_set_timeout)(BZ),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%vZ===0&&await _();return l.length>0&&await _(),s?vP(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,eE.default)(t,"hashes");if(r)throw r;return UP(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of UP(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&cs.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,eE.default)(t,"value");if(n)throw n;let s=Us(t);if(!s)throw new as.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===cs.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Ug(t,s)})}async getDataByValue(t,r){let n=new Map,s=Us(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){Us({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Us(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Us(t),n={};switch(t.search_type){case cs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case cs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of BP(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return BP(r,t.search_values?.[0],t.search_values?.[1])}}};a(Ug,"getSelect");a(UP,"getRecords");a(Us,"getTable");a(vP,"createDeleteResponse");a(BP,"groupRecordsInHistory")});var Un=T((gge,$P)=>{"use strict";var{ResourceBridge:HZ}=(kP(),ie(FP)),GZ=X();GZ.initSync();var nE;function qZ(){return nE||(nE=new HZ,nE)}a(qZ,"getBridge");$P.exports=qZ()});var WP=T((Age,KP)=>{"use strict";var VP=require("lodash"),Uu=require("mathjs"),xZ=require("jsonata"),YP=K();KP.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?VP.uniqWith(e,VP.isEqual):e,searchJSON:FZ,mad:vu.bind(null,Uu.mad),mean:vu.bind(null,Uu.mean),mode:vu.bind(null,Uu.mode),prod:vu.bind(null,Uu.prod),median:vu.bind(null,Uu.median)};function vu(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(vu,"aggregateFunction");function FZ(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(YP.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),YP.isEmpty(this.__ala__.res[r])){let n=xZ(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(FZ,"searchJSON")});var jP=T((bge,QP)=>{"use strict";var Ot=require("moment"),Bg="YYYY-MM-DDTHH:mm:ss.SSSZZ";Ot.suppressDeprecationWarnings=!0;QP.exports={current_date:()=>Ot().utc().format("YYYY-MM-DD"),current_time:()=>Ot().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Ot(e).utc().format("YYYY");case"month":return Ot(e).utc().format("MM");case"day":return Ot(e).utc().format("DD");case"hour":return Ot(e).utc().format("HH");case"minute":return Ot(e).utc().format("mm");case"second":return Ot(e).utc().format("ss");case"millisecond":return Ot(e).utc().format("SSS");default:break}},date:e=>Ot(e).utc().format(Bg),date_format:(e,t)=>Ot(e).utc().format(t),date_add:(e,t,r)=>Ot(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Ot(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=Ot(e).utc(),s=Ot(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>Ot().utc().valueOf(),get_server_time:()=>Ot().format(Bg),offset_utc:(e,t)=>Ot(e).utc().utcOffset(t).format(Bg)}});var ZP=T((Nge,XP)=>{"use strict";var kZ=require("@turf/area"),$Z=require("@turf/length"),VZ=require("@turf/circle"),YZ=require("@turf/difference"),KZ=require("@turf/distance"),WZ=require("@turf/boolean-contains"),QZ=require("@turf/boolean-equal"),jZ=require("@turf/boolean-disjoint"),zZ=require("@turf/helpers"),zP=D(),Re=K(),hi=x();XP.exports={geoArea:JZ,geoLength:XZ,geoCircle:ZZ,geoDifference:e5,geoDistance:JP,geoNear:t5,geoContains:r5,geoEqual:n5,geoCrosses:s5,geoConvert:i5};function JZ(e){if(Re.isEmpty(e))return NaN;typeof e=="string"&&(e=Re.autoCastJSON(e));try{return kZ.default(e)}catch(t){return hi.trace(t,e),NaN}}a(JZ,"geoArea");function XZ(e,t){if(Re.isEmpty(e))return NaN;typeof e=="string"&&(e=Re.autoCastJSON(e));try{return $Z.default(e,{units:t||"kilometers"})}catch(r){return hi.trace(r,e),NaN}}a(XZ,"geoLength");function ZZ(e,t,r){if(Re.isEmpty(e))return NaN;if(Re.isEmpty(t))return NaN;typeof e=="string"&&(e=Re.autoCastJSON(e));try{return VZ.default(e,t,{units:r||"kilometers"})}catch(n){return hi.trace(n,e,t),NaN}}a(ZZ,"geoCircle");function e5(e,t){if(Re.isEmpty(e))return NaN;if(Re.isEmpty(t))return NaN;typeof e=="string"&&(e=Re.autoCastJSON(e)),typeof t=="string"&&(t=Re.autoCastJSON(t));try{return YZ(e,t)}catch(r){return hi.trace(r,e,t),NaN}}a(e5,"geoDifference");function JP(e,t,r){if(Re.isEmpty(e))return NaN;if(Re.isEmpty(t))return NaN;typeof e=="string"&&(e=Re.autoCastJSON(e)),typeof t=="string"&&(t=Re.autoCastJSON(t));try{return KZ.default(e,t,{units:r||"kilometers"})}catch(n){return hi.trace(n,e,t),NaN}}a(JP,"geoDistance");function t5(e,t,r,n){if(Re.isEmpty(e)||Re.isEmpty(t))return!1;if(Re.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Re.autoCastJSON(e)),typeof t=="string"&&(t=Re.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return JP(e,t,n)<=r}catch(s){return hi.trace(s,e,t),!1}}a(t5,"geoNear");function r5(e,t){if(Re.isEmpty(e)||Re.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Re.autoCastJSON(e)),typeof t=="string"&&(t=Re.autoCastJSON(t));try{return WZ.default(e,t)}catch(r){return hi.trace(r,e,t),!1}}a(r5,"geoContains");function n5(e,t){if(Re.isEmpty(e)||Re.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Re.autoCastJSON(e)),typeof t=="string"&&(t=Re.autoCastJSON(t));try{return QZ.default(e,t)}catch(r){return hi.trace(r,e,t),!1}}a(n5,"geoEqual");function s5(e,t){if(Re.isEmpty(e)||Re.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Re.autoCastJSON(e)),typeof t=="string"&&(t=Re.autoCastJSON(t));try{return!jZ.default(e,t)}catch(r){return hi.trace(r,e,t),!1}}a(s5,"geoCrosses");function i5(e,t,r){if(Re.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Re.isEmpty(t))throw new Error("geo_type is required");if(Re.isEmpty(zP.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(zP.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Re.autoCastJSON(e)),zZ[t](e,r)}a(i5,"geoConvert")});var sE=T((Ige,eM)=>{var Ea=WP(),ln=jP(),vs=ZP();eM.exports=e=>{e.aggr.mad=e.aggr.MAD=Ea.mad,e.aggr.mean=e.aggr.MEAN=Ea.mean,e.aggr.mode=e.aggr.MODE=Ea.mode,e.aggr.prod=e.aggr.PROD=Ea.prod,e.aggr.median=e.aggr.MEDIAN=Ea.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ea.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ea.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ln.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ln.current_time,e.fn.extract=e.fn.EXTRACT=ln.extract,e.fn.date=e.fn.DATE=ln.date,e.fn.date_format=e.fn.DATE_FORMAT=ln.date_format,e.fn.date_add=e.fn.DATE_ADD=ln.date_add,e.fn.date_sub=e.fn.DATE_SUB=ln.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ln.date_diff,e.fn.now=e.fn.NOW=ln.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ln.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ln.get_server_time,e.fn.getdate=e.fn.GETDATE=ln.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ln.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=vs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=vs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=vs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=vs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=vs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=vs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=vs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=vs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=vs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=vs.geoNear}});var sM=T((wge,nM)=>{"use strict";var Bu=require("lodash"),Lr=require("alasql");Lr.options.cache=!1;var o5=sE(),tM=require("clone"),iE=require("recursive-iterator"),de=x(),Pe=K(),yc=Un(),a5=D(),{hdb_errors:c5}=oe(),{getDatabases:rM}=(ge(),ie(ke)),l5="IS NULL",ls="There was a problem performing this search. Please check the logs and try again.";o5(Lr);var Hg=class{static{a(this,"SQLSearch")}constructor(t,r){if(Pe.isEmpty(t))throw de.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(),Pe.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Pe.isEmptyOrZeroLength(n))return de.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw de.error("Error thrown from checkEmptySQL in SQLSearch class method search."),de.error(n),new Error(ls)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw de.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),de.error(n),new Error(ls)}if(Object.keys(this.data).length===0)return de.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw de.error("Error thrown from processJoins in SQLSearch class method search."),de.error(n),new Error(ls)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw de.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),de.error(n),new Error(ls)}try{return t=await this._finalSQL(),t}catch(n){throw de.error("Error thrown from finalSQL in SQLSearch class method search."),de.error(n),new Error(ls)}}_getColumns(){let t=new iE(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(tM(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Bu.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=rM()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Pe.isEmpty(this.statement.where)){de.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new iE(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Pe.isEmpty(r)&&r.right)if(Pe.isNotEmptyAndHasValue(r.right.value)){let n=Pe.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Lr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Pe.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Lr.yy.LogicValue({value:i}):n instanceof Lr.yy.StringValue&&Pe.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Lr.yy.NumValue({value:i}))});if(t){de.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new iE(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Pe.isEmpty(a5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Pe.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Pe.isEmptyOrZeroLength(r.left.columnid)||Pe.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(Pe.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"=":!Pe.isEmpty(r.right.value)||!Pe.isEmpty(r.left.value)?n.add(Pe.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<l.length;_++)if(l[_].value)n.add(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,...n])}}}_setAliasesForColumns(){if(Pe.isEmptyOrZeroLength(this.all_table_attributes)&&Pe.isEmptyOrZeroLength(this.statement.from)&&Pe.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Bu.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Pe.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Pe.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Pe.isEmptyOrZeroLength(this.all_table_attributes)&&!Pe.isEmptyOrZeroLength(this.columns.columns))return t;if(Pe.isEmptyOrZeroLength(this.all_table_attributes)&&Pe.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Lr.promise(r)}catch(r){throw de.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),de.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(tM(n))})}_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,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Pe.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(l5)>-1&&this.tables.forEach(s=>{let i={columnid:rM()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Bu.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Pe.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Pe.isEmptyOrZeroLength(this.exact_search_values[_].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[_].values);let u=await yc.getDataByHash(c);for(let d of c.hash_values)u.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(u){throw de.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),de.error(u),new Error(ls)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async u=>{let d=Object.assign({},c);d.search_value=u;let f=await yc.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]):(this.data[i].__merged_data[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,E))}))}catch(u){throw de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),de.error(u),new Error(ls)}else if(!Pe.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Pe.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let u=this.comparator_search_values[_].comparators;for(let d=0,f=u.length;d<f;d++){let E=u[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await yc.getDataByValue(c,E.operation);if(l)for(let[m]of h)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...n[i]],this._setMergedHashAttribute(i,m));else for(let[m,S]of h)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]):(this.data[i].__merged_data[m]=[...n[i]],this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,m))}}catch(u){throw de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),de.error(u),new Error(ls)}else try{c.search_attribute=s.attribute,c.search_value="*";let u=await yc.getDataByValue(c);if(l)for(let[d]of u)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of u)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]),this._setMergedHashAttribute(i,d))}catch(u){throw de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),de.error(u),new Error(ls)}}}_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 Lr.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(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.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 n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Lr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Lr.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 s=t.is_func?new Lr.yy.FuncValue:new Lr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,m=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${m}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${m}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let u="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(u=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${_} ${u} ${d}`,h=this._convertColumnsToIndexes(E,s);f=await Lr.promise(h,t),t=null}catch(E){throw de.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),de.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let m=f[E];o.forEach(S=>{m[S.key]!==null&&m[S.key]!==void 0&&S.keys.add(m[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),m=Bu.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,R=m.length;S<R;S++){let g=m[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[g]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new iE(this.columns);for(let{node:i}of s)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)&&n.push(o)}}n=Bu.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw de.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),de.error(i),new Error(ls)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let u in i)o.push(i[u][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await yc.getDataByHash(c),_=s.columns.length;for(let u=0,d=o.length;u<d;u++){let f=o[u],E=l.get(f);for(let h=0;h<_;h++){let m=s.columns[h],S=E[m]===void 0?null:E[m];this.data[n].__merged_data[f].push(S)}}}}catch(r){throw de.error("Error thrown from getDataByHash function in SQLSearch class method getData."),de.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(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();de.trace(`Final SQL: ${s}`),n=await Lr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),de.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw de.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),de.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return de.error(c5.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),de.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${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 l=s[i],_=new RegExp(`${l}.\`${o}\``,"g"),u=`${l}.[${c}]`;n=n.replace(_,u)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(l,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await yc.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw de.error("There was an error when processing this SQL operation. Check your logs"),de.error(o),new Error(ls)}}return Object.values(Object.values(this.data)[0].__merged_data)}};nM.exports=Hg});var ir=T((Dge,iM)=>{"use strict";var u5=FI();iM.exports={searchByConditions:d5,searchByHash:f5,searchByValue:E5,search:h5};var Gg=Un(),{transformReq:qg}=K(),_5=sM();async function d5(e){return qg(e),Gg.searchByConditions(e)}a(d5,"searchByConditions");async function f5(e){qg(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Gg.searchByHash(e))r&&t.push(r);return t}a(f5,"searchByHash");async function E5(e){qg(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Gg.searchByValue(e))t.push(r);return t}a(E5,"searchByValue");function h5(e,t){try{let r=new u5(e);r.validate(),new _5(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(h5,"search")});var oE=T((Pge,oM)=>{"use strict";var p5=Un();oM.exports={writeTransaction:m5};function m5(e,t,r){return p5.writeTransaction(e,t,r)}a(m5,"writeTransaction")});var uM=T((vge,lM)=>{"use strict";var S5=ir(),T5=Mn(),aM=x(),g5=yr(),Uge=oE(),R5=require("clone"),Fg=require("alasql"),A5=sE(),cM=require("util"),O5=cM.promisify(T5.getTableSchema),b5=cM.promisify(S5.search),N5=D(),xg=K();A5(Fg);lM.exports={update:I5};var y5="There was a problem performing this update. Please check the logs and try again.";async function I5({statement:e,hdb_user:t}){let r=await O5(e.table.databaseid,e.table.tableid),n=w5(e.columns);xg.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=R5(s),c=xg.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=Fg.parse(l).statements[0],u=await b5(_),d=C5(n,u);return D5(o,d,t)}a(I5,"update");function w5(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Fg.compile(`SELECT ${r.expression.toString()} AS [${N5.FUNC_VAL}] FROM ?`)}),t}catch(t){throw aM.error(t),new Error(y5)}}a(w5,"createUpdateRecord");function C5(e,t){return xg.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(C5,"buildUpdateRecords");async function D5(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await g5.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){aM.error(`Error delete new_attributes from update response: ${i}`)}return s}a(D5,"updateRecords")});var dM=T((qge,_M)=>{var L5=require("alasql"),P5=ir(),M5=x(),U5=Un(),$g=require("util"),kg=K(),v5=D(),B5=Mn(),Hge=oE(),Gge=yr(),H5="record",G5="successfully deleted",q5=$g.callbackify($5),x5=$g.promisify(P5.search),F5=$g.promisify(B5.getTableSchema);_M.exports={convertDelete:q5};function k5(e){return`${e.deleted_hashes.length} ${H5}${e.deleted_hashes.length===1?"":"s"} ${G5}`}a(k5,"generateReturnMessage");async function $5({statement:e,hdb_user:t}){let r=await F5(e.table.databaseid,e.table.tableid);kg.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=kg.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=L5.parse(o).statements[0],l={operation:v5.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await x5(c);let _=await U5.deleteRecords(l);return kg.isEmptyOrZeroLength(_.message)&&(_.message=k5(_)),delete _.txn_time,_}catch(_){throw M5.error(_),_.hdb_code?_.message:_}}a($5,"convertDelete")});var mM=T((Fge,pM)=>{"use strict";var V5=_i(),{hdb_errors:fM}=oe(),{getDatabases:EM}=(ge(),ie(ke));pM.exports={checkSchemaExists:hM,checkSchemaTableExists:Y5,schema_describe:V5};async function hM(e){if(!EM()[e])return fM.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(hM,"checkSchemaExists");async function Y5(e,t){let r=await hM(e);if(r)return r;if(!EM()[e][t])return fM.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Y5,"checkSchemaTableExists")});var ha=T(($ge,K5)=>{K5.exports={name:"harperdb",version:"4.3.6",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},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":"pm2 kill && 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:resources && 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:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","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":"pm2 kill && 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.535.0","@aws-sdk/lib-storage":"3.535.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.12.0","@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:"4.1.10","cbor-x":"1.5.8",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.26.2","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.0.5",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.30.1","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.22.3","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.16.0",yaml:"2.4.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.8",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.20.2",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.3.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",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:"^5.4.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var Fu={};Fe(Fu,{addAnalyticsListener:()=>xu,recordAction:()=>un,recordActionBinary:()=>_n,setAnalyticsEnabled:()=>W5});function W5(e){yM=e}function un(e,t,r,n,s){if(!yM)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=lE.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let _=c;o.values=c=new Float32Array(l*2),c.set(_),c.index=l+1}c[l]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")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 if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},lE.set(i,o)}aE||Q5()}function _n(e,t,r,n,s){un(!!e,t,r,n,s)}function xu(e){CM.push(e)}function Q5(){aE=performance.now(),setTimeout(async()=>{let e=performance.now()-aE;aE=0;let t=[],r={time:Date.now(),period:e,threadId:pa.threadId,metrics:t};for(let[s,i]of lE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,_=[],u;for(let d of DM){let f=Math.floor(c*d),E=o[f-1];if(f>l){let h=f-l;if(E===u){let m=_[_.length-1];typeof m=="number"?_[_.length-1]={value:m,count:1+h}:m.count+=h}else _.push(h>1?{value:E,count:h}:E),u=E;l=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await LM()}let n=process.memoryUsage();t.push({metric:"memory",threadId:pa.threadId,byThread:!0,...n});for(let s of CM)s(t);lE=new Map,pa.parentPort?pa.parentPort.postMessage({type:wM,report:r}):UM({report:r})},IM).unref()}async function j5(e,t=6e4){let r=Kg(),n=PM(),s=new Promise(m=>{let S=performance.now();setImmediate(()=>{let R=performance.now();R-S>5e3&&(0,Hu.warn)("Unusually high event queue latency on the main thread of "+Math.round(R-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let R=performance.now();R-S>5e3&&(0,Hu.warn)("Unusually high task queue latency on the main thread of "+Math.round(R-S)+"ms"),m(R-S)})}),i;for(let m of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(m.value?.time){i=m.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,_=[],u;for(let{key:m,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(m>o+t)break}else o=m;u=m;let{metrics:R,threadId:g}=S;for(let A of R||[]){let{path:P,method:U,type:v,metric:k,count:H,total:j,distribution:z,threads:J,...Se}=A;H||(H=1);let ue=k+(P?"-"+P:"");U!==void 0&&(ue+="-"+U),v!==void 0&&(ue+="-"+v);let Ee=c.get(ue);if(Ee){if(Ee.threads){let Ge=Ee.threads[g];if(Ge)Ee=Ge;else{Ee.threads[g]=Object.assign({},Se);continue}}Ee.count||(Ee.count=1);let Me=Ee.count;for(let Ge in Se){let Ft=Se[Ge];typeof Ft=="number"&&(Ee[Ge]=(Ee[Ge]*Me+Ft*H)/(Me+H))}Ee.count+=H,j>=0&&(Ee.total+=j,Ee.ratio=Ee.total/Ee.count)}else Ee=Object.assign({period:t},A),delete Ee.distribution,c.set(ue,Ee),Ee.byThread&&(Ee.threads=[],Ee.threads[g]=Object.assign({},Se),_.push(Ee));if(z){z=z.map(Ge=>typeof Ge=="number"?{value:Ge,count:1}:Ge);let Me=l.get(ue);Me?Me.push(...z):l.set(ue,z)}}await LM()}for(let m of _){let{path:S,method:R,type:g,metric:A,count:P,total:U,distribution:v,threads:k,...H}=m;k=k.filter(j=>j);for(let j in H){if(typeof m[j]!="number")continue;let z=0;for(let J of k){let Se=J[j];typeof Se=="number"&&(z+=Se)}m[j]=z}m.count=k.length,delete m.threads,delete m.byThread}for(let[m,S]of l){let R=c.get(m);S.sort((Ge,Ft)=>Ge.value>Ft.value?1:-1);let g=R.count-1,A=[],P=0,U=0,v;for(let Ge of DM){let Ft=g*Ge;for(;P<Ft;)v=S[U++],P+=v.count,U===1&&P--;let Gd=S[U>1?U-2:0];v||(v=S[0]),A.push(v.value-(v.value-Gd.value)*(P-Ft)/v.count)}let[k,H,j,z,J,Se,ue,Ee,Me]=A;Object.assign(R,{p1:k,p10:H,p25:j,median:z,p75:J,p90:Se,p95:ue,p99:Ee,p999:Me})}let d;for(let[m,S]of c)S.id=(0,cE.getNextMonotonicTime)(),S.time=u,n.primaryStore.put(S.id,S,{append:!0}).then(R=>{R||n.primaryStore.put(S.id,S)}),d=!0;let f=Date.now(),{idle:E,active:h}=performance.eventLoopUtilization();if(d||h*10>E){let m=(0,cE.getNextMonotonicTime)(),S={id:m,metric:"main-thread-utilization",idle:E-SM,active:h-TM,taskQueueLatency:await s,time:f,...process.memoryUsage()};n.primaryStore.put(m,S,{append:!0}).then(R=>{R||n.primaryStore.put(m,S)})}SM=E,TM=h}async function gM(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Kg(){return RM||(RM=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function PM(){return AM||(AM=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function X5(){MM=!0;let e=(0,qu.get)(Yg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await j5(IM,e),await gM(Kg(),z5),await gM(PM(),J5)},Math.min(e/2,2147483647)).unref()}function UM(e,t){let r=e.report;r.threadId=t?.threadId||pa.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(OM+=n.mean*n.count);r.totalBytesProcessed=OM,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(bM.get(t))}),bM.set(t,t.performance.eventLoopUtilization())),r.id=(0,cE.getNextMonotonicTime)(),Kg().primaryStore.put(r.id,r),MM||X5(),Z5&&(vM=t8(r))}async function t8(e){if(await vM,!co){let r=(0,Gu.dirname)((0,Hu.getLogFilePath)());try{co=await(0,Vg.open)((0,Gu.join)(r,"analytics.log"),"r+")}catch{co=await(0,Vg.open)((0,Gu.join)(r,"analytics.log"),"w+")}}let t=(await co.stat()).size;if(t>e8){let r=Buffer.alloc(t);await co.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await co.write(r,{position:0}),await co.truncate(r.length),t=r.length}await co.write(JSON.stringify(e)+`
9
- `,t)}var pa,NM,Hu,Gu,Vg,cE,qu,Yg,lE,yM,aE,IM,wM,CM,DM,SM,TM,LM,z5,J5,RM,AM,MM,OM,bM,Z5,vM,co,e8,pi=Oe(()=>{pa=require("worker_threads"),NM=B(et());ge();Hu=B(x()),Gu=require("path"),Vg=require("fs/promises"),cE=B(Ar()),qu=B(X()),Yg=B(D());Or();(0,qu.initSync)();lE=new Map,yM=(0,qu.get)(Yg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(W5,"setAnalyticsEnabled");a(un,"recordAction");ct.recordAnalytics=un;a(_n,"recordActionBinary");aE=0,IM=1e3,wM="analytics-report",CM=[];a(xu,"addAnalyticsListener");DM=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Q5,"sendAnalytics");a(j5,"aggregation");SM=0,TM=0,LM=a(()=>new Promise(setImmediate),"rest");a(gM,"cleanup");z5=36e5,J5=31536e6;a(Kg,"getRawAnalyticsTable");a(PM,"getAnalyticsTable");(0,NM.setChildListenerByType)(wM,UM);a(X5,"startScheduledTasks");OM=0,bM=new Map,Z5=!1;a(UM,"recordAnalytics");e8=1e6;a(t8,"logAnalytics")});var Xg=T((rRe,YM)=>{"use strict";var{decode:r8}=require("msgpackr"),{isMainThread:Zge,parentPort:eRe,threadId:tRe}=require("worker_threads"),ku=pt(),Ic=Xe(),jg=D(),ur=x(),Qg=X(),n8=D(),{onMessageByType:s8}=et(),GM=ui(),{recordAction:i8,recordActionBinary:o8}=(pi(),ie(Fu)),{publishToStream:a8}=ku,{ConsumerEvents:BM}=require("nats"),c8=ir(),{promisify:l8}=require("util"),qM=l8(setTimeout),dE=1e4,fE,_E,u8,_8,xM,$u=new Map,wc=new Map;YM.exports={initialize:zg,ingestConsumer:Jg,setSubscription:d8,setIgnoreOrigin:h8,getDatabaseSubscriptions:E8,updateConsumer:FM};async function zg(){s8(jg.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await FM(n)}),xM=!0,ur.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await ku.getNATSReferences();fE=e,_E=e.info.server_name,u8=t,_8=r}a(zg,"initialize");async function FM(e){if(e.status==="start"){let{js:t,jsm:r}=await kM(e.node_domain_name);Jg(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=$u.get(e.stream_name+e.node_domain_name);t&&(ur.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),$u.set(e.stream_name+e.node_domain_name,"close")),wc.get(e.node_domain_name)==="failed"&&wc.set(e.node_domain_name,"close")}}a(FM,"updateConsumer");var EE=new Map;function d8(e,t,r){let n=EE.get(e);n||EE.set(e,n=new Map),n.set(t,r),xM||zg().then(f8)}a(d8,"setSubscription");async function f8(){let e=await c8.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Ic.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions)if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await kM(r),!n))break;let{schema:o,table:c}=i,l=GM.createNatsTableStreamName(o,c);Jg(l,n,s,r)}}}a(f8,"accessConsumers");async function kM(e){let t,r,n=1;for(;!r;)try{t=await fE.jetstream({domain:e}),r=await fE.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(wc.get(e)==="close")break;wc.set(e,"failed"),n%10===1&&ur.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<dE?n++*100:dE;await qM(i)}return{js:t,jsm:r}}a(kM,"connectToRemoteJS");function E8(){return EE}a(E8,"getDatabaseSubscriptions");var $M;function h8(e){$M=e}a(h8,"setIgnoreOrigin");var VM=100,HM=new Array(VM),uE=0;async function Jg(e,t,r,n){let{connection:s}=await ku.getNATSReferences();fE=s,_E=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,_E),ur.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(wc.get(n)==="close")break;o%10===1&&ur.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(ur.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await ku.createConsumer(r,e,_E,new Date(Date.now()).toISOString()));let u=o++*100<dE?o++*100:dE;await qM(u)}let c=!1,l;for(;!c;){if($u.get(e+n)==="close"||wc.get(n)==="close"){$u.delete(e+n),c=!0;continue}l=await i.consume({max_messages:Qg.get(jg.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100}),$u.set(e+n,l);let _=!1;(async()=>{for await(let u of await l.status())if(u.type===BM.ConsumerDeleted&&(await l.close(),c=!0),u.type===BM.HeartbeatsMissed){let d=u.data;ur.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===2&&(ur.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),_=!0)}})();try{for await(let u of l)await HM[uE],HM[uE]=p8(u).catch(d=>{ur.error(d)}),++uE>=VM&&(uE=0)}catch(u){u.message==="consumer deleted"?(ur.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):ur.error("Error consuming clustering ingest, restarting consumer",u)}ku.clearClientCache(),!c&&_&&await zg()}}a(Jg,"ingestConsumer");async function p8(e){let t=r8(e.data);i8(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),ur.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=Qg.get(jg.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Ic.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Ic.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Ic.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!$M),o8(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Ic.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:_,records:u,hash_values:d,__origin:f,expiresAt:E}=t;ur.trace("processing message:",o,c,_,(u?"records: "+u.map(P=>P?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),ur.trace(`messageProcessor nats msg id: ${e.headers.get(Ic.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let m=new Promise(P=>h=P),{timestamp:S,user:R,node_name:g}=f||{},A=EE.get(c)?.get(_);if(!A)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,t.onCommit=h,A.send(t);else if(u.length===1&&!l)A.send({type:Wg(o),value:u[0],id:d?.[0],expiresAt:E,timestamp:S,table:_,onCommit:h,user:R,nodeName:g});else{let P=u.map((U,v)=>({type:Wg(o),value:U,expiresAt:E,id:d?.[v],table:_}));for(;l;)P.push({type:Wg(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;A.send({type:"transaction",writes:P,table:_,timestamp:S,onCommit:h,user:R,nodeName:g})}Qg.get(n8.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&a8(e.subject.split(".").slice(0,-1).join("."),GM.createNatsTableStreamName(c,_),e.headers,e.data),await m}catch(o){ur.error(o)}e.ack()}a(p8,"messageProcessor");function Wg(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(Wg,"convertOperation")});var pt=T((lRe,cU)=>{"use strict";var Vt=X();Vt.initSync();var m8=require("fs-extra"),S8=require("semver"),Ku=require("path"),{monotonicFactory:T8}=require("ulidx"),WM=T8(),g8=require("util"),QM=require("child_process"),R8=g8.promisify(QM.exec),A8=QM.spawn,Zt=Xe(),we=D(),hE=K(),us=x(),pE=ui(),O8=oE(),Vu=ut(),{broadcast:b8,onMessageByType:N8,getWorkerIndex:y8}=et(),{isMainThread:jM}=require("worker_threads"),{Encoder:I8,decode:rR}=require("msgpackr"),zM=new I8,{isEmpty:ga}=hE,JM=wr(),sRe=48*36e11;jM&&N8(we.ITC_EVENT_TYPES.RESTART,()=>{Pr=void 0,Ta=void 0});var{connect:w8,StorageType:C8,RetentionPolicy:D8,AckPolicy:nR,DeliverPolicy:sR,DiscardPolicy:L8,NatsConnection:iRe,JetStreamManager:oRe,JetStreamClient:aRe,StringCodec:cRe,JSONCodec:P8,createInbox:iR,headers:M8,ErrorCode:KM}=require("nats"),{PACKAGE_ROOT:U8}=D(),v8=ha(),{recordAction:B8}=(pi(),ie(Fu)),XM=P8(),H8="clustering",G8=v8.engines[Zt.NATS_SERVER_NAME],q8=Ku.join(U8,"dependencies"),tR=Ku.join(q8,`${process.platform}-${process.arch}`,Zt.NATS_BINARY_NAME),Zg,eR,Yu,ma,Sa;cU.exports={runCommand:ZM,checkNATSServerInstalled:x8,createConnection:oR,getConnection:Wu,getJetStreamManager:Qu,getJetStream:tU,getNATSReferences:Bs,getServerList:k8,createLocalStream:aR,listStreams:rU,deleteLocalStream:$8,getServerConfig:Cc,listRemoteStreams:V8,viewStream:Y8,viewStreamIterator:K8,publishToStream:W8,request:z8,reloadNATS:cR,reloadNATSHub:J8,reloadNATSLeaf:X8,extractServerName:j8,requestErrorHandler:Z8,createLocalTableStream:oU,createTableStreams:r6,purgeTableStream:aU,purgeSchemaTableStreams:n6,getStreamInfo:s6,updateLocalStreams:o6,closeConnection:F8,getJsmServerName:mE,addNatsMsgHeader:nU,clearClientCache:eU,updateRemoteConsumer:e6,createConsumer:sU,updateConsumerIterator:t6};async function ZM(e,t=void 0){let{stdout:r,stderr:n}=await R8(e,{cwd:t});if(n)throw new Error(n.replace(`
7
+ `)},gz="certificate.pem",Rz="privateKey.pem",Az="ca.pem";IC.exports={CERTIFICATE_VALUES:Tz,CERTIFICATE_PEM_NAME:gz,PRIVATEKEY_PEM_NAME:Rz,CA_PEM_NAME:Az}});var yT=g((Ume,MC)=>{"use strict";var LC=require("fs-extra"),ce=require("joi"),Oz=require("os"),{boolean:ye,string:cr,number:rt,array:NT}=ce.types(),{totalmem:wC}=require("os"),na=require("path"),bz=x(),Mf=K(),Mme=bT(),CC=D(),Nz=tt(),DC="log",yz="components",Iz="Invalid logging.rotation.maxSize unit. Available units are G, M or K",wz="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Cz="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",Dz="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",Lz="rootPath config parameter is undefined",Pz="clustering.enabled config parameter is undefined",sa=rt.min(0).required(),Uf=NT.items({host:cr.required(),port:sa}).empty(null),Ls,PC=!1;MC.exports={configValidator:Mz,routesValidator:qz,route_constraints:Uf};function Mz(e,t=!1){if(PC=t,Ls=e.rootPath,Mf.isEmpty(Ls))throw Lz;let r=ye.required(),n=rt.min(0).max(1e3).empty(null).default(Gz),s=cr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(hu),i=cr.optional().empty(null),o=cr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ce.string().empty(null).default(hu),l=ce.custom(vz).empty(null).default(hu),_=e.clustering?.enabled;if(Mf.isEmpty(_))throw Pz;let u;return _===!0?u=ce.object({enabled:r,hubServer:ce.object({cluster:ce.object({name:ce.required().empty(null),network:ce.object({port:sa,routes:Uf}).required()}).required(),leafNodes:ce.object({network:ce.object({port:sa}).required()}).required(),network:ce.object({port:sa}).required()}).required(),leafServer:ce.object({network:ce.object({port:sa,routes:Uf}).required(),streams:ce.object({maxAge:rt.min(120).allow(null).optional(),maxBytes:rt.min(1).allow(null).optional(),maxMsgs:rt.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ce.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:ye.optional(),databaseLevel:ye.optional(),tls:ce.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required(),verify:ye.optional()}),user:cr.optional().empty(null)}).required():u=ce.object({enabled:r,tls:ce.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()})}).required(),ce.object({authentication:ce.object({authorizeLocal:ye,cacheTTL:rt.required(),enableSessions:ye}),analytics:ce.object({aggregatePeriod:rt}),componentsRoot:s.optional(),clustering:u,localStudio:ce.object({enabled:r}).required(),logging:ce.object({auditAuthEvents:ce.object({logFailed:ye,logSuccessful:ye}),file:ye.required(),level:ce.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ce.object({enabled:ye.optional(),compress:ye.optional(),interval:cr.custom(Hz).optional().empty(null),maxSize:cr.custom(Bz).optional().empty(null),path:cr.optional().empty(null).default(hu)}).required(),root:s,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:ce.object({network:ce.object({cors:ye.optional(),corsAccessList:NT.optional(),headersTimeout:rt.min(1).optional(),keepAliveTimeout:rt.min(1).optional(),port:rt.optional().empty(null),domainSocket:ce.optional().empty("hdb/operations-server").default(hu),securePort:rt.optional().empty(null),timeout:rt.min(1).optional()}).optional(),tls:ce.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:cr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ce.object({network:ce.object({port:sa,securePort:sa,mtls:ce.alternatives([ye.optional(),ce.object({user:cr.optional(),certificateAuthority:i,required:ye.optional()})])}).required(),webSocket:ye.optional(),requireAuthentication:ye.optional()}),http:ce.object({compressionThreshold:rt.optional(),cors:ye.optional(),corsAccessList:NT.optional(),headersTimeout:rt.min(1).optional(),port:rt.min(0).optional().empty(null),securePort:rt.min(0).optional().empty(null),maxHeaderSize:rt.optional(),mtls:ce.alternatives([ye.optional(),ce.object({user:cr.optional(),certificateAuthority:i,required:ye.optional()})])}).required(),threads:ce.alternatives(n.optional(),ce.object({count:n.optional(),debug:ce.alternatives(ye.optional(),ce.object({startingPort:rt.min(1).optional(),host:cr.optional(),waitForDebugger:ye.optional()})),maxHeapMemory:rt.min(0).optional()})),storage:ce.object({writeAsync:ye.required(),overlappingSync:ye.optional(),caching:ye.optional(),compression:ce.alternatives([ye.optional(),ce.object({dictionary:cr.optional(),threshold:rt.optional()})]),compactOnStart:ye.optional(),compactOnStartKeepBackup:ye.optional(),noReadAhead:ye.optional(),path:l,prefetchWrites:ye.optional(),maxFreeSpaceToLoad:rt.optional(),maxFreeSpaceToRetain:rt.optional()}).required(),ignoreScripts:ye.optional(),tls:ce.object({certificate:i.optional(),certificateAuthority:i.optional(),privateKey:i.optional(),ciphers:cr.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(Mz,"configValidator");function Uz(e){return PC||LC.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Uz,"doesPathExist");function vz(e,t){ce.assert(e,cr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Uz(e);if(r)return t.message(r)}a(vz,"validatePath");function Bz(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Iz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Cz):e}a(Bz,"validateRotationMaxSize");function Hz(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(wz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Dz):e}a(Hz,"validateRotationInterval");function Gz(e,t){let r=t.state.path.join("."),n=Oz.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||wC();return i=Math.round(Math.min(i,wC())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),bz.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(Gz,"setDefaultThreads");function hu(e,t){let r=t.state.path.join(".");if(!Mf.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Mf.isEmpty(Ls))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return na.join(Ls,yz);case"logging.root":return na.join(Ls,DC);case"clustering.leafServer.streams.path":return na.join(Ls,"clustering","leaf");case"storage.path":let n=na.join(Ls,CC.LEGACY_DATABASES_DIR_NAME);return LC.existsSync(n)?n:na.join(Ls,CC.DATABASES_DIR_NAME);case"logging.rotation.path":return na.join(Ls,DC);case"operationsApi.network.domainSocket":return r==null?null:na.join(Ls,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(hu,"setDefaultRoot");function qz(e){let t=ce.object({routes:Uf});return Nz.validateBySchema({routes:e},t)}a(qz,"routesValidator")});var ut=g((Hme,kC)=>{"use strict";var sn=D(),$t=K(),Mt=x(),{configValidator:xz,routesValidator:UC}=yT(),wr=require("fs-extra"),Fz=require("yaml"),ns=require("path"),kz=require("is-number"),BC=require("properties-reader"),$z=require("lodash"),{handleHDBError:Vz}=oe(),{HTTP_STATUS_CODES:Yz,HDB_ERROR_MSGS:vf}=Zr(),Bme=require("minimist"),{server:Kz}=(br(),ie(Ko)),{DATABASES_PARAM_CONFIG:pu,CONFIG_PARAMS:nn,CONFIG_PARAM_MAP:ss}=sn,Wz="Unable to get config value because config is uninitialized",Qz="Config successfully initialized",jz="Error backing up config file",zz="Empty parameter sent to getConfigValue",HC=ns.join(sn.PACKAGE_ROOT,"config","yaml",sn.HDB_DEFAULT_CONFIG_FILE),Jz="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",vC={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"},Bf,Ut,Hf;kC.exports={createConfigFile:Xz,getDefaultConfig:Zz,getConfigValue:qC,initConfig:wT,flattenConfig:dc,updateConfigValue:xC,updateConfigObject:t2,getConfiguration:s2,setConfiguration:i2,readConfigFile:DT,getClusteringRoutes:o2,initOldConfig:FC,getConfigFromFile:a2,getConfigFilePath:ia,addConfig:c2,deleteConfigFromFile:l2,getConfigObj:u2};function Xz(e,t=!1){let r=io(HC);Bf=dc(r.toJSON());let n;for(let c in e){let l=ss[c.toLowerCase()];if(l===nn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(_=>({[_]:e[c][_]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let _=l.split("_"),u=IT(l,e[c]);l==="rootPath"&&u?.endsWith("/")&&(u=u.slice(0,-1));try{r.setIn([..._],u)}catch(d){Mt.error(d)}}}n&&GC(r,n),CT(r,t);let s=r.toJSON();Ut=dc(s);let i=r.getIn(["rootPath"]),o=ns.join(i,sn.HDB_CONFIG_FILE);wr.createFileSync(o),wr.writeFileSync(o,String(r)),Mt.trace(`Config file written to ${o}`)}a(Xz,"createConfigFile");function GC(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!$t.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(pu.TABLES))for(let i in n[s][pu.TABLES])for(let o in n[s][pu.TABLES][i]){let c=n[s][pu.TABLES][i][o],l=[nn.DATABASES,s,pu.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[nn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Mt.error("Error parsing schemas CLI/env config arguments",n)}}a(GC,"setSchemasConfig");function Zz(e){if(Bf===void 0){let r=io(HC);Bf=dc(r.toJSON())}let t=ss[e.toLowerCase()];if(t!==void 0)return Bf[t.toLowerCase()]}a(Zz,"getDefaultConfig");function qC(e){if(e==null){Mt.error(zz);return}if(Ut===void 0){Mt.trace(Wz);return}let t=ss[e.toLowerCase()];if(t!==void 0)return Ut[t.toLowerCase()]}a(qC,"getConfigValue");function ia(e=$t.getPropsFilePath()){let t=$t.getEnvCliRootPath();return t?ns.join(t,sn.HDB_CONFIG_FILE):BC(e).get(sn.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ia,"getConfigFilePath");function wT(e=!1){if(Ut===void 0||e){let t;if(!$t.noBootFile()){t=$t.getPropsFilePath();try{wr.accessSync(t,wr.constants.F_OK|wr.constants.R_OK)}catch(i){throw Mt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ia(t),n;if(r.includes("config/settings.js"))try{FC(r);return}catch(i){if(i.code!==sn.NODE_ERROR_CODES.ENOENT)throw i}try{n=io(r)}catch(i){if(i.code===sn.NODE_ERROR_CODES.ENOENT){Mt.trace(`HarperDB config file not found at ${r}.
8
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw Mt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}e2(n,r),CT(n);let s=n.toJSON();if(Kz.config=s,Ut=dc(s),Ut.logging_rotation_rotate)for(let i in vC)Ut[i]&&Mt.error(`Config ${vC[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Mt.trace(Qz)}}a(wT,"initConfig");function e2(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ns.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ns.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ns.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(Mt.trace("Updating config file with missing config params"),wr.writeFileSync(t,String(e)))}a(e2,"checkForUpdatedConfig");function CT(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=xz(r,t);if(n.error)throw vf.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket)}a(CT,"validateConfig");function t2(e,t){Ut===void 0&&(Ut={});let r=ss[e.toLowerCase()];if(r===void 0){Mt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ut[r.toLowerCase()]=t}a(t2,"updateConfigObject");function xC(e,t,r=void 0,n=!1,s=!1,i=!1){Ut===void 0&&wT();let o=qC(ss.hdb_root),c=ns.join(o,sn.HDB_CONFIG_FILE),l=io(c),_;if(r===void 0&&e.toLowerCase()===nn.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=ss[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=IT(f,t);l.setIn([...E],h)}else for(let f in r){let E=ss[f.toLowerCase()];if(E===nn.HTTP_SECUREPORT&&r[f]===Ut[nn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),E===nn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===Ut[nn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),E===nn.DATABASES){_=r[f];continue}if(E?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!E&&(f.endsWith("_package")||f.endsWith("_port"))&&(E=f),E!==void 0){let h=E.split("_"),m=sn.LEGACY_CONFIG_PARAMS[f.toUpperCase()];m&&m.startsWith("customFunctions")&&l.hasIn(m.split("_"))&&(E=m,h=m.split("_"));let S=IT(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],S)}catch(R){Mt.error(R)}}}_&&GC(l,_),CT(l);let u=l.getIn(["rootPath"]),d=ns.join(u,sn.HDB_CONFIG_FILE);n===!0&&r2(c,u),wr.writeFileSync(d,String(l)),s&&(Ut=dc(l.toJSON())),Mt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(xC,"updateConfigValue");function r2(e,t){try{let r=ns.join(t,"backup",`${sn.HDB_CONFIG_FILE}.bak`);wr.copySync(e,r),Mt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Mt.error(jz),Mt.error(r)}}a(r2,"backupConfigFile");var n2=["databases"];function dc(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),Hf=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!n2.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!nn[l.toUpperCase()]&&ss[l]&&(s[ss[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(dc,"flattenConfig");function IT(e,t){if(e===nn.CLUSTERING_NODENAME||e===nn.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(kz(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(IT,"castConfigValue");function s2(){let e=$t.getPropsFilePath(),t=ia(e);return io(t).toJSON()}a(s2,"getConfiguration");async function i2(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return xC(void 0,void 0,s,!0),Jz}catch(i){throw typeof i=="string"||i instanceof String?Vz(i,i,Yz.BAD_REQUEST,void 0,void 0,!0):i}}a(i2,"setConfiguration");function DT(){let e=$t.getPropsFilePath();try{wr.accessSync(e,wr.constants.F_OK|wr.constants.R_OK)}catch(n){if(!$t.noBootFile())throw Mt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ia(e);return io(t).toJSON()}a(DT,"readConfigFile");function io(e){return Fz.parseDocument(wr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(io,"parseYamlDoc");function o2(){let e=DT(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=$t.isEmptyOrZeroLength(t)?[]:t;let r=UC(t);if(r)throw vf.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=$t.isEmptyOrZeroLength(n)?[]:n;let s=UC(n);if(s)throw vf.CONFIG_VALIDATION(s.message);if(!$t.isEmptyOrZeroLength(n)&&!$t.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.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 vf.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(o2,"getClusteringRoutes");function FC(e){let t=BC(e);Ut={};for(let r in ss){let n=t.get(r.toUpperCase());if($t.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ss[r].toLowerCase();s===nn.LOGGING_ROOT?Ut[s]=ns.dirname(n):Ut[s]=n}return Ut}a(FC,"initOldConfig");function a2(e){let t=DT();return $z.get(t,e.replaceAll("_","."))}a(a2,"getConfigFromFile");async function c2(e,t){let r=io(ia());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await wr.writeFile(ia(),String(r))}a(c2,"addConfig");function l2(e){let t=ia($t.getPropsFilePath()),r=io(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ns.join(n,sn.HDB_CONFIG_FILE);wr.writeFileSync(s,String(r))}a(l2,"deleteConfigFromFile");function u2(){return Hf||(wT(),Hf)}a(u2,"getConfigObj")});var VC=g((qme,$C)=>{"use strict";var Gf=D(),qf=class{static{a(this,"BaseLicense")}constructor(t=0,r=Gf.RAM_ALLOCATION_ENUM.DEFAULT,n=Gf.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},LT=class extends qf{static{a(this,"ExtendedLicense")}constructor(t=0,r=Gf.RAM_ALLOCATION_ENUM.DEFAULT,n=Gf.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};$C.exports={BaseLicense:qf,ExtendedLicense:LT}});var oa=g((Fme,zC)=>{"use strict";var Ec=require("fs-extra"),KC=Pf(),WC=require("crypto"),_2=require("moment"),d2=require("uuid").v4,lr=x(),MT=require("path"),f2=K(),oo=D(),{totalmem:YC}=require("os"),E2=VC().ExtendedLicense,fc="invalid license key format",h2="061183",p2="mofi25",m2="aes-256-cbc",S2=16,T2=32,QC=X();QC.initSync();var PT;zC.exports={validateLicense:jC,generateFingerPrint:R2,licenseSearch:BT,getLicense:b2,checkMemoryLimit:N2};function UT(){return MT.join(QC.getHdbBasePath(),oo.LICENSE_KEY_DIR_NAME,oo.LICENSE_FILE_NAME)}a(UT,"getLicenseDirPath");function g2(){let e=UT();return MT.join(e,oo.LICENSE_FILE_NAME)}a(g2,"getLicenseFilePath");function vT(){let e=UT();return MT.join(e,oo.REG_KEY_FILE_NAME)}a(vT,"getFingerPrintFilePath");async function R2(){let e=vT();try{return await Ec.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await A2();throw lr.error(`Error writing fingerprint file to ${e}`),lr.error(t),new Error("There was an error generating the fingerprint")}}a(R2,"generateFingerPrint");async function A2(){let e=d2(),t=KC.hash(e),r=vT();try{await Ec.mkdirp(UT()),await Ec.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw lr.error(`Error writing fingerprint file to ${r}`),lr.error(n),new Error("There was an error generating the fingerprint")}return t}a(A2,"writeFingerprint");function jC(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:oo.RAM_ALLOCATION_ENUM.DEFAULT,version:oo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return lr.error("empty license key passed to validate."),r;let n=vT(),s=!1;try{s=Ec.statSync(n)}catch(i){lr.error(i)}if(s){let i;try{i=Ec.readFileSync(n,"utf8")}catch{lr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(p2),c=o[1];c=Buffer.concat([Buffer.from(c)],S2);let l=Buffer.concat([Buffer.from(i)],T2),_=WC.createDecipheriv(m2,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let u=null;try{u=_.update(o[0],"hex","utf8"),u.trim(),u+=_.final("utf8")}catch{let E=O2(o[0],i);if(E)u=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(fc),lr.error(fc),new Error(fc)}let d;if(isNaN(u))try{d=JSON.parse(u),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(fc),lr.error(fc),new Error(fc)}else r.exp_date=u;r.exp_date<_2().valueOf()&&(r.valid_date=!1),KC.validate(o[1],`${h2}${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||lr.error("Invalid licence"),r}a(jC,"validateLicense");function O2(e,t){try{let r=WC.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{lr.warn("Check old license failed")}}a(O2,"checkOldLicense");function BT(){let e=new E2,t=[];try{t=Ec.readFileSync(g2(),"utf-8").split(oo.NEW_LINE)}catch(r){r.code==="ENOENT"?lr.info("no license file found"):lr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(f2.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=jC(s.license_key,s.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(s){lr.error("There was an error parsing the license string."),lr.error(s),e.ram_allocation=oo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return PT=e,e}a(BT,"licenseSearch");async function b2(){return PT||await BT(),PT}a(b2,"getLicense");function N2(){let e=BT().ram_allocation,t=process.constrainedMemory?.()||YC();if(t=Math.round(Math.min(t,YC())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(N2,"checkMemoryLimit")});var Cr=g((Kme,dD)=>{"use strict";var eD="username is required",tD="nothing to update, must supply active, role or password to update",rD="password cannot be an empty string",nD="If role is specified, it cannot be empty.",sD="active must be true or false";dD.exports={addUser:U2,alterUser:v2,dropUser:H2,getSuperUser:F2,userInfo:G2,listUsers:Ff,listUsersExternal:q2,setUsersToGlobal:pc,findAndValidateUser:uD,getClusterUser:k2,USERNAME_REQUIRED:eD,ALTERUSER_NOTHING_TO_UPDATE:tD,EMPTY_PASSWORD:rD,EMPTY_ROLE:nD,ACTIVE_BOOLEAN:sD};var iD=Ir(),y2=ra(),qT=Pf(),oD=bC(),aD=or(),xT=di(),on=K(),cD=require("validate.js"),Ne=x(),{promisify:I2}=require("util"),FT=ui(),JC=D(),XC=Xe(),w2=ut(),$me=X(),Vme=oa(),C2=ci(),{table:Yme}=(Re(),ie(ke)),{handleHDBError:Ps,hdb_errors:D2}=oe(),{HTTP_STATUS_CODES:Ms,AUTHENTICATION_ERROR_MSGS:HT,HDB_ERROR_MSGS:hc}=D2,{UserEventMsg:kT}=is(),GT=require("lodash"),{server:$T}=(br(),ie(Ko)),L2=x();$T.getUser=(e,t)=>uD(e,t,t!=null);var lD={username:!0,active:!0,role:!0,password:!0},ZC=new Map,xf=aD.searchByValue,P2=aD.searchByHash,M2=I2(y2.delete);async function U2(e){let t=cD.cleanAttributes(e,lD),r=oD.addUserValidation(t);if(r)throw Ps(new Error,r.message,Ms.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await xf(n),s=s&&Array.from(s)}catch(l){throw Ne.error("There was an error searching for a role in add user"),Ne.error(l),l}if(!s||s.length<1)throw Ps(new Error,hc.ROLE_NAME_NOT_FOUND(t.role),Ms.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Ps(new Error,hc.DUP_ROLES_FOUND(t.role),Ms.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=FT.encrypt(t.password)),t.password=qT.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await iD.insert(i)}catch(l){throw Ne.error("There was an error searching for a user."),Ne.error(l),l}Ne.debug(o);try{await pc()}catch(l){throw Ne.error("Got an error setting users to global"),Ne.error(l),l}if(o.skipped_hashes.length===1)throw Ps(new Error,hc.USER_ALREADY_EXISTS(t.username),Ms.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],xT.signalUserChange(new kT(process.pid)),`${c.username} successfully added`}a(U2,"addUser");async function v2(e){let t=cD.cleanAttributes(e,lD);if(on.isEmptyOrZeroLength(t.username))throw new Error(eD);if(on.isEmptyOrZeroLength(t.password)&&on.isEmptyOrZeroLength(t.role)&&on.isEmptyOrZeroLength(t.active))throw new Error(tD);if(!on.isEmpty(t.password)&&on.isEmptyOrZeroLength(t.password.trim()))throw new Error(rD);if(!on.isEmpty(t.active)&&!on.isBoolean(t.active))throw new Error(sD);let r=B2(t.username);if(!on.isEmpty(t.password)&&!on.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=FT.encrypt(t.password)),t.password=qT.hash(t.password)),t.role==="")throw new Error(nD);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 xf(i)||[])}catch(c){throw Ne.error("Got an error searching for a role."),Ne.error(c),c}if(!o||o.length===0){let c=hc.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ne.error(c),Ps(new Error,c,Ms.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=hc.ALTER_USER_DUP_ROLES(t.role);throw Ne.error(c),Ps(new Error,c,Ms.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await iD.update(n)}catch(i){throw Ne.error("Error during update."),Ne.error(i),i}try{await pc()}catch(i){throw Ne.error("Got an error setting users to global"),Ne.error(i),i}return xT.signalUserChange(new kT(process.pid)),s}a(v2,"alterUser");function B2(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(B2,"isClusterUser");async function H2(e){try{let t=oD.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(on.isEmpty(global.hdb_users.get(e.username)))throw Ps(new Error,hc.USER_NOT_EXIST(e.username),Ms.NOT_FOUND,void 0,void 0,!0);let n;try{n=await M2(r)}catch(s){throw Ne.error("Got an error deleting a user."),Ne.error(s),s}Ne.debug(n);try{await pc()}catch(s){throw Ne.error("Got an error setting users to global."),Ne.error(s),s}return xT.signalUserChange(new kT(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(H2,"dropUser");async function G2(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=GT.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await P2(r)}catch(s){throw Ne.error("Got an error searching for a role."),Ne.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ne.error(r),r}return t}a(G2,"userInfo");async function q2(){let e;try{e=await Ff()}catch(t){throw Ne.error("Got an error listing users."),Ne.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(q2,"listUsersExternal");async function Ff(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await xf(e)}catch(o){throw Ne.error("Got an error searching for roles."),Ne.error(o),o}let r={};for(let o of t)r[o.id]=GT.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await xf(n)}catch(o){throw Ne.error("Got an error searching for users."),Ne.error(o),o}let i=new Map;for(let o of s)o=GT.cloneDeep(o),o.role=r[o.role],x2(o.role),i.set(o.username,o);return i}catch(e){throw Ne.error("got an error listing users"),Ne.error(e),on.errorizeMessage(e)}return null}a(Ff,"listUsers");function x2(e){try{if(!e){Ne.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(C2)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ne.error("Got an error trying to set system permissions."),Ne.error(t)}}a(x2,"appendSystemTablesToRole");async function pc(){try{let e=await Ff();global.hdb_users=e}catch(e){throw Ne.error(e),e}}a(pc,"setUsersToGlobal");async function uD(e,t,r=!0){global.hdb_users||await pc();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Ps(new Error,HT.GENERIC_AUTH_FAIL,Ms.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Ps(new Error,HT.USER_INACTIVE,Ms.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(ZC.get(t)===n.password)return s;if(qT.validate(n.password,t))ZC.set(t,n.password);else throw Ps(new Error,HT.GENERIC_AUTH_FAIL,Ms.UNAUTHORIZED,void 0,void 0,!0)}return s}a(uD,"findAndValidateUser");async function F2(){global.hdb_users||await pc();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(F2,"getSuperUser");async function k2(){let e=await Ff(),t=w2.getConfigFromFile(JC.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!on.isEmpty(r)&&r?.role?.role===JC.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=FT.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+XC.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+XC.SERVER_SUFFIX.ADMIN,r}a(k2,"getClusterUser");var _D=[];$T.invalidateUser=function(e){for(let t of _D)try{t(e)}catch(r){L2.error("Error invalidating user",r)}};$T.onInvalidatedUser=function(e){_D.push(e)}});var Su=g((zme,pD)=>{"use strict";var aa=x(),an=D(),$2=Kw(),Qme=Un(),jme=_i(),V2=Cr(),{validateEvent:fD}=is(),mu=vn(),Y2=require("process"),{resetDatabases:K2}=(Re(),ie(ke)),W2={[an.ITC_EVENT_TYPES.SCHEMA]:Q2,[an.ITC_EVENT_TYPES.USER]:hD};async function Q2(e){let t=fD(e);if(t){aa.error(t);return}aa.trace("ITC schemaHandler received schema event:",e),await $2(e.message),await j2(e.message)}a(Q2,"schemaHandler");async function j2(e){try{mu.resetReadTxn(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),mu.resetReadTxn(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),mu.resetReadTxn(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=K2();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){aa.error(t)}}a(j2,"syncSchemaMetadata");var ED=[];async function hD(e){try{try{mu.resetReadTxn(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),mu.resetReadTxn(an.SYSTEM_SCHEMA_NAME,an.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){aa.warn(r)}let t=fD(e);if(t){aa.error(t);return}aa.trace(`ITC userHandler ${an.HDB_ITC_CLIENT_PREFIX}${Y2.pid} received user event:`,e),await V2.setUsersToGlobal();for(let r of ED)r()}catch(t){aa.error(t)}}a(hD,"userHandler");hD.addListener=function(e){ED.push(e)};pD.exports=W2});var is=g((rSe,SD)=>{"use strict";var Xme=x(),VT=K(),z2=D(),{ITC_ERRORS:Tu}=Zr(),{parentPort:Zme,threadId:J2,isMainThread:X2,workerData:eSe}=require("worker_threads"),{onMessageFromWorkers:Z2,broadcast:tSe,broadcastWithAcknowledgement:eJ}=et();SD.exports={sendItcEvent:tJ,validateEvent:mD,SchemaEventMsg:rJ,UserEventMsg:nJ};var kf;Z2(async(e,t)=>{kf=kf||Su(),mD(e),kf[e.type]&&await kf[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function tJ(e){return!X2&&e.message&&(e.message.originator=J2),eJ(e)}a(tJ,"sendItcEvent");function mD(e){if(typeof e!="object")return Tu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||VT.isEmpty(e.type))return Tu.MISSING_TYPE;if(!e.hasOwnProperty("message")||VT.isEmpty(e.message))return Tu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||VT.isEmpty(e.message.originator))return Tu.MISSING_ORIGIN;if(z2.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Tu.INVALID_EVENT(e.type)}a(mD,"validateEvent");function rJ(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(rJ,"SchemaEventMsg");function nJ(e){this.originator=e}a(nJ,"UserEventMsg")});var di=g((iSe,AD)=>{"use strict";var TD=D(),sSe=K(),$f=x(),gD=$w(),mc,{sendItcEvent:RD}=is();function sJ(e){try{$f.trace("signalSchemaChange called with message:",e),mc=mc||Su();let t=new gD(TD.ITC_EVENT_TYPES.SCHEMA,e);return mc.schema(t),RD(t)}catch(t){$f.error(t)}}a(sJ,"signalSchemaChange");function iJ(e){try{$f.trace("signalUserChange called with message:",e),mc=mc||Su();let t=new gD(TD.ITC_EVENT_TYPES.USER,e);return mc.user(t),RD(t)}catch(t){$f.error(t)}}a(iJ,"signalUserChange");AD.exports={signalSchemaChange:sJ,signalUserChange:iJ}});var Vf=g((aSe,bD)=>{"use strict";var OD=K(),oJ=D(),aJ=x(),cJ=Sf(),lJ=mf(),uJ=di(),{SchemaEventMsg:_J}=is(),dJ="already exists in";bD.exports=fJ;async function fJ(e,t,r){if(OD.isEmptyOrZeroLength(r))return r;let n=[];OD.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await EJ(e,t.schema,t.name,i)})),s}a(fJ,"lmdbCheckForNewAttributes");async function EJ(e,t,r,n){let s=new lJ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await hJ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(dJ))aJ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(EJ,"createNewAttribute");async function hJ(e){let t;return t=await cJ(e),uJ.signalSchemaChange(new _J(process.pid,oJ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(hJ,"createAttribute")});var Sc=g((lSe,ND)=>{"use strict";var YT=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};ND.exports=YT});var ID=g((_Se,yD)=>{"use strict";var pJ=Sc(),mJ=D().OPERATIONS_ENUM,KT=class extends pJ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(mJ.INSERT,r,n,s,i),this.records=t}};yD.exports=KT});var CD=g((fSe,wD)=>{"use strict";var SJ=Sc(),TJ=D().OPERATIONS_ENUM,WT=class extends SJ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(TJ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};wD.exports=WT});var LD=g((hSe,DD)=>{"use strict";var gJ=Sc(),RJ=D().OPERATIONS_ENUM,QT=class extends gJ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(RJ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};DD.exports=QT});var MD=g((mSe,PD)=>{"use strict";var AJ=Sc(),OJ=D().OPERATIONS_ENUM,jT=class extends AJ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(OJ.DELETE,n,s,t,i),this.original_records=r}};PD.exports=jT});var gu=g((gSe,HD)=>{"use strict";var TSe=require("path"),UD=Ve(),bJ=ID(),NJ=CD(),yJ=LD(),IJ=MD(),Tc=at(),vD=K(),{CONFIG_PARAMS:wJ}=D(),BD=X();BD.initSync();var Yf=D().OPERATIONS_ENUM,{getTransactionAuditStorePath:CJ}=je();HD.exports=DJ;async function DJ(e,t){if(BD.get(wJ.LOGGING_AUDITLOG)===!1)return;let r=CJ(e.schema,e.table),n=await UD.openEnvironment(r,e.table,!0),s=LJ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){UD.initializeDBIs(n,Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Tc.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),vD.isEmpty(s.user_name)||n.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(DJ,"writeTransaction");function LJ(e,t){let r=vD.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Yf.INSERT)return new bJ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Yf.UPDATE)return new NJ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Yf.UPSERT)return new yJ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Yf.DELETE)return new IJ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(LJ,"createTransactionObject")});var zT=g((OSe,GD)=>{"use strict";var PJ=_u(),ASe=du(),Ru=D(),MJ=fu(),UJ=zo().insertRecords,vJ=Ve(),BJ=x(),HJ=Vf(),{getSchemaPath:GJ}=je(),qJ=gu();GD.exports=xJ;async function xJ(e){try{let{schema_table:t,attributes:r}=PJ(e);MJ(e,r,t.hash_attribute),e.schema!==Ru.SYSTEM_SCHEMA_NAME&&(r.includes(Ru.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ru.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ru.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ru.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await HJ(e.hdb_auth_header,t,r),s=GJ(e.schema,e.table),i=await vJ.openEnvironment(s,e.table),o=await UJ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await qJ(e,o)}catch(c){BJ.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:n,txn_time:o.txn_time}}catch(t){throw t}}a(xJ,"lmdbCreateRecords")});var FD=g((NSe,xD)=>{"use strict";var qD=D(),FJ=zT(),kJ=du(),$J=require("fs-extra"),{getSchemaPath:VJ}=je();xD.exports=YJ;async function YJ(e){let t=[{name:e.schema,createddate:Date.now()}],r=new kJ(qD.SYSTEM_SCHEMA_NAME,qD.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await FJ(r),await $J.mkdirp(VJ(e.schema))}a(YJ,"lmdbCreateSchema")});var $D=g((ISe,kD)=>{"use strict";var JT=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};kD.exports=JT});var WD=g((PSe,KD)=>{"use strict";var VD=Ve(),XT=Or(),ZT=Zr().LMDB_ERRORS_ENUM,KJ=at(),YD=x(),CSe=K(),WJ=require("lmdb"),QJ=$D(),jJ=D(),{OVERFLOW_MARKER:DSe,MAX_SEARCH_KEY_LENGTH:LSe}=KJ,zJ=jJ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function JJ(e,t,r,n){if(XT.validateEnv(e),t===void 0)throw new Error(ZT.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ZT.IDS_REQUIRED):new Error(ZT.IDS_MUST_BE_ITERABLE);try{let s=VD.listDBIs(e);VD.initializeDBIs(e,t,s);let i=new QJ,o,c=[],l=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||n&&h[zJ]>n){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,WJ.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let R=s[S];if(!h.hasOwnProperty(R)||R===t)continue;let T=e.dbis[R],A=h[R];if(A!=null)try{let L=XT.getIndexedValues(A);if(L)for(let U=0,v=L.length;U<v;U++)T.remove(L[U],o)}catch{YD.warn(`cannot delete from attribute: ${R}, ${A}:${o}`)}}});c.push(m),l.push(o),i.original_records.push(h)}catch(h){YD.warn(h),i.skipped.push(o)}let _=[],u=await Promise.all(c);for(let f=0,E=u.length;f<E;f++)u[f]===!0?i.deleted.push(l[f]):(i.skipped.push(l[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=XT.getNextMonotonicTime(),i}catch(s){throw s}}a(JJ,"deleteRecords");KD.exports={deleteRecords:JJ}});var Au=g((USe,jD)=>{"use strict";var gc=K(),XJ=WD(),ZJ=Ve(),{getSchemaPath:e4}=je(),t4=gu(),r4=x();jD.exports=n4;async function n4(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(gc.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(gc.isEmptyOrZeroLength(e.hash_values)&&!gc.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];gc.isEmpty(l)||e.hash_values.push(l)}}if(gc.isEmptyOrZeroLength(e.hash_values))return QD([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(gc.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=e4(e.schema,e.table),i=await ZJ.openEnvironment(s,e.table),o=await XJ.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await t4(e,o)}catch(c){r4.error(`unable to write transaction due to ${c.message}`)}return QD(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(n4,"lmdbDeleteRecords");function QD(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(QD,"createDeleteResponse")});var tg=g((HSe,zD)=>{"use strict";var s4=D(),BSe=Or();function eg(e,t){let r=Object.create(null);if(t.length===1&&s4.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(eg,"parseRow");function i4(e,t,r,n){let s=eg(r,e);n.push(s)}a(i4,"searchAll");function o4(e,t,r,n){let s=eg(r,e);n[t]=s}a(o4,"searchAllToMap");function a4(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(a4,"iterateDBI");function ca(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(ca,"pushResults");function c4(e,t,r,n,s,i){t.toString().endsWith(e)&&ca(t,r,n,s,i)}a(c4,"endsWith");function l4(e,t,r,n,s,i){t.toString().includes(e)&&ca(t,r,n,s,i)}a(l4,"contains");function u4(e,t,r,n,s,i){t>e&&ca(t,r,n,s,i)}a(u4,"greaterThanCompare");function _4(e,t,r,n,s,i){t>=e&&ca(t,r,n,s,i)}a(_4,"greaterThanEqualCompare");function d4(e,t,r,n,s,i){t<e&&ca(t,r,n,s,i)}a(d4,"lessThanCompare");function f4(e,t,r,n,s,i){t<=e&&ca(t,r,n,s,i)}a(f4,"lessThanEqualCompare");zD.exports={parseRow:eg,searchAll:i4,searchAllToMap:o4,iterateDBI:a4,endsWith:c4,contains:l4,greaterThanCompare:u4,greaterThanEqualCompare:_4,lessThanCompare:d4,lessThanEqualCompare:f4,pushResults:ca}});var Rc=g((kSe,nL)=>{"use strict";var ao=Ve(),qSe=x(),cn=Or(),Kf=at(),ht=Zr().LMDB_ERRORS_ENUM,xSe=K(),E4=D(),Wf=tg(),{parseRow:h4}=Wf,FSe=require("lmdb"),{OVERFLOW_MARKER:JD,MAX_SEARCH_KEY_LENGTH:p4}=Kf;function XD(e,t,r,n=!1,s=void 0,i=void 0){return la(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(XD,"iterateFullIndex");function Ou(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return la(e,t,r,(u,d,f,E)=>{let T={transaction:u,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!_,exclusiveStart:i===!0?_:l};return E===r?(T.values=!1,d.getRange(T).map(A=>({value:A}))):d.getRange(T)})}a(Ou,"iterateRangeBetween");function la(e,t,r,n){let s=e.database||e,i=ao.openDBI(s,r);i[Kf.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ao.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(la,"setupTransaction");function ZD(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(JD)){if(!s)if(r)s=ao.openDBI(e,r);else{let l=ao.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=ao.openDBI(e,l[_]),!s[Kf.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(ZD,"getOverflowCheck");function m4(e,t,r,n=!1,s=void 0,i=void 0){if(cn.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return la(e,t,t,(o,c,l)=>(Qf(r),r=bu(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>h4(_.value,r))))}a(m4,"searchAll");function S4(e,t,r,n=!1,s=void 0,i=void 0){if(cn.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);Qf(r),r=bu(e.database||e,r);let o=new Map;for(let{key:c,value:l}of XD(e,t,t,n,s,i))o.set(c,Wf.parseRow(l,r));return o}a(S4,"searchAllToMap");function T4(e,t,r=!1,n=void 0,s=void 0){if(cn.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=XD(e,void 0,t,r,n,s),c=o.transaction,l=ZD(c.database,c,void 0,t);for(let{key:_,value:u}of o){let d=l(_,u);i[d]===void 0&&(i[d]=[]),i[d].push(u)}return i}a(T4,"iterateDBI");function g4(e,t){if(cn.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return ao.statDBI(e,t).entryCount}a(g4,"countAll");function R4(e,t,r,n,s=!1,i=void 0,o=void 0){return co(e,r,n),la(e,t,r,(c,l,_,u)=>(n=cn.convertKeyValueToWrite(n),u===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(R4,"equals");function A4(e,t,r){return co(e,t,r),ao.openDBI(e,t).getValuesCount(r)}a(A4,"count");function O4(e,t,r,n,s=!1,i=void 0,o=void 0){return co(e,r,n),la(e,null,r,(c,l)=>{n=cn.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let u;if(s===!0){let d;for(let f of l.getKeys({transaction:c,start:n}))if(!f.startsWith(n)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),u=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(n))return f;if(_===!0)return u.DONE}}),u.filter(f=>f)}else return u=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return u.DONE}),_?u:u.filter(d=>d)})}a(O4,"startsWith");function b4(e,t,r,n,s=!1,i=void 0,o=void 0){return eL(e,t,r,n,s,i,o,!0)}a(b4,"endsWith");function eL(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return co(e,r,n),la(e,null,r,(l,_,u,d)=>{let f=ZD(u,l,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(E=>{let h=E.toString();return h.endsWith(JD)?_.getValues(E,{transaction:l}).map(m=>{let S=f(E,m);if(c?S.endsWith(n):S.includes(n))return{key:S,value:m}}).filter(m=>m):(c?h.endsWith(n):h.includes(n))?_[Kf.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:l}).map(m=>({key:E,value:m})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(eL,"contains");function N4(e,t,r,n,s=!1,i=void 0,o=void 0){co(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Ou(e,t,r,n,l,s,i,o,!0,!1)}a(N4,"greaterThan");function y4(e,t,r,n,s=!1,i=void 0,o=void 0){co(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Ou(e,t,r,n,l,s,i,o,!1,!1)}a(y4,"greaterThanEqual");function I4(e,t,r,n,s=!1,i=void 0,o=void 0){co(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Ou(e,t,r,l,n,s,i,o,!1,!0)}a(I4,"lessThan");function w4(e,t,r,n,s=!1,i=void 0,o=void 0){co(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Ou(e,t,r,l,n,s,i,o,!1,!1)}a(w4,"lessThanEqual");function C4(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(cn.validateEnv(e),r===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ht.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ht.END_VALUE_REQUIRED);if(n=cn.convertKeyValueToWrite(n),s=cn.convertKeyValueToWrite(s),n>s)throw new Error(ht.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ou(e,t,r,n,s,i,o,c)}a(C4,"between");function D4(e,t,r,n){cn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(Qf(r),r=bu(s,r),n===void 0)throw new Error(ht.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Wf.parseRow(c,r)),o}a(D4,"searchByHash");function L4(e,t,r){cn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(L4,"checkHashExists");function P4(e,t,r,n,s=[]){return rL(e,t,r,n,s),tL(e,t,r,n,s).map(i=>i[1])}a(P4,"batchSearchByHash");function M4(e,t,r,n,s=[]){rL(e,t,r,n,s);let i=new Map;for(let[o,c]of tL(e,t,r,n,s))i.set(o,c);return i}a(M4,"batchSearchByHashToMap");function tL(e,t,r,n,s=[]){return la(e,t,t,(i,o,c)=>{r=bu(c,r);let l=r.length<3;return n.map(_=>{let u=c.dbis[t].get(_,{transaction:i,lazy:l});if(u)return[_,Wf.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(tL,"batchHashSearch");function rL(e,t,r,n,s){if(cn.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(Qf(r),n==null)throw new Error(ht.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ht.IDS_MUST_BE_ITERABLE)}a(rL,"initializeBatchSearchByHash");function Qf(e){if(!Array.isArray(e))throw e===void 0?new Error(ht.FETCH_ATTRIBUTES_REQUIRED):new Error(ht.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Qf,"validateFetchAttributes");function co(e,t,r){if(cn.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.SEARCH_VALUE_REQUIRED);if(r?.length>p4)throw new Error(ht.SEARCH_VALUE_TOO_LARGE)}a(co,"validateComparisonFunctions");function bu(e,t){return t.length===1&&E4.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ao.listDBIs(e)),t}a(bu,"setGetWholeRowAttributes");nL.exports={searchAll:m4,searchAllToMap:S4,count:A4,countAll:g4,equals:R4,startsWith:O4,endsWith:b4,contains:eL,searchByHash:D4,setGetWholeRowAttributes:bu,batchSearchByHash:P4,batchSearchByHashToMap:M4,checkHashExists:L4,iterateDBI:T4,greaterThan:N4,greaterThanEqual:y4,lessThan:I4,lessThanEqual:w4,between:C4}});var Ac=g((VSe,cL)=>{var sL=require("lodash"),iL=tt(),he=require("joi"),U4=K(),{hdb_schema_table:Nu,checkValidTable:oL,hdb_table:aL,hdb_database:jf}=Cs(),{handleHDBError:v4,hdb_errors:B4}=oe(),{getDatabases:H4}=(Re(),ie(ke)),{HTTP_STATUS_CODES:G4}=B4,q4=he.object({database:jf,schema:jf,table:aL,search_attribute:Nu,search_value:he.any().required(),get_attributes:he.array().min(1).items(he.alternatives(Nu,he.object())).optional(),desc:he.bool(),limit:he.number().integer().min(1),offset:he.number().integer().min(0)}),x4=he.object({database:jf,schema:jf,table:aL,operator:he.string().valid("and","or").default("and").lowercase(),offset:he.number().integer().min(0),limit:he.number().integer().min(1),get_attributes:he.array().min(1).items(he.alternatives(Nu,he.object())).optional(),sort:he.object({attribute:he.alternatives(Nu,he.array().min(1)),descending:he.bool().optional()}).optional(),conditions:he.array().min(1).items(he.alternatives(he.object({operator:he.string().valid("and","or").default("and").lowercase(),conditions:he.array()}),he.object({search_attribute:he.alternatives(Nu,he.array().min(1)),search_type:he.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:he.when("search_type",{switch:[{is:"equals",then:he.any()},{is:"between",then:he.array().items(he.alternatives([he.string(),he.number()])).length(2)}],otherwise:he.alternatives(he.string(),he.number())}).required()}))).required()});cL.exports=function(e,t){let r=null;switch(t){case"value":r=iL.validateBySchema(e,q4);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(oL("database",e.schema)),i(oL("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"),s&&(r=new Error(s.trim()));break;case"conditions":r=iL.validateBySchema(e,x4);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=U4.checkGlobalSchemaTable(e.schema,e.table);if(s)return v4(new Error,s,G4.NOT_FOUND);let o=H4()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(u=>{for(let d=0,f=u.conditions.length;d<f;d++){let E=u.conditions[d];E.conditions?l(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&l(e);let _=sL.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!Array.isArray(u)&&!u.name&&!sL.some(o,d=>d===u||d.attribute===u||d.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var rg=g((KSe,lL)=>{"use strict";var F4=Ve(),k4=Ac(),{getSchemaPath:$4}=je();lL.exports=V4;function V4(e){let t=k4(e,"hashes");if(t)throw t;let r=$4(e.schema,e.table);return F4.openEnvironment(r,e.table)}a(V4,"initialize")});var ng=g((QSe,uL)=>{"use strict";var Y4=Rc(),K4=rg();uL.exports=W4;async function W4(e){let t=await K4(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Y4.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(W4,"lmdbGetDataByHash")});var Oc=g((zSe,_L)=>{"use strict";var sg=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};_L.exports=sg});var fL=g((ZSe,dL)=>{"use strict";var XSe=Oc(),Q4=Rc(),j4=rg();dL.exports=z4;async function z4(e){let t=await j4(e),r=global.hdb_schema[e.schema][e.table];return Q4.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(z4,"lmdbSearchByHash")});var os=g((tTe,EL)=>{"use strict";var ig=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,_=void 0,u=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=_,this.offset=u}};EL.exports=ig});var zf=g((nTe,gL)=>{"use strict";var ur=Rc(),J4=Ve(),X4=K(),pe=at(),ua=D(),Z4=ci(),hL=Zr().LMDB_ERRORS_ENUM,{getSchemaPath:e3}=je(),fi=ua.SEARCH_WILDCARDS;async function t3(e,t,r){let n;e.schema===ua.SYSTEM_SCHEMA_NAME?n=Z4[e.table]:n=global.hdb_schema[e.schema][e.table];let s=TL(e,n.hash_attribute,r,t);return mL(e,s,n.hash_attribute,r)}a(t3,"prepSearch");async function mL(e,t,r,n){let s=e3(e.schema,e.table),i=await J4.openEnvironment(s,e.table),o=SL(i,e,t,r),c=o.transaction||i;if([pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,pe.SEARCH_TYPES.SEARCH_ALL,pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(r3(e,r)===!1){let u=e.search_attribute;if(u===r)return n?pL(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[u]:f.key}),"toObject");return n?pL(o,d):o.map(d)}let _=e.search_attribute===r?o.map(u=>u.key):o.map(u=>u.value);return n===!0?ur.batchSearchByHashToMap(c,r,e.get_attributes,_):ur.batchSearchByHash(c,r,e.get_attributes,_)}a(mL,"executeSearch");function SL(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case pe.SEARCH_TYPES.EQUALS:s=ur.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.CONTAINS:s=ur.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.ENDS_WITH:case pe.SEARCH_TYPES._ENDS_WITH:s=ur.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.STARTS_WITH:case pe.SEARCH_TYPES._STARTS_WITH:s=ur.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return ur.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return ur.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.SEARCH_ALL:return ur.searchAll(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return ur.searchAllToMap(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.BETWEEN:s=ur.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case pe.SEARCH_TYPES.GREATER_THAN:case pe.SEARCH_TYPES._GREATER_THAN:s=ur.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.GREATER_THAN_EQUAL:case pe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=ur.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.LESS_THAN:case pe.SEARCH_TYPES._LESS_THAN:s=ur.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.LESS_THAN_EQUAL:case pe.SEARCH_TYPES._LESS_THAN_EQUAL:s=ur.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(SL,"searchByType");function pL(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(pL,"createMapFromIterable");function r3(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 n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(r3,"checkToFetchMore");function TL(e,t,r,n){if(X4.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),fi.indexOf(s)>-1)return r===!0?pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:pe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(fi[0])<0&&s.indexOf(fi[1])<0)return c===!0?r===!0?pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:pe.SEARCH_TYPES.EQUALS;if(fi.indexOf(i)>=0&&fi.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),pe.SEARCH_TYPES.CONTAINS;if(fi.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),pe.SEARCH_TYPES.ENDS_WITH;if(fi.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),pe.SEARCH_TYPES.STARTS_WITH;if(s.includes(fi[0])||s.includes(fi[1]))return pe.SEARCH_TYPES.EQUALS;throw new Error(hL.UNKNOWN_SEARCH_TYPE)}else switch(n){case ua.VALUE_SEARCH_COMPARATORS.BETWEEN:return pe.SEARCH_TYPES.BETWEEN;case ua.VALUE_SEARCH_COMPARATORS.GREATER:return pe.SEARCH_TYPES.GREATER_THAN;case ua.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return pe.SEARCH_TYPES.GREATER_THAN_EQUAL;case ua.VALUE_SEARCH_COMPARATORS.LESS:return pe.SEARCH_TYPES.LESS_THAN;case ua.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return pe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(hL.UNKNOWN_SEARCH_TYPE)}}a(TL,"createSearchTypeFromSearchObject");gL.exports={executeSearch:mL,createSearchTypeFromSearchObject:TL,prepSearch:t3,searchByType:SL}});var AL=g((oTe,RL)=>{"use strict";var iTe=os(),n3=Ac(),s3=K(),i3=D(),o3=zf();RL.exports=a3;function a3(e,t){if(!s3.isEmpty(t)&&i3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=n3(e,"value");if(n)throw n;return o3.prepSearch(e,t,!0)}a(a3,"lmdbGetDataByValue")});var yu=g((lTe,OL)=>{"use strict";var cTe=os(),c3=Ac(),l3=K(),u3=D(),_3=zf();OL.exports=d3;async function d3(e,t){if(!l3.isEmpty(t)&&u3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=c3(e,"value");if(n)throw n;return _3.prepSearch(e,t,!1)}a(d3,"lmdbSearchByValue")});var NL=g((dTe,bL)=>{"use strict";var _Te=at(),og=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},ag=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},cg=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};bL.exports={SearchByConditionsObject:og,SearchCondition:ag,SortAttribute:cg}});var DL=g((pTe,CL)=>{"use strict";var ETe=NL().SearchByConditionsObject,f3=os(),E3=Ac(),lg=Rc(),Jf=at(),{Resource:hTe}=(es(),ie(ug)),wL=zf(),h3=tg(),p3=require("lodash"),{getSchemaPath:m3}=je(),yL=Ve(),{handleHDBError:S3,hdb_errors:T3}=oe(),{HTTP_STATUS_CODES:g3}=T3,R3=1e8;CL.exports=A3;async function A3(e){let t=E3(e,"conditions");if(t)throw S3(t,t.message,g3.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=m3(e.schema,e.table),n=await yL.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)yL.openDBI(n,_.search_attribute);let i=p3.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===Jf.SEARCH_TYPES.EQUALS?_.estimated_count=lg.count(n,_.search_attribute,_.search_value):u===Jf.SEARCH_TYPES.CONTAINS||u===Jf.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=R3}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await IL(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],u=i.slice(1).map(wL.filterByType),d=u.length,f=lg.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(l=l.filter(E=>{for(let h=0;h<d;h++)if(!u[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(E=>h3.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await IL(o,e,f,s.hash_attribute);c=c.concat(E)}let _=new Set,u=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(u,e.limit&&e.limit+u),l=lg.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(A3,"lmdbSearchByConditions");async function IL(e,t,r,n){let s=new f3(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===Jf.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,wL.searchByType(e,s,i,n).map(o=>o.value)}a(IL,"executeConditionSearch")});var Iu=g((STe,LL)=>{"use strict";var O3=D().OPERATIONS_ENUM,_g=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=O3.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};LL.exports=_g});var dg=g((gTe,qL)=>{"use strict";var vL=os(),BL=Iu(),HL=yu(),GL=Au(),Dr=D(),PL=K(),ML=Ve(),{getTransactionAuditStorePath:b3,getSchemaPath:N3}=je(),UL=x();qL.exports=y3;async function y3(e){try{if(PL.isEmpty(global.hdb_schema[e.schema])||PL.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await I3(e),await w3(e);let t=N3(e.schema,e.table);try{await ML.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")UL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=b3(e.schema,e.table);await ML.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")UL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(y3,"lmdbDropTable");async function I3(e){let t=new vL(Dr.SYSTEM_SCHEMA_NAME,Dr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Dr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Dr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await HL(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new BL(Dr.SYSTEM_SCHEMA_NAME,Dr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await GL(s)}a(I3,"deleteAttributesFromSystem");async function w3(e){let t=new vL(Dr.SYSTEM_SCHEMA_NAME,Dr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Dr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Dr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Dr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Dr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await HL(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&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new BL(Dr.SYSTEM_SCHEMA_NAME,Dr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await GL(s)}catch(i){throw i}}a(w3,"dropTableFromSystem")});var FL=g((ATe,xL)=>{"use strict";var C3=require("fs-extra"),D3=os(),L3=Oc(),P3=Iu(),M3=dg(),U3=Au(),v3=ng(),B3=yu(),Ei=D(),{getSchemaPath:H3}=je(),{handleHDBError:G3,hdb_errors:q3}=oe(),{HDB_ERROR_MSGS:x3,HTTP_STATUS_CODES:F3}=q3;xL.exports=k3;async function k3(e){let t;try{t=await $3(e.schema);let r=new D3(Ei.SYSTEM_SCHEMA_NAME,Ei.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ei.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Ei.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await B3(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await M3(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new P3(Ei.SYSTEM_SCHEMA_NAME,Ei.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await U3(s);let i=H3(t);await C3.remove(i)}catch(r){throw r}}a(k3,"lmdbDropSchema");async function $3(e){let t=new L3(Ei.SYSTEM_SCHEMA_NAME,Ei.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Ei.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await v3(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw G3(new Error,x3.SCHEMA_NOT_FOUND(e),F3.NOT_FOUND,void 0,void 0,!0);return n}a($3,"validateDropSchema")});var wu=g((bTe,kL)=>{"use strict";var fg=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};kL.exports=fg});var hg=g((ITe,$L)=>{"use strict";var V3=require("fs-extra"),Xf=Ve(),{getTransactionAuditStorePath:Y3}=je(),Eg=at(),yTe=wu();$L.exports=K3;async function K3(e){let t;try{let r=Y3(e.schema,e.table);await V3.mkdirp(r),t=await Xf.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{Xf.createDBI(t,Eg.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Xf.createDBI(t,Eg.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Xf.createDBI(t,Eg.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(K3,"createTransactionsAuditEnvironment")});var WL=g((CTe,KL)=>{"use strict";var pg=D(),VL=Ve(),W3=zo(),{getSystemSchemaPath:Q3,getSchemaPath:j3}=je(),z3=ci(),J3=Sf(),mg=mf(),X3=x(),Z3=hg(),Tg=z3.hdb_table,YL=[];for(let e=0;e<Tg.attributes.length;e++)YL.push(Tg.attributes[e].attribute);KL.exports=eX;async function eX(e,t){let r=j3(t.schema,t.table),n=new mg(t.schema,t.table,pg.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new mg(t.schema,t.table,pg.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new mg(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await VL.createEnvironment(r,t.table),e!==void 0){let o=await VL.openEnvironment(Q3(),pg.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await W3.insertRecords(o,Tg.hash_attribute,YL,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Sg(n),await Sg(s),await Sg(i)}await Z3(t)}catch(o){throw o}}a(eX,"lmdbCreateTable");async function Sg(e){try{await J3(e)}catch(t){X3.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Sg,"createAttribute")});var jL=g((LTe,QL)=>{"use strict";var tX=_u(),rX=fu(),nX=Vf(),Cu=D(),sX=zo().updateRecords,iX=Ve(),{getSchemaPath:oX}=je(),aX=gu(),cX=x();QL.exports=lX;async function lX(e){try{let{schema_table:t,attributes:r}=tX(e);rX(e,r,t.hash_attribute),e.schema!==Cu.SYSTEM_SCHEMA_NAME&&(r.includes(Cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await nX(e.hdb_auth_header,t,r),s=oX(e.schema,e.table),i=await iX.openEnvironment(s,e.table),o=await sX(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await aX(e,o)}catch(c){cX.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:n,txn_time:o.txn_time}}catch(t){throw t}}a(lX,"lmdbUpdateRecords")});var JL=g((MTe,zL)=>{"use strict";var uX=D().OPERATIONS_ENUM,gg=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=uX.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};zL.exports=gg});var ZL=g((BTe,XL)=>{"use strict";var vTe=JL(),_X=_u(),dX=fu(),fX=Vf(),Du=D(),EX=zo().upsertRecords,hX=Ve(),{getSchemaPath:pX}=je(),mX=gu(),SX=x(),{handleHDBError:TX,hdb_errors:gX}=oe();XL.exports=RX;async function RX(e){let t;try{t=_X(e)}catch(l){throw TX(l,l.message,gX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;dX(e,n,r.hash_attribute),e.schema!==Du.SYSTEM_SCHEMA_NAME&&(n.includes(Du.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Du.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Du.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Du.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await fX(e.hdb_auth_header,r,n),i=pX(e.schema,e.table),o=await hX.openEnvironment(i,e.table),c=await EX(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await mX(e,c)}catch(l){SX.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(RX,"lmdbUpsertRecords")});var tP=g((GTe,eP)=>{"use strict";var Rg=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};eP.exports=Rg});var nP=g((xTe,rP)=>{"use strict";var Ag=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};rP.exports=Ag});var oP=g(($Te,iP)=>{"use strict";var Og=Ve(),{getTransactionAuditStorePath:AX}=je(),kTe=tP(),Lu=at(),OX=K(),sP=nP(),bX=require("util").promisify,NX=bX(setTimeout),yX=1e4,IX=100;iP.exports=wX;async function wX(e){let t=AX(e.schema,e.table),r=await Og.openEnvironment(t,e.table,!0),n=Og.listDBIs(r);Og.initializeDBIs(r,Lu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new sP;do s=await CX(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await NX(IX);while(s.transactions_deleted>0);return i}a(wX,"deleteAuditLogsBefore");async function CX(e,t){let r=new sP;try{let n=e.dbis[Lu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[Lu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];OX.isEmpty(c)||(s=e.dbis[Lu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Lu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>yX)break}return await s,r}catch(n){throw n}}a(CX,"deleteTransactions")});var cP=g((YTe,aP)=>{"use strict";var bg=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};aP.exports=bg});var uP=g((QTe,lP)=>{"use strict";var DX=os(),LX=Iu(),WTe=cP(),Us=D(),PX=K(),Ng=Ve(),MX=ci(),UX=yu(),vX=Au(),{getSchemaPath:BX}=je();lP.exports=HX;async function HX(e,t=!0){let r;e.schema===Us.SYSTEM_SCHEMA_NAME?r=MX[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await qX(e),s=BX(e.schema,e.table),i=await Ng.openEnvironment(s,e.table);return t===!0&&await GX(e,i,r.hash_attribute),Ng.dropDBI(i,e.attribute),n}a(HX,"lmdbDropAttribute");async function GX(e,t,r){let n=Ng.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let _={};for(let u in c)u!==i&&(_[u]=c[u]);s=t.dbis[r].put(o,_,l)}await s}a(GX,"removeAttributeFromAllObjects");async function qX(e){let t=new DX(Us.SYSTEM_SCHEMA_NAME,Us.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Us.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Us.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Us.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await UX(t)).filter(o=>o[Us.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(PX.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Us.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new LX(Us.SYSTEM_SCHEMA_NAME,Us.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return vX(i)}a(qX,"dropAttributeFromSystem")});var pP=g((JTe,hP)=>{"use strict";var yg=Ve(),bc=at(),zTe=Or(),Ig=D(),_P=K(),{getTransactionAuditStorePath:xX}=je(),FX=Rc(),Zf=Sc(),kX=x();hP.exports=$X;async function $X(e){let t=xX(e.schema,e.table),r=await yg.openEnvironment(t,e.table,!0),n=yg.listDBIs(r);yg.initializeDBIs(r,bc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Ig.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return dP(r,e.search_values);case Ig.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,YX(r,e.search_values,s);case Ig.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return VX(r,e.search_values);default:return dP(r)}}a($X,"readAuditLog");function dP(e,t=[0,Date.now()]){_P.isEmpty(t[0])&&(t[0]=0),_P.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[bc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new Zf,s))}a(dP,"searchTransactionsByTimestamp");function VX(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[bc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,EP(e,i))}return Object.fromEntries(r)}a(VX,"searchTransactionsByUsername");function YX(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=FX.equals(e,bc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,bc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of u){let f=Number(d);n.has(f)?n.get(f).push(_.toString()):n.set(f,[_.toString()])}}let s=Array.from(n.keys()),i=EP(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);fP(l,"records",r,u,o),fP(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(YX,"searchTransactionsByHashValues");function fP(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let _=s.get(l),u=_[_.length-1];if(u.timestamp===i)u[t]=[c];else{let d=new Zf(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Zf(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(l,[_])}}}a(fP,"loopRecords");function EP(e,t){let r=[];try{let n=e.dbis[bc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new Zf,i);r.push(o)}}catch(i){kX.warn(i)}return r}catch(n){throw n}}a(EP,"batchSearchTransactions")});var SP=g((tge,mP)=>{"use strict";var{getSchemaPath:ZTe}=je(),ege=Ve(),{database:KX}=(Re(),ie(ke));mP.exports={writeTransaction:WX};async function WX(e,t,r){return KX({database:e,table:t}).transaction(r)}a(WX,"writeTransaction")});var AP=g((nge,RP)=>{"use strict";var{getSchemaPath:TP}=je(),gP=Ve();RP.exports={flush:QX,resetReadTxn:jX};async function QX(e,t){return(await gP.openEnvironment(TP(e,t),t.toString())).flushed}a(QX,"flush");async function jX(e,t){try{(await gP.openEnvironment(TP(e,t),t.toString())).resetReadTxn()}catch{}}a(jX,"resetReadTxn")});var yP=g((ige,NP)=>{"use strict";var{Readable:zX}=require("stream"),{getDatabases:JX}=(Re(),ie(ke)),{readSync:XX,openSync:ZX,createReadStream:OP}=require("fs"),{open:eZ}=require("lmdb"),bP=su(),tZ=iu(),{AUDIT_STORE_OPTIONS:rZ}=(eo(),ie(IP)),{INTERNAL_DBIS_NAME:nZ,AUDIT_STORE_NAME:sZ}=at();NP.exports=oZ;var wg=32768,iZ=100;async function oZ(e){let t=e.database||e.schema||"data",r=JX()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let u=_.dbisDB,d=eZ({noSync:!0,maxDbs:tZ.MAX_DBS}),f,E=d.openDB(nZ,new bP(!1)),h=u.useReadTransaction(),m=0,S=a(async function(T,A){A.encoding="binary",A.encoder=void 0;let L=d.openDB(T,A),U=u.openDB(T,A);for(let{key:v,version:k,value:H}of U.getRange({start:null,transaction:h,versions:U.useVersions}))f=L.put(v,H,k),m++%iZ===0&&(await new Promise(j=>setTimeout(j,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:T,value:A}of u.getRange({transaction:h,start:!1}))if(s.some(L=>T.startsWith?.(L+"/"))){E.put(T,A);let[,L]=T.split("/"),U=!L,v=new bP(!U,U);await S(T,v)}e.include_audit&&await S(sZ,Object.assign({},rZ)),await f;let R=OP(d.path);return R.headers=l(),R.on("close",()=>{h.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=ZX(o.path);return o.transaction(()=>{let _=Buffer.alloc(wg);XX(c,_,0,wg),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=OP(null,{fd:c,start:wg}),f=new zX.from(async function*(){yield _;for await(let E of d)u.openTimer&&(u.openTimer=0),yield E;u.done()}());return f.headers=l(),f});function l(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(oZ,"getBackup")});var DP=g((age,CP)=>{"use strict";var aZ=x(),{handleHDBError:cZ}=oe(),lZ=YI(),uZ=Sf(),_Z=zT(),dZ=FD(),fZ=Au(),EZ=ng(),hZ=fL(),pZ=AL(),mZ=yu(),SZ=DL(),TZ=FL(),gZ=WL(),RZ=jL(),AZ=ZL(),OZ=oP(),bZ=dg(),NZ=uP(),yZ=pP(),IZ=SP(),wP=AP(),wZ=yP(),Cg=class extends lZ{static{a(this,"LMDBBridge")}async searchByConditions(t){return SZ(t)}async getDataByHash(t){return await EZ(t)}async searchByHash(t){return await hZ(t)}async getDataByValue(t,r){return await pZ(t,r)}async searchByValue(t){return await mZ(t)}async createSchema(t){return await dZ(t)}async dropSchema(t){return await TZ(t)}async createTable(t,r){return await gZ(t,r)}async dropTable(t){return await bZ(t)}async createAttribute(t){return await uZ(t)}async createRecords(t){return await _Z(t)}async updateRecords(t){return await RZ(t)}async upsertRecords(t){try{return await AZ(t)}catch(r){throw cZ(r,null,null,aZ.ERR,r)}}async deleteRecords(t){return await fZ(t)}async dropAttribute(t){return await NZ(t)}async deleteAuditLogsBefore(t){return await OZ(t)}async readAuditLog(t){return await yZ(t)}writeTransaction(t,r,n){return IZ.writeTransaction(t,r,n)}flush(t,r){return wP.flush(t,r)}resetReadTxn(t,r){return wP.resetReadTxn(t,r)}getBackup(t){return wZ(t)}};CP.exports=Cg});function MZ(){PZ=setInterval(function(){for(let e of Dg)if(e.stale){let t=e[Ie]?.url;MP.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},LZ).unref()}var Lg,PP,MP,CZ,Dg,DZ,Pu,LP,_a,eE,LZ,PZ,Pg=be(()=>{Lg=B(Or()),PP=B(oe()),MP=B(x());es();CZ=100,Dg=new Set,DZ=25e3,_a=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxnsUsed=1,this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0),Dg.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Dg.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Pu&&performance.now()-LP>DZ)throw new PP.ServerError("Outstanding write transactions have too long of queue, please try again later",503)}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,Lg.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let u=this.validated;this.validated=this.writes.length;for(let f=u;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=u;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=u;h<this.validated;h++){let m=this.writes[h];if(!m)continue;let S=m[f===0?"before":"beforeIntermediate"];if(S){let R=S();E?E.push?E.push(R):E=[E,R]:E=R}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(u){throw this.abort(),u}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(u=>u);let c=a(u=>{u.commit(r,u.entry,n)},"doWrite"),l=a(()=>{let u=this.writes[o++];if(u)if(u.key){n>0&&(u.entry=u.store.getEntry(u.key));let d=u.store.ifVersion(u.key,u.entry?.version??null,l);s=s||d}else l();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<CZ>>n?l():s=this.writes[0].store.transaction(()=>{for(let u of this.writes)u.entry=u.store.getEntry(u.key),c(u);return!0}),s)return Pu||(Pu=s,LP=performance.now(),Pu.then(()=>{Pu=null})),s.then(u=>u?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=n+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let u=this.next?.commit(t);if(u?.then)return u?.then(d=>({txnTime:r,next:d}));_.next=u}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},eE=class extends _a{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Lg.getNextMonotonicTime)())}getReadTxn(){}},LZ=3e4;a(MZ,"startMonitoringTxns");MZ()});function Ze(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new _a;e.timestamp&&(n.timestamp=e.timestamp),n[Ie]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var UP,da=be(()=>{UP=require("../index");es();Pg();a(Ze,"transaction");(0,UP._assignPackageExport)("transaction",Ze);Ze.commit=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ze.abort=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var $P={};Fe($P,{ResourceBridge:()=>vg});function Bg({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 BP(e,t){let r=vs(e),n=Bg(e,r);if(!r)throw new as.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user},o;Ze(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let _=c[l++],u=await r.get({id:_,lazy:s,select:n},i);return u=u&&rE(u),t?{value:{key:_,value:u}}:{value:u}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function vs(e){let t=e.database||e.schema||vZ,r=Lr()[t];if(!r)throw(0,as.handleHDBError)(new Error,UZ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function HP(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*GP(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:l}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(l)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[l]})}n&&(yield n)}var qP,tE,as,xP,FP,cs,Mg,Ug,kP,UZ,vZ,BZ,HZ,vP,vg,VP=be(()=>{"use strict";qP=B(DP()),tE=B(Ac()),as=B(oe());Re();xP=B(_u()),FP=B(fu()),cs=B(D()),Mg=B(di()),Ug=B(is()),kP=B(K());da();nE();({HDB_ERROR_MSGS:UZ}=as.hdb_errors),vZ="data",BZ=1e4,HZ=10,vg=class extends qP.default{static{a(this,"ResourceBridge")}constructor(t){super(t),vP=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,tE.default)(t,"conditions");if(r)throw(0,as.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=vs(t);if(!n)throw new as.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Bg(t,n),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new as.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Et({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await vs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=vs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(_=>{if(!_){let{value:u,version:d}=r.primaryStore.getEntry(o);return i(o,u,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){vs(t).dropTable()}createSchema(t){return Mu({database:t.schema,table:null}),Mg.signalSchemaChange(new Ug.SchemaEventMsg(process.pid,cs.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Hg(t.schema),Mg.signalSchemaChange(new Ug.SchemaEventMsg(process.pid,cs.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,vP.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,xP.default)(t);(0,FP.default)(t,n,r.primaryKey);let s,i=Lr()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Ze(o,async c=>{if(!i.schemaDefined){s=[];for(let u of n)i.attributes.find(f=>f.name==u)||s.push(u);s.length>0&&await i.addAttributes(s.map(u=>({name:u,indexed:!0})))}let l=[],_=[];for(let u of t.records){let d=await i.get(u[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(u[i.primaryKey]);continue}d&&(d=rE(d));for(let f in u)if(Object.prototype.hasOwnProperty.call(u,f)){let E=u[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,u[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(u),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(u,f)||(u[f]=d[f]);await i.put(u,o),l.push(u[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=Lr()[t.schema][t.table],n={user:t.hdb_user};return Ze(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return HP(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Lr()[t.schema][t.table];if(!r.createdTimeProperty)throw new as.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:cs.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],_=a(async()=>{let u=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...u.deleted_hashes),o.push(...u.skipped_hashes),await(0,kP.async_set_timeout)(HZ),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%BZ===0&&await _();return l.length>0&&await _(),s?HP(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,tE.default)(t,"hashes");if(r)throw r;return BP(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of BP(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&cs.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,tE.default)(t,"value");if(n)throw n;let s=vs(t);if(!s)throw new as.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===cs.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Bg(t,s)})}async getDataByValue(t,r){let n=new Map,s=vs(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){vs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return vs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=vs(t),n={};switch(t.search_type){case cs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case cs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of GP(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return GP(r,t.search_values?.[0],t.search_values?.[1])}}};a(Bg,"getSelect");a(BP,"getRecords");a(vs,"getTable");a(HP,"createDeleteResponse");a(GP,"groupRecordsInHistory")});var vn=g((Age,YP)=>{"use strict";var{ResourceBridge:GZ}=(VP(),ie($P)),qZ=X();qZ.initSync();var sE;function xZ(){return sE||(sE=new GZ,sE)}a(xZ,"getBridge");YP.exports=xZ()});var jP=g((bge,QP)=>{"use strict";var KP=require("lodash"),Uu=require("mathjs"),FZ=require("jsonata"),WP=K();QP.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?KP.uniqWith(e,KP.isEqual):e,searchJSON:kZ,mad:vu.bind(null,Uu.mad),mean:vu.bind(null,Uu.mean),mode:vu.bind(null,Uu.mode),prod:vu.bind(null,Uu.prod),median:vu.bind(null,Uu.median)};function vu(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(vu,"aggregateFunction");function kZ(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(WP.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),WP.isEmpty(this.__ala__.res[r])){let n=FZ(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(kZ,"searchJSON")});var JP=g((yge,zP)=>{"use strict";var bt=require("moment"),Gg="YYYY-MM-DDTHH:mm:ss.SSSZZ";bt.suppressDeprecationWarnings=!0;zP.exports={current_date:()=>bt().utc().format("YYYY-MM-DD"),current_time:()=>bt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return bt(e).utc().format("YYYY");case"month":return bt(e).utc().format("MM");case"day":return bt(e).utc().format("DD");case"hour":return bt(e).utc().format("HH");case"minute":return bt(e).utc().format("mm");case"second":return bt(e).utc().format("ss");case"millisecond":return bt(e).utc().format("SSS");default:break}},date:e=>bt(e).utc().format(Gg),date_format:(e,t)=>bt(e).utc().format(t),date_add:(e,t,r)=>bt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>bt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=bt(e).utc(),s=bt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>bt().utc().valueOf(),get_server_time:()=>bt().format(Gg),offset_utc:(e,t)=>bt(e).utc().utcOffset(t).format(Gg)}});var tM=g((Ige,eM)=>{"use strict";var $Z=require("@turf/area"),VZ=require("@turf/length"),YZ=require("@turf/circle"),KZ=require("@turf/difference"),WZ=require("@turf/distance"),QZ=require("@turf/boolean-contains"),jZ=require("@turf/boolean-equal"),zZ=require("@turf/boolean-disjoint"),JZ=require("@turf/helpers"),XP=D(),Ae=K(),hi=x();eM.exports={geoArea:XZ,geoLength:ZZ,geoCircle:e5,geoDifference:t5,geoDistance:ZP,geoNear:r5,geoContains:n5,geoEqual:s5,geoCrosses:i5,geoConvert:o5};function XZ(e){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return $Z.default(e)}catch(t){return hi.trace(t,e),NaN}}a(XZ,"geoArea");function ZZ(e,t){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return VZ.default(e,{units:t||"kilometers"})}catch(r){return hi.trace(r,e),NaN}}a(ZZ,"geoLength");function e5(e,t,r){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return YZ.default(e,t,{units:r||"kilometers"})}catch(n){return hi.trace(n,e,t),NaN}}a(e5,"geoCircle");function t5(e,t){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return KZ(e,t)}catch(r){return hi.trace(r,e,t),NaN}}a(t5,"geoDifference");function ZP(e,t,r){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return WZ.default(e,t,{units:r||"kilometers"})}catch(n){return hi.trace(n,e,t),NaN}}a(ZP,"geoDistance");function r5(e,t,r,n){if(Ae.isEmpty(e)||Ae.isEmpty(t))return!1;if(Ae.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return ZP(e,t,n)<=r}catch(s){return hi.trace(s,e,t),!1}}a(r5,"geoNear");function n5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return QZ.default(e,t)}catch(r){return hi.trace(r,e,t),!1}}a(n5,"geoContains");function s5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return jZ.default(e,t)}catch(r){return hi.trace(r,e,t),!1}}a(s5,"geoEqual");function i5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return!zZ.default(e,t)}catch(r){return hi.trace(r,e,t),!1}}a(i5,"geoCrosses");function o5(e,t,r){if(Ae.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ae.isEmpty(t))throw new Error("geo_type is required");if(Ae.isEmpty(XP.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(XP.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ae.autoCastJSON(e)),JZ[t](e,r)}a(o5,"geoConvert")});var iE=g((Cge,rM)=>{var fa=jP(),ln=JP(),Bs=tM();rM.exports=e=>{e.aggr.mad=e.aggr.MAD=fa.mad,e.aggr.mean=e.aggr.MEAN=fa.mean,e.aggr.mode=e.aggr.MODE=fa.mode,e.aggr.prod=e.aggr.PROD=fa.prod,e.aggr.median=e.aggr.MEDIAN=fa.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=fa.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=fa.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ln.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ln.current_time,e.fn.extract=e.fn.EXTRACT=ln.extract,e.fn.date=e.fn.DATE=ln.date,e.fn.date_format=e.fn.DATE_FORMAT=ln.date_format,e.fn.date_add=e.fn.DATE_ADD=ln.date_add,e.fn.date_sub=e.fn.DATE_SUB=ln.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ln.date_diff,e.fn.now=e.fn.NOW=ln.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ln.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ln.get_server_time,e.fn.getdate=e.fn.GETDATE=ln.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ln.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Bs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Bs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Bs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Bs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Bs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Bs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Bs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Bs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Bs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Bs.geoNear}});var oM=g((Dge,iM)=>{"use strict";var Bu=require("lodash"),Pr=require("alasql");Pr.options.cache=!1;var a5=iE(),nM=require("clone"),oE=require("recursive-iterator"),de=x(),Pe=K(),Nc=vn(),c5=D(),{hdb_errors:l5}=oe(),{getDatabases:sM}=(Re(),ie(ke)),u5="IS NULL",ls="There was a problem performing this search. Please check the logs and try again.";a5(Pr);var qg=class{static{a(this,"SQLSearch")}constructor(t,r){if(Pe.isEmpty(t))throw de.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(),Pe.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Pe.isEmptyOrZeroLength(n))return de.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw de.error("Error thrown from checkEmptySQL in SQLSearch class method search."),de.error(n),new Error(ls)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw de.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),de.error(n),new Error(ls)}if(Object.keys(this.data).length===0)return de.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw de.error("Error thrown from processJoins in SQLSearch class method search."),de.error(n),new Error(ls)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw de.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),de.error(n),new Error(ls)}try{return t=await this._finalSQL(),t}catch(n){throw de.error("Error thrown from finalSQL in SQLSearch class method search."),de.error(n),new Error(ls)}}_getColumns(){let t=new oE(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(nM(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Bu.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=sM()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Pe.isEmpty(this.statement.where)){de.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new oE(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Pe.isEmpty(r)&&r.right)if(Pe.isNotEmptyAndHasValue(r.right.value)){let n=Pe.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Pr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Pe.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Pr.yy.LogicValue({value:i}):n instanceof Pr.yy.StringValue&&Pe.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Pr.yy.NumValue({value:i}))});if(t){de.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new oE(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Pe.isEmpty(c5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Pe.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Pe.isEmptyOrZeroLength(r.left.columnid)||Pe.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(Pe.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"=":!Pe.isEmpty(r.right.value)||!Pe.isEmpty(r.left.value)?n.add(Pe.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<l.length;_++)if(l[_].value)n.add(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,...n])}}}_setAliasesForColumns(){if(Pe.isEmptyOrZeroLength(this.all_table_attributes)&&Pe.isEmptyOrZeroLength(this.statement.from)&&Pe.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Bu.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Pe.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Pe.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Pe.isEmptyOrZeroLength(this.all_table_attributes)&&!Pe.isEmptyOrZeroLength(this.columns.columns))return t;if(Pe.isEmptyOrZeroLength(this.all_table_attributes)&&Pe.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Pr.promise(r)}catch(r){throw de.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),de.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(nM(n))})}_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,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Pe.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(u5)>-1&&this.tables.forEach(s=>{let i={columnid:sM()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Bu.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Pe.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Pe.isEmptyOrZeroLength(this.exact_search_values[_].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[_].values);let u=await Nc.getDataByHash(c);for(let d of c.hash_values)u.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(u){throw de.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),de.error(u),new Error(ls)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async u=>{let d=Object.assign({},c);d.search_value=u;let f=await Nc.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]):(this.data[i].__merged_data[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,E))}))}catch(u){throw de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),de.error(u),new Error(ls)}else if(!Pe.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Pe.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let u=this.comparator_search_values[_].comparators;for(let d=0,f=u.length;d<f;d++){let E=u[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await Nc.getDataByValue(c,E.operation);if(l)for(let[m]of h)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...n[i]],this._setMergedHashAttribute(i,m));else for(let[m,S]of h)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]):(this.data[i].__merged_data[m]=[...n[i]],this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,m))}}catch(u){throw de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),de.error(u),new Error(ls)}else try{c.search_attribute=s.attribute,c.search_value="*";let u=await Nc.getDataByValue(c);if(l)for(let[d]of u)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of u)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]),this._setMergedHashAttribute(i,d))}catch(u){throw de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),de.error(u),new Error(ls)}}}_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 Pr.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(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.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 n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Pr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Pr.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 s=t.is_func?new Pr.yy.FuncValue:new Pr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,m=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${m}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${m}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let u="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(u=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${_} ${u} ${d}`,h=this._convertColumnsToIndexes(E,s);f=await Pr.promise(h,t),t=null}catch(E){throw de.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),de.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let m=f[E];o.forEach(S=>{m[S.key]!==null&&m[S.key]!==void 0&&S.keys.add(m[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),m=Bu.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,R=m.length;S<R;S++){let T=m[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[T]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new oE(this.columns);for(let{node:i}of s)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)&&n.push(o)}}n=Bu.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw de.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),de.error(i),new Error(ls)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let u in i)o.push(i[u][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await Nc.getDataByHash(c),_=s.columns.length;for(let u=0,d=o.length;u<d;u++){let f=o[u],E=l.get(f);for(let h=0;h<_;h++){let m=s.columns[h],S=E[m]===void 0?null:E[m];this.data[n].__merged_data[f].push(S)}}}}catch(r){throw de.error("Error thrown from getDataByHash function in SQLSearch class method getData."),de.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(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();de.trace(`Final SQL: ${s}`),n=await Pr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),de.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw de.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),de.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return de.error(l5.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),de.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${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 l=s[i],_=new RegExp(`${l}.\`${o}\``,"g"),u=`${l}.[${c}]`;n=n.replace(_,u)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(l,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await Nc.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw de.error("There was an error when processing this SQL operation. Check your logs"),de.error(o),new Error(ls)}}return Object.values(Object.values(this.data)[0].__merged_data)}};iM.exports=qg});var or=g((Pge,aM)=>{"use strict";var _5=$I();aM.exports={searchByConditions:f5,searchByHash:E5,searchByValue:h5,search:p5};var xg=vn(),{transformReq:Fg}=K(),d5=oM();async function f5(e){return Fg(e),xg.searchByConditions(e)}a(f5,"searchByConditions");async function E5(e){Fg(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of xg.searchByHash(e))r&&t.push(r);return t}a(E5,"searchByHash");async function h5(e){Fg(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of xg.searchByValue(e))t.push(r);return t}a(h5,"searchByValue");function p5(e,t){try{let r=new _5(e);r.validate(),new d5(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(p5,"search")});var aE=g((Uge,cM)=>{"use strict";var m5=vn();cM.exports={writeTransaction:S5};function S5(e,t,r){return m5.writeTransaction(e,t,r)}a(S5,"writeTransaction")});var dM=g((Hge,_M)=>{"use strict";var T5=or(),g5=Un(),lM=x(),R5=Ir(),Bge=aE(),A5=require("clone"),$g=require("alasql"),O5=iE(),uM=require("util"),b5=uM.promisify(g5.getTableSchema),N5=uM.promisify(T5.search),y5=D(),kg=K();O5($g);_M.exports={update:w5};var I5="There was a problem performing this update. Please check the logs and try again.";async function w5({statement:e,hdb_user:t}){let r=await b5(e.table.databaseid,e.table.tableid),n=C5(e.columns);kg.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=A5(s),c=kg.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=$g.parse(l).statements[0],u=await N5(_),d=D5(n,u);return L5(o,d,t)}a(w5,"update");function C5(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=$g.compile(`SELECT ${r.expression.toString()} AS [${y5.FUNC_VAL}] FROM ?`)}),t}catch(t){throw lM.error(t),new Error(I5)}}a(C5,"createUpdateRecord");function D5(e,t){return kg.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(D5,"buildUpdateRecords");async function L5(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await R5.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){lM.error(`Error delete new_attributes from update response: ${i}`)}return s}a(L5,"updateRecords")});var EM=g((Fge,fM)=>{var P5=require("alasql"),M5=or(),U5=x(),v5=vn(),Yg=require("util"),Vg=K(),B5=D(),H5=Un(),qge=aE(),xge=Ir(),G5="record",q5="successfully deleted",x5=Yg.callbackify(V5),F5=Yg.promisify(M5.search),k5=Yg.promisify(H5.getTableSchema);fM.exports={convertDelete:x5};function $5(e){return`${e.deleted_hashes.length} ${G5}${e.deleted_hashes.length===1?"":"s"} ${q5}`}a($5,"generateReturnMessage");async function V5({statement:e,hdb_user:t}){let r=await k5(e.table.databaseid,e.table.tableid);Vg.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Vg.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=P5.parse(o).statements[0],l={operation:B5.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await F5(c);let _=await v5.deleteRecords(l);return Vg.isEmptyOrZeroLength(_.message)&&(_.message=$5(_)),delete _.txn_time,_}catch(_){throw U5.error(_),_.hdb_code?_.message:_}}a(V5,"convertDelete")});var TM=g(($ge,SM)=>{"use strict";var Y5=_i(),{hdb_errors:hM}=oe(),{getDatabases:pM}=(Re(),ie(ke));SM.exports={checkSchemaExists:mM,checkSchemaTableExists:K5,schema_describe:Y5};async function mM(e){if(!pM()[e])return hM.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(mM,"checkSchemaExists");async function K5(e,t){let r=await mM(e);if(r)return r;if(!pM()[e][t])return hM.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(K5,"checkSchemaTableExists")});var Ea=g((Yge,W5)=>{W5.exports={name:"harperdb",version:"4.3.7",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},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":"pm2 kill && 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:resources && 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:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","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":"pm2 kill && 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.535.0","@aws-sdk/lib-storage":"3.535.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.12.0","@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:"4.1.10","cbor-x":"1.5.8",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.26.2","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.0.6",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.30.1","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.22.3","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.16.0",yaml:"2.4.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.8",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.20.2",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.3.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",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:"^5.4.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var Fu={};Fe(Fu,{addAnalyticsListener:()=>xu,recordAction:()=>un,recordActionBinary:()=>_n,setAnalyticsEnabled:()=>Q5});function Q5(e){wM=e}function un(e,t,r,n,s){if(!wM)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=uE.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let _=c;o.values=c=new Float32Array(l*2),c.set(_),c.index=l+1}c[l]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")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 if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},uE.set(i,o)}cE||j5()}function _n(e,t,r,n,s){un(!!e,t,r,n,s)}function xu(e){LM.push(e)}function j5(){cE=performance.now(),setTimeout(async()=>{let e=performance.now()-cE;cE=0;let t=[],r={time:Date.now(),period:e,threadId:ha.threadId,metrics:t};for(let[s,i]of uE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,_=[],u;for(let d of PM){let f=Math.floor(c*d),E=o[f-1];if(f>l){let h=f-l;if(E===u){let m=_[_.length-1];typeof m=="number"?_[_.length-1]={value:m,count:1+h}:m.count+=h}else _.push(h>1?{value:E,count:h}:E),u=E;l=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await MM()}let n=process.memoryUsage();t.push({metric:"memory",threadId:ha.threadId,byThread:!0,...n});for(let s of LM)s(t);uE=new Map,ha.parentPort?ha.parentPort.postMessage({type:DM,report:r}):BM({report:r})},CM).unref()}async function z5(e,t=6e4){let r=Qg(),n=UM(),s=new Promise(m=>{let S=performance.now();setImmediate(()=>{let R=performance.now();R-S>5e3&&(0,Hu.warn)("Unusually high event queue latency on the main thread of "+Math.round(R-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let R=performance.now();R-S>5e3&&(0,Hu.warn)("Unusually high task queue latency on the main thread of "+Math.round(R-S)+"ms"),m(R-S)})}),i;for(let m of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(m.value?.time){i=m.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,_=[],u;for(let{key:m,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(m>o+t)break}else o=m;u=m;let{metrics:R,threadId:T}=S;for(let A of R||[]){let{path:L,method:U,type:v,metric:k,count:H,total:j,distribution:z,threads:J,...Se}=A;H||(H=1);let ue=k+(L?"-"+L:"");U!==void 0&&(ue+="-"+U),v!==void 0&&(ue+="-"+v);let Ee=c.get(ue);if(Ee){if(Ee.threads){let Ge=Ee.threads[T];if(Ge)Ee=Ge;else{Ee.threads[T]=Object.assign({},Se);continue}}Ee.count||(Ee.count=1);let Me=Ee.count;for(let Ge in Se){let Ft=Se[Ge];typeof Ft=="number"&&(Ee[Ge]=(Ee[Ge]*Me+Ft*H)/(Me+H))}Ee.count+=H,j>=0&&(Ee.total+=j,Ee.ratio=Ee.total/Ee.count)}else Ee=Object.assign({period:t},A),delete Ee.distribution,c.set(ue,Ee),Ee.byThread&&(Ee.threads=[],Ee.threads[T]=Object.assign({},Se),_.push(Ee));if(z){z=z.map(Ge=>typeof Ge=="number"?{value:Ge,count:1}:Ge);let Me=l.get(ue);Me?Me.push(...z):l.set(ue,z)}}await MM()}for(let m of _){let{path:S,method:R,type:T,metric:A,count:L,total:U,distribution:v,threads:k,...H}=m;k=k.filter(j=>j);for(let j in H){if(typeof m[j]!="number")continue;let z=0;for(let J of k){let Se=J[j];typeof Se=="number"&&(z+=Se)}m[j]=z}m.count=k.length,delete m.threads,delete m.byThread}for(let[m,S]of l){let R=c.get(m);S.sort((Ge,Ft)=>Ge.value>Ft.value?1:-1);let T=R.count-1,A=[],L=0,U=0,v;for(let Ge of PM){let Ft=T*Ge;for(;L<Ft;)v=S[U++],L+=v.count,U===1&&L--;let qd=S[U>1?U-2:0];v||(v=S[0]),A.push(v.value-(v.value-qd.value)*(L-Ft)/v.count)}let[k,H,j,z,J,Se,ue,Ee,Me]=A;Object.assign(R,{p1:k,p10:H,p25:j,median:z,p75:J,p90:Se,p95:ue,p99:Ee,p999:Me})}let d;for(let[m,S]of c)S.id=(0,lE.getNextMonotonicTime)(),S.time=u,n.primaryStore.put(S.id,S,{append:!0}).then(R=>{R||n.primaryStore.put(S.id,S)}),d=!0;let f=Date.now(),{idle:E,active:h}=performance.eventLoopUtilization();if(d||h*10>E){let m=(0,lE.getNextMonotonicTime)(),S={id:m,metric:"main-thread-utilization",idle:E-gM,active:h-RM,taskQueueLatency:await s,time:f,...process.memoryUsage()};n.primaryStore.put(m,S,{append:!0}).then(R=>{R||n.primaryStore.put(m,S)})}gM=E,RM=h}async function AM(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Qg(){return OM||(OM=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function UM(){return bM||(bM=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Z5(){vM=!0;let e=(0,qu.get)(Wg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await z5(CM,e),await AM(Qg(),J5),await AM(UM(),X5)},Math.min(e/2,2147483647)).unref()}function BM(e,t){let r=e.report;r.threadId=t?.threadId||ha.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(NM+=n.mean*n.count);r.totalBytesProcessed=NM,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(yM.get(t))}),yM.set(t,t.performance.eventLoopUtilization())),r.id=(0,lE.getNextMonotonicTime)(),Qg().primaryStore.put(r.id,r),vM||Z5(),e8&&(HM=r8(r))}async function r8(e){if(await HM,!lo){let r=(0,Gu.dirname)((0,Hu.getLogFilePath)());try{lo=await(0,Kg.open)((0,Gu.join)(r,"analytics.log"),"r+")}catch{lo=await(0,Kg.open)((0,Gu.join)(r,"analytics.log"),"w+")}}let t=(await lo.stat()).size;if(t>t8){let r=Buffer.alloc(t);await lo.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await lo.write(r,{position:0}),await lo.truncate(r.length),t=r.length}await lo.write(JSON.stringify(e)+`
9
+ `,t)}var ha,IM,Hu,Gu,Kg,lE,qu,Wg,uE,wM,cE,CM,DM,LM,PM,gM,RM,MM,J5,X5,OM,bM,vM,NM,yM,e8,HM,lo,t8,pi=be(()=>{ha=require("worker_threads"),IM=B(et());Re();Hu=B(x()),Gu=require("path"),Kg=require("fs/promises"),lE=B(Or()),qu=B(X()),Wg=B(D());br();(0,qu.initSync)();uE=new Map,wM=(0,qu.get)(Wg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(Q5,"setAnalyticsEnabled");a(un,"recordAction");ct.recordAnalytics=un;a(_n,"recordActionBinary");cE=0,CM=1e3,DM="analytics-report",LM=[];a(xu,"addAnalyticsListener");PM=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(j5,"sendAnalytics");a(z5,"aggregation");gM=0,RM=0,MM=a(()=>new Promise(setImmediate),"rest");a(AM,"cleanup");J5=36e5,X5=31536e6;a(Qg,"getRawAnalyticsTable");a(UM,"getAnalyticsTable");(0,IM.setChildListenerByType)(DM,BM);a(Z5,"startScheduledTasks");NM=0,yM=new Map,e8=!1;a(BM,"recordAnalytics");t8=1e6;a(r8,"logAnalytics")});var eR=g((sRe,WM)=>{"use strict";var{decode:n8}=require("msgpackr"),{isMainThread:tRe,parentPort:rRe,threadId:nRe}=require("worker_threads"),ku=pt(),yc=Xe(),Jg=D(),_r=x(),zg=X(),s8=D(),{onMessageByType:i8}=et(),xM=ui(),{recordAction:o8,recordActionBinary:a8}=(pi(),ie(Fu)),{publishToStream:c8}=ku,{ConsumerEvents:GM}=require("nats"),l8=or(),{promisify:u8}=require("util"),FM=u8(setTimeout),fE=1e4,EE,dE,_8,d8,kM,$u=new Map,Ic=new Map;WM.exports={initialize:Xg,ingestConsumer:Zg,setSubscription:f8,setIgnoreOrigin:p8,getDatabaseSubscriptions:h8,updateConsumer:$M};async function Xg(){i8(Jg.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await $M(n)}),kM=!0,_r.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await ku.getNATSReferences();EE=e,dE=e.info.server_name,_8=t,d8=r}a(Xg,"initialize");async function $M(e){if(e.status==="start"){let{js:t,jsm:r}=await VM(e.node_domain_name);Zg(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=$u.get(e.stream_name+e.node_domain_name);t&&(_r.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),$u.set(e.stream_name+e.node_domain_name,"close")),Ic.get(e.node_domain_name)==="failed"&&Ic.set(e.node_domain_name,"close")}}a($M,"updateConsumer");var hE=new Map;function f8(e,t,r){let n=hE.get(e);n||hE.set(e,n=new Map),n.set(t,r),kM||Xg().then(E8)}a(f8,"setSubscription");async function E8(){let e=await l8.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+yc.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions)if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await VM(r),!n))break;let{schema:o,table:c}=i,l=xM.createNatsTableStreamName(o,c);Zg(l,n,s,r)}}}a(E8,"accessConsumers");async function VM(e){let t,r,n=1;for(;!r;)try{t=await EE.jetstream({domain:e}),r=await EE.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Ic.get(e)==="close")break;Ic.set(e,"failed"),n%10===1&&_r.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<fE?n++*100:fE;await FM(i)}return{js:t,jsm:r}}a(VM,"connectToRemoteJS");function h8(){return hE}a(h8,"getDatabaseSubscriptions");var YM;function p8(e){YM=e}a(p8,"setIgnoreOrigin");var KM=100,qM=new Array(KM),_E=0;async function Zg(e,t,r,n){let{connection:s}=await ku.getNATSReferences();EE=s,dE=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,dE),_r.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(Ic.get(n)==="close")break;o%10===1&&_r.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(_r.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await ku.createConsumer(r,e,dE,new Date(Date.now()).toISOString()));let u=o++*100<fE?o++*100:fE;await FM(u)}let c=!1,l;for(;!c;){if($u.get(e+n)==="close"||Ic.get(n)==="close"){$u.delete(e+n),c=!0;continue}l=await i.consume({max_messages:zg.get(Jg.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100}),$u.set(e+n,l);let _=!1;(async()=>{for await(let u of await l.status())if(u.type===GM.ConsumerDeleted&&(await l.close(),c=!0),u.type===GM.HeartbeatsMissed){let d=u.data;_r.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===2&&(_r.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),_=!0)}})();try{for await(let u of l)await qM[_E],qM[_E]=m8(u).catch(d=>{_r.error(d)}),++_E>=KM&&(_E=0)}catch(u){u.message==="consumer deleted"?(_r.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):_r.error("Error consuming clustering ingest, restarting consumer",u)}ku.clearClientCache(),!c&&_&&await Xg()}}a(Zg,"ingestConsumer");async function m8(e){let t=n8(e.data);o8(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),_r.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=zg.get(Jg.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(yc.MSG_HEADERS.TRANSACTED_NODES)&&r.values(yc.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(yc.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!YM),a8(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(yc.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:_,records:u,hash_values:d,__origin:f,expiresAt:E}=t;_r.trace("processing message:",o,c,_,(u?"records: "+u.map(L=>L?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),_r.trace(`messageProcessor nats msg id: ${e.headers.get(yc.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let m=new Promise(L=>h=L),{timestamp:S,user:R,node_name:T}=f||{},A=hE.get(c)?.get(_);if(!A)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,t.onCommit=h,A.send(t);else if(u.length===1&&!l)A.send({type:jg(o),value:u[0],id:d?.[0],expiresAt:E,timestamp:S,table:_,onCommit:h,user:R,nodeName:T});else{let L=u.map((U,v)=>({type:jg(o),value:U,expiresAt:E,id:d?.[v],table:_}));for(;l;)L.push({type:jg(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;A.send({type:"transaction",writes:L,table:_,timestamp:S,onCommit:h,user:R,nodeName:T})}zg.get(s8.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&c8(e.subject.split(".").slice(0,-1).join("."),xM.createNatsTableStreamName(c,_),e.headers,e.data),await m}catch(o){_r.error(o)}e.ack()}a(m8,"messageProcessor");function jg(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(jg,"convertOperation")});var pt=g((_Re,uU)=>{"use strict";var Vt=X();Vt.initSync();var S8=require("fs-extra"),T8=require("semver"),Ku=require("path"),{monotonicFactory:g8}=require("ulidx"),jM=g8(),R8=require("util"),zM=require("child_process"),A8=R8.promisify(zM.exec),O8=zM.spawn,Zt=Xe(),we=D(),pE=K(),us=x(),mE=ui(),b8=aE(),Vu=ut(),{broadcast:N8,onMessageByType:y8,getWorkerIndex:I8}=et(),{isMainThread:JM}=require("worker_threads"),{Encoder:w8,decode:sR}=require("msgpackr"),XM=new w8,{isEmpty:Ta}=pE,ZM=Cr(),oRe=48*36e11;JM&&y8(we.ITC_EVENT_TYPES.RESTART,()=>{Mr=void 0,Sa=void 0});var{connect:C8,StorageType:D8,RetentionPolicy:L8,AckPolicy:iR,DeliverPolicy:oR,DiscardPolicy:P8,NatsConnection:aRe,JetStreamManager:cRe,JetStreamClient:lRe,StringCodec:uRe,JSONCodec:M8,createInbox:aR,headers:U8,ErrorCode:QM}=require("nats"),{PACKAGE_ROOT:v8}=D(),B8=Ea(),{recordAction:H8}=(pi(),ie(Fu)),eU=M8(),G8="clustering",q8=B8.engines[Zt.NATS_SERVER_NAME],x8=Ku.join(v8,"dependencies"),nR=Ku.join(x8,`${process.platform}-${process.arch}`,Zt.NATS_BINARY_NAME),tR,rR,Yu,pa,ma;uU.exports={runCommand:tU,checkNATSServerInstalled:F8,createConnection:cR,getConnection:Wu,getJetStreamManager:Qu,getJetStream:nU,getNATSReferences:Hs,getServerList:$8,createLocalStream:lR,listStreams:sU,deleteLocalStream:V8,getServerConfig:wc,listRemoteStreams:Y8,viewStream:K8,viewStreamIterator:W8,publishToStream:Q8,request:J8,reloadNATS:uR,reloadNATSHub:X8,reloadNATSLeaf:Z8,extractServerName:z8,requestErrorHandler:e6,createLocalTableStream:cU,createTableStreams:n6,purgeTableStream:lU,purgeSchemaTableStreams:s6,getStreamInfo:i6,updateLocalStreams:a6,closeConnection:k8,getJsmServerName:SE,addNatsMsgHeader:iU,clearClientCache:rU,updateRemoteConsumer:t6,createConsumer:oU,updateConsumerIterator:r6};async function tU(e,t=void 0){let{stdout:r,stderr:n}=await A8(e,{cwd:t});if(n)throw new Error(n.replace(`
10
10
  `,""));return r.replace(`
11
- `,"")}a(ZM,"runCommand");async function x8(){try{await m8.access(tR)}catch{return!1}let e=await ZM(`${tR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return S8.eq(t,G8)}a(x8,"checkNATSServerInstalled");async function oR(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await JM.getClusterUser();if(ga(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}us.trace("create nats connection called");let i=await w8({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Vt.get(we.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Vt.get(we.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Vt.get(we.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),us.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&us.error("Error with Nats client connection, connection closed",o),eU()}),i}a(oR,"createConnection");function eU(){Pr=void 0,ma=void 0,Sa=void 0,Ta=void 0}a(eU,"clearClientCache");async function F8(){Pr&&(await Pr.drain(),Pr=void 0,ma=void 0,Sa=void 0,Ta=void 0)}a(F8,"closeConnection");var Pr,Ta;async function Wu(){return Ta||(Ta=oR(Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Pr=await Ta),Pr||Ta}a(Wu,"getConnection");async function Qu(){if(ma)return ma;ga(Pr)&&await Wu();let{domain:e}=Cc(we.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ga(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ma=await Pr.jetstreamManager({domain:e,timeout:6e4}),ma}a(Qu,"getJetStreamManager");async function tU(){if(Sa)return Sa;ga(Pr)&&await Wu();let{domain:e}=Cc(we.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ga(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Sa=Pr.jetstream({domain:e,timeout:6e4}),Sa}a(tU,"getJetStream");async function Bs(){let e=Pr||await Wu(),t=ma||await Qu(),r=Sa||await tU();return{connection:e,jsm:t,js:r}}a(Bs,"getNATSReferences");async function k8(e){let t=Vt.get(we.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await JM.getClusterUser(),s=await oR(t,r,n),i=iR(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=XM.decode(u.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await hE.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(k8,"getServerList");async function aR(e,t){let{jsm:r}=await Bs(),n=Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:C8.File,retention:D8.Limits,subjects:t,discard:L8.Old,max_msgs:s,max_bytes:i,max_age:n})}a(aR,"createLocalStream");async function rU(){let{jsm:e}=await Bs(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(rU,"listStreams");async function $8(e){let{jsm:t}=await Bs();await t.streams.delete(e)}a($8,"deleteLocalStream");async function V8(e){let{connection:t}=await Bs(),r=[],n=iR(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(XM.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(V8,"listRemoteStreams");async function Y8(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Bs(),i=WM(),o={durable_name:i,ack_policy:nR.Explicit};t&&(o.deliver_policy=sR.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let u of l){let d=rR(u.data),f={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};if(u.headers&&(f.origin=u.headers.get(Zt.MSG_HEADERS.ORIGIN)),_.push(f),u.ack(),u.info.pending===0)break}return await c.delete(),_}a(Y8,"viewStream");async function*K8(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Bs(),i=WM(),o={durable_name:i,ack_policy:nR.Explicit};t&&(o.deliver_policy=sR.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of l){let u=rR(_.data);u[0]||(u=[u]);for(let d of u){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(Zt.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(K8,"viewStreamIterator");async function W8(e,t,r,n){us.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=nU(n,r);let{js:s}=await Bs(),i=await mE(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:zM.encode(n);try{us.trace(`publishToStream publishing to subject: ${o}`),B8(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return iU(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){us.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await aR(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(W8,"publishToStream");function nU(e,t){t===void 0&&(t=M8());let r=Vt.get(we.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Zt.MSG_HEADERS.ORIGIN)&&r&&t.append(Zt.MSG_HEADERS.ORIGIN,r),t}a(nU,"addNatsMsgHeader");function Cc(e){e=e.toLowerCase();let t=Ku.join(Vt.get(we.CONFIG_PARAMS.ROOTPATH),H8);if(e===we.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ga(eR)&&(eR={port:Vu.getConfigFromFile(we.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Vu.getConfigFromFile(we.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zt.SERVER_SUFFIX.HUB,config_file:Zt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ku.join(t,Zt.PID_FILES.HUB),hdb_nats_path:t}),eR;if(e===we.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ga(Zg)&&(Zg={port:Vu.getConfigFromFile(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Vu.getConfigFromFile(we.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zt.SERVER_SUFFIX.LEAF,config_file:Zt.NATS_CONFIG_FILES.LEAF_SERVER,domain:Vu.getConfigFromFile(we.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zt.SERVER_SUFFIX.LEAF,pid_file_path:Ku.join(t,Zt.PID_FILES.LEAF),hdb_nats_path:t}),Zg;us.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Cc,"getServerConfig");async function sU(e,t,r,n){try{await e.consumers.add(t,{ack_policy:nR.Explicit,durable_name:r,deliver_policy:sR.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(sU,"createConsumer");async function Q8(e,t,r){await e.consumers.delete(t,r)}a(Q8,"removeConsumer");function j8(e){return e.split(".")[1]}a(j8,"extractServerName");async function z8(e,t,r=6e4,n=iR()){if(!hE.isObject(t))throw new Error("data param must be an object");let s=zM.encode(t),{connection:i}=await Bs(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return rR(c.data)}a(z8,"request");function cR(e){return new Promise(async(t,r)=>{let n=A8(tR,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(cR,"reloadNATS");async function J8(){let{pid_file_path:e}=Cc(we.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await cR(e)}a(J8,"reloadNATSHub");async function X8(){let{pid_file_path:e}=Cc(we.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await cR(e)}a(X8,"reloadNATSLeaf");function Z8(e,t,r){let n;switch(e.code){case KM.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case KM.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Z8,"requestErrorHandler");async function e6(e,t){let r=t+Zt.SERVER_SUFFIX.LEAF,{connection:n}=await Bs(),{jsm:s}=await c6(r),{schema:i,table:o}=e,c=pE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await iU(async()=>{if(e.subscribe===!0)await sU(s,c,n.info.server_name,l);else try{await Q8(s,c,n.info.server_name)}catch(_){us.trace(_)}})}a(e6,"updateRemoteConsumer");async function t6(e,t,r,n){let s=pE.createNatsTableStreamName(e,t),i=r+Zt.SERVER_SUFFIX.LEAF,o={type:we.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!jM&&y8()<Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=Xg();await c(o)}await b8(o),n==="stop"&&await hE.async_set_timeout(1e3)}a(t6,"updateConsumerIterator");function iU(e){return O8.writeTransaction(we.SYSTEM_SCHEMA_NAME,we.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(iU,"exclusiveLock");async function oU(e,t){let r=pE.createNatsTableStreamName(e,t),n=await mE(),s=i6(e,t,n);await aR(r,[s])}a(oU,"createLocalTableStream");async function r6(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await oU(n,s)}}a(r6,"createTableStreams");async function aU(e,t,r=void 0){if(Vt.get(we.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=pE.createNatsTableStreamName(e,t),{domain:s}=Cc(we.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Wu()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")us.warn(n);else throw n}}a(aU,"purgeTableStream");async function n6(e,t){if(Vt.get(we.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await aU(e,t[r])}a(n6,"purgeSchemaTableStreams");async function s6(e){return(await Qu()).streams.info(e)}a(s6,"getStreamInfo");function i6(e,t,r){return`${Zt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(i6,"createSubjectName");async function mE(){if(Yu)return Yu;if(Yu=(await Qu())?.nc?.info?.server_name,Yu===void 0)throw new Error("Unable to get jetstream manager server name");return Yu}a(mE,"getJsmServerName");async function o6(){let e=await Qu(),t=await mE(),r=await rU();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=a6(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let u=_.join(".");us.trace(`Updating stream subject name from: ${i} to: ${u}`),s.subjects[0]=u,await e.streams.update(s.name,s)}}a(o6,"updateLocalStreams");function a6(e){let{config:t}=e,r=!1,n=Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(a6,"updateStreamLimits");async function c6(e){let t,r;try{t=await Pr.jetstream({domain:e}),r=await Pr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw us.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(c6,"connectToRemoteJS")});var RE=T((dRe,dU)=>{"use strict";var Dc=hf(),Lc=mM(),l6=x(),u6=require("uuid").v4,_Re=require("clone"),TE=di(),Pc=D(),_6=require("util"),lo=Un(),{handleHDBError:Mr,hdb_errors:d6}=oe(),{HDB_ERROR_MSGS:SE,HTTP_STATUS_CODES:Ur}=d6,{SchemaEventMsg:gE}=is(),lU=pt(),{getDatabases:f6}=(ge(),ie(ke)),{transformReq:Mc}=K();dU.exports={createSchema:E6,createSchemaStructure:uU,createTable:h6,createTableStructure:_U,createAttribute:g6,dropSchema:p6,dropTable:m6,dropAttribute:S6,getBackup:R6};async function E6(e){let t=await uU(e);return TE.signalSchemaChange(new gE(process.pid,e.operation,e.schema)),t}a(E6,"createSchema");async function uU(e){let t=Dc.schema_object(e);if(t)throw Mr(t,t.message,Ur.BAD_REQUEST,void 0,void 0,!0);if(Mc(e),!await Lc.checkSchemaExists(e.schema))throw Mr(new Error,SE.SCHEMA_EXISTS_ERR(e.schema),Ur.BAD_REQUEST,Pc.LOG_LEVELS.ERROR,SE.SCHEMA_EXISTS_ERR(e.schema),!0);return await lo.createSchema(e),`database '${e.schema}' successfully created`}a(uU,"createSchemaStructure");async function h6(e){return Mc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await _U(e)}a(h6,"createTable");async function _U(e){let t=Dc.create_table_object(e);if(t)throw Mr(t,t.message,Ur.BAD_REQUEST,void 0,void 0,!0);if(Dc.validateTableResidence(e.residence),!await Lc.checkSchemaTableExists(e.schema,e.table))throw Mr(new Error,SE.TABLE_EXISTS_ERR(e.schema,e.table),Ur.BAD_REQUEST,Pc.LOG_LEVELS.ERROR,SE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:u6(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await lo.createTable(n,e);else throw Mr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Ur.BAD_REQUEST);else await lo.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(_U,"createTableStructure");async function p6(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Dc.schema_object(e),n=t??r;if(n)throw Mr(n,n.message,Ur.BAD_REQUEST,void 0,void 0,!0);Mc(e);let s=await Lc.checkSchemaExists(e.schema);if(s)throw Mr(new Error,s,Ur.NOT_FOUND,Pc.LOG_LEVELS.ERROR,s,!0);let i=await Lc.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await lo.dropSchema(e),TE.signalSchemaChange(new gE(process.pid,e.operation,e.schema)),await lU.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(p6,"dropSchema");async function m6(e){let t=Dc.table_object(e);if(t)throw Mr(t,t.message,Ur.BAD_REQUEST,void 0,void 0,!0);Mc(e);let r=await Lc.checkSchemaTableExists(e.schema,e.table);if(r)throw Mr(new Error,r,Ur.NOT_FOUND,Pc.LOG_LEVELS.ERROR,r,!0);return await lo.dropTable(e),await lU.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(m6,"dropTable");async function S6(e){let t=Dc.attribute_object(e);if(t)throw Mr(t,t.message,Ur.BAD_REQUEST,void 0,void 0,!0);Mc(e);let r=await Lc.checkSchemaTableExists(e.schema,e.table);if(r)throw Mr(new Error,r,Ur.NOT_FOUND,Pc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Mr(new Error,"You cannot drop a hash attribute",Ur.BAD_REQUEST,void 0,void 0,!0);if(Pc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Mr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Ur.BAD_REQUEST,void 0,void 0,!0);try{return await lo.dropAttribute(e),T6(e),TE.signalSchemaChange(new gE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw l6.error(`Got an error deleting attribute ${_6.inspect(e)}.`),n}}a(S6,"dropAttribute");function T6(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(T6,"dropAttributeFromGlobal");async function g6(e){Mc(e);let t=f6()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Mr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Ur.BAD_REQUEST,void 0,void 0,!0);return await lo.createAttribute(e),TE.signalSchemaChange(new gE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(g6,"createAttribute");function R6(e){return lo.getBackup(e)}a(R6,"getBackup")});var EU=T((ERe,fU)=>{"use strict";var{OPERATIONS_ENUM:A6}=D(),lR=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=A6.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};fU.exports=lR});var uR=T((mRe,TU)=>{"use strict";var O6=Un(),pRe=EU(),AE=K(),OE=D(),b6=X(),{handleHDBError:hU,hdb_errors:N6}=oe(),{HDB_ERROR_MSGS:pU,HTTP_STATUS_CODES:mU}=N6,y6=Object.values(OE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),SU="To use this operation audit log must be enabled in harperdb-config.yaml";TU.exports=I6;async function I6(e){if(AE.isEmpty(e.schema))throw new Error(pU.SCHEMA_REQUIRED_ERR);if(AE.isEmpty(e.table))throw new Error(pU.TABLE_REQUIRED_ERR);if(!b6.get(OE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw hU(new Error,SU,mU.BAD_REQUEST,OE.LOG_LEVELS.ERROR,SU,!0);let t=AE.checkSchemaTableExist(e.schema,e.table);if(t)throw hU(new Error,t,mU.NOT_FOUND,OE.LOG_LEVELS.ERROR,t,!0);if(!AE.isEmpty(e.search_type)&&y6.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await O6.readAuditLog(e)}a(I6,"readAuditLog")});var RU=T((TRe,gU)=>{"use strict";var{OPERATIONS_ENUM:w6}=D(),_R=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=w6.GET_BACKUP,this.schema=t,this.table=r}};gU.exports=_R});var bU=T((ORe,OU)=>{"use strict";var C6=Un(),RRe=RU(),dR=K(),D6=D(),ARe=X(),{handleHDBError:L6,hdb_errors:P6}=oe(),{HDB_ERROR_MSGS:AU,HTTP_STATUS_CODES:M6}=P6;OU.exports=U6;async function U6(e){if(dR.isEmpty(e.schema))throw new Error(AU.SCHEMA_REQUIRED_ERR);if(dR.isEmpty(e.table))throw new Error(AU.TABLE_REQUIRED_ERR);let t=dR.checkSchemaTableExist(e.schema,e.table);if(t)throw L6(new Error,t,M6.NOT_FOUND,D6.LOG_LEVELS.ERROR,t,!0);return await C6.getBackup(read_audit_log_object)}a(U6,"getBackup")});var DU=T((NRe,CU)=>{var uo=require("validate.js"),yU=tt(),Uc=D(),{handleHDBError:v6,hdb_errors:B6}=oe(),{HDB_ERROR_MSGS:mt,HTTP_STATUS_CODES:H6}=B6,fR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),G6={STRUCTURE_USER:"structure_user"},NU=Object.values(Uc.ROLE_TYPES_ENUM),q6="attribute_permissions",x6="attribute_name",{PERMS_CRUD_ENUM:vc}=Uc,F6=[q6,...Object.values(vc)],IU=[vc.READ,vc.INSERT,vc.UPDATE],k6=[x6,...IU];function $6(e){let t=fR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,wU(e,t)}a($6,"addRoleValidation");function V6(e){let t=fR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,wU(e,t)}a(V6,"alterRoleValidation");function Y6(e){let t=fR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,yU.validateObject(e,t)}a(Y6,"dropRoleValidation");var K6=["operation","role","id","permission","hdb_user","hdb_auth_header"];function wU(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)K6.includes(n[o])||s.push(n[o]);s.length>0&&bt(mt.INVALID_ROLE_JSON_KEYS(s),r);let i=yU.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{bt(o,r)}),e.permission){let o=W6(e);o&&bt(o,r),NU.forEach(c=>{e.permission[c]&&!uo.isBoolean(e.permission[c])&&bt(mt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(NU.indexOf(o)<0){if(o===G6.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let _=0,u=l.length;_<u;_++){let d=l[_];global.hdb_schema[d]||bt(mt.SCHEMA_NOT_FOUND(d),r)}continue}bt(mt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){bt(mt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let _=c.tables[l];if(!l||!global.hdb_schema[o][l]){bt(mt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(_).forEach(u=>{F6.includes(u)||bt(mt.INVALID_PERM_KEY(u),r,o,l)}),Object.values(vc).forEach(u=>{uo.isDefined(_[u])?uo.isBoolean(_[u])||bt(mt.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):bt(mt.TABLE_PERM_MISSING(u),r,o,l)}),uo.isDefined(_.attribute_permissions)){if(!uo.isArray(_.attribute_permissions)){bt(mt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}}else{bt(mt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}if(_.attribute_permissions){let u=global.hdb_schema[o][l].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(m=>{!k6.includes(m)&&m!==vc.DELETE&&bt(mt.INVALID_ATTR_PERM_KEY(m),r,o,l)}),!uo.isDefined(E.attribute_name)){bt(mt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=E.attribute_name;if(!u.includes(h)){bt(mt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}IU.forEach(m=>{uo.isDefined(E[m])?uo.isBoolean(E[m])||bt(mt.ATTR_PERM_NOT_BOOLEAN(m,h),r,o,l):bt(mt.ATTR_PERM_MISSING(m,h),r,o,l)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${l}`;bt(mt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,l)}}}}return Q6(r)}a(wU,"customValidate");CU.exports={addRoleValidation:$6,alterRoleValidation:V6,dropRoleValidation:Y6};function W6(e){let{operation:t,permission:r}=e;if(t===Uc.OPERATIONS_ENUM.ADD_ROLE||t===Uc.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return mt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Uc.ROLE_TYPES_ENUM.SUPER_USER:Uc.ROLE_TYPES_ENUM.CLUSTER_USER;return mt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(W6,"validateNoSUPerms");function Q6(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:mt.ROLE_PERMS_ERROR,...e};return v6(new Error,n,H6.BAD_REQUEST)}else return null}a(Q6,"generateRolePermResponse");function bt(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(bt,"addPermError")});var NE=T((IRe,UU)=>{"use strict";var LU=yr(),PU=ir(),j6=na(),hR=DU(),pR=di(),z6=require("uuid").v4,J6=require("util"),bE=D(),X6=K(),mR=PU.searchByValue,Z6=PU.searchByHash,e9=J6.promisify(j6.delete),t9=os(),r9=bc(),{hdb_errors:n9,handleHDBError:Ra}=oe(),{HDB_ERROR_MSGS:MU,HTTP_STATUS_CODES:ju}=n9,{UserEventMsg:SR}=is();UU.exports={addRole:s9,alterRole:i9,dropRole:o9,listRoles:a9};function ER(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(ER,"scrubRoleDetails");async function s9(e){let t=hR.addRoleValidation(e);if(t)throw t;e=ER(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await mR(r)||[])}catch(i){throw Ra(i)}if(n&&n.length>0)throw Ra(new Error,MU.ROLE_ALREADY_EXISTS(e.role),ju.CONFLICT,void 0,void 0,!0);e.id||(e.id=z6());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await LU.insert(s),pR.signalUserChange(new SR(process.pid)),e=ER(e),e}a(s9,"addRole");async function i9(e){let t=hR.alterRoleValidation(e);if(t)throw t;e=ER(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await LU.update(r)}catch(s){throw Ra(s)}if(n&&n?.message==="updated 0 of 1 records")throw Ra(new Error,"Invalid role id",ju.BAD_REQUEST,void 0,void 0,!0);return await pR.signalUserChange(new SR(process.pid)),e}a(i9,"alterRole");async function o9(e){let t=hR.dropRoleValidation(e);if(t)throw Ra(new Error,t,ju.BAD_REQUEST,void 0,void 0,!0);let r=new r9(bE.SYSTEM_SCHEMA_NAME,bE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Z6(r));if(n.length===0)throw Ra(new Error,MU.ROLE_NOT_FOUND,ju.NOT_FOUND,void 0,void 0,!0);let s=new t9(bE.SYSTEM_SCHEMA_NAME,bE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await mR(s)),o=!1;if(X6.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Ra(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,ju.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await e9(c),pR.signalUserChange(new SR(process.pid)),`${n[0].role} successfully deleted`}a(o9,"dropRole");async function a9(){return mR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(a9,"listRoles")});var GU=T((CRe,HU)=>{"use strict";var c9=X(),_o=require("joi"),l9=tt(),vU=require("moment"),u9=require("fs-extra"),TR=require("path"),_9=require("lodash"),zu=D(),{LOG_LEVELS:Aa}=D(),d9="YYYY-MM-DD hh:mm:ss",f9=TR.resolve(__dirname,"../logs");HU.exports=function(e){return l9.validateBySchema(e,E9)};var E9=_o.object({from:_o.custom(BU),until:_o.custom(BU),level:_o.valid(Aa.NOTIFY,Aa.FATAL,Aa.ERROR,Aa.WARN,Aa.INFO,Aa.DEBUG,Aa.TRACE),order:_o.valid("asc","desc"),limit:_o.number().min(1),start:_o.number().min(0),log_name:_o.custom(h9)});function BU(e,t){if(vU(e,vU.ISO_8601).format(d9)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(BU,"validateDatetime");function h9(e,t){if(_9.invert(zu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=c9.get(zu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?zu.LOG_NAMES.HDB:e,i=s===zu.LOG_NAMES.INSTALL?TR.join(f9,zu.LOG_NAMES.INSTALL):TR.join(n,s);return u9.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(h9,"validateReadLogPath")});var RR=T((LRe,xU)=>{"use strict";var yE=D(),p9=x(),m9=X(),S9=GU(),gR=require("path"),qU=require("fs-extra"),{once:T9}=require("events"),{handleHDBError:g9,hdb_errors:R9}=oe(),{PACKAGE_ROOT:A9}=D(),O9=gR.join(A9,"logs"),b9=1e3,N9=200;xU.exports=y9;async function y9(e){let t=S9(e);if(t)throw g9(t,t.message,R9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=m9.get(yE.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?yE.LOG_NAMES.HDB:e.log_name,s=n===yE.LOG_NAMES.INSTALL?gR.join(O9,yE.LOG_NAMES.INSTALL):gR.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,_=e.until!==void 0,u=_?new Date(e.until):void 0,d=e.limit===void 0?b9:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,m=0;f==="desc"&&!l&&!u&&(m=Math.max(qU.statSync(s).size-(h+5)*N9,0));let S=qU.createReadStream(s,{start:m});S.on("error",v=>{p9.error(v)});let R=0,g=[],A="",P;S.on("data",v=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;v=A+v;let H=0,j;for(;(j=k.exec(v))&&!S.destroyed;){P&&(P.message=v.slice(H,j.index),U(P));let[z,J,Se]=j,ue=Se.split("] ["),Ee=ue[0],Me=ue[1];ue.splice(0,2),P={timestamp:J,thread:Ee,level:Me,tags:ue,message:""},H=j.index+z.length}A=v.slice(H)}),S.on("end",v=>{S.destroyed||P&&(P.message=A.trim(),U(P))}),S.resume();function U(v){let k,H,j;switch(!0){case(i&&c&&_):k=new Date(v.timestamp),H=new Date(l),j=new Date(u),v.level===o&&k>=H&&k<=j&&R<E?R++:v.level===o&&k>=H&&k<=j&&(fo(v,f,g),R++,R===h&&S.destroy());break;case(i&&c):k=new Date(v.timestamp),H=new Date(l),v.level===o&&k>=H&&R<E?R++:v.level===o&&k>=H&&(fo(v,f,g),R++,R===h&&S.destroy());break;case(i&&_):k=new Date(v.timestamp),j=new Date(u),v.level===o&&k<=j&&R<E?R++:v.level===o&&k<=j&&(fo(v,f,g),R++,R===h&&S.destroy());break;case(c&&_):k=new Date(v.timestamp),H=new Date(l),j=new Date(u),k>=H&&k<=j&&R<E?R++:k>=H&&k<=j&&(fo(v,f,g),R++,R===h&&S.destroy());break;case i:v.level===o&&R<E?R++:v.level===o&&(fo(v,f,g),R++,R===h&&S.destroy());break;case c:k=new Date(v.timestamp),H=new Date(l),k>=H&&R<E?R++:k>=H&&R>=E&&(fo(v,f,g),R++,R===h&&S.destroy());break;case _:k=new Date(v.timestamp),j=new Date(u),k<=j&&R<E?R++:k<=j&&R>=E&&(fo(v,f,g),R++,R===h&&S.destroy());break;default:R<E?R++:(fo(v,f,g),R++,R===h&&S.destroy())}}return a(U,"onLogMessage"),await T9(S,"close"),g}a(y9,"readLog");function fo(e,t,r){t==="desc"?I9(e,r):t==="asc"?w9(e,r):r.push(e)}a(fo,"pushLineToResult");function I9(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(I9,"insertDescending");function w9(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(w9,"insertAscending")});var IE=T((BRe,VU)=>{"use strict";var AR=require("joi"),{string:Ju,boolean:FU,date:C9}=AR.types(),D9=tt(),{validateSchemaExists:MRe,validateTableExists:URe,validateSchemaName:vRe}=ws(),L9=D(),P9=Xe(),kU=X();kU.initSync();var M9=Ju.invalid(kU.get(L9.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(P9.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(),$U={operation:Ju.valid("add_node","update_node","set_node_replication"),node_name:M9,subscriptions:AR.array().items({table:Ju.optional(),schema:Ju.optional(),database:Ju.optional(),subscribe:FU.required(),publish:FU.required().custom(v9),start_time:C9.iso()}).min(1).required()};function U9(e){return D9.validateBySchema(e,AR.object($U))}a(U9,"addUpdateNodeValidator");function v9(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(v9,"checkForFalsy");VU.exports={addUpdateNodeValidator:U9,validation_schema:$U}});var KU=T((GRe,YU)=>{var B9=tt(),H9={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};YU.exports=function(e){return B9.validateObject(e,H9)}});var wE=T((qRe,WU)=>{"use strict";var G9=D().OPERATIONS_ENUM,OR=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=G9.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};WU.exports=OR});var jU=T((FRe,QU)=>{"use strict";var q9={OPERATION:"operation",REFRESH:"refresh"},bR=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},NR=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};QU.exports={JWTTokens:bR,TOKEN_TYPE_ENUM:q9,JWTRSAKeys:NR}});var e_=T(($Re,ZU)=>{"use strict";var Zu=require("jsonwebtoken"),yR=require("fs-extra"),IR=K(),vn=D(),{handleHDBError:vr,hdb_errors:x9}=oe(),{HTTP_STATUS_CODES:Br,AUTHENTICATION_ERROR_MSGS:Hr}=x9,Xu=x(),zU=Lf(),DR=wr(),F9=yr().update,k9=wE(),$9=di(),{UserEventMsg:V9}=is(),Eo=X();Eo.initSync();var wR=require("path"),{JWTTokens:Y9,JWTRSAKeys:K9,TOKEN_TYPE_ENUM:CE}=jU(),W9=Eo.get(vn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Eo.get(vn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",Q9=Eo.get(vn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Eo.get(vn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",DE="RS256",CR;ZU.exports={createTokens:j9,validateOperationToken:J9,refreshOperationToken:z9,validateRefreshToken:XU};async function j9(e){if(IR.isEmpty(e)||typeof e!="object")throw vr(new Error,Hr.INVALID_AUTH_OBJECT,Br.BAD_REQUEST,void 0,void 0,!0);if(IR.isEmpty(e.username))throw vr(new Error,Hr.USERNAME_REQUIRED,Br.BAD_REQUEST,void 0,void 0,!0);if(IR.isEmpty(e.password))throw vr(new Error,Hr.PASSWORD_REQUIRED,Br.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await DR.findAndValidateUser(e.username,e.password),!t)throw vr(new Error,Hr.INVALID_CREDENTIALS,Br.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Xu.error(f),vr(new Error,Hr.INVALID_CREDENTIALS,Br.UNAUTHORIZED,void 0,void 0,!0)}let r=await LE(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await JU(i,r.private_key,r.passphrase),c=await Zu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:Q9,algorithm:DE,subject:CE.REFRESH}),l=zU.hash(c),_=new k9(vn.SYSTEM_SCHEMA_NAME,vn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await F9(_)}catch(f){Xu.error(f),d=f}if(d!==void 0||u.skipped_hashes.length>0)throw vr(new Error,Hr.REFRESH_TOKEN_SAVE_FAILED,Br.INTERNAL_SERVER_ERROR);return $9.signalUserChange(new V9(process.pid)),new Y9(o,c)}a(j9,"createTokens");async function JU(e,t,r){return await Zu.sign(e,{key:t,passphrase:r},{expiresIn:W9,algorithm:DE,subject:CE.OPERATION})}a(JU,"signOperationToken");async function LE(){if(CR===void 0)try{let e=wR.join(Eo.getHdbBasePath(),vn.LICENSE_KEY_DIR_NAME,vn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=wR.join(Eo.getHdbBasePath(),vn.LICENSE_KEY_DIR_NAME,vn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=wR.join(Eo.getHdbBasePath(),vn.LICENSE_KEY_DIR_NAME,vn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await yR.readFile(e)).toString(),s=(await yR.readFile(t)).toString(),i=(await yR.readFile(r)).toString();CR=new K9(i,s,n)}catch(e){throw Xu.error(e),vr(new Error,Hr.NO_ENCRYPTION_KEYS,Br.INTERNAL_SERVER_ERROR)}return CR}a(LE,"getJWTRSAKeys");async function z9(e){if(!e)throw vr(new Error,Hr.INVALID_BODY,Br.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw vr(new Error,Hr.REFRESH_TOKEN_REQUIRED,Br.BAD_REQUEST,void 0,void 0,!0);await XU(e.refresh_token);let t=await LE(),r=await Zu.decode(e.refresh_token);return{operation_token:await JU({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(z9,"refreshOperationToken");async function J9(e){try{let t=await LE(),r=await Zu.verify(e,t.public_key,{algorithms:DE,subject:CE.OPERATION});return await DR.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Xu.warn(t),t.name&&t.name==="TokenExpiredError"?vr(new Error,Hr.TOKEN_EXPIRED,Br.FORBIDDEN):vr(new Error,Hr.INVALID_TOKEN,Br.UNAUTHORIZED)}}a(J9,"validateOperationToken");async function XU(e){let t;try{let r=await LE(),n=await Zu.verify(e,r.public_key,{algorithms:DE,subject:CE.REFRESH});t=await DR.findAndValidateUser(n.username,void 0,!1)}catch(r){throw Xu.warn(r),r.name&&r.name==="TokenExpiredError"?vr(new Error,Hr.TOKEN_EXPIRED,Br.FORBIDDEN):vr(new Error,Hr.INVALID_TOKEN,Br.UNAUTHORIZED)}if(!zU.validate(t.refresh_token,e))throw vr(new Error,Hr.INVALID_TOKEN,Br.UNAUTHORIZED);return t}a(XU,"validateRefreshToken")});var LR=T((KRe,rv)=>{"use strict";var X9=KU(),Bc=require("passport"),Z9=require("passport-local").Strategy,e7=require("passport-http").BasicStrategy,t7=require("util"),r7=wr(),tv=t7.callbackify(r7.findAndValidateUser),YRe=Zr(),n7=D(),ev=e_();Bc.use(new Z9(function(e,t,r){tv(e,t,r)}));Bc.use(new e7(function(e,t,r){tv(e,t,r)}));Bc.serializeUser(function(e,t){t(null,e)});Bc.deserializeUser(function(e,t){t(null,e)});function s7(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":Bc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===n7.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?ev.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):ev.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Bc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(s7,"authorize");function i7(e,t){let r=X9(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);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]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(i7,"checkPermissions");rv.exports={authorize:s7,checkPermissions:i7}});var Hc=T((QRe,nv)=>{"use strict";var PR=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},MR=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};nv.exports={Node:PR,NodeSubscription:MR}});var iv=T((zRe,sv)=>{"use strict";var o7=D().OPERATIONS_ENUM,UR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=o7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};sv.exports=UR});var t_=T((XRe,ov)=>{"use strict";var vR=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},BR=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};ov.exports={RemotePayloadObject:vR,RemotePayloadSubscription:BR}});var cv=T((eAe,av)=>{"use strict";var HR=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};av.exports=HR});var _v=T((iAe,uv)=>{"use strict";var a7=cv(),rAe=at(),lv=Ve(),c7=x(),{getSchemaPath:nAe,getTransactionAuditStorePath:sAe}=je(),{getDatabases:l7}=(ge(),ie(ke));uv.exports=u7;async function u7(e){let t=new a7;try{let r=l7()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await lv.environmentDataSize(schema_path,e.name),o=await lv.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){c7.warn(`unable to stat table dbi due to ${r}`)}return t}a(u7,"lmdbGetTableSize")});var fv=T((aAe,dv)=>{"use strict";var GR=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};dv.exports=GR});var mi=T((dAe,Sv)=>{"use strict";var _7=require("fs-extra"),d7=require("path"),_r=require("systeminformation"),ho=x(),Ev=pt(),lAe=Xe(),ME=D(),f7=_v(),E7=_i(),{getThreadInfo:hv}=et(),QR=X();QR.initSync();var h7=fv(),{openEnvironment:uAe}=Ve(),{getSchemaPath:_Ae}=je(),{database:p7,databases:pv}=(ge(),ie(ke)),PE;Sv.exports={getHDBProcessInfo:kR,getNetworkInfo:VR,getDiskInfo:$R,getMemoryInfo:FR,getCPUInfo:xR,getTimeInfo:qR,getSystemInformation:YR,systemInformation:m7,getTableSize:KR,getMetrics:WR};function qR(){return _r.time()}a(qR,"getTimeInfo");async function xR(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:_,...u}=await _r.cpu();u.cpu_speed=await _r.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:m,raw_currentload_user:S,cpus:R,...g}=await _r.currentLoad();return g.cpus=[],R.forEach(A=>{let{raw_load:P,raw_load_idle:U,raw_load_irq:v,raw_load_nice:k,raw_load_system:H,raw_load_user:j,...z}=A;g.cpus.push(z)}),u.current_load=g,u}catch(e){return ho.error(`error in getCPUInfo: ${e}`),{}}}a(xR,"getCPUInfo");async function FR(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await _r.mem();return Object.assign(s,process.memoryUsage())}catch(e){return ho.error(`error in getMemoryInfo: ${e}`),{}}}a(FR,"getMemoryInfo");async function kR(){let e={core:[],clustering:[]};try{let t=await _r.processes(),r;try{r=Number.parseInt(await _7.readFile(d7.join(QR.get(ME.CONFIG_PARAMS.ROOTPATH),ME.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===ME.NODE_ERROR_CODES.ENOENT)ho.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return ho.error(`error in getHDBProcessInfo: ${t}`),e}}a(kR,"getHDBProcessInfo");async function $R(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await _r.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,..._}=await _r.fsStats();return e.read_write=_,e.size=await _r.fsSize(),e}catch(t){return ho.error(`error in getDiskInfo: ${t}`),e}}a($R,"getDiskInfo");async function VR(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await _r.networkInterfaceDefault(),e.latency=await _r.inetChecksite("google.com"),(await _r.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:_,ieee8021xState:u,carrier_changes:d,...f}=n;e.interfaces.push(f)}),(await _r.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return ho.error(`error in getNetworkInfo: ${t}`),e}}a(VR,"getNetworkInfo");async function YR(){if(PE!==void 0)return PE;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await _r.osInfo();e=c;let l=await _r.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,PE=e,PE}catch(t){return ho.error(`error in getSystemInformation: ${t}`),e}}a(YR,"getSystemInformation");async function KR(){let e=[],t=await E7.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await f7(n));return e}a(KR,"getTableSize");async function WR(){let e={};for(let t in pv){let r=e[t]={};for(let n in pv[t])try{let s=p7({database:t,table:n}),i=s.getStats();i.readers=s.readerList().split(/\n\s+/).slice(1).map(o=>{let[c,l,_]=o.trim().split(" ");return{pid:c,thread:l,txnid:_}}),r[n]=i}catch(s){ho.notify(`Error getting stats for table ${n}: ${s}`)}}return e}a(WR,"getMetrics");async function mv(){if(QR.get(ME.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await Ev.getNATSReferences(),t=await Ev.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(mv,"getNatsStreamInfo");async function m7(e){let t=new h7;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await YR(),t.time=qR(),t.cpu=await xR(),t.memory=await FR(),t.disk=await $R(),t.network=await VR(),t.harperdb_processes=await kR(),t.table_size=await KR(),t.metrics=await WR(),t.threads=await hv(),t.replication=await mv(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await YR();break;case"time":t.time=qR();break;case"cpu":t.cpu=await xR();break;case"memory":t.memory=await FR();break;case"disk":t.disk=await $R();break;case"network":t.network=await VR();break;case"harperdb_processes":t.harperdb_processes=await kR();break;case"table_size":t.table_size=await KR();break;case"database_metrics":case"metrics":t.metrics=await WR();break;case"threads":t.threads=await hv();break;case"replication":t.replication=await mv();break;default:break}return t}a(m7,"systemInformation")});var Si=T((EAe,Tv)=>{"use strict";Tv.exports={version:S7,printVersion:T7};var UE=ha();function S7(){if(UE)return UE.version}a(S7,"version");function T7(){UE&&console.log(`HarperDB Version ${UE.version}`)}a(T7,"printVersion")});var Ti=T((SAe,Ov)=>{"use strict";var g7=yr(),jR=K(),R7=require("util"),Oa=D(),gv=X();gv.initSync();var A7=LR(),Rv=ir(),{Node:pAe,NodeSubscription:mAe}=Hc(),O7=bc(),b7=iv(),{RemotePayloadObject:N7,RemotePayloadSubscription:y7}=t_(),{handleHDBError:I7,hdb_errors:w7}=oe(),{HTTP_STATUS_CODES:C7,HDB_ERROR_MSGS:D7}=w7,L7=os(),P7=mi(),M7=Si(),{getDatabases:U7}=(ge(),ie(ke)),v7=R7.promisify(A7.authorize),B7=Rv.searchByHash,H7=Rv.searchByValue;Ov.exports={authHeaderToUser:G7,isEmpty:q7,getNodeRecord:x7,upsertNodeRecord:F7,buildNodePayloads:k7,checkClusteringEnabled:$7,getAllNodeRecords:V7,getSystemInfo:Y7,reverseSubscription:Av};async function G7(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await v7(t,null),e}a(G7,"authHeaderToUser");function q7(e){return e==null}a(q7,"isEmpty");async function x7(e){let t=new O7(Oa.SYSTEM_SCHEMA_NAME,Oa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return B7(t)}a(x7,"getNodeRecord");async function F7(e){let t=new b7(Oa.SYSTEM_SCHEMA_NAME,Oa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return g7.upsert(t)}a(F7,"upsertNodeRecord");function Av(e){if(jR.isEmpty(e.subscribe)||jR.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(Av,"reverseSubscription");function k7(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:_}=c,u=jR.getTableHashAttribute(l,_),{subscribe:d,publish:f}=Av(c),E=U7()[l]?.[_],h=new y7(l,_,u,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new N7(r,t,s,n)}a(k7,"buildNodePayloads");function $7(){if(!gv.get(Oa.CONFIG_PARAMS.CLUSTERING_ENABLED))throw I7(new Error,D7.CLUSTERING_NOT_ENABLED,C7.BAD_REQUEST,void 0,void 0,!0)}a($7,"checkClusteringEnabled");async function V7(){let e=new L7(Oa.SYSTEM_SCHEMA_NAME,Oa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await H7(e))}a(V7,"getAllNodeRecords");async function Y7(){let e=await P7.getSystemInformation();return{hdb_version:M7.version(),node_version:e.node_version,platform:e.platform}}a(Y7,"getSystemInfo")});var zR=T((gAe,Lv)=>{"use strict";var vE=pt(),bv=K(),Nv=Xe(),yv=D(),BE=x(),Iv=RE(),K7=wu(),{RemotePayloadObject:W7}=t_(),{handleHDBError:wv,hdb_errors:Q7}=oe(),{HTTP_STATUS_CODES:Cv}=Q7,{NodeSubscription:Dv}=Hc();Lv.exports=j7;async function j7(e,t){let r;try{r=await vE.request(`${t}.${Nv.REQUEST_SUFFIX}`,new W7(yv.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),BE.trace("Response from remote describe all request:",r)}catch(o){BE.error(`addNode received error from describe all request to remote node: ${o}`);let c=vE.requestErrorHandler(o,"add_node",t);throw wv(new Error,c,Cv.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===Nv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw wv(new Error,o,Cv.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===yv.SYSTEM_SCHEMA_NAME){await vE.createLocalTableStream(l,c);let h=new Dv(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=bv.doesSchemaExist(l),u=n[l]!==void 0,d=c?bv.doesTableExist(l,c):!0,f=c?n?.[l]?.[c]!==void 0:!0;if(!_&&!u||!d&&!f){s.push(o);continue}if(!_&&u&&(BE.trace(`addNode creating schema: ${l}`),await Iv.createSchema({operation:"create_schema",schema:l})),!d&&f){BE.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new K7(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await Iv.createTable(h)}await vE.createLocalTableStream(l,c);let E=new Dv(l,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(j7,"reviewSubscriptions")});var s_=T((AAe,Uv)=>{"use strict";var{handleHDBError:HE,hdb_errors:z7}=oe(),{HTTP_STATUS_CODES:GE}=z7,{addUpdateNodeValidator:J7}=IE(),qE=x(),Mv=D(),Pv=Xe(),X7=K(),r_=pt(),n_=Ti(),Z7=X(),eee=zR(),{Node:tee,NodeSubscription:ree}=Hc(),{broadcast:nee}=et(),see="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",iee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",oee=Z7.get(Mv.CONFIG_PARAMS.CLUSTERING_NODENAME);Uv.exports=aee;async function aee(e,t=!1){qE.trace("addNode called with:",e),n_.checkClusteringEnabled();let r=J7(e);if(r)throw HE(r,r.message,GE.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await n_.getNodeRecord(n);if(!X7.isEmptyOrZeroLength(d))throw HE(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,GE.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await eee(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=see,o;let c=n_.buildNodePayloads(s,oee,Mv.OPERATIONS_ENUM.ADD_NODE,await n_.getSystemInfo()),l=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new ree(E.schema,E.table,E.publish,E.subscribe))}qE.trace("addNode sending remote payload:",c);let _;try{_=await r_.request(`${n}.${Pv.REQUEST_SUFFIX}`,c)}catch(d){qE.error(`addNode received error from request: ${d}`);for(let E=0,h=s.length;E<h;E++){let m=s[E];m.publish=!1,m.subscribe=!1,await r_.updateRemoteConsumer(m,n)}let f=r_.requestErrorHandler(d,"add_node",n);throw HE(new Error,f,GE.INTERNAL_SERVER_ERROR,"error",f)}if(_.status===Pv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw HE(new Error,d,GE.INTERNAL_SERVER_ERROR,"error",d)}qE.trace(_);for(let d=0,f=s.length;d<f;d++){let E=s[d];await r_.updateRemoteConsumer(E,n),E.subscribe===!0&&await r_.updateConsumerIterator(E.schema,E.table,n,"start")}let u=new tee(n,l,_.system_info);return await n_.upsertNodeRecord(u),nee({type:"nats_update"}),i.length>0?o.message=iee:o.message=`Successfully added '${n}' to manifest`,o}a(aee,"addNode")});var ZR=T((NAe,Hv)=>{"use strict";var{handleHDBError:JR,hdb_errors:cee}=oe(),{HTTP_STATUS_CODES:XR}=cee,{addUpdateNodeValidator:lee}=IE(),i_=x(),Bv=D(),vv=Xe(),bAe=K(),o_=pt(),a_=Ti(),uee=X(),{cloneDeep:_ee}=require("lodash"),dee=zR(),{Node:fee,NodeSubscription:Eee}=Hc(),{broadcast:hee}=et(),pee="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",mee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",See=uee.get(Bv.CONFIG_PARAMS.CLUSTERING_NODENAME);Hv.exports=Tee;async function Tee(e){i_.trace("updateNode called with:",e),a_.checkClusteringEnabled();let t=lee(e);if(t)throw JR(t,t.message,XR.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await a_.getNodeRecord(r);s.length>0&&(n=_ee(s));let{added:i,skipped:o}=await dee(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=pee,c;let l=a_.buildNodePayloads(i,See,Bv.OPERATIONS_ENUM.UPDATE_NODE,await a_.getSystemInfo());for(let u=0,d=i.length;u<d;u++){let f=i[u];i_.trace(`updateNode updating work stream for node: ${r} subscription:`,f),i[u].start_time===void 0&&delete i[u].start_time}i_.trace("updateNode sending remote payload:",l);let _;try{_=await o_.request(`${r}.${vv.REQUEST_SUFFIX}`,l)}catch(u){i_.error(`updateNode received error from request: ${u}`);let d=o_.requestErrorHandler(u,"update_node",r);throw JR(new Error,d,XR.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===vv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw JR(new Error,u,XR.INTERNAL_SERVER_ERROR,"error",u)}i_.trace(_);for(let u=0,d=i.length;u<d;u++){let f=i[u];await o_.updateRemoteConsumer(f,r),f.subscribe===!0?await o_.updateConsumerIterator(f.schema,f.table,r,"start"):await o_.updateConsumerIterator(f.schema,f.table,r,"stop")}return n||(n=[new fee(r,[],_.system_info)]),await gee(n[0],i,_.system_info),o.length>0?c.message=mee:c.message=`Successfully updated '${r}'`,c}a(Tee,"updateNode");async function gee(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,_=e.subscriptions.length;l<_;l++){let u=n.subscriptions[l];if(u.schema===o.schema&&u.table===o.table){u.publish=o.publish,u.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new Eee(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await a_.upsertNodeRecord(n),hee({type:"nats_update"})}a(gee,"updateNodeTable")});var kv=T((IAe,Fv)=>{"use strict";var xv=require("joi"),{string:Gv}=xv.types(),Ree=tt(),qv=D(),Aee=X(),Oee=Xe();Fv.exports=bee;function bee(e){let t=Gv.invalid(Aee.get(qv.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Oee.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=xv.object({operation:Gv.valid(qv.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Ree.validateBySchema(e,r)}a(bee,"removeNodeValidator")});var FE=T((CAe,Wv)=>{"use strict";var{handleHDBError:$v,hdb_errors:Nee}=oe(),{HTTP_STATUS_CODES:Vv}=Nee,yee=kv(),c_=x(),Yv=Ti(),Iee=K(),xE=D(),Kv=Xe(),eA=pt(),wee=X(),{RemotePayloadObject:Cee}=t_(),{NodeSubscription:Dee}=Hc(),Lee=Iu(),Pee=na(),{broadcast:Mee}=et(),Uee=wee.get(xE.CONFIG_PARAMS.CLUSTERING_NODENAME);Wv.exports=vee;async function vee(e){c_.trace("removeNode called with:",e),Yv.checkClusteringEnabled();let t=yee(e);if(t)throw $v(t,t.message,Vv.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await Yv.getNodeRecord(r);if(Iee.isEmptyOrZeroLength(n))throw $v(new Error,`Node '${r}' was not found.`,Vv.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Cee(xE.OPERATIONS_ENUM.REMOVE_NODE,Uee,[]),i,o=!1;for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];u.subscribe===!0&&await eA.updateConsumerIterator(u.schema,u.table,r,"stop");try{await eA.updateRemoteConsumer(new Dee(u.schema,u.table,!1,!1),r)}catch(d){c_.error(d)}}try{i=await eA.request(`${r}.${Kv.REQUEST_SUFFIX}`,s),c_.trace("Remove node reply from remote node:",r,i)}catch(l){c_.error("removeNode received error from request:",l),o=!0}let c=new Lee(xE.SYSTEM_SCHEMA_NAME,xE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Pee.deleteRecord(c),Mee({type:"nats_update"}),i?.status===Kv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(c_.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(vee,"removeNode")});var zv=T((LAe,jv)=>{"use strict";var Qv=require("joi"),{string:Bee,array:Hee}=Qv.types(),Gee=tt(),qee=IE();jv.exports=xee;function xee(e){let t=Qv.object({operation:Bee.valid("configure_cluster").required(),connections:Hee.items(qee.validation_schema).required()});return Gee.validateBySchema(e,t)}a(xee,"configureClusterValidator")});var $E=T((MAe,t0)=>{"use strict";var Fee=D(),kE=x(),kee=K(),$ee=FE(),Vee=s_(),Jv=Ti(),Yee=zv(),{handleHDBError:Xv,hdb_errors:Kee}=oe(),{HTTP_STATUS_CODES:Zv}=Kee,Wee="Configure cluster complete.",Qee="Failed to configure the cluster. Check the logs for more details.",jee="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";t0.exports=zee;async function zee(e){kE.trace("configure cluster called with:",e),Jv.checkClusteringEnabled();let t=Yee(e);if(t)throw Xv(t,t.message,Zv.BAD_REQUEST,void 0,void 0,!0);let r=await Jv.getAllNodeRecords(),n=[];for(let u=0,d=r.length;u<d;u++){let f=await e0($ee,{operation:Fee.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[u].name},r[u].name);n.push(f)}kE.trace("All results from configure_cluster remove node:",n);let s=[],i=e.connections.length;for(let u=0;u<i;u++){let d=e.connections[u],f=await e0(Vee,d,d.node_name);s.push(f)}kE.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,_=n.concat(s);for(let u=0,d=_.length;u<d;u++){let f=_[u];f.status==="rejected"&&(kE.error(f),o.includes(f.node_name)||o.push(f.node_name)),(f?.result?.message?.includes?.("Successfully")||f?.result?.includes?.("Successfully"))&&(l=!0),!(typeof f.result=="string"&&f.result.includes("Successfully removed")||f.status==="rejected")&&c.push({node_name:f?.node_name,subscriptions:f?.result})}if(kee.isEmptyOrZeroLength(o))return{message:Wee,connections:c};if(l)return{message:jee,failed_nodes:o,connections:c};throw Xv(new Error,Qee,Zv.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(zee,"configureCluster");async function e0(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(e0,"functionWrapper")});var i0=T((vAe,s0)=>{"use strict";var l_=require("joi"),Jee=tt(),{validateSchemaExists:r0,validateTableExists:Xee,validateSchemaName:n0}=ws(),Zee=l_.object({operation:l_.string().valid("purge_stream"),schema:l_.string().custom(r0).custom(n0).optional(),database:l_.string().custom(r0).custom(n0).optional(),table:l_.string().custom(Xee).required()});function ete(e){return Jee.validateBySchema(e,Zee)}a(ete,"purgeStreamValidator");s0.exports=ete});var tA=T((HAe,o0)=>{"use strict";var{handleHDBError:tte,hdb_errors:rte}=oe(),{HTTP_STATUS_CODES:nte}=rte,ste=i0(),ite=pt(),ote=Ti();o0.exports=ate;async function ate(e){e.schema=e.schema??e.database;let t=ste(e);if(t)throw tte(t,t.message,nte.BAD_REQUEST,void 0,void 0,!0);ote.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await ite.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(ate,"purgeStream")});var YE=T((qAe,d0)=>{"use strict";var nA=Ti(),cte=pt(),l0=X(),VE=D(),ba=Xe(),lte=K(),rA=x(),{RemotePayloadObject:ute}=t_(),{ErrorCode:a0}=require("nats"),c0=l0.get(VE.CONFIG_PARAMS.CLUSTERING_ENABLED),u0=l0.get(VE.CONFIG_PARAMS.CLUSTERING_NODENAME);d0.exports={clusterStatus:_te,buildNodeStatus:_0};async function _te(){let e={node_name:u0,is_enabled:c0,connections:[]};if(!c0)return e;let t=await nA.getAllNodeRecords();if(lte.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(_0(t[n],e.connections));return await Promise.allSettled(r),e}a(_te,"clusterStatus");async function _0(e,t){let r=e.name,n=new ute(VE.OPERATIONS_ENUM.CLUSTER_STATUS,u0,void 0,await nA.getSystemInfo()),s,i,o=ba.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await cte.request(ba.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===ba.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ba.CLUSTER_STATUS_STATUSES.CLOSED,rA.error(`Error getting node status from ${r} `,s))}catch(l){rA.warn(`Error getting node status from ${r}`,l),l.code===a0.NoResponders?o=ba.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===a0.Timeout?o=ba.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ba.CLUSTER_STATUS_STATUSES.CLOSED}let c=new dte(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==VE.PRE_4_0_0_VERSION&&await nA.upsertNodeRecord(l)}catch(l){rA.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(_0,"buildNodeStatus");function dte(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(dte,"NodeStatusObject")});var WE=T((FAe,f0)=>{"use strict";var{handleHDBError:fte,hdb_errors:Ete}=oe(),{HTTP_STATUS_CODES:hte}=Ete,pte=pt(),mte=Ti(),sA=K(),KE=require("joi"),Ste=tt(),Tte=2e3,gte=KE.object({timeout:KE.number().min(1),connected_nodes:KE.boolean(),routes:KE.boolean()});f0.exports=Rte;async function Rte(e){mte.checkClusteringEnabled();let t=Ste.validateBySchema(e,gte);if(t)throw fte(t,t.message,hte.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||sA.autoCastBoolean(n),o=s===void 0||sA.autoCastBoolean(s),c={nodes:[]},l=await pte.getServerList(r??Tte),_={};if(i)for(let u=0,d=l.length;u<d;u++){let f=l[u].statsz;f&&(_[l[u].server.name]=f.routes)}for(let u=0,d=l.length;u<d;u++){if(l[u].statsz)continue;let f=l[u].server,E=l[u].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:l[u].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(m=>{h.connected_nodes.includes(m.name.slice(0,-4))||h.connected_nodes.push(m.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(m=>({host:m.split(":")[0],port:sA.autoCast(m.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Rte,"clusterNetwork")});var m0=T(($Ae,p0)=>{"use strict";var iA=require("joi"),E0=tt(),{route_constraints:h0}=bT();p0.exports={setRoutesValidator:Ate,deleteRoutesValidator:Ote};function Ate(e){let t=iA.object({server:iA.valid("hub","leaf").required(),routes:h0.required()});return E0.validateBySchema(e,t)}a(Ate,"setRoutesValidator");function Ote(e){let t=iA.object({routes:h0.required()});return E0.validateBySchema(e,t)}a(Ote,"deleteRoutesValidator")});var jE=T((YAe,R0)=>{"use strict";var Na=ut(),oA=K(),QE=D(),S0=m0(),{handleHDBError:T0,hdb_errors:bte}=oe(),{HTTP_STATUS_CODES:g0}=bte,Nte="cluster routes successfully set",yte="cluster routes successfully deleted";R0.exports={setRoutes:Ite,getRoutes:wte,deleteRoutes:Cte};function Ite(e){let t=S0.setRoutesValidator(e);if(t)throw T0(t,t.message,g0.BAD_REQUEST,void 0,void 0,!0);let r=Na.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,l=e.routes.length;c<l;c++){let _=e.routes[c];_.port=oA.autoCast(_.port);let u=n.some(f=>f.host===_.host&&f.port===_.port),d=s.some(f=>f.host===_.host&&f.port===_.port);u||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?Na.updateConfigValue(QE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):Na.updateConfigValue(QE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:Nte,set:o,skipped:i}}a(Ite,"setRoutes");function wte(){let e=Na.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(wte,"getRoutes");function Cte(e){let t=S0.deleteRoutesValidator(e);if(t)throw T0(t,t.message,g0.BAD_REQUEST,void 0,void 0,!0);let r=Na.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,l=!1;for(let _=0,u=e.routes.length;_<u;_++){let d=e.routes[_],f=!1;for(let E=0,h=n.length;E<h;E++){let m=n[E];if(d.host===m.host&&d.port===m.port){n.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,m=s.length;h<m;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),l=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(n=oA.isEmptyOrZeroLength(n)?null:n,Na.updateConfigValue(QE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=oA.isEmptyOrZeroLength(s)?null:s,Na.updateConfigValue(QE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:yte,deleted:i,skipped:o}}a(Cte,"deleteRoutes")});var O0=T((WAe,A0)=>{"use strict";var u_=require("alasql"),ya=require("recursive-iterator"),_s=x(),Dte=K(),__=D(),aA=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,Pte(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(s=>__.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!__.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][__.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Lte(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let l=this.affected_attributes.get(i).get(o).filter(_=>!__.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new u_.yy.Column({columnid:_});s.tableid&&(u.tableid=s.tableid),this.ast.columns.push(u),l.includes(_)||l.push(_)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function Lte(e){return e.filter(t=>t[__.PERMS_CRUD_ENUM.READ])}a(Lte,"filterReadRestrictedAttrs");function Pte(e,t,r,n,s){Mte(e,t,r,n,s)}a(Pte,"interpretAST");function d_(e,t,r,n,s){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),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(d_,"addSchemaTableToMap");function Mte(e,t,r,n,s){if(!e){_s.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof u_.yy.Insert?Hte(e,t,r):e instanceof u_.yy.Select?Ute(e,t,r,n,s):e instanceof u_.yy.Update?vte(e,t,r):e instanceof u_.yy.Delete?Bte(e,t,r):_s.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Mte,"getRecordAttributesAST");function Ute(e,t,r,n,s){if(!e){_s.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Dte.isEmptyOrZeroLength(i)){_s.error("No schema specified");return}e.from.forEach(c=>{d_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),d_(c.table,t,r,n,s)});let o=new ya(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,_=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{_s.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(c.columnid)<0&&t.get(_).get(l).push(c.columnid)}if(e.where){let c=new ya(e.where),l=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid?_.tableid:l;if(!t.get(i).has(u))if(r.has(u))u=r.get(u);else{_s.info(`table specified as ${u} not found.`);continue}t.get(i).get(u).indexOf(_.columnid)<0&&t.get(i).get(u).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new ya(c.on);for(let{node:_}of l)if(_&&_.columnid){let u=_.tableid,d=s.get(u);if(!t.get(d).has(u))if(r.has(u))u=r.get(u);else{_s.info(`table specified as ${u} not found.`);continue}t.get(d).get(u).indexOf(_.columnid)<0&&t.get(d).get(u).push(_.columnid)}}),e.order){let c=new ya(e.order);for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid,u=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{_s.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(l.columnid)<0&&t.get(u).get(_).push(l.columnid)}}}a(Ute,"getSelectAttributes");function vte(e,t,r){if(!e){_s.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new ya(e.columns),s=e.table.databaseid;d_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&cA(e.table.tableid,s,i.columnid,t,r)}a(vte,"getUpdateAttributes");function Bte(e,t,r){if(!e){_s.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new ya(e.where),s=e.table.databaseid;d_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&cA(e.table.tableid,s,i.columnid,t,r)}a(Bte,"getDeleteAttributes");function Hte(e,t,r){if(!e){_s.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new ya(e.columns),s=e.into.databaseid;d_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&cA(e.into.tableid,s,i.columnid,t,r)}a(Hte,"getInsertAttributes");function cA(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(cA,"pushAttribute");A0.exports=aA});var JE=T((jAe,I0)=>{var zE=aa(),b0=require("chalk"),dn=x(),N0=require("prompt"),{promisify:Gte}=require("util"),lA=D(),qte=require("fs-extra"),xte=require("path"),Fte=K(),kte=Si(),y0=X();y0.initSync();var $te=require("moment"),Vte=Gte(N0.get),Yte=xte.join(y0.getHdbBasePath(),lA.LICENSE_KEY_DIR_NAME,lA.LICENSE_FILE_NAME,lA.LICENSE_FILE_NAME);I0.exports={getFingerprint:Wte,setLicense:Kte,parseLicense:uA,register:Qte,getRegistrationInfo:zte};async function Kte(e){if(e&&e.key&&e.company){try{dn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await uA(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw dn.error(r),dn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Kte,"setLicense");async function Wte(){let e={};try{e=await zE.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw dn.error(r),dn.error(t),new Error(r)}return e}a(Wte,"getFingerprint");async function uA(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");dn.info("Validating license input...");let r=zE.validateLicense(e,t);if(dn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(dn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(dn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{dn.info("writing license to disk"),await qte.writeFile(Yte,JSON.stringify({license_key:e,company:t}))}catch(n){throw dn.error("Failed to write License"),n}return"Registration successful."}a(uA,"parseLicense");async function Qte(){let e=await jte();return uA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Qte,"register");async function jte(){let e=await zE.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:b0.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:b0.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{N0.start()}catch(n){dn.error(n)}let r;try{r=await Vte(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(jte,"promptForRegistration");async function zte(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await zE.getLicense()}catch(r){throw dn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Fte.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=kte.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=$te.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(zte,"getRegistrationInfo")});var C0=T((JAe,w0)=>{"use strict";var Jte=Xe(),_A=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+Jte.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:d,routes:f,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};w0.exports=_A});var P0=T((ZAe,L0)=>{"use strict";var D0=Xe(),dA=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d){this.port=t,d===null&&(d=void 0),this.server_name=r+D0.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+D0.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:u,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:l,jetstream:"enabled"}},this.system_account="SYS"}};L0.exports=dA});var U0=T((tOe,M0)=>{"use strict";var fA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};M0.exports=fA});var B0=T((nOe,v0)=>{"use strict";var Xte=Xe(),EA=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Xte.SERVER_SUFFIX.ADMIN,this.password=r}};v0.exports=EA});var rh=T((iOe,q0)=>{"use strict";var Gc=require("path"),eh=require("fs-extra"),Zte=C0(),ere=P0(),tre=U0(),rre=B0(),hA=wr(),xc=K(),Gr=ut(),ZE=D(),f_=Xe(),{CONFIG_PARAMS:St}=ZE,Fc=x(),E_=X(),H0=ui(),pA=pt(),qc="clustering",nre=1e4,G0=50;q0.exports={generateNatsConfig:ire,removeNatsConfig:ore,getHubConfigPath:sre};function sre(){let e=E_.get(St.ROOTPATH);return Gc.join(e,qc,f_.NATS_CONFIG_FILES.HUB_SERVER)}a(sre,"getHubConfigPath");async function ire(e=!1,t=void 0){E_.initSync();let r=E_.get(St.ROOTPATH),n=Gc.join(r,qc,f_.PID_FILES.HUB),s=Gc.join(r,qc,f_.PID_FILES.LEAF),i=Gr.getConfigFromFile(St.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Gc.join(r,qc,f_.NATS_CONFIG_FILES.HUB_SERVER),c=Gc.join(r,qc,f_.NATS_CONFIG_FILES.LEAF_SERVER),l=Gr.getConfigFromFile(St.CLUSTERING_TLS_CERTIFICATE),_=Gr.getConfigFromFile(St.CLUSTERING_TLS_PRIVATEKEY),u=Gr.getConfigFromFile(St.CLUSTERING_TLS_CERT_AUTH),d=Gr.getConfigFromFile(St.CLUSTERING_TLS_INSECURE),f=Gr.getConfigFromFile(St.CLUSTERING_TLS_VERIFY),E=Gr.getConfigFromFile(St.CLUSTERING_NODENAME),h=Gr.getConfigFromFile(St.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await pA.checkNATSServerInstalled()||th("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await hA.listUsers(),S=Gr.getConfigFromFile(St.CLUSTERING_USER),R=await hA.getClusterUser();(xc.isEmpty(R)||R.active!==!0)&&th(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await XE(St.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await XE(St.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await XE(St.CLUSTERING_HUBSERVER_NETWORK_PORT),await XE(St.CLUSTERING_LEAFSERVER_NETWORK_PORT));let g=[],A=[];for(let[z,J]of m.entries())J.role.role===ZE.ROLE_TYPES_ENUM.CLUSTER_USER&&J.active&&(g.push(new rre(J.username,H0.decrypt(J.hash))),A.push(new tre(J.username,H0.decrypt(J.hash))));let P=[],{hub_routes:U}=Gr.getClusteringRoutes();if(!xc.isEmptyOrZeroLength(U))for(let z of U)P.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${z.host}:${z.port}`);let v=new Zte(Gr.getConfigFromFile(St.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,l,_,u,d,f,h,Gr.getConfigFromFile(St.CLUSTERING_HUBSERVER_CLUSTER_NAME),Gr.getConfigFromFile(St.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),P,g,A);u==null&&(delete v.tls.ca_file,delete v.leafnodes.tls.ca_file),t=xc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===ZE.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await eh.writeJson(o,v),Fc.trace(`Hub server config written to ${o}`));let k=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,H=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,j=new ere(Gr.getConfigFromFile(St.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[k],[H],g,A,l,_,u,d);u==null&&delete j.tls.ca_file,(t===void 0||t===ZE.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await eh.writeJson(c,j),Fc.trace(`Leaf server config written to ${c}`))}a(ire,"generateNatsConfig");async function XE(e){let t=E_.get(e);return xc.isEmpty(t)&&th(`port undefined for '${e}'`),await xc.isPortTaken(t)&&th(`'${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(XE,"isPortAvailable");function th(e){let t=`Error generating clustering config: ${e}`;Fc.error(t),console.error(t),process.exit(1)}a(th,"generateNatsConfigError");async function ore(e){let{port:t,config_file:r}=pA.getServerConfig(e),{username:n,decrypt_hash:s}=await hA.getClusterUser(),i=0,o=2e3;for(;i<G0;){try{let u=await pA.createConnection(t,n,s,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Fc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=G0)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let _=o*(i*2);_>3e4&&Fc.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await xc.async_set_timeout(_)}let c="0".repeat(nre),l=Gc.join(E_.get(St.ROOTPATH),qc,r);await eh.writeFile(l,c),await eh.remove(l),Fc.notify(e,"started.")}a(ore,"removeNatsConfig")});var Y0=T((aOe,V0)=>{"use strict";var fn=X(),are=aa(),me=D(),h_=Xe(),gi=require("path"),{PACKAGE_ROOT:sh}=D(),x0=X(),nh=K(),kc="/dev/null",cre=gi.join(sh,"launchServiceScripts"),F0=gi.join(sh,"utility/scripts"),lre=gi.join(F0,me.HDB_RESTART_SCRIPT),k0=gi.resolve(sh,"dependencies",`${process.platform}-${process.arch}`,h_.NATS_BINARY_NAME);function $0(){let t=are.licenseSearch().ram_allocation||me.RAM_ALLOCATION_ENUM.DEFAULT,r=me.MEM_SETTING_KEY+t,n={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return nh.noBootFile()&&(n[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=nh.getEnvCliRootPath()),{name:me.PROCESS_DESCRIPTORS.HDB,script:me.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:sh}}a($0,"generateMainServerConfig");var ure=9930;function _re(){fn.initSync(!0);let e=fn.get(me.CONFIG_PARAMS.ROOTPATH),t=gi.join(e,"clustering",h_.NATS_CONFIG_FILES.HUB_SERVER),r=gi.join(fn.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=x0.get(me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=h_.LOG_LEVEL_FLAGS[fn.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==ure?"-"+n:""),script:k0,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return fn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=kc,i.error_file=kc),i}a(_re,"generateNatsHubServerConfig");var dre=9940;function fre(){fn.initSync(!0);let e=fn.get(me.CONFIG_PARAMS.ROOTPATH),t=gi.join(e,"clustering",h_.NATS_CONFIG_FILES.LEAF_SERVER),r=gi.join(fn.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=x0.get(me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=h_.LOG_LEVEL_FLAGS[fn.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==dre?"-"+n:""),script:k0,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return fn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=kc,i.error_file=kc),i}a(fre,"generateNatsLeafServerConfig");function Ere(){fn.initSync();let e=gi.join(fn.get(me.CONFIG_PARAMS.LOGGING_ROOT),me.LOG_NAMES.HDB),t={name:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:me.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:cre,autorestart:!1};return fn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=kc,t.error_file=kc),t}a(Ere,"generateClusteringUpgradeV4ServiceConfig");function hre(){let e={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.RESTART_HDB};return nh.noBootFile()&&(e[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=nh.getEnvCliRootPath()),{...{name:me.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:F0},script:lre}}a(hre,"generateRestart");function pre(){return{apps:[$0()]}}a(pre,"generateAllServiceConfigs");V0.exports={generateAllServiceConfigs:pre,generateMainServerConfig:$0,generateRestart:hre,generateNatsHubServerConfig:_re,generateNatsLeafServerConfig:fre,generateClusteringUpgradeV4ServiceConfig:Ere}});var $c=T((uOe,sB)=>{"use strict";var He=D(),mre=K(),Ai=rh(),ih=pt(),Ri=Xe(),po=Y0(),oh=X(),mo=x(),Sre=Ti(),{startWorker:K0,onMessageFromWorkers:Tre}=et(),gre=mi(),lOe=require("util"),Rre=require("child_process"),Are=require("fs"),{execFile:Ore}=Rre,Ce;sB.exports={enterPM2Mode:bre,start:So,stop:mA,reload:Q0,restart:j0,list:SA,describe:J0,connect:Oi,kill:Cre,startAllServices:Dre,startService:TA,getUniqueServicesList:X0,restartAllServices:Lre,isServiceRegistered:Z0,reloadStopStart:eB,restartHdb:z0,deleteProcess:Ire,startClusteringProcesses:rB,startClusteringThreads:nB,isHdbRestartRunning:wre,isClusteringRunning:Mre,stopClustering:Pre,reloadClustering:Ure};var p_=!1;Tre(e=>{e.type==="restart"&&oh.initSync(!0)});function bre(){p_=!0}a(bre,"enterPM2Mode");function Oi(){return Ce||(Ce=require("pm2")),new Promise((e,t)=>{Ce.connect((r,n)=>{mo.setupConsoleLogging(),r&&t(r),e(n)})})}a(Oi,"connect");var qr,Nre=10,W0;function So(e,t=!1){if(p_)return yre(e);let r=Ore(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=qr.indexOf(r);o>-1&&qr.splice(o,1),!W0&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Nre&&(Are.existsSync(Ai.getHubConfigPath())?So(e):(await Ai.generateNatsConfig(!0),So(e),await new Promise(c=>setTimeout(c,3e3)),await Ai.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ai.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=oh.get(He.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,_=0,u;for(;l=c.exec(i);){if(l.index&&Ri.LOG_LEVEL_HIERARCHY[o]>=Ri.LOG_LEVEL_HIERARCHY[u||"info"]){let E=u===Ri.LOG_LEVELS.ERR||u===Ri.LOG_LEVELS.WRN?mo.OUTPUTS.STDERR:mo.OUTPUTS.STDOUT;mo.logCustomLevel(u||"info",E,n,i.slice(_,l.index).trim())}let[d,f]=l;_=l.index+d.length,u=Ri.LOG_LEVELS[f]}if(Ri.LOG_LEVEL_HIERARCHY[o]>=Ri.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===Ri.LOG_LEVELS.ERR||u===Ri.LOG_LEVELS.WRN?mo.OUTPUTS.STDERR:mo.OUTPUTS.STDOUT;mo.logCustomLevel(u||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),qr=[],!qr&&!t){let i=a(()=>{W0=!0,qr&&(qr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}qr.push(r)}a(So,"start");function yre(e){return new Promise(async(t,r)=>{try{await Oi()}catch(n){r(n)}Ce.start(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(yre,"startWithPM2");function mA(e){if(!p_){for(let t of qr||[])t.name===e&&(qr.splice(qr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Oi()}catch(n){r(n)}Ce.stop(e,async(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.delete(e,(i,o)=>{i&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(o)})})})}a(mA,"stop");function Q0(e){return new Promise(async(t,r)=>{try{await Oi()}catch(n){r(n)}Ce.reload(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(Q0,"reload");function j0(e){if(!p_)for(let t of qr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Oi()}catch(n){r(n)}Ce.restart(e,(n,s)=>{Ce.disconnect(),t(s)})})}a(j0,"restart");function Ire(e){return new Promise(async(t,r)=>{try{await Oi()}catch(n){r(n)}Ce.delete(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(Ire,"deleteProcess");async function z0(){await So(po.generateRestart())}a(z0,"restartHdb");async function wre(){let e=await SA();for(let t in e)if(e[t].name===He.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(wre,"isHdbRestartRunning");function SA(){return new Promise(async(e,t)=>{try{await Oi()}catch(r){t(r)}Ce.list((r,n)=>{r&&(Ce.disconnect(),t(r)),Ce.disconnect(),e(n)})})}a(SA,"list");function J0(e){return new Promise(async(t,r)=>{try{await Oi()}catch(n){r(n)}Ce.describe(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(J0,"describe");function Cre(){if(!p_){for(let e of qr||[])e.kill();qr=[];return}return new Promise(async(e,t)=>{try{await Oi()}catch(r){t(r)}Ce.killDaemon((r,n)=>{r&&(Ce.disconnect(),t(r)),Ce.disconnect(),e(n)})})}a(Cre,"kill");async function Dre(){try{await rB(),await nB(),await So(po.generateAllServiceConfigs())}catch(e){throw Ce?.disconnect(),e}}a(Dre,"startAllServices");async function TA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case He.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=po.generateMainServerConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=po.generateNatsIngestServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=po.generateNatsReplyServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=po.generateNatsHubServerConfig(),await So(r,t),await Ai.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=po.generateNatsLeafServerConfig(),await So(r,t),await Ai.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=po.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await So(r)}catch(r){throw Ce?.disconnect(),r}}a(TA,"startService");async function X0(){try{let e=await SA(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Ce?.disconnect(),e}}a(X0,"getUniqueServicesList");async function Lre(e=[]){try{let t=!1,r=await X0();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===He.PROCESS_DESCRIPTORS.HDB?t=!0:await j0(o))}t&&await eB(He.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ce?.disconnect(),t}}a(Lre,"restartAllServices");async function Z0(e){if(qr?.find(r=>r.name===e))return!0;let t=await gre.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(Z0,"isServiceRegistered");async function eB(e){let t=oh.get(He.CONFIG_PARAMS.THREADS_COUNT)??oh.get(He.CONFIG_PARAMS.THREADS),r=await J0(e),n=mre.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await mA(e),await TA(e)):e===He.PROCESS_DESCRIPTORS.HDB?await z0():await Q0(e)}a(eB,"reloadStopStart");var tB;async function rB(e=!1){for(let t in He.CLUSTERING_PROCESSES){let r=He.CLUSTERING_PROCESSES[t];await TA(r,e)}}a(rB,"startClusteringProcesses");async function nB(){tB=K0(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await ih.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await ih.updateLocalStreams();let e=await Sre.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===He.PRE_4_0_0_VERSION){mo.info("Starting clustering upgrade 4.0.0 process"),K0(He.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(nB,"startClusteringThreads");async function Pre(){for(let e in He.CLUSTERING_PROCESSES)if(e!==He.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===He.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await tB.terminate();else{let t=He.CLUSTERING_PROCESSES[e];await mA(t)}}a(Pre,"stopClustering");async function Mre(){for(let e in He.CLUSTERING_PROCESSES){let t=He.CLUSTERING_PROCESSES[e];if(await Z0(t)===!1)return!1}return!0}a(Mre,"isClusteringRunning");async function Ure(){await Ai.generateNatsConfig(!0),await ih.reloadNATSHub(),await ih.reloadNATSLeaf(),await Ai.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ai.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Ure,"reloadClustering")});var lh={};Fe(lh,{compactOnStart:()=>vre,copyDb:()=>uB});async function vre(){S_.notify("Running compact on start"),console.log("Running compact on start");let e=(0,gA.get)(To.CONFIG_PARAMS.ROOTPATH),t=new Map,r=Dr();try{for(let n in r){if(n==="system")continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}let i=(0,ah.join)(e,"backup",n+".mdb"),o=(0,ah.join)(e,To.DATABASES_DIR_NAME,n+"-copy.mdb"),c=await iB(n);console.log("Database",n,"before compact has a total record count of",c),t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await uB(n,o),console.log("Backing up",n,"to",i),await(0,Ia.move)(s,i,{overwrite:!0})}m_();for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Ia.move)(i,s,{overwrite:!0}),await(0,Ia.remove)((0,ah.join)(e,To.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));m_()}catch(n){S_.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,RA.updateConfigValue)(To.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,Ia.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw m_(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await iB(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
11
+ `,"")}a(tU,"runCommand");async function F8(){try{await S8.access(nR)}catch{return!1}let e=await tU(`${nR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return T8.eq(t,q8)}a(F8,"checkNATSServerInstalled");async function cR(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await ZM.getClusterUser();if(Ta(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}us.trace("create nats connection called");let i=await C8({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Vt.get(we.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Vt.get(we.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Vt.get(we.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),us.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&us.error("Error with Nats client connection, connection closed",o),rU()}),i}a(cR,"createConnection");function rU(){Mr=void 0,pa=void 0,ma=void 0,Sa=void 0}a(rU,"clearClientCache");async function k8(){Mr&&(await Mr.drain(),Mr=void 0,pa=void 0,ma=void 0,Sa=void 0)}a(k8,"closeConnection");var Mr,Sa;async function Wu(){return Sa||(Sa=cR(Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Mr=await Sa),Mr||Sa}a(Wu,"getConnection");async function Qu(){if(pa)return pa;Ta(Mr)&&await Wu();let{domain:e}=wc(we.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ta(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return pa=await Mr.jetstreamManager({domain:e,timeout:6e4}),pa}a(Qu,"getJetStreamManager");async function nU(){if(ma)return ma;Ta(Mr)&&await Wu();let{domain:e}=wc(we.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ta(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ma=Mr.jetstream({domain:e,timeout:6e4}),ma}a(nU,"getJetStream");async function Hs(){let e=Mr||await Wu(),t=pa||await Qu(),r=ma||await nU();return{connection:e,jsm:t,js:r}}a(Hs,"getNATSReferences");async function $8(e){let t=Vt.get(we.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await ZM.getClusterUser(),s=await cR(t,r,n),i=aR(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=eU.decode(u.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await pE.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a($8,"getServerList");async function lR(e,t){let{jsm:r}=await Hs(),n=Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:D8.File,retention:L8.Limits,subjects:t,discard:P8.Old,max_msgs:s,max_bytes:i,max_age:n})}a(lR,"createLocalStream");async function sU(){let{jsm:e}=await Hs(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(sU,"listStreams");async function V8(e){let{jsm:t}=await Hs();await t.streams.delete(e)}a(V8,"deleteLocalStream");async function Y8(e){let{connection:t}=await Hs(),r=[],n=aR(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(eU.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(Y8,"listRemoteStreams");async function K8(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Hs(),i=jM(),o={durable_name:i,ack_policy:iR.Explicit};t&&(o.deliver_policy=oR.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let u of l){let d=sR(u.data),f={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};if(u.headers&&(f.origin=u.headers.get(Zt.MSG_HEADERS.ORIGIN)),_.push(f),u.ack(),u.info.pending===0)break}return await c.delete(),_}a(K8,"viewStream");async function*W8(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Hs(),i=jM(),o={durable_name:i,ack_policy:iR.Explicit};t&&(o.deliver_policy=oR.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of l){let u=sR(_.data);u[0]||(u=[u]);for(let d of u){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(Zt.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(W8,"viewStreamIterator");async function Q8(e,t,r,n){us.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=iU(n,r);let{js:s}=await Hs(),i=await SE(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:XM.encode(n);try{us.trace(`publishToStream publishing to subject: ${o}`),H8(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return aU(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){us.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await lR(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(Q8,"publishToStream");function iU(e,t){t===void 0&&(t=U8());let r=Vt.get(we.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Zt.MSG_HEADERS.ORIGIN)&&r&&t.append(Zt.MSG_HEADERS.ORIGIN,r),t}a(iU,"addNatsMsgHeader");function wc(e){e=e.toLowerCase();let t=Ku.join(Vt.get(we.CONFIG_PARAMS.ROOTPATH),G8);if(e===we.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ta(rR)&&(rR={port:Vu.getConfigFromFile(we.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Vu.getConfigFromFile(we.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zt.SERVER_SUFFIX.HUB,config_file:Zt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ku.join(t,Zt.PID_FILES.HUB),hdb_nats_path:t}),rR;if(e===we.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ta(tR)&&(tR={port:Vu.getConfigFromFile(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Vu.getConfigFromFile(we.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zt.SERVER_SUFFIX.LEAF,config_file:Zt.NATS_CONFIG_FILES.LEAF_SERVER,domain:Vu.getConfigFromFile(we.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zt.SERVER_SUFFIX.LEAF,pid_file_path:Ku.join(t,Zt.PID_FILES.LEAF),hdb_nats_path:t}),tR;us.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(wc,"getServerConfig");async function oU(e,t,r,n){try{await e.consumers.add(t,{ack_policy:iR.Explicit,durable_name:r,deliver_policy:oR.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(oU,"createConsumer");async function j8(e,t,r){await e.consumers.delete(t,r)}a(j8,"removeConsumer");function z8(e){return e.split(".")[1]}a(z8,"extractServerName");async function J8(e,t,r=6e4,n=aR()){if(!pE.isObject(t))throw new Error("data param must be an object");let s=XM.encode(t),{connection:i}=await Hs(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return sR(c.data)}a(J8,"request");function uR(e){return new Promise(async(t,r)=>{let n=O8(nR,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(uR,"reloadNATS");async function X8(){let{pid_file_path:e}=wc(we.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await uR(e)}a(X8,"reloadNATSHub");async function Z8(){let{pid_file_path:e}=wc(we.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await uR(e)}a(Z8,"reloadNATSLeaf");function e6(e,t,r){let n;switch(e.code){case QM.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case QM.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(e6,"requestErrorHandler");async function t6(e,t){let r=t+Zt.SERVER_SUFFIX.LEAF,{connection:n}=await Hs(),{jsm:s}=await l6(r),{schema:i,table:o}=e,c=mE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await aU(async()=>{if(e.subscribe===!0)await oU(s,c,n.info.server_name,l);else try{await j8(s,c,n.info.server_name)}catch(_){us.trace(_)}})}a(t6,"updateRemoteConsumer");async function r6(e,t,r,n){let s=mE.createNatsTableStreamName(e,t),i=r+Zt.SERVER_SUFFIX.LEAF,o={type:we.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!JM&&I8()<Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=eR();await c(o)}await N8(o),n==="stop"&&await pE.async_set_timeout(1e3)}a(r6,"updateConsumerIterator");function aU(e){return b8.writeTransaction(we.SYSTEM_SCHEMA_NAME,we.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(aU,"exclusiveLock");async function cU(e,t){let r=mE.createNatsTableStreamName(e,t),n=await SE(),s=o6(e,t,n);await lR(r,[s])}a(cU,"createLocalTableStream");async function n6(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await cU(n,s)}}a(n6,"createTableStreams");async function lU(e,t,r=void 0){if(Vt.get(we.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=mE.createNatsTableStreamName(e,t),{domain:s}=wc(we.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Wu()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")us.warn(n);else throw n}}a(lU,"purgeTableStream");async function s6(e,t){if(Vt.get(we.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await lU(e,t[r])}a(s6,"purgeSchemaTableStreams");async function i6(e){return(await Qu()).streams.info(e)}a(i6,"getStreamInfo");function o6(e,t,r){return`${Zt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(o6,"createSubjectName");async function SE(){if(Yu)return Yu;if(Yu=(await Qu())?.nc?.info?.server_name,Yu===void 0)throw new Error("Unable to get jetstream manager server name");return Yu}a(SE,"getJsmServerName");async function a6(){let e=await Qu(),t=await SE(),r=await sU();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=c6(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let u=_.join(".");us.trace(`Updating stream subject name from: ${i} to: ${u}`),s.subjects[0]=u,await e.streams.update(s.name,s)}}a(a6,"updateLocalStreams");function c6(e){let{config:t}=e,r=!1,n=Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(c6,"updateStreamLimits");async function l6(e){let t,r;try{t=await Mr.jetstream({domain:e}),r=await Mr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw us.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(l6,"connectToRemoteJS")});var AE=g((ERe,EU)=>{"use strict";var Cc=pf(),Dc=TM(),u6=x(),_6=require("uuid").v4,fRe=require("clone"),gE=di(),Lc=D(),d6=require("util"),uo=vn(),{handleHDBError:Ur,hdb_errors:f6}=oe(),{HDB_ERROR_MSGS:TE,HTTP_STATUS_CODES:vr}=f6,{SchemaEventMsg:RE}=is(),_U=pt(),{getDatabases:E6}=(Re(),ie(ke)),{transformReq:Pc}=K();EU.exports={createSchema:h6,createSchemaStructure:dU,createTable:p6,createTableStructure:fU,createAttribute:R6,dropSchema:m6,dropTable:S6,dropAttribute:T6,getBackup:A6};async function h6(e){let t=await dU(e);return gE.signalSchemaChange(new RE(process.pid,e.operation,e.schema)),t}a(h6,"createSchema");async function dU(e){let t=Cc.schema_object(e);if(t)throw Ur(t,t.message,vr.BAD_REQUEST,void 0,void 0,!0);if(Pc(e),!await Dc.checkSchemaExists(e.schema))throw Ur(new Error,TE.SCHEMA_EXISTS_ERR(e.schema),vr.BAD_REQUEST,Lc.LOG_LEVELS.ERROR,TE.SCHEMA_EXISTS_ERR(e.schema),!0);return await uo.createSchema(e),`database '${e.schema}' successfully created`}a(dU,"createSchemaStructure");async function p6(e){return Pc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await fU(e)}a(p6,"createTable");async function fU(e){let t=Cc.create_table_object(e);if(t)throw Ur(t,t.message,vr.BAD_REQUEST,void 0,void 0,!0);if(Cc.validateTableResidence(e.residence),!await Dc.checkSchemaTableExists(e.schema,e.table))throw Ur(new Error,TE.TABLE_EXISTS_ERR(e.schema,e.table),vr.BAD_REQUEST,Lc.LOG_LEVELS.ERROR,TE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:_6(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await uo.createTable(n,e);else throw Ur(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",vr.BAD_REQUEST);else await uo.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(fU,"createTableStructure");async function m6(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Cc.schema_object(e),n=t??r;if(n)throw Ur(n,n.message,vr.BAD_REQUEST,void 0,void 0,!0);Pc(e);let s=await Dc.checkSchemaExists(e.schema);if(s)throw Ur(new Error,s,vr.NOT_FOUND,Lc.LOG_LEVELS.ERROR,s,!0);let i=await Dc.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await uo.dropSchema(e),gE.signalSchemaChange(new RE(process.pid,e.operation,e.schema)),await _U.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(m6,"dropSchema");async function S6(e){let t=Cc.table_object(e);if(t)throw Ur(t,t.message,vr.BAD_REQUEST,void 0,void 0,!0);Pc(e);let r=await Dc.checkSchemaTableExists(e.schema,e.table);if(r)throw Ur(new Error,r,vr.NOT_FOUND,Lc.LOG_LEVELS.ERROR,r,!0);return await uo.dropTable(e),await _U.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(S6,"dropTable");async function T6(e){let t=Cc.attribute_object(e);if(t)throw Ur(t,t.message,vr.BAD_REQUEST,void 0,void 0,!0);Pc(e);let r=await Dc.checkSchemaTableExists(e.schema,e.table);if(r)throw Ur(new Error,r,vr.NOT_FOUND,Lc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Ur(new Error,"You cannot drop a hash attribute",vr.BAD_REQUEST,void 0,void 0,!0);if(Lc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Ur(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,vr.BAD_REQUEST,void 0,void 0,!0);try{return await uo.dropAttribute(e),g6(e),gE.signalSchemaChange(new RE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw u6.error(`Got an error deleting attribute ${d6.inspect(e)}.`),n}}a(T6,"dropAttribute");function g6(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(g6,"dropAttributeFromGlobal");async function R6(e){Pc(e);let t=E6()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Ur(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,vr.BAD_REQUEST,void 0,void 0,!0);return await uo.createAttribute(e),gE.signalSchemaChange(new RE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(R6,"createAttribute");function A6(e){return uo.getBackup(e)}a(A6,"getBackup")});var pU=g((pRe,hU)=>{"use strict";var{OPERATIONS_ENUM:O6}=D(),_R=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=O6.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};hU.exports=_R});var dR=g((TRe,RU)=>{"use strict";var b6=vn(),SRe=pU(),OE=K(),bE=D(),N6=X(),{handleHDBError:mU,hdb_errors:y6}=oe(),{HDB_ERROR_MSGS:SU,HTTP_STATUS_CODES:TU}=y6,I6=Object.values(bE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),gU="To use this operation audit log must be enabled in harperdb-config.yaml";RU.exports=w6;async function w6(e){if(OE.isEmpty(e.schema))throw new Error(SU.SCHEMA_REQUIRED_ERR);if(OE.isEmpty(e.table))throw new Error(SU.TABLE_REQUIRED_ERR);if(!N6.get(bE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw mU(new Error,gU,TU.BAD_REQUEST,bE.LOG_LEVELS.ERROR,gU,!0);let t=OE.checkSchemaTableExist(e.schema,e.table);if(t)throw mU(new Error,t,TU.NOT_FOUND,bE.LOG_LEVELS.ERROR,t,!0);if(!OE.isEmpty(e.search_type)&&I6.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await b6.readAuditLog(e)}a(w6,"readAuditLog")});var OU=g((RRe,AU)=>{"use strict";var{OPERATIONS_ENUM:C6}=D(),fR=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=C6.GET_BACKUP,this.schema=t,this.table=r}};AU.exports=fR});var yU=g((NRe,NU)=>{"use strict";var D6=vn(),ORe=OU(),ER=K(),L6=D(),bRe=X(),{handleHDBError:P6,hdb_errors:M6}=oe(),{HDB_ERROR_MSGS:bU,HTTP_STATUS_CODES:U6}=M6;NU.exports=v6;async function v6(e){if(ER.isEmpty(e.schema))throw new Error(bU.SCHEMA_REQUIRED_ERR);if(ER.isEmpty(e.table))throw new Error(bU.TABLE_REQUIRED_ERR);let t=ER.checkSchemaTableExist(e.schema,e.table);if(t)throw P6(new Error,t,U6.NOT_FOUND,L6.LOG_LEVELS.ERROR,t,!0);return await D6.getBackup(read_audit_log_object)}a(v6,"getBackup")});var PU=g((IRe,LU)=>{var _o=require("validate.js"),wU=tt(),Mc=D(),{handleHDBError:B6,hdb_errors:H6}=oe(),{HDB_ERROR_MSGS:mt,HTTP_STATUS_CODES:G6}=H6,hR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),q6={STRUCTURE_USER:"structure_user"},IU=Object.values(Mc.ROLE_TYPES_ENUM),x6="attribute_permissions",F6="attribute_name",{PERMS_CRUD_ENUM:Uc}=Mc,k6=[x6,...Object.values(Uc)],CU=[Uc.READ,Uc.INSERT,Uc.UPDATE],$6=[F6,...CU];function V6(e){let t=hR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,DU(e,t)}a(V6,"addRoleValidation");function Y6(e){let t=hR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,DU(e,t)}a(Y6,"alterRoleValidation");function K6(e){let t=hR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,wU.validateObject(e,t)}a(K6,"dropRoleValidation");var W6=["operation","role","id","permission","hdb_user","hdb_auth_header"];function DU(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)W6.includes(n[o])||s.push(n[o]);s.length>0&&Nt(mt.INVALID_ROLE_JSON_KEYS(s),r);let i=wU.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Nt(o,r)}),e.permission){let o=Q6(e);o&&Nt(o,r),IU.forEach(c=>{e.permission[c]&&!_o.isBoolean(e.permission[c])&&Nt(mt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(IU.indexOf(o)<0){if(o===q6.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let _=0,u=l.length;_<u;_++){let d=l[_];global.hdb_schema[d]||Nt(mt.SCHEMA_NOT_FOUND(d),r)}continue}Nt(mt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Nt(mt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let _=c.tables[l];if(!l||!global.hdb_schema[o][l]){Nt(mt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(_).forEach(u=>{k6.includes(u)||Nt(mt.INVALID_PERM_KEY(u),r,o,l)}),Object.values(Uc).forEach(u=>{_o.isDefined(_[u])?_o.isBoolean(_[u])||Nt(mt.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):Nt(mt.TABLE_PERM_MISSING(u),r,o,l)}),_o.isDefined(_.attribute_permissions)){if(!_o.isArray(_.attribute_permissions)){Nt(mt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}}else{Nt(mt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}if(_.attribute_permissions){let u=global.hdb_schema[o][l].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(m=>{!$6.includes(m)&&m!==Uc.DELETE&&Nt(mt.INVALID_ATTR_PERM_KEY(m),r,o,l)}),!_o.isDefined(E.attribute_name)){Nt(mt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=E.attribute_name;if(!u.includes(h)){Nt(mt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}CU.forEach(m=>{_o.isDefined(E[m])?_o.isBoolean(E[m])||Nt(mt.ATTR_PERM_NOT_BOOLEAN(m,h),r,o,l):Nt(mt.ATTR_PERM_MISSING(m,h),r,o,l)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${l}`;Nt(mt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,l)}}}}return j6(r)}a(DU,"customValidate");LU.exports={addRoleValidation:V6,alterRoleValidation:Y6,dropRoleValidation:K6};function Q6(e){let{operation:t,permission:r}=e;if(t===Mc.OPERATIONS_ENUM.ADD_ROLE||t===Mc.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return mt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Mc.ROLE_TYPES_ENUM.SUPER_USER:Mc.ROLE_TYPES_ENUM.CLUSTER_USER;return mt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(Q6,"validateNoSUPerms");function j6(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:mt.ROLE_PERMS_ERROR,...e};return B6(new Error,n,G6.BAD_REQUEST)}else return null}a(j6,"generateRolePermResponse");function Nt(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(Nt,"addPermError")});var yE=g((CRe,BU)=>{"use strict";var MU=Ir(),UU=or(),z6=ra(),mR=PU(),SR=di(),J6=require("uuid").v4,X6=require("util"),NE=D(),Z6=K(),TR=UU.searchByValue,e9=UU.searchByHash,t9=X6.promisify(z6.delete),r9=os(),n9=Oc(),{hdb_errors:s9,handleHDBError:ga}=oe(),{HDB_ERROR_MSGS:vU,HTTP_STATUS_CODES:ju}=s9,{UserEventMsg:gR}=is();BU.exports={addRole:i9,alterRole:o9,dropRole:a9,listRoles:c9};function pR(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(pR,"scrubRoleDetails");async function i9(e){let t=mR.addRoleValidation(e);if(t)throw t;e=pR(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await TR(r)||[])}catch(i){throw ga(i)}if(n&&n.length>0)throw ga(new Error,vU.ROLE_ALREADY_EXISTS(e.role),ju.CONFLICT,void 0,void 0,!0);e.id||(e.id=J6());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await MU.insert(s),SR.signalUserChange(new gR(process.pid)),e=pR(e),e}a(i9,"addRole");async function o9(e){let t=mR.alterRoleValidation(e);if(t)throw t;e=pR(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await MU.update(r)}catch(s){throw ga(s)}if(n&&n?.message==="updated 0 of 1 records")throw ga(new Error,"Invalid role id",ju.BAD_REQUEST,void 0,void 0,!0);return await SR.signalUserChange(new gR(process.pid)),e}a(o9,"alterRole");async function a9(e){let t=mR.dropRoleValidation(e);if(t)throw ga(new Error,t,ju.BAD_REQUEST,void 0,void 0,!0);let r=new n9(NE.SYSTEM_SCHEMA_NAME,NE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await e9(r));if(n.length===0)throw ga(new Error,vU.ROLE_NOT_FOUND,ju.NOT_FOUND,void 0,void 0,!0);let s=new r9(NE.SYSTEM_SCHEMA_NAME,NE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await TR(s)),o=!1;if(Z6.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw ga(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,ju.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await t9(c),SR.signalUserChange(new gR(process.pid)),`${n[0].role} successfully deleted`}a(a9,"dropRole");async function c9(){return TR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(c9,"listRoles")});var xU=g((LRe,qU)=>{"use strict";var l9=X(),fo=require("joi"),u9=tt(),HU=require("moment"),_9=require("fs-extra"),RR=require("path"),d9=require("lodash"),zu=D(),{LOG_LEVELS:Ra}=D(),f9="YYYY-MM-DD hh:mm:ss",E9=RR.resolve(__dirname,"../logs");qU.exports=function(e){return u9.validateBySchema(e,h9)};var h9=fo.object({from:fo.custom(GU),until:fo.custom(GU),level:fo.valid(Ra.NOTIFY,Ra.FATAL,Ra.ERROR,Ra.WARN,Ra.INFO,Ra.DEBUG,Ra.TRACE),order:fo.valid("asc","desc"),limit:fo.number().min(1),start:fo.number().min(0),log_name:fo.custom(p9)});function GU(e,t){if(HU(e,HU.ISO_8601).format(f9)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(GU,"validateDatetime");function p9(e,t){if(d9.invert(zu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=l9.get(zu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?zu.LOG_NAMES.HDB:e,i=s===zu.LOG_NAMES.INSTALL?RR.join(E9,zu.LOG_NAMES.INSTALL):RR.join(n,s);return _9.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(p9,"validateReadLogPath")});var OR=g((MRe,kU)=>{"use strict";var IE=D(),m9=x(),S9=X(),T9=xU(),AR=require("path"),FU=require("fs-extra"),{once:g9}=require("events"),{handleHDBError:R9,hdb_errors:A9}=oe(),{PACKAGE_ROOT:O9}=D(),b9=AR.join(O9,"logs"),N9=1e3,y9=200;kU.exports=I9;async function I9(e){let t=T9(e);if(t)throw R9(t,t.message,A9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=S9.get(IE.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?IE.LOG_NAMES.HDB:e.log_name,s=n===IE.LOG_NAMES.INSTALL?AR.join(b9,IE.LOG_NAMES.INSTALL):AR.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,_=e.until!==void 0,u=_?new Date(e.until):void 0,d=e.limit===void 0?N9:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,m=0;f==="desc"&&!l&&!u&&(m=Math.max(FU.statSync(s).size-(h+5)*y9,0));let S=FU.createReadStream(s,{start:m});S.on("error",v=>{m9.error(v)});let R=0,T=[],A="",L;S.on("data",v=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;v=A+v;let H=0,j;for(;(j=k.exec(v))&&!S.destroyed;){L&&(L.message=v.slice(H,j.index),U(L));let[z,J,Se]=j,ue=Se.split("] ["),Ee=ue[0],Me=ue[1];ue.splice(0,2),L={timestamp:J,thread:Ee,level:Me,tags:ue,message:""},H=j.index+z.length}A=v.slice(H)}),S.on("end",v=>{S.destroyed||L&&(L.message=A.trim(),U(L))}),S.resume();function U(v){let k,H,j;switch(!0){case(i&&c&&_):k=new Date(v.timestamp),H=new Date(l),j=new Date(u),v.level===o&&k>=H&&k<=j&&R<E?R++:v.level===o&&k>=H&&k<=j&&(Eo(v,f,T),R++,R===h&&S.destroy());break;case(i&&c):k=new Date(v.timestamp),H=new Date(l),v.level===o&&k>=H&&R<E?R++:v.level===o&&k>=H&&(Eo(v,f,T),R++,R===h&&S.destroy());break;case(i&&_):k=new Date(v.timestamp),j=new Date(u),v.level===o&&k<=j&&R<E?R++:v.level===o&&k<=j&&(Eo(v,f,T),R++,R===h&&S.destroy());break;case(c&&_):k=new Date(v.timestamp),H=new Date(l),j=new Date(u),k>=H&&k<=j&&R<E?R++:k>=H&&k<=j&&(Eo(v,f,T),R++,R===h&&S.destroy());break;case i:v.level===o&&R<E?R++:v.level===o&&(Eo(v,f,T),R++,R===h&&S.destroy());break;case c:k=new Date(v.timestamp),H=new Date(l),k>=H&&R<E?R++:k>=H&&R>=E&&(Eo(v,f,T),R++,R===h&&S.destroy());break;case _:k=new Date(v.timestamp),j=new Date(u),k<=j&&R<E?R++:k<=j&&R>=E&&(Eo(v,f,T),R++,R===h&&S.destroy());break;default:R<E?R++:(Eo(v,f,T),R++,R===h&&S.destroy())}}return a(U,"onLogMessage"),await g9(S,"close"),T}a(I9,"readLog");function Eo(e,t,r){t==="desc"?w9(e,r):t==="asc"?C9(e,r):r.push(e)}a(Eo,"pushLineToResult");function w9(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(w9,"insertDescending");function C9(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(C9,"insertAscending")});var wE=g((GRe,KU)=>{"use strict";var bR=require("joi"),{string:Ju,boolean:$U,date:D9}=bR.types(),L9=tt(),{validateSchemaExists:vRe,validateTableExists:BRe,validateSchemaName:HRe}=Cs(),P9=D(),M9=Xe(),VU=X();VU.initSync();var U9=Ju.invalid(VU.get(P9.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(M9.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(),YU={operation:Ju.valid("add_node","update_node","set_node_replication"),node_name:U9,subscriptions:bR.array().items({table:Ju.optional(),schema:Ju.optional(),database:Ju.optional(),subscribe:$U.required(),publish:$U.required().custom(B9),start_time:D9.iso()}).min(1).required()};function v9(e){return L9.validateBySchema(e,bR.object(YU))}a(v9,"addUpdateNodeValidator");function B9(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(B9,"checkForFalsy");KU.exports={addUpdateNodeValidator:v9,validation_schema:YU}});var QU=g((xRe,WU)=>{var H9=tt(),G9={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};WU.exports=function(e){return H9.validateObject(e,G9)}});var CE=g((FRe,jU)=>{"use strict";var q9=D().OPERATIONS_ENUM,NR=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=q9.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};jU.exports=NR});var JU=g(($Re,zU)=>{"use strict";var x9={OPERATION:"operation",REFRESH:"refresh"},yR=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},IR=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};zU.exports={JWTTokens:yR,TOKEN_TYPE_ENUM:x9,JWTRSAKeys:IR}});var e_=g((YRe,tv)=>{"use strict";var Zu=require("jsonwebtoken"),wR=require("fs-extra"),CR=K(),Bn=D(),{handleHDBError:Br,hdb_errors:F9}=oe(),{HTTP_STATUS_CODES:Hr,AUTHENTICATION_ERROR_MSGS:Gr}=F9,Xu=x(),XU=Pf(),PR=Cr(),k9=Ir().update,$9=CE(),V9=di(),{UserEventMsg:Y9}=is(),ho=X();ho.initSync();var DR=require("path"),{JWTTokens:K9,JWTRSAKeys:W9,TOKEN_TYPE_ENUM:DE}=JU(),Q9=ho.get(Bn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ho.get(Bn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",j9=ho.get(Bn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ho.get(Bn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",LE="RS256",LR;tv.exports={createTokens:z9,validateOperationToken:X9,refreshOperationToken:J9,validateRefreshToken:ev};async function z9(e){if(CR.isEmpty(e)||typeof e!="object")throw Br(new Error,Gr.INVALID_AUTH_OBJECT,Hr.BAD_REQUEST,void 0,void 0,!0);if(CR.isEmpty(e.username))throw Br(new Error,Gr.USERNAME_REQUIRED,Hr.BAD_REQUEST,void 0,void 0,!0);if(CR.isEmpty(e.password))throw Br(new Error,Gr.PASSWORD_REQUIRED,Hr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await PR.findAndValidateUser(e.username,e.password),!t)throw Br(new Error,Gr.INVALID_CREDENTIALS,Hr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Xu.error(f),Br(new Error,Gr.INVALID_CREDENTIALS,Hr.UNAUTHORIZED,void 0,void 0,!0)}let r=await PE(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await ZU(i,r.private_key,r.passphrase),c=await Zu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:j9,algorithm:LE,subject:DE.REFRESH}),l=XU.hash(c),_=new $9(Bn.SYSTEM_SCHEMA_NAME,Bn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await k9(_)}catch(f){Xu.error(f),d=f}if(d!==void 0||u.skipped_hashes.length>0)throw Br(new Error,Gr.REFRESH_TOKEN_SAVE_FAILED,Hr.INTERNAL_SERVER_ERROR);return V9.signalUserChange(new Y9(process.pid)),new K9(o,c)}a(z9,"createTokens");async function ZU(e,t,r){return await Zu.sign(e,{key:t,passphrase:r},{expiresIn:Q9,algorithm:LE,subject:DE.OPERATION})}a(ZU,"signOperationToken");async function PE(){if(LR===void 0)try{let e=DR.join(ho.getHdbBasePath(),Bn.LICENSE_KEY_DIR_NAME,Bn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=DR.join(ho.getHdbBasePath(),Bn.LICENSE_KEY_DIR_NAME,Bn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=DR.join(ho.getHdbBasePath(),Bn.LICENSE_KEY_DIR_NAME,Bn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await wR.readFile(e)).toString(),s=(await wR.readFile(t)).toString(),i=(await wR.readFile(r)).toString();LR=new W9(i,s,n)}catch(e){throw Xu.error(e),Br(new Error,Gr.NO_ENCRYPTION_KEYS,Hr.INTERNAL_SERVER_ERROR)}return LR}a(PE,"getJWTRSAKeys");async function J9(e){if(!e)throw Br(new Error,Gr.INVALID_BODY,Hr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Br(new Error,Gr.REFRESH_TOKEN_REQUIRED,Hr.BAD_REQUEST,void 0,void 0,!0);await ev(e.refresh_token);let t=await PE(),r=await Zu.decode(e.refresh_token);return{operation_token:await ZU({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(J9,"refreshOperationToken");async function X9(e){try{let t=await PE(),r=await Zu.verify(e,t.public_key,{algorithms:LE,subject:DE.OPERATION});return await PR.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Xu.warn(t),t.name&&t.name==="TokenExpiredError"?Br(new Error,Gr.TOKEN_EXPIRED,Hr.FORBIDDEN):Br(new Error,Gr.INVALID_TOKEN,Hr.UNAUTHORIZED)}}a(X9,"validateOperationToken");async function ev(e){let t;try{let r=await PE(),n=await Zu.verify(e,r.public_key,{algorithms:LE,subject:DE.REFRESH});t=await PR.findAndValidateUser(n.username,void 0,!1)}catch(r){throw Xu.warn(r),r.name&&r.name==="TokenExpiredError"?Br(new Error,Gr.TOKEN_EXPIRED,Hr.FORBIDDEN):Br(new Error,Gr.INVALID_TOKEN,Hr.UNAUTHORIZED)}if(!XU.validate(t.refresh_token,e))throw Br(new Error,Gr.INVALID_TOKEN,Hr.UNAUTHORIZED);return t}a(ev,"validateRefreshToken")});var MR=g((QRe,sv)=>{"use strict";var Z9=QU(),vc=require("passport"),e7=require("passport-local").Strategy,t7=require("passport-http").BasicStrategy,r7=require("util"),n7=Cr(),nv=r7.callbackify(n7.findAndValidateUser),WRe=Zr(),s7=D(),rv=e_();vc.use(new e7(function(e,t,r){nv(e,t,r)}));vc.use(new t7(function(e,t,r){nv(e,t,r)}));vc.serializeUser(function(e,t){t(null,e)});vc.deserializeUser(function(e,t){t(null,e)});function i7(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":vc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===s7.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?rv.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):rv.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:vc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(i7,"authorize");function o7(e,t){let r=Z9(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);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]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(o7,"checkPermissions");sv.exports={authorize:i7,checkPermissions:o7}});var Bc=g((zRe,iv)=>{"use strict";var UR=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},vR=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};iv.exports={Node:UR,NodeSubscription:vR}});var av=g((XRe,ov)=>{"use strict";var a7=D().OPERATIONS_ENUM,BR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=a7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};ov.exports=BR});var t_=g((eAe,cv)=>{"use strict";var HR=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},GR=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};cv.exports={RemotePayloadObject:HR,RemotePayloadSubscription:GR}});var uv=g((rAe,lv)=>{"use strict";var qR=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};lv.exports=qR});var fv=g((aAe,dv)=>{"use strict";var c7=uv(),sAe=at(),_v=Ve(),l7=x(),{getSchemaPath:iAe,getTransactionAuditStorePath:oAe}=je(),{getDatabases:u7}=(Re(),ie(ke));dv.exports=_7;async function _7(e){let t=new c7;try{let r=u7()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await _v.environmentDataSize(schema_path,e.name),o=await _v.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){l7.warn(`unable to stat table dbi due to ${r}`)}return t}a(_7,"lmdbGetTableSize")});var hv=g((lAe,Ev)=>{"use strict";var xR=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};Ev.exports=xR});var mi=g((EAe,gv)=>{"use strict";var d7=require("fs-extra"),f7=require("path"),dr=require("systeminformation"),po=x(),pv=pt(),_Ae=Xe(),UE=D(),E7=fv(),h7=_i(),{getThreadInfo:mv}=et(),zR=X();zR.initSync();var p7=hv(),{openEnvironment:dAe}=Ve(),{getSchemaPath:fAe}=je(),{database:m7,databases:Sv}=(Re(),ie(ke)),ME;gv.exports={getHDBProcessInfo:VR,getNetworkInfo:KR,getDiskInfo:YR,getMemoryInfo:$R,getCPUInfo:kR,getTimeInfo:FR,getSystemInformation:WR,systemInformation:S7,getTableSize:QR,getMetrics:jR};function FR(){return dr.time()}a(FR,"getTimeInfo");async function kR(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:_,...u}=await dr.cpu();u.cpu_speed=await dr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:m,raw_currentload_user:S,cpus:R,...T}=await dr.currentLoad();return T.cpus=[],R.forEach(A=>{let{raw_load:L,raw_load_idle:U,raw_load_irq:v,raw_load_nice:k,raw_load_system:H,raw_load_user:j,...z}=A;T.cpus.push(z)}),u.current_load=T,u}catch(e){return po.error(`error in getCPUInfo: ${e}`),{}}}a(kR,"getCPUInfo");async function $R(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await dr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return po.error(`error in getMemoryInfo: ${e}`),{}}}a($R,"getMemoryInfo");async function VR(){let e={core:[],clustering:[]};try{let t=await dr.processes(),r;try{r=Number.parseInt(await d7.readFile(f7.join(zR.get(UE.CONFIG_PARAMS.ROOTPATH),UE.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===UE.NODE_ERROR_CODES.ENOENT)po.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return po.error(`error in getHDBProcessInfo: ${t}`),e}}a(VR,"getHDBProcessInfo");async function YR(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await dr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,..._}=await dr.fsStats();return e.read_write=_,e.size=await dr.fsSize(),e}catch(t){return po.error(`error in getDiskInfo: ${t}`),e}}a(YR,"getDiskInfo");async function KR(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await dr.networkInterfaceDefault(),e.latency=await dr.inetChecksite("google.com"),(await dr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:_,ieee8021xState:u,carrier_changes:d,...f}=n;e.interfaces.push(f)}),(await dr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return po.error(`error in getNetworkInfo: ${t}`),e}}a(KR,"getNetworkInfo");async function WR(){if(ME!==void 0)return ME;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await dr.osInfo();e=c;let l=await dr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,ME=e,ME}catch(t){return po.error(`error in getSystemInformation: ${t}`),e}}a(WR,"getSystemInformation");async function QR(){let e=[],t=await h7.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await E7(n));return e}a(QR,"getTableSize");async function jR(){let e={};for(let t in Sv){let r=e[t]={};for(let n in Sv[t])try{let s=m7({database:t,table:n}),i=s.getStats();i.readers=s.readerList().split(/\n\s+/).slice(1).map(o=>{let[c,l,_]=o.trim().split(" ");return{pid:c,thread:l,txnid:_}}),r[n]=i}catch(s){po.notify(`Error getting stats for table ${n}: ${s}`)}}return e}a(jR,"getMetrics");async function Tv(){if(zR.get(UE.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await pv.getNATSReferences(),t=await pv.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(Tv,"getNatsStreamInfo");async function S7(e){let t=new p7;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await WR(),t.time=FR(),t.cpu=await kR(),t.memory=await $R(),t.disk=await YR(),t.network=await KR(),t.harperdb_processes=await VR(),t.table_size=await QR(),t.metrics=await jR(),t.threads=await mv(),t.replication=await Tv(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await WR();break;case"time":t.time=FR();break;case"cpu":t.cpu=await kR();break;case"memory":t.memory=await $R();break;case"disk":t.disk=await YR();break;case"network":t.network=await KR();break;case"harperdb_processes":t.harperdb_processes=await VR();break;case"table_size":t.table_size=await QR();break;case"database_metrics":case"metrics":t.metrics=await jR();break;case"threads":t.threads=await mv();break;case"replication":t.replication=await Tv();break;default:break}return t}a(S7,"systemInformation")});var Si=g((pAe,Rv)=>{"use strict";Rv.exports={version:T7,printVersion:g7};var vE=Ea();function T7(){if(vE)return vE.version}a(T7,"version");function g7(){vE&&console.log(`HarperDB Version ${vE.version}`)}a(g7,"printVersion")});var Ti=g((gAe,Nv)=>{"use strict";var R7=Ir(),JR=K(),A7=require("util"),Aa=D(),Av=X();Av.initSync();var O7=MR(),Ov=or(),{Node:SAe,NodeSubscription:TAe}=Bc(),b7=Oc(),N7=av(),{RemotePayloadObject:y7,RemotePayloadSubscription:I7}=t_(),{handleHDBError:w7,hdb_errors:C7}=oe(),{HTTP_STATUS_CODES:D7,HDB_ERROR_MSGS:L7}=C7,P7=os(),M7=mi(),U7=Si(),{getDatabases:v7}=(Re(),ie(ke)),B7=A7.promisify(O7.authorize),H7=Ov.searchByHash,G7=Ov.searchByValue;Nv.exports={authHeaderToUser:q7,isEmpty:x7,getNodeRecord:F7,upsertNodeRecord:k7,buildNodePayloads:$7,checkClusteringEnabled:V7,getAllNodeRecords:Y7,getSystemInfo:K7,reverseSubscription:bv};async function q7(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await B7(t,null),e}a(q7,"authHeaderToUser");function x7(e){return e==null}a(x7,"isEmpty");async function F7(e){let t=new b7(Aa.SYSTEM_SCHEMA_NAME,Aa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return H7(t)}a(F7,"getNodeRecord");async function k7(e){let t=new N7(Aa.SYSTEM_SCHEMA_NAME,Aa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return R7.upsert(t)}a(k7,"upsertNodeRecord");function bv(e){if(JR.isEmpty(e.subscribe)||JR.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(bv,"reverseSubscription");function $7(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:_}=c,u=JR.getTableHashAttribute(l,_),{subscribe:d,publish:f}=bv(c),E=v7()[l]?.[_],h=new I7(l,_,u,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new y7(r,t,s,n)}a($7,"buildNodePayloads");function V7(){if(!Av.get(Aa.CONFIG_PARAMS.CLUSTERING_ENABLED))throw w7(new Error,L7.CLUSTERING_NOT_ENABLED,D7.BAD_REQUEST,void 0,void 0,!0)}a(V7,"checkClusteringEnabled");async function Y7(){let e=new P7(Aa.SYSTEM_SCHEMA_NAME,Aa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await G7(e))}a(Y7,"getAllNodeRecords");async function K7(){let e=await M7.getSystemInformation();return{hdb_version:U7.version(),node_version:e.node_version,platform:e.platform}}a(K7,"getSystemInfo")});var XR=g((AAe,Mv)=>{"use strict";var BE=pt(),yv=K(),Iv=Xe(),wv=D(),HE=x(),Cv=AE(),W7=wu(),{RemotePayloadObject:Q7}=t_(),{handleHDBError:Dv,hdb_errors:j7}=oe(),{HTTP_STATUS_CODES:Lv}=j7,{NodeSubscription:Pv}=Bc();Mv.exports=z7;async function z7(e,t){let r;try{r=await BE.request(`${t}.${Iv.REQUEST_SUFFIX}`,new Q7(wv.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),HE.trace("Response from remote describe all request:",r)}catch(o){HE.error(`addNode received error from describe all request to remote node: ${o}`);let c=BE.requestErrorHandler(o,"add_node",t);throw Dv(new Error,c,Lv.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===Iv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw Dv(new Error,o,Lv.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===wv.SYSTEM_SCHEMA_NAME){await BE.createLocalTableStream(l,c);let h=new Pv(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=yv.doesSchemaExist(l),u=n[l]!==void 0,d=c?yv.doesTableExist(l,c):!0,f=c?n?.[l]?.[c]!==void 0:!0;if(!_&&!u||!d&&!f){s.push(o);continue}if(!_&&u&&(HE.trace(`addNode creating schema: ${l}`),await Cv.createSchema({operation:"create_schema",schema:l})),!d&&f){HE.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new W7(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await Cv.createTable(h)}await BE.createLocalTableStream(l,c);let E=new Pv(l,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(z7,"reviewSubscriptions")});var s_=g((bAe,Bv)=>{"use strict";var{handleHDBError:GE,hdb_errors:J7}=oe(),{HTTP_STATUS_CODES:qE}=J7,{addUpdateNodeValidator:X7}=wE(),xE=x(),vv=D(),Uv=Xe(),Z7=K(),r_=pt(),n_=Ti(),eee=X(),tee=XR(),{Node:ree,NodeSubscription:nee}=Bc(),{broadcast:see}=et(),iee="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",oee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",aee=eee.get(vv.CONFIG_PARAMS.CLUSTERING_NODENAME);Bv.exports=cee;async function cee(e,t=!1){xE.trace("addNode called with:",e),n_.checkClusteringEnabled();let r=X7(e);if(r)throw GE(r,r.message,qE.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await n_.getNodeRecord(n);if(!Z7.isEmptyOrZeroLength(d))throw GE(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,qE.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await tee(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=iee,o;let c=n_.buildNodePayloads(s,aee,vv.OPERATIONS_ENUM.ADD_NODE,await n_.getSystemInfo()),l=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new nee(E.schema,E.table,E.publish,E.subscribe))}xE.trace("addNode sending remote payload:",c);let _;try{_=await r_.request(`${n}.${Uv.REQUEST_SUFFIX}`,c)}catch(d){xE.error(`addNode received error from request: ${d}`);for(let E=0,h=s.length;E<h;E++){let m=s[E];m.publish=!1,m.subscribe=!1,await r_.updateRemoteConsumer(m,n)}let f=r_.requestErrorHandler(d,"add_node",n);throw GE(new Error,f,qE.INTERNAL_SERVER_ERROR,"error",f)}if(_.status===Uv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw GE(new Error,d,qE.INTERNAL_SERVER_ERROR,"error",d)}xE.trace(_);for(let d=0,f=s.length;d<f;d++){let E=s[d];await r_.updateRemoteConsumer(E,n),E.subscribe===!0&&await r_.updateConsumerIterator(E.schema,E.table,n,"start")}let u=new ree(n,l,_.system_info);return await n_.upsertNodeRecord(u),see({type:"nats_update"}),i.length>0?o.message=oee:o.message=`Successfully added '${n}' to manifest`,o}a(cee,"addNode")});var tA=g((IAe,qv)=>{"use strict";var{handleHDBError:ZR,hdb_errors:lee}=oe(),{HTTP_STATUS_CODES:eA}=lee,{addUpdateNodeValidator:uee}=wE(),i_=x(),Gv=D(),Hv=Xe(),yAe=K(),o_=pt(),a_=Ti(),_ee=X(),{cloneDeep:dee}=require("lodash"),fee=XR(),{Node:Eee,NodeSubscription:hee}=Bc(),{broadcast:pee}=et(),mee="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",See="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Tee=_ee.get(Gv.CONFIG_PARAMS.CLUSTERING_NODENAME);qv.exports=gee;async function gee(e){i_.trace("updateNode called with:",e),a_.checkClusteringEnabled();let t=uee(e);if(t)throw ZR(t,t.message,eA.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await a_.getNodeRecord(r);s.length>0&&(n=dee(s));let{added:i,skipped:o}=await fee(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=mee,c;let l=a_.buildNodePayloads(i,Tee,Gv.OPERATIONS_ENUM.UPDATE_NODE,await a_.getSystemInfo());for(let u=0,d=i.length;u<d;u++){let f=i[u];i_.trace(`updateNode updating work stream for node: ${r} subscription:`,f),i[u].start_time===void 0&&delete i[u].start_time}i_.trace("updateNode sending remote payload:",l);let _;try{_=await o_.request(`${r}.${Hv.REQUEST_SUFFIX}`,l)}catch(u){i_.error(`updateNode received error from request: ${u}`);let d=o_.requestErrorHandler(u,"update_node",r);throw ZR(new Error,d,eA.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===Hv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw ZR(new Error,u,eA.INTERNAL_SERVER_ERROR,"error",u)}i_.trace(_);for(let u=0,d=i.length;u<d;u++){let f=i[u];await o_.updateRemoteConsumer(f,r),f.subscribe===!0?await o_.updateConsumerIterator(f.schema,f.table,r,"start"):await o_.updateConsumerIterator(f.schema,f.table,r,"stop")}return n||(n=[new Eee(r,[],_.system_info)]),await Ree(n[0],i,_.system_info),o.length>0?c.message=See:c.message=`Successfully updated '${r}'`,c}a(gee,"updateNode");async function Ree(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,_=e.subscriptions.length;l<_;l++){let u=n.subscriptions[l];if(u.schema===o.schema&&u.table===o.table){u.publish=o.publish,u.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new hee(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await a_.upsertNodeRecord(n),pee({type:"nats_update"})}a(Ree,"updateNodeTable")});var Vv=g((CAe,$v)=>{"use strict";var kv=require("joi"),{string:xv}=kv.types(),Aee=tt(),Fv=D(),Oee=X(),bee=Xe();$v.exports=Nee;function Nee(e){let t=xv.invalid(Oee.get(Fv.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(bee.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=kv.object({operation:xv.valid(Fv.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Aee.validateBySchema(e,r)}a(Nee,"removeNodeValidator")});var kE=g((LAe,jv)=>{"use strict";var{handleHDBError:Yv,hdb_errors:yee}=oe(),{HTTP_STATUS_CODES:Kv}=yee,Iee=Vv(),c_=x(),Wv=Ti(),wee=K(),FE=D(),Qv=Xe(),rA=pt(),Cee=X(),{RemotePayloadObject:Dee}=t_(),{NodeSubscription:Lee}=Bc(),Pee=Iu(),Mee=ra(),{broadcast:Uee}=et(),vee=Cee.get(FE.CONFIG_PARAMS.CLUSTERING_NODENAME);jv.exports=Bee;async function Bee(e){c_.trace("removeNode called with:",e),Wv.checkClusteringEnabled();let t=Iee(e);if(t)throw Yv(t,t.message,Kv.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await Wv.getNodeRecord(r);if(wee.isEmptyOrZeroLength(n))throw Yv(new Error,`Node '${r}' was not found.`,Kv.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Dee(FE.OPERATIONS_ENUM.REMOVE_NODE,vee,[]),i,o=!1;for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];u.subscribe===!0&&await rA.updateConsumerIterator(u.schema,u.table,r,"stop");try{await rA.updateRemoteConsumer(new Lee(u.schema,u.table,!1,!1),r)}catch(d){c_.error(d)}}try{i=await rA.request(`${r}.${Qv.REQUEST_SUFFIX}`,s),c_.trace("Remove node reply from remote node:",r,i)}catch(l){c_.error("removeNode received error from request:",l),o=!0}let c=new Pee(FE.SYSTEM_SCHEMA_NAME,FE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Mee.deleteRecord(c),Uee({type:"nats_update"}),i?.status===Qv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(c_.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(Bee,"removeNode")});var Xv=g((MAe,Jv)=>{"use strict";var zv=require("joi"),{string:Hee,array:Gee}=zv.types(),qee=tt(),xee=wE();Jv.exports=Fee;function Fee(e){let t=zv.object({operation:Hee.valid("configure_cluster").required(),connections:Gee.items(xee.validation_schema).required()});return qee.validateBySchema(e,t)}a(Fee,"configureClusterValidator")});var VE=g((vAe,n0)=>{"use strict";var kee=D(),$E=x(),$ee=K(),Vee=kE(),Yee=s_(),Zv=Ti(),Kee=Xv(),{handleHDBError:e0,hdb_errors:Wee}=oe(),{HTTP_STATUS_CODES:t0}=Wee,Qee="Configure cluster complete.",jee="Failed to configure the cluster. Check the logs for more details.",zee="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";n0.exports=Jee;async function Jee(e){$E.trace("configure cluster called with:",e),Zv.checkClusteringEnabled();let t=Kee(e);if(t)throw e0(t,t.message,t0.BAD_REQUEST,void 0,void 0,!0);let r=await Zv.getAllNodeRecords(),n=[];for(let u=0,d=r.length;u<d;u++){let f=await r0(Vee,{operation:kee.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[u].name},r[u].name);n.push(f)}$E.trace("All results from configure_cluster remove node:",n);let s=[],i=e.connections.length;for(let u=0;u<i;u++){let d=e.connections[u],f=await r0(Yee,d,d.node_name);s.push(f)}$E.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,_=n.concat(s);for(let u=0,d=_.length;u<d;u++){let f=_[u];f.status==="rejected"&&($E.error(f),o.includes(f.node_name)||o.push(f.node_name)),(f?.result?.message?.includes?.("Successfully")||f?.result?.includes?.("Successfully"))&&(l=!0),!(typeof f.result=="string"&&f.result.includes("Successfully removed")||f.status==="rejected")&&c.push({node_name:f?.node_name,subscriptions:f?.result})}if($ee.isEmptyOrZeroLength(o))return{message:Qee,connections:c};if(l)return{message:zee,failed_nodes:o,connections:c};throw e0(new Error,jee,t0.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Jee,"configureCluster");async function r0(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(r0,"functionWrapper")});var a0=g((HAe,o0)=>{"use strict";var l_=require("joi"),Xee=tt(),{validateSchemaExists:s0,validateTableExists:Zee,validateSchemaName:i0}=Cs(),ete=l_.object({operation:l_.string().valid("purge_stream"),schema:l_.string().custom(s0).custom(i0).optional(),database:l_.string().custom(s0).custom(i0).optional(),table:l_.string().custom(Zee).required()});function tte(e){return Xee.validateBySchema(e,ete)}a(tte,"purgeStreamValidator");o0.exports=tte});var nA=g((qAe,c0)=>{"use strict";var{handleHDBError:rte,hdb_errors:nte}=oe(),{HTTP_STATUS_CODES:ste}=nte,ite=a0(),ote=pt(),ate=Ti();c0.exports=cte;async function cte(e){e.schema=e.schema??e.database;let t=ite(e);if(t)throw rte(t,t.message,ste.BAD_REQUEST,void 0,void 0,!0);ate.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await ote.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(cte,"purgeStream")});var KE=g((FAe,E0)=>{"use strict";var iA=Ti(),lte=pt(),_0=X(),YE=D(),Oa=Xe(),ute=K(),sA=x(),{RemotePayloadObject:_te}=t_(),{ErrorCode:l0}=require("nats"),u0=_0.get(YE.CONFIG_PARAMS.CLUSTERING_ENABLED),d0=_0.get(YE.CONFIG_PARAMS.CLUSTERING_NODENAME);E0.exports={clusterStatus:dte,buildNodeStatus:f0};async function dte(){let e={node_name:d0,is_enabled:u0,connections:[]};if(!u0)return e;let t=await iA.getAllNodeRecords();if(ute.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(f0(t[n],e.connections));return await Promise.allSettled(r),e}a(dte,"clusterStatus");async function f0(e,t){let r=e.name,n=new _te(YE.OPERATIONS_ENUM.CLUSTER_STATUS,d0,void 0,await iA.getSystemInfo()),s,i,o=Oa.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await lte.request(Oa.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Oa.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Oa.CLUSTER_STATUS_STATUSES.CLOSED,sA.error(`Error getting node status from ${r} `,s))}catch(l){sA.warn(`Error getting node status from ${r}`,l),l.code===l0.NoResponders?o=Oa.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===l0.Timeout?o=Oa.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Oa.CLUSTER_STATUS_STATUSES.CLOSED}let c=new fte(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==YE.PRE_4_0_0_VERSION&&await iA.upsertNodeRecord(l)}catch(l){sA.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(f0,"buildNodeStatus");function fte(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(fte,"NodeStatusObject")});var QE=g(($Ae,h0)=>{"use strict";var{handleHDBError:Ete,hdb_errors:hte}=oe(),{HTTP_STATUS_CODES:pte}=hte,mte=pt(),Ste=Ti(),oA=K(),WE=require("joi"),Tte=tt(),gte=2e3,Rte=WE.object({timeout:WE.number().min(1),connected_nodes:WE.boolean(),routes:WE.boolean()});h0.exports=Ate;async function Ate(e){Ste.checkClusteringEnabled();let t=Tte.validateBySchema(e,Rte);if(t)throw Ete(t,t.message,pte.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||oA.autoCastBoolean(n),o=s===void 0||oA.autoCastBoolean(s),c={nodes:[]},l=await mte.getServerList(r??gte),_={};if(i)for(let u=0,d=l.length;u<d;u++){let f=l[u].statsz;f&&(_[l[u].server.name]=f.routes)}for(let u=0,d=l.length;u<d;u++){if(l[u].statsz)continue;let f=l[u].server,E=l[u].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:l[u].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(m=>{h.connected_nodes.includes(m.name.slice(0,-4))||h.connected_nodes.push(m.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(m=>({host:m.split(":")[0],port:oA.autoCast(m.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Ate,"clusterNetwork")});var T0=g((YAe,S0)=>{"use strict";var aA=require("joi"),p0=tt(),{route_constraints:m0}=yT();S0.exports={setRoutesValidator:Ote,deleteRoutesValidator:bte};function Ote(e){let t=aA.object({server:aA.valid("hub","leaf").required(),routes:m0.required()});return p0.validateBySchema(e,t)}a(Ote,"setRoutesValidator");function bte(e){let t=aA.object({routes:m0.required()});return p0.validateBySchema(e,t)}a(bte,"deleteRoutesValidator")});var zE=g((WAe,O0)=>{"use strict";var ba=ut(),cA=K(),jE=D(),g0=T0(),{handleHDBError:R0,hdb_errors:Nte}=oe(),{HTTP_STATUS_CODES:A0}=Nte,yte="cluster routes successfully set",Ite="cluster routes successfully deleted";O0.exports={setRoutes:wte,getRoutes:Cte,deleteRoutes:Dte};function wte(e){let t=g0.setRoutesValidator(e);if(t)throw R0(t,t.message,A0.BAD_REQUEST,void 0,void 0,!0);let r=ba.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,l=e.routes.length;c<l;c++){let _=e.routes[c];_.port=cA.autoCast(_.port);let u=n.some(f=>f.host===_.host&&f.port===_.port),d=s.some(f=>f.host===_.host&&f.port===_.port);u||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?ba.updateConfigValue(jE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):ba.updateConfigValue(jE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:yte,set:o,skipped:i}}a(wte,"setRoutes");function Cte(){let e=ba.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Cte,"getRoutes");function Dte(e){let t=g0.deleteRoutesValidator(e);if(t)throw R0(t,t.message,A0.BAD_REQUEST,void 0,void 0,!0);let r=ba.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,l=!1;for(let _=0,u=e.routes.length;_<u;_++){let d=e.routes[_],f=!1;for(let E=0,h=n.length;E<h;E++){let m=n[E];if(d.host===m.host&&d.port===m.port){n.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,m=s.length;h<m;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),l=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(n=cA.isEmptyOrZeroLength(n)?null:n,ba.updateConfigValue(jE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=cA.isEmptyOrZeroLength(s)?null:s,ba.updateConfigValue(jE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:Ite,deleted:i,skipped:o}}a(Dte,"deleteRoutes")});var N0=g((jAe,b0)=>{"use strict";var u_=require("alasql"),Na=require("recursive-iterator"),_s=x(),Lte=K(),__=D(),lA=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,Mte(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(s=>__.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!__.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][__.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Pte(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let l=this.affected_attributes.get(i).get(o).filter(_=>!__.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new u_.yy.Column({columnid:_});s.tableid&&(u.tableid=s.tableid),this.ast.columns.push(u),l.includes(_)||l.push(_)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function Pte(e){return e.filter(t=>t[__.PERMS_CRUD_ENUM.READ])}a(Pte,"filterReadRestrictedAttrs");function Mte(e,t,r,n,s){Ute(e,t,r,n,s)}a(Mte,"interpretAST");function d_(e,t,r,n,s){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),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(d_,"addSchemaTableToMap");function Ute(e,t,r,n,s){if(!e){_s.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof u_.yy.Insert?Gte(e,t,r):e instanceof u_.yy.Select?vte(e,t,r,n,s):e instanceof u_.yy.Update?Bte(e,t,r):e instanceof u_.yy.Delete?Hte(e,t,r):_s.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Ute,"getRecordAttributesAST");function vte(e,t,r,n,s){if(!e){_s.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Lte.isEmptyOrZeroLength(i)){_s.error("No schema specified");return}e.from.forEach(c=>{d_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),d_(c.table,t,r,n,s)});let o=new Na(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,_=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{_s.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(c.columnid)<0&&t.get(_).get(l).push(c.columnid)}if(e.where){let c=new Na(e.where),l=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid?_.tableid:l;if(!t.get(i).has(u))if(r.has(u))u=r.get(u);else{_s.info(`table specified as ${u} not found.`);continue}t.get(i).get(u).indexOf(_.columnid)<0&&t.get(i).get(u).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Na(c.on);for(let{node:_}of l)if(_&&_.columnid){let u=_.tableid,d=s.get(u);if(!t.get(d).has(u))if(r.has(u))u=r.get(u);else{_s.info(`table specified as ${u} not found.`);continue}t.get(d).get(u).indexOf(_.columnid)<0&&t.get(d).get(u).push(_.columnid)}}),e.order){let c=new Na(e.order);for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid,u=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{_s.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(l.columnid)<0&&t.get(u).get(_).push(l.columnid)}}}a(vte,"getSelectAttributes");function Bte(e,t,r){if(!e){_s.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Na(e.columns),s=e.table.databaseid;d_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&uA(e.table.tableid,s,i.columnid,t,r)}a(Bte,"getUpdateAttributes");function Hte(e,t,r){if(!e){_s.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Na(e.where),s=e.table.databaseid;d_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&uA(e.table.tableid,s,i.columnid,t,r)}a(Hte,"getDeleteAttributes");function Gte(e,t,r){if(!e){_s.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Na(e.columns),s=e.into.databaseid;d_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&uA(e.into.tableid,s,i.columnid,t,r)}a(Gte,"getInsertAttributes");function uA(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(uA,"pushAttribute");b0.exports=lA});var XE=g((JAe,C0)=>{var JE=oa(),y0=require("chalk"),dn=x(),I0=require("prompt"),{promisify:qte}=require("util"),_A=D(),xte=require("fs-extra"),Fte=require("path"),kte=K(),$te=Si(),w0=X();w0.initSync();var Vte=require("moment"),Yte=qte(I0.get),Kte=Fte.join(w0.getHdbBasePath(),_A.LICENSE_KEY_DIR_NAME,_A.LICENSE_FILE_NAME,_A.LICENSE_FILE_NAME);C0.exports={getFingerprint:Qte,setLicense:Wte,parseLicense:dA,register:jte,getRegistrationInfo:Jte};async function Wte(e){if(e&&e.key&&e.company){try{dn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await dA(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw dn.error(r),dn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Wte,"setLicense");async function Qte(){let e={};try{e=await JE.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw dn.error(r),dn.error(t),new Error(r)}return e}a(Qte,"getFingerprint");async function dA(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");dn.info("Validating license input...");let r=JE.validateLicense(e,t);if(dn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(dn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(dn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{dn.info("writing license to disk"),await xte.writeFile(Kte,JSON.stringify({license_key:e,company:t}))}catch(n){throw dn.error("Failed to write License"),n}return"Registration successful."}a(dA,"parseLicense");async function jte(){let e=await zte();return dA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(jte,"register");async function zte(){let e=await JE.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:y0.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:y0.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{I0.start()}catch(n){dn.error(n)}let r;try{r=await Yte(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(zte,"promptForRegistration");async function Jte(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await JE.getLicense()}catch(r){throw dn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(kte.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=$te.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Vte.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Jte,"getRegistrationInfo")});var L0=g((ZAe,D0)=>{"use strict";var Xte=Xe(),fA=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+Xte.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:d,routes:f,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};D0.exports=fA});var U0=g((tOe,M0)=>{"use strict";var P0=Xe(),EA=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d){this.port=t,d===null&&(d=void 0),this.server_name=r+P0.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+P0.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:u,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:l,jetstream:"enabled"}},this.system_account="SYS"}};M0.exports=EA});var B0=g((nOe,v0)=>{"use strict";var hA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};v0.exports=hA});var G0=g((iOe,H0)=>{"use strict";var Zte=Xe(),pA=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Zte.SERVER_SUFFIX.ADMIN,this.password=r}};H0.exports=pA});var nh=g((aOe,F0)=>{"use strict";var Hc=require("path"),th=require("fs-extra"),ere=L0(),tre=U0(),rre=B0(),nre=G0(),mA=Cr(),qc=K(),qr=ut(),eh=D(),f_=Xe(),{CONFIG_PARAMS:St}=eh,xc=x(),E_=X(),q0=ui(),SA=pt(),Gc="clustering",sre=1e4,x0=50;F0.exports={generateNatsConfig:ore,removeNatsConfig:are,getHubConfigPath:ire};function ire(){let e=E_.get(St.ROOTPATH);return Hc.join(e,Gc,f_.NATS_CONFIG_FILES.HUB_SERVER)}a(ire,"getHubConfigPath");async function ore(e=!1,t=void 0){E_.initSync();let r=E_.get(St.ROOTPATH),n=Hc.join(r,Gc,f_.PID_FILES.HUB),s=Hc.join(r,Gc,f_.PID_FILES.LEAF),i=qr.getConfigFromFile(St.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Hc.join(r,Gc,f_.NATS_CONFIG_FILES.HUB_SERVER),c=Hc.join(r,Gc,f_.NATS_CONFIG_FILES.LEAF_SERVER),l=qr.getConfigFromFile(St.CLUSTERING_TLS_CERTIFICATE),_=qr.getConfigFromFile(St.CLUSTERING_TLS_PRIVATEKEY),u=qr.getConfigFromFile(St.CLUSTERING_TLS_CERT_AUTH),d=qr.getConfigFromFile(St.CLUSTERING_TLS_INSECURE),f=qr.getConfigFromFile(St.CLUSTERING_TLS_VERIFY),E=qr.getConfigFromFile(St.CLUSTERING_NODENAME),h=qr.getConfigFromFile(St.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await SA.checkNATSServerInstalled()||rh("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await mA.listUsers(),S=qr.getConfigFromFile(St.CLUSTERING_USER),R=await mA.getClusterUser();(qc.isEmpty(R)||R.active!==!0)&&rh(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await ZE(St.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await ZE(St.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await ZE(St.CLUSTERING_HUBSERVER_NETWORK_PORT),await ZE(St.CLUSTERING_LEAFSERVER_NETWORK_PORT));let T=[],A=[];for(let[z,J]of m.entries())J.role.role===eh.ROLE_TYPES_ENUM.CLUSTER_USER&&J.active&&(T.push(new nre(J.username,q0.decrypt(J.hash))),A.push(new rre(J.username,q0.decrypt(J.hash))));let L=[],{hub_routes:U}=qr.getClusteringRoutes();if(!qc.isEmptyOrZeroLength(U))for(let z of U)L.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${z.host}:${z.port}`);let v=new ere(qr.getConfigFromFile(St.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,l,_,u,d,f,h,qr.getConfigFromFile(St.CLUSTERING_HUBSERVER_CLUSTER_NAME),qr.getConfigFromFile(St.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),L,T,A);u==null&&(delete v.tls.ca_file,delete v.leafnodes.tls.ca_file),t=qc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===eh.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await th.writeJson(o,v),xc.trace(`Hub server config written to ${o}`));let k=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,H=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,j=new tre(qr.getConfigFromFile(St.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[k],[H],T,A,l,_,u,d);u==null&&delete j.tls.ca_file,(t===void 0||t===eh.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await th.writeJson(c,j),xc.trace(`Leaf server config written to ${c}`))}a(ore,"generateNatsConfig");async function ZE(e){let t=E_.get(e);return qc.isEmpty(t)&&rh(`port undefined for '${e}'`),await qc.isPortTaken(t)&&rh(`'${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(ZE,"isPortAvailable");function rh(e){let t=`Error generating clustering config: ${e}`;xc.error(t),console.error(t),process.exit(1)}a(rh,"generateNatsConfigError");async function are(e){let{port:t,config_file:r}=SA.getServerConfig(e),{username:n,decrypt_hash:s}=await mA.getClusterUser(),i=0,o=2e3;for(;i<x0;){try{let u=await SA.createConnection(t,n,s,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){xc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=x0)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let _=o*(i*2);_>3e4&&xc.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await qc.async_set_timeout(_)}let c="0".repeat(sre),l=Hc.join(E_.get(St.ROOTPATH),Gc,r);await th.writeFile(l,c),await th.remove(l),xc.notify(e,"started.")}a(are,"removeNatsConfig")});var W0=g((lOe,K0)=>{"use strict";var fn=X(),cre=oa(),me=D(),h_=Xe(),gi=require("path"),{PACKAGE_ROOT:ih}=D(),k0=X(),sh=K(),Fc="/dev/null",lre=gi.join(ih,"launchServiceScripts"),$0=gi.join(ih,"utility/scripts"),ure=gi.join($0,me.HDB_RESTART_SCRIPT),V0=gi.resolve(ih,"dependencies",`${process.platform}-${process.arch}`,h_.NATS_BINARY_NAME);function Y0(){let t=cre.licenseSearch().ram_allocation||me.RAM_ALLOCATION_ENUM.DEFAULT,r=me.MEM_SETTING_KEY+t,n={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return sh.noBootFile()&&(n[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=sh.getEnvCliRootPath()),{name:me.PROCESS_DESCRIPTORS.HDB,script:me.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:ih}}a(Y0,"generateMainServerConfig");var _re=9930;function dre(){fn.initSync(!0);let e=fn.get(me.CONFIG_PARAMS.ROOTPATH),t=gi.join(e,"clustering",h_.NATS_CONFIG_FILES.HUB_SERVER),r=gi.join(fn.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=k0.get(me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=h_.LOG_LEVEL_FLAGS[fn.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==_re?"-"+n:""),script:V0,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return fn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Fc,i.error_file=Fc),i}a(dre,"generateNatsHubServerConfig");var fre=9940;function Ere(){fn.initSync(!0);let e=fn.get(me.CONFIG_PARAMS.ROOTPATH),t=gi.join(e,"clustering",h_.NATS_CONFIG_FILES.LEAF_SERVER),r=gi.join(fn.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=k0.get(me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=h_.LOG_LEVEL_FLAGS[fn.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==fre?"-"+n:""),script:V0,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return fn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Fc,i.error_file=Fc),i}a(Ere,"generateNatsLeafServerConfig");function hre(){fn.initSync();let e=gi.join(fn.get(me.CONFIG_PARAMS.LOGGING_ROOT),me.LOG_NAMES.HDB),t={name:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:me.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:lre,autorestart:!1};return fn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Fc,t.error_file=Fc),t}a(hre,"generateClusteringUpgradeV4ServiceConfig");function pre(){let e={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.RESTART_HDB};return sh.noBootFile()&&(e[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=sh.getEnvCliRootPath()),{...{name:me.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:$0},script:ure}}a(pre,"generateRestart");function mre(){return{apps:[Y0()]}}a(mre,"generateAllServiceConfigs");K0.exports={generateAllServiceConfigs:mre,generateMainServerConfig:Y0,generateRestart:pre,generateNatsHubServerConfig:dre,generateNatsLeafServerConfig:Ere,generateClusteringUpgradeV4ServiceConfig:hre}});var kc=g((dOe,oB)=>{"use strict";var He=D(),Sre=K(),Ai=nh(),oh=pt(),Ri=Xe(),mo=W0(),ah=X(),So=x(),Tre=Ti(),{startWorker:Q0,onMessageFromWorkers:gre}=et(),Rre=mi(),_Oe=require("util"),Are=require("child_process"),Ore=require("fs"),{execFile:bre}=Are,Ce;oB.exports={enterPM2Mode:Nre,start:To,stop:TA,reload:z0,restart:J0,list:gA,describe:Z0,connect:Oi,kill:Dre,startAllServices:Lre,startService:RA,getUniqueServicesList:eB,restartAllServices:Pre,isServiceRegistered:tB,reloadStopStart:rB,restartHdb:X0,deleteProcess:wre,startClusteringProcesses:sB,startClusteringThreads:iB,isHdbRestartRunning:Cre,isClusteringRunning:Ure,stopClustering:Mre,reloadClustering:vre};var p_=!1;gre(e=>{e.type==="restart"&&ah.initSync(!0)});function Nre(){p_=!0}a(Nre,"enterPM2Mode");function Oi(){return Ce||(Ce=require("pm2")),new Promise((e,t)=>{Ce.connect((r,n)=>{So.setupConsoleLogging(),r&&t(r),e(n)})})}a(Oi,"connect");var xr,yre=10,j0;function To(e,t=!1){if(p_)return Ire(e);let r=bre(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=xr.indexOf(r);o>-1&&xr.splice(o,1),!j0&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<yre&&(Ore.existsSync(Ai.getHubConfigPath())?To(e):(await Ai.generateNatsConfig(!0),To(e),await new Promise(c=>setTimeout(c,3e3)),await Ai.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ai.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=ah.get(He.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,_=0,u;for(;l=c.exec(i);){if(l.index&&Ri.LOG_LEVEL_HIERARCHY[o]>=Ri.LOG_LEVEL_HIERARCHY[u||"info"]){let E=u===Ri.LOG_LEVELS.ERR||u===Ri.LOG_LEVELS.WRN?So.OUTPUTS.STDERR:So.OUTPUTS.STDOUT;So.logCustomLevel(u||"info",E,n,i.slice(_,l.index).trim())}let[d,f]=l;_=l.index+d.length,u=Ri.LOG_LEVELS[f]}if(Ri.LOG_LEVEL_HIERARCHY[o]>=Ri.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===Ri.LOG_LEVELS.ERR||u===Ri.LOG_LEVELS.WRN?So.OUTPUTS.STDERR:So.OUTPUTS.STDOUT;So.logCustomLevel(u||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),xr=[],!xr&&!t){let i=a(()=>{j0=!0,xr&&(xr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}xr.push(r)}a(To,"start");function Ire(e){return new Promise(async(t,r)=>{try{await Oi()}catch(n){r(n)}Ce.start(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(Ire,"startWithPM2");function TA(e){if(!p_){for(let t of xr||[])t.name===e&&(xr.splice(xr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Oi()}catch(n){r(n)}Ce.stop(e,async(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.delete(e,(i,o)=>{i&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(o)})})})}a(TA,"stop");function z0(e){return new Promise(async(t,r)=>{try{await Oi()}catch(n){r(n)}Ce.reload(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(z0,"reload");function J0(e){if(!p_)for(let t of xr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Oi()}catch(n){r(n)}Ce.restart(e,(n,s)=>{Ce.disconnect(),t(s)})})}a(J0,"restart");function wre(e){return new Promise(async(t,r)=>{try{await Oi()}catch(n){r(n)}Ce.delete(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(wre,"deleteProcess");async function X0(){await To(mo.generateRestart())}a(X0,"restartHdb");async function Cre(){let e=await gA();for(let t in e)if(e[t].name===He.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Cre,"isHdbRestartRunning");function gA(){return new Promise(async(e,t)=>{try{await Oi()}catch(r){t(r)}Ce.list((r,n)=>{r&&(Ce.disconnect(),t(r)),Ce.disconnect(),e(n)})})}a(gA,"list");function Z0(e){return new Promise(async(t,r)=>{try{await Oi()}catch(n){r(n)}Ce.describe(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(Z0,"describe");function Dre(){if(!p_){for(let e of xr||[])e.kill();xr=[];return}return new Promise(async(e,t)=>{try{await Oi()}catch(r){t(r)}Ce.killDaemon((r,n)=>{r&&(Ce.disconnect(),t(r)),Ce.disconnect(),e(n)})})}a(Dre,"kill");async function Lre(){try{await sB(),await iB(),await To(mo.generateAllServiceConfigs())}catch(e){throw Ce?.disconnect(),e}}a(Lre,"startAllServices");async function RA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case He.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=mo.generateMainServerConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=mo.generateNatsIngestServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=mo.generateNatsReplyServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=mo.generateNatsHubServerConfig(),await To(r,t),await Ai.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=mo.generateNatsLeafServerConfig(),await To(r,t),await Ai.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=mo.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await To(r)}catch(r){throw Ce?.disconnect(),r}}a(RA,"startService");async function eB(){try{let e=await gA(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Ce?.disconnect(),e}}a(eB,"getUniqueServicesList");async function Pre(e=[]){try{let t=!1,r=await eB();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===He.PROCESS_DESCRIPTORS.HDB?t=!0:await J0(o))}t&&await rB(He.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ce?.disconnect(),t}}a(Pre,"restartAllServices");async function tB(e){if(xr?.find(r=>r.name===e))return!0;let t=await Rre.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(tB,"isServiceRegistered");async function rB(e){let t=ah.get(He.CONFIG_PARAMS.THREADS_COUNT)??ah.get(He.CONFIG_PARAMS.THREADS),r=await Z0(e),n=Sre.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await TA(e),await RA(e)):e===He.PROCESS_DESCRIPTORS.HDB?await X0():await z0(e)}a(rB,"reloadStopStart");var nB;async function sB(e=!1){for(let t in He.CLUSTERING_PROCESSES){let r=He.CLUSTERING_PROCESSES[t];await RA(r,e)}}a(sB,"startClusteringProcesses");async function iB(){nB=Q0(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await oh.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await oh.updateLocalStreams();let e=await Tre.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===He.PRE_4_0_0_VERSION){So.info("Starting clustering upgrade 4.0.0 process"),Q0(He.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(iB,"startClusteringThreads");async function Mre(){for(let e in He.CLUSTERING_PROCESSES)if(e!==He.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===He.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await nB.terminate();else{let t=He.CLUSTERING_PROCESSES[e];await TA(t)}}a(Mre,"stopClustering");async function Ure(){for(let e in He.CLUSTERING_PROCESSES){let t=He.CLUSTERING_PROCESSES[e];if(await tB(t)===!1)return!1}return!0}a(Ure,"isClusteringRunning");async function vre(){await Ai.generateNatsConfig(!0),await oh.reloadNATSHub(),await oh.reloadNATSLeaf(),await Ai.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ai.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(vre,"reloadClustering")});var uh={};Fe(uh,{compactOnStart:()=>Bre,copyDb:()=>dB});async function Bre(){S_.notify("Running compact on start"),console.log("Running compact on start");let e=(0,AA.get)(go.CONFIG_PARAMS.ROOTPATH),t=new Map,r=Lr();try{for(let n in r){if(n==="system")continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,ch.join)(e,"backup",n+".mdb"),o=(0,ch.join)(e,go.DATABASES_DIR_NAME,n+"-copy.mdb"),c=await aB(n);console.log("Database",n,"before compact has a total record count of",c),t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await dB(n,o),console.log("Backing up",n,"to",i),await(0,ya.move)(s,i,{overwrite:!0})}m_();for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,ya.move)(i,s,{overwrite:!0}),await(0,ya.remove)((0,ch.join)(e,go.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));m_()}catch(n){S_.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,OA.updateConfigValue)(go.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,ya.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw m_(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await aB(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
12
12
  Total record count before compaction: ${i}, total after: ${c}.
13
- Database backup has not been removed and can be found here: ${s}`;S_.error(l),console.error(l)}(0,gA.get)(To.CONFIG_PARAMS.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,Ia.remove)(s))}(0,RA.updateConfigValue)(To.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1)}async function iB(e){let t=await(0,lB.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function uB(e,t){console.log("copyDb start");let r=Dr()[e],n;for(let f in r){n=r[f].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,oB.open)(new aB.default(t)),c=o.openDB(ch.INTERNAL_DBIS_NAME),l,_=0;for(let{key:f,value:E}of s.getRange({})){let h=E.is_hash_attribute||E.isPrimaryKey,m,S;if(h&&(m=E.compression,S=dh(),S?E.compression=S:delete E.compression,m?.dictionary?.toString()===S?.dictionary?.toString()&&(m=null,S=null)),c.put(f,E),!(h||E.indexed))continue;let R=new cB.default(!h,h);R.encoding="binary",R.compression=m;let g=n.openDB(f,R);g.decoder=null,R.compression=S;let A=o.openDB(f,R);A.encoder=null,console.log("copying",f,"from",e,"to",t),await d(g,A,h)}let u=n.openDB(ch.AUDIT_STORE_NAME,_h);console.log("copying audit log"),d(i,u,!1);async function d(f,E,h){let m=0,S=0;for(let{key:R,value:g,version:A}of f.getRange({start:null,versions:h}))l=E.put(R,g,A),m++,S+=(R.length||10)+g.length,_++>5e3&&(await l,console.log("copied",m,"entries",S,"bytes"),_=0);console.log("finish copying, copied",m,"entries",S,"bytes")}a(d,"copyDbi"),await l,o.close(),console.log("copied database "+e+" to "+t)}var oB,ah,Ia,gA,aB,cB,ch,To,lB,RA,S_,uh=Oe(()=>{ge();oB=require("lmdb"),ah=require("path"),Ia=require("fs-extra"),gA=B(X()),aB=B(iu()),cB=B(su()),ch=B(at()),To=B(D());Zi();lB=B(_i()),RA=B(ut()),S_=B(x());a(vre,"compactOnStart");a(iB,"getTotalDBRecordCount");a(uB,"copyDb")});var wa=T((pOe,mB)=>{"use strict";var Bre=require("minimist"),{isMainThread:OA,parentPort:fB}=require("worker_threads"),nt=D(),{PROCESS_DESCRIPTORS_VALIDATE:T_}=nt,Hs=x(),bA=K(),Eh=rh(),fh=pt(),hOe=Xe(),EB=ut(),Gs=$c(),_B=mi(),{compactOnStart:Hre}=(uh(),ie(lh)),Gre=Ji(),{restartWorkers:hh,onMessageByType:qre}=et(),{handleHDBError:xre,hdb_errors:Fre}=oe(),{HTTP_STATUS_CODES:kre}=Fre,R_=X();R_.initSync();var g_=`Restarting HarperDB. This may take up to ${nt.RESTART_TIMEOUT_MS/1e3} seconds.`,$re="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",dB="Clustering is not enabled so cannot be restarted",Vre="Invalid service",Vc,Bn;mB.exports={restart:hB,restartService:NA};OA&&qre(nt.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?NA({service:e.workerType}):hB({operation:"restart"})});async function hB(e){Bn=Object.keys(e).length===0,Vc=await Gs.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR);let t=Bre(process.argv);if(t.service){await NA(t);return}if(Bn&&!Vc){console.error($re);return}if(Bn&&console.log(g_),Vc){Gs.enterPM2Mode(),Hs.notify(g_);let r=Gre(Object.keys(nt.CONFIG_PARAM_MAP),!0);return bA.isEmptyOrZeroLength(Object.keys(r))||EB.updateConfigValue(void 0,void 0,r,!0,!0),Yre(),g_}return OA?(Hs.notify(g_),R_.get(nt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Hre(),setTimeout(()=>{hh()},50)):fB.postMessage({type:nt.ITC_EVENT_TYPES.RESTART}),g_}a(hB,"restart");async function NA(e){let{service:t}=e;if(nt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw xre(new Error,Vre,kre.BAD_REQUEST,void 0,void 0,!0);if(Vc=await Gs.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR),!OA)return fB.postMessage({type:nt.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case T_.clustering:if(!R_.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=dB;break}Bn&&console.log("Restarting clustering"),Hs.notify("Restarting clustering"),await pB();break;case T_.clustering_config:case T_["clustering config"]:if(!R_.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=dB;break}Bn&&console.log("Restarting clustering_config"),Hs.notify("Restarting clustering_config"),await Gs.reloadClustering();break;case"custom_functions":case"custom functions":case T_.harperdb:case T_.http_workers:if(Bn&&!Vc){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}Bn&&console.log("Restarting http_workers"),Hs.notify("Restarting http_workers"),Bn?await Gs.restart(nt.HDB_PROC_DESCRIPTOR):setTimeout(()=>{hh("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Hs.error(r),Bn&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(NA,"restartService");async function Yre(){await pB(),await Gs.restart(nt.HDB_PROC_DESCRIPTOR),await bA.async_set_timeout(2e3),R_.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await AA(),Bn&&(await fh.closeConnection(),process.exit(0))}a(Yre,"restartPM2Mode");async function pB(){if(!EB.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await _B.getHDBProcessInfo()).clustering.length===0)Hs.trace("Clustering not running, restart will start clustering services"),await Eh.generateNatsConfig(!0),await Gs.startClusteringProcesses(),await Gs.startClusteringThreads(),await AA(),Bn&&await fh.closeConnection();else{await Eh.generateNatsConfig(!0),Vc?(Hs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Gs.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Gs.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await _B.getHDBProcessInfo()).clustering.forEach(s=>{Hs.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await bA.async_set_timeout(3e3),await AA(),await fh.updateLocalStreams(),Bn&&await fh.closeConnection(),Hs.trace("Restart clustering restarting ingest and reply service threads");let t=hh(nt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=hh(nt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(pB,"restartClustering");async function AA(){await Eh.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Eh.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(AA,"removeNatsConfig")});var wB=T((TOe,IB)=>{"use strict";var SOe=require("lodash"),xr=D(),{handleHDBError:SB,hdb_errors:Kre}=oe(),{HDB_ERROR_MSGS:Wre,HTTP_STATUS_CODES:Qre}=Kre,yA=x();IB.exports={getRolePermissions:zre};var Ca=Object.create(null),jre=a(e=>({key:e,perms:{}}),"perms_template_obj"),AB=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),OB=a((e=!1,t=!1,r=!1,n=!1)=>({[xr.PERMS_CRUD_ENUM.READ]:e,[xr.PERMS_CRUD_ENUM.INSERT]:t,[xr.PERMS_CRUD_ENUM.UPDATE]:r,[xr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),IA=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...OB(t,r,n,s)}),"table_perms_template"),TB=a((e,t=OB())=>({attribute_name:e,describe:yB(t),[A_]:t[A_],[wA]:t[wA],[CA]:t[CA]}),"attr_perms_template"),gB=a((e,t=!1)=>({attribute_name:e,describe:t,[A_]:t}),"timestamp_attr_perms_template"),{READ:A_,INSERT:wA,UPDATE:CA}=xr.PERMS_CRUD_ENUM,bB=Object.values(xr.PERMS_CRUD_ENUM),NB=[A_,wA,CA];function zre(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[xr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Ca[t]&&Ca[t].key===n)return Ca[t].perms;let s=Jre(e,r);return Ca[t]?Ca[t].key=n:Ca[t]=jre(n),Ca[t].perms=s,s}catch(r){if(!e[xr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[xr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<xr.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw yA.error(n),yA.debug(r),SB(new Error,Wre.OUTDATED_PERMS_TRANSLATION_ERROR,Qre.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
14
- ${r.stack}`;throw yA.error(n),SB(new Error)}}}a(zre,"getRolePermissions");function Jre(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[xr.SYSTEM_SCHEMA_NAME]=n[xr.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=Xre(t[i]);return}r[i]=AB(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],_=Zre(c,l);r[i].describe||bB.forEach(u=>{_[u]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=IA()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=IA()})}),r}a(Jre,"translateRolePermissions");function Xre(e){let t=AB(!0);return Object.keys(e).forEach(r=>{t.tables[r]=IA(!0,!0,!0,!0,!0)}),t}a(Xre,"createStructureUserPermissions");function Zre(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,u)=>{let{attribute_name:d}=u,f=u;return xr.TIME_STAMP_NAMES.includes(d)&&(f=gB(d,u[A_])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=TB(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let u=i[_];u.describe=yB(u),s.attribute_permissions.push(u),c||ene(u,l)}else if(_!==o){let u;xr.TIME_STAMP_NAMES.includes(_)?u=gB(_):u=TB(_),s.attribute_permissions.push(u)}}),c||s.attribute_permissions.push(l),s.describe=RB(s),s}else return e.describe=RB(e),e}a(Zre,"getTableAttrPerms");function RB(e){return bB.filter(t=>e[t]).length>0}a(RB,"getSchemaTableDescribePerm");function yB(e){return NB.filter(t=>e[t]).length>0}a(yB,"getAttributeDescribePerm");function ene(e,t){NB.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(ene,"checkForHashPerms")});var CB={};Fe(CB,{Resources:()=>ph,keyArrayToString:()=>Yc,resetResources:()=>tne,resources:()=>go});function tne(){return go=new ph}function Yc(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var ph,go,O_=Oe(()=>{fa();ph=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,l]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let u=this.get(c.slice(0,_));u&&(u.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),l=this.get(c);if(l){if(l.relativeURL=t.slice(n),!l.hasSubPaths)return l;s=l}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),s?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return Ze(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(tne,"resetResources");a(Yc,"keyArrayToString")});var DB={};Fe(DB,{Headers:()=>Ro,appendHeader:()=>DA});function DA(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var Ro,b_=Oe(()=>{Ro=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]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(DA,"appendHeader")});var N_={};Fe(N_,{authentication:()=>GB,bypassAuth:()=>cne,login:()=>une,logout:()=>_ne,start:()=>lne});function cne(){HB=!0}async function GB(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?ine?sne:[]:nne?rne:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Ro([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return mh&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),mh&&o.push("Access-Control-Allow-Credentials","true")}}let l,_;if(mh){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.indexOf(E);if(h>=0){let m=s.indexOf(";",h),S=s.indexOf("=",h);l=s.slice(S+1,m===-1?s.length:m),_=await PB.get(l)}e.session=_||(_={})}e.user=null;let u=a((E,h,m)=>{let S=new Kc.AuthAuditLog(E,h,Yt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=m,l&&(S.session_id=l),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===Yt.AUTH_AUDIT_STATUS.SUCCESS?LB.notify(S):LB.error(S)},"authAuditLog");if(e.mtlsConfig&&e.authorized){let E=e.mtlsConfig.user;E!==null?((E===void 0||E==="Common Name"||E==="CN")&&(E=e.peerCertificate.subject.CN),e.user=await ct.getUser(E,null,null),u(E,Yt.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Kc.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=Da.get(n),!d){let E=n.indexOf(" "),h=n.slice(0,E),m=n.slice(E+1),S,R;try{switch(h){case"Basic":let g=atob(m),A=g.indexOf(":");S=g.slice(0,A),R=g.slice(A+1),d=S||R?await ct.getUser(S,R,e):null;break;case"Bearer":try{d=await(0,Sh.validateOperationToken)(m)}catch(P){if(P.message==="invalid token")try{return await(0,Sh.validateRefreshToken)(m),c({status:-1})}catch{throw P}}break}}catch(g){return ane&&(Da.get(m)||(Da.set(m,m),u(S,Yt.AUTH_AUDIT_STATUS.FAILURE,h))),c({status:401,body:Ao({error:g.message},e)})}Da.set(n,d),one&&u(d.username,Yt.AUTH_AUDIT_STATUS.SUCCESS,h)}e.user=d}else _?.user?e.user=await ct.getUser(_.user,null,e):(HB&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,UB.getSuperUser)());mh&&(e.session.update=function(E){if(!l){l=(0,vB.v4)();let m=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",m):f?.headers?.set&&f.headers.set("Set-Cookie",m)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=l,PB.put(E)},e.login=async function(E,h){e.user=await ct.getUser(E,h,e),e.session.update({user:e.user.username})},(d&&!_||_?.user?.username!==d?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let f=await t(e);return f&&(f.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&go.loginPath?(f.status=302,f.headers.set("Location",go.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(l){throw c(l)}function c(l){let _=o.length;if(_>0){let u=l.headers;u||(l.headers=u=new Ro);for(let d=0;d<_;){let f=o[d++];u.set(f,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function lne({server:e,port:t}){e.request(GB,{port:t||"all"}),MB||(MB=!0,setInterval(()=>{Da=new Map},Hn.get(Yt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),BB.user.addListener(()=>{Da=new Map}))}async function une(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 _ne(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var UB,Sh,vB,Hn,Yt,Kc,BB,LB,rne,nne,sne,ine,PB,mh,HB,one,ane,Da,MB,Th=Oe(()=>{UB=B(wr());Or();O_();Sh=B(e_());ge();vB=require("uuid"),Hn=B(X()),Yt=B(D()),Kc=B(x()),BB=B(Su());b_();Wc();LB=(0,Kc.loggerWithTag)("auth-event");Hn.initSync();rne=Hn.get(Yt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),nne=Hn.get(Yt.CONFIG_PARAMS.HTTP_CORS),sne=Hn.get(Yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),ine=Hn.get(Yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),PB=Et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),mh=Hn.get(Yt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,HB=Hn.get(Yt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,one=Hn.get(Yt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,ane=Hn.get(Yt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Da=new Map;ct.onInvalidatedUser(()=>{Da=new Map});a(cne,"bypassAuth");a(GB,"authentication");a(lne,"start");a(une,"login");a(_ne,"logout")});var YB=T((DOe,VB)=>{"use strict";var De=require("joi"),qB=require("fs-extra"),xB=require("path"),Ni=tt(),FB=X(),kB=D(),$B=x(),{hdb_errors:dne}=oe(),{HDB_ERROR_MSGS:dr}=dne,bi=/^[a-zA-Z0-9-_]+$/;VB.exports={getDropCustomFunctionValidator:Ene,setCustomFunctionValidator:hne,addComponentValidator:Tne,dropCustomFunctionProjectValidator:gne,packageComponentValidator:Rne,deployComponentValidator:Ane,setComponentFileValidator:pne,getComponentFileValidator:Sne,dropComponentFileValidator:mne};function gh(e,t,r){try{let n=FB.get(kB.CONFIG_PARAMS.COMPONENTSROOT),s=xB.join(n,t);return qB.existsSync(s)?e?t:r.message(dr.PROJECT_EXISTS):e?r.message(dr.NO_PROJECT):t}catch(n){return $B.error(n),r.message(dr.VALIDATION_ERR)}}a(gh,"checkProjectExists");function y_(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(y_,"checkFilePath");function fne(e,t,r,n){try{let s=FB.get(kB.CONFIG_PARAMS.COMPONENTSROOT),i=xB.join(s,e,t,r+".js");return qB.existsSync(i)?r:n.message(dr.NO_FILE)}catch(s){return $B.error(s),n.message(dr.VALIDATION_ERR)}}a(fne,"checkFileExists");function Ene(e){let t=De.object({project:De.string().pattern(bi).custom(gh.bind(null,!0)).required().messages({"string.pattern.base":dr.BAD_PROJECT_NAME}),type:De.string().valid("helpers","routes").required(),file:De.string().pattern(bi).custom(fne.bind(null,e.project,e.type)).custom(y_).required().messages({"string.pattern.base":dr.BAD_FILE_NAME})});return Ni.validateBySchema(e,t)}a(Ene,"getDropCustomFunctionValidator");function hne(e){let t=De.object({project:De.string().pattern(bi).custom(gh.bind(null,!0)).required().messages({"string.pattern.base":dr.BAD_PROJECT_NAME}),type:De.string().valid("helpers","routes").required(),file:De.string().custom(y_).required(),function_content:De.string().required()});return Ni.validateBySchema(e,t)}a(hne,"setCustomFunctionValidator");function pne(e){let t=De.object({project:De.string().pattern(bi).required().messages({"string.pattern.base":dr.BAD_PROJECT_NAME}),file:De.string().custom(y_).required(),payload:De.string().allow("").optional(),encoding:De.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ni.validateBySchema(e,t)}a(pne,"setComponentFileValidator");function mne(e){let t=De.object({project:De.string().pattern(bi).required().messages({"string.pattern.base":dr.BAD_PROJECT_NAME}),file:De.string().custom(y_).optional()});return Ni.validateBySchema(e,t)}a(mne,"dropComponentFileValidator");function Sne(e){let t=De.object({project:De.string().required(),file:De.string().custom(y_).required(),encoding:De.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ni.validateBySchema(e,t)}a(Sne,"getComponentFileValidator");function Tne(e){let t=De.object({project:De.string().pattern(bi).custom(gh.bind(null,!1)).required().messages({"string.pattern.base":dr.BAD_PROJECT_NAME})});return Ni.validateBySchema(e,t)}a(Tne,"addComponentValidator");function gne(e){let t=De.object({project:De.string().pattern(bi).custom(gh.bind(null,!0)).required().messages({"string.pattern.base":dr.BAD_PROJECT_NAME})});return Ni.validateBySchema(e,t)}a(gne,"dropCustomFunctionProjectValidator");function Rne(e){let t=De.object({project:De.string().pattern(bi).required().messages({"string.pattern.base":dr.BAD_PROJECT_NAME}),skip_node_modules:De.boolean()});return Ni.validateBySchema(e,t)}a(Rne,"packageComponentValidator");function Ane(e){let t=De.object({project:De.string().pattern(bi).required().messages({"string.pattern.base":dr.BAD_PROJECT_NAME}),payload:De.string().optional().messages({"string.pattern.base":dr.BAD_PACKAGE}),package:De.string().optional()});return Ni.validateBySchema(e,t)}a(Ane,"deployComponentValidator")});var bh=T((POe,XB)=>{"use strict";var Rh=require("joi"),Ah=require("path"),KB=require("fs-extra"),{exec:One}=require("child_process"),bne=require("util"),WB=bne.promisify(One),I_=D(),{handleHDBError:Qc,hdb_errors:Nne}=oe(),{HTTP_STATUS_CODES:jc}=Nne,w_=X(),yne=tt(),zc=x();w_.initSync();var LA=w_.get(I_.CONFIG_PARAMS.COMPONENTSROOT),QB="npm install --omit=dev --json",Ine=`${QB} --dry-run`;XB.exports={installModules:Lne,auditModules:Pne,installAllRootModules:wne,uninstallRootModule:Cne,linkHarperdb:Dne};async function wne(e=!1){await Oh(),await C_(e?"npm install --ignore-scripts":"npm install",w_.get(I_.CONFIG_PARAMS.ROOTPATH))}a(wne,"installAllRootModules");async function Cne(e){await C_(`npm uninstall ${e}`,w_.get(I_.CONFIG_PARAMS.ROOTPATH))}a(Cne,"uninstallRootModule");async function Dne(){await Oh(),await C_(`npm link ${I_.PACKAGE_ROOT}`,w_.get(I_.CONFIG_PARAMS.ROOTPATH))}a(Dne,"linkHarperdb");async function C_(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await WB(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
15
- `,""))}return n&&!n.includes("Debugger listening")&&zc.error("Error running NPM command:",e,n),zc.trace(r,n),r?.replace(`
16
- `,"")}a(C_,"runCommand");async function Lne(e){zc.info(`starting installModules for request: ${e}`);let t=JB(e);if(t)throw Qc(t,t.message,jc.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?Ine:QB;await Oh(),await zB(r);let i={};for(let o=0,c=r.length;o<c;o++){let l=r[o];i[l]={npm_output:null,npm_error:null};let _=Ah.join(LA,l),u,d=null;try{let{stdout:f,stderr:E}=await WB(s,{cwd:_});u=f?f.replace(`
13
+ Database backup has not been removed and can be found here: ${s}`;S_.error(l),console.error(l)}(0,AA.get)(go.CONFIG_PARAMS.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,ya.remove)(s))}(0,OA.updateConfigValue)(go.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1)}async function aB(e){let t=await(0,_B.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function dB(e,t){console.log("copyDb start");let r=Lr()[e],n;for(let d in r){n=r[d].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,cB.open)(new lB.default(t)),c=o.openDB(lh.INTERNAL_DBIS_NAME),l,_=0,u=s.useReadTransaction();try{for(let{key:E,value:h}of s.getRange({transaction:u})){let m=h.is_hash_attribute||h.isPrimaryKey,S,R;if(m&&(S=h.compression,R=fh(),R?h.compression=R:delete h.compression,S?.dictionary?.toString()===R?.dictionary?.toString()&&(S=null,R=null)),c.put(E,h),!(m||h.indexed))continue;let T=new uB.default(!m,m);T.encoding="binary",T.compression=S;let A=n.openDB(E,T);A.decoder=null,T.compression=R;let L=o.openDB(E,T);L.encoder=null,console.log("copying",E,"from",e,"to",t),await f(A,L,m,u)}let d=n.openDB(lh.AUDIT_STORE_NAME,dh);console.log("copying audit log"),f(i,d,!1,u);async function f(E,h,m,S){let R=0,T=0;for(let{key:A,value:L,version:U}of E.getRange({start:null,versions:m,transaction:S}))l=h.put(A,L,U),R++,S.openTimer&&(S.openTimer=0),T+=(A?.length||10)+L.length,_++>5e3&&(await l,console.log("copied",R,"entries",T,"bytes"),_=0);console.log("finish copying, copied",R,"entries",T,"bytes")}a(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{u.done(),o.close()}}var cB,ch,ya,AA,lB,uB,lh,go,_B,OA,S_,_h=be(()=>{Re();cB=require("lmdb"),ch=require("path"),ya=require("fs-extra"),AA=B(X()),lB=B(iu()),uB=B(su()),lh=B(at()),go=B(D());eo();_B=B(_i()),OA=B(ut()),S_=B(x());a(Bre,"compactOnStart");a(aB,"getTotalDBRecordCount");a(dB,"copyDb")});var Ia=g((SOe,TB)=>{"use strict";var Hre=require("minimist"),{isMainThread:NA,parentPort:hB}=require("worker_threads"),nt=D(),{PROCESS_DESCRIPTORS_VALIDATE:T_}=nt,Gs=x(),yA=K(),hh=nh(),Eh=pt(),mOe=Xe(),pB=ut(),qs=kc(),fB=mi(),{compactOnStart:Gre}=(_h(),ie(uh)),qre=Xi(),{restartWorkers:ph,onMessageByType:xre}=et(),{handleHDBError:Fre,hdb_errors:kre}=oe(),{HTTP_STATUS_CODES:$re}=kre,R_=X();R_.initSync();var g_=`Restarting HarperDB. This may take up to ${nt.RESTART_TIMEOUT_MS/1e3} seconds.`,Vre="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",EB="Clustering is not enabled so cannot be restarted",Yre="Invalid service",$c,Hn;TB.exports={restart:mB,restartService:IA};NA&&xre(nt.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?IA({service:e.workerType}):mB({operation:"restart"})});async function mB(e){Hn=Object.keys(e).length===0,$c=await qs.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR);let t=Hre(process.argv);if(t.service){await IA(t);return}if(Hn&&!$c){console.error(Vre);return}if(Hn&&console.log(g_),$c){qs.enterPM2Mode(),Gs.notify(g_);let r=qre(Object.keys(nt.CONFIG_PARAM_MAP),!0);return yA.isEmptyOrZeroLength(Object.keys(r))||pB.updateConfigValue(void 0,void 0,r,!0,!0),Kre(),g_}return NA?(Gs.notify(g_),R_.get(nt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Gre(),setTimeout(()=>{ph()},50)):hB.postMessage({type:nt.ITC_EVENT_TYPES.RESTART}),g_}a(mB,"restart");async function IA(e){let{service:t}=e;if(nt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Fre(new Error,Yre,$re.BAD_REQUEST,void 0,void 0,!0);if($c=await qs.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR),!NA)return hB.postMessage({type:nt.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case T_.clustering:if(!R_.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=EB;break}Hn&&console.log("Restarting clustering"),Gs.notify("Restarting clustering"),await SB();break;case T_.clustering_config:case T_["clustering config"]:if(!R_.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=EB;break}Hn&&console.log("Restarting clustering_config"),Gs.notify("Restarting clustering_config"),await qs.reloadClustering();break;case"custom_functions":case"custom functions":case T_.harperdb:case T_.http_workers:if(Hn&&!$c){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}Hn&&console.log("Restarting http_workers"),Gs.notify("Restarting http_workers"),Hn?await qs.restart(nt.HDB_PROC_DESCRIPTOR):setTimeout(()=>{ph("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Gs.error(r),Hn&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(IA,"restartService");async function Kre(){await SB(),await qs.restart(nt.HDB_PROC_DESCRIPTOR),await yA.async_set_timeout(2e3),R_.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await bA(),Hn&&(await Eh.closeConnection(),process.exit(0))}a(Kre,"restartPM2Mode");async function SB(){if(!pB.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await fB.getHDBProcessInfo()).clustering.length===0)Gs.trace("Clustering not running, restart will start clustering services"),await hh.generateNatsConfig(!0),await qs.startClusteringProcesses(),await qs.startClusteringThreads(),await bA(),Hn&&await Eh.closeConnection();else{await hh.generateNatsConfig(!0),$c?(Gs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await qs.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await qs.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await fB.getHDBProcessInfo()).clustering.forEach(s=>{Gs.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await yA.async_set_timeout(3e3),await bA(),await Eh.updateLocalStreams(),Hn&&await Eh.closeConnection(),Gs.trace("Restart clustering restarting ingest and reply service threads");let t=ph(nt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=ph(nt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(SB,"restartClustering");async function bA(){await hh.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await hh.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(bA,"removeNatsConfig")});var DB=g((ROe,CB)=>{"use strict";var gOe=require("lodash"),Fr=D(),{handleHDBError:gB,hdb_errors:Wre}=oe(),{HDB_ERROR_MSGS:Qre,HTTP_STATUS_CODES:jre}=Wre,wA=x();CB.exports={getRolePermissions:Jre};var wa=Object.create(null),zre=a(e=>({key:e,perms:{}}),"perms_template_obj"),bB=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),NB=a((e=!1,t=!1,r=!1,n=!1)=>({[Fr.PERMS_CRUD_ENUM.READ]:e,[Fr.PERMS_CRUD_ENUM.INSERT]:t,[Fr.PERMS_CRUD_ENUM.UPDATE]:r,[Fr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),CA=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...NB(t,r,n,s)}),"table_perms_template"),RB=a((e,t=NB())=>({attribute_name:e,describe:wB(t),[A_]:t[A_],[DA]:t[DA],[LA]:t[LA]}),"attr_perms_template"),AB=a((e,t=!1)=>({attribute_name:e,describe:t,[A_]:t}),"timestamp_attr_perms_template"),{READ:A_,INSERT:DA,UPDATE:LA}=Fr.PERMS_CRUD_ENUM,yB=Object.values(Fr.PERMS_CRUD_ENUM),IB=[A_,DA,LA];function Jre(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[Fr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(wa[t]&&wa[t].key===n)return wa[t].perms;let s=Xre(e,r);return wa[t]?wa[t].key=n:wa[t]=zre(n),wa[t].perms=s,s}catch(r){if(!e[Fr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Fr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Fr.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw wA.error(n),wA.debug(r),gB(new Error,Qre.OUTDATED_PERMS_TRANSLATION_ERROR,jre.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
14
+ ${r.stack}`;throw wA.error(n),gB(new Error)}}}a(Jre,"getRolePermissions");function Xre(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Fr.SYSTEM_SCHEMA_NAME]=n[Fr.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=Zre(t[i]);return}r[i]=bB(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],_=ene(c,l);r[i].describe||yB.forEach(u=>{_[u]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=CA()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=CA()})}),r}a(Xre,"translateRolePermissions");function Zre(e){let t=bB(!0);return Object.keys(e).forEach(r=>{t.tables[r]=CA(!0,!0,!0,!0,!0)}),t}a(Zre,"createStructureUserPermissions");function ene(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,u)=>{let{attribute_name:d}=u,f=u;return Fr.TIME_STAMP_NAMES.includes(d)&&(f=AB(d,u[A_])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=RB(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let u=i[_];u.describe=wB(u),s.attribute_permissions.push(u),c||tne(u,l)}else if(_!==o){let u;Fr.TIME_STAMP_NAMES.includes(_)?u=AB(_):u=RB(_),s.attribute_permissions.push(u)}}),c||s.attribute_permissions.push(l),s.describe=OB(s),s}else return e.describe=OB(e),e}a(ene,"getTableAttrPerms");function OB(e){return yB.filter(t=>e[t]).length>0}a(OB,"getSchemaTableDescribePerm");function wB(e){return IB.filter(t=>e[t]).length>0}a(wB,"getAttributeDescribePerm");function tne(e,t){IB.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(tne,"checkForHashPerms")});var LB={};Fe(LB,{Resources:()=>mh,keyArrayToString:()=>Vc,resetResources:()=>rne,resources:()=>Ro});function rne(){return Ro=new mh}function Vc(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var mh,Ro,O_=be(()=>{da();mh=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,l]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let u=this.get(c.slice(0,_));u&&(u.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),l=this.get(c);if(l){if(l.relativeURL=t.slice(n),!l.hasSubPaths)return l;s=l}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),s?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return Ze(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(rne,"resetResources");a(Vc,"keyArrayToString")});var PB={};Fe(PB,{Headers:()=>Ao,appendHeader:()=>PA});function PA(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var Ao,b_=be(()=>{Ao=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]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(PA,"appendHeader")});var N_={};Fe(N_,{authentication:()=>xB,bypassAuth:()=>lne,login:()=>_ne,logout:()=>dne,start:()=>une});function lne(){qB=!0}async function xB(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?one?ine:[]:sne?nne:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Ao([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Sh&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Sh&&o.push("Access-Control-Allow-Credentials","true")}}let l,_;if(Sh){i||(i=r.host);let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let m of h)if(m.startsWith(E)){let S=m.indexOf(";");l=m.slice(E.length,S===-1?m.length:S),_=await UB.get(l);break}e.session=_||(_={})}let u=a((E,h,m)=>{let S=new Yc.AuthAuditLog(E,h,Yt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=m,l&&(S.session_id=l),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===Yt.AUTH_AUDIT_STATUS.SUCCESS?MB.notify(S):MB.error(S)},"authAuditLog");if(e.mtlsConfig&&e.authorized){let E=e.mtlsConfig.user;E!==null?((E===void 0||E==="Common Name"||E==="CN")&&(E=e.peerCertificate.subject.CN),e.user=await ct.getUser(E,null,null),u(E,Yt.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Yc.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=Ca.get(n),!d){let E=n.indexOf(" "),h=n.slice(0,E),m=n.slice(E+1),S,R;try{switch(h){case"Basic":let T=atob(m),A=T.indexOf(":");S=T.slice(0,A),R=T.slice(A+1),d=S||R?await ct.getUser(S,R,e):null;break;case"Bearer":try{d=await(0,Th.validateOperationToken)(m)}catch(L){if(L.message==="invalid token")try{return await(0,Th.validateRefreshToken)(m),c({status:-1})}catch{throw L}}break}}catch(T){return cne&&(Ca.get(m)||(Ca.set(m,m),u(S,Yt.AUTH_AUDIT_STATUS.FAILURE,h))),c({status:401,body:Da({error:T.message},e)})}Ca.set(n,d),ane&&u(d.username,Yt.AUTH_AUDIT_STATUS.SUCCESS,h)}e.user=d}else _?.user?e.user=await ct.getUser(_.user,null,e):(qB&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,BB.getSuperUser)());Sh&&(e.session.update=function(E){if(!l){l=(0,HB.v4)();let m=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",m):f?.headers?.set&&f.headers.set("Set-Cookie",m)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=l,UB.put(E)},e.login=async function(E,h){e.user=await ct.getUser(E,h,e),e.session.update({user:e.user.username})},(d&&!_||_?.user?.username!==d?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let f=await t(e);return f&&(f.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Ro.loginPath?(f.status=302,f.headers.set("Location",Ro.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(l){throw c(l)}function c(l){let _=o.length;if(_>0){let u=l.headers;u||(l.headers=u=new Ao);for(let d=0;d<_;){let f=o[d++];u.set(f,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function une({server:e,port:t}){e.http(xB,{port:t||"all"}),vB||(vB=!0,setInterval(()=>{Ca=new Map},Gn.get(Yt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),GB.user.addListener(()=>{Ca=new Map}))}async function _ne(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 dne(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var BB,Th,HB,Gn,Yt,Yc,GB,MB,nne,sne,ine,one,UB,Sh,qB,ane,cne,Ca,vB,gh=be(()=>{BB=B(Cr());br();O_();Th=B(e_());Re();HB=require("uuid"),Gn=B(X()),Yt=B(D()),Yc=B(x()),GB=B(Su());b_();Kc();MB=(0,Yc.loggerWithTag)("auth-event");Gn.initSync();nne=Gn.get(Yt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),sne=Gn.get(Yt.CONFIG_PARAMS.HTTP_CORS),ine=Gn.get(Yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),one=Gn.get(Yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),UB=Et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Sh=Gn.get(Yt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,qB=Gn.get(Yt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,ane=Gn.get(Yt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,cne=Gn.get(Yt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Ca=new Map;ct.onInvalidatedUser(()=>{Ca=new Map});a(lne,"bypassAuth");a(xB,"authentication");a(une,"start");a(_ne,"login");a(dne,"logout")});var WB=g((POe,KB)=>{"use strict";var De=require("joi"),FB=require("fs-extra"),kB=require("path"),Ni=tt(),$B=X(),VB=D(),YB=x(),{hdb_errors:fne}=oe(),{HDB_ERROR_MSGS:fr}=fne,bi=/^[a-zA-Z0-9-_]+$/;KB.exports={getDropCustomFunctionValidator:hne,setCustomFunctionValidator:pne,addComponentValidator:gne,dropCustomFunctionProjectValidator:Rne,packageComponentValidator:Ane,deployComponentValidator:One,setComponentFileValidator:mne,getComponentFileValidator:Tne,dropComponentFileValidator:Sne};function Rh(e,t,r){try{let n=$B.get(VB.CONFIG_PARAMS.COMPONENTSROOT),s=kB.join(n,t);return FB.existsSync(s)?e?t:r.message(fr.PROJECT_EXISTS):e?r.message(fr.NO_PROJECT):t}catch(n){return YB.error(n),r.message(fr.VALIDATION_ERR)}}a(Rh,"checkProjectExists");function y_(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(y_,"checkFilePath");function Ene(e,t,r,n){try{let s=$B.get(VB.CONFIG_PARAMS.COMPONENTSROOT),i=kB.join(s,e,t,r+".js");return FB.existsSync(i)?r:n.message(fr.NO_FILE)}catch(s){return YB.error(s),n.message(fr.VALIDATION_ERR)}}a(Ene,"checkFileExists");function hne(e){let t=De.object({project:De.string().pattern(bi).custom(Rh.bind(null,!0)).required().messages({"string.pattern.base":fr.BAD_PROJECT_NAME}),type:De.string().valid("helpers","routes").required(),file:De.string().pattern(bi).custom(Ene.bind(null,e.project,e.type)).custom(y_).required().messages({"string.pattern.base":fr.BAD_FILE_NAME})});return Ni.validateBySchema(e,t)}a(hne,"getDropCustomFunctionValidator");function pne(e){let t=De.object({project:De.string().pattern(bi).custom(Rh.bind(null,!0)).required().messages({"string.pattern.base":fr.BAD_PROJECT_NAME}),type:De.string().valid("helpers","routes").required(),file:De.string().custom(y_).required(),function_content:De.string().required()});return Ni.validateBySchema(e,t)}a(pne,"setCustomFunctionValidator");function mne(e){let t=De.object({project:De.string().pattern(bi).required().messages({"string.pattern.base":fr.BAD_PROJECT_NAME}),file:De.string().custom(y_).required(),payload:De.string().allow("").optional(),encoding:De.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ni.validateBySchema(e,t)}a(mne,"setComponentFileValidator");function Sne(e){let t=De.object({project:De.string().pattern(bi).required().messages({"string.pattern.base":fr.BAD_PROJECT_NAME}),file:De.string().custom(y_).optional()});return Ni.validateBySchema(e,t)}a(Sne,"dropComponentFileValidator");function Tne(e){let t=De.object({project:De.string().required(),file:De.string().custom(y_).required(),encoding:De.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ni.validateBySchema(e,t)}a(Tne,"getComponentFileValidator");function gne(e){let t=De.object({project:De.string().pattern(bi).custom(Rh.bind(null,!1)).required().messages({"string.pattern.base":fr.BAD_PROJECT_NAME})});return Ni.validateBySchema(e,t)}a(gne,"addComponentValidator");function Rne(e){let t=De.object({project:De.string().pattern(bi).custom(Rh.bind(null,!0)).required().messages({"string.pattern.base":fr.BAD_PROJECT_NAME})});return Ni.validateBySchema(e,t)}a(Rne,"dropCustomFunctionProjectValidator");function Ane(e){let t=De.object({project:De.string().pattern(bi).required().messages({"string.pattern.base":fr.BAD_PROJECT_NAME}),skip_node_modules:De.boolean()});return Ni.validateBySchema(e,t)}a(Ane,"packageComponentValidator");function One(e){let t=De.object({project:De.string().pattern(bi).required().messages({"string.pattern.base":fr.BAD_PROJECT_NAME}),payload:De.string().optional().messages({"string.pattern.base":fr.BAD_PACKAGE}),package:De.string().optional()});return Ni.validateBySchema(e,t)}a(One,"deployComponentValidator")});var Nh=g((UOe,eH)=>{"use strict";var Ah=require("joi"),Oh=require("path"),QB=require("fs-extra"),{exec:bne}=require("child_process"),Nne=require("util"),jB=Nne.promisify(bne),I_=D(),{handleHDBError:Wc,hdb_errors:yne}=oe(),{HTTP_STATUS_CODES:Qc}=yne,w_=X(),Ine=tt(),jc=x();w_.initSync();var MA=w_.get(I_.CONFIG_PARAMS.COMPONENTSROOT),zB="npm install --omit=dev --json",wne=`${zB} --dry-run`;eH.exports={installModules:Pne,auditModules:Mne,installAllRootModules:Cne,uninstallRootModule:Dne,linkHarperdb:Lne};async function Cne(e=!1){await bh(),await C_(e?"npm install --ignore-scripts":"npm install",w_.get(I_.CONFIG_PARAMS.ROOTPATH))}a(Cne,"installAllRootModules");async function Dne(e){await C_(`npm uninstall ${e}`,w_.get(I_.CONFIG_PARAMS.ROOTPATH))}a(Dne,"uninstallRootModule");async function Lne(){await bh(),await C_(`npm link ${I_.PACKAGE_ROOT}`,w_.get(I_.CONFIG_PARAMS.ROOTPATH))}a(Lne,"linkHarperdb");async function C_(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await jB(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
15
+ `,""))}return n&&!n.includes("Debugger listening")&&jc.error("Error running NPM command:",e,n),jc.trace(r,n),r?.replace(`
16
+ `,"")}a(C_,"runCommand");async function Pne(e){jc.info(`starting installModules for request: ${e}`);let t=ZB(e);if(t)throw Wc(t,t.message,Qc.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?wne:zB;await bh(),await XB(r);let i={};for(let o=0,c=r.length;o<c;o++){let l=r[o];i[l]={npm_output:null,npm_error:null};let _=Oh.join(MA,l),u,d=null;try{let{stdout:f,stderr:E}=await jB(s,{cwd:_});u=f?f.replace(`
17
17
  `,""):null,d=E?E.replace(`
18
- `,""):null}catch(f){f.stderr?i[l].npm_error=jB(f.stderr):i[l].npm_error=f.message;continue}try{i[l].npm_output=JSON.parse(u)}catch{i[l].npm_output=u}try{i[l].npm_error=JSON.parse(d)}catch{i[l].npm_error=d}}return zc.info(`finished installModules with response ${i}`),i}a(Lne,"installModules");function jB(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
19
- `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(jB,"parseNPMStdErr");async function Pne(e){zc.info(`starting auditModules for request: ${e}`);let t=JB(e);if(t)throw Qc(t,t.message,jc.BAD_REQUEST);let{projects:r}=e;await Oh(),await zB(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Ah.join(LA,o);n[o]={npm_output:null,npm_error:null};try{let l=await C_("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=jB(l.stderr)}}return zc.info(`finished auditModules with response ${n}`),n}a(Pne,"auditModules");async function Oh(){try{return await C_("npm -v"),!0}catch{throw Qc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",jc.BAD_REQUEST,void 0,void 0,!0)}}a(Oh,"checkNPMInstalled");async function zB(e){if(!Array.isArray(e)||e.length===0)throw Qc(new Error,"projects argument must be an array with at least 1 element",jc.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=Ah.join(LA,i.toString());if(!await KB.pathExists(o)){t.push(i);continue}let l=Ah.join(o,"package.json");await KB.pathExists(l)||r.push(i)}if(t.length>0)throw Qc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,jc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Qc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,jc.BAD_REQUEST,void 0,void 0,!0)}a(zB,"checkProjectPaths");function JB(e){let t=Rh.object({projects:Rh.array().min(1).items(Rh.string()).required(),dry_run:Rh.boolean().default(!1)});return yne.validateBySchema(e,t)}a(JB,"modulesValidator")});var MA=T((UOe,nH)=>{"use strict";var Jc=require("fs-extra"),PA=require("path"),Nh=x(),ZB=K(),yh=D(),rH=X(),Mne=ut();nH.exports=Une;async function Une(){let e=vne(),t=rH.get(yh.CONFIG_PARAMS.ROOTPATH),r=PA.join(t,"package.json"),n={dependencies:{harperdb:"file:"+yh.PACKAGE_ROOT}},s=PA.join(t,"node_modules");await Jc.ensureDir(s);let i,o=!0,c=!1;try{i=await Jc.readJson(r)}catch(l){if(ZB.isEmptyOrZeroLength(e))return;if(l.code!==yh.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!ZB.isEmptyOrZeroLength(e)){for(let{name:l,package:_}of e){let u=await eH(_);n.dependencies[l]=u+_}if(!o){Nh.notify("Installing components"),await tH(r,n,null);return}for(let{name:l,package:_}of e){let u=i.dependencies[l],d=await eH(_);if(u===void 0||u!==d+_){c=!0;break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Nh.notify("Removing component",l),c=!0);c&&(Nh.notify("Updating components."),await tH(r,n,i))}a(Une,"installComponents");function vne(){let e=Mne.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(vne,"getComponentsConfig");async function eH(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":PA.extname(e)||await Jc.pathExists(e)?"file:":"github:"}a(eH,"getPkgPrefix");async function tH(e,t,r){Nh.trace("npm installing components package.json",t),await Jc.writeFile(e,JSON.stringify(t,null," "));try{await bh().installAllRootModules(rH.get(yh.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await Jc.writeFile(e,JSON.stringify(r,null," ")):await Jc.unlink(e),n}}a(tH,"installPackages")});var BA=T((HOe,aH)=>{"use strict";var Ye=require("fs-extra"),UA=require("fast-glob"),Ae=require("path"),iH=require("tar-fs"),BOe=require("uuid").v4,vA=require("normalize-path"),qs=YB(),vt=x(),ze=D(),Nt=X(),D_=ut(),Bne=K(),{PACKAGE_ROOT:Hne}=D(),{handleHDBError:Kt,hdb_errors:Gne}=oe(),{basename:qne}=require("path"),xne=MA(),oH=X(),Fne=D(),{Readable:kne}=require("stream"),{isMainThread:$ne}=require("worker_threads"),{HDB_ERROR_MSGS:La,HTTP_STATUS_CODES:Wt}=Gne,Vne=Ae.join(Hne,"application-template"),sH=Ae.join(Nt.get(ze.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Yne(){vt.trace("getting custom api status");let e={};try{e={port:Nt.get(ze.CONFIG_PARAMS.HTTP_PORT),directory:Nt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Kt(new Error,La.FUNCTION_STATUS,Wt.INTERNAL_SERVER_ERROR,vt.ERR,t)}return e}a(Yne,"customFunctionsStatus");function Kne(){vt.trace("getting custom api endpoints");let e={},t=Nt.get(ze.CONFIG_PARAMS.COMPONENTSROOT);try{UA.sync(vA(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:UA.sync(vA(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:UA.sync(vA(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Kt(new Error,La.GET_FUNCTIONS,Wt.INTERNAL_SERVER_ERROR,vt.ERR,r)}return e}a(Kne,"getCustomFunctions");function Wne(e){e.project&&(e.project=Ae.parse(e.project).name),e.file&&(e.file=Ae.parse(e.file).name);let t=qs.getDropCustomFunctionValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);vt.trace("getting custom api endpoint file content");let r=Nt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=Ae.join(r,n,s,i+".js");try{return Ye.readFileSync(o,{encoding:"utf8"})}catch(c){throw Kt(new Error,La.GET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,vt.ERR,c)}}a(Wne,"getCustomFunction");function Qne(e){e.project&&(e.project=Ae.parse(e.project).name),e.file&&(e.file=Ae.parse(e.file).name);let t=qs.setCustomFunctionValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);vt.trace("setting custom function file content");let r=Nt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return Ye.outputFileSync(Ae.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Kt(new Error,La.SET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,vt.ERR,c)}}a(Qne,"setCustomFunction");function jne(e){e.project&&(e.project=Ae.parse(e.project).name),e.file&&(e.file=Ae.parse(e.file).name);let t=qs.getDropCustomFunctionValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);vt.trace("dropping custom function file");let r=Nt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return Ye.unlinkSync(Ae.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Kt(new Error,La.DROP_FUNCTION,Wt.INTERNAL_SERVER_ERROR,vt.ERR,o)}}a(jne,"dropCustomFunction");function zne(e){e.project&&(e.project=Ae.parse(e.project).name);let t=qs.addComponentValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);vt.trace("adding component");let r=Nt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Ae.join(r,n);return Ye.mkdirSync(s,{recursive:!0}),Ye.copySync(Vne,s),`Successfully added project: ${n}`}catch(s){throw Kt(new Error,La.ADD_FUNCTION,Wt.INTERNAL_SERVER_ERROR,vt.ERR,s)}}a(zne,"addComponent");function Jne(e){e.project&&(e.project=Ae.parse(e.project).name);let t=qs.dropCustomFunctionProjectValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);vt.trace("dropping custom function project");let r=Nt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Nt.get(ze.CONFIG_PARAMS.APPS);if(!Bne.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return D_.updateConfigValue(ze.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Ae.join(r,n);return Ye.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Kt(new Error,La.DROP_FUNCTION_PROJECT,Wt.INTERNAL_SERVER_ERROR,vt.ERR,i)}}a(Jne,"dropCustomFunctionProject");async function Xne(e){e.project&&(e.project=Ae.parse(e.project).name);let t=qs.packageComponentValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);let r=Nt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;vt.trace("packaging component",n);let s;try{s=await Ye.realpath(Ae.join(r,n))}catch(l){if(l.code!==ze.NODE_ERROR_CODES.ENOENT)throw l;try{s=await Ye.realpath(Ae.join(Nt.get(ze.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===ze.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await Ye.ensureDir(sH);let i=Ae.join(sH,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:l=>l.includes(Ae.join(s,"node_modules"))}),iH.pack(s,o).pipe(Ye.createWriteStream(i,{overwrite:!0})),await new Promise(l=>setTimeout(l,2e3));let c=Ye.readFileSync(i,{encoding:"base64"});return await Ye.remove(i),{project:n,payload:c}}a(Xne,"packageComponent");async function Zne(e){e.project&&(e.project=Ae.parse(e.project).name);let t=qs.deployComponentValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);let r=Nt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(vt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=Ae.join(r,n),i="file:"+o,await Ye.ensureDir(o);let f=kne.from(Buffer.from(s,"base64"));await new Promise((h,m)=>{f.pipe(iH.extract(o,{finish:h})).on("error",m)});let E=await Ye.readdir(o);E.length===1&&E[0]==="package"&&(await Ye.copy(Ae.join(o,"package"),o),await Ye.remove(Ae.join(o,"package")))}if(await D_.addConfig(n,{package:i}),!s){await xne();let f=oH.get(Fne.CONFIG_PARAMS.ROOTPATH);o=Ae.join(f,"node_modules",n)}if($ne)return;let c=new Map;c.isWorker=!0;let l=(wh(),ie(Ih)),_;l.setErrorReporter(f=>_=f);let u=qne(o),d=l.component_errors.get(u);try{await l.loadComponent(o,c)}finally{l.component_errors.set(u,d)}if(_)throw _;return vt.info("Installed component"),`Successfully deployed: ${n}`}a(Zne,"deployComponent");async function ese(){let e=D_.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let l=await Ye.readdir(o,{withFileTypes:!0});for(let _ of l){let u=_.name;if(u.startsWith(".")||u==="node_modules")continue;let d=Ae.join(o,u);if(_.isDirectory()||_.isSymbolicLink()){let f={name:u,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Ye.stat(d),E={name:Ae.basename(u),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(l){return vt.warn("Error loading package",l),{error:l.toString(),entries:[]}}},"walk_dir"),n=await r(Nt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{name:Nt.get(ze.CONFIG_PARAMS.COMPONENTSROOT).split(Ae.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(Ae.join(Nt.get(ze.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(wh(),ie(Ih)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return n}a(ese,"getComponents");async function tse(e){let t=qs.getComponentFileValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);let n=D_.getConfigObj()[e.project]||e.project==="harperdb"?Ae.join(oH.get(ze.CONFIG_PARAMS.ROOTPATH),"node_modules"):Nt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ye.stat(Ae.join(n,e.project,e.file));return{message:await Ye.readFile(Ae.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===ze.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Ae.join(e.project,e.file)}'`):i}}a(tse,"getComponentFile");async function rse(e){let t=qs.setComponentFileValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Ae.join(Nt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Ye.ensureFile(n),await Ye.outputFile(n,e.payload,r)):await Ye.ensureDir(n),"Successfully set component: "+e.file}a(rse,"setComponentFile");async function nse(e){let t=qs.dropComponentFileValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);let r=e.file?Ae.join(e.project,e.file):e.project,n=Ae.join(Nt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),r);return await Ye.pathExists(n)&&await Ye.remove(n),D_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(nse,"dropComponent");aH.exports={customFunctionsStatus:Yne,getCustomFunctions:Kne,getCustomFunction:Wne,setCustomFunction:Qne,dropCustomFunction:jne,addComponent:zne,dropCustomFunctionProject:Jne,packageComponent:Xne,deployComponent:Zne,getComponents:ese,getComponentFile:tse,setComponentFile:rse,dropComponent:nse}});var HA=T((qOe,lH)=>{"use strict";var xs=require("joi"),cH=tt();lH.exports={readTransactionLogValidator:sse,deleteTransactionLogsBeforeValidator:ise};function sse(e){let t=xs.object({schema:xs.string().required(),table:xs.string().required(),from:xs.date().timestamp(),to:xs.date().timestamp(),limit:xs.number().min(1)});return cH.validateBySchema(e,t)}a(sse,"readTransactionLogValidator");function ise(e){let t=xs.object({schema:xs.string().required(),table:xs.string().required(),timestamp:xs.date().timestamp().required()});return cH.validateBySchema(e,t)}a(ise,"deleteTransactionLogsBeforeValidator")});var Ch=T((FOe,EH)=>{"use strict";var GA=D(),L_=pt(),uH=K(),_H=X(),dH=ui(),{handleHDBError:Xc,hdb_errors:ose}=oe(),{HTTP_STATUS_CODES:Zc}=ose,{readTransactionLogValidator:ase,deleteTransactionLogsBeforeValidator:cse}=HA(),fH="This operation relies on clustering and cannot run with it disable.",lse="Logs successfully deleted from transaction log.",use="All logs successfully deleted from transaction log.";EH.exports={readTransactionLog:_se,deleteTransactionLogsBefore:dse};async function*_se(e){let t=ase(e);if(t)throw Xc(t,t.message,Zc.BAD_REQUEST,void 0,void 0,!0);if(!_H.get(GA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Xc(new Error,fH,Zc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=uH.checkSchemaTableExist(r,n);if(s)throw Xc(new Error,s,Zc.NOT_FOUND,void 0,void 0,!0);let i=dH.createNatsTableStreamName(r,n),o=await L_.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let l=Math.floor(c?.nats_timestamp/1e6);if(e.to&&l>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:l,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===GA.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(_se,"readTransactionLog");async function dse(e){let t=cse(e);if(t)throw Xc(t,t.message,Zc.BAD_REQUEST,void 0,void 0,!0);if(!_H.get(GA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Xc(new Error,fH,Zc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=uH.checkSchemaTableExist(r,n);if(i)throw Xc(new Error,i,Zc.NOT_FOUND,void 0,void 0,!0);let o=dH.createNatsTableStreamName(r,n),{jsm:c}=await L_.getNATSReferences(),l=await L_.getStreamInfo(o),_=new Date(l.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let u=lse,d,f=new Date(l.state.last_ts).getTime();return s>f?(d=l.state.last_seq+1,u=use):d=(await L_.viewStream(o,parseInt(s),1))[0].nats_sequence,await L_.purgeTableStream(r,n,{seq:d}),u}a(dse,"deleteTransactionLogsBefore")});var pH=T(($Oe,hH)=>{"use strict";var qA=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};hH.exports=qA});var SH=T((YOe,mH)=>{"use strict";var xA=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};mH.exports=xA});var kA=T((WOe,gH)=>{"use strict";var TH=pH(),fse=SH(),{HDB_ERROR_MSGS:Ese}=Zr(),FA=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Ese.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,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new TH(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new fse(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new TH(r,n,[],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}};gH.exports=FA});var Mh=T((jOe,BH)=>{"use strict";var $A=yr(),Dh=ir(),qn=RE(),U_=_i(),VA=na(),hse=uR(),pse=bU(),v_=wr(),Lh=NE(),Bt=x(),mse=RR(),Sse=s_(),Tse=ZR(),gse=FE(),Rse=$E(),Ase=tA(),Ose=YE(),bse=WE(),YA=jE(),yi=K(),Nse=O0(),KA=JE(),OH=wa(),Gn=D(),bH=wB(),yse=mi(),NH=e_(),yH=(Th(),ie(N_)),IH=ut(),En=BA(),Ise=require("alasql"),wH=Ch(),CH=bh(),DH=kA(),{handleHDBError:Fr,hdb_errors:LH}=oe(),{HDB_ERROR_MSGS:er,HTTP_STATUS_CODES:P_}=LH,V=new Map,PH="delete",Oo="insert",Ii="read",Pa="update",M_="describe",RH=U_.describeSchema.name,AH=U_.describeTable.name,MH={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},wse="catchup",Cse="handleGetJob",Dse="handleGetJobsByStartDate",Ph={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Lse=[qn.createTable.name,qn.createAttribute.name,qn.dropTable.name,qn.dropAttribute.name],UH={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($A.insert.name,new Q(!1,[Oo]));V.set($A.update.name,new Q(!1,[Pa]));V.set($A.upsert.name,new Q(!1,[Oo,Pa]));V.set(Dh.searchByConditions.name,new Q(!1,[Ii]));V.set(Dh.searchByHash.name,new Q(!1,[Ii]));V.set(Dh.searchByValue.name,new Q(!1,[Ii]));V.set(Dh.search.name,new Q(!1,[Ii]));V.set(qn.createSchema.name,new Q(!0,[]));V.set(qn.createTable.name,new Q(!0,[]));V.set(qn.createAttribute.name,new Q(!1,[Oo]));V.set(qn.dropSchema.name,new Q(!0,[]));V.set(qn.dropTable.name,new Q(!0,[]));V.set(qn.dropAttribute.name,new Q(!0,[]));V.set(U_.describeSchema.name,new Q(!1,[Ii]));V.set(U_.describeTable.name,new Q(!1,[Ii]));V.set(VA.deleteRecord.name,new Q(!1,[PH]));V.set(v_.addUser.name,new Q(!0,[]));V.set(v_.alterUser.name,new Q(!0,[]));V.set(v_.dropUser.name,new Q(!0,[]));V.set(v_.listUsersExternal.name,new Q(!0,[]));V.set(Lh.listRoles.name,new Q(!0,[]));V.set(Lh.addRole.name,new Q(!0,[]));V.set(Lh.alterRole.name,new Q(!0,[]));V.set(Lh.dropRole.name,new Q(!0,[]));V.set(mse.name,new Q(!0,[]));V.set(Sse.name,new Q(!0,[]));V.set(Tse.name,new Q(!0,[]));V.set(gse.name,new Q(!0,[]));V.set(Rse.name,new Q(!0,[]));V.set(Ase.name,new Q(!0,[]));V.set(YA.setRoutes.name,new Q(!0,[]));V.set(YA.getRoutes.name,new Q(!0,[]));V.set(YA.deleteRoutes.name,new Q(!0,[]));V.set(IH.setConfiguration.name,new Q(!0,[]));V.set(Ose.clusterStatus.name,new Q(!0,[]));V.set(bse.name,new Q(!0,[]));V.set(KA.getFingerprint.name,new Q(!0,[]));V.set(KA.setLicense.name,new Q(!0,[]));V.set(VA.deleteFilesBefore.name,new Q(!0,[]));V.set(VA.deleteAuditLogsBefore.name,new Q(!0,[]));V.set(OH.restart.name,new Q(!0,[]));V.set(OH.restartService.name,new Q(!0,[]));V.set(hse.name,new Q(!0,[]));V.set(pse.name,new Q(!0,[Ii]));V.set(yse.systemInformation.name,new Q(!0,[]));V.set(IH.getConfiguration.name,new Q(!0,[]));V.set(wH.readTransactionLog.name,new Q(!0,[]));V.set(wH.deleteTransactionLogsBefore.name,new Q(!0,[]));V.set(CH.installModules.name,new Q(!0,[]));V.set(CH.auditModules.name,new Q(!0,[]));V.set(NH.createTokens.name,new Q(!1,[]));V.set(NH.refreshOperationToken.name,new Q(!1,[]));V.set(yH.login.name,new Q(!1,[]));V.set(yH.logout.name,new Q(!1,[]));V.set(En.customFunctionsStatus.name,new Q(!0,[]));V.set(En.getCustomFunctions.name,new Q(!0,[]));V.set(En.getComponents.name,new Q(!0,[]));V.set(En.getComponentFile.name,new Q(!0,[]));V.set(En.setComponentFile.name,new Q(!0,[]));V.set(En.dropComponent.name,new Q(!0,[]));V.set(En.getCustomFunction.name,new Q(!0,[]));V.set(En.setCustomFunction.name,new Q(!0,[]));V.set(En.dropCustomFunction.name,new Q(!0,[]));V.set(En.addComponent.name,new Q(!0,[]));V.set(En.dropCustomFunctionProject.name,new Q(!0,[]));V.set(En.packageComponent.name,new Q(!0,[]));V.set(En.deployComponent.name,new Q(!0,[]));V.set(KA.getRegistrationInfo.name,new Q(!1,[]));V.set(v_.userInfo.name,new Q(!1,[]));V.set(U_.describeAll.name,new Q(!1,[]));V.set(Cse,new Q(!1,[]));V.set(Dse,new Q(!0,[]));V.set(wse,new Q(!0,[]));V.set(Ph.CSV_DATA_LOAD,new Q(!1,[Oo,Pa]));V.set(Ph.CSV_URL_LOAD,new Q(!1,[Oo,Pa]));V.set(Ph.CSV_FILE_LOAD,new Q(!1,[Oo,Pa]));V.set(Ph.IMPORT_FROM_S3,new Q(!1,[Oo,Pa]));V.set(UH.EXPORT_TO_S3,new Q(!0,[]));V.set(UH.EXPORT_LOCAL,new Q(!0,[]));V.set(Gn.VALID_SQL_OPS_ENUM.DELETE,new Q(!1,[PH]));V.set(Gn.VALID_SQL_OPS_ENUM.SELECT,new Q(!1,[Ii]));V.set(Gn.VALID_SQL_OPS_ENUM.INSERT,new Q(!1,[Oo]));V.set(Gn.VALID_SQL_OPS_ENUM.UPDATE,new Q(!1,[Pa]));BH.exports={verifyPerms:Mse,verifyPermsAst:Pse,verifyBulkLoadAttributePerms:vse};function Pse(e,t,r){if(yi.isEmptyOrZeroLength(e))throw Bt.info("verify_perms_ast has an empty user parameter"),Fr(new Error);if(yi.isEmptyOrZeroLength(t))throw Bt.info("verify_perms_ast has an empty user parameter"),Fr(new Error);if(yi.isEmptyOrZeroLength(r))throw Bt.info("verify_perms_ast has a null operation parameter"),Fr(new Error);try{let n=new DH,s=new Nse(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Bt.info("No schemas defined in verifyPermsAst(), will not continue."),Fr(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&MH[r])throw Fr(new Error,er.DROP_SYSTEM,P_.FORBIDDEN);if(c&&!l)return null;let _=bH.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof Ise.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=s.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let u=vH(t,r,o,n);return u||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=s.getAttributesBySchemaTableName(f,d[E]),m=QA(t.role.permission,f,d[E]);WA(h,m,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw Fr(n)}}a(Pse,"verifyPermsAst");function Mse(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Bt.info("null required parameter in verifyPerms"),Fr(new Error,er.DEFAULT_INVALID_REQUEST,P_.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new DH;if(yi.isEmptyOrZeroLength(e.hdb_user.role)||yi.isEmptyOrZeroLength(e.hdb_user.role.permission))return Bt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(er.USER_HAS_NO_PERMS(e.hdb_user.username));let l=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,u=o.has(Gn.SYSTEM_SCHEMA_NAME)||s===Gn.SYSTEM_SCHEMA_NAME;if(u&&MH[r])throw Fr(new Error,er.DROP_SYSTEM,P_.FORBIDDEN);if(l&&!u||_===!0&&(r===qn.createSchema.name||r===qn.dropSchema.name))return null;if(Lse.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=bH.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===RH||r===AH){if(s===Gn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(er.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===RH&&(!d[s]||!d[s][M_]))return c.handleInvalidItem(er.SCHEMA_NOT_FOUND(s));if(r===AH&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][M_]))return c.handleInvalidItem(er.TABLE_NOT_FOUND(s,i))}}let f=vH(e.hdb_user,r,o,c,n);if(f)return f;if(V.get(r)&&V.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Gn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let m=[],S=d[s].tables[i];S[Gn.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(g=>g[Gn.PERMS_CRUD_ENUM.READ]).forEach(g=>{m.push(g.attribute_name)}):m=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=m)}let E=Use(e),h=QA(e.hdb_user.role.permission,s,i);return WA(E,h,r,i,s,c,n),c.getPermsResponse()}a(Mse,"verifyPerms");function vH(e,t,r,n,s){if(yi.arrayHasEmptyValues([e,t,r]))throw Bt.info("hasPermissions has an invalid parameter"),Fr(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 Bt.info(`operation ${t} not found.`),Fr(new Error,er.OP_NOT_FOUND(t),P_.BAD_REQUEST);if(V.get(t)&&V.get(t).requires_su)return Bt.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(er.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][M_]===!1){n.addInvalidItem(er.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(er.SCHEMA_NOT_FOUND(l));continue}let _=r.get(l);for(let u of _){let d=o[l].tables[u];if(!d||d[M_]===!1)n.addInvalidItem(er.TABLE_NOT_FOUND(l,u));else try{let f=[],E=V.get(t).perms;!yi.isEmpty(s)&&E.includes(s)&&(E=[s]);for(let h=0;h<E.length;h++){let m=E[h],S=d[m];(S==null||S===!1)&&(Bt.info(`Required ${m} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),f.push(m))}f.length>0&&n.addUnauthorizedTable(l,u,f)}catch(f){let E=er.UNKNOWN_OP_AUTH_ERROR(t,l,u);throw Bt.error(E),Bt.error(f),Fr(LH.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(vH,"hasPermissions");function WA(e,t,r,n,s,i,o){if(!e||!t)throw Bt.info("no attributes specified in checkAttributePerms."),Fr(new Error);let c=V.get(r).perms;if(!c||c==="")throw Bt.info(`no permissions found for ${r} in checkAttributePerms().`),Fr(new Error);if(yi.isEmptyOrZeroLength(t))return Bt.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let u of e){let d=t.get(u);if(d){if(d[M_]===!1){i.addInvalidItem(er.ATTR_NOT_FOUND(s,n,u),s,n);continue}if(c)for(let f of c){if(Gn.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Ii)throw Fr(new Error,er.SYSTEM_TIMESTAMP_PERMS_ERR,P_.FORBIDDEN);d[f]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(f):l[d.attribute_name]=[f])}}else i.addInvalidItem(er.ATTR_NOT_FOUND(s,n,u),s,n)}let _=Object.keys(l);_.length>0&&i.addUnauthorizedAttributes(_,s,n,l)}a(WA,"checkAttributePerms");function Use(e){let t=new Set;try{if(e.action)return t;if(e.operation===Gn.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 n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){Bt.info(r)}return t}a(Use,"getRecordAttributes");function QA(e,t,r){let n=new Map;if(yi.isEmpty(e))return Bt.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Bt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(QA,"getAttributePermissions");function vse(e,t,r,n,s,i,o){let c=new Set(i),l=QA(e,n,s);WA(c,l,t,s,n,o,r)}a(vse,"verifyBulkLoadAttributePerms")});var vh=T((JOe,FH)=>{"use strict";FH.exports={evaluateSQL:Qse,processAST:xH,convertSQLToAST:qH,checkASTPermissions:GH};var Bse=yr(),HH=require("util"),Hse=HH.callbackify(Bse.insert),Gse=ir().search,qse=uM().update,xse=HH.callbackify(qse),Fse=dM().convertDelete,bo=require("alasql"),kse=Mh(),Uh=x(),$se=sE(),Vse=K(),B_=D(),{hdb_errors:Yse,handleHDBError:jA}=oe(),{HTTP_STATUS_CODES:zA}=Yse;$se(bo);var Kse=403,Wse="There was a problem performing this insert. Please check the logs and try again.",JA=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Qse(e,t){let r=e.parsed_sql_object;if(!r){r=qH(e.sql);let n,s=r.ast.statements[0];if(s instanceof bo.yy.Insert?n=s.into.databaseid:s instanceof bo.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof bo.yy.Update||s instanceof bo.yy.Delete?n=s.table.databaseid:Uh.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof bo.yy.Select)&&Vse.isEmptyOrZeroLength(n))return t("No schema specified",null)}xH(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Qse,"evaluateSQL");function GH(e,t){let r;try{r=kse.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(GH,"checkASTPermissions");function qH(e){let t=new JA;if(!e)throw jA(new Error,"The 'sql' parameter is missing from the request body",zA.BAD_REQUEST);try{let r=e.trim(),n=bo.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
20
- `);throw n[1]?jA(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,zA.BAD_REQUEST):jA(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",zA.BAD_REQUEST)}return t}a(qH,"convertSQLToAST");function xH(e,t,r){try{let n=jse;if(!e.bypass_auth&&!t.permissions_checked){let i=GH(e,t);if(i&&i.length>0)return r(Kse,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case B_.VALID_SQL_OPS_ENUM.SELECT:n=Gse,s=t.ast.statements[0];break;case B_.VALID_SQL_OPS_ENUM.INSERT:n=zse;break;case B_.VALID_SQL_OPS_ENUM.UPDATE:n=xse;break;case B_.VALID_SQL_OPS_ENUM.DELETE:n=Fse;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(xH,"processAST");function jse(e,t){Uh.info(e),t("unknown sql statement")}a(jse,"nullFunction");function zse({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=Jse(i,e.values)}catch(o){return r(o)}Hse(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){Uh.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(zse,"convertInsert");function Jse(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 n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=bo.compile(`SELECT ${s.toString()} AS [${B_.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Uh.error(r),new Error(Wse)}}a(Jse,"createDataObjects")});var XA=T((ZOe,$H)=>{"use strict";var{S3:Xse,GetObjectCommand:Zse}=require("@aws-sdk/client-s3");$H.exports={getFileStreamFromS3:eie,getS3AuthObj:kH};async function eie(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await kH(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Zse(r))).Body}a(eie,"getFileStreamFromS3");function kH(e,t,r){return new Xse({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(kH,"getS3AuthObj")});var Bh=T((tbe,XH)=>{"use strict";var eO=ir(),tie=vh(),rie=XA(),{AsyncParser:nie,Transform:sie}=require("json2csv"),G_=require("stream"),hn=K(),ZA=require("fs-extra"),iie=require("path"),xn=x(),{promisify:KH}=require("util"),H_=K(),{handleHDBError:yt,hdb_errors:oie}=oe(),{HDB_ERROR_MSGS:kr,HTTP_STATUS_CODES:It}=oie,{streamAsJSON:aie}=(RS(),ie(wI)),{Upload:cie}=require("@aws-sdk/lib-storage"),VH=["search_by_value","search_by_hash","sql","search_by_conditions"],YH=["json","csv"],WH="json",QH="csv",lie="Successfully exported JSON locally.",uie="Successfully exported CSV locally.",_ie=1e3,die=eO.searchByHash,fie=eO.searchByValue,Eie=KH(tie.evaluateSQL),hie=KH(G_.finished);XH.exports={export_to_s3:Tie,export_local:pie,toCsvStream:jH};async function pie(e){xn.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=zH(e);if(!hn.isEmpty(t))throw xn.error(t),yt(new Error,t,It.BAD_REQUEST,void 0,void 0,!0);if(hn.isEmpty(e.path))throw xn.error(kr.MISSING_VALUE("path")),yt(new Error,kr.MISSING_VALUE("path"),It.BAD_REQUEST,void 0,void 0,!0);let r=(hn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(iie.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=hn.buildFolderPath(e.path,r);await mie(e.path);let s=await JH(e);return await Sie(n,e.format,s)}a(pie,"export_local");async function mie(e){if(xn.trace("in confirmPath"),hn.isEmptyOrZeroLength(e))throw yt(new Error,`Invalid path: ${e}`,It.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await ZA.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,xn.error(n),yt(new Error,n,It.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 xn.error(r),yt(new Error,r,It.BAD_REQUEST,void 0,void 0,!0)}return!0}a(mie,"confirmPath");async function Sie(e,t,r){if(xn.trace("in saveToLocal"),H_.isEmptyOrZeroLength(e))throw yt(new Error,kr.INVALID_VALUE("file_path"),It.BAD_REQUEST,void 0,void 0,!0);if(H_.isEmptyOrZeroLength(t))throw yt(new Error,kr.INVALID_VALUE("Source format"),It.BAD_REQUEST,void 0,void 0,!0);if(H_.isEmpty(r))throw yt(new Error,kr.NOT_FOUND("Data"),It.BAD_REQUEST,void 0,void 0,!0);if(t===WH){let n=ZA.createWriteStream(e);return aie(r).pipe(n),await hie(n),{message:lie,path:e}}else if(t===QH){let n=ZA.createWriteStream(e),s=G_.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(u=>({label:u,value:u})));let c={objectMode:!0};return await new nie(i,c).fromInput(s).toOutput(n).promise(!1),{message:uie,path:e}}throw yt(new Error,kr.INVALID_VALUE("format"),It.BAD_REQUEST)}a(Sie,"saveToLocal");async function Tie(e){if(!e.s3||Object.keys(e.s3).length===0)throw yt(new Error,kr.MISSING_VALUE("S3 object"),It.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw yt(new Error,kr.MISSING_VALUE("aws_access_key_id"),It.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw yt(new Error,kr.MISSING_VALUE("aws_secret_access_key"),It.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.bucket))throw yt(new Error,kr.MISSING_VALUE("bucket"),It.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.key))throw yt(new Error,kr.MISSING_VALUE("key"),It.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.region))throw yt(new Error,kr.MISSING_VALUE("region"),It.BAD_REQUEST);let t=zH(e);if(!hn.isEmpty(t))throw yt(new Error,t,It.BAD_REQUEST);xn.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await JH(e)}catch(l){throw xn.error(l),l}let n,s=await rie.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new G_.PassThrough;if(e.format===QH){i=e.s3.key+".csv";let l=jH(r,r.getColumns?.());l.on("error",_=>{throw _}),l.pipe(o)}else if(e.format===WH){i=e.s3.key+".json";let l=new G_.Readable;l.pipe(o),l.on("error",d=>{throw d}),l.push("[");let _=r.length,u="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";u+=E,d!==0&&d%_ie===0&&(l.push(u),u="")}u.length!==0&&l.push(u),l.push("]"),l.push(null)}else throw yt(new Error,kr.INVALID_VALUE("format"),It.BAD_REQUEST);return new cie({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Tie,"export_to_s3");function jH(e,t){let r=G_.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new sie(n,s);return r.pipe(i)}a(jH,"toCsvStream");function zH(e){if(xn.trace("in exportCoreValidation"),hn.isEmpty(e.format))return"format missing";if(YH.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${YH.join(", ")}`;let t=e.search_operation.operation;if(hn.isEmpty(t))return"search_operation.operation missing";if(VH.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${VH.join(", ")}`}a(zH,"exportCoreValidation");async function JH(e){xn.trace("in getRecords");let t,r;if(H_.isEmpty(e.search_operation)||H_.isEmptyOrZeroLength(e.search_operation.operation))throw yt(new Error,kr.INVALID_VALUE("Search operation"),It.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=fie;break;case"search_by_hash":t=die;break;case"search_by_conditions":t=eO.searchByConditions;break;case"sql":t=Eie;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,xn.error(r),yt(new Error,r,It.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(JH,"getRecords")});var oG={};Fe(oG,{contentTypes:()=>iO,findBestSerializer:()=>Gh,getDeserializer:()=>Ua,registerContentHandlers:()=>oO,serialize:()=>qh,serializeMessage:()=>Ao});function gie(e){try{return e?.[0]===123?sO(e):e}catch{return e}}function oO(e){e.register(Aie,{serializers:[{regex:/^application\/json$/,serializer:Xl},{regex:/^application\/cbor$/,serializer:function(t){return new Ma.EncoderStream(x_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Hh.Readable.from((0,Fs.encodeIter)(t,x_)):(0,Fs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,tO.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Fs.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Ma.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function Gh(e){let r=(e.headers.asObject||e.headers).accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[_,...u]=l.split(/\s*;\s*/),d=1,f={q:1};for(let h of u){let m=h.indexOf("=");f[h.substring(0,m)]=h.substring(m+1)}d=+f.q;let E=Qt.get(_);if(E){let h=(E.q||1)*d;h>s&&(n=E,i=E.type||_,s=h,o=f)}}if(!n){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Qt.keys()).join(", "))}};n=Qt.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function qh(e,t,r){let n=eG&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=Gh(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,wi.createBrotliCompress)({params:{[wi.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?wi.constants.BROTLI_MODE_TEXT:wi.constants.BROTLI_MODE_GENERIC,[wi.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>eG?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,wi.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function Ao(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return q_(e);let r=t.serialize;if(r)return r(e);let n=Gh(t);return r=t.serialize=n.serializer.serialize,r(e)}function Oie(e){return new Promise((t,r)=>{let n=[];e.on("data",s=>n.push(s)),e.on("end",()=>t(Buffer.concat(n))),e.on("error",r)})}function Ua(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Qt.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Qt.get(e)?.deserialize||tG(e,n);return o=>Oie(o).then(i)}return e&&Qt.get(e)?.deserialize||tG(e,n)}function tG(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return n=>({contentType:e,data:n.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return sO(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function bie(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}var tO,Fs,Ma,wi,Hh,rG,rO,nO,nG,sG,q_,sO,x_,Qt,iO,ZH,iG,Rie,Aie,eG,Wc=Oe(()=>{RS();tO=B(Bh()),Fs=require("msgpackr"),Ma=require("cbor-x"),wi=require("zlib"),Hh=require("stream");Or();rG=require("../index"),rO=B(X()),nO=B(D()),nG=B(require("yaml")),sG=rO.default.get(nO.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,q_=sG?Qo:JSON.stringify,sO=sG?gS:JSON.parse,x_={useRecords:!1,useToJSON:!0},Qt=new Map,iO=Qt;ct.contentTypes=iO;(0,rG._assignPackageExport)("contentTypes",iO);Qt.set("application/json",{serializeStream:Xl,serialize:q_,deserialize:sO,q:.8});ZH=new Ma.Encoder(x_);Qt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Ma.EncoderStream(x_).end(e)},serialize:ZH.encode,deserialize:ZH.decode,q:1});Qt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Hh.Readable.from((0,Fs.encodeIter)(e,x_)):(0,Fs.pack)(e)},serialize:Fs.pack,deserialize:Fs.unpack,q:.9});Qt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,tO.toCsvStream)(e,e?.getColumns?.())},q:.1});Qt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.2});Qt.set("text/yaml",{serialize(e){return nG.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Qt.set("text/event-stream",{serializeStream:function(e){return Hh.Readable.from(bie(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
18
+ `,""):null}catch(f){f.stderr?i[l].npm_error=JB(f.stderr):i[l].npm_error=f.message;continue}try{i[l].npm_output=JSON.parse(u)}catch{i[l].npm_output=u}try{i[l].npm_error=JSON.parse(d)}catch{i[l].npm_error=d}}return jc.info(`finished installModules with response ${i}`),i}a(Pne,"installModules");function JB(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
19
+ `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(JB,"parseNPMStdErr");async function Mne(e){jc.info(`starting auditModules for request: ${e}`);let t=ZB(e);if(t)throw Wc(t,t.message,Qc.BAD_REQUEST);let{projects:r}=e;await bh(),await XB(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Oh.join(MA,o);n[o]={npm_output:null,npm_error:null};try{let l=await C_("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=JB(l.stderr)}}return jc.info(`finished auditModules with response ${n}`),n}a(Mne,"auditModules");async function bh(){try{return await C_("npm -v"),!0}catch{throw Wc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Qc.BAD_REQUEST,void 0,void 0,!0)}}a(bh,"checkNPMInstalled");async function XB(e){if(!Array.isArray(e)||e.length===0)throw Wc(new Error,"projects argument must be an array with at least 1 element",Qc.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=Oh.join(MA,i.toString());if(!await QB.pathExists(o)){t.push(i);continue}let l=Oh.join(o,"package.json");await QB.pathExists(l)||r.push(i)}if(t.length>0)throw Wc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Qc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Wc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Qc.BAD_REQUEST,void 0,void 0,!0)}a(XB,"checkProjectPaths");function ZB(e){let t=Ah.object({projects:Ah.array().min(1).items(Ah.string()).required(),dry_run:Ah.boolean().default(!1)});return Ine.validateBySchema(e,t)}a(ZB,"modulesValidator")});var vA=g((BOe,iH)=>{"use strict";var zc=require("fs-extra"),UA=require("path"),yh=x(),tH=K(),Ih=D(),sH=X(),Une=ut();iH.exports=vne;async function vne(){let e=Bne(),t=sH.get(Ih.CONFIG_PARAMS.ROOTPATH),r=UA.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Ih.PACKAGE_ROOT}},s=UA.join(t,"node_modules");await zc.ensureDir(s);let i,o=!0,c=!1;try{i=await zc.readJson(r)}catch(l){if(tH.isEmptyOrZeroLength(e))return;if(l.code!==Ih.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!tH.isEmptyOrZeroLength(e)){for(let{name:l,package:_}of e){let u=await rH(_);n.dependencies[l]=u+_}if(!o){yh.notify("Installing components"),await nH(r,n,null);return}for(let{name:l,package:_}of e){let u=i.dependencies[l],d=await rH(_);if(u===void 0||u!==d+_){c=!0;break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(yh.notify("Removing component",l),c=!0);c&&(yh.notify("Updating components."),await nH(r,n,i))}a(vne,"installComponents");function Bne(){let e=Une.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(Bne,"getComponentsConfig");async function rH(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":UA.extname(e)||await zc.pathExists(e)?"file:":"github:"}a(rH,"getPkgPrefix");async function nH(e,t,r){yh.trace("npm installing components package.json",t),await zc.writeFile(e,JSON.stringify(t,null," "));try{await Nh().installAllRootModules(sH.get(Ih.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await zc.writeFile(e,JSON.stringify(r,null," ")):await zc.unlink(e),n}}a(nH,"installPackages")});var GA=g((qOe,lH)=>{"use strict";var Ye=require("fs-extra"),BA=require("fast-glob"),Oe=require("path"),aH=require("tar-fs"),GOe=require("uuid").v4,HA=require("normalize-path"),xs=WB(),vt=x(),ze=D(),yt=X(),D_=ut(),Hne=K(),{PACKAGE_ROOT:Gne}=D(),{handleHDBError:Kt,hdb_errors:qne}=oe(),{basename:xne}=require("path"),Fne=vA(),cH=X(),kne=D(),{Readable:$ne}=require("stream"),{isMainThread:Vne}=require("worker_threads"),{HDB_ERROR_MSGS:La,HTTP_STATUS_CODES:Wt}=qne,Yne=Oe.join(Gne,"application-template"),oH=Oe.join(yt.get(ze.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Kne(){vt.trace("getting custom api status");let e={};try{e={port:yt.get(ze.CONFIG_PARAMS.HTTP_PORT),directory:yt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Kt(new Error,La.FUNCTION_STATUS,Wt.INTERNAL_SERVER_ERROR,vt.ERR,t)}return e}a(Kne,"customFunctionsStatus");function Wne(){vt.trace("getting custom api endpoints");let e={},t=yt.get(ze.CONFIG_PARAMS.COMPONENTSROOT);try{BA.sync(HA(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:BA.sync(HA(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:BA.sync(HA(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Kt(new Error,La.GET_FUNCTIONS,Wt.INTERNAL_SERVER_ERROR,vt.ERR,r)}return e}a(Wne,"getCustomFunctions");function Qne(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=xs.getDropCustomFunctionValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);vt.trace("getting custom api endpoint file content");let r=yt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=Oe.join(r,n,s,i+".js");try{return Ye.readFileSync(o,{encoding:"utf8"})}catch(c){throw Kt(new Error,La.GET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,vt.ERR,c)}}a(Qne,"getCustomFunction");function jne(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=xs.setCustomFunctionValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);vt.trace("setting custom function file content");let r=yt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return Ye.outputFileSync(Oe.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Kt(new Error,La.SET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,vt.ERR,c)}}a(jne,"setCustomFunction");function zne(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=xs.getDropCustomFunctionValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);vt.trace("dropping custom function file");let r=yt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return Ye.unlinkSync(Oe.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Kt(new Error,La.DROP_FUNCTION,Wt.INTERNAL_SERVER_ERROR,vt.ERR,o)}}a(zne,"dropCustomFunction");function Jne(e){e.project&&(e.project=Oe.parse(e.project).name);let t=xs.addComponentValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);vt.trace("adding component");let r=yt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Oe.join(r,n);return Ye.mkdirSync(s,{recursive:!0}),Ye.copySync(Yne,s),`Successfully added project: ${n}`}catch(s){throw Kt(new Error,La.ADD_FUNCTION,Wt.INTERNAL_SERVER_ERROR,vt.ERR,s)}}a(Jne,"addComponent");function Xne(e){e.project&&(e.project=Oe.parse(e.project).name);let t=xs.dropCustomFunctionProjectValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);vt.trace("dropping custom function project");let r=yt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=yt.get(ze.CONFIG_PARAMS.APPS);if(!Hne.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return D_.updateConfigValue(ze.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Oe.join(r,n);return Ye.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Kt(new Error,La.DROP_FUNCTION_PROJECT,Wt.INTERNAL_SERVER_ERROR,vt.ERR,i)}}a(Xne,"dropCustomFunctionProject");async function Zne(e){e.project&&(e.project=Oe.parse(e.project).name);let t=xs.packageComponentValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);let r=yt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;vt.trace("packaging component",n);let s;try{s=await Ye.realpath(Oe.join(r,n))}catch(l){if(l.code!==ze.NODE_ERROR_CODES.ENOENT)throw l;try{s=await Ye.realpath(Oe.join(yt.get(ze.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===ze.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await Ye.ensureDir(oH);let i=Oe.join(oH,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:l=>l.includes(Oe.join(s,"node_modules"))}),aH.pack(s,o).pipe(Ye.createWriteStream(i,{overwrite:!0})),await new Promise(l=>setTimeout(l,2e3));let c=Ye.readFileSync(i,{encoding:"base64"});return await Ye.remove(i),{project:n,payload:c}}a(Zne,"packageComponent");async function ese(e){e.project&&(e.project=Oe.parse(e.project).name);let t=xs.deployComponentValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);let r=yt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(vt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=Oe.join(r,n),i="file:"+o,await Ye.ensureDir(o);let f=$ne.from(Buffer.from(s,"base64"));await new Promise((h,m)=>{f.pipe(aH.extract(o,{finish:h})).on("error",m)});let E=await Ye.readdir(o);E.length===1&&E[0]==="package"&&(await Ye.copy(Oe.join(o,"package"),o),await Ye.remove(Oe.join(o,"package")))}if(await D_.addConfig(n,{package:i}),!s){await Fne();let f=cH.get(kne.CONFIG_PARAMS.ROOTPATH);o=Oe.join(f,"node_modules",n)}if(Vne)return;let c=new Map;c.isWorker=!0;let l=(Ch(),ie(wh)),_;l.setErrorReporter(f=>_=f);let u=xne(o),d=l.component_errors.get(u);try{await l.loadComponent(o,c)}finally{l.component_errors.set(u,d)}if(_)throw _;return vt.info("Installed component"),`Successfully deployed: ${n}`}a(ese,"deployComponent");async function tse(){let e=D_.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let l=await Ye.readdir(o,{withFileTypes:!0});for(let _ of l){let u=_.name;if(u.startsWith(".")||u==="node_modules")continue;let d=Oe.join(o,u);if(_.isDirectory()||_.isSymbolicLink()){let f={name:u,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Ye.stat(d),E={name:Oe.basename(u),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(l){return vt.warn("Error loading package",l),{error:l.toString(),entries:[]}}},"walk_dir"),n=await r(yt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),{name:yt.get(ze.CONFIG_PARAMS.COMPONENTSROOT).split(Oe.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(Oe.join(yt.get(ze.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(Ch(),ie(wh)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return n}a(tse,"getComponents");async function rse(e){let t=xs.getComponentFileValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);let n=D_.getConfigObj()[e.project]||e.project==="harperdb"?Oe.join(cH.get(ze.CONFIG_PARAMS.ROOTPATH),"node_modules"):yt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ye.stat(Oe.join(n,e.project,e.file));return{message:await Ye.readFile(Oe.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===ze.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Oe.join(e.project,e.file)}'`):i}}a(rse,"getComponentFile");async function nse(e){let t=xs.setComponentFileValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Oe.join(yt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Ye.ensureFile(n),await Ye.outputFile(n,e.payload,r)):await Ye.ensureDir(n),"Successfully set component: "+e.file}a(nse,"setComponentFile");async function sse(e){let t=xs.dropComponentFileValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);let r=e.file?Oe.join(e.project,e.file):e.project,n=Oe.join(yt.get(ze.CONFIG_PARAMS.COMPONENTSROOT),r);return await Ye.pathExists(n)&&await Ye.remove(n),D_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(sse,"dropComponent");lH.exports={customFunctionsStatus:Kne,getCustomFunctions:Wne,getCustomFunction:Qne,setCustomFunction:jne,dropCustomFunction:zne,addComponent:Jne,dropCustomFunctionProject:Xne,packageComponent:Zne,deployComponent:ese,getComponents:tse,getComponentFile:rse,setComponentFile:nse,dropComponent:sse}});var qA=g((FOe,_H)=>{"use strict";var Fs=require("joi"),uH=tt();_H.exports={readTransactionLogValidator:ise,deleteTransactionLogsBeforeValidator:ose};function ise(e){let t=Fs.object({schema:Fs.string().required(),table:Fs.string().required(),from:Fs.date().timestamp(),to:Fs.date().timestamp(),limit:Fs.number().min(1)});return uH.validateBySchema(e,t)}a(ise,"readTransactionLogValidator");function ose(e){let t=Fs.object({schema:Fs.string().required(),table:Fs.string().required(),timestamp:Fs.date().timestamp().required()});return uH.validateBySchema(e,t)}a(ose,"deleteTransactionLogsBeforeValidator")});var Dh=g(($Oe,pH)=>{"use strict";var xA=D(),L_=pt(),dH=K(),fH=X(),EH=ui(),{handleHDBError:Jc,hdb_errors:ase}=oe(),{HTTP_STATUS_CODES:Xc}=ase,{readTransactionLogValidator:cse,deleteTransactionLogsBeforeValidator:lse}=qA(),hH="This operation relies on clustering and cannot run with it disable.",use="Logs successfully deleted from transaction log.",_se="All logs successfully deleted from transaction log.";pH.exports={readTransactionLog:dse,deleteTransactionLogsBefore:fse};async function*dse(e){let t=cse(e);if(t)throw Jc(t,t.message,Xc.BAD_REQUEST,void 0,void 0,!0);if(!fH.get(xA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Jc(new Error,hH,Xc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=dH.checkSchemaTableExist(r,n);if(s)throw Jc(new Error,s,Xc.NOT_FOUND,void 0,void 0,!0);let i=EH.createNatsTableStreamName(r,n),o=await L_.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let l=Math.floor(c?.nats_timestamp/1e6);if(e.to&&l>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:l,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===xA.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(dse,"readTransactionLog");async function fse(e){let t=lse(e);if(t)throw Jc(t,t.message,Xc.BAD_REQUEST,void 0,void 0,!0);if(!fH.get(xA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Jc(new Error,hH,Xc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=dH.checkSchemaTableExist(r,n);if(i)throw Jc(new Error,i,Xc.NOT_FOUND,void 0,void 0,!0);let o=EH.createNatsTableStreamName(r,n),{jsm:c}=await L_.getNATSReferences(),l=await L_.getStreamInfo(o),_=new Date(l.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let u=use,d,f=new Date(l.state.last_ts).getTime();return s>f?(d=l.state.last_seq+1,u=_se):d=(await L_.viewStream(o,parseInt(s),1))[0].nats_sequence,await L_.purgeTableStream(r,n,{seq:d}),u}a(fse,"deleteTransactionLogsBefore")});var SH=g((YOe,mH)=>{"use strict";var FA=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};mH.exports=FA});var gH=g((WOe,TH)=>{"use strict";var kA=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};TH.exports=kA});var VA=g((jOe,AH)=>{"use strict";var RH=SH(),Ese=gH(),{HDB_ERROR_MSGS:hse}=Zr(),$A=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=hse.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,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new RH(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Ese(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new RH(r,n,[],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}};AH.exports=$A});var Uh=g((JOe,GH)=>{"use strict";var YA=Ir(),Lh=or(),xn=AE(),U_=_i(),KA=ra(),pse=dR(),mse=yU(),v_=Cr(),Ph=yE(),Bt=x(),Sse=OR(),Tse=s_(),gse=tA(),Rse=kE(),Ase=VE(),Ose=nA(),bse=KE(),Nse=QE(),WA=zE(),yi=K(),yse=N0(),QA=XE(),NH=Ia(),qn=D(),yH=DB(),Ise=mi(),IH=e_(),wH=(gh(),ie(N_)),CH=ut(),En=GA(),wse=require("alasql"),DH=Dh(),LH=Nh(),PH=VA(),{handleHDBError:kr,hdb_errors:MH}=oe(),{HDB_ERROR_MSGS:er,HTTP_STATUS_CODES:P_}=MH,V=new Map,UH="delete",Oo="insert",Ii="read",Pa="update",M_="describe",OH=U_.describeSchema.name,bH=U_.describeTable.name,vH={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Cse="catchup",Dse="handleGetJob",Lse="handleGetJobsByStartDate",Mh={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Pse=[xn.createTable.name,xn.createAttribute.name,xn.dropTable.name,xn.dropAttribute.name],BH={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(YA.insert.name,new Q(!1,[Oo]));V.set(YA.update.name,new Q(!1,[Pa]));V.set(YA.upsert.name,new Q(!1,[Oo,Pa]));V.set(Lh.searchByConditions.name,new Q(!1,[Ii]));V.set(Lh.searchByHash.name,new Q(!1,[Ii]));V.set(Lh.searchByValue.name,new Q(!1,[Ii]));V.set(Lh.search.name,new Q(!1,[Ii]));V.set(xn.createSchema.name,new Q(!0,[]));V.set(xn.createTable.name,new Q(!0,[]));V.set(xn.createAttribute.name,new Q(!1,[Oo]));V.set(xn.dropSchema.name,new Q(!0,[]));V.set(xn.dropTable.name,new Q(!0,[]));V.set(xn.dropAttribute.name,new Q(!0,[]));V.set(U_.describeSchema.name,new Q(!1,[Ii]));V.set(U_.describeTable.name,new Q(!1,[Ii]));V.set(KA.deleteRecord.name,new Q(!1,[UH]));V.set(v_.addUser.name,new Q(!0,[]));V.set(v_.alterUser.name,new Q(!0,[]));V.set(v_.dropUser.name,new Q(!0,[]));V.set(v_.listUsersExternal.name,new Q(!0,[]));V.set(Ph.listRoles.name,new Q(!0,[]));V.set(Ph.addRole.name,new Q(!0,[]));V.set(Ph.alterRole.name,new Q(!0,[]));V.set(Ph.dropRole.name,new Q(!0,[]));V.set(Sse.name,new Q(!0,[]));V.set(Tse.name,new Q(!0,[]));V.set(gse.name,new Q(!0,[]));V.set(Rse.name,new Q(!0,[]));V.set(Ase.name,new Q(!0,[]));V.set(Ose.name,new Q(!0,[]));V.set(WA.setRoutes.name,new Q(!0,[]));V.set(WA.getRoutes.name,new Q(!0,[]));V.set(WA.deleteRoutes.name,new Q(!0,[]));V.set(CH.setConfiguration.name,new Q(!0,[]));V.set(bse.clusterStatus.name,new Q(!0,[]));V.set(Nse.name,new Q(!0,[]));V.set(QA.getFingerprint.name,new Q(!0,[]));V.set(QA.setLicense.name,new Q(!0,[]));V.set(KA.deleteFilesBefore.name,new Q(!0,[]));V.set(KA.deleteAuditLogsBefore.name,new Q(!0,[]));V.set(NH.restart.name,new Q(!0,[]));V.set(NH.restartService.name,new Q(!0,[]));V.set(pse.name,new Q(!0,[]));V.set(mse.name,new Q(!0,[Ii]));V.set(Ise.systemInformation.name,new Q(!0,[]));V.set(CH.getConfiguration.name,new Q(!0,[]));V.set(DH.readTransactionLog.name,new Q(!0,[]));V.set(DH.deleteTransactionLogsBefore.name,new Q(!0,[]));V.set(LH.installModules.name,new Q(!0,[]));V.set(LH.auditModules.name,new Q(!0,[]));V.set(IH.createTokens.name,new Q(!1,[]));V.set(IH.refreshOperationToken.name,new Q(!1,[]));V.set(wH.login.name,new Q(!1,[]));V.set(wH.logout.name,new Q(!1,[]));V.set(En.customFunctionsStatus.name,new Q(!0,[]));V.set(En.getCustomFunctions.name,new Q(!0,[]));V.set(En.getComponents.name,new Q(!0,[]));V.set(En.getComponentFile.name,new Q(!0,[]));V.set(En.setComponentFile.name,new Q(!0,[]));V.set(En.dropComponent.name,new Q(!0,[]));V.set(En.getCustomFunction.name,new Q(!0,[]));V.set(En.setCustomFunction.name,new Q(!0,[]));V.set(En.dropCustomFunction.name,new Q(!0,[]));V.set(En.addComponent.name,new Q(!0,[]));V.set(En.dropCustomFunctionProject.name,new Q(!0,[]));V.set(En.packageComponent.name,new Q(!0,[]));V.set(En.deployComponent.name,new Q(!0,[]));V.set(QA.getRegistrationInfo.name,new Q(!1,[]));V.set(v_.userInfo.name,new Q(!1,[]));V.set(U_.describeAll.name,new Q(!1,[]));V.set(Dse,new Q(!1,[]));V.set(Lse,new Q(!0,[]));V.set(Cse,new Q(!0,[]));V.set(Mh.CSV_DATA_LOAD,new Q(!1,[Oo,Pa]));V.set(Mh.CSV_URL_LOAD,new Q(!1,[Oo,Pa]));V.set(Mh.CSV_FILE_LOAD,new Q(!1,[Oo,Pa]));V.set(Mh.IMPORT_FROM_S3,new Q(!1,[Oo,Pa]));V.set(BH.EXPORT_TO_S3,new Q(!0,[]));V.set(BH.EXPORT_LOCAL,new Q(!0,[]));V.set(qn.VALID_SQL_OPS_ENUM.DELETE,new Q(!1,[UH]));V.set(qn.VALID_SQL_OPS_ENUM.SELECT,new Q(!1,[Ii]));V.set(qn.VALID_SQL_OPS_ENUM.INSERT,new Q(!1,[Oo]));V.set(qn.VALID_SQL_OPS_ENUM.UPDATE,new Q(!1,[Pa]));GH.exports={verifyPerms:Use,verifyPermsAst:Mse,verifyBulkLoadAttributePerms:Bse};function Mse(e,t,r){if(yi.isEmptyOrZeroLength(e))throw Bt.info("verify_perms_ast has an empty user parameter"),kr(new Error);if(yi.isEmptyOrZeroLength(t))throw Bt.info("verify_perms_ast has an empty user parameter"),kr(new Error);if(yi.isEmptyOrZeroLength(r))throw Bt.info("verify_perms_ast has a null operation parameter"),kr(new Error);try{let n=new PH,s=new yse(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Bt.info("No schemas defined in verifyPermsAst(), will not continue."),kr(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&vH[r])throw kr(new Error,er.DROP_SYSTEM,P_.FORBIDDEN);if(c&&!l)return null;let _=yH.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof wse.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=s.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let u=HH(t,r,o,n);return u||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=s.getAttributesBySchemaTableName(f,d[E]),m=zA(t.role.permission,f,d[E]);jA(h,m,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw kr(n)}}a(Mse,"verifyPermsAst");function Use(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Bt.info("null required parameter in verifyPerms"),kr(new Error,er.DEFAULT_INVALID_REQUEST,P_.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new PH;if(yi.isEmptyOrZeroLength(e.hdb_user.role)||yi.isEmptyOrZeroLength(e.hdb_user.role.permission))return Bt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(er.USER_HAS_NO_PERMS(e.hdb_user.username));let l=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,u=o.has(qn.SYSTEM_SCHEMA_NAME)||s===qn.SYSTEM_SCHEMA_NAME;if(u&&vH[r])throw kr(new Error,er.DROP_SYSTEM,P_.FORBIDDEN);if(l&&!u||_===!0&&(r===xn.createSchema.name||r===xn.dropSchema.name))return null;if(Pse.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=yH.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===OH||r===bH){if(s===qn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(er.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===OH&&(!d[s]||!d[s][M_]))return c.handleInvalidItem(er.SCHEMA_NOT_FOUND(s));if(r===bH&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][M_]))return c.handleInvalidItem(er.TABLE_NOT_FOUND(s,i))}}let f=HH(e.hdb_user,r,o,c,n);if(f)return f;if(V.get(r)&&V.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&qn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let m=[],S=d[s].tables[i];S[qn.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(T=>T[qn.PERMS_CRUD_ENUM.READ]).forEach(T=>{m.push(T.attribute_name)}):m=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=m)}let E=vse(e),h=zA(e.hdb_user.role.permission,s,i);return jA(E,h,r,i,s,c,n),c.getPermsResponse()}a(Use,"verifyPerms");function HH(e,t,r,n,s){if(yi.arrayHasEmptyValues([e,t,r]))throw Bt.info("hasPermissions has an invalid parameter"),kr(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 Bt.info(`operation ${t} not found.`),kr(new Error,er.OP_NOT_FOUND(t),P_.BAD_REQUEST);if(V.get(t)&&V.get(t).requires_su)return Bt.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(er.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][M_]===!1){n.addInvalidItem(er.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(er.SCHEMA_NOT_FOUND(l));continue}let _=r.get(l);for(let u of _){let d=o[l].tables[u];if(!d||d[M_]===!1)n.addInvalidItem(er.TABLE_NOT_FOUND(l,u));else try{let f=[],E=V.get(t).perms;!yi.isEmpty(s)&&E.includes(s)&&(E=[s]);for(let h=0;h<E.length;h++){let m=E[h],S=d[m];(S==null||S===!1)&&(Bt.info(`Required ${m} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),f.push(m))}f.length>0&&n.addUnauthorizedTable(l,u,f)}catch(f){let E=er.UNKNOWN_OP_AUTH_ERROR(t,l,u);throw Bt.error(E),Bt.error(f),kr(MH.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(HH,"hasPermissions");function jA(e,t,r,n,s,i,o){if(!e||!t)throw Bt.info("no attributes specified in checkAttributePerms."),kr(new Error);let c=V.get(r).perms;if(!c||c==="")throw Bt.info(`no permissions found for ${r} in checkAttributePerms().`),kr(new Error);if(yi.isEmptyOrZeroLength(t))return Bt.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let u of e){let d=t.get(u);if(d){if(d[M_]===!1){i.addInvalidItem(er.ATTR_NOT_FOUND(s,n,u),s,n);continue}if(c)for(let f of c){if(qn.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Ii)throw kr(new Error,er.SYSTEM_TIMESTAMP_PERMS_ERR,P_.FORBIDDEN);d[f]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(f):l[d.attribute_name]=[f])}}else i.addInvalidItem(er.ATTR_NOT_FOUND(s,n,u),s,n)}let _=Object.keys(l);_.length>0&&i.addUnauthorizedAttributes(_,s,n,l)}a(jA,"checkAttributePerms");function vse(e){let t=new Set;try{if(e.action)return t;if(e.operation===qn.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 n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){Bt.info(r)}return t}a(vse,"getRecordAttributes");function zA(e,t,r){let n=new Map;if(yi.isEmpty(e))return Bt.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Bt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(zA,"getAttributePermissions");function Bse(e,t,r,n,s,i,o){let c=new Set(i),l=zA(e,n,s);jA(c,l,t,s,n,o,r)}a(Bse,"verifyBulkLoadAttributePerms")});var Bh=g((ZOe,$H)=>{"use strict";$H.exports={evaluateSQL:jse,processAST:kH,convertSQLToAST:FH,checkASTPermissions:xH};var Hse=Ir(),qH=require("util"),Gse=qH.callbackify(Hse.insert),qse=or().search,xse=dM().update,Fse=qH.callbackify(xse),kse=EM().convertDelete,bo=require("alasql"),$se=Uh(),vh=x(),Vse=iE(),Yse=K(),B_=D(),{hdb_errors:Kse,handleHDBError:JA}=oe(),{HTTP_STATUS_CODES:XA}=Kse;Vse(bo);var Wse=403,Qse="There was a problem performing this insert. Please check the logs and try again.",ZA=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function jse(e,t){let r=e.parsed_sql_object;if(!r){r=FH(e.sql);let n,s=r.ast.statements[0];if(s instanceof bo.yy.Insert?n=s.into.databaseid:s instanceof bo.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof bo.yy.Update||s instanceof bo.yy.Delete?n=s.table.databaseid:vh.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof bo.yy.Select)&&Yse.isEmptyOrZeroLength(n))return t("No schema specified",null)}kH(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(jse,"evaluateSQL");function xH(e,t){let r;try{r=$se.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(xH,"checkASTPermissions");function FH(e){let t=new ZA;if(!e)throw JA(new Error,"The 'sql' parameter is missing from the request body",XA.BAD_REQUEST);try{let r=e.trim(),n=bo.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
20
+ `);throw n[1]?JA(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,XA.BAD_REQUEST):JA(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",XA.BAD_REQUEST)}return t}a(FH,"convertSQLToAST");function kH(e,t,r){try{let n=zse;if(!e.bypass_auth&&!t.permissions_checked){let i=xH(e,t);if(i&&i.length>0)return r(Wse,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case B_.VALID_SQL_OPS_ENUM.SELECT:n=qse,s=t.ast.statements[0];break;case B_.VALID_SQL_OPS_ENUM.INSERT:n=Jse;break;case B_.VALID_SQL_OPS_ENUM.UPDATE:n=Fse;break;case B_.VALID_SQL_OPS_ENUM.DELETE:n=kse;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(kH,"processAST");function zse(e,t){vh.info(e),t("unknown sql statement")}a(zse,"nullFunction");function Jse({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=Xse(i,e.values)}catch(o){return r(o)}Gse(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){vh.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(Jse,"convertInsert");function Xse(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 n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=bo.compile(`SELECT ${s.toString()} AS [${B_.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw vh.error(r),new Error(Qse)}}a(Xse,"createDataObjects")});var eO=g((tbe,YH)=>{"use strict";var{S3:Zse,GetObjectCommand:eie}=require("@aws-sdk/client-s3");YH.exports={getFileStreamFromS3:tie,getS3AuthObj:VH};async function tie(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await VH(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new eie(r))).Body}a(tie,"getFileStreamFromS3");function VH(e,t,r){return new Zse({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(VH,"getS3AuthObj")});var Hh=g((nbe,eG)=>{"use strict";var rO=or(),rie=Bh(),nie=eO(),{AsyncParser:sie,Transform:iie}=require("json2csv"),G_=require("stream"),hn=K(),tO=require("fs-extra"),oie=require("path"),Fn=x(),{promisify:QH}=require("util"),H_=K(),{handleHDBError:It,hdb_errors:aie}=oe(),{HDB_ERROR_MSGS:$r,HTTP_STATUS_CODES:wt}=aie,{streamAsJSON:cie}=(OS(),ie(DI)),{Upload:lie}=require("@aws-sdk/lib-storage"),KH=["search_by_value","search_by_hash","sql","search_by_conditions"],WH=["json","csv"],jH="json",zH="csv",uie="Successfully exported JSON locally.",_ie="Successfully exported CSV locally.",die=1e3,fie=rO.searchByHash,Eie=rO.searchByValue,hie=QH(rie.evaluateSQL),pie=QH(G_.finished);eG.exports={export_to_s3:gie,export_local:mie,toCsvStream:JH};async function mie(e){Fn.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=XH(e);if(!hn.isEmpty(t))throw Fn.error(t),It(new Error,t,wt.BAD_REQUEST,void 0,void 0,!0);if(hn.isEmpty(e.path))throw Fn.error($r.MISSING_VALUE("path")),It(new Error,$r.MISSING_VALUE("path"),wt.BAD_REQUEST,void 0,void 0,!0);let r=(hn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(oie.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=hn.buildFolderPath(e.path,r);await Sie(e.path);let s=await ZH(e);return await Tie(n,e.format,s)}a(mie,"export_local");async function Sie(e){if(Fn.trace("in confirmPath"),hn.isEmptyOrZeroLength(e))throw It(new Error,`Invalid path: ${e}`,wt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await tO.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,Fn.error(n),It(new Error,n,wt.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 Fn.error(r),It(new Error,r,wt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Sie,"confirmPath");async function Tie(e,t,r){if(Fn.trace("in saveToLocal"),H_.isEmptyOrZeroLength(e))throw It(new Error,$r.INVALID_VALUE("file_path"),wt.BAD_REQUEST,void 0,void 0,!0);if(H_.isEmptyOrZeroLength(t))throw It(new Error,$r.INVALID_VALUE("Source format"),wt.BAD_REQUEST,void 0,void 0,!0);if(H_.isEmpty(r))throw It(new Error,$r.NOT_FOUND("Data"),wt.BAD_REQUEST,void 0,void 0,!0);if(t===jH){let n=tO.createWriteStream(e);return cie(r).pipe(n),await pie(n),{message:uie,path:e}}else if(t===zH){let n=tO.createWriteStream(e),s=G_.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(u=>({label:u,value:u})));let c={objectMode:!0};return await new sie(i,c).fromInput(s).toOutput(n).promise(!1),{message:_ie,path:e}}throw It(new Error,$r.INVALID_VALUE("format"),wt.BAD_REQUEST)}a(Tie,"saveToLocal");async function gie(e){if(!e.s3||Object.keys(e.s3).length===0)throw It(new Error,$r.MISSING_VALUE("S3 object"),wt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw It(new Error,$r.MISSING_VALUE("aws_access_key_id"),wt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw It(new Error,$r.MISSING_VALUE("aws_secret_access_key"),wt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.bucket))throw It(new Error,$r.MISSING_VALUE("bucket"),wt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.key))throw It(new Error,$r.MISSING_VALUE("key"),wt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.region))throw It(new Error,$r.MISSING_VALUE("region"),wt.BAD_REQUEST);let t=XH(e);if(!hn.isEmpty(t))throw It(new Error,t,wt.BAD_REQUEST);Fn.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await ZH(e)}catch(l){throw Fn.error(l),l}let n,s=await nie.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new G_.PassThrough;if(e.format===zH){i=e.s3.key+".csv";let l=JH(r,r.getColumns?.());l.on("error",_=>{throw _}),l.pipe(o)}else if(e.format===jH){i=e.s3.key+".json";let l=new G_.Readable;l.pipe(o),l.on("error",d=>{throw d}),l.push("[");let _=r.length,u="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";u+=E,d!==0&&d%die===0&&(l.push(u),u="")}u.length!==0&&l.push(u),l.push("]"),l.push(null)}else throw It(new Error,$r.INVALID_VALUE("format"),wt.BAD_REQUEST);return new lie({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(gie,"export_to_s3");function JH(e,t){let r=G_.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new iie(n,s);return r.pipe(i)}a(JH,"toCsvStream");function XH(e){if(Fn.trace("in exportCoreValidation"),hn.isEmpty(e.format))return"format missing";if(WH.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${WH.join(", ")}`;let t=e.search_operation.operation;if(hn.isEmpty(t))return"search_operation.operation missing";if(KH.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${KH.join(", ")}`}a(XH,"exportCoreValidation");async function ZH(e){Fn.trace("in getRecords");let t,r;if(H_.isEmpty(e.search_operation)||H_.isEmptyOrZeroLength(e.search_operation.operation))throw It(new Error,$r.INVALID_VALUE("Search operation"),wt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Eie;break;case"search_by_hash":t=fie;break;case"search_by_conditions":t=rO.searchByConditions;break;case"sql":t=hie;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Fn.error(r),It(new Error,r,wt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(ZH,"getRecords")});var cG={};Fe(cG,{contentTypes:()=>aO,findBestSerializer:()=>qh,getDeserializer:()=>Ua,registerContentHandlers:()=>cO,serialize:()=>xh,serializeMessage:()=>Da});function Rie(e){try{return e?.[0]===123?oO(e):e}catch{return e}}function cO(e){e.register(Oie,{serializers:[{regex:/^application\/json$/,serializer:Xl},{regex:/^application\/cbor$/,serializer:function(t){return new Ma.EncoderStream(x_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Gh.Readable.from((0,ks.encodeIter)(t,x_)):(0,ks.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,nO.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,ks.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Ma.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function qh(e){let r=(e.headers.asObject||e.headers).accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[_,...u]=l.split(/\s*;\s*/),d=1,f={q:1};for(let h of u){let m=h.indexOf("=");f[h.substring(0,m)]=h.substring(m+1)}d=+f.q;let E=Qt.get(_);if(E){let h=(E.q||1)*d;h>s&&(n=E,i=E.type||_,s=h,o=f)}}if(!n){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Qt.keys()).join(", "))}};n=Qt.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function xh(e,t,r){let n=rG&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=qh(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,wi.createBrotliCompress)({params:{[wi.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?wi.constants.BROTLI_MODE_TEXT:wi.constants.BROTLI_MODE_GENERIC,[wi.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>rG?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,wi.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function Da(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return q_(e);let r=t.serialize;if(r)return r(e);let n=qh(t);return r=t.serialize=n.serializer.serialize,r(e)}function bie(e){return new Promise((t,r)=>{let n=[];e.on("data",s=>n.push(s)),e.on("end",()=>t(Buffer.concat(n))),e.on("error",r)})}function Ua(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Qt.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Qt.get(e)?.deserialize||nG(e,n);return o=>bie(o).then(i)}return e&&Qt.get(e)?.deserialize||nG(e,n)}function nG(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return n=>({contentType:e,data:n.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return oO(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function Nie(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}var nO,ks,Ma,wi,Gh,sG,sO,iO,iG,oG,q_,oO,x_,Qt,aO,tG,aG,Aie,Oie,rG,Kc=be(()=>{OS();nO=B(Hh()),ks=require("msgpackr"),Ma=require("cbor-x"),wi=require("zlib"),Gh=require("stream");br();sG=require("../index"),sO=B(X()),iO=B(D()),iG=B(require("yaml")),oG=sO.default.get(iO.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,q_=oG?Wo:JSON.stringify,oO=oG?AS:JSON.parse,x_={useRecords:!1,useToJSON:!0},Qt=new Map,aO=Qt;ct.contentTypes=aO;(0,sG._assignPackageExport)("contentTypes",aO);Qt.set("application/json",{serializeStream:Xl,serialize:q_,deserialize:oO,q:.8});tG=new Ma.Encoder(x_);Qt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Ma.EncoderStream(x_).end(e)},serialize:tG.encode,deserialize:tG.decode,q:1});Qt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Gh.Readable.from((0,ks.encodeIter)(e,x_)):(0,ks.pack)(e)},serialize:ks.pack,deserialize:ks.unpack,q:.9});Qt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,nO.toCsvStream)(e,e?.getColumns?.())},q:.1});Qt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.2});Qt.set("text/yaml",{serialize(e){return iG.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Qt.set("text/event-stream",{serializeStream:function(e){return Gh.Readable.from(Nie(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
21
21
  `),e.data){let r=e.data;typeof r=="object"&&(r=q_(r)),t+="data: "+r+`
22
22
  `}return e.id&&(t+="id: "+e.id+`
23
23
  `),e.retry&&(t+="retry: "+e.retry+`
@@ -26,11 +26,11 @@ Database backup has not been removed and can be found here: ${s}`;S_.error(l),co
26
26
 
27
27
  `:`data: ${e}
28
28
 
29
- `},compressible:!1,q:.8});Qt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,n]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let s=t[r];Array.isArray(s)?s.push(n):t.key=[s,n]}else t[r]=n},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});iG={type:"application/json",serializeStream:Xl,serialize:q_,deserialize:gie,q:.5};Qt.set("*/*",iG);Qt.set("",iG);a(gie,"tryJSONParse");a(oO,"registerContentHandlers");Rie=require("fastify-plugin"),Aie=Rie(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Gh(n.raw);s.type(c),s.serializer(function(l){return(o.serializeStream||o.serialize)(l,{headers:{set:(_,u)=>{s.header(_,u)}}})})}),r()},{name:"content-type-negotiation"});a(Gh,"findBestSerializer");eG=rO.default.get(nO.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(qh,"serialize");a(Ao,"serializeMessage");a(Oie,"streamToBuffer");a(Ua,"getDeserializer");a(tG,"deserializerUnknownType");a(bie,"transformIterable")});function lO(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let d=_(l);for(let E=1;E<e.length;E++){let h=e[E],m=_(h);d=d.concat(m)}let f=new Set;return d.filter(E=>{let h=E.key??E;return f.has(h)?!1:(f.add(h),!0)})}else{let d=_(l),f=u(e.slice(1),!0,l.estimated_count);return f.length>0?o(d,f):d}function _(d){return d.conditions?lO(d.conditions,d.operator,r,n,s,i,o,c):rl(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(_,"executeCondition");function u(d,f,E){return d.map((h,m)=>{if(h.conditions){let g=h.operator==="or",A=u(h.conditions,!g,E);return g?(P,U)=>A.some(v=>v(P,U)):(P,U)=>A.every(v=>v(P,U))}let S=(h.attribute||h[0])===r.primaryKey,R=_O(h,r,i,c,S,E);return f&&m<d.length-1&&E&&(E=Mie(r.primaryStore,h.estimated_count,E)),R}).filter(Boolean)}a(u,"mapConditionsToFilters")}function rl(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(Array.isArray(o)){let g=o[0],A=Di(n.attributes,g);if(A.relationship){if(o.length<2)throw new pn.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let P=A.definition?.tableClass||A.elements?.definition?.tableClass,U=new Map,v=rl({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,P,s,U);if(A.relationship.to){i[o[0]]=U;let k=!!Di(P.attributes,A.relationship.to)?.elements;v=Cie(v,A,P.primaryStore,k,U)}if(A.relationship.from){let k=a(H=>rl({attribute:A.relationship.from,value:H},t,r,n,s,U),"searchEntry");A.elements?(i[o[0]]=U,v=Die(v,A,P.primaryStore,U,k)):v=v.flatMap(k)}return v}else if(o.length===1)o=o[0];else throw new pn.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,u,d,f;c instanceof Date&&(c=c.getTime());let E;switch(uO[l]||l){case"lt":_=!0,u=c;break;case"le":_=!0,u=c,d=!0;break;case"gt":_=c,f=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,u=c.slice(0),u[u.length-1]=ks.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),u=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),u=c[1],u instanceof Date&&(u=u.getTime()),d=!0;break;case"equals":case void 0:_=c,u=c,d=!0;break;case"ne":if(c===null){_=c,f=!0;break}case"sort":case"contains":case"ends_with":_=!0,E=!0;break;default:throw new pn.ClientError(`Unknown query comparator "${l}"`)}if(r){let g=_;_=u,u=g,g=!f,f=!d,d=g}let h=o===n.primaryKey||o==null,m=h?n.primaryStore:n.indices[o],S;if(!m||m.isIndexing||E||c===null&&!m.indexNulls){if(s===!1&&!m)throw new pn.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&E)throw new pn.ClientError(`Can not use ${l||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(m?.isIndexing)throw new pn.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!m.indexNulls)throw new pn.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(S=_O(e),!S)throw new pn.ClientError(`Unknown search operator ${e.comparator}`)}let R={start:_,end:u,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let g=m.getRange(R).map(S?function({key:A,value:P}){return this.isSync?P&&S(P)?A:No.SKIP:new Promise((U,v)=>setImmediate(()=>{try{U(P&&S(P)?A:No.SKIP)}catch(k){v(k)}}))}:A=>A.value==null?No.SKIP:A);return g.hasEntries=!0,g}else return m?m.getRange(R).map(S?function({key:g,value:A}){return this.isSync?S({[o]:g})?A:No.SKIP:new Promise((P,U)=>setImmediate(()=>{try{P(S({[o]:g})?A:No.SKIP)}catch(v){U(v)}}))}:({value:g})=>g):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:g,value:A}){return this.isSync?A&&S(A)?g:No.SKIP:new Promise((P,U)=>setImmediate(()=>{try{P(A&&S(A)?g:No.SKIP)}catch(v){U(v)}}))})}function Di(e,t){if(Array.isArray(t))if(t.length>1){let r=Di(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?Di(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function Cie(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;s.hasMappings=!0;let o;return{next(){if(!i){let l=t.relationship.to,_=a((u,d)=>{let f=u;Array.isArray(u)&&(f=ds(u),o=!0);let E=s.get(f);E?E.push(d):s.set(f,E=[d]),u!==f&&(E.key=u)},"add_entry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[l];if(f!=null&&!s.filters?.some(E=>!E(d)))if(n)for(let E=0;E<f.length;E++)_(f[E],u);else _(f,u)}return i=(o?s:s.keys())[Symbol.iterator](),this.next()}let c=i.next();return c.done?c:{value:o?c.value[1].key||c.value[0]:c.value}}}}})}function Die(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let _=ds(l.value);if(!c.has(_))return c.add(_),l}if(!i){let _=new Map;n.fromRecord=u=>u[t.relationship.from]?.filter?.(d=>_.has(ds(d)));for(let u of e){if(n.filters){let d=r.get(u);if(n.filters.some(f=>!f(d)))continue}_.set(ds(u),u)}return i=_.values()[Symbol.iterator](),this.next()}do{let _=i.next();return _.done?_:(o=s(_.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function _O(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let u=c[0],d=Di(t.attributes,u),f=d.definition?.tableClass||d.elements.definition?.tableClass,E=n?.[u],h=_O({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},f,r,E?.[u]?.joined,c[1]===f.primaryKey,i);if(!h)return;if(E){E.filters||(E.filters=[]),E.filters.push(h);return}let m=t.propertyResolvers?.[u],S,R=a((g,A)=>{let P,U;if(m){if(m.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let k of h.idFilter.idSet)e={attribute:m.from,value:k};S=_(m.from,h.idFilter,!0,!0)}else S=_(m.from,h.idFilter,!1,!0);let v=S(g);return S.idFilter&&(R.idFilter=S.idFilter),v}U=m(g,r,A),P=U?.value}else P=g[u];return P?Array.isArray(P)?P.some(h):h(P,U):!1},"recordFilter");return R}}switch(l instanceof Date&&(l=l.getTime()),uO[o]||o){case aO.SEARCH_TYPES.EQUALS:case void 0:return _(c,u=>u===l,!0);case"contains":return _(c,u=>u?.toString().includes(l));case"ends_with":return _(c,u=>u?.toString().endsWith(l));case"starts_with":return _(c,u=>typeof u=="string"&&u.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],_(c,u=>{if(!Array.isArray(u))return!1;for(let d=0,f=l.length;d<f;d++)if(u[d]!==l[d])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),_(c,u=>(0,ks.compareKeys)(u,l[0])>=0&&(0,ks.compareKeys)(u,l[1])<=0,!0);case"gt":return _(c,u=>(0,ks.compareKeys)(u,l)>0);case"ge":return _(c,u=>(0,ks.compareKeys)(u,l)>=0);case"lt":return _(c,u=>(0,ks.compareKeys)(u,l)<0);case"le":return _(c,u=>(0,ks.compareKeys)(u,l)<=0);case"ne":return _(c,u=>(0,ks.compareKeys)(u,l)!==0);case"sort":return()=>!0;default:throw new pn.ClientError(`Unknown query comparator "${o}"`)}function _(u,d,f,E){let h;f=f&&!s&&t?.indices[u]&&i>3,f&&(e.estimated_count==null&&Fh(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(f=!1));let m=0,S=3;function R(g){let A=g[u],P;if(typeof A!="object"||!A||E?P=d(A):Array.isArray(A)?P=A.some(d):A instanceof Date&&(P=d(A.getTime())),f&&(S++,!P&&!R.idFilter&&++m/S*(i-S)>h)){let U=rl(e,r.transaction.getReadTxn(),!1,t).map(ds),v=new Set(U);R.idFilter=k=>v.has(ds(k)),R.idFilter.idSet=v}return P}return a(R,"recordFilter"),s&&(R.idFilter=d),R}a(_,"attributeComparator")}function Fh(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/Ci(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=uO[n]||n,n===aO.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=Di(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=Fh(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*Ci(e.indices[i.relationship.from])/(Ci(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=Ci(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=Iie*Ci(e.primaryStore)+1:n==="between"?r.estimated_count=yie*Ci(e.primaryStore)+1:n==="sort"?r.estimated_count=Ci(e.primaryStore)+1:r.estimated_count=Nie*Ci(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function kh(e){if(e)if(yo=e,el.lastIndex=0,Lie.test(e))try{let t=F_(new tl,"");if($r!==yo.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${$r} in '${yo}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function F_(e,t){let r=el,n,s,i,o,c,l=decodeURIComponent,_;for(;n=r.exec(yo);){$r=r.lastIndex;let[,u,d]=n;if(o){if(u)throw new SyntaxError(`expected operator, but encountered '${u}'`);o=!1,c=!1}else c=!0;let f;switch(d){case"=":if(s){if(u.length<=2)i=u;else throw new SyntaxError(`invalid FIQL operator ${u}`);l=aG}else{if(l=decodeURIComponent,i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");s=k_(u)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=wie[d],l=cO[i]?aG:decodeURIComponent,!u)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=k_(u);break;case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s,value:l(u)};i==="eq"&&cG(h,u),xh(e,_),e.conditions.push(h)}d==="&"&&(_="and"),d==="|"&&(_="or"),s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(k_(u)),s=void 0;break;case"(":el.lastIndex=$r;let E=F_(u?[]:new tl,")");switch(u){case"":xh(e,_),e.conditions.push(E);break;case"limit":switch(E.length){case 1:e.limit=+E[0];break;case 2:e.offset=+E[0],e.limit=E[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(E[0])&&E.length===1&&!E[0].name?(e.select=E[0],e.select.asArray=!0):E.length===1?e.select=E[0]:E.length===2&&E[1]===""?e.select=E.slice(0,1):e.select=E;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=lG(E);break;default:throw new SyntaxError(`unknown query function call ${u}`)}yo[$r]===","?r.lastIndex=++$r:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!u)throw new SyntaxError("property sets must have a defined parent property name");el.lastIndex=$r,f=F_([],"}"),f.name=u,e.push(f),yo[$r]===","?r.lastIndex=++$r:o=!0;break;case"[":el.lastIndex=$r,u?(f=F_(new tl,"]"),f.name=u):f=F_(e.conditions?new tl:[],"]"),e.conditions?(xh(e,_),e.conditions.push(f),s=null):e.push(f),yo[$r]===","?r.lastIndex=++$r:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let h={comparator:i||"equals",attribute:s,value:l(u)};i==="eq"&&cG(h,u),xh(e,_),e.conditions.push(h)}else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(k_(u));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?Pie:el,r.lastIndex=$r),$r===yo.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function xh(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function k_(e){return e.indexOf(".")>-1?e.split(".").map(k_):decodeURIComponent(e)}function aG(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new pn.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function cG(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new pn.ClientError("wildcard can only be used at the end of a string")}function lG(e){let t=uG(e[0]);return e.length>1&&(t.next=lG(e.slice(1))),t}function uG(e){if(Array.isArray(e)){let t=uG(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}throw new SyntaxError(`Unknown sort type ${e}`)}function ds(e){return Array.isArray(e)?e.join("\0"):e}function Ci(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function Mie(e,t,r){return t*r/Ci(e)}var pn,aO,ks,No,Nie,yie,Iie,wie,cO,uO,Lie,el,Pie,$r,yo,tl,$h=Oe(()=>{pn=B(oe()),aO=B(at()),ks=require("ordered-binary"),No=require("lmdb"),Nie=.3,yie=.1,Iie=.05,wie={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},cO={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(lO,"executeConditions");a(rl,"searchByIndex");a(Di,"findAttribute");a(Cie,"joinTo");a(Die,"joinFrom");uO={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(_O,"filterByType");a(Fh,"estimateCondition");Lie=/[()[\]|!<>.]|(=\w*=)/,el=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,Pie=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(kh,"parseQuery");a(F_,"parseBlock");a(xh,"assignOperator");a(k_,"decodeProperty");a(aG,"typedDecoding");a(cG,"wildcardDecoding");a(lG,"toSortObject");a(uG,"toSortEntry");tl=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 n=this.conditions[r];if(n.attribute===t)return n.value}}};a(ds,"flattenKey");a(Ci,"estimatedEntryCount");a(Mie,"intersectionEstimate")});function hG(e){let t={openapi:Uie,info:{title:"HarperDB HTTP REST interface",version:(0,EG.version)()},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let _={},u=[];if(o)for(let{type:A,name:P,elements:U,relationship:v,definition:k}of o){if(v)A==="array"?_[P]={type:"array",items:{$ref:Io+U.type}}:_[P]={$ref:Io+A};else{let H=k??U?.definition;if(H){if(!t.components.schemas[H.type]){let j={};H.properties.forEach(z=>{j[z.name]=new hO(dO[z.type],z.type)}),t.components.schemas[H.type]=new fG(j)}A==="array"?_[P]={type:"array",items:{$ref:Io+H.type}}:_[P]={$ref:Io+H.type}}else A==="array"?U.type==="Any"||U.type=="ID"?_[P]={type:"array",items:{format:U.type}}:_[P]={type:"array",items:new hO(dO[U.type],U.type)}:A==="Any"||A=="ID"?_[P]={format:A}:_[P]=new hO(dO[A],A)}u.push(new pO(P,"query",_[P]))}let d=Object.keys(_),f=new pO(c,"path",{format:"ID"});f.required=!0,f.description="primary key of record";let E=new pO("property","path",{enum:d});E.required=!0,t.components.schemas[i]=new fG(_);let h=l.post!==Resource.prototype.post||l.update,m=typeof l.put=="function",S=typeof l.get=="function",R=typeof l.delete=="function",g="/"+s+"/";h&&(t.paths[g]={},t.paths[g].post=new vie(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[g]||(t.paths[g]={}),t.paths[g].get=new fO(u,r,{200:new EO({$ref:Io+i})},"search for records by the specified property name and value pairs")),R&&(t.paths[g]||(t.paths[g]={}),t.paths[g].delete=new dG(u,r,"delete all the records that match the provided query",{204:new _G})),g="/"+s+"/{"+c+"}",S&&(t.paths[g]={},t.paths[g].get=new fO([f],r,{200:new EO({$ref:Io+i})},"retrieve a record by its primary key")),m&&(t.paths[g]||(t.paths[g]={}),t.paths[g].put=new Bie([f],r,i,"create or update the record with the URL path that maps to the record's primary key")),R&&(t.paths[g]||(t.paths[g]={}),t.paths[g].delete=new dG([f],r,"delete a record with the given primary key",{204:new _G})),S&&E.schema.enum.length>0&&(g="/"+s+"/{"+c+"}.{property}",t.paths[g]={},t.paths[g].get=new fO([f,E],r,{200:new EO({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function vie(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Io+e}}}},this.security=t,this.responses={200:{description:mO,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function fO(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function EO(e){this.description=mO,this.content={"application/json":{schema:e}}}function _G(){this.description="successfully processed request, no content returned to client"}function Bie(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Io+r}}}},this.responses={200:{description:mO}}}function dG(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function fG(e){this.type="object",this.properties=e}function hO(e,t){this.type=e,this.format=t}function pO(e,t,r){this.name=e,this.in=t,this.schema=r}var EG,Uie,dO,Io,mO,pG=Oe(()=>{EG=B(Si()),Uie="3.0.3",dO={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Io="#/components/schemas/",mO="successful operation";a(hG,"generateJsonApi");a(vie,"Post");a(fO,"Get");a(EO,"Response200");a(_G,"Response204");a(Bie,"Put");a(dG,"Delete");a(fG,"ResourceSchema");a(hO,"Type");a(pO,"Parameter")});var Yh={};Fe(Yh,{start:()=>qie});async function Gie(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&kh(e);let s=new Ro;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==mG){let h=Vh.getMatch(i);if(!h)return t(e);e.handlerPath=h.path,o={url:h.relativeURL,async:!0},c=h.Resource}let l=r["cache-control"];if(l){l=l.toLowerCase();let h=l.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),l.includes("only-if-cached")&&(e.onlyIfCached=!0),l.includes("no-cache")&&(e.noCache=!0),l.includes("no-store")&&(e.noCacheStore=!0),l.includes("stale-if-error")&&(e.staleIfError=!0),l.includes("must-revalidate")&&(e.mustRevalidate=!0)}let _=await Ze(e,()=>{if(n==="POST"||n==="PUT"||n==="PATCH"||n==="QUERY")try{e.data=Ua(r["content-type"],!0)(e.body,e.headers)}catch(h){throw new nl.ClientError(h,400)}if(e.authorize=!0,i===mG&&n==="GET"){if(e?.user?.role?.permission?.super_user)return hG(Vh);throw new nl.ServerError("Forbidden",403)}switch(n){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.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return c.connect(o,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return c.query(o,e.data,e);case"COPY":return c.copy(o,r.destination,e);case"MOVE":return c.move(o,r.destination,e);case"BREW":throw new nl.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new nl.ServerError(`Method ${n} is not recognized`,501)}}),u=200,d;if(_==null)u=n==="GET"||n==="HEAD"?404:204,SO.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){Hie[0]=d;let h=String.fromCharCode(34,(tr[0]&63)+62,(tr[0]>>6)+(tr[1]<<2&63)+62,(tr[1]>>4)+(tr[2]<<4&63)+62,(tr[2]>>2)+62,(tr[3]&63)+62,(tr[3]>>6)+(tr[4]<<2&63)+62,(tr[4]>>4)+(tr[5]<<4&63)+62,(tr[5]>>2)+62,(tr[6]&63)+62,(tr[6]>>6)+(tr[7]<<2&63)+62,34),m=r["if-none-match"];m&&h==m?(_?.onDone&&_.onDone(),u=304,_=void 0):s.setIfNone("ETag",h),SO.lastModified&&s.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(u=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let f={status:u,headers:s,body:void 0},E=_?.wasLoadedFromSource?.();return E!==void 0&&(f.wasCacheMiss=E,!E&&d&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||d))/1e3))),_!==void 0&&(f.body=qh(_,e,f),n==="HEAD"&&(f.body=void 0)),f}catch(i){i.statusCode?i.statusCode===500?va.warn(i):va.info(i):va.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),s.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:s,body:void 0};return o.body=qh(i.contentType?i:i.toString(),e,o),o}}function qie(e){SO=e,!SG&&(SG=!0,Vh=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Gie(t,r)}),e.server.ws(async(t,r,n)=>{$_++;let s=new Zn;TG||(TG=!0,xu(u=>{$_>0&&u.push({metric:"ws-connections",connections:$_,byThread:!0})}));let i;t.on("error",u=>{i=!0,va.warn(u)});let o;t.on("message",a(function(d){o||(o=Ua(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{$_--,_n(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let l=r.url.slice(1),_=Vh.getMatch(l);if(_n(!!_,"connection","ws","connect"),!_)t.send(Ao(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,un(h=>({count:h.count,total:$_}),"connections",r.handlerPath,"connect","ws");let u={url:_.relativeURL,async:!0},d=_.Resource;c=(await Ze(r,()=>d.connect(u,s,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=Ao(E.value,r);t.send(h),un(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var va,nl,tr,Hie,SO,mG,SG,Vh,TG,$_,gG=Oe(()=>{Wc();pi();va=B(x()),nl=B(oe());$h();zl();fa();b_();pG();tr=new Uint8Array(8),Hie=new Float64Array(tr.buffer,0,1),SO={},mG="openapi";a(Gie,"http");$_=0;a(qie,"start")});var TO=T((Tbe,RG)=>{var{recordAction:Kh,recordActionBinary:xie}=(pi(),ie(Fu)),Fie=require("fastify-plugin"),kie=200;RG.exports=Fie(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,_,u,d;l.config?.isOperation?(_=n.body?.operation,u="operation"):(_=l.url,u="fastify-route",d=l.method),Kh(o,"duration",_,d,u),xie(s.raw.statusCode<400,"success",_,d,u);let f=kie;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Kh(performance.now()-c,"transfer",_,d,u),Kh(f,"bytes-sent",_,d,u)})):(f+=i?.length||0,Kh(f,"bytes-sent",_,d,u));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var NO=T((Abe,NG)=>{var zh=require("clone"),Jh=tt(),$ie=K(),Qh=D(),gbe=x(),gO=require("fs"),AO=require("joi"),{string:jh}=AO.types(),{hdb_errors:Vie,handleHDBError:Wh}=oe(),{HDB_ERROR_MSGS:Rbe,HTTP_STATUS_CODES:RO}=Vie,{common_validators:sl}=ws(),AG=" is required",Yie=["insert","update","upsert"],OO={database:{presence:!1,format:sl.schema_format,length:sl.schema_length},schema:{presence:!1,format:sl.schema_format,length:sl.schema_length},table:{presence:!0,format:sl.schema_format,length:sl.schema_length},action:{inclusion:{within:Yie,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Kie={schema:jh.required(),table:jh.required(),action:jh.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Wie,AWS_SECRET:Qie,AWS_BUCKET:jie,AWS_FILE_KEY:zie,REGION:Jie}=Qh.S3_BUCKET_AUTH_KEYS,Xie={s3:{presence:!0},[`s3.${Wie}`]:{presence:!0,type:"String"},[`s3.${Qie}`]:{presence:!0,type:"String"},[`s3.${jie}`]:{presence:!0,type:"String"},[`s3.${zie}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Jie}`]:{presence:!0,type:"String"}},OG=zh(OO);OG.data.presence={message:AG};var bG=zh(OO);bG.file_path.presence={message:AG};var Zie=Object.assign(zh(OO),Xie),bO=zh(Kie);bO.csv_url=jh.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();bO.passthrough_headers=AO.object();function eoe(e){let t=Jh.validateObject(e,OG);return Xh(e,t)}a(eoe,"dataObject");function toe(e){let t=Jh.validateBySchema(e,AO.object(bO));return Xh(e,t)}a(toe,"urlObject");function roe(e){let t=Jh.validateObject(e,bG);return Xh(e,t)}a(roe,"fileObject");function noe(e){let t=Jh.validateObject(e,Zie);return Xh(e,t)}a(noe,"s3FileObject");function Xh(e,t){if(!t){let r=$ie.checkGlobalSchemaTable(e.schema,e.table);if(r)return Wh(new Error,r,RO.BAD_REQUEST);if(e.operation===Qh.OPERATIONS_ENUM.CSV_FILE_LOAD)try{gO.accessSync(e.file_path,gO.constants.R_OK|gO.constants.F_OK)}catch(n){return n.code===Qh.NODE_ERROR_CODES.ENOENT?Wh(n,`No such file or directory ${n.path}`,RO.BAD_REQUEST):n.code===Qh.NODE_ERROR_CODES.EACCES?Wh(n,`Permission denied ${n.path}`,RO.BAD_REQUEST):Wh(n)}}return t}a(Xh,"postValidateChecks");NG.exports={dataObject:eoe,urlObject:toe,fileObject:roe,s3FileObject:noe}});var yO=T((bbe,yG)=>{"use strict";var V_=x(),Zh=D();async function soe(e,t,r,n=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let s;try{return s=await e(t),r&&await r(t,s,n),t.operation===Zh.OPERATIONS_ENUM.INSERT||t.operation===Zh.OPERATIONS_ENUM.UPDATE||t.operation===Zh.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===Zh.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(V_.info(i.message),i):i.http_resp_msg?(V_.error(`Error calling operation: ${e.name}`),V_.error(i.http_resp_msg),i):(V_.error(`Error calling operation: ${e.name}`),V_.error(i),i)}}a(soe,"callOperationFunctionAsAwait");yG.exports={callOperationFunctionAsAwait:soe}});var wG=T((ybe,IG)=>{"use strict";var IO=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},wO=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};IG.exports={BulkLoadFileObject:IO,BulkLoadDataObject:wO}});var DG=T((wbe,CG)=>{"use strict";var CO=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};CG.exports=CO});var vO=T((Ube,WG)=>{"use strict";var ep=yr(),rp=NO(),ioe=require("needle"),Es=D(),Dbe=Xe(),il=K(),{handleHDBError:_t,hdb_errors:qG}=oe(),{HTTP_STATUS_CODES:rr,HDB_ERROR_MSGS:Ht,CHECK_LOGS_WRAPPER:Ha}=qG,ol=x(),DO=require("papaparse");il.promisifyPapaParse();var hs=require("fs-extra"),ooe=require("path"),{chain:LG}=require("stream-chain"),PG=require("stream-json/streamers/StreamArray"),MG=require("stream-json/utils/Batch"),UG=require("stream-chain/utils/comp"),{finished:vG}=require("stream"),aoe=X(),xG=yO(),coe=XA(),{BulkLoadFileObject:PO,BulkLoadDataObject:loe}=wG(),MO=kA(),{verifyBulkLoadAttributePerms:FG}=Mh(),Lbe=DG(),Pbe=pt(),Mbe=ui(),{databases:uoe}=(ge(),ie(ke)),{coerceType:_oe}=(np(),ie(BO)),BG="No records parsed from csv file.",Ba=`${aoe.get("HDB_ROOT")}/tmp`,{schema_regex:doe}=ws(),HG=1024*1024*2,GG=5e3,foe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};WG.exports={csvDataLoad:Eoe,csvURLLoad:hoe,csvFileLoad:poe,importFromS3:moe};async function Eoe(e,t){let r=rp.dataObject(e);if(r)throw _t(r,r.message,rr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=VG(e.schema,e.table),i=DO.parse(e.data,{header:!0,skipEmptyLines:!0,transform:LO.bind(null,s),dynamicTyping:!1}),o=new MO;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&FG(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 _t(new Error,c,rr.BAD_REQUEST,void 0,void 0,!0);let l=new loe(e.action,e.schema,e.table,i.data);return n=await xG.callOperationFunctionAsAwait(YG,l,null),n.message===BG?BG:KG(n.records,n.number_written)}catch(s){throw Ga(s)}}a(Eoe,"csvDataLoad");async function hoe(e){let t=rp.urlObject(e);if(t)throw _t(t,t.message,rr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Ba}/${r}`;try{await Soe(e,r)}catch(s){throw ol.error(Ht.DOWNLOAD_FILE_ERR(r)+" - "+s),_t(s,Ha(Ht.DOWNLOAD_FILE_ERR(r)))}try{let s=new PO(this.job_operation_function.name,e.action,e.schema,e.table,n,Es.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await UO(s);return await tp(n),i}catch(s){throw await tp(n),Ga(s)}}a(hoe,"csvURLLoad");async function poe(e){let t=rp.fileObject(e);if(t)throw _t(t,t.message,rr.BAD_REQUEST,void 0,void 0,!0);let r=new PO(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Es.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await UO(r)}catch(n){throw Ga(n)}}a(poe,"csvFileLoad");async function moe(e){let t=rp.s3FileObject(e);if(t)throw _t(t,t.message,rr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=ooe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Ba}/${s}`;let i=new PO(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await Toe(s,e);let o=await UO(i);return await tp(r),o}catch(n){throw await tp(r),Ga(n)}}a(moe,"importFromS3");async function Soe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await ioe("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw _t(n,s,n.statusCode,Es.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Roe(r,e.csv_url),await goe(t,r.raw)}a(Soe,"downloadCSVFile");async function Toe(e,t){try{let r=`${Ba}/${e}`;await hs.mkdirp(Ba),await hs.writeFile(`${Ba}/${e}`,"",{flag:"a+"});let n=await hs.createWriteStream(r),s=await coe.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){ol.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw ol.error(Ht.S3_DOWNLOAD_ERR+" - "+r),_t(r,Ha(Ht.S3_DOWNLOAD_ERR))}}a(Toe,"downloadFileFromS3");async function goe(e,t){try{await hs.mkdirp(Ba),await hs.writeFile(`${Ba}/${e}`,t)}catch(r){throw ol.error(Ht.WRITE_TEMP_FILE_ERR),_t(r,Ha(Ht.DEFAULT_BULK_LOAD_ERR))}}a(goe,"writeFileToTempFolder");async function tp(e){if(e)try{await hs.access(e),await hs.unlink(e)}catch{ol.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(tp,"deleteTempFile");function Roe(e,t){if(e.statusCode!==qG.HTTP_STATUS_CODES.OK)throw _t(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,rr.BAD_REQUEST);if(!foe[e.headers["content-type"]])throw _t(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,rr.BAD_REQUEST);if(!e.raw)throw _t(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,rr.BAD_REQUEST)}a(Roe,"validateURLResponse");async function UO(e){try{let t;switch(e.file_type){case Es.VALID_S3_FILE_TYPES.CSV:t=await Aoe(e);break;case Es.VALID_S3_FILE_TYPES.JSON:t=await Ooe(e);break;default:throw _t(new Error,Ht.DEFAULT_BULK_LOAD_ERR,rr.BAD_REQUEST,Es.LOG_LEVELS.ERROR,Ht.INVALID_FILE_EXT_ERR(e))}return KG(t.records,t.number_written)}catch(t){throw Ga(t)}}a(UO,"fileLoad");async function kG(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await ep.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&FG(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=_t(c);r(l)}}a(kG,"validateChunk");async function $G(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;il.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!il.isEmpty(c)&&!il.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await xG.callOperationFunctionAsAwait(YG,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=_t(c,Ha(Ht.INSERT_CSV_ERR),rr.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,Ht.INSERT_CSV_ERR+" - "+c);r(l)}}a($G,"insertChunk");async function Aoe(e){let t={records:0,number_written:0},r=VG(e.schema,e.table);try{let n=new MO,s=hs.createReadStream(e.file_path,{highWaterMark:HG});s.setEncoding("utf8"),await DO.parsePromise(s,kG.bind(null,e,n),LO.bind(null,r));let i=n.getPermsResponse();if(i)throw _t(new Error,i,rr.BAD_REQUEST);return s=hs.createReadStream(e.file_path,{highWaterMark:HG}),s.setEncoding("utf8"),await DO.parsePromise(s,$G.bind(null,e,t),LO.bind(null,r)),s.destroy(),t}catch(n){throw _t(n,Ha(Ht.PAPA_PARSE_ERR),rr.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,Ht.PAPA_PARSE_ERR+n)}}a(Aoe,"callPapaParse");function VG(e,t){let r=uoe[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>_oe(i,s));return n}a(VG,"createTransformMap");function LO(e,t,r){let n=e.get(r);return n?n(t):il.autoCast(t)}a(LO,"typeFunction");async function Ooe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new MO,s=LG([hs.createReadStream(e.file_path,{encoding:"utf-8"}),PG.withParser(),c=>c.value,new MG({batchSize:GG}),UG(async c=>{await kG(e,n,r,c)})]);await new Promise((c,l)=>{vG(s,_=>{_?l(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw _t(new Error,i,rr.BAD_REQUEST);let o=LG([hs.createReadStream(e.file_path,{encoding:"utf-8"}),PG.withParser(),c=>c.value,new MG({batchSize:GG}),UG(async c=>{await $G(e,t,r,c)})]);return await new Promise((c,l)=>{vG(o,_=>{_?l(_):c()}),o.resume()}),t}catch(n){throw _t(n,Ha(Ht.INSERT_JSON_ERR),rr.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,Ht.INSERT_JSON_ERR+n)}}a(Ooe,"insertJson");async function YG(e){let t={};try{e.data&&e.data.length>0&&boe(e.data[0])?t=await Noe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",ol.info(t.message))}catch(r){throw Ga(r)}return t}a(YG,"callBulkFileLoad");function boe(e){let t=Object.keys(e);for(let r of t)if(!doe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(boe,"validateColumnNames");async function Noe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=ep.insert;break;case"update":i=ep.update;break;case"upsert":i=ep.upsert;break;default:throw _t(new Error,Ht.INVALID_ACTION_PARAM_ERR(n),rr.BAD_REQUEST,Es.LOG_LEVELS.ERROR,Ht.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){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 u=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][u])>=0&&e.splice(d,1)}let l=il.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw Ga(o)}}a(Noe,"bulkFileLoad");function KG(e,t){return`successfully loaded ${t} of ${e} records`}a(KG,"buildResponseMsg");function Ga(e){return _t(e,Ha(Ht.DEFAULT_BULK_LOAD_ERR),rr.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,Ht.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ga,"buildTopLevelErrMsg")});var jG=T((Bbe,QG)=>{"use strict";var HO=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};QG.exports=HO});var XG=T((Gbe,JG)=>{"use strict";var yoe=D(),zG=require("moment"),Ioe=require("uuid").v4,GO=class{static{a(this,"JobObject")}constructor(){this.id=Ioe(),this.type=void 0,this.start_datetime=zG().valueOf(),this.created_datetime=zG().valueOf(),this.end_datetime=void 0,this.status=yoe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};JG.exports=GO});var qO=T((xbe,sq)=>{"use strict";var woe=require("uuid").v4,tq=yr(),rq=ir(),Coe=os(),Doe=bc(),Loe=jG(),dt=D(),Poe=XG(),Moe=wE(),Fn=x(),Uoe=du(),al=K(),{promisify:voe}=require("util"),qa=require("moment"),Boe=vh(),sp=NO(),ZG=dT(),{deleteTransactionLogsBeforeValidator:Hoe}=HA(),{handleHDBError:Goe,hdb_errors:qoe}=oe(),{HTTP_STATUS_CODES:xoe}=qoe,eq=rq.searchByValue,Foe=rq.searchByHash,koe=tq.insert,$oe=voe(Boe.evaluateSQL),Voe=tq.update;sq.exports={addJob:Woe,updateJob:joe,handleGetJob:Yoe,handleGetJobsByStartDate:Koe,getJobById:nq};async function Yoe(e){try{let t=await nq(e.id);return al.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 Fn.error("There was an error getting job",t),new Error(r)}}a(Yoe,"handleGetJob");async function Koe(e){try{let t=await Qoe(e);if(Fn.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=qa(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=qa(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 Fn.error(r),new Error(r)}}a(Koe,"handleGetJobsByStartDate");async function Woe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||al.isEmptyOrZeroLength(e.operation)){let u="job parameter is invalid";return Fn.info(u),t.error=u,t}if(!dt.JOB_TYPE_ENUM[e.operation])return Fn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case dt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=sp.fileObject(e);break;case dt.OPERATIONS_ENUM.CSV_URL_LOAD:n=sp.urlObject(e);break;case dt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=sp.dataObject(e);break;case dt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=sp.s3FileObject(e);break;case dt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case dt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=ZG(e,"date");break;case dt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=ZG(e,"timestamp");break;case dt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Hoe(e);break;default:break}if(n)throw Goe(n,n.message,xoe.BAD_REQUEST,void 0,void 0,!0);let s=new Poe;s.type=e.operation===dt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?dt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new Coe(dt.SYSTEM_SCHEMA_NAME,dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await eq(i))}catch(u){let d=`There was an error inserting a new job: ${u}`;return Fn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=woe();try{o=await eq(i)}catch(u){let d=`There was an error inserting a new job: ${u}`;return Fn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Fn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new Uoe(dt.SYSTEM_SCHEMA_NAME,dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await koe(l)}catch(u){return Fn.error(`There was an error inserting a job for job type: ${e.operation} -- ${u}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let u=`Created a job with type ${s.type} and id ${s.id}`;t.message=u,t.createdJob=s,t.success=!0,Fn.trace(u)}return t}a(Woe,"addJob");async function Qoe(e){let t=qa(e.from_date,qa.ISO_8601),r=qa(e.to_date,qa.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 n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new Loe(n,e.hdb_user);try{return await $oe(s)}catch(i){throw Fn.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(Qoe,"getJobsInDateRange");async function nq(e){if(al.isEmptyOrZeroLength(e))return al.errorizeMessage("Invalid job ID specified.");let t=new Doe(dt.SYSTEM_SCHEMA_NAME,dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Foe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Fn.error(n),al.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(nq,"getJobById");async function joe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(al.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===dt.JOB_STATUS_ENUM.COMPLETE||e.status===dt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=qa().valueOf());let t=new Moe(dt.SYSTEM_SCHEMA_NAME,dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Voe(t),r}a(joe,"updateJob")});var uq=T((kbe,lq)=>{"use strict";var iq=K(),Vr=D(),zoe=require("moment"),ip=vO(),op=x(),oq=qO(),aq=Bh(),cq=na(),Joe=et(),Xoe=Ch(),xO=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Zoe(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(iq.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(iq.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Vr.JOB_TYPE_ENUM.csv_file_load:await Li(e,ip.csvFileLoad);break;case Vr.JOB_TYPE_ENUM.csv_url_load:await Li(e,ip.csvURLLoad);break;case Vr.JOB_TYPE_ENUM.csv_data_load:await Li(e,ip.csvDataLoad);break;case Vr.JOB_TYPE_ENUM.import_from_s3:await Li(e,ip.importFromS3);break;case Vr.JOB_TYPE_ENUM.empty_trash:break;case Vr.JOB_TYPE_ENUM.export_local:await Li(e,aq.export_local);break;case Vr.JOB_TYPE_ENUM.export_to_s3:await Li(e,aq.export_to_s3);break;case Vr.JOB_TYPE_ENUM.delete_files_before:case Vr.JOB_TYPE_ENUM.delete_records_before:await Li(e,cq.deleteFilesBefore);break;case Vr.JOB_TYPE_ENUM.delete_audit_logs_before:await Li(e,cq.deleteAuditLogsBefore);break;case Vr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Li(e,Xoe.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(Zoe,"parseMessage");async function Li(e,t){try{e.job.status=Vr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=zoe().valueOf(),await oq.updateJob(e.job),await eae(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):op.error(`There was an error running ${t.name} job with id ${e.job.id}`),op.error(n),e.job.message=n,e.job.status=Vr.JOB_STATUS_ENUM.ERROR;try{await oq.updateJob(e.job)}catch(s){throw op.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Li,"runJob");async function eae(e){op.trace("launching job thread:",e),Joe.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Vr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(eae,"launchJobThread");lq.exports={parseMessage:Zoe,RunnerMessage:xO}});var dq=T((Vbe,_q)=>{"use strict";var FO=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};_q.exports=FO});var Cq=T((Kbe,WO)=>{"use strict";var _p=ir(),VO=vh(),ap=vO(),Pi=RE(),cp=_i(),K_=na(),tae=uR(),Y_=wr(),lp=NE(),nr=BA(),up=x(),rae=RR(),nae=s_(),fq=ZR(),sae=FE(),iae=$E(),oae=tA(),aae=YE(),cae=WE(),kO=jE(),Eq=Bh(),lae=Mh(),YO=qO(),F=D(),{hdb_errors:Q_,handleHDBError:W_}=oe(),{HTTP_STATUS_CODES:hq}=Q_,$O=JE(),pq=wa(),Nq=require("util"),cl=yr(),uae=Mn(),_ae=mi(),mq=uq(),Sq=e_(),Tq=(Th(),ie(N_)),gq=ut(),Rq=Ch(),Aq=bh(),{setServerUtilities:dae}=(np(),ie(BO)),{CONTEXT:fae}=(es(),ie(cg)),{_assignPackageExport:Eae}=require("../index"),{transformReq:hae}=K(),{server:pae}=(Or(),ie(Wo)),fr=up.loggerWithTag("operation"),mae=yO(),Oq=_p.searchByHash,Sae=_p.searchByValue,Tae=Nq.promisify(_p.search),gae=Nq.promisify(VO.evaluateSQL),Rae={[F.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[F.OPERATIONS_ENUM.CREATE_TABLE]:!0,[F.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[F.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[F.OPERATIONS_ENUM.DROP_TABLE]:!0,[F.OPERATIONS_ENUM.DROP_SCHEMA]:!0},Y=dq();async function yq(e,t){try{if(e.body.operation!=="read_log"&&(up.log_level===F.LOG_LEVELS.INFO||up.log_level===F.LOG_LEVELS.DEBUG||up.log_level===F.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;fr.info(o)}}catch(n){fr.error(n)}let r=await mae.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Rae[e.body.operation]&&uae.setSchemaDataToGlobal(n=>{n&&fr.error(n)}),r}a(yq,"processLocalTransaction");var bq=Oae();WO.exports={chooseOperation:Iq,getOperationFunction:wq,operation:KO,processLocalTransaction:yq};dae(WO.exports);pae.operation=KO;function Iq(e){let t;try{t=wq(e)}catch(s){throw fr.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=VO.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=VO.checkASTPermissions(e,i);if(o)throw fr.error(`${hq.FORBIDDEN} from operation ${e.operation}`),fr.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),W_(new Error,o,Q_.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==F.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==F.OPERATIONS_ENUM.LOGIN&&e.operation!==F.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=lae.verifyPerms(i,s);if(o)throw fr.error(`${hq.FORBIDDEN} from operation ${e.operation}`),fr.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),W_(new Error,o,Q_.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw W_(s,"There was an error when trying to choose an operation path")}return r}a(Iq,"chooseOperation");function wq(e){if(fr.trace(`getOperationFunction with operation: ${e.operation}`),bq.has(e.operation))return bq.get(e.operation);throw W_(new Error,Q_.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Q_.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(wq,"getOperationFunction");Eae("operation",KO);function KO(e,t){e.hdb_user=this[fae]?.user,e.bypass_auth=!t;let r=Iq(e);return yq({body:e},r)}a(KO,"operation");async function Aae(e){fr.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[F.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case F.OPERATIONS_ENUM.INSERT:o=await cl.insert(i);break;case F.OPERATIONS_ENUM.UPDATE:o=await cl.update(i);break;case F.OPERATIONS_ENUM.UPSERT:o=await cl.upsert(i);break;case F.OPERATIONS_ENUM.DELETE:o=await K_.deleteRecord(i);break;default:fr.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){fr.info("Invalid operation in transaction"),fr.error(o)}}a(Aae,"catchup");async function $s(e){hae(e);let t,r;try{r=await YO.addJob(e),t=r.createdJob,fr.info("addJob result",r);let n=new mq.RunnerMessage(t,e);return await mq.parseMessage(n),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw fr.error(s),W_(n,s)}}a($s,"executeJob");function Oae(){let e=new Map;return e.set(F.OPERATIONS_ENUM.INSERT,new Y(cl.insert)),e.set(F.OPERATIONS_ENUM.UPDATE,new Y(cl.update)),e.set(F.OPERATIONS_ENUM.UPSERT,new Y(cl.upsert)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new Y(_p.searchByConditions)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_HASH,new Y(Oq)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_ID,new Y(Oq)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_VALUE,new Y(Sae)),e.set(F.OPERATIONS_ENUM.SEARCH,new Y(Tae)),e.set(F.OPERATIONS_ENUM.SQL,new Y(gae)),e.set(F.OPERATIONS_ENUM.CSV_DATA_LOAD,new Y($s,ap.csvDataLoad)),e.set(F.OPERATIONS_ENUM.CSV_FILE_LOAD,new Y($s,ap.csvFileLoad)),e.set(F.OPERATIONS_ENUM.CSV_URL_LOAD,new Y($s,ap.csvURLLoad)),e.set(F.OPERATIONS_ENUM.IMPORT_FROM_S3,new Y($s,ap.importFromS3)),e.set(F.OPERATIONS_ENUM.CREATE_SCHEMA,new Y(Pi.createSchema)),e.set(F.OPERATIONS_ENUM.CREATE_DATABASE,new Y(Pi.createSchema)),e.set(F.OPERATIONS_ENUM.CREATE_TABLE,new Y(Pi.createTable)),e.set(F.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new Y(Pi.createAttribute)),e.set(F.OPERATIONS_ENUM.DROP_SCHEMA,new Y(Pi.dropSchema)),e.set(F.OPERATIONS_ENUM.DROP_DATABASE,new Y(Pi.dropSchema)),e.set(F.OPERATIONS_ENUM.DROP_TABLE,new Y(Pi.dropTable)),e.set(F.OPERATIONS_ENUM.DROP_ATTRIBUTE,new Y(Pi.dropAttribute)),e.set(F.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new Y(cp.describeSchema)),e.set(F.OPERATIONS_ENUM.DESCRIBE_DATABASE,new Y(cp.describeSchema)),e.set(F.OPERATIONS_ENUM.DESCRIBE_TABLE,new Y(cp.describeTable)),e.set(F.OPERATIONS_ENUM.DESCRIBE_ALL,new Y(cp.describeAll)),e.set(F.OPERATIONS_ENUM.DELETE,new Y(K_.deleteRecord)),e.set(F.OPERATIONS_ENUM.ADD_USER,new Y(Y_.addUser)),e.set(F.OPERATIONS_ENUM.ALTER_USER,new Y(Y_.alterUser)),e.set(F.OPERATIONS_ENUM.DROP_USER,new Y(Y_.dropUser)),e.set(F.OPERATIONS_ENUM.LIST_USERS,new Y(Y_.listUsersExternal)),e.set(F.OPERATIONS_ENUM.LIST_ROLES,new Y(lp.listRoles)),e.set(F.OPERATIONS_ENUM.ADD_ROLE,new Y(lp.addRole)),e.set(F.OPERATIONS_ENUM.ALTER_ROLE,new Y(lp.alterRole)),e.set(F.OPERATIONS_ENUM.DROP_ROLE,new Y(lp.dropRole)),e.set(F.OPERATIONS_ENUM.USER_INFO,new Y(Y_.userInfo)),e.set(F.OPERATIONS_ENUM.READ_LOG,new Y(rae)),e.set(F.OPERATIONS_ENUM.ADD_NODE,new Y(nae)),e.set(F.OPERATIONS_ENUM.UPDATE_NODE,new Y(fq)),e.set(F.OPERATIONS_ENUM.SET_NODE_REPLICATION,new Y(fq)),e.set(F.OPERATIONS_ENUM.REMOVE_NODE,new Y(sae)),e.set(F.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new Y(iae)),e.set(F.OPERATIONS_ENUM.PURGE_STREAM,new Y(oae)),e.set(F.OPERATIONS_ENUM.SET_CONFIGURATION,new Y(gq.setConfiguration)),e.set(F.OPERATIONS_ENUM.CLUSTER_STATUS,new Y(aae.clusterStatus)),e.set(F.OPERATIONS_ENUM.CLUSTER_NETWORK,new Y(cae)),e.set(F.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new Y(kO.setRoutes)),e.set(F.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new Y(kO.getRoutes)),e.set(F.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new Y(kO.deleteRoutes)),e.set(F.OPERATIONS_ENUM.EXPORT_TO_S3,new Y($s,Eq.export_to_s3)),e.set(F.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new Y($s,K_.deleteFilesBefore)),e.set(F.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new Y($s,K_.deleteFilesBefore)),e.set(F.OPERATIONS_ENUM.EXPORT_LOCAL,new Y($s,Eq.export_local)),e.set(F.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new Y(YO.handleGetJobsByStartDate)),e.set(F.OPERATIONS_ENUM.GET_JOB,new Y(YO.handleGetJob)),e.set(F.OPERATIONS_ENUM.GET_FINGERPRINT,new Y($O.getFingerprint)),e.set(F.OPERATIONS_ENUM.SET_LICENSE,new Y($O.setLicense)),e.set(F.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new Y($O.getRegistrationInfo)),e.set(F.OPERATIONS_ENUM.RESTART,new Y(pq.restart)),e.set(F.OPERATIONS_ENUM.RESTART_SERVICE,new Y(pq.restartService)),e.set(F.OPERATIONS_ENUM.CATCHUP,new Y(Aae)),e.set(F.OPERATIONS_ENUM.SYSTEM_INFORMATION,new Y(_ae.systemInformation)),e.set(F.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new Y($s,K_.deleteAuditLogsBefore)),e.set(F.OPERATIONS_ENUM.READ_AUDIT_LOG,new Y(tae)),e.set(F.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new Y(Sq.createTokens)),e.set(F.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new Y(Sq.refreshOperationToken)),e.set(F.OPERATIONS_ENUM.LOGIN,new Y(Tq.login)),e.set(F.OPERATIONS_ENUM.LOGOUT,new Y(Tq.logout)),e.set(F.OPERATIONS_ENUM.GET_CONFIGURATION,new Y(gq.getConfiguration)),e.set(F.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new Y(nr.customFunctionsStatus)),e.set(F.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new Y(nr.getCustomFunctions)),e.set(F.OPERATIONS_ENUM.GET_COMPONENT_FILE,new Y(nr.getComponentFile)),e.set(F.OPERATIONS_ENUM.GET_COMPONENTS,new Y(nr.getComponents)),e.set(F.OPERATIONS_ENUM.SET_COMPONENT_FILE,new Y(nr.setComponentFile)),e.set(F.OPERATIONS_ENUM.DROP_COMPONENT,new Y(nr.dropComponent)),e.set(F.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new Y(nr.getCustomFunction)),e.set(F.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new Y(nr.setCustomFunction)),e.set(F.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new Y(nr.dropCustomFunction)),e.set(F.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new Y(nr.addComponent)),e.set(F.OPERATIONS_ENUM.ADD_COMPONENT,new Y(nr.addComponent)),e.set(F.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new Y(nr.dropCustomFunctionProject)),e.set(F.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Y(nr.packageComponent)),e.set(F.OPERATIONS_ENUM.PACKAGE_COMPONENT,new Y(nr.packageComponent)),e.set(F.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Y(nr.deployComponent)),e.set(F.OPERATIONS_ENUM.DEPLOY_COMPONENT,new Y(nr.deployComponent)),e.set(F.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new Y(Rq.readTransactionLog)),e.set(F.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new Y($s,Rq.deleteTransactionLogsBefore)),e.set(F.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new Y(Aq.installModules)),e.set(F.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new Y(Aq.auditModules)),e.set(F.OPERATIONS_ENUM.GET_BACKUP,new Y(Pi.getBackup)),e}a(Oae,"initializeOperationFunctionMap")});var fp=T((Qbe,Pq)=>{"use strict";var QO=D(),bae=K(),j_=x(),{handleHDBError:jO,hdb_errors:dp}=oe(),{isMainThread:Nae}=require("worker_threads"),{Readable:yae}=require("stream"),Dq=require("os"),Iae=require("util"),wae=LR(),Cae=Iae.promisify(wae.authorize),Lq=Cq(),{createGzip:Dae,constants:Lae}=require("zlib");function Pae(e){let t=`Found an uncaught exception with message: ${e.message}. ${Dq.EOL}Stack: ${e.stack} ${Dq.EOL}Terminating ${Nae?"HDB":"thread"}.`;console.error(t),j_.fatal(t),process.exit(1)}a(Pae,"handleServerUncaughtException");function Mae(e,t,r){if(j_[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 n=e.statusCode?e.statusCode:dp.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(Mae,"serverErrorHandler");function Uae(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=jO(new Error,"Invalid JSON.",dp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(bae.isEmpty(e.body.operation)){let n=jO(new Error,"Request body must include an 'operation' property.",dp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(Uae,"reqBodyValidationHandler");function vae(e,t,r){let n;e.body.operation!==QO.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==QO.OPERATIONS_ENUM.LOGIN&&e.body.operation!==QO.OPERATIONS_ENUM.LOGOUT?Cae(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{j_.warn(s),j_.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(jO(s,i,dp.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(vae,"authHandler");async function Bae(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=Lq.chooseOperation(e.body);let s=await Lq.processLocalTransaction(e,n);if(s instanceof yae&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(Dae({level:Lae.Z_BEST_SPEED})))}return s}catch(s){throw j_.error(s),s}}a(Bae,"handlePostRequest");Pq.exports={authHandler:vae,handlePostRequest:Bae,handleServerUncaughtException:Pae,serverErrorHandler:Mae,reqBodyValidationHandler:Uae}});var Bq=T((zbe,vq)=>{"use strict";var Hae=require("fastify-plugin"),{handlePostRequest:Mq,authHandler:Gae,reqBodyValidationHandler:qae}=fp();async function xae(e){e.decorate("hdbCore",{preValidation:[qae,Gae],request:t=>Uq(Mq(t,response)),requestWithoutAuthentication:(t,r)=>Uq(Mq(t,r,!0))})}a(xae,"hdbCore");async function Uq(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(Uq,"convertAsyncIterators");vq.exports=Hae(xae)});var qq=T((Zbe,Gq)=>{"use strict";var Xbe=require("fs"),zO=X();zO.initSync();var{CONFIG_PARAMS:Hq}=D(),Fae=1024*1024*1024;function kae(e){let t=zO.get(Hq.HTTP_TIMEOUT),r=zO.get(Hq.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Fae,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(kae,"getServerOptions");Gq.exports=kae});var kq=T((tNe,Fq)=>{"use strict";var JO=X();JO.initSync();var{CONFIG_PARAMS:xq}=D();function $ae(){let e=JO.get(xq.HTTP_CORSACCESSLIST),t=JO.get(xq.HTTP_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=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a($ae,"getCORSOptions");Fq.exports=$ae});var Yq=T((nNe,Vq)=>{"use strict";var $q=X();$q.initSync();var Vae=D();function Yae(){return $q.get(Vae.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Yae,"getHeaderTimeoutConfig");Vq.exports=Yae});var ZO={};Fe(ZO,{customFunctionsServer:()=>Qae,ready:()=>ox,start:()=>Wae});function Wae(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Mi||(Mi=ix(t),ct.http((await Mi).server));let o=await Mi,c=(0,XO.dirname)(s),l=(0,XO.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!Kq.has(c)){Kq.add(c);try{o.register(zae(c,l))}catch(_){if(_.message==="Root plugin has already booted")Ke.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:ox}}async function Qae(){try{Ke.info("In Custom Functions Fastify server"+process.cwd()),Ke.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ke.debug(`Custom Functions server process ${process.pid} starting up.`),await jae();let e=Xq.get(Zq.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Mi=await ix(e)}catch(r){throw Ke.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ke.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ke.error(`Custom Functions ${process.pid} Error: ${e}`),Ke.error(e),process.exit(1)}}async function jae(){try{Ke.info("Custom Functions starting configuration."),await ex.setUsersToGlobal(),Ke.info("Custom Functions completed configuration.")}catch(e){Ke.error(e)}}function zae(e,t){return async function(r){try{Ke.info("Custom Functions starting buildRoutes"),Ke.trace("Loading fastify routes folder "+e),(0,Wq.existsSync)(e)&&r.register(Jq.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Ke.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Ke.error(s.message):s&&Ke.error(s),o()})}catch(n){Ke.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function ix(e){Ke.info("Custom Functions starting buildServer.");let t=(0,tx.default)(e),r=(0,Qq.default)(t);r.server.headersTimeout=(0,nx.default)(),r.setErrorHandler(sx.serverErrorHandler);let n=(0,rx.default)();return n&&r.register(jq.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(zq.default),await r.register(Kae),await r.after(),oO(r),Ke.info("Custom Functions completed buildServer."),r}function ox(){if(Mi)return Mi.then?Mi.then(e=>e.ready()):Mi.ready()}var XO,Wq,Qq,jq,zq,Jq,Xq,Zq,Ke,Kae,ex,tx,rx,nx,sx,Mi,Kq,ax=Oe(()=>{XO=require("path"),Wq=require("fs"),Qq=B(require("fastify")),jq=B(require("@fastify/cors")),zq=B(TO()),Jq=B(require("@fastify/autoload")),Xq=B(X()),Zq=B(D()),Ke=B(x()),Kae=B(Bq()),ex=B(wr()),tx=B(qq()),rx=B(kq()),nx=B(Yq()),sx=B(fp());Wc();Or();Kq=new Set;a(Wae,"start");a(Qae,"customFunctionsServer");a(jae,"setUp");a(zae,"buildRouteFolder");a(ix,"buildServer");a(ox,"ready")});var eb={};Fe(eb,{start:()=>Jae});function Jae(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,dx.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){lx||(lx=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=cx.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,ux.default)(s,(0,_x.realpathSync)(o))}}return i(s)},{runFirst:!0})),cx.set(r,n)}}}var ux,_x,dx,cx,lx,fx=Oe(()=>{ux=B(require("send")),_x=require("fs"),dx=B(require("serve-static")),cx=new Map;a(Jae,"start")});var sb={};Fe(sb,{Request:()=>tb,createReuseportFd:()=>Ep});var Ex,tb,rb,nb,Ep,hp=Oe(()=>{Ex=require("os"),tb=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new nb(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new rb(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},rb=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},nb=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,Ex.platform)()!="win32"&&(Ep=require("node-unix-socket").createReuseportFd)});var _b=T(xa=>{"use strict";var{isMainThread:gx,parentPort:J_,threadId:pp}=require("worker_threads"),{Socket:Xae,createServer:Zae}=require("net"),{createServer:ece,IncomingMessage:tce}=require("http"),{createServer:rce}=require("https"),{readFileSync:ll,unlinkSync:hx,existsSync:nce}=require("fs"),Er=x(),Le=X(),Tt=D(),{server:gp}=(Or(),ie(Wo)),{WebSocketServer:sce}=require("ws"),{createServer:ice}=require("tls"),{getTicketKeys:oce,restartNumber:ace,getWorkerIndex:Sp}=et(),{Headers:Rx,appendHeader:cce}=(b_(),ie(DB)),{recordAction:z_,recordActionBinary:lce}=(pi(),ie(Fu)),{Request:Ax,createReuseportFd:px}=(hp(),ie(sb)),{checkMemoryLimit:uce}=aa(),Ox=require("tls"),mx=Ox.createSecureContext;Ox.createSecureContext=function(e){if(!e.cert||!e.key)return mx(e);let t={...e};delete t.key,delete t.cert;let r=mx(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var bx=Le.get(Tt.CONFIG_PARAMS.THREADS_DEBUG);if(bx){let e;if(gx)e=Le.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Er.info("Could not close debugger",t)}});else{let t=Le.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Sp()>=0&&(e=t+Sp())}if(e){let t=Le.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=Le.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Er.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){ace<=1&&Er.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:uNe,CONFIG_PARAMS:_ce}=Tt;Le.initSync();var dce=Le.get(_ce.HTTP_SESSIONAFFINITY),Vs={};xa.registerServer=lb;xa.httpServer=ub;xa.deliverSocket=cb;xa.startServers=Nx;xa.when_components_loaded=null;gp.http=ub;gp.request=pce;gp.socket=mce;gp.ws=Sce;var ib={},mp={},fce,wo={},Tp={},Ece=[],ob=[];function Nx(){return xa.when_components_loaded=Rp().loadRootComponents(!0).then(()=>{J_?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)cb(n,r,s);else if(t.requestId)hce(t);else if(t.type===Tt.ITC_EVENT_TYPES.SHUTDOWN){Er.trace("received shutdown request",pp);for(let i in Vs){let o=Vs[i],c;if(o.closeIdleConnections){let _=Object.getOwnPropertySymbols(o).find(f=>f.description.includes("connections")),u=0,d=setInterval(()=>{u++;let f=u>=100,E=o[_][f?"all":"idle"]();if(E.length===0){f&&clearInterval(d);return}u===1?Er.info(`Closing ${E.length} idle connections`):f&&Er.warn(`Forcefully closing ${E.length} active connections`);for(let h=0,m=E.length;h<m;h++){let S=E[h].socket;S._httpMessage&&!S._httpMessage.finished&&!f||(f?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
29
+ `},compressible:!1,q:.8});Qt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,n]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let s=t[r];Array.isArray(s)?s.push(n):t.key=[s,n]}else t[r]=n},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});aG={type:"application/json",serializeStream:Xl,serialize:q_,deserialize:Rie,q:.5};Qt.set("*/*",aG);Qt.set("",aG);a(Rie,"tryJSONParse");a(cO,"registerContentHandlers");Aie=require("fastify-plugin"),Oie=Aie(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=qh(n.raw);s.type(c),s.serializer(function(l){return(o.serializeStream||o.serialize)(l,{headers:{set:(_,u)=>{s.header(_,u)}}})})}),r()},{name:"content-type-negotiation"});a(qh,"findBestSerializer");rG=sO.default.get(iO.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(xh,"serialize");a(Da,"serializeMessage");a(bie,"streamToBuffer");a(Ua,"getDeserializer");a(nG,"deserializerUnknownType");a(Nie,"transformIterable")});function _O(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let d=_(l);for(let E=1;E<e.length;E++){let h=e[E],m=_(h);d=d.concat(m)}let f=new Set;return d.filter(E=>{let h=E.key??E;return f.has(h)?!1:(f.add(h),!0)})}else{let d=_(l),f=u(e.slice(1),!0,l.estimated_count);return f.length>0?o(d,f):d}function _(d){return d.conditions?_O(d.conditions,d.operator,r,n,s,i,o,c):tl(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(_,"executeCondition");function u(d,f,E){return d.map((h,m)=>{if(h.conditions){let T=h.operator==="or",A=u(h.conditions,!T,E);return T?(L,U)=>A.some(v=>v(L,U)):(L,U)=>A.every(v=>v(L,U))}let S=(h.attribute||h[0])===r.primaryKey,R=fO(h,r,i,c,S,E);return f&&m<d.length-1&&E&&(E=Uie(r.primaryStore,h.estimated_count,E)),R}).filter(Boolean)}a(u,"mapConditionsToFilters")}function tl(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(Array.isArray(o)){let T=o[0],A=Di(n.attributes,T);if(A.relationship){if(o.length<2)throw new pn.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let L=A.definition?.tableClass||A.elements?.definition?.tableClass,U=new Map,v=tl({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,L,s,U);if(A.relationship.to){i[o[0]]=U;let k=!!Di(L.attributes,A.relationship.to)?.elements;v=Die(v,A,L.primaryStore,k,U)}if(A.relationship.from){let k=a(H=>tl({attribute:A.relationship.from,value:H},t,r,n,s,U),"searchEntry");A.elements?(i[o[0]]=U,v=Lie(v,A,L.primaryStore,U,k)):v=v.flatMap(k)}return v}else if(o.length===1)o=o[0];else throw new pn.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,u,d,f;c instanceof Date&&(c=c.getTime());let E;switch(dO[l]||l){case"lt":_=!0,u=c;break;case"le":_=!0,u=c,d=!0;break;case"gt":_=c,f=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,u=c.slice(0),u[u.length-1]=$s.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),u=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),u=c[1],u instanceof Date&&(u=u.getTime()),d=!0;break;case"equals":case void 0:_=c,u=c,d=!0;break;case"ne":if(c===null){_=c,f=!0;break}case"sort":case"contains":case"ends_with":_=!0,E=!0;break;default:throw new pn.ClientError(`Unknown query comparator "${l}"`)}if(r){let T=_;_=u,u=T,T=!f,f=!d,d=T}let h=o===n.primaryKey||o==null,m=h?n.primaryStore:n.indices[o],S;if(!m||m.isIndexing||E||c===null&&!m.indexNulls){if(s===!1&&!m)throw new pn.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&E)throw new pn.ClientError(`Can not use ${l||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(m?.isIndexing)throw new pn.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!m.indexNulls)throw new pn.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(S=fO(e),!S)throw new pn.ClientError(`Unknown search operator ${e.comparator}`)}let R={start:_,end:u,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let T=m.getRange(R).map(S?function({key:A,value:L}){return this.isSync?L&&S(L)?A:No.SKIP:new Promise((U,v)=>setImmediate(()=>{try{U(L&&S(L)?A:No.SKIP)}catch(k){v(k)}}))}:A=>A.value==null?No.SKIP:A);return T.hasEntries=!0,T}else return m?m.getRange(R).map(S?function({key:T,value:A}){return this.isSync?S({[o]:T})?A:No.SKIP:new Promise((L,U)=>setImmediate(()=>{try{L(S({[o]:T})?A:No.SKIP)}catch(v){U(v)}}))}:({value:T})=>T):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:T,value:A}){return this.isSync?A&&S(A)?T:No.SKIP:new Promise((L,U)=>setImmediate(()=>{try{L(A&&S(A)?T:No.SKIP)}catch(v){U(v)}}))})}function Di(e,t){if(Array.isArray(t))if(t.length>1){let r=Di(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?Di(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function Die(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;s.hasMappings=!0;let o;return{next(){if(!i){let l=t.relationship.to,_=a((u,d)=>{let f=u;Array.isArray(u)&&(f=ds(u),o=!0);let E=s.get(f);E?E.push(d):s.set(f,E=[d]),u!==f&&(E.key=u)},"add_entry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[l];if(f!=null&&!s.filters?.some(E=>!E(d)))if(n)for(let E=0;E<f.length;E++)_(f[E],u);else _(f,u)}return i=(o?s:s.keys())[Symbol.iterator](),this.next()}let c=i.next();return c.done?c:{value:o?c.value[1].key||c.value[0]:c.value}}}}})}function Lie(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let _=ds(l.value);if(!c.has(_))return c.add(_),l}if(!i){let _=new Map;n.fromRecord=u=>u[t.relationship.from]?.filter?.(d=>_.has(ds(d)));for(let u of e){if(n.filters){let d=r.get(u);if(n.filters.some(f=>!f(d)))continue}_.set(ds(u),u)}return i=_.values()[Symbol.iterator](),this.next()}do{let _=i.next();return _.done?_:(o=s(_.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function fO(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let u=c[0],d=Di(t.attributes,u),f=d.definition?.tableClass||d.elements.definition?.tableClass,E=n?.[u],h=fO({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},f,r,E?.[u]?.joined,c[1]===f.primaryKey,i);if(!h)return;if(E){E.filters||(E.filters=[]),E.filters.push(h);return}let m=t.propertyResolvers?.[u],S,R=a((T,A)=>{let L,U;if(m){if(m.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let k of h.idFilter.idSet)e={attribute:m.from,value:k};S=_(m.from,h.idFilter,!0,!0)}else S=_(m.from,h.idFilter,!1,!0);let v=S(T);return S.idFilter&&(R.idFilter=S.idFilter),v}U=m(T,r,A),L=U?.value}else L=T[u];return L?Array.isArray(L)?L.some(h):h(L,U):!1},"recordFilter");return R}}switch(l instanceof Date&&(l=l.getTime()),dO[o]||o){case lO.SEARCH_TYPES.EQUALS:case void 0:return _(c,u=>u===l,!0);case"contains":return _(c,u=>u?.toString().includes(l));case"ends_with":return _(c,u=>u?.toString().endsWith(l));case"starts_with":return _(c,u=>typeof u=="string"&&u.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],_(c,u=>{if(!Array.isArray(u))return!1;for(let d=0,f=l.length;d<f;d++)if(u[d]!==l[d])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),_(c,u=>(0,$s.compareKeys)(u,l[0])>=0&&(0,$s.compareKeys)(u,l[1])<=0,!0);case"gt":return _(c,u=>(0,$s.compareKeys)(u,l)>0);case"ge":return _(c,u=>(0,$s.compareKeys)(u,l)>=0);case"lt":return _(c,u=>(0,$s.compareKeys)(u,l)<0);case"le":return _(c,u=>(0,$s.compareKeys)(u,l)<=0);case"ne":return _(c,u=>(0,$s.compareKeys)(u,l)!==0);case"sort":return()=>!0;default:throw new pn.ClientError(`Unknown query comparator "${o}"`)}function _(u,d,f,E){let h;f=f&&!s&&t?.indices[u]&&i>3,f&&(e.estimated_count==null&&kh(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(f=!1));let m=0,S=3;function R(T){let A=T[u],L;if(typeof A!="object"||!A||E?L=d(A):Array.isArray(A)?L=A.some(d):A instanceof Date&&(L=d(A.getTime())),f&&(S++,!L&&!R.idFilter&&++m/S*(i-S)>h)){let U=tl(e,r.transaction.getReadTxn(),!1,t).map(ds),v=new Set(U);R.idFilter=k=>v.has(ds(k)),R.idFilter.idSet=v}return L}return a(R,"recordFilter"),s&&(R.idFilter=d),R}a(_,"attributeComparator")}function kh(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/Ci(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=dO[n]||n,n===lO.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=Di(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=kh(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*Ci(e.indices[i.relationship.from])/(Ci(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=Ci(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=wie*Ci(e.primaryStore)+1:n==="between"?r.estimated_count=Iie*Ci(e.primaryStore)+1:n==="sort"?r.estimated_count=Ci(e.primaryStore)+1:r.estimated_count=yie*Ci(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function $h(e){if(e)if(yo=e,Zc.lastIndex=0,Pie.test(e))try{let t=F_(new el,"");if(Vr!==yo.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${Vr} in '${yo}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function F_(e,t){let r=Zc,n,s,i,o,c,l=decodeURIComponent,_;for(;n=r.exec(yo);){Vr=r.lastIndex;let[,u,d]=n;if(o){if(u)throw new SyntaxError(`expected operator, but encountered '${u}'`);o=!1,c=!1}else c=!0;let f;switch(d){case"=":if(s){if(u.length<=2)i=u;else throw new SyntaxError(`invalid FIQL operator ${u}`);l=lG}else{if(l=decodeURIComponent,i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");s=k_(u)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=Cie[d],l=uO[i]?lG:decodeURIComponent,!u)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=k_(u);break;case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s,value:l(u)};i==="eq"&&uG(h,u),Fh(e,_),e.conditions.push(h)}d==="&"&&(_="and"),d==="|"&&(_="or"),s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(k_(u)),s=void 0;break;case"(":Zc.lastIndex=Vr;let E=F_(u?[]:new el,")");switch(u){case"":Fh(e,_),e.conditions.push(E);break;case"limit":switch(E.length){case 1:e.limit=+E[0];break;case 2:e.offset=+E[0],e.limit=E[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(E[0])&&E.length===1&&!E[0].name?(e.select=E[0],e.select.asArray=!0):E.length===1?e.select=E[0]:E.length===2&&E[1]===""?e.select=E.slice(0,1):e.select=E;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=_G(E);break;default:throw new SyntaxError(`unknown query function call ${u}`)}yo[Vr]===","?r.lastIndex=++Vr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!u)throw new SyntaxError("property sets must have a defined parent property name");Zc.lastIndex=Vr,f=F_([],"}"),f.name=u,e.push(f),yo[Vr]===","?r.lastIndex=++Vr:o=!0;break;case"[":Zc.lastIndex=Vr,u?(f=F_(new el,"]"),f.name=u):f=F_(e.conditions?new el:[],"]"),e.conditions?(Fh(e,_),e.conditions.push(f),s=null):e.push(f),yo[Vr]===","?r.lastIndex=++Vr:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let h={comparator:i||"equals",attribute:s,value:l(u)};i==="eq"&&uG(h,u),Fh(e,_),e.conditions.push(h)}else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(k_(u));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?Mie:Zc,r.lastIndex=Vr),Vr===yo.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Fh(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function k_(e){return e.indexOf(".")>-1?e.split(".").map(k_):decodeURIComponent(e)}function lG(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new pn.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function uG(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new pn.ClientError("wildcard can only be used at the end of a string")}function _G(e){let t=dG(e[0]);return e.length>1&&(t.next=_G(e.slice(1))),t}function dG(e){if(Array.isArray(e)){let t=dG(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}throw new SyntaxError(`Unknown sort type ${e}`)}function ds(e){return Array.isArray(e)?e.join("\0"):e}function Ci(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function Uie(e,t,r){return t*r/Ci(e)}var pn,lO,$s,No,yie,Iie,wie,Cie,uO,dO,Pie,Zc,Mie,Vr,yo,el,Vh=be(()=>{pn=B(oe()),lO=B(at()),$s=require("ordered-binary"),No=require("lmdb"),yie=.3,Iie=.1,wie=.05,Cie={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},uO={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(_O,"executeConditions");a(tl,"searchByIndex");a(Di,"findAttribute");a(Die,"joinTo");a(Lie,"joinFrom");dO={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(fO,"filterByType");a(kh,"estimateCondition");Pie=/[()[\]|!<>.]|(=\w*=)/,Zc=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,Mie=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a($h,"parseQuery");a(F_,"parseBlock");a(Fh,"assignOperator");a(k_,"decodeProperty");a(lG,"typedDecoding");a(uG,"wildcardDecoding");a(_G,"toSortObject");a(dG,"toSortEntry");el=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 n=this.conditions[r];if(n.attribute===t)return n.value}}};a(ds,"flattenKey");a(Ci,"estimatedEntryCount");a(Uie,"intersectionEstimate")});function mG(e){let t={openapi:vie,info:{title:"HarperDB HTTP REST interface",version:(0,pG.version)()},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let _={},u=[];if(o)for(let{type:A,name:L,elements:U,relationship:v,definition:k}of o){if(v)A==="array"?_[L]={type:"array",items:{$ref:Io+U.type}}:_[L]={$ref:Io+A};else{let H=k??U?.definition;if(H){if(!t.components.schemas[H.type]){let j={};H.properties.forEach(z=>{j[z.name]=new mO(EO[z.type],z.type)}),t.components.schemas[H.type]=new hG(j)}A==="array"?_[L]={type:"array",items:{$ref:Io+H.type}}:_[L]={$ref:Io+H.type}}else A==="array"?U.type==="Any"||U.type=="ID"?_[L]={type:"array",items:{format:U.type}}:_[L]={type:"array",items:new mO(EO[U.type],U.type)}:A==="Any"||A=="ID"?_[L]={format:A}:_[L]=new mO(EO[A],A)}u.push(new SO(L,"query",_[L]))}let d=Object.keys(_),f=new SO(c,"path",{format:"ID"});f.required=!0,f.description="primary key of record";let E=new SO("property","path",{enum:d});E.required=!0,t.components.schemas[i]=new hG(_);let h=l.post!==Resource.prototype.post||l.update,m=typeof l.put=="function",S=typeof l.get=="function",R=typeof l.delete=="function",T="/"+s+"/";h&&(t.paths[T]={},t.paths[T].post=new Bie(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[T]||(t.paths[T]={}),t.paths[T].get=new hO(u,r,{200:new pO({$ref:Io+i})},"search for records by the specified property name and value pairs")),R&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new EG(u,r,"delete all the records that match the provided query",{204:new fG})),T="/"+s+"/{"+c+"}",S&&(t.paths[T]={},t.paths[T].get=new hO([f],r,{200:new pO({$ref:Io+i})},"retrieve a record by its primary key")),m&&(t.paths[T]||(t.paths[T]={}),t.paths[T].put=new Hie([f],r,i,"create or update the record with the URL path that maps to the record's primary key")),R&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new EG([f],r,"delete a record with the given primary key",{204:new fG})),S&&E.schema.enum.length>0&&(T="/"+s+"/{"+c+"}.{property}",t.paths[T]={},t.paths[T].get=new hO([f,E],r,{200:new pO({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function Bie(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Io+e}}}},this.security=t,this.responses={200:{description:TO,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function hO(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function pO(e){this.description=TO,this.content={"application/json":{schema:e}}}function fG(){this.description="successfully processed request, no content returned to client"}function Hie(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Io+r}}}},this.responses={200:{description:TO}}}function EG(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function hG(e){this.type="object",this.properties=e}function mO(e,t){this.type=e,this.format=t}function SO(e,t,r){this.name=e,this.in=t,this.schema=r}var pG,vie,EO,Io,TO,SG=be(()=>{pG=B(Si()),vie="3.0.3",EO={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Io="#/components/schemas/",TO="successful operation";a(mG,"generateJsonApi");a(Bie,"Post");a(hO,"Get");a(pO,"Response200");a(fG,"Response204");a(Hie,"Put");a(EG,"Delete");a(hG,"ResourceSchema");a(mO,"Type");a(SO,"Parameter")});var Kh={};Fe(Kh,{start:()=>xie});async function qie(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&$h(e);let s=new Ao;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==TG){let h=Yh.getMatch(i);if(!h)return t(e);e.handlerPath=h.path,o={url:h.relativeURL,async:!0},c=h.Resource}let l=r["cache-control"];if(l){l=l.toLowerCase();let h=l.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),l.includes("only-if-cached")&&(e.onlyIfCached=!0),l.includes("no-cache")&&(e.noCache=!0),l.includes("no-store")&&(e.noCacheStore=!0),l.includes("stale-if-error")&&(e.staleIfError=!0),l.includes("must-revalidate")&&(e.mustRevalidate=!0)}let _=await Ze(e,()=>{if(n==="POST"||n==="PUT"||n==="PATCH"||n==="QUERY")try{e.data=Ua(r["content-type"],!0)(e.body,e.headers)}catch(h){throw new rl.ClientError(h,400)}if(e.authorize=!0,i===TG&&n==="GET"){if(e?.user?.role?.permission?.super_user)return mG(Yh);throw new rl.ServerError("Forbidden",403)}switch(n){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.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return c.connect(o,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return c.query(o,e.data,e);case"COPY":return c.copy(o,r.destination,e);case"MOVE":return c.move(o,r.destination,e);case"BREW":throw new rl.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new rl.ServerError(`Method ${n} is not recognized`,501)}}),u=200,d;if(_==null)u=n==="GET"||n==="HEAD"?404:204,gO.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){Gie[0]=d;let h=String.fromCharCode(34,(tr[0]&63)+62,(tr[0]>>6)+(tr[1]<<2&63)+62,(tr[1]>>4)+(tr[2]<<4&63)+62,(tr[2]>>2)+62,(tr[3]&63)+62,(tr[3]>>6)+(tr[4]<<2&63)+62,(tr[4]>>4)+(tr[5]<<4&63)+62,(tr[5]>>2)+62,(tr[6]&63)+62,(tr[6]>>6)+(tr[7]<<2&63)+62,34),m=r["if-none-match"];m&&h==m?(_?.onDone&&_.onDone(),u=304,_=void 0):s.setIfNone("ETag",h),gO.lastModified&&s.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(u=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let f={status:u,headers:s,body:void 0},E=_?.wasLoadedFromSource?.();return E!==void 0&&(f.wasCacheMiss=E,!E&&d&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||d))/1e3))),_!==void 0&&(f.body=xh(_,e,f),n==="HEAD"&&(f.body=void 0)),f}catch(i){i.statusCode?i.statusCode===500?va.warn(i):va.info(i):va.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),s.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:s,body:void 0};return o.body=xh(i.contentType?i:i.toString(),e,o),o}}function xie(e){gO=e,!gG&&(gG=!0,Yh=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return qie(t,r)}),e.server.ws(async(t,r,n)=>{$_++;let s=new Zn;RG||(RG=!0,xu(l=>{$_>0&&l.push({metric:"ws-connections",connections:$_,byThread:!0})}));let i;t.on("error",l=>{i=!0,va.warn(l)});let o;t.on("message",a(function(_){o||(o=Ua(r.headers.asObject["content-type"]));let u=o(_);s.push(u)},"message"));let c;t.on("close",()=>{$_--,_n(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),_=Yh.getMatch(l);if(_n(!!_,"connection","ws","connect"),_){r.handlerPath=_.path,un(h=>({count:h.count,total:$_}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let u={url:_.relativeURL,async:!0},d=_.Resource;c=(await Ze(r,()=>d.connect(u,s,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=Da(E.value,r);t.send(h),un(h.length,"bytes-sent",r.handlerPath,"message","ws")}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){t.close(Fie[l.statusCode]||1011,l.toString()),t.close("login fialed")}t.close()}))}var va,rl,tr,Gie,gO,TG,gG,Yh,RG,$_,Fie,AG=be(()=>{Kc();pi();va=B(x()),rl=B(oe());Vh();zl();da();b_();SG();tr=new Uint8Array(8),Gie=new Float64Array(tr.buffer,0,1),gO={},TG="openapi";a(qie,"http");$_=0;a(xie,"start");Fie={401:3e3,403:3003}});var RO=g((Rbe,OG)=>{var{recordAction:Wh,recordActionBinary:kie}=(pi(),ie(Fu)),$ie=require("fastify-plugin"),Vie=200;OG.exports=$ie(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,_,u,d;l.config?.isOperation?(_=n.body?.operation,u="operation"):(_=l.url,u="fastify-route",d=l.method),Wh(o,"duration",_,d,u),kie(s.raw.statusCode<400,"success",_,d,u);let f=Vie;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Wh(performance.now()-c,"transfer",_,d,u),Wh(f,"bytes-sent",_,d,u)})):(f+=i?.length||0,Wh(f,"bytes-sent",_,d,u));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var IO=g((bbe,IG)=>{var Jh=require("clone"),Xh=tt(),Yie=K(),jh=D(),Abe=x(),AO=require("fs"),bO=require("joi"),{string:zh}=bO.types(),{hdb_errors:Kie,handleHDBError:Qh}=oe(),{HDB_ERROR_MSGS:Obe,HTTP_STATUS_CODES:OO}=Kie,{common_validators:nl}=Cs(),bG=" is required",Wie=["insert","update","upsert"],NO={database:{presence:!1,format:nl.schema_format,length:nl.schema_length},schema:{presence:!1,format:nl.schema_format,length:nl.schema_length},table:{presence:!0,format:nl.schema_format,length:nl.schema_length},action:{inclusion:{within:Wie,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Qie={schema:zh.required(),table:zh.required(),action:zh.valid("insert","update","upsert")},{AWS_ACCESS_KEY:jie,AWS_SECRET:zie,AWS_BUCKET:Jie,AWS_FILE_KEY:Xie,REGION:Zie}=jh.S3_BUCKET_AUTH_KEYS,eoe={s3:{presence:!0},[`s3.${jie}`]:{presence:!0,type:"String"},[`s3.${zie}`]:{presence:!0,type:"String"},[`s3.${Jie}`]:{presence:!0,type:"String"},[`s3.${Xie}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Zie}`]:{presence:!0,type:"String"}},NG=Jh(NO);NG.data.presence={message:bG};var yG=Jh(NO);yG.file_path.presence={message:bG};var toe=Object.assign(Jh(NO),eoe),yO=Jh(Qie);yO.csv_url=zh.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();yO.passthrough_headers=bO.object();function roe(e){let t=Xh.validateObject(e,NG);return Zh(e,t)}a(roe,"dataObject");function noe(e){let t=Xh.validateBySchema(e,bO.object(yO));return Zh(e,t)}a(noe,"urlObject");function soe(e){let t=Xh.validateObject(e,yG);return Zh(e,t)}a(soe,"fileObject");function ioe(e){let t=Xh.validateObject(e,toe);return Zh(e,t)}a(ioe,"s3FileObject");function Zh(e,t){if(!t){let r=Yie.checkGlobalSchemaTable(e.schema,e.table);if(r)return Qh(new Error,r,OO.BAD_REQUEST);if(e.operation===jh.OPERATIONS_ENUM.CSV_FILE_LOAD)try{AO.accessSync(e.file_path,AO.constants.R_OK|AO.constants.F_OK)}catch(n){return n.code===jh.NODE_ERROR_CODES.ENOENT?Qh(n,`No such file or directory ${n.path}`,OO.BAD_REQUEST):n.code===jh.NODE_ERROR_CODES.EACCES?Qh(n,`Permission denied ${n.path}`,OO.BAD_REQUEST):Qh(n)}}return t}a(Zh,"postValidateChecks");IG.exports={dataObject:roe,urlObject:noe,fileObject:soe,s3FileObject:ioe}});var wO=g((ybe,wG)=>{"use strict";var V_=x(),ep=D();async function ooe(e,t,r,n=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let s;try{return s=await e(t),r&&await r(t,s,n),t.operation===ep.OPERATIONS_ENUM.INSERT||t.operation===ep.OPERATIONS_ENUM.UPDATE||t.operation===ep.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===ep.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(V_.info(i.message),i):i.http_resp_msg?(V_.error(`Error calling operation: ${e.name}`),V_.error(i.http_resp_msg),i):(V_.error(`Error calling operation: ${e.name}`),V_.error(i),i)}}a(ooe,"callOperationFunctionAsAwait");wG.exports={callOperationFunctionAsAwait:ooe}});var DG=g((wbe,CG)=>{"use strict";var CO=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},DO=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};CG.exports={BulkLoadFileObject:CO,BulkLoadDataObject:DO}});var PG=g((Dbe,LG)=>{"use strict";var LO=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};LG.exports=LO});var HO=g((Bbe,jG)=>{"use strict";var tp=Ir(),np=IO(),aoe=require("needle"),Es=D(),Pbe=Xe(),sl=K(),{handleHDBError:_t,hdb_errors:FG}=oe(),{HTTP_STATUS_CODES:rr,HDB_ERROR_MSGS:Ht,CHECK_LOGS_WRAPPER:Ha}=FG,il=x(),PO=require("papaparse");sl.promisifyPapaParse();var hs=require("fs-extra"),coe=require("path"),{chain:MG}=require("stream-chain"),UG=require("stream-json/streamers/StreamArray"),vG=require("stream-json/utils/Batch"),BG=require("stream-chain/utils/comp"),{finished:HG}=require("stream"),loe=X(),kG=wO(),uoe=eO(),{BulkLoadFileObject:UO,BulkLoadDataObject:_oe}=DG(),vO=VA(),{verifyBulkLoadAttributePerms:$G}=Uh(),Mbe=PG(),Ube=pt(),vbe=ui(),{databases:doe}=(Re(),ie(ke)),{coerceType:foe}=(sp(),ie(GO)),GG="No records parsed from csv file.",Ba=`${loe.get("HDB_ROOT")}/tmp`,{schema_regex:Eoe}=Cs(),qG=1024*1024*2,xG=5e3,hoe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};jG.exports={csvDataLoad:poe,csvURLLoad:moe,csvFileLoad:Soe,importFromS3:Toe};async function poe(e,t){let r=np.dataObject(e);if(r)throw _t(r,r.message,rr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=KG(e.schema,e.table),i=PO.parse(e.data,{header:!0,skipEmptyLines:!0,transform:MO.bind(null,s),dynamicTyping:!1}),o=new vO;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&$G(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 _t(new Error,c,rr.BAD_REQUEST,void 0,void 0,!0);let l=new _oe(e.action,e.schema,e.table,i.data);return n=await kG.callOperationFunctionAsAwait(WG,l,null),n.message===GG?GG:QG(n.records,n.number_written)}catch(s){throw Ga(s)}}a(poe,"csvDataLoad");async function moe(e){let t=np.urlObject(e);if(t)throw _t(t,t.message,rr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Ba}/${r}`;try{await goe(e,r)}catch(s){throw il.error(Ht.DOWNLOAD_FILE_ERR(r)+" - "+s),_t(s,Ha(Ht.DOWNLOAD_FILE_ERR(r)))}try{let s=new UO(this.job_operation_function.name,e.action,e.schema,e.table,n,Es.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await BO(s);return await rp(n),i}catch(s){throw await rp(n),Ga(s)}}a(moe,"csvURLLoad");async function Soe(e){let t=np.fileObject(e);if(t)throw _t(t,t.message,rr.BAD_REQUEST,void 0,void 0,!0);let r=new UO(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Es.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await BO(r)}catch(n){throw Ga(n)}}a(Soe,"csvFileLoad");async function Toe(e){let t=np.s3FileObject(e);if(t)throw _t(t,t.message,rr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=coe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Ba}/${s}`;let i=new UO(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await Roe(s,e);let o=await BO(i);return await rp(r),o}catch(n){throw await rp(r),Ga(n)}}a(Toe,"importFromS3");async function goe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await aoe("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw _t(n,s,n.statusCode,Es.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Ooe(r,e.csv_url),await Aoe(t,r.raw)}a(goe,"downloadCSVFile");async function Roe(e,t){try{let r=`${Ba}/${e}`;await hs.mkdirp(Ba),await hs.writeFile(`${Ba}/${e}`,"",{flag:"a+"});let n=await hs.createWriteStream(r),s=await uoe.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){il.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw il.error(Ht.S3_DOWNLOAD_ERR+" - "+r),_t(r,Ha(Ht.S3_DOWNLOAD_ERR))}}a(Roe,"downloadFileFromS3");async function Aoe(e,t){try{await hs.mkdirp(Ba),await hs.writeFile(`${Ba}/${e}`,t)}catch(r){throw il.error(Ht.WRITE_TEMP_FILE_ERR),_t(r,Ha(Ht.DEFAULT_BULK_LOAD_ERR))}}a(Aoe,"writeFileToTempFolder");async function rp(e){if(e)try{await hs.access(e),await hs.unlink(e)}catch{il.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(rp,"deleteTempFile");function Ooe(e,t){if(e.statusCode!==FG.HTTP_STATUS_CODES.OK)throw _t(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,rr.BAD_REQUEST);if(!hoe[e.headers["content-type"]])throw _t(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,rr.BAD_REQUEST);if(!e.raw)throw _t(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,rr.BAD_REQUEST)}a(Ooe,"validateURLResponse");async function BO(e){try{let t;switch(e.file_type){case Es.VALID_S3_FILE_TYPES.CSV:t=await boe(e);break;case Es.VALID_S3_FILE_TYPES.JSON:t=await Noe(e);break;default:throw _t(new Error,Ht.DEFAULT_BULK_LOAD_ERR,rr.BAD_REQUEST,Es.LOG_LEVELS.ERROR,Ht.INVALID_FILE_EXT_ERR(e))}return QG(t.records,t.number_written)}catch(t){throw Ga(t)}}a(BO,"fileLoad");async function VG(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await tp.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&$G(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=_t(c);r(l)}}a(VG,"validateChunk");async function YG(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;sl.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!sl.isEmpty(c)&&!sl.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await kG.callOperationFunctionAsAwait(WG,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=_t(c,Ha(Ht.INSERT_CSV_ERR),rr.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,Ht.INSERT_CSV_ERR+" - "+c);r(l)}}a(YG,"insertChunk");async function boe(e){let t={records:0,number_written:0},r=KG(e.schema,e.table);try{let n=new vO,s=hs.createReadStream(e.file_path,{highWaterMark:qG});s.setEncoding("utf8"),await PO.parsePromise(s,VG.bind(null,e,n),MO.bind(null,r));let i=n.getPermsResponse();if(i)throw _t(new Error,i,rr.BAD_REQUEST);return s=hs.createReadStream(e.file_path,{highWaterMark:qG}),s.setEncoding("utf8"),await PO.parsePromise(s,YG.bind(null,e,t),MO.bind(null,r)),s.destroy(),t}catch(n){throw _t(n,Ha(Ht.PAPA_PARSE_ERR),rr.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,Ht.PAPA_PARSE_ERR+n)}}a(boe,"callPapaParse");function KG(e,t){let r=doe[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>foe(i,s));return n}a(KG,"createTransformMap");function MO(e,t,r){let n=e.get(r);return n?n(t):sl.autoCast(t)}a(MO,"typeFunction");async function Noe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new vO,s=MG([hs.createReadStream(e.file_path,{encoding:"utf-8"}),UG.withParser(),c=>c.value,new vG({batchSize:xG}),BG(async c=>{await VG(e,n,r,c)})]);await new Promise((c,l)=>{HG(s,_=>{_?l(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw _t(new Error,i,rr.BAD_REQUEST);let o=MG([hs.createReadStream(e.file_path,{encoding:"utf-8"}),UG.withParser(),c=>c.value,new vG({batchSize:xG}),BG(async c=>{await YG(e,t,r,c)})]);return await new Promise((c,l)=>{HG(o,_=>{_?l(_):c()}),o.resume()}),t}catch(n){throw _t(n,Ha(Ht.INSERT_JSON_ERR),rr.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,Ht.INSERT_JSON_ERR+n)}}a(Noe,"insertJson");async function WG(e){let t={};try{e.data&&e.data.length>0&&yoe(e.data[0])?t=await Ioe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",il.info(t.message))}catch(r){throw Ga(r)}return t}a(WG,"callBulkFileLoad");function yoe(e){let t=Object.keys(e);for(let r of t)if(!Eoe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(yoe,"validateColumnNames");async function Ioe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=tp.insert;break;case"update":i=tp.update;break;case"upsert":i=tp.upsert;break;default:throw _t(new Error,Ht.INVALID_ACTION_PARAM_ERR(n),rr.BAD_REQUEST,Es.LOG_LEVELS.ERROR,Ht.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){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 u=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][u])>=0&&e.splice(d,1)}let l=sl.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw Ga(o)}}a(Ioe,"bulkFileLoad");function QG(e,t){return`successfully loaded ${t} of ${e} records`}a(QG,"buildResponseMsg");function Ga(e){return _t(e,Ha(Ht.DEFAULT_BULK_LOAD_ERR),rr.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,Ht.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ga,"buildTopLevelErrMsg")});var JG=g((Gbe,zG)=>{"use strict";var qO=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};zG.exports=qO});var eq=g((xbe,ZG)=>{"use strict";var woe=D(),XG=require("moment"),Coe=require("uuid").v4,xO=class{static{a(this,"JobObject")}constructor(){this.id=Coe(),this.type=void 0,this.start_datetime=XG().valueOf(),this.created_datetime=XG().valueOf(),this.end_datetime=void 0,this.status=woe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};ZG.exports=xO});var FO=g((kbe,oq)=>{"use strict";var Doe=require("uuid").v4,nq=Ir(),sq=or(),Loe=os(),Poe=Oc(),Moe=JG(),dt=D(),Uoe=eq(),voe=CE(),kn=x(),Boe=du(),ol=K(),{promisify:Hoe}=require("util"),qa=require("moment"),Goe=Bh(),ip=IO(),tq=ET(),{deleteTransactionLogsBeforeValidator:qoe}=qA(),{handleHDBError:xoe,hdb_errors:Foe}=oe(),{HTTP_STATUS_CODES:koe}=Foe,rq=sq.searchByValue,$oe=sq.searchByHash,Voe=nq.insert,Yoe=Hoe(Goe.evaluateSQL),Koe=nq.update;oq.exports={addJob:joe,updateJob:Joe,handleGetJob:Woe,handleGetJobsByStartDate:Qoe,getJobById:iq};async function Woe(e){try{let t=await iq(e.id);return ol.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 kn.error("There was an error getting job",t),new Error(r)}}a(Woe,"handleGetJob");async function Qoe(e){try{let t=await zoe(e);if(kn.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=qa(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=qa(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 kn.error(r),new Error(r)}}a(Qoe,"handleGetJobsByStartDate");async function joe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||ol.isEmptyOrZeroLength(e.operation)){let u="job parameter is invalid";return kn.info(u),t.error=u,t}if(!dt.JOB_TYPE_ENUM[e.operation])return kn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case dt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=ip.fileObject(e);break;case dt.OPERATIONS_ENUM.CSV_URL_LOAD:n=ip.urlObject(e);break;case dt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=ip.dataObject(e);break;case dt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=ip.s3FileObject(e);break;case dt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case dt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=tq(e,"date");break;case dt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=tq(e,"timestamp");break;case dt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=qoe(e);break;default:break}if(n)throw xoe(n,n.message,koe.BAD_REQUEST,void 0,void 0,!0);let s=new Uoe;s.type=e.operation===dt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?dt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new Loe(dt.SYSTEM_SCHEMA_NAME,dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await rq(i))}catch(u){let d=`There was an error inserting a new job: ${u}`;return kn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=Doe();try{o=await rq(i)}catch(u){let d=`There was an error inserting a new job: ${u}`;return kn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return kn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new Boe(dt.SYSTEM_SCHEMA_NAME,dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await Voe(l)}catch(u){return kn.error(`There was an error inserting a job for job type: ${e.operation} -- ${u}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let u=`Created a job with type ${s.type} and id ${s.id}`;t.message=u,t.createdJob=s,t.success=!0,kn.trace(u)}return t}a(joe,"addJob");async function zoe(e){let t=qa(e.from_date,qa.ISO_8601),r=qa(e.to_date,qa.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 n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new Moe(n,e.hdb_user);try{return await Yoe(s)}catch(i){throw kn.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(zoe,"getJobsInDateRange");async function iq(e){if(ol.isEmptyOrZeroLength(e))return ol.errorizeMessage("Invalid job ID specified.");let t=new Poe(dt.SYSTEM_SCHEMA_NAME,dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await $oe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return kn.error(n),ol.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(iq,"getJobById");async function Joe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(ol.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===dt.JOB_STATUS_ENUM.COMPLETE||e.status===dt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=qa().valueOf());let t=new voe(dt.SYSTEM_SCHEMA_NAME,dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Koe(t),r}a(Joe,"updateJob")});var dq=g((Vbe,_q)=>{"use strict";var aq=K(),Yr=D(),Xoe=require("moment"),op=HO(),ap=x(),cq=FO(),lq=Hh(),uq=ra(),Zoe=et(),eae=Dh(),kO=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function tae(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(aq.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(aq.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Yr.JOB_TYPE_ENUM.csv_file_load:await Li(e,op.csvFileLoad);break;case Yr.JOB_TYPE_ENUM.csv_url_load:await Li(e,op.csvURLLoad);break;case Yr.JOB_TYPE_ENUM.csv_data_load:await Li(e,op.csvDataLoad);break;case Yr.JOB_TYPE_ENUM.import_from_s3:await Li(e,op.importFromS3);break;case Yr.JOB_TYPE_ENUM.empty_trash:break;case Yr.JOB_TYPE_ENUM.export_local:await Li(e,lq.export_local);break;case Yr.JOB_TYPE_ENUM.export_to_s3:await Li(e,lq.export_to_s3);break;case Yr.JOB_TYPE_ENUM.delete_files_before:case Yr.JOB_TYPE_ENUM.delete_records_before:await Li(e,uq.deleteFilesBefore);break;case Yr.JOB_TYPE_ENUM.delete_audit_logs_before:await Li(e,uq.deleteAuditLogsBefore);break;case Yr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Li(e,eae.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(tae,"parseMessage");async function Li(e,t){try{e.job.status=Yr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Xoe().valueOf(),await cq.updateJob(e.job),await rae(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):ap.error(`There was an error running ${t.name} job with id ${e.job.id}`),ap.error(n),e.job.message=n,e.job.status=Yr.JOB_STATUS_ENUM.ERROR;try{await cq.updateJob(e.job)}catch(s){throw ap.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Li,"runJob");async function rae(e){ap.trace("launching job thread:",e),Zoe.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Yr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(rae,"launchJobThread");_q.exports={parseMessage:tae,RunnerMessage:kO}});var Eq=g((Kbe,fq)=>{"use strict";var $O=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};fq.exports=$O});var Lq=g((Qbe,jO)=>{"use strict";var dp=or(),KO=Bh(),cp=HO(),Pi=AE(),lp=_i(),K_=ra(),nae=dR(),Y_=Cr(),up=yE(),nr=GA(),_p=x(),sae=OR(),iae=s_(),hq=tA(),oae=kE(),aae=VE(),cae=nA(),lae=KE(),uae=QE(),VO=zE(),pq=Hh(),_ae=Uh(),WO=FO(),F=D(),{hdb_errors:Q_,handleHDBError:W_}=oe(),{HTTP_STATUS_CODES:mq}=Q_,YO=XE(),Sq=Ia(),Iq=require("util"),al=Ir(),dae=Un(),fae=mi(),Tq=dq(),gq=e_(),Rq=(gh(),ie(N_)),Aq=ut(),Oq=Dh(),bq=Nh(),{setServerUtilities:Eae}=(sp(),ie(GO)),{CONTEXT:hae}=(es(),ie(ug)),{_assignPackageExport:pae}=require("../index"),{transformReq:mae}=K(),{server:Sae}=(br(),ie(Ko)),Er=_p.loggerWithTag("operation"),Tae=wO(),Nq=dp.searchByHash,gae=dp.searchByValue,Rae=Iq.promisify(dp.search),Aae=Iq.promisify(KO.evaluateSQL),Oae={[F.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[F.OPERATIONS_ENUM.CREATE_TABLE]:!0,[F.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[F.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[F.OPERATIONS_ENUM.DROP_TABLE]:!0,[F.OPERATIONS_ENUM.DROP_SCHEMA]:!0},Y=Eq();async function wq(e,t){try{if(e.body.operation!=="read_log"&&(_p.log_level===F.LOG_LEVELS.INFO||_p.log_level===F.LOG_LEVELS.DEBUG||_p.log_level===F.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;Er.info(o)}}catch(n){Er.error(n)}let r=await Tae.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Oae[e.body.operation]&&dae.setSchemaDataToGlobal(n=>{n&&Er.error(n)}),r}a(wq,"processLocalTransaction");var yq=Nae();jO.exports={chooseOperation:Cq,getOperationFunction:Dq,operation:QO,processLocalTransaction:wq};Eae(jO.exports);Sae.operation=QO;function Cq(e){let t;try{t=Dq(e)}catch(s){throw Er.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=KO.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=KO.checkASTPermissions(e,i);if(o)throw Er.error(`${mq.FORBIDDEN} from operation ${e.operation}`),Er.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),W_(new Error,o,Q_.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==F.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==F.OPERATIONS_ENUM.LOGIN&&e.operation!==F.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=_ae.verifyPerms(i,s);if(o)throw Er.error(`${mq.FORBIDDEN} from operation ${e.operation}`),Er.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),W_(new Error,o,Q_.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw W_(s,"There was an error when trying to choose an operation path")}return r}a(Cq,"chooseOperation");function Dq(e){if(Er.trace(`getOperationFunction with operation: ${e.operation}`),yq.has(e.operation))return yq.get(e.operation);throw W_(new Error,Q_.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Q_.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(Dq,"getOperationFunction");pae("operation",QO);function QO(e,t){e.hdb_user=this[hae]?.user,e.bypass_auth=!t;let r=Cq(e);return wq({body:e},r)}a(QO,"operation");async function bae(e){Er.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[F.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case F.OPERATIONS_ENUM.INSERT:o=await al.insert(i);break;case F.OPERATIONS_ENUM.UPDATE:o=await al.update(i);break;case F.OPERATIONS_ENUM.UPSERT:o=await al.upsert(i);break;case F.OPERATIONS_ENUM.DELETE:o=await K_.deleteRecord(i);break;default:Er.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Er.info("Invalid operation in transaction"),Er.error(o)}}a(bae,"catchup");async function Vs(e){mae(e);let t,r;try{r=await WO.addJob(e),t=r.createdJob,Er.info("addJob result",r);let n=new Tq.RunnerMessage(t,e);return await Tq.parseMessage(n),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw Er.error(s),W_(n,s)}}a(Vs,"executeJob");function Nae(){let e=new Map;return e.set(F.OPERATIONS_ENUM.INSERT,new Y(al.insert)),e.set(F.OPERATIONS_ENUM.UPDATE,new Y(al.update)),e.set(F.OPERATIONS_ENUM.UPSERT,new Y(al.upsert)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new Y(dp.searchByConditions)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_HASH,new Y(Nq)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_ID,new Y(Nq)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_VALUE,new Y(gae)),e.set(F.OPERATIONS_ENUM.SEARCH,new Y(Rae)),e.set(F.OPERATIONS_ENUM.SQL,new Y(Aae)),e.set(F.OPERATIONS_ENUM.CSV_DATA_LOAD,new Y(Vs,cp.csvDataLoad)),e.set(F.OPERATIONS_ENUM.CSV_FILE_LOAD,new Y(Vs,cp.csvFileLoad)),e.set(F.OPERATIONS_ENUM.CSV_URL_LOAD,new Y(Vs,cp.csvURLLoad)),e.set(F.OPERATIONS_ENUM.IMPORT_FROM_S3,new Y(Vs,cp.importFromS3)),e.set(F.OPERATIONS_ENUM.CREATE_SCHEMA,new Y(Pi.createSchema)),e.set(F.OPERATIONS_ENUM.CREATE_DATABASE,new Y(Pi.createSchema)),e.set(F.OPERATIONS_ENUM.CREATE_TABLE,new Y(Pi.createTable)),e.set(F.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new Y(Pi.createAttribute)),e.set(F.OPERATIONS_ENUM.DROP_SCHEMA,new Y(Pi.dropSchema)),e.set(F.OPERATIONS_ENUM.DROP_DATABASE,new Y(Pi.dropSchema)),e.set(F.OPERATIONS_ENUM.DROP_TABLE,new Y(Pi.dropTable)),e.set(F.OPERATIONS_ENUM.DROP_ATTRIBUTE,new Y(Pi.dropAttribute)),e.set(F.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new Y(lp.describeSchema)),e.set(F.OPERATIONS_ENUM.DESCRIBE_DATABASE,new Y(lp.describeSchema)),e.set(F.OPERATIONS_ENUM.DESCRIBE_TABLE,new Y(lp.describeTable)),e.set(F.OPERATIONS_ENUM.DESCRIBE_ALL,new Y(lp.describeAll)),e.set(F.OPERATIONS_ENUM.DELETE,new Y(K_.deleteRecord)),e.set(F.OPERATIONS_ENUM.ADD_USER,new Y(Y_.addUser)),e.set(F.OPERATIONS_ENUM.ALTER_USER,new Y(Y_.alterUser)),e.set(F.OPERATIONS_ENUM.DROP_USER,new Y(Y_.dropUser)),e.set(F.OPERATIONS_ENUM.LIST_USERS,new Y(Y_.listUsersExternal)),e.set(F.OPERATIONS_ENUM.LIST_ROLES,new Y(up.listRoles)),e.set(F.OPERATIONS_ENUM.ADD_ROLE,new Y(up.addRole)),e.set(F.OPERATIONS_ENUM.ALTER_ROLE,new Y(up.alterRole)),e.set(F.OPERATIONS_ENUM.DROP_ROLE,new Y(up.dropRole)),e.set(F.OPERATIONS_ENUM.USER_INFO,new Y(Y_.userInfo)),e.set(F.OPERATIONS_ENUM.READ_LOG,new Y(sae)),e.set(F.OPERATIONS_ENUM.ADD_NODE,new Y(iae)),e.set(F.OPERATIONS_ENUM.UPDATE_NODE,new Y(hq)),e.set(F.OPERATIONS_ENUM.SET_NODE_REPLICATION,new Y(hq)),e.set(F.OPERATIONS_ENUM.REMOVE_NODE,new Y(oae)),e.set(F.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new Y(aae)),e.set(F.OPERATIONS_ENUM.PURGE_STREAM,new Y(cae)),e.set(F.OPERATIONS_ENUM.SET_CONFIGURATION,new Y(Aq.setConfiguration)),e.set(F.OPERATIONS_ENUM.CLUSTER_STATUS,new Y(lae.clusterStatus)),e.set(F.OPERATIONS_ENUM.CLUSTER_NETWORK,new Y(uae)),e.set(F.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new Y(VO.setRoutes)),e.set(F.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new Y(VO.getRoutes)),e.set(F.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new Y(VO.deleteRoutes)),e.set(F.OPERATIONS_ENUM.EXPORT_TO_S3,new Y(Vs,pq.export_to_s3)),e.set(F.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new Y(Vs,K_.deleteFilesBefore)),e.set(F.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new Y(Vs,K_.deleteFilesBefore)),e.set(F.OPERATIONS_ENUM.EXPORT_LOCAL,new Y(Vs,pq.export_local)),e.set(F.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new Y(WO.handleGetJobsByStartDate)),e.set(F.OPERATIONS_ENUM.GET_JOB,new Y(WO.handleGetJob)),e.set(F.OPERATIONS_ENUM.GET_FINGERPRINT,new Y(YO.getFingerprint)),e.set(F.OPERATIONS_ENUM.SET_LICENSE,new Y(YO.setLicense)),e.set(F.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new Y(YO.getRegistrationInfo)),e.set(F.OPERATIONS_ENUM.RESTART,new Y(Sq.restart)),e.set(F.OPERATIONS_ENUM.RESTART_SERVICE,new Y(Sq.restartService)),e.set(F.OPERATIONS_ENUM.CATCHUP,new Y(bae)),e.set(F.OPERATIONS_ENUM.SYSTEM_INFORMATION,new Y(fae.systemInformation)),e.set(F.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new Y(Vs,K_.deleteAuditLogsBefore)),e.set(F.OPERATIONS_ENUM.READ_AUDIT_LOG,new Y(nae)),e.set(F.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new Y(gq.createTokens)),e.set(F.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new Y(gq.refreshOperationToken)),e.set(F.OPERATIONS_ENUM.LOGIN,new Y(Rq.login)),e.set(F.OPERATIONS_ENUM.LOGOUT,new Y(Rq.logout)),e.set(F.OPERATIONS_ENUM.GET_CONFIGURATION,new Y(Aq.getConfiguration)),e.set(F.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new Y(nr.customFunctionsStatus)),e.set(F.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new Y(nr.getCustomFunctions)),e.set(F.OPERATIONS_ENUM.GET_COMPONENT_FILE,new Y(nr.getComponentFile)),e.set(F.OPERATIONS_ENUM.GET_COMPONENTS,new Y(nr.getComponents)),e.set(F.OPERATIONS_ENUM.SET_COMPONENT_FILE,new Y(nr.setComponentFile)),e.set(F.OPERATIONS_ENUM.DROP_COMPONENT,new Y(nr.dropComponent)),e.set(F.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new Y(nr.getCustomFunction)),e.set(F.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new Y(nr.setCustomFunction)),e.set(F.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new Y(nr.dropCustomFunction)),e.set(F.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new Y(nr.addComponent)),e.set(F.OPERATIONS_ENUM.ADD_COMPONENT,new Y(nr.addComponent)),e.set(F.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new Y(nr.dropCustomFunctionProject)),e.set(F.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Y(nr.packageComponent)),e.set(F.OPERATIONS_ENUM.PACKAGE_COMPONENT,new Y(nr.packageComponent)),e.set(F.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Y(nr.deployComponent)),e.set(F.OPERATIONS_ENUM.DEPLOY_COMPONENT,new Y(nr.deployComponent)),e.set(F.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new Y(Oq.readTransactionLog)),e.set(F.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new Y(Vs,Oq.deleteTransactionLogsBefore)),e.set(F.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new Y(bq.installModules)),e.set(F.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new Y(bq.auditModules)),e.set(F.OPERATIONS_ENUM.GET_BACKUP,new Y(Pi.getBackup)),e}a(Nae,"initializeOperationFunctionMap")});var Ep=g((zbe,Uq)=>{"use strict";var zO=D(),yae=K(),j_=x(),{handleHDBError:JO,hdb_errors:fp}=oe(),{isMainThread:Iae}=require("worker_threads"),{Readable:wae}=require("stream"),Pq=require("os"),Cae=require("util"),Dae=MR(),Lae=Cae.promisify(Dae.authorize),Mq=Lq(),{createGzip:Pae,constants:Mae}=require("zlib");function Uae(e){let t=`Found an uncaught exception with message: ${e.message}. ${Pq.EOL}Stack: ${e.stack} ${Pq.EOL}Terminating ${Iae?"HDB":"thread"}.`;console.error(t),j_.fatal(t),process.exit(1)}a(Uae,"handleServerUncaughtException");function vae(e,t,r){if(j_[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 n=e.statusCode?e.statusCode:fp.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(vae,"serverErrorHandler");function Bae(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=JO(new Error,"Invalid JSON.",fp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(yae.isEmpty(e.body.operation)){let n=JO(new Error,"Request body must include an 'operation' property.",fp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(Bae,"reqBodyValidationHandler");function Hae(e,t,r){let n;e.body.operation!==zO.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==zO.OPERATIONS_ENUM.LOGIN&&e.body.operation!==zO.OPERATIONS_ENUM.LOGOUT?Lae(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{j_.warn(s),j_.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(JO(s,i,fp.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(Hae,"authHandler");async function Gae(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=Mq.chooseOperation(e.body);let s=await Mq.processLocalTransaction(e,n);if(s instanceof wae&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(Pae({level:Mae.Z_BEST_SPEED})))}return s}catch(s){throw j_.error(s),s}}a(Gae,"handlePostRequest");Uq.exports={authHandler:Hae,handlePostRequest:Gae,handleServerUncaughtException:Uae,serverErrorHandler:vae,reqBodyValidationHandler:Bae}});var Gq=g((Xbe,Hq)=>{"use strict";var qae=require("fastify-plugin"),{handlePostRequest:vq,authHandler:xae,reqBodyValidationHandler:Fae}=Ep();async function kae(e){e.decorate("hdbCore",{preValidation:[Fae,xae],request:t=>Bq(vq(t,response)),requestWithoutAuthentication:(t,r)=>Bq(vq(t,r,!0))})}a(kae,"hdbCore");async function Bq(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(Bq,"convertAsyncIterators");Hq.exports=qae(kae)});var Fq=g((tNe,xq)=>{"use strict";var eNe=require("fs"),XO=X();XO.initSync();var{CONFIG_PARAMS:qq}=D(),$ae=1024*1024*1024;function Vae(e){let t=XO.get(qq.HTTP_TIMEOUT),r=XO.get(qq.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:$ae,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(Vae,"getServerOptions");xq.exports=Vae});var Vq=g((nNe,$q)=>{"use strict";var ZO=X();ZO.initSync();var{CONFIG_PARAMS:kq}=D();function Yae(){let e=ZO.get(kq.HTTP_CORSACCESSLIST),t=ZO.get(kq.HTTP_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=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(Yae,"getCORSOptions");$q.exports=Yae});var Wq=g((iNe,Kq)=>{"use strict";var Yq=X();Yq.initSync();var Kae=D();function Wae(){return Yq.get(Kae.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Wae,"getHeaderTimeoutConfig");Kq.exports=Wae});var tb={};Fe(tb,{customFunctionsServer:()=>zae,ready:()=>cx,start:()=>jae});function jae(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Mi||(Mi=ax(t),ct.http((await Mi).server));let o=await Mi,c=(0,eb.dirname)(s),l=(0,eb.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!Qq.has(c)){Qq.add(c);try{o.register(Xae(c,l))}catch(_){if(_.message==="Root plugin has already booted")Ke.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:cx}}async function zae(){try{Ke.info("In Custom Functions Fastify server"+process.cwd()),Ke.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ke.debug(`Custom Functions server process ${process.pid} starting up.`),await Jae();let e=ex.get(tx.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Mi=await ax(e)}catch(r){throw Ke.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ke.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ke.error(`Custom Functions ${process.pid} Error: ${e}`),Ke.error(e),process.exit(1)}}async function Jae(){try{Ke.info("Custom Functions starting configuration."),await rx.setUsersToGlobal(),Ke.info("Custom Functions completed configuration.")}catch(e){Ke.error(e)}}function Xae(e,t){return async function(r){try{Ke.info("Custom Functions starting buildRoutes"),Ke.trace("Loading fastify routes folder "+e),(0,jq.existsSync)(e)&&r.register(Zq.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Ke.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Ke.error(s.message):s&&Ke.error(s),o()})}catch(n){Ke.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function ax(e){Ke.info("Custom Functions starting buildServer.");let t=(0,nx.default)(e),r=(0,zq.default)(t);r.server.headersTimeout=(0,ix.default)(),r.setErrorHandler(ox.serverErrorHandler);let n=(0,sx.default)();return n&&r.register(Jq.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(Xq.default),await r.register(Qae),await r.after(),cO(r),Ke.info("Custom Functions completed buildServer."),r}function cx(){if(Mi)return Mi.then?Mi.then(e=>e.ready()):Mi.ready()}var eb,jq,zq,Jq,Xq,Zq,ex,tx,Ke,Qae,rx,nx,sx,ix,ox,Mi,Qq,lx=be(()=>{eb=require("path"),jq=require("fs"),zq=B(require("fastify")),Jq=B(require("@fastify/cors")),Xq=B(RO()),Zq=B(require("@fastify/autoload")),ex=B(X()),tx=B(D()),Ke=B(x()),Qae=B(Gq()),rx=B(Cr()),nx=B(Fq()),sx=B(Vq()),ix=B(Wq()),ox=B(Ep());Kc();br();Qq=new Set;a(jae,"start");a(zae,"customFunctionsServer");a(Jae,"setUp");a(Xae,"buildRouteFolder");a(ax,"buildServer");a(cx,"ready")});var rb={};Fe(rb,{start:()=>Zae});function Zae(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,Ex.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){_x||(_x=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=ux.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,dx.default)(s,(0,fx.realpathSync)(o))}}return i(s)},{runFirst:!0})),ux.set(r,n)}}}var dx,fx,Ex,ux,_x,hx=be(()=>{dx=B(require("send")),fx=require("fs"),Ex=B(require("serve-static")),ux=new Map;a(Zae,"start")});var ob={};Fe(ob,{Request:()=>nb,createReuseportFd:()=>hp});var px,nb,sb,ib,hp,pp=be(()=>{px=require("os"),nb=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new ib(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new sb(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},sb=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},ib=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,px.platform)()!="win32"&&(hp=require("node-unix-socket").createReuseportFd)});var fb=g(xa=>{"use strict";var{isMainThread:Ax,parentPort:J_,threadId:mp}=require("worker_threads"),{Socket:ece,createServer:tce}=require("net"),{createServer:rce,IncomingMessage:nce}=require("http"),{createServer:sce}=require("https"),{readFileSync:cl,unlinkSync:mx,existsSync:ice}=require("fs"),hr=x(),Le=X(),Tt=D(),{server:Rp}=(br(),ie(Ko)),{WebSocketServer:oce}=require("ws"),{createServer:ace}=require("tls"),{getTicketKeys:cce,restartNumber:lce,getWorkerIndex:Tp}=et(),{Headers:Ox,appendHeader:uce}=(b_(),ie(PB)),{recordAction:z_,recordActionBinary:_ce}=(pi(),ie(Fu)),{Request:bx,createReuseportFd:Sx}=(pp(),ie(ob)),{checkMemoryLimit:dce}=oa(),Nx=require("tls"),Tx=Nx.createSecureContext;Nx.createSecureContext=function(e){if(!e.cert||!e.key)return Tx(e);let t={...e};delete t.key,delete t.cert;let r=Tx(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var yx=Le.get(Tt.CONFIG_PARAMS.THREADS_DEBUG);if(yx){let e;if(Ax)e=Le.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){hr.info("Could not close debugger",t)}});else{let t=Le.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Tp()>=0&&(e=t+Tp())}if(e){let t=Le.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=Le.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){hr.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){lce<=1&&hr.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:dNe,CONFIG_PARAMS:fce}=Tt;Le.initSync();var Ece=Le.get(fce.HTTP_SESSIONAFFINITY),Ys={};xa.registerServer=_b;xa.httpServer=db;xa.deliverSocket=ub;xa.startServers=Ix;xa.when_components_loaded=null;Rp.http=db;Rp.request=Sce;Rp.socket=Tce;Rp.ws=gce;var ab={},Sp={},hce,wo={},gp={},pce=[],cb=[];function Ix(){return xa.when_components_loaded=Ap().loadRootComponents(!0).then(()=>{J_?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)ub(n,r,s);else if(t.requestId)mce(t);else if(t.type===Tt.ITC_EVENT_TYPES.SHUTDOWN){hr.trace("received shutdown request",mp);for(let i in Ys){let o=Ys[i],c;if(o.closeIdleConnections){let _=Object.getOwnPropertySymbols(o).find(f=>f.description.includes("connections")),u=0,d=setInterval(()=>{u++;let f=u>=100,E=o[_][f?"all":"idle"]();if(E.length===0){f&&clearInterval(d);return}u===1?hr.info(`Closing ${E.length} idle connections`):f&&hr.warn(`Forcefully closing ${E.length} active connections`);for(let h=0,m=E.length;h<m;h++){let S=E[h].socket;S._httpMessage&&!S._httpMessage.finished&&!f||(f?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
30
30
  Connection: close\r
31
31
  \r
32
- `))}},25).unref()}o.close?.(()=>{if(Le.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Sp()==0)try{hx(Le.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,pp),o.cantCleanupProperly||Er.warn("Had to forcefully exit the thread",pp),process.exit(0)},5e3).unref()})}if(bx||process.env.DEV_MODE)try{require("inspector").close()}catch(i){Er.info("Could not close debugger",i)}}}).ref();let e=[];if(px&&!dce)for(let t in Vs){let r=Vs[t];if(isNaN(t)&&Sp()==0){nce(t)&&hx(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),Er.info("Domain socket listening on "+t)}).on("error",i)}));continue}let n;try{n=px(+t,"::")}catch(s){console.error(`Unable to bind to port ${t}`,s);continue}e.push(new Promise((s,i)=>{r.listen({fd:n},()=>{s(),Er.trace("Listening on port "+t,pp)}).on("error",i)}))}Promise.all(e).then(()=>{J_?.postMessage({type:Tt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(Nx,"startServers");gx||Nx();function cb(e,t,r){let n=e?.read?e:new Xae({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Vs[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Vs[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Er.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(cb,"deliverSocket");var Sx=new Map;function hce(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=Sx.get(s),r){case"connection":i=cb(void 0,t),Sx.set(s,i),i.write=(c,l,_)=>(J_.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,l,_)=>(J_.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),J_.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(hce,"proxyRequest");function lb(e,t,r=!0){!+t&&t!==Le.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(Le.get(Tt.CONFIG_PARAMS.HTTP_PORT),10));let n=Vs[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",Tx),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Vs[t]=e;e.on("unhandled",Tx)}a(lb,"registerServer");function yx(e){let t=[],r=parseInt(e?.securePort);return r&&t.push({port:r,secure:!0}),r=parseInt(e?.port),r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],Le.get(Tt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Le.get(Tt.CONFIG_PARAMS.HTTP_PORT),secure:Le.get(Tt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Le.get(Tt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Le.get(Tt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Le.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:Le.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(yx,"getPorts");function ub(e,t){for(let{port:r,secure:n}of yx(t))Ix(r,n,t?.isOperationsServer),typeof e=="function"?ob[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,lb(e,r,!1)),Tp[r]=ab(ob,r),fce=ab(Ece,r)}a(ub,"httpServer");function Ix(e,t,r){if(!wo[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:Le.get(n+"_keepAliveTimeout"),headersTimeout:Le.get(n+"_headersTimeout"),requestTimeout:Le.get(n+"_timeout")},i=Le.get(n+"_mtls"),o=Le.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let l=Le.get(n+"tls_privateKey"),_=Le.get(n+"tls_certificate"),u=Le.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:ll(l),ciphers:Le.get("tls_ciphers"),cert:ll(_),ca:u&&ll(u),rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:oce(),maxHeaderSize:Le.get(Tt.CONFIG_PARAMS.HTTP_MAXHEADERSIZE)})}let c=uce();wo[e]=(t?rce:ece)(s,async(l,_)=>{try{let d=performance.now(),f=new Ax(l,_);r&&(f.isOperationsServer=!0);let E=await Tp[e](f);if(!E){if(f._nodeResponse.statusCode)return;E=wx(f)}if(c?E.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):E.headers?.set?.("Server","HarperDB"),E.status===-1){for(let U of E.headers||[])_.setHeader(U[0],U[1]);return l.baseRequest=f,_.baseResponse=E,wo[e].emit("unhandled",l,_)}let h=E.status||200,m=performance.now(),S=m-d,R=E.body,g;if(!E.handlesHeaders){let U=E.headers||new Rx;R?R.length>=0&&(typeof R=="string"?U.set("Content-Length",Buffer.byteLength(R)):U.set("Content-Length",R.length),g=!0):(U.set("Content-Length","0"),g=!0);let v=`hdb;dur=${S.toFixed(2)}`;E.wasCacheMiss&&(v+=", miss"),cce(U,"Server-Timing",v,!0),_.writeHead(h,U&&(U[Symbol.iterator]?Array.from(U):U)),g&&_.end(R)}let A=f.handlerPath,P=f.method;if(z_(S,"duration",A,P,E.wasCacheMiss==null?void 0:E.wasCacheMiss?"cache-miss":"cache-hit"),lce(h<400,"success",A,P),!g)if(R?.pipe){R.pipe(_),R.destroy&&_.on("close",()=>{R.destroy()});let U=0;R.on("data",v=>{U+=v.length}),R.on("end",()=>{z_(performance.now()-m,"transfer",A,P),z_(U,"bytes-sent",A,P)})}else R?.then?R.then(U=>{_.end(U)},u):_.end(R)}catch(d){u(d)}function u(d){let f=d.headers;_.writeHead(d.statusCode||500,f&&(f[Symbol.iterator]?Array.from(f):f)),_.end(d.toString()),d.statusCode?d.statusCode===500?Er.warn(d):Er.info(d):Er.error(d)}a(u,"onError")}),i&&(wo[e].mtlsConfig=i),t&&(wo[e].on("secureConnection",l=>{l._parent.startTime&&z_(performance.now()-l._parent.startTime,"tls-handshake",e),z_(l.isSessionReused(),"tls-reused",e)}),wo[e].isSecure=!0),lb(wo[e],e)}return wo[e]}a(Ix,"getHTTPServer");function ab(e,t){let r=wx;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a(c=>s(c,o),"next_callback")}}return r}a(ab,"makeCallbackChain");function wx(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Rx}}a(wx,"unhandled");function pce(e,t){ub(e,{requestOnly:!0,...t})}a(pce,"onRequest");function mce(e,t){let r;if(t.securePort){let n=Le.get("tls_privateKey"),s=Le.get("tls_certificate"),i=t.mtls?.certificateAuthority||Le.get("tls_certificateAuthority");r=ice({ciphers:Le.get("tls_ciphers"),key:ll(n),cert:ll(s),ca:i&&ll(i),rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls},e),Vs[t.securePort]=r}return t.port&&(r=Zae(e),Vs[t.port]=r),r}a(mce,"onSocket");Object.defineProperty(tce.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.startsWith("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function Sce(e,t){let r;for(let{port:n,secure:s}of yx(t)){mp[n]||(mp[n]=new sce({server:r=Ix(n,s)}),mp[n].on("connection",async(c,l)=>{try{let _=new Ax(l);_.isWebSocket=!0;let u=Tp[n](_),d=l.headers["sec-websocket-protocol"]||"",f=ib[n];if(d){let E;for(let h=0;h<f.length;h++){let m=f[h];m.protocol===d&&(E=!0,m.listener(c,_,u))}if(E)return}for(let E=0;E<f.length;E++){let h=f[E];h.protocol||h.listener(c,_,u)}}catch(_){Er.warn("Error handling WebSocket connection",_)}}),mp[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=ib[n];o||(o=ib[n]=[]),o.push({listener:e,protocol:i}),Tp[n]=ab(ob,n)}return r}a(Sce,"onWebSocket");function Tx(e,t){t.writeHead(404),t.end(`Not found
33
- `)}a(Tx,"defaultNotFound")});var Bx={};Fe(Bx,{startHTTPThreads:()=>gce,startSocketServer:()=>hb,updateWorkerIdleness:()=>vx});async function gce(e=2,t){if(t)fb(0,1,!0);else{let{loadRootComponents:n}=Rp();if(e===0)return(0,Co.setMainIsWorker)(!0),await _b().startServers(),Promise.resolve([]);await n()}let r=(0,Px.checkMemoryLimit)();r&&!process.env.DEV_MODE&&(console.error(r),setInterval(()=>{Np.notify(r)},Tce).unref());for(let n=0;n<e;n++)fb(n,e);return Promise.all(Ux)}function fb(e,t=1,r){if(db++,(0,Co.startWorker)("server/threads/threadServer.js",{name:bp.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(_){_.type===bp.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});Ux.push(s),await s,ul.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=Op.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=ul.indexOf(n);o>-1&&ul.splice(o,1)}if(a(i,"removeWorker"),_l){let o=_l;_l=[];for(let c of o)Mx[c.localPort](null,c)}}}),r){let n=setInterval(()=>{Eb?Eb=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Co.shutdownWorkers)(),db=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function hb(e=0,t){if(typeof e=="string")try{(0,yp.existsSync)(e)&&(0,yp.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Rce:r=Ace(t):r=pb;let n=(0,dl.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=Mx[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),Eb=!0,r(o,(c,l)=>{if(!c){if(Cx){let u=o._socket||new dl.Socket({handle:o,writable:!0,readable:!0});Cx.deliverSocket(u,e,l),u.resume()}else db>0?(_l.length===0&&setTimeout(()=>{_l.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(),o.localPort=e,_l.push(o)):(console.log("start up a dynamic thread to handle request"),fb(0));un(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:l});else{let u=o._socket||new dl.Socket({handle:o,writable:!0,readable:!0});Nce(u,c,e)}un(!0,"socket-routed")})};let s=ha();Np.info(`HarperDB ${s.version} Server running on port ${e}`)}return n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function pb(e,t){let r,n=0;for(let s of ul){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Ap)return Ap=i,t(r);n=i}Ap=0,t(r)}function Rce(e,t){let r={};e.getpeername(r);let n=r.address,s=fl.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);pb(e,o=>{fl.set(n,{worker:o,lastUsed:i}),t(o)})}function Ace(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new dl.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],_=fl.get(l),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,s(_.worker);pb(n,d=>{fl.set(l,{worker:d,lastUsed:u}),s(d,o)})})}a(r,"findByHeaderAffinity")}function vx(){Ap=0;for(let e of ul)e.expectedIdle=e.recentELU.idle+Oce,e.requests=1;ul.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Nce(e,t,r){let n=bce++;t.postMessage({port:r,requestId:n,event:"connection"}),e.on("data",s=>{let i=s.toString("latin1");t.postMessage({port:r,requestId:n,data:i,event:"data"})}).on("close",s=>{t.postMessage({port:r,requestId:n,event:"close",hadError:s})}).on("error",s=>{t.postMessage({port:r,requestId:n,event:"error",error:s})}).on("drain",s=>{t.postMessage({port:r,requestId:n,event:"drain",error:s})}).on("end",()=>{t.postMessage({port:r,requestId:n,event:"end"})}).resume(),Op.set(n,s=>{s.event=="data"&&e.write(Buffer.from(s.data,"latin1")),s.event=="end"&&(e.end(s.data&&Buffer.from(s.data,"latin1")),Op.delete(n)),s.event=="destroy"&&(e.destroy(),Op.delete(n))})}var Co,dl,bp,Np,yp,Lx,Px,ul,_l,Mx,Cx,db,Ux,Tce,Eb,Ap,Dx,fl,Oce,Op,bce,mb=Oe(()=>{Co=B(et()),dl=require("net"),bp=B(D()),Np=B(x()),yp=require("fs");pi();Lx=require("worker_threads"),Px=B(aa()),ul=[],_l=[],Mx=[],db=0,Ux=[];Lx.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});Tce=6e5;a(gce,"startHTTPThreads");a(fb,"startHTTPWorker");a(hb,"startSocketServer");Ap=0;a(pb,"findMostIdleWorker");Dx=36e5,fl=new Map;a(Rce,"findByRemoteAddressAffinity");a(Ace,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of fl)r.lastUsed+Dx<e&&fl.delete(t)},Dx).unref();Oce=1e3;a(vx,"updateWorkerIdleness");(0,Co.setMonitorListener)(vx);Op=new Map,bce=1;a(Nce,"proxySocket")});var xx=T((gNe,qx)=>{"use strict";var yce=require("cluster"),Fa=X();Fa.initSync();var Gx=D(),hNe=require("util"),Ui=x(),pNe=require("fs"),Ice=require("fastify"),mNe=ha(),wce=require("@fastify/cors"),Cce=require("@fastify/compress"),Dce=require("@fastify/static"),Lce=TO(),Pce=require("path"),{PACKAGE_ROOT:Mce}=D(),Uce=Mn(),vce=K(),Bce=wr(),Hce=aa(),{server:Gce}=(Or(),ie(Wo)),{node_request_key:SNe}=(hp(),ie(sb)),{authHandler:qce,handlePostRequest:xce,serverErrorHandler:Fce,reqBodyValidationHandler:kce}=fp(),TNe=require("net"),{registerContentHandlers:$ce}=(Wc(),ie(oG)),Vce=6e4,Yce=1024*1024*1024,Kce="TRUE",{CONFIG_PARAMS:X_}=Gx,El;qx.exports={hdbServer:Hx,start:Hx};async function Hx(e){try{Ui.info("In Fastify server"+process.cwd()),Ui.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ui.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=yce.isMaster,await Wce();let t=e.securePort>0;El=Qce(t),await El.ready(),e||(e={}),e.isOperationsServer=!0;try{Gce.http(El.server,e),El.server.closeIdleConnections||await El.listen({port:0,host:"::"})}catch(r){throw El.close(),Ui.error(r),Ui.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Ui.fatal(t),process.exit(1)}}a(Hx,"operationsServer");async function Wce(){Ui.trace("Configuring HarperDB process."),Uce.setSchemaDataToGlobal(),await Bce.setUsersToGlobal(),await Hce.getLicense()}a(Wce,"setUp");function Qce(e){Ui.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=jce(e),r=Ice(t);r.server.headersTimeout=Jce(),r.setErrorHandler(Fce);let n=zce();n&&r.register(wce,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,_){r.server.emit("unhandled",l.raw,_.raw)}),c()}),r.register(Lce),r.register(Cce),r.register(Dce,{root:Pce.join(Mce,"studio/build-local")}),$ce(r);let s=Fa.get(Gx.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!vce.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[kce,qce],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),xce(i,o)}),r.get("/health",()=>"HarperDB is running."),Ui.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Qce,"buildServer");function jce(e){let t=Fa.get(X_.OPERATIONSAPI_NETWORK_TIMEOUT),r=Fa.get(X_.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Yce,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(jce,"getServerOptions");function zce(){let e=Fa.get(X_.OPERATIONSAPI_NETWORK_CORS),t=Fa.get(X_.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Kce)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(zce,"getCORSOpts");function Jce(){return Fa.get(X_.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Vce}a(Jce,"getHeaderTimeoutConfig")});var Ob={};Fe(Ob,{disableNATS:()=>Zce,publishToStream:()=>Cp,setNATSReplicator:()=>Sb,setPublishToStream:()=>ele,setSubscription:()=>Ab,start:()=>Xce});function Xce(){Z_.default.get(ed.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&rle()}function Zce(e=!0){Yx=e}function ele(e,t){Cp=e,Ab=t}function rle(){if(Yx||process.env._DISABLE_NATS)return;let e=Dr(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];Sb(s,r,i)}}bb((r,n)=>{Sb(r.tableName,r.databaseName,r),n&&Wx(r)}),!Fx&&(Fx=!0)}function Sb(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends Jt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Ue],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Ue]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Ue],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Ue],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Ue]})}static defineSchema(i){Wx(i)}static subscribe(){let i=new Zn;return Ab(t,e,i),i}static subscribeOnThisThread(i){return i<(Z_.default.get(ed.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??tle)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new Ip(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=Kx;return i}a(n,"getNATSTransaction")}function Wx(e){let t=Z_.default.get(ed.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Cp(`${gb.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,Rb.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 kx,gb,Rb,$x,Vx,Z_,ed,wp,Yx,Cp,Ab,tle,Kx,Fx,Ip,Tb,Qx=Oe(()=>{ge();es();kx=B(pt()),gb=B(Xe()),Rb=B(ui());zl();$x=B(Xg()),Vx=B(Ar()),Z_=B(X()),ed=B(D()),wp=B(x());a(Xce,"start");a(Zce,"disableNATS");Cp=kx.publishToStream,Ab=$x.setSubscription;a(ele,"setPublishToStream");tle=2;a(rle,"assignReplicationSource");a(Sb,"setNATSReplicator");a(Wx,"publishSchema");Ip=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=Z_.default.get(ed.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,_;for(let u of i){let d=u.table,f=u.operation=="put"?"upsert":u.operation;l||(wp.trace(`Sending transaction event ${f}`),_=l={operation:f,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,f!=="delete"&&f!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===f?(o.push(u.record),c.push(u.id)):_=_.next={operation:f,table:d,id:u.id,record:u.record},u.expiresAt&&(_.expiresAt=u.expiresAt)}l&&n.push(Cp(`${gb.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,Rb.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(u=>{throw wp.error("An error has occurred trying to replicate transaction",l,u),u.statusCode=504,u}))}return Promise.all(n)}},Tb=class extends Ip{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,Vx.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};Kx=new Tb});async function Xx({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await Nb.get(e,{returnNonexistent:!0});s=new wb(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await Nb.get(e);i&&i.delete()}s=new Lp(e,t)}return n&&(n.id=e,n.user={username:t?.username},td.put(n)),s}function yb(){return Dp++,Dp>65500&&(Dp=1),Dp}function Ib(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=go.getMatch(n);if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return Ze(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var jx,Do,zx,Jx,Nb,td,Dp,Lp,wb,Zx=Oe(()=>{ge();O_();jx=B(Ar()),Do=B(x());fa();zx=B(et()),Jx=B(_b());Or();Nb=Et({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"}]}}]}),td=Et({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,zx.getWorkerIndex)()===0&&(async()=>{await Jx.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of td.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await ct.getUser(r.user.username)),Ze(r,()=>{try{Ib(r,t,r)}catch{(0,Do.warn)("Failed to publish will",t)}td.delete(e.id,r)})}})();a(Xx,"getSession");Dp=1;a(yb,"getNextMessageId");Lp=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,_;if(c>-1?(l=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let u=this.subscriptions.find(R=>R.topic===s),d;u?(d=i>0,u.end(),this.subscriptions.splice(this.subscriptions.indexOf(u),1)):d=i===2;let f={search:l,async:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Do.trace)("Resuming subscription from",s,"from",o);let E=go.getMatch(_);if(!E){let R=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw R.statusCode=404,R}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let R=f.url.slice(1);if(R.indexOf("#")>-1&&R.indexOf("#")!==R.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,R.indexOf("+")===R.length-1)f.onlyChildren=!0,f.url="/"+R.slice(0,R.length-1);else{let g=R.split("/"),A;for(let v=0;v<g.length;v++)if(g[v].indexOf("+")>-1)if(g[v]==="+")A=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&A)throw new Error("Filters can not be combined");let P=!0;g[g.length-1]==="#"&&(g.length--,P=!1),A&&(n=a(v=>{let k=v.id;if(!Array.isArray(k)||P&&k.length!==g.length)return!1;for(let H=0;H<g.length;H++)if(g[H]!=="+"&&g[H]!==k[H])return!1;return!0},"filter"));let U=g.indexOf("+");f.url="/"+(U>-1?g.slice(0,U):g).concat("").join("/")}}let h=E.path,m=E.Resource,S=await Ze(f,async()=>{let R=this.createContext();R.topic=s,R.retainHandling=i;let g=await m.subscribe(f,R);if(!g)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!g[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let A of g)try{let P;if(A.type&&A.type!=="put"&&A.type!=="delete"&&A.type!=="message"&&A.type!=="patch"||n&&!n(A))continue;r?(A.topic=s,P=this.needsAcknowledge(A)):(A.acknowledge?.(),P=yb());let U=A.id;Array.isArray(U)&&(U=Yc(U)),U==null&&(U=""),this.listener(h+"/"+U,A.value,P,t)}catch(P){(0,Do.warn)(P)}})(),g});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=yb();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return Ib(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){let r=this.createContext();Ze(r,async()=>{if(!t){let n=await td.get(this.sessionId);n?.doesExist()&&await Ib(n,n.data,r)}await td.delete(this.sessionId)}).catch(n=>{(0,Do.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(Ib,"publish");wb=class extends Lp{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{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,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=yb(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Do.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,jx.getNextMonotonicTime)()),(0,Do.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),Nb.put(this.sessionRecord)}}});var Db={};Fe(Db,{bypassAuth:()=>nle,start:()=>sle});function nle(){sF=!0}function sle({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){let o=e.mqtt=e.mqtt||{requireAuthentication:i,sessions:new Set,events:new nF.EventEmitter},c,l=r?.mtls;return n&&(c=e.ws((_,u,d)=>{if(_.protocol==="mqtt"){o.events.emit("connection",_),hr.debug("Received WebSocket connection for MQTT from",_._socket.remoteAddress);let{onMessage:f,onClose:E}=tF(_,(h,m)=>{if(_.send(h),m&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},u,Promise.resolve(d).then(()=>u?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{hr.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let u;if(o.events.emit("connection",_),hr.debug(`Received ${_.getCertificate?"SSL":"TCP"} connection for MQTT from ${_.remoteAddress}`),l){if(_.authorized)try{let E=l.user;if(E!==null){(E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN);try{u=await e.getUser(E,null,null),(0,hl.get)(sr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&Mp.notify({username:u?.username,status:sr.AUTH_AUDIT_STATUS.SUCCESS,type:sr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})}catch(h){throw(0,hl.get)(sr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&Mp.error({username:E,status:sr.AUTH_AUDIT_STATUS.FAILURE,type:sr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:_.remoteAddress}),h}}else hr.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(E){hr.error(E)}else if(l.required)return hr.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!u&&sF&&_.remoteAddress.includes("127.0.0.1")&&(u=await(0,rF.getSuperUser)(),hr.debug("Auto-authorizing local connection",u?.username));let{onMessage:d,onClose:f}=tF(_,E=>_.write(E),null,u,o);_.on("data",d),_.on("close",f),_.on("error",E=>{hr.info("Socket error",E)})},{port:t,securePort:s,mtls:l})),c}function tF(e,t,r,n,s){eF||(eF=!0,xu(d=>{Pp>0&&d.push({metric:"mqtt-connections",connections:Pp,byThread:!0})}));let i;Pp++;let o,c={protocolVersion:4},l=(0,Up.parser)({protocolVersion:5});function _(d){l.parse(d)}a(_,"onMessage");function u(){Pp--,i||(i=!0,o?.disconnect(),s.events.emit("disconnected",o,e),s.sessions.delete(o),_n(!1,"connection","mqtt","disconnect"),hr.debug("MQTT connection was closed",e.remoteAddress))}return a(u,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await ct.getUser(d.username,d.password.toString(),r),(0,hl.get)(sr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&Mp.notify({username:n?.username,status:sr.AUTH_AUDIT_STATUS.SUCCESS,type:sr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(A){return(0,hl.get)(sr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&Mp.error({username:d.username,status:sr.AUTH_AUDIT_STATUS.FAILURE,type:sr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",d,e,A),_n(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",d,e),_n(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let A=e.deserialize||(e.deserialize=Ua(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?A(d.will.payload):void 0,delete d.will.payload}o=Xx({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(A){return hr.error(A),s.events.emit("auth-failed",d,e,A),_n(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:A.code||5,returnCode:A.code||128})}s.events.emit("connected",o,e),_n(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((A,P,U,v)=>{try{let k=A.indexOf("/",1),H=k>0?A.slice(0,k):A;f({cmd:"publish",topic:A,payload:E(P),messageId:U||Math.floor(Math.random()*1e8),qos:v.qos},H)}catch(k){hr.error(k),o?.disconnect(),s.sessions.delete(o)}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let A of d.subscriptions){let P;try{P=(await o.addSubscription(A,A.qos>=1)).qos||0}catch(U){hr.error(U),P=c.protocolVersion<5?128:U.statusCode===403?135:U.statusCode===404?143:128}h.push(P)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let A=[];for(let P of d.unsubscriptions)A.push(o.removeSubscription(P)?0:17);f({cmd:"unsuback",granted:A,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let m=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=Ua(r?.headers.get?.("content-type"))),R=d.payload?.length>0?S(d.payload):void 0,g;try{g=await o.publish(d,R)}catch(A){hr.warn(A),d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:g===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),_n(!0,"connection","mqtt","disconnect"),hr.debug("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(h){hr.error(h),f({cmd:"disconnect"})}function f(h,m){let S=(0,Up.generate)(h,c);t(S),un(S.length,"bytes-sent",m,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Ao(h,r)}a(E,"serialize")}),{onMessage:_,onClose:u}}var Up,rF,hl,sr,Cb,nF,Mp,hr,sF,eF,Pp,iF=Oe(()=>{Up=require("mqtt-packet");Zx();rF=B(wr());Wc();pi();Or();hl=B(X()),sr=B(D()),Cb=B(x()),nF=require("events"),Mp=(0,Cb.loggerWithTag)("auth-event"),hr=(0,Cb.loggerWithTag)("mqtt"),sF=(0,hl.get)(sr.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(nle,"bypassAuth");a(sle,"start");Pp=0;a(tF,"onSocket")});var Ih={};Fe(Ih,{component_errors:()=>ml,loadComponent:()=>vp,loadComponentDirectories:()=>EF,setErrorReporter:()=>cle});function EF(e,t){t&&(Pb=t),e&&(Mb=e);let r=[];if((0,ps.existsSync)(Lb)){let s=(0,ps.readdirSync)(Lb,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,wt.join)(Lb,o);r.push(vp(c,Pb,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(vp(n,Pb,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{fF=!0})}function cle(e){nd=e}async function vp(e,t,r,n,s,i){if(!aF.has(e)){aF.set(e,!0),s&&(Mb=s);try{let o;n&&(ml=new Map);let c=(0,wt.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,ps.existsSync)(c)?o=n?(0,dF.getConfigObj)():(0,cF.parseDocument)((0,ps.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=Ub;let l=[],_=n;for(let u in o){let d=o[u];if(ml.set(n?u:(0,wt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let g=e,A;for(;!(0,ps.existsSync)(A=(0,wt.join)(g,"node_modules",u));)if(g=(0,wt.dirname)(g),g.length<(0,_F.getHdbBasePath)().length){A=null;break}if(A)f=await vp(A,t,r,!1),_=!0;else throw new Error(`Unable to find package ${u}:${E}`)}else f=ale[u];if(!f)continue;l.push(f);let h=a(g=>(g.origin=r,Et(g)),"ensureTable"),m=d.network||(d.port||d.securePort)&&d,S=m?.securePort||m?.https&&m.port,R=!m?.https&&m?.port;if(pl.isMainThread&&(f=await f.startOnMainThread?.({server:ct,ensureTable:h,port:R,securePort:S,resources:t,...d})||f,n&&m))for(let g of[R,S])try{if(+g&&!oF.includes(g)){let A=vb.get(Bb.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);A&&rd.default.warn("Session affinity is not recommended and may cause memory leaks"),(A||!Ep)&&(oF.push(g),hb(g,A))}}catch(A){console.error("Error listening on socket",g,A,u)}if(t.isWorker&&(f=await f.start?.({server:ct,ensureTable:h,port:R,securePort:S,resources:t,...d})||f),Mb.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,uF.handleHDBError)("Can not reference parent directories");let g=(0,wt.join)(e,d.files).replace(/\\/g,"/"),A=g.indexOf("/*");if(A>-1&&d.files!==Ub[u]?.files&&!(0,ps.existsSync)(g.slice(0,A)))throw new Error(`The path '${g.slice(0,A)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let P=(0,wt.basename)(e),U=d.path||"/";U=U.startsWith("/")?U:U.startsWith("./")?"/"+P+U.slice(2):U==="."?"/"+P:"/"+P+"/"+U;let v,k,H;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",k=(0,wt.join)(e,z)}else(H=g.indexOf("/*"))>-1&&(k=g.slice(0,H+1),v=(0,wt.relative)(e,k));let j=!1;if(pl.isMainThread&&f.setupDirectory&&(j=await f.setupDirectory?.(U,k,t)),t.isWorker&&f.handleDirectory&&(j=await f.handleDirectory?.(U,k,t)),j)continue;for(let z of await(0,lF.default)(g,{onlyFiles:!1,objectMode:!0})){let{path:J,dirent:Se}=z;_=!0;let ue=(0,wt.relative)(e,J).replace(/\\/g,"/");if(v)if(ue.startsWith(v))ue=ue.slice(v.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${ue}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Ee=U+(U.endsWith("/")?"":"/")+ue;try{if(Se.isFile()){let Me=await ole(J);pl.isMainThread&&await f.setupFile?.(Me,Ee,J,t),t.isWorker&&await f.handleFile?.(Me,Ee,J,t)}else pl.isMainThread&&await f.setupDirectory?.(Ee,J,t),t.isWorker&&await f.handleDirectory?.(Ee,J,t)}catch(Me){Me.message=`Could not load ${Se.isFile()?"file":"directory"} '${J}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${Me.message}`,nd?.(Me),((0,Sl.getWorkerIndex)()===0?console:rd.default).error(Me),t.set(d.path||"/",new sd(Me)),ml.set(n?u:(0,wt.basename)(e),Me.message)}}}}catch(h){h.message=`Could not load component '${u}' for application '${(0,wt.basename)(e)}' due to: ${h.message}`,nd?.(h),((0,Sl.getWorkerIndex)()===0?console:rd.default).error(h),t.set(d.path||"/",new sd(h),null,!0),ml.set(n?u:(0,wt.basename)(e),h.message)}}if(pl.isMainThread&&!fF&&i&&(0,Sl.watchDir)(e,async()=>EF()),o.extensionModule)return await ef((0,wt.join)(e,o.extensionModule));if(!_&&t.isWorker){let u=`${e} did not load any modules, resources, or files, is this a valid component?`;nd?.(new Error(u)),((0,Sl.getWorkerIndex)()===0?console:rd.default).error(u),ml.set((0,wt.basename)(e),u)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,nd?.(o),t.set("",new sd(o))}}}var ps,wt,pl,cF,vb,Bb,lF,Sl,rd,uF,_F,ile,dF,ole,Lb,Mb,fF,Pb,ml,ale,Ub,oF,aF,nd,sd,wh=Oe(()=>{ps=require("fs"),wt=require("path"),pl=require("worker_threads"),cF=require("yaml"),vb=B(X()),Bb=B(D());pI();gI();RI();gG();ax();fx();lF=B(require("fast-glob")),Sl=B(et()),rd=B(x());ES();Or();uF=B(oe());es();ge();mb();_F=B(X()),ile=B(xx());Th();Qx();iF();dF=B(ut());hp();({readFile:ole}=ps.promises),Lb=vb.get(Bb.CONFIG_PARAMS.COMPONENTSROOT),Mb=new Map,ml=new Map;a(EF,"loadComponentDirectories");ale={REST:Yh,rest:Yh,graphqlSchema:fS,jsResource:pS,fastifyRoutes:ZO,login:SS,static:eb,operationsApi:ile,customFunctions:{},http:{},clustering:Ob,authentication:N_,mqtt:Db},Ub={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(Ub,"static",{value:{files:"web/**"}});oF=[],aF=new Map;a(cle,"setErrorReporter");a(vp,"loadComponent");sd=class extends Jt{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 Rp=T((zNe,pF)=>{var{isMainThread:hF}=require("worker_threads"),{getTables:lle}=(ge(),ie(ke)),{loadComponentDirectories:ule,loadComponent:_le}=(wh(),ie(Ih)),{resetResources:dle}=(O_(),ie(CB)),fle=MA(),Ele=ut(),{dirname:hle}=require("path"),{getConnection:ple}=pt(),mle=X(),Sle=D(),Hb=new Map;async function Tle(e=!1){!hF&&mle.get(Sle.CONFIG_PARAMS.CLUSTERING_ENABLED)&&ple();try{hF&&await fle()}catch(n){console.error(n)}let t=dle();lle(),t.isWorker=e,await _le(hle(Ele.getConfigFilePath()),t,"hdb",!0,Hb),await ule(Hb,t);let r=[];for(let[n]of Hb)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(Tle,"loadRootComponents");pF.exports.loadRootComponents=Tle});var et=T((XNe,Po)=>{"use strict";var{Worker:gle,MessageChannel:Rle,parentPort:Ys,isMainThread:kb,threadId:Ale,workerData:vi}=require("worker_threads"),{PACKAGE_ROOT:Ole}=D(),{join:gF,isAbsolute:ble,extname:Nle}=require("path"),{server:RF}=(Or(),ie(Wo)),{watch:yle,readdir:Ile}=require("fs/promises"),{totalmem:mF}=require("os"),id=D(),AF=X(),Bi=x(),{randomBytes:wle}=require("crypto"),{_assignPackageExport:Cle}=require("../index"),Dle=D(),SF=1024*1024,Lo=[],kn=[],Lle=50,$b=1e4,Ple="restart",OF="request_thread_info",bF="resource_report",NF="thread_info",yF="added-port",Mle="ack",Gb;Cle("threads",kn);Po.exports={startWorker:qb,restartWorkers:Yb,shutdownWorkers:Gle,workers:Lo,setMonitorListener:Kle,onMessageFromWorkers:qle,onMessageByType:MF,broadcast:Fle,broadcastWithAcknowledgement:$le,setChildListenerByType:Hle,getWorkerIndex:IF,getWorkerCount:wF,getTicketKeys:DF,setMainIsWorker:vle,setTerminateTimeout:Ule,restartNumber:vi?.restartNumber||1};kn.onMessageByType=MF;kn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=kn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var Vb;function Ule(e){$b=e}a(Ule,"setTerminateTimeout");function IF(){return vi?vi.workerIndex:Vb?0:void 0}a(IF,"getWorkerIndex");function wF(){return vi?vi.workerCount:Vb?1:void 0}a(wF,"getWorkerCount");function vle(e){Vb=e}a(vle,"setMainIsWorker");var CF=1,Bp;function DF(){return Bp||(Bp=kb?wle(48):vi.ticketKeys,Bp)}a(DF,"getTicketKeys");Object.defineProperty(RF,"workerIndex",{get(){return IF()}});Object.defineProperty(RF,"workerCount",{get(){return wF()}});var LF={[OF](e,t){Vle(t)},[bF](e,t){Yle(t,e)}};function qb(e,t={}){let r=process.constrainedMemory?.()||mF();r=Math.min(r,mF(),2e4*SF);let n=AF.get(id.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/SF/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of kn){let _=new Rle;_.existingPort=l,i.push(_),o.push(_.port2)}Nle(e)||(e+=".js");let c=new gle(ble(e)?e:gF(Ole,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:CF=t.threadCount,name:t.name,restartNumber:Po.exports.restartNumber,ticketKeys:DF()},transferList:o},t));for(let{port1:l,existingPort:_}of i)_.postMessage({type:yF,port:l,threadId:c.threadId},[l]);return Gp(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>qb(e,t),c.on("error",l=>{console.error("Worker error:",l),Bi.error("Worker error:",l)}),c.on("exit",l=>{Lo.splice(Lo.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Lle?(t.unexpectedRestarts=c.unexpectedRestarts+1,qb(e,t)):Bi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{LF[l.type]?.(l,c)}),Lo.push(c),Qle(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(qb,"startWorker");var Ble=[id.THREAD_TYPES.HTTP];async function Yb(e=null,t=Math.max(CF>3,1),r=!0){if(kb){if(r){let{loadRootComponents:o}=Rp();await o()}Po.exports.restartNumber++,t<1&&(t=t*Lo.length);let n=[],s=[];for(let o of Lo.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Bi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Po.exports.restartNumber,type:id.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Ble.indexOf(o.name)>-1,l=new Promise(_=>{let u=setTimeout(()=>o.terminate(),$b*2).unref();o.on("exit",()=>{clearTimeout(u),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),_()})});if(n.push(l),c&&r){let _=o.startCopy(),u=new Promise(d=>{let f=a(E=>{E.type===Dle.ITC_EVENT_TYPES.CHILD_STARTED&&(Bi.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(u)),_.off("message",f))},"startListener");Bi.trace("Waiting for worker to start",_.threadId),_.on("message",f)});s.push(u),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=wa();r&&(e==="http"||!e)&&AF.get(id.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Ys.postMessage({type:Ple,workerType:e})}a(Yb,"restartWorkers");function Hle(e,t){LF[e]=t}a(Hle,"setChildListenerByType");function Gle(e){return Yb(e,1/0,!1)}a(Gle,"shutdownWorkers");var PF=[];function qle(e){PF.push(e)}a(qle,"onMessageFromWorkers");var xb=new Map;function MF(e,t){let r=xb.get(e);r||xb.set(e,r=[]),r.push(t)}a(MF,"onMessageByType");var xle=10;async function Fle(e){let t=0;for(let r of kn)try{r.postMessage(e),t++>xle&&(t=0,await new Promise(setImmediate))}catch(n){Bi.error("Unable to send message to worker",n)}}a(Fle,"broadcast");var Hp=new Map,kle=1;function $le(e){return new Promise(t=>{let r=0;for(let n of kn)try{let s=kle++,i=a(()=>{Hp.delete(s),--r===0&&t(),n!==Ys&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Hp.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of Hp)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Bi.error("Unable to send message to worker",s)}r===0&&t()})}a($le,"broadcastWithAcknowledgement");function Vle(e){e.postMessage({type:NF,workers:UF()})}a(Vle,"sendThreadInfo");function UF(){let e=Date.now();return Lo.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(UF,"getChildWorkerInfo");function Yle(e,t){e.resources=t,e.resources.updated=Date.now()}a(Yle,"recordResourceReport");var Fb;function Kle(e){Fb=e}a(Kle,"setMonitorListener");var Wle=1e3,TF=!1;function Qle(){TF||(TF=!0,setInterval(()=>{for(let e of Lo){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}Fb&&Fb()},Wle).unref())}a(Qle,"startMonitoring");var jle=1e3;if(Ys){Gp(Ys);for(let e=0,t=vi.addPorts.length;e<t;e++){let r=vi.addPorts[e];r.threadId=vi.addThreadIds[e],Gp(r)}setInterval(()=>{let e=process.memoryUsage();Ys.postMessage({type:bF,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},jle).unref(),Gb=a(()=>new Promise((e,t)=>{Ys.on("message",r),Ys.postMessage({type:OF});function r(n){n.type===NF&&(Ys.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else Gb=UF;Po.exports.getThreadInfo=Gb;function Gp(e,t){kn.push(e),e.on("message",r=>{if(r.type===yF)r.port.threadId=r.threadId,Gp(r.port);else if(r.type===Mle){let n=Hp.get(r.id);n&&n()}else{for(let s of PF)s(r,e);let n=xb.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){Bi.error(i)}}}).on("close",()=>{kn.splice(kn.indexOf(e),1)}).on("exit",()=>{kn.splice(kn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Gp,"addPort");if(kb){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await Ile(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(gF(n,i.name));try{for await(let{filename:i}of yle(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await Yb(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");Po.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Ys.on("message",async e=>{let{type:t}=e;t===id.ITC_EVENT_TYPES.SHUTDOWN&&(Po.exports.restartNumber=e.restartNumber,Ys.unref(),setTimeout(()=>{Bi.warn("Thread did not voluntarily terminate",Ale),process.exit(0)},$b).unref())})});var NP={};Fe(NP,{AUDIT_STORE_OPTIONS:()=>_h,createAuditEntry:()=>of,openAuditStore:()=>kp,readAuditEntry:()=>kt,setAuditRetention:()=>Jle,transactionKeyEncoder:()=>$F});function kp(e){let t=e.auditStore=e.openDB(xF.AUDIT_STORE_NAME,_h);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=qp){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed")return;let o=0,c;try{for(let{key:l,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-Kb})){if((_[0]&15)===jb){let u=kt(_),d=u.tableId;r[d]?.(u.recordId)}if(c=t.remove(l),await new Promise(setImmediate),++o>=zle){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,Kb/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,Fp.getWorkerIndex)()===(0,Fp.getWorkerCount)()-1&&s(qp),t}function Jle(e,t=qp){Kb=e,qp=t}function of(e,t,r,n,s,i,o){let c=VF[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let l=1;n&&(n>1?Tl.setFloat64(0,n):$n.set(US),l=9),f(0),f(t),d(r),Tl.setFloat64(l,e),l+=8,s?d(s):$n[l++]=0,$n[n?8:0]=c;let u=$n.subarray(0,l);if(o)return Buffer.concat([u,o]);return u;function d(E){let h=l;l+=1,l=(0,gl.writeKey)(E,$n,l);let m=l-h-1;m>127?m>16383?(Jb.error("Key or username was too large for audit entry",E),l=h+1,$n[h]=0):($n.copyWithin(h+2,h+1,l),Tl.setUint16(h,m|32768),l++):$n[h]=m}function f(E){E<128?$n[l++]=E:E<16384?(Tl.setUint16(l,E|32768),l+=2):E<1056964608?(Tl.setUint32(l,E|3221225472),l+=4):($n[l]=255,Tl.setUint32(l+1,E),l+=5)}}function kt(e){try{let t=e.dataView||(e.dataView=new zb(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,l=t.position+=o,_=t.readFloat64();o=t.readInt();let u=t.position,d=t.position+=o;return{type:VF[n&7],tableId:i,get recordId(){return qF(e,c,l)},version:_,previousLocalTime:r,get user(){return d>u?qF(e,u,d):void 0},getValue(f,E,h){if(n&Wb||n&Qb&&!E)return f.decoder.decode(e.subarray(t.position));if(n&Qb&&h)return Xb(f.getEntry(this.recordId),h,f)}}}catch(t){return Jb.error("Reading audit entry error",t,e),{}}}function qF(e,t,r){let n=e.subarray(t,r);return(0,gl.readKey)(n,0,r-t)}var gl,xp,xF,FF,Fp,kF,Jb,$n,Tl,$F,_h,Kb,zle,qp,Wb,Qb,vF,jb,BF,HF,GF,VF,zb,Zi=Oe(()=>{gl=require("ordered-binary"),xp=B(X()),xF=B(at()),FF=B(D()),Fp=B(et()),kF=B(K());nu();Jb=B(x());$p();(0,xp.initSync)();$n=Buffer.alloc(1024),Tl=new DataView($n.buffer,$n.byteOffset,1024),$F={writeKey(e,t,r){return e===ru?(t.set(ru,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,gl.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,gl.readKey)(e,t,r)}},_h={encoding:"binary",keyEncoder:$F},Kb=(0,kF.convertToMS)((0,xp.get)(FF.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,zle=1e3,qp=1e4;a(kp,"openAuditStore");a(Jle,"setAuditRetention");Wb=16,Qb=32,vF=1,jb=2,BF=3,HF=4,GF=5,VF={put:vF|Wb,[vF]:"put",delete:jb,[jb]:"delete",message:BF|Wb,[BF]:"message",invalidate:HF,[HF]:"invalidate",patch:GF|Qb,[GF]:"patch"};a(of,"createAuditEntry");a(kt,"readAuditEntry");zb=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch{debugger}}};a(qF,"readKeySafely")});var Zb={};Fe(Zb,{add:()=>Vp,applyReverse:()=>YF,getRecordAtTime:()=>Xb,rebuildUpdateBefore:()=>Yp});function Vp(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function Yp(e,t){let r=null;for(let n in e)if(n in t){let s=t[n];if(s?.__op__){let i=e[n];if(i?.__op__)if(i.__op__===s.__op__)r||(r={}),r[n]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[n]=i,Vp(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function YF(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=Xle[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=KF}}function Xb(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let l=n.get(i),_=kt(l);switch(_.type){case"put":s=_.getValue(r);break;case"patch":YF(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let l in s)s[l]===KF&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),_=kt(l),u;switch(_.type){case"put":u=_.getValue(r);break;case"patch":u=_.getValue(r);break}for(let d in u)o[d]&&(s[d]=u[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var Xle,KF,$p=Oe(()=>{Zi();a(Vp,"add");Vp.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};Xle={add:Vp};a(Yp,"rebuildUpdateBefore");a(YF,"applyReverse");KF={};a(Xb,"getRecordAtTime")});function mn(e){return e[Gt]||(e[Gt]=Object.create(null))}function zp(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,l,_;if(o.resolve)_={get(){return o.resolve(this,this[Ie])},set(u){return o.set(this,u)},configurable:!0};else{switch(o.type){case"String":l=a(function(u){if(!(typeof u=="string"||u==null&&o.nullable!==!1))throw new Vn.ClientError(`${c} must be a string, attempt to assign ${u}`);mn(this)[c]=u},"set");break;case"ID":l=a(function(u){if(!(typeof u=="string"||u?.length>0&&u.every?.(d=>typeof d=="string")||u==null&&o.nullable!==!1))throw new Vn.ClientError(`${c} must be a string, attempt to assign ${u}`);mn(this)[c]=u},"set");break;case"Float":case"Number":l=a(function(u){let d=u?.__op__?u.value:u;if(!(typeof d=="number"||u==null&&o.nullable!==!1))throw new Vn.ClientError(`${c} must be a number, attempt to assign ${d}`);mn(this)[c]=u},"set");break;case"Int":l=a(function(u){let d=u?.__op__?u.value:u;if(!(d>>0===d||u==null&&o.nullable!==!1))if(typeof d=="number"&&Math.abs((d>>0)-d)<=1)d=Math.round(d),u?.__op__?u.value=d:u=d;else throw new Vn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${u}`);mn(this)[c]=u},"set");break;case"Long":l=a(function(u){let d=u?.__op__?u.value:u;if(!(Math.round(d)===u&&Math.abs(d)<=9007199254740992||u==null&&o.nullable!==!1))if(typeof d=="number"&&Math.abs(d)<=9007199254740992)d=Math.round(d),u?.__op__?u.value=d:u=d;else throw new Vn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${u}`);mn(this)[c]=u},"set");break;case"BigInt":l=a(function(u){let d=u?.__op__?u.value:u;if(!(typeof d=="bigint"||u==null&&o.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=BigInt(d),u?.__op__?u.value=d:u=d;else throw new Vn.ClientError(`${c} must be a number, attempt to assign ${u}`);mn(this)[c]=u},"set");break;case"Boolean":l=a(function(u){if(!(typeof u=="boolean"||u==null&&o.nullable!==!1))throw new Vn.ClientError(`${c} must be a boolean, attempt to assign ${u}`);mn(this)[c]=u},"set");break;case"Date":l=a(function(u){if(!(u instanceof Date||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=new Date(u);else throw new Vn.ClientError(`${c} must be a Date, attempt to assign ${u}`);mn(this)[c]=u},"set");break;case"Bytes":l=a(function(u){if(!(u instanceof Uint8Array||u==null&&o.nullable!==!1))throw new Vn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${u}`);mn(this)[c]=u},"set");break;case"Any":case void 0:l=a(function(u){mn(this)[c]=u},"set");break;default:l=a(function(u){if(!(typeof u=="object"||u==null&&o.nullable!==!1))throw new Vn.ClientError(`${c} must be an object, attempt to assign ${u}`);mn(this)[c]=u},"set")}_={get(){let u=this[Gt];if(u&&c in u){let f=u[c];if(f?.__op__){let E=this[fe]?.[c];return f.update(E)}return f}let d=this[fe]?.[c];if(d&&typeof d=="object"){let f=QF(d,o);if(f)return u||(u=this[Gt]=Object.create(null)),u[c]=f}return d},set:l,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let l=this[Gt];return l?.[o]!==void 0?l[o]:this[fe]?.[o]}),i("set",function(o,c){let l=n[o];if(l)return l.set.call(this,c);if(t.sealed)throw new Vn.ClientError("Can not add a property to a sealed table schema");mn(this)[o]=c}),i("deleteProperty",function(o){mn(this)[o]=void 0}),i("toJSON",function(){let o=this[Gt],c;for(let _ in o){c||(c=Object.assign({},this[fe]));let u=o[_];if(u?.__op__){let d=c[_];u=u.update(d)}c[_]=u}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[fe])),Object.assign(c,this)),c||this[fe]}),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 QF(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){if(s?.[fe])throw new Error("Can not track an already tracked object, check for circular references");this[fe]=s}},zp(r,t)),new r(e)):new Kp(e);case Array:let n=new Qp(e.length);n[fe]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=QF(o,t?.elements)),n[s]=o}return n;default:return e}}function tE(e){let t=e[Gt],r;for(let s in t){r||(r=Object.assign({},e[fe]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=tE(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[fe])),Object.assign(r,e)),r||e[fe]}function $a(e,t=e[Gt]){let r;if(WF.call(e,fe)&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=$a(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[fe]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=Zb[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=$a(s);r[n]=s}return r?Object.freeze(r):WF.call(e,fe)?e[fe]:e}function Wp(e){let t=e[fe];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[ka]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.[fe]===s){if(Wp(i))return!0}else return!0}}else{let r=e[Gt];if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s[fe]===i){if(Wp(s))return!0}else return!0}else return!0}}return!1}var Vn,Gt,Kp,WF,ka,Qp,jp,rE=Oe(()=>{es();Vn=B(oe());$p();Gt=Symbol("own-data");a(mn,"getChanges");a(zp,"assignTrackedAccessors");a(QF,"trackObject");Kp=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[fe])throw new Error("Can not track an already tracked object, check for circular references");this[fe]=t}};zp(Kp,{});a(tE,"collapseData");WF=Object.prototype.hasOwnProperty;a($a,"deepFreeze");a(Wp,"hasChanges");ka=Symbol.for("has-array-changes"),Qp=class extends Array{static{a(this,"TrackedArray")}[ka];constructor(t){super(t)}splice(...t){return this[ka]=!0,super.splice(...t)}push(...t){return this[ka]=!0,super.push(...t)}pop(){return this[ka]=!0,super.pop()}unshift(...t){return this[ka]=!0,super.unshift(...t)}shift(){return this[ka]=!0,super.shift()}};Qp.prototype.constructor=Array;jp=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var cg={};Fe(cg,{CONTEXT:()=>Ie,ID_PROPERTY:()=>Ue,IS_COLLECTION:()=>Yn,RECORD_PROPERTY:()=>fe,Resource:()=>Jt,snake_case:()=>eue,transformForSelect:()=>Xp});function eue(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function jF(e,t){if(od=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(od=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new tN;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){od=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function Sn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,_,u;if(r?(o?(u=i,o=o[Ie]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(u=s,c=u[this.primaryKey]??null,o=i[Ie]||i):u=i:(u=s,c=u[Ue]??u[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[Ie]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(l=s,s[Symbol.iterator]){c=[],_=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let E=c.indexOf("?");if(E>-1){let m=this.parseQuery(c.slice(E+1));l?l=Object.assign(m,l):l=m,c=c.slice(0,E)}let h=this.parsePath(c,o,l);h?.id!==void 0?(h.query&&(l?l=Object.assign(h.query,l):l=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||_?(d=Object.assign({},t),l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),_&&(d.isCollection=!0)):d=t,o.transaction){let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)}else return Ze(o,()=>{let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)},d);function f(E){if(o.authorize){o.authorize=!1;let h=t.type==="read"?E.allowRead(o.user,l,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,u,o):E.allowUpdate(o.user,u,o):t.type==="create"?E.allowCreate(o.user,u,o):E.allowDelete(o.user,l,o);if(h?.then)return h.then(m=>{if(!m)throw new Jp(o.user);return typeof u?.then=="function"?u.then(S=>e(E,l,o,S)):e(E,l,o,u)});if(!h)throw new Jp(o.user)}return typeof u?.then=="function"?u.then(h=>e(E,l,o,h)):e(E,l,o,u)}a(f,"authorizeActionOnResource")}}function Tn(e,t){let r=new XF.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function eN(e,t,r){let n=e[fe];if(n){let s=e[Gt];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function Xp(e,t){let r=t?.propertyResolvers,n=t[Ie],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):eN(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let _=[],u=i(eN(l,r,n));for(let d of e)_.push(u(d));return _},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(f=>f&&typeof f=="object"?c(f):f);let _={},u=i(eN(l,r,n)),d;for(let f of e){let E=u(f);E===void 0&&o&&(E=null),E?.then?(d||(d=[]),d.push(E.then(h=>_[f.name||f]=h))):_[f.name||f]=E}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let u=r[c.name]?.definition?.tableClass;l=s[c.name]=Xp(c.select||c,u)}let _=o(c.name);return l(_)}else return o(c);else return c}}a(i,"handleProperty")}var zF,JF,XF,Ie,Ue,Yn,fe,Zle,Jt,Jp,od,tN,es=Oe(()=>{zF=require("crypto");zl();JF=require("../index"),XF=B(oe());rE();fa();$h();Ie=Symbol.for("context"),Ue=Symbol.for("primary-key"),Yn=Symbol("is-collection"),fe=Symbol("stored-record"),Zle={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Jt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Ue]=t;let n=r?.[Ie];this[Ie]=n!==void 0?n:r||null}static get=Sn(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let _=Xp(l,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Sn(function(t,r,n,s){if(Array.isArray(s)&&t[Yn]){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,_=l.getResource(c[l.primaryKey],n,{async:!0});_.then?i.push(_.then(u=>u.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):Tn(t,"put")},{hasContent:!0,type:"update"});static patch=Sn(function(t,r,n,s){return t.patch?t.patch(s,r):Tn(t,"patch")},{hasContent:!0,type:"update"});static delete=Sn(function(t,r,n,s){return t.delete?t.delete(r):Tn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,zF.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),Ze(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):Tn(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=Sn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Tn(t,"delete")},{hasContent:!1,type:"update"});static post=Sn(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=Sn(function(t,r,n,s){return t.connect?t.connect(s,r):Tn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Sn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Tn(t,"subscribe")},{type:"read"});static publish=Sn(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.publish?t.publish(s,r):Tn(t,"publish")},{hasContent:!0,type:"create"});static search=Sn(function(t,r,n,s){let i=t.search?t.search(r):Tn(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=Xp(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Sn(function(t,r,n,s){return t.search?t.search(s,r):Tn(t,"search")},{hasContent:!0,type:"read"});static copy=Sn(function(t,r,n,s){return t.copy?t.copy(s,r):Tn(t,"copy")},{type:"create"});static move=Sn(function(t,r,n,s){return t.move?t.move(s,r):Tn(t,"move")},{type:"delete"});post(t){if(this[Yn])return this.constructor.create(this[Ue],t,this[Ie]);Tn(this,"post")}static isCollection(t){return t?.[Yn]}static coerceId(t){return t}static parseQuery(t){return kh(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&Zle[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:jF(t,this),isCollection:od}}let i=jF(t,this);return od?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Ie],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let _=l.asMap.get(t);if(s=_?.find(u=>u.constructor===c),s)return s;_||l.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=l.find(_=>_[Ue]===t&&_.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let _=new Map;for(let u of l){let d=u[Ue],f=_.get(d);f?f.push(u):_.set(d,[u])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[Yn]=!0),s}subscribe(t){return new Zn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Zn}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[Ue]}getContext(){return this[Ie]}};Jt.prototype[Ie]=null;(0,JF._assignPackageExport)("Resource",Jt);a(eue,"snake_case");Jp=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(jF,"pathToId");tN=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Sn,"transactional");a(Tn,"missingMethod");a(eN,"selectFromObject");a(Xp,"transformForSelect")});function ek(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;Rl||((0,Zp.onMessageByType)(ZF,u=>{tk(u.path)}),Rl=Object.create(null));let o=Rl[s]||(Rl[s]=[]);o.auditStore=e.auditStore,o.lastTxnTime==null&&(o.lastTxnTime=Date.now());let c=o[i];c||(c=o[i]=new Map,c.envs=o,c.tableId=i,c.store=e.primaryStore),t=Yc(t);let l=new nN(r);l.startTime=n;let _=c.get(t);return _?_.push(l):(c.set(t,_=[l]),_.tables=c,_.key=t),l.subscriptions=_,l}function tk(e,t){if(!Rl)return;let r=Rl[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(s){throw s.message+=" in "+e,s}let n;for(let{key:s,value:i}of r.auditStore.getRange({start:r.lastTxnTime,exclusiveStart:!0})){r.lastTxnTime=s;let o=kt(i),c=r[o.tableId];if(!c)continue;let l=o.recordId,_,u=Yc(o.recordId),d=0;do{let f=c.get(u);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=s){(0,rN.info)("omitting",l,h.startTime,s);continue}try{if(h.crossThreads===!1&&!t)continue;let m;h.supportsTransactions&&h.txnInProgress!==o.version&&(m=!0,h.txnInProgress||(n?n.push(h):n=[h]),h.txnInProgress=o.version),h.listener(l,o,s,m)}catch(m){console.error(m),(0,rN.info)(m)}}}if(u==null)break;let E=u.lastIndexOf?.("/",u.length-2);E>-1?u=u.slice(0,E):u=null,d++}while(!0)}if(n)for(let s of n)s.txnInProgress=null,s.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function rk(e,t){let r=t||e,n=r.env;if(t&&!t.cache&&(t.cache=new Map),!n.hasBroadcastListener){n.hasBroadcastListener=!0;let s=n.path;r.on("aftercommit",()=>{(0,Zp.broadcast)({type:ZF,path:s}),tk(s,!0)})}}var rN,Zp,ZF,Rl,gye,nN,nk=Oe(()=>{rN=B(x()),Zp=B(et());zl();O_();Zi();ZF="transaction",gye=Buffer.alloc(4096);a(ek,"addSubscription");nN=class extends Zn{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 n=t.envs,s=t.dbi;delete n[s]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(tk,"notifyFromTransactionData");a(rk,"listenToCommits")});var BO={};Fe(BO,{coerceType:()=>em,makeTable:()=>nm,setServerUtilities:()=>lue,updateResource:()=>tm});function nm(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:_,dbisDB:u,sealed:d}=e,{expirationMS:f,evictionMS:E,audit:h,trackDeletes:m}=e,{attributes:S}=e;S||(S=[]),rk(i,l);let R=HS(i,n,l),g=0,A,P,U={},v=Promise.resolve(),k,H,j;for(let W of S)(W.assignCreatedTime||W.name==="__createdtime__")&&(k=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(H=W),W.expiresAt&&(j=W),W.isPrimaryKey&&(U=W);let z,J=[],Se=[],ue=1,Ee=2,Me={},Ge={},Ft=864e5,Gd,qd,Ki,iy=!1,$m,Vm,$V=i.getRange({start:!1,end:!1}).constructor,VV=10,YV=6;h&&cy();class Je extends Jt{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=k;static updatedTimeProperty=H;static propertyResolvers;static sources=[];static get expirationMS(){return f}static dbisDB=u;static schemaDefined=_;static sourcedFrom(p,O){O&&(this.sourceOptions=O,(O.expiration||O.eviction||O.scanInterval)&&this.setTTLExpiration(O)),O?.intermediateSource?(p.intermediateSource=!0,this.sources.unshift(p)):this.sources.push(p),P=p.get&&(!p.get.reliesOnPrototype||p.prototype.get);let I=a(L=>{let y=this.sources.slice(0,-1);if(y=y.filter(M=>M[L]&&(!M[L].reliesOnPrototype||M.prototype[L])),y.length>0)if(y.length===1){let M=y[0];return($,C,G)=>{if($?.source!==M)return M[L](C,G,$)}}else return(M,$,C)=>{let G=[];for(let q of y){if(M?.source===q)break;G.push(q[L]($,C,M))}return Promise.all(G)}},"getApplyToIntermediateSource"),N=this.sources[this.sources.length-1],b=a(L=>{if(N[L]&&(!N[L].reliesOnPrototype||N.prototype[L]))return(y,M,$)=>{if(!y?.source)return N[L](M,$,y)}},"getApplyToCanonicalSource");return Me={put:b("put"),patch:b("patch"),delete:b("delete"),publish:b("publish")},Ge={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish"),invalidate:I("invalidate")},(async()=>{let L=!1,y=a(async(M,$)=>{let C=M.value,G=M.table?lt[c][M.table]:Je;if(c===Ss.SYSTEM_SCHEMA_NAME&&(M.table===Ss.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===Ss.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(L=!0),M.id===void 0&&(M.id=C[G.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=p;let q=await G.getResource(M.id,$,Al);switch(M.type){case"put":return q._writeUpdate(C,!0,Al);case"patch":return q._writeUpdate(C,!1,Al);case"delete":return q._writeDelete(Al);case"publish":return q._writePublish(C,Al);case"invalidate":return q.invalidate(Al);default:st.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=p.subscribe;M&&m==null&&(m=!0);let $=p.subscribeOnThisThread?p.subscribeOnThisThread((0,Ya.getWorkerIndex)()):(0,Ya.getWorkerIndex)()===0,C=M&&$&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let G;for await(let q of C)try{if(!(q.type==="transaction"?q.writes[0]:q)){st.error("Bad subscription event",q);continue}if(q.source=p,G)if(q.beginTxn)G.resolve();else{y(q,G);continue}if(q.type==="end_txn")continue;let Te=Ze(q,()=>{if(q.type==="transaction"){let te=[];for(let Be of q.writes)try{te.push(y(Be,q))}catch(le){throw le.message+=" writing "+JSON.stringify(Be)+" of event "+JSON.stringify(q),le}return Promise.all(te)}else if(q.type==="define_schema"){let te=this.attributes.slice(0),Be;for(let le of q.attributes)te.find($e=>$e.name===le.name)||(te.push(le),Be=!0);Be&&(Et({table:s,database:c,attributes:te,origin:"cluster"}),fd.signalSchemaChange(new Ed.SchemaEventMsg(process.pid,Ss.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return q.beginTxn?(G=q,y(q,q),new Promise(te=>{G.resolve=te})):y(q,q)});L&&(await Te,fd.signalUserChange(new Ed.UserEventMsg(process.pid))),q.onCommit&&(Te?.then?Te.then(q.onCommit):q.onCommit())}catch(ae){st.error("error in subscription handler",ae)}}}catch(M){st.error(M)}})(),this}static getResource(p,O,I){let N=super.getResource(p,O,I);if(p!=null){vl(p);try{if(N.hasOwnProperty(fe))return N;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let b=!I?.async||i.cache?.get(p),L=Jn(O),y=L.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Ym(p,O,{transaction:y},b,M=>{if(M?tm(N,M):N[fe]=null,O.onlyIfCached&&O.noCacheStore){if(!N.doesExist())throw new Kn.ServerError("Entry is not cached",504)}else if(I?.ensureLoaded){let $=Km(p,M,O,N);if($)return L?.disregardReadTxn(),N[sN]=!0,oN($,C=>(tm(N,C),N))}return N})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(p)),b}}return N}ensureLoaded(){let p=Km(this[Ue],this[gn],this[Ie]);if(p)return this[sN]=!0,oN(p,O=>{this[gn]=O,this[fe]=O.value,this[_d]=O.version})}static setTTLExpiration(p){if(typeof p=="number")f=p*1e3,E||(E=0);else if(p&&typeof p=="object")f=p.expiration*1e3,E=(p.eviction||0)*1e3,Ft=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(f<0)throw new Error("Expiration can not be negative");Ft=Ft||(f+E)/4,Qm()}static enableAuditing(p=!0){h=p,p&&cy(),Je.audit=p}static coerceId(p){return p===""?null:em(p,U)}static async dropTable(){if(delete lt[c][s],c===o){for(let p of S)u.remove(Je.tableName+"/"+p.name),r[p.name]?.drop();u.remove(Je.tableName+"/"),i.drop(),await u.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));fd.signalSchemaChange(new Ed.SchemaEventMsg(process.pid,Ss.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(p){if(typeof p=="string")return this.getProperty(p);if(this[Yn])return this.search(p);if(this[Ue]===null){if(p?.conditions)return this.search(p);let O=Je.getRecordCount();return{recordCount:O.recordCount,estimatedRecordRange:O.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[Ie]?.returnNonexistent)return this}allowRead(p,O){let I=Fd(p);if(I?.read){if(I.isSuperUser)return!0;let N=I.attribute_permissions,b=O?.select;if(N?.length>0||iy&&b){if(O||(O={}),b){let L=N?.length>0&&iN(N,"read");O.select=b.map(y=>{let M=y.name||y;if(!L||L[M]){let $=Ki[M]?.definition?.tableClass;if($){if(y.name||(y={name:y}),!$.prototype.allowRead.call(null,p,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else O.select=N.filter(L=>L.read&&!Ki[L.attribute_name]).map(L=>L.attribute_name);return O}else return!0}}allowUpdate(p,O){let I=Fd(p);if(I?.update){let N=I.attribute_permissions;if(N?.length>0){let b=iN(N,"update");for(let L in O)if(!b[L])return!1;for(let L of N){let y=L.attribute_name;!L.update&&!(y in O)&&(O[y]=this.getProperty(y))}}return!0}}allowCreate(p,O){if(this[Yn]){let I=Fd(p);if(I?.insert){let N=I.attribute_permissions;if(N?.length>0){let b=iN(N,"insert");for(let L in O)if(!b[L])return!1}else return!0}}else return this.allowUpdate(p,{})}allowDelete(p){return Fd(p)?.delete}update(p,O){if(!Jn(this[Ie]))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let N;return typeof p=="object"&&p&&(O?(Object.isFrozen(p)&&(p=Object.assign({},p)),this[fe]={},this[Gt]=p):(N=this[Gt],N&&(p=Object.assign(N,p)),this[Gt]=N=p)),this._writeUpdate(this[Gt],O),this}addTo(p,O){if(typeof O=="number"||typeof O=="bigint")this[ad]===ik?this.set(p,(+this.getProperty(p)||0)+O):(this[ad]||this.update(),this.set(p,new jp(O)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,O){if(typeof O=="number")return this.addTo(p,-O);throw new Error("Can not subtract a non-numeric value")}invalidate(p){let O=this[Ie],I=this[Ue];vl(I),Jn(this[Ie]).addWrite({key:I,store:i,invalidated:!0,entry:this[gn],nodeName:this[Ie]?.nodeName,before:Me.invalidate?.bind(this,O,I),beforeIntermediate:Ge.invalidate?.bind(this,O,I),commit:(b,L)=>{if(L?.version>b)return;let y=null;for(let M in r)y||(y={}),y[M]=this.getProperty(M);R(I,y,this[gn],b,cd,h,this[Ie],0,"invalidate")}})}static evict(p,O,I){let N=this.Source,b;if(!((P||h)&&(!O||(b=i.getEntry(p),!b||!O)||b.version!==I))){if(P){if(i.hasLock(p,b.version))return;let L;for(let y in r)L||(L={}),L[y]=O[y];if(L)return R(p,L,b,I,ld,null,null,0,null,!0)}return i.ifVersion(p,I,()=>{xd(p,O,null)}),h?R(p,null,b,I,ld,null,null,0,null,!0):i.remove(p,I)}}lock(){throw new Error("Not yet implemented")}static operation(p,O){return p.table||=s,p.schema||=c,_k.operation(p,O)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,O,I){let N=this[Ie],b=Jn(N),L=this[Ue];vl(L);let y=this[gn];this[ad]=O?ik:oue;let M={key:L,store:i,entry:y,nodeName:N?.nodeName,validate:$=>{p||(p=this[Gt]),O||p&&Wp(p)?N?.source||(b.checkOverloaded(),this.validate(p,!O),H&&(p[H.name]=H.type==="Date"?new Date($):H.type==="String"?new Date($).toISOString():$),O&&(t&&p[t]!==L&&(p[t]=L),k&&(y?.value?p[k.name]=y?.value[k.name]:p[k.name]=k.type==="Date"?new Date($):k.type==="String"?new Date($).toISOString():$),p=$a(p))):b.removeWrite(M)},before:O?Me.put?()=>Me.put(N,L,p):null:Me.patch?()=>Me.patch(N,L,p):Me.put?()=>Me.put(N,L,$a(this)):null,beforeIntermediate:O?Ge.put?()=>Ge.put(N,L,p):null:Ge.patch?()=>Ge.patch(N,L,p):Ge.put?()=>Ge.put(N,L,$a(this)):null,commit:($,C,G)=>{if(G){if(N&&C?.version>(N.lastModified||0)&&(N.lastModified=C.version),this[gn]=C,C?.value?.[fe])throw new Error("Can not assign a record to a record, check for circular references");O||(this[fe]=C?.value??null)}this[Gt]=p,this[_d]=$;let q=C?.value,ae=p;if(this[ad]=0,C?.version>=$)if(h){let le=C.localTime,$e=C.version;for(;ae&&(le>$||$e>=$&&le>0);){let ne=l.get(le);if(!ne)break;let Z=kt(ne);if($e=Z.version,$e>$){if(Z.type==="patch"){let Ne=Z.getValue(i);ae=Yp(ae,Ne)}else if(Z.type==="put"||Z.type==="delete")return}else if($e===$)return;le=Z.previousLocalTime}}else{if(O)return;ae=Yp(ae,q)}let Te;if(O?Te=ae:(this[fe]=q,Te=O?ae:$a(this,ae)),this[fe]=Te,Te?.[fe])throw new Error("Can not assign a record to a record, check for circular references");let te;O||(te=p),xd(L,q,Te);let Be=O?"put":"patch";R(L,Te,C,$,0,h,N,N.expiresAt||(f?f+Date.now():0),Be,!1,te)}};b.addWrite(M)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[Yn]){for await(let O of this.search(p))(await Je.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[fe]?this._writeDelete(p):!1}_writeDelete(p){let O=Jn(this[Ie]),I=this[Ue];vl(I);let N=this[Ie];return O.addWrite({key:I,store:i,resource:this,nodeName:N?.nodeName,before:Me.delete?.bind(this,N,I),beforeIntermediate:Ge.delete?.bind(this,N,I),commit:(b,L,y)=>{let M=L?.value;y&&(N&&L?.version>(N.lastModified||0)&&(N.lastModified=L.version),tm(this,L)),!(L?.version>b)&&(xd(this[Ue],M),st.trace("Write delete entry",I,b),h||m?(R(I,null,this[gn],b,0,h,this[Ie],0,"delete"),h||Qm()):i.remove(this[Ue]))}}),!0}search(p){let O=this[Ie],I=Jn(O);if(!p)throw new Error("No query provided");let N=p.conditions;N?N.length===void 0&&(N=N[Symbol.iterator]?Array.from(N):[N]):N=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[Ue]&&(N=[{attribute:null,comparator:"prefix",value:this[Ue]}].concat(N));let b,L={};function y(Z,Ne){let qe;switch(Ne){case"and":case void 0:if(Z.length<1)throw new Error('An "and" operator requires at least one condition');qe=!0;break;case"or":if(Z.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Ne)}let Os=qe&&{},Wi;for(let Qe of Z){if(Qe.conditions){Qe.conditions=y(Qe.conditions,Qe.operator);continue}let jt=Qe[0]??Qe.attribute,Cn=jt==null?U:Di(S,jt);if(Cn){if(qe){let bs=ds(jt),zt=Os[bs];zt?(zt.push(Qe),Wi=!0):Os[bs]=[Qe]}(Cn.type||cO[Qe.comparator])&&(Qe[1]===void 0?Qe.value=$(Qe.value,Cn):Qe[1]=$(Qe[1],Cn))}else if(jt!=null)throw(0,Kn.handleHDBError)(new Error,`${jt} is not a defined attribute`,404)}if(p.enforceExecutionOrder)return Z;if(Wi)for(let Qe in Os){let jt=Os[Qe],Cn=jt.length;if(Cn>1)for(let bs=0;bs<Cn;bs++){let zt=jt[bs];if(zt.comparator==="ge"||zt.comparator==="greater_than_equal")for(let Qi=0;Qi<Cn;Qi++){let oc=jt[Qi];(oc.comparator==="le"||oc.comparator==="less_than_equal")&&(zt.comparator="between",zt.value=[zt.value,oc.value],Z.splice(Z.indexOf(oc),1))}if(zt.comparator==="equals"||!zt.comparator){for(let Qi=0;Qi<Cn;Qi++)if(Qi!==bs){let oc=jt[Qi];Z.splice(Z.indexOf(oc),1)}break}}}return Z}a(y,"prepareConditions");function M(Z,Ne){if(p.enforceExecutionOrder)return Z;for(let qe of Z)qe.conditions&&(qe.conditions=M(qe.conditions,qe.operator));return Z.length>1&&Ne!=="or"?(0,uk.sortBy)(Z,Fh(Je)):Z}a(M,"orderConditions");function $(Z,Ne){return Array.isArray(Z)?Z.map(qe=>em(qe,Ne)):em(Z,Ne)}a($,"coerceTypedValues");let C=p.operator;(N.length>0||C)&&(N=y(N,C));let G=typeof p.sort=="object"&&p.sort,q;if(G&&C!=="or"){let Z=G.attribute;if(b=N.find(Ne=>ds(Ne.attribute)===ds(Z)),!b){if(!Di(S,Z))throw(0,Kn.handleHDBError)(new Error,`${Array.isArray(Z)?Z.join("."):Z} is not a defined attribute`,404);b={attribute:Z,comparator:"sort"},N.push(b)}b.descending=!!G.descending}N=M(N,C),G&&(N[0]===b?G.next&&(q={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(b&&N.splice(N.indexOf(b),1),q=G));let ae=p.select;if(N.length===0&&(N=[{attribute:t,comparator:"greater_than",value:!0}]),p.explain)return{conditions:N,operator:C,postOrdering:q,selectApplied:!!ae};let Te=I.useReadTxn(),te=lO(N,C,Je,Te,p,O,(Z,Ne)=>oy(Z,ae,O,Te,Ne),L),Be=p.ensureLoaded!==!1;q||(te=ne(te));let le=Je.transformEntryForSelect(ae,O,Te,L,Be,!0),$e=Je.transformToOrderedSelect(te,ae,q,Te,O,le);function ne(Z){return p.offset||p.limit!==void 0?Z.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0):Z}return a(ne,"applyOffset"),q&&($e=ne($e)),$e.onDone=()=>{$e.onDone=null,I.doneReadTxn()},$e.selectApplied=!0,$e.getColumns=()=>{if(ae){let Z=[];for(let Ne of ae)Ne==="*"?Z.push(...S.map(qe=>qe.name)):Z.push(Ne.name||Ne);return Z}return S.map(Z=>Z.name)},$e}static transformToOrderedSelect(p,O,I,N,b,L){let y=new $V;if(I){p=oy(p,O,N,b,null);let M;y.iterate=function(){let C,G=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),q,ae=I.dbOrderedAttribute,Te,te,Be=!0;function le(ne){let Z=ne.next&&le(ne.next),Ne=ne.descending;return(qe,Os)=>{let Wi=Wm(qe,ne.attribute,N),Qe=Wm(Os,ne.attribute,N),jt=Ne?(0,Ka.compareKeys)(Qe,Wi):(0,Ka.compareKeys)(Wi,Qe);return jt===0?Z?.(qe,Os)||0:jt}}a(le,"createComparator");let $e=le(I);return{async next(){let ne;if(C)if(ne=C.next(),ne.done){if(q)return y.onDone&&y.onDone(),ne}else return{value:await L.call(this,ne.value)};M=[],Te&&M.push(Te);do if(ne=await G.next(),ne.done){if(q=!0,M.length)break;return y.onDone&&y.onDone(),ne}else{let Z=ne.value;if(Z?.then&&(Z=await Z),ae){let Ne=Wm(Z,ae,N);if(Be)Be=!1,te=Ne;else if(Ne!==te){te=Ne,Te=Z;break}}M.push(Z)}while(!0);return I.isGrouped,M.sort($e),C=M[Symbol.iterator](),ne=C.next(),ne.done?(y.onDone&&y.onDone(),ne):{value:await L.call(this,ne.value)}},return(){y.onDone&&y.onDone(),G.return()},throw(){y.onDone&&y.onDone(),G.throw()}}};let $=a(C=>{if(typeof O=="object"&&Array.isArray(C.attribute))for(let G=0;G<O.length;G++){let q=O[G],ae;if(q.name===C.attribute[0]){for(ae=q.sort||(q.sort={});ae.next;)ae=ae.next;ae.attribute=C.attribute.slice(1),ae.descending=C.descending}else q===C.attribute[0]&&(O[G]=ae={name:q,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&$(C.next)},"applySortingOnSelect");$(I)}else y.iterate=(p[Symbol.asyncIterator]||p[Symbol.iterator]).bind(p),y=y.map(L);return y}static transformEntryForSelect(p,O,I,N,b,L){if(p&&(p===t||p?.length===1&&p[0]===t)){let C=a(G=>(O?.transaction?.stale&&(O.transaction.stale=!1),G?.key??G),"transform");return p===t?C:p.asArray?G=>[C(G)]:G=>({[t]:C(G)})}let y;b&&P&&!p?.every(C=>{let G;return typeof C=="object"?G=C.name:G=C,r[G]||G===t})&&(y=!0);let M,$=a(function(C){let G;if(O?.transaction?.stale&&(O.transaction.stale=!1),C!=null){if($m=C,G=C.value||C.deref?.(),!G&&(C.key===void 0||C.deref)){if(C=Ym(C.key??C,O,{transaction:I,lazy:p?.length<4},this.isSync,q=>q),C?.then)return C.then($.bind(this));G=C?.value}if(y&&(C.metadataFlags&(cd|ld)||C.expiresAt&&C.expiresAt<Date.now())){let q=Km(C.key??C,C,O);if(q?.then)return q.then($)}}if(G==null)return L?Va.SKIP:G;if(p&&!(p[0]==="*"&&p.length===1)){let q,ae=a((te,Be)=>{let le;typeof te=="object"?le=te.name:le=te;let $e=Ki?.[le],ne;if($e){let Z=N?.[le];if(Z)if(Z.hasMappings){let qe=$e.from?G[$e.from]:ds(C.key);ne=Z.get(qe),ne||(ne=[])}else ne=Z.fromRecord?.(G);else ne=$e(G,O,C);let Ne=a(qe=>{if(qe&&typeof qe=="object"){let Os=$e.definition?.tableClass||Je;M||(M={});let Wi=M[le]||(M[le]=Os.transformEntryForSelect(le===te?null:te.select||(Array.isArray(te)?te:null),O,I,Z,b));if(Array.isArray(qe)){let Qe=[],jt=Os.transformToOrderedSelect(qe,te.select,typeof te.sort=="object"&&te.sort,O,I,Wi)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Cn=a(zt=>{for(;!zt.done;){if(zt?.then)return zt.then(Cn);Qe.push(zt.value),zt=jt.next()}Be(Qe,le)},"nextValue"),bs=Cn(jt.next());bs&&(q||(q=[]),q.push(bs));return}else if(qe=Wi.call(this,qe),qe?.then){q||(q=[]),q.push(qe.then(Qe=>Be(Qe,le)));return}}Be(qe,le)},"handleResolvedValue");ne?.then?(q||(q=[]),q.push(ne.then(Ne))):Ne(ne);return}else ne=G[le],ne&&typeof ne=="object"&&le!==te&&(ne=Je.transformEntryForSelect(te.select||te,O,I,null)({value:ne}));Be(ne,le)},"selectAttribute"),Te;if(typeof p=="string")ae(p,te=>{Te=te});else if(Array.isArray(p))if(p.asArray)Te=[],p.forEach((te,Be)=>{te==="*"?p[Be]=G:ae(te,le=>Te[Be]=le)});else{Te={};let te=p.forceNulls;for(let Be of p)if(Be==="*")for(let le in G)Te[le]=G[le];else ae(Be,(le,$e)=>{le===void 0&&te&&(le=null),Te[$e]=le})}else throw new Kn.ClientError("Invalid select"+p);return q?Promise.all(q).then(()=>Te):Te}return G},"transform");return $}async subscribe(p){if(!l)throw new Error("Can not subscribe to a table without an audit log");h||Et({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),p||(p={});let O=!p.rawEvents,I=ek(Je,this[Ue]??null,function(y,M,$,C){try{let G=M.getValue?.(i,O);if(!G&&M.type==="patch"&&O){let q=i.getEntry(y);q?.version===M.version?G=q.value:G=M.getValue?.(i,!0,$),M.type="put"}this.send({id:y,timestamp:$,value:G,version:M.version,type:M.type,beginTxn:C})}catch(G){st.error(G)}},p.startTime||0,this[Yn]);this[Yn]&&(I.includeDescendants=!0,p.onlyChildren&&(I.onlyChildren=!0)),p.crossThreads===!1&&(I.crossThreads=!1),p.supportsTransactions&&(I.supportsTransactions=!0);let N=this[Ue],b=p.previousCount;b>1e3&&(b=1e3);let L=p.startTime;if(this[Yn]){if(L){if(b)throw new Kn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:M}of l.getRange({start:L,exclusiveStart:!0})){let $=kt(M);if($.tableId!==n)continue;let C=$.recordId;if(N==null||ck(N,C)){let G=$.getValue(i,O,y);I.send({id:C,timestamp:y,value:G,version:$.version,type:$.type})}I.startTime=y}}else if(b){let y=[];for(let{key:M,value:$}of l.getRange({start:"z",end:!1,reverse:!0}))try{let C=kt($);if(C.tableId!==n)continue;let G=C.recordId;if(N==null||ck(N,G)){let q=C.getValue(i,O,M);if(y.push({id:G,timestamp:M,value:q,version:C.version,type:C.type}),--b<=0)break}}catch(C){st.error("Error getting history entry",M,C)}for(let M=y.length;M>0;)I.send(y[--M]);y[0]&&(I.startTime=y[0].timestamp)}else if(!p.omitCurrent)for(let{key:y,value:M,version:$,localTime:C}of i.getRange({start:N??!1,end:N==null?void 0:[N,Ka.MAXIMUM_KEY],versions:!0}))M&&I.send({id:y,timestamp:C,value:M,version:$,type:"put"})}else{b&&!L&&(L=0);let y=this[gn]?.localTime;if(y===BS&&(i.cache?.delete(N),this[gn]=i.getEntry(N),st.trace("re-retrieved record",y,this[gn]?.localTime),y=this[gn]?.localTime),st.trace("Subscription from",L,"from",N,y),L<y){let M=[],$=y;do{let C=l.get($);if(C){p.omitCurrent=!0;let G=kt(C),q=G.getValue(i,O,$);O&&(G.type="put"),M.push({id:N,value:q,timestamp:$,...G}),$=G.previousLocalTime}else break;b&&b--}while($>L&&b!==0);for(let C=M.length;C>0;)I.send(M[--C]);I.startTime=y}!p.omitCurrent&&this.doesExist()&&I.send({id:N,timestamp:y,value:this,version:this[_d],type:"put"})}return p.listener&&I.on("data",p.listener),I}doesExist(){return!!(this[fe]||this[ad])}publish(p,O){this._writePublish(p,O)}_writePublish(p,O){let I=Jn(this[Ie]),N=this[Ue]||null;vl(N);let b=this[Ie];I.addWrite({key:N,store:i,entry:this[gn],nodeName:b?.nodeName,validate:()=>{b?.source||(I.checkOverloaded(),this.validate(p))},before:Me.publish?.bind(this,b,N,p),beforeIntermediate:Ge.publish?.bind(this,b,N,p),commit:(L,y,M)=>{y===void 0&&m&&!h&&Qm(),R(N,y?.value??null,y,y?.version||L,0,!0,b,y?.expiresAt,"message",!1,p)}})}validate(p,O){let I,N=a((b,L,y)=>{if(L.type&&b!=null)if(O&&b.__op__&&(b=b.value),L.properties){typeof b!="object"&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be an object${L.type?" ("+L.type+")":""}`);let M=L.properties;for(let $=0,C=M.length;$<C;$++){let G=M[$],q=N(b[G.name],G,y+"."+G.name);q&&(b[G.name]=q)}if(L.sealed&&b!=null&&typeof b=="object")for(let $ in b)M.find(C=>C.name===$)||(I||(I=[])).push(`Property ${$} is not allowed within object in property ${y}`)}else switch(L.type){case"Int":(typeof b!="number"||b>>0!==b)&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof b!="number"||!(Math.floor(b)===b&&Math.abs(b)<=9007199254740992))&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(M=>typeof M=="string")||(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a string`);break;case"Boolean":typeof b!="boolean"&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a boolean`);break;case"Date":if(!(b instanceof Date)){if(typeof b=="string"||typeof b=="number")return new Date(b);(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof b!="bigint"){if(typeof b=="string"||typeof b=="number")return BigInt(b);(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a bigint`)}break;case"Bytes":b instanceof Uint8Array||(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(b)){if(L.elements)for(let M=0,$=b.length;M<$;M++){let C=b[M],G=N(C,L.elements,y+"[*]");G&&(b[M]=G)}}else(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a Buffer or Uint8Array`);break}L.nullable===!1&&b==null&&(I||(I=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let b=0,L=S.length;b<L;b++){let y=S[b];if(!y.relationship&&(!O||y.name in p)){let M=N(p[y.name],y,y.name);M&&(p[y.name]=M)}}if(d)for(let b in p)S.find(L=>L.name===b)||(I||(I=[])).push(`Property ${b} is not allowed`);if(I)throw new Kn.ClientError(I.join(". "))}getUpdatedTime(){return this[_d]}wasLoadedFromSource(){return P?!!this[sN]:void 0}static async addAttributes(p){let O=S.slice(0);for(let I of p){if(!I.name)throw new Kn.ClientError("Attribute name is required");if(I.name.match(/[`/]/))throw new Kn.ClientError("Attribute names cannot include backticks or forward slashes");O.push(I)}return Et({table:s,database:c,schemaDefined:_,attributes:O}),Je.indexingOperation}static async removeAttributes(p){let O=S.filter(I=>!p.includes(I.name));return Et({table:s,database:c,schemaDefined:_,attributes:O}),Je.indexingOperation}static getRecordCount(p){let O=i.getStats().entryCount,I=5e3,N=1e3,b;O>I&&!p?.exactCount&&(b=N);let L=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:b}))y!=null&&L++;if(b){let y=L;L=0;for(let{value:Be}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:b}))Be!=null&&L++;let M=b*2,$=(L+y)/M,C=Math.pow((L-y+1)/b/2,2)+$*(1-$)/M,G=Math.max(Math.sqrt(C)*O,1),q=Math.round($*O),ae=Math.max(q-1.96*G,0),Te=Math.min(q+1.96*G,O),te=Math.pow(10,Math.round(Math.log10(G)));return te>q&&(te=te/10),L=Math.round(q/te)*te,{recordCount:L,estimatedRange:[Math.round(ae),Math.round(Te)]}}return{recordCount:L}}static updatedAttributes(){Ki=this.propertyResolvers={$id:(p,O,I)=>({value:I.key}),$updatedtime:(p,O,I)=>I.version,$record:(p,O,I)=>I?{value:p}:p};for(let p of this.attributes){p.resolve=null;let O=p.relationship;if(O)if(p.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),iy=!0,O.to)p.elements?.definition?(Ki[p.name]=p.resolve=(I,N,b)=>{let L=I[O.from?O.from:t],y=p.elements.definition.tableClass;return b?rl({attribute:O.to,value:L},Jn(N).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:O.to,value:L}],N).asArray},p.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},p.resolve.definition=p.elements.definition,O.from&&(p.resolve.from=O.from)):console.error(`The one-to-many/many-to-many relationship property "${p.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(O.from){let I=p.definition||p.elements?.definition;I?(Ki[p.name]=p.resolve=(N,b,L)=>{let y=N[O.from];if(y!==void 0){if(p.elements){let M,$=y.map(C=>{let G=L?I.tableClass.primaryStore.getEntry(C,{transaction:Jn(b).getReadTxn()}):I.tableClass.get(C,b);return G?.then&&(M=!0),G});return O.filterMissing?M?Promise.all($).then(C=>C.filter(lk)):$.filter(lk):M?Promise.all($):$}return L?I.tableClass.primaryStore.getEntry(y,{transaction:Jn(b).getReadTxn()}):I.tableClass.get(y,b)}},p.set=(N,b)=>{if(Array.isArray(b)){let L=b.map(y=>y[Ue]||y[I.tableClass.primaryKey]);N[O.from]=L}else{let L=b[Ue]||b[I.tableClass.primaryKey];N[O.from]=L}},p.resolve.definition=p.definition||p.elements?.definition,p.resolve.from=O.from):console.error(`The relationship property "${p.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${p.name}" in table "${s}" must use either "from" or "to" arguments`)}zp(this,this)}static async deleteHistory(p=0){let O;for(let{key:I,value:N}of l.getRange({start:0,end:p}))await ud(),kt(N).tableId===n&&(O=l.remove(I));await O}static async*getHistory(p=0,O=1/0){for(let{key:I,value:N}of l.getRange({start:p,end:O})){await ud();let b=kt(N);b.tableId===n&&(yield{id:b.recordId,localTime:I,version:b.version,type:b.type,value:b.getValue(i,!0,I),user:b.user})}}static async getHistoryOfRecord(p){let O=[];if(p==null)throw new Error("An id is required");let I=i.getEntry(p);if(!I)return O;let N=I.localTime;if(!N)throw new Error("The entry does not have a local audit time");let b=0;do{await ud();let L=l.get(N);if(L){let y=kt(L);O.push({id:y.recordId,localTime:N,version:y.version,type:y.type,value:y.getValue(i,!0,N),user:y.user}),N=y.previousLocalTime}else break}while(b<1e3&&N);return O.reverse()}static cleanup(){z?.remove()}}Je.updatedAttributes();let KV=Je.prototype;return KV[iue]=!0,f&&Je.setTTLExpiration(f/1e3),j&&WV(),Je;function xd(W,p,O){let I;for(let N in r){let b=r[N],L=b.isIndexing,y=O?.[N],M=p?.[N];if(y===M&&!L)continue;I=!0;let $=b.indexNulls,C=(0,dd.getIndexedValues)(y,$),G=(0,dd.getIndexedValues)(M,$);if(G?.length>0){let q=new Set(G);if(C=C?C.filter(ae=>{if(q.has(ae))q.delete(ae);else return!0}):[],G=Array.from(q),(G.length>0||C.length>0)&&sk){let ae=G.concat(C).map(Te=>({key:Te,value:W}));b.prefetch(ae,ak)}for(let ae=0,Te=G.length;ae<Te;ae++)b.remove(G[ae],W)}else C?.length>0&&sk&&b.prefetch(C.map(q=>({key:q,value:W})),ak);if(C)for(let q=0,ae=C.length;q<ae;q++)b.put(C[q],W)}return I}a(xd,"updateIndices");function vl(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>ok)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)return!0;break;case"bigint":if(W<2n**64n&&W>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,Ka.writeKey)(W,aue,0)>ok)throw new Error("Primary key size is too large: "+W.length);return!0}a(vl,"checkValidId");function Ym(W,p,O,I,N){let b=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),O.transaction?.isDone)return N(null,W);let L=i.getEntry(W,O);return L&&p&&(L?.version>(p.lastModified||0)&&(p.lastModified=L.version),L?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=L.localTime)),N(L,W)},"whenPrefetched");return I?b():ue>0?(ue--,b()):new Promise((L,y)=>{ue===0?(ue--,i.prefetch([W],()=>{M(),$()})):(J.push(W),Se.push($),J.length>YV&&(ue--,M()));function M(){if(J.length>0){let C=Se;i.prefetch(J,()=>{ue===-1?M():ue++;for(let G of C)G()}),J=[],Se=[],Ee>2&&Ee--}else ue=Ee,Ee<VV&&Ee++}a(M,"prefetch");function $(){try{L(b())}catch(C){y(C)}}a($,"load")})}a(Ym,"loadLocalRecord");function Fd(W){if(!W?.role)return;let p=W.role.permission;if(p.super_user)return cue;let O=p[c],I,N=O?.tables;if(N)return N[s];if(c==="data"&&(I=p[s])&&!I.tables)return I}a(Fd,"getTablePermissions");function Km(W,p,O,I){if(P){let N;if(O.noCache?N=!0:(p?(!p.value||p.metadataFlags&(cd|ld)||p.expiresAt&&p.expiresAt<Date.now())&&(N=!0):N=!0,_n(!N,"cache-hit",s)),N){let b=ay(W,p,O).then(L=>(L?.value?.[fe]&&st.error("Can not assign a record with a record property"),O&&(L?.version>(O.lastModified||0)&&(O.lastModified=L.version),O.lastRefreshed=Date.now()),L));if(O?.onlyIfCached||p?.value&&I?.allowStaleWhileRevalidate?.(p,W)){if(b.catch(L=>st.warn(L)),O?.onlyIfCached&&!I.doesExist())throw new Kn.ServerError("Entry is not cached",504);return}else return b}}}a(Km,"ensureLoadedFromSource");function Jn(W){let p=W?.transaction;if(p){if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let O=p.next;if(!O)return p=p.next=new da,p.lmdbDb=i,p;p=O}while(!0)}else return new Zf}a(Jn,"txnForContext");function Wm(W,p,O){if(!W)return;$m=W;let I=W.value||W.deref?.()||($m=i.getEntry(W.key))?.value;if(typeof p=="object"){let b=Ki,L=I;for(let y=0,M=p.length;y<M;y++){let $=p[y],C=b?.[$];L=C&&L?C(L,O,!0)?.value:L?.[$],b=C?.definition?.tableClass?.propertyResolvers}return L}let N=Ki[p];return N?N(I,O):I[p]}a(Wm,"getAttributeValue");function oy(W,p,O,I,N){let b=N?.length,L={transaction:I,lazy:b>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},y;function M($,C){let G=$?.value;if(!G)return Va.SKIP;for(let q=0;q<b;q++)if(!y?.includes(q)&&!N[q](G,$))return Va.SKIP;return C!==void 0&&($.key=C),$}if(a(M,"processEntry"),b>0||!W.hasEntries){let $=W.map(C=>{if(y=null,typeof C=="object"&&C?.key!==void 0)return b>0?M(C):C;if(C==null)return Va.SKIP;for(let G=0;G<b;G++){let ae=N[G].idFilter;if(ae){if(!ae(C))return Va.SKIP;y||(y=[]),y.push(G)}}return Ym(C,O,L,!1,M)});return Array.isArray(W)&&($=$.filter(C=>C!==Va.SKIP)),$.hasEntries=!0,$}return W}a(oy,"transformToEntries");async function ay(W,p,O){let I=p?.metadataFlags,N=p?.version,b,L;if(!i.attemptLock(W,N,()=>{clearTimeout(L);let C=i.getEntry(W);!C||!C.value||C.metadataFlags&(cd|ld)?b(ay(W,i.getEntry(W),O)):b(C)}))return new Promise(C=>{b=C,L=setTimeout(()=>{i.unlock(W,N)},sue)});let y=p?.value,M={requestContext:O,replacingRecord:y,replacingVersion:N,source:null,resourceCache:O?.resourceCache},$=O?.responseHeaders;return new Promise((C,G)=>{let q;oN(Ze(M,async ae=>{let Te=performance.now(),te,Be,le;try{for(let Ne of Je.sources)if(Ne.get&&(!Ne.get.reliesOnPrototype||Ne.prototype.get)&&(M.source=Ne,te=await Ne.get(W,M),te))break;le=I&cd;let ne=M.lastModified||le&&N;Be=le||ne>N||!y,ne||(ne=(0,dd.getNextMonotonicTime)());let Z=performance.now()-Te;if(un(Z,"cache-resolution",s),$&&DA($,"Server-Timing",`cache-resolve;dur=${Z.toFixed(2)}`,!0),ae.timestamp=ne,f&&!M.expiresAt&&(M.expiresAt=Date.now()+f),te){if(typeof te!="object")throw new Error("Only objects can be cached and stored in tables");typeof te.toJSON=="function"&&(te=te.toJSON()),t&&te[t]!==W&&(te[t]=W)}q=!0,C({version:ne,value:te})}catch(ne){ne.message+=` while resolving record ${W} for ${s}`,y&&((ne.code==="ECONNRESET"||ne.code==="ECONNREFUSED"||ne.code==="EAI_AGAIN")&&!O?.mustRevalidate||O?.staleIfError&&(ne.statusCode===500||ne.statusCode===502||ne.statusCode===503||ne.statusCode===504))?(C({version:N,value:y}),st.trace(ne.message,"(returned stale record)")):G(ne),M.transaction.abort();return}if(O?.noCacheStore){M.transaction.abort();return}Jn(M).addWrite({key:W,store:i,entry:p,nodeName:"source",commit:(ne,Z)=>{if(Z?.version!==N)return;let Ne=xd(W,y,te);te?(Ge.put?.(M,W,te),R(W,te,Z,ne,0,h&&Be||null,M,M.expiresAt,"put",!!le)):(Ge.delete?.(M,W),h||m?R(W,null,Z,ne,0,h&&Be||null,M,0,"delete",!!le):i.remove(W,N))}})}),()=>{i.unlock(W,N)},ae=>{i.unlock(W,N),q&&st.error("Error committing cache update",ae)})})}a(ay,"getFromSource");function Qm(){if(Ft!==Gd&&(Gd=Ft,(0,Ya.getWorkerIndex)()===(0,Ya.getWorkerCount)()-1)){if(qd&&clearTimeout(qd),!Ft)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let p=Math.ceil((Date.now()-W.getTime())/Ft)*Ft+W.getTime(),O=a(I=>{st.trace(`Scheduled next cleanup scan at ${new Date(I)}ms`),qd=setTimeout(()=>v=v.then(async()=>{if(O(Math.max(I+Ft,Date.now())),i.rootStore.status!=="open"){clearTimeout(qd);return}let N=50,b=new Array(N),L=0;st.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:M,value:$,version:C,expiresAt:G}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let q;$===null&&!h&&C+nue<Date.now()?q=i.remove(M,C):G&&G+E<Date.now()&&(q=Je.evict(M,$,C),y++),q&&(await b[L],b[L]=q.catch(ae=>{st.error("Cleanup error",ae)}),++L>=N&&(L=0)),await ud()}st.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){st.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");O(p)}}a(Qm,"scheduleCleanup");function cy(){z=l?.addDeleteRemovalCallback(n,W=>{let p=i.getEntry(W);p?.value===null&&i.remove(W,p.version)})}a(cy,"addDeleteRemoval");function WV(){(0,Ya.getWorkerIndex)()===0&&setInterval(async()=>{if(!Vm){Vm=!0;try{let W=j.name,p=r[W];if(!p)throw new Error(`expiresAt attribute ${j} must be indexed`);for(let O of p.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let I of p.getValues(O)){let N=i.getEntry(I);N?.value?N.value[W]<Date.now()&&Je.evict(I,N.value,N.version):i.ifVersion(I,N?.version,()=>p.remove(O,I))}await ud()}}catch(W){st.error("Error in evicting old records",W)}finally{Vm=!1}}},rue).unref()}a(WV,"runRecordExpirationEviction")}function iN(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function ak(){}function lue(e){_k=e}function em(e,t){let r=t?.type;return e===null?e:e===""&&r&&r!=="String"&&r!=="Any"?null:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Boolean"?e==="true"?!0:e==="false"?!1:e:r==="Date"?isNaN(e)?e==="null"?null:(uue.test(e)||(e+="Z"),new Date(e)):new Date(+e):!r||r==="Any"?(0,rm.autoCast)(e):e}function ck(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 n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function oN(e,t,r){return e?.then?e.then(t,r):t(e)}function tm(e,t){e[gn]=t,e[fe]=t?.value??null,e[_d]=t?.version}function lk(e){return e!=null}function ms(e){try{return JSON.stringify(e)}catch{return e}}var Ss,Va,dd,uk,hd,Kn,fd,Ed,st,Ka,Ya,rm,tue,_k,rue,nue,sk,sue,_d,iue,gn,ad,ik,oue,sN,Al,cd,ld,aue,ok,cue,Gye,uue,ud,np=Oe(()=>{Ss=B(D()),Va=require("lmdb"),dd=B(Ar()),uk=require("lodash");es();Dg();hd=B(X());nk();Kn=B(oe()),fd=B(di()),Ed=B(is());ge();$h();st=B(x());rE();fa();Ka=require("ordered-binary"),Ya=B(et());Zi();rm=B(K());nu();pi();$p();b_();tue=new Uint8Array(9);tue[8]=192;rue=6e4,nue=864e5;hd.initSync();sk=hd.get(Ss.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),sue=1e4,_d=Symbol.for("version"),iue=Symbol.for("incremental-update"),gn=Symbol("entry"),ad=Symbol("is-saving"),ik=1,oue=2,sN=Symbol("loaded-from-source"),Al={isNotification:!0,ensureLoaded:!1},cd=1,ld=8,aue=Buffer.allocUnsafeSlow(8192),ok=1978,cue={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},Gye=(0,rm.convertToMS)(hd.get(Ss.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(nm,"makeTable");a(iN,"attributesAsObject");a(ak,"noop");a(lue,"setServerUtilities");uue=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(em,"coerceType");a(ck,"isDescendantId");ud=a(()=>new Promise(setImmediate),"rest");a(oN,"when");a(tm,"updateResource");a(lk,"exists");a(ms,"stringify")});var ke={};Fe(ke,{database:()=>Mu,databases:()=>lt,dropDatabase:()=>vg,dropTableMeta:()=>hue,getDatabases:()=>Dr,getDefaultCompression:()=>dh,getTables:()=>_ue,onUpdatedTable:()=>bb,readMetaDb:()=>pd,resetDatabases:()=>m_,table:()=>Et,tables:()=>en});function _ue(){return cm||Dr(),en||{}}function Dr(){if(cm)return lt;cm=!0,Nl=new Map;let e=(0,gt.getHdbBasePath)()&&(0,it.join)((0,gt.getHdbBasePath)(),qt.DATABASES_DIR_NAME),t=(0,gt.get)(qt.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,gt.get)(qt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Rn.existsSync)(e)?e:(0,it.join)((0,gt.getHdbBasePath)(),qt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Rn.existsSync)(e))for(let r of(0,Rn.readdirSync)(e,{withFileTypes:!0})){let n=(0,it.basename)(r.name,".mdb");r.isFile()&&(0,it.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&pd((0,it.join)(e,r.name),null,n)}if((0,Rn.existsSync)((0,bl.getBaseSchemaPath)())){for(let r of(0,Rn.readdirSync)((0,bl.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,it.join)((0,bl.getBaseSchemaPath)(),r.name),s=(0,it.join)((0,bl.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Rn.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,it.extname)(i.name).toLowerCase()===".mdb"){let o=(0,it.join)(s,i.name);pd((0,it.join)(n,i.name),(0,it.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,Rn.existsSync)(s))for(let o of(0,Rn.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,it.extname)(o.name).toLowerCase()===".mdb"&&pd((0,it.join)(s,o.name),(0,it.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,it.join)(c.path,(0,it.basename)(o+".mdb"));(0,Rn.existsSync)(l)&&pd(l,o,r,null,!0)}}for(let r in lt){let n=Nl.get(r);if(n){let s=lt[r];r.includes("delete")&&Wn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Wn.trace(`delete table class ${i}`),delete s[i])}else if(delete lt[r],r==="data"){for(let s in en)delete en[s];delete en[um]}}return Nl=null,lt}}function m_(){cm=!1;for(let[,e]of Mo)e.needsDeletion=!0;Dr();for(let[e,t]of Mo)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Mo.delete(e));return lt}function pd(e,t,r=lN,n,s){let i=new aN.default(e,!1);try{let o=Mo.get(e);o?o.needsDeletion=!1:(o=(0,im.open)(i),Mo.set(e,o));let c=new Wa.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(sm.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,Rn.existsSync)(n)&&(i.path=n,_=(0,im.open)(i),_.isLegacy=!0):_=kp(o));let u=hk(r),d=u[um],f=new Map;for(let{key:E,value:h}of l.getRange({start:!1})){let[m,S]=E.toString().split("/");S===""?S=h.name:S||(S=m,m=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(m);let R=f.get(m);R||f.set(m,R={attributes:[]}),(S==null||h.is_hash_attribute)&&(R.primary=h),S!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:m,primary:S}=h;if(!S){for(let J of m)if(J.is_hash_attribute||J.isPrimaryKey){S=J;break}if(!S){Wn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(m)}`);continue}}let R=u[E],g={},A=[],P,U,v=typeof S.audit=="boolean"?S.audit:(0,gt.get)(qt.CONFIG_PARAMS.LOGGING_AUDITLOG),k=S.trackDeletes,H=S.expiration,j=S.eviction,z=S.sealed;if(R)g=R.indices,A=R.attributes,R.schemaVersion++;else{P=S.tableId,P?P>=(l.get(Ol)||0)&&l.putSync(Ol,P+1):(S.tableId=P=l.get(Ol),P||(P=1),l.putSync(Ol,P+1),l.putSync(S.key,S));let J=new Wa.default(!S.is_hash_attribute,S.is_hash_attribute);if(J.compression=S.compression,J.compression){let Se=(0,gt.get)(qt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||Ek;J.compression.threshold=Se}U=af(o.openDB(S.key,J)),U.rootStore=o,U.tableId=P}for(let J of m){J.attribute=J.name;try{if(!J.is_hash_attribute&&(J.indexed||J.attribute&&!J.name)){if(!g[J.name]){let ue=new Wa.default(!J.is_hash_attribute,J.is_hash_attribute);g[J.name]=o.openDB(J.key,ue),g[J.name].indexNulls=J.indexNulls}let Se=A.find(ue=>ue.name===J.name);Se?A.splice(A.indexOf(Se),1,J):A.push(J)}}catch(Se){Wn.error("Error trying to update attribute",J,A,g,Se)}}if(!R){R=pk(u,E,nm({primaryStore:U,auditStore:_,audit:v,sealed:z,expirationMS:H&&H*1e3,evictionMS:j&&j*1e3,trackDeletes:k,tableName:E,tableId:P,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:g,attributes:m,schemaDefined:S.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let J of uN)J(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function hk(e){let t=lt[e];if(t||(e==="data"?t=lt[e]=en:e==="system"?Object.defineProperty(lt,"system",{value:t=Object.create(null),configurable:!0}):t=lt[e]=Object.create(null)),Nl&&!Nl.has(e)){let r=new Set;t[um]=r,Nl.set(e,r)}return t}function pk(e,t,r){return e[t]=r,r}function Mu({database:e,table:t}){e||(e=lN),Dr();let r=hk(e),n=(0,it.join)((0,gt.getHdbBasePath)(),qt.DATABASES_DIR_NAME),s=(0,gt.get)(qt.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,gt.get)(qt.CONFIG_PARAMS.STORAGE_PATH)||((0,Rn.existsSync)(n)?n:(0,it.join)((0,gt.getHdbBasePath)(),qt.LEGACY_DATABASES_DIR_NAME));let o=(0,it.join)(n,(i?t:e)+".mdb"),c=Mo.get(o);if(!c){let l=new aN.default(o,!1);c=(0,im.open)(l),Mo.set(o,c)}return c}async function vg(e){if(!lt[e])throw new Error("Schema does not exist");let t=lt[e];for(let r in t){let s=t[r].primaryStore.rootStore;Mo.delete(s.path),s.status==="open"&&(await s.close(),await lm.remove(s.path))}if(e==="data"){for(let r in en)delete en[r];delete en[um]}delete lt[e]}function Et({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:l,schemaDefined:_,origin:u}){t||(t=lN);let d=Mu({database:t,table:e}),f=lt[t],E=f?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,m,S,R;_==null&&(_=!0);let g=new Wa.default(!1);for(let H of i)H.attribute?(H.name=H.attribute,H.indexed=!0):H.attribute=H.name,H.expiresAt&&(H.indexed=!0);let A,P;if(E){if(h=E.primaryKey,E.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);E.attributes.splice(0,E.attributes.length,...i)}else{let H=d.auditStore;H||(H=kp(d)),m=i.find(Se=>Se.isPrimaryKey)||{},h=m.name,m.is_hash_attribute=!0,m.schemaDefined=_,m.compression=dh(),l&&(m.trackDeletes=!0),o=m.audit=typeof o=="boolean"?o:(0,gt.get)(qt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(m.expiration=r),n&&(m.eviction=n),typeof c=="boolean"&&(m.sealed=c),u&&(m.origins?m.origins.includes(u)||m.origins.push(u):m.origins=[u]),Wn.trace(`${e} table loading, opening primary store`);let j=new Wa.default(!1,!0);j.compression=m.compression;let z=e+"/",J=af(d.openDB(z,j));J.rootStore=d,R=d.dbisDb=d.openDB(sm.INTERNAL_DBIS_NAME,g),J.tableId=R.get(Ol),J.tableId||(J.tableId=1),R.putSync(Ol,J.tableId+1),m.tableId=J.tableId,E=pk(f,e,nm({primaryStore:J,auditStore:H,audit:o,sealed:c,trackDeletes:l,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:J.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:R})),E.schemaVersion=1,A=!0,k(),R.put(z,m)}S=E.indices,R=R||(d.dbisDb=d.openDB(sm.INTERNAL_DBIS_NAME,g)),E.dbisDB=R;let U=[];for(let{key:H,value:j}of R.getRange({start:!0})){let[z,J]=H.toString().split("/");if(J===""&&(J=j.name),J){if(z!==e)continue}else J=z;if(!i.find(ue=>ue.name===J)?.indexed&&j.indexed&&!j.isPrimaryKey){k(),A=!0,R.remove(H);let ue=E.indices[z];ue&&U.push(ue)}}let v=[];try{for(let H of i||[]){if(H.relationship)continue;let j=e+"/"+(H.name||"");Object.defineProperty(H,"key",{value:j,configurable:!0});let z=R.get(j);if(H.isPrimaryKey){if(z=z||R.get(j=e+"/")||{},o!==E.audit||c!==c||(+r||void 0)!==(+z.expiration||void 0)||(+n||void 0)!==(+z.eviction||void 0)){let Se=Object.assign({},z);typeof o=="boolean"&&(o&&E.enableAuditing(o),Se.audit=o),r&&(Se.expiration=+r),n&&(Se.eviction=+n),c!==void 0&&(Se.sealed=c),A=!0,k(),R.put(j,Se)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let J=!z||z.type!==H.type||z.indexed!==H.indexed||z.nullable!==H.nullable||JSON.stringify(z.attributes)!==JSON.stringify(H.attributes)||JSON.stringify(z.elements)!==JSON.stringify(H.elements);if(H.indexed){let Se=new Wa.default(!0,!1),ue=d.openDB(j,Se);(J||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<md.workerData?.restartNumber)&&(A=!0,k(),z=R.get(j),(J||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<md.workerData?.restartNumber)&&(A=!0,H.indexNulls===void 0&&(H.indexNulls=!0),E.primaryStore.getStats().entryCount>0&&(H.lastIndexedKey=z?.lastIndexedKey||!1,H.indexingPID=process.pid,ue.isIndexing=!0,Object.defineProperty(H,"dbi",{value:ue}),v.push(H))),R.put(j,H)),z?.indexNulls&&H.indexNulls===void 0&&(H.indexNulls=!0),ue.indexNulls=H.indexNulls,S[H.name]=ue}else J&&(A=!0,k(),R.put(j,H))}}finally{P&&P()}if(A&&(E.schemaVersion++,E.updatedAttributes()),Wn.trace(`${e} table loading, running index`),v.length>0||U.length>0?E.indexingOperation=Eue(E,v,U):A&&om.signalSchemaChange(new am.SchemaEventMsg(process.pid,"schema-change",E.databaseName,E.tableName)),E.origin=u,A)for(let H of uN)H(E,u!=="cluster");return(r||n||s)&&E.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),Wn.trace(`${e} table loaded`),E;function k(){P||d.transactionSync(()=>({then(H){P=H}}))}a(k,"startTxn")}async function Eue(e,t,r){try{let n=e.schemaVersion;await om.signalSchemaChange(new am.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let l of r)s=l.drop();let i,o=0,c=t.length;if(await new Promise(l=>setImmediate(l)),c>0){let l=0;for(let{key:_,value:u,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(u){if(l++,s=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,m=(0,dk.getIndexedValues)(u[h]);if(m)for(let S=0,R=m.length;S<R;S++)E.dbi.put(m[S],_)}}),s.then(()=>l--,f=>{l--,Wn.error(f)}),md.workerData&&md.workerData.restartNumber!==fk.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}l>due?await s:l>fue&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await om.signalSchemaChange(new am.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){Wn.error("Error in indexing",n)}}function hue({table:e,database:t}){let r=Mu({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function bb(e){uN.push(e)}function dh(){let e=(0,gt.get)(qt.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,gt.get)(qt.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,gt.get)(qt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||Ek,n={startingOffset:32};return t&&(n.dictionary=lm.readFileSync(t)),r&&(n.threshold=r),e&&n}var gt,sm,im,it,Rn,bl,Wa,aN,qt,lm,cN,dk,om,am,md,Wn,fk,lN,um,Ek,en,lt,Ol,uN,cm,Mo,Nl,due,fue,ge=Oe(()=>{gt=B(X()),sm=B(at()),im=require("lmdb"),it=require("path"),Rn=require("fs"),bl=B(je());np();Wa=B(su()),aN=B(iu()),qt=B(D()),lm=B(require("fs-extra")),cN=require("../index"),dk=B(Ar()),om=B(di()),am=B(is()),md=require("worker_threads"),Wn=B(x()),fk=B(et());Zi();nu();lN="data",um=Symbol("defined-tables"),Ek=((0,gt.get)(qt.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,gt.initSync)();en=Object.create(null),lt=Object.create(null);(0,cN._assignPackageExport)("databases",lt);(0,cN._assignPackageExport)("tables",en);Ol=Symbol.for("next-table-id"),uN=[],Mo=new Map;a(_ue,"getTables");a(Dr,"getDatabases");a(m_,"resetDatabases");a(pd,"readMetaDb");a(hk,"ensureDB");a(pk,"setTable");a(Mu,"database");a(vg,"dropDatabase");a(Et,"table");due=1e3,fue=10;a(Eue,"runIndexing");a(hue,"dropTableMeta");a(bb,"onUpdatedTable");a(dh,"getDefaultCompression")});var K=T((Wye,Dk)=>{"use strict";var Uo=require("path"),Rk=require("fs-extra"),Yr=x(),mk=require("fs-extra"),_m=require("os"),pue=require("net"),mue=require("recursive-iterator"),ft=D(),Sue=aS(),Sk=require("papaparse"),dm=require("moment"),{inspect:Tue}=require("util"),Tk=require("is-number"),Kye=require("lodash"),gue=require("minimist"),Rue=require("https"),Aue=require("http"),{hdb_errors:fm}=oe(),Oue=/^((\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)))$/,Ak=require("util").promisify(setTimeout),bue=100,Nue=5,yue="",Iue=4,gk={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Dk.exports={isEmpty:An,isEmptyOrZeroLength:Ks,arrayHasEmptyValues:Due,arrayHasEmptyOrZeroLengthValues:Lue,buildFolderPath:Pue,isBoolean:Ok,errorizeMessage:wue,stripFileExtension:Uue,autoCast:vue,autoCastJSON:bk,autoCastJSONDeep:dN,removeDir:Bue,compareVersions:Hue,isCompatibleDataVersion:Gue,escapeRawValue:que,unescapeValue:xue,stringifyProps:Fue,timeoutPromise:$ue,isClusterOperation:Yue,getClusterUser:Wue,checkGlobalSchemaTable:Kue,getHomeDir:yk,getPropsFilePath:kue,promisifyPapaParse:Que,removeBOM:Ik,createEventPromise:jue,checkProcessRunning:zue,checkSchemaTableExist:Jue,checkSchemaExists:wk,checkTableExists:Ck,getStartOfTomorrowInSeconds:Xue,getLimitKey:Zue,isObject:Mue,isNotEmptyAndHasValue:Cue,autoCasterIsNumberCheck:Nk,backtickASTSchemaItems:e_e,isPortTaken:Vue,createForkArgs:t_e,autoCastBoolean:r_e,async_set_timeout:Ak,getTableHashAttribute:n_e,doesSchemaExist:s_e,doesTableExist:i_e,stringifyObj:o_e,ms_to_time:a_e,changeExtension:c_e,getEnvCliRootPath:fN,noBootFile:l_e,httpRequest:u_e,transformReq:__e,convertToMS:d_e,PACKAGE_ROOT:ft.PACKAGE_ROOT};function wue(e){return e instanceof Error?e:new Error(e)}a(wue,"errorizeMessage");function An(e){return e==null}a(An,"isEmpty");function Cue(e){return!An(e)&&(e||e===0||e===""||Ok(e))}a(Cue,"isNotEmptyAndHasValue");function Ks(e){return An(e)||e.length===0||e.size===0}a(Ks,"isEmptyOrZeroLength");function Due(e){if(An(e))return!0;for(let t=0;t<e.length;t++)if(An(e[t]))return!0;return!1}a(Due,"arrayHasEmptyValues");function Lue(e){if(Ks(e))return!0;for(let t=0;t<e.length;t++)if(Ks(e[t]))return!0;return!1}a(Lue,"arrayHasEmptyOrZeroLengthValues");function Pue(...e){try{return e.join(Uo.sep)}catch{console.error(e)}}a(Pue,"buildFolderPath");function Ok(e){return An(e)?!1:e===!0||e===!1}a(Ok,"isBoolean");function Mue(e){return An(e)?!1:typeof e=="object"}a(Mue,"isObject");function Uue(e){return Ks(e)?yue:e.slice(0,-Iue)}a(Uue,"stripFileExtension");function vue(e){return An(e)||e===""||typeof e!="string"?e:gk[e]!==void 0?gk[e]:Nk(e)===!0?Number(e):Oue.test(e)?new Date(e):e}a(vue,"autoCast");function bk(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(bk,"autoCastJSON");function dN(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let n=e[t],s=dN(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=dN(r);n!==r&&(e[t]=n)}return e}else return bk(e)}a(dN,"autoCastJSONDeep");function Nk(e){if(e.startsWith("0.")&&Tk(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Tk(e))}a(Nk,"autoCasterIsNumberCheck");async function Bue(e){if(Ks(e))throw new Error(`Directory path: ${e} does not exist`);try{await mk.emptyDir(e),await mk.remove(e)}catch(t){throw Yr.error(`Error removing files in ${e} -- ${t}`),t}}a(Bue,"removeDir");function Hue(e,t){if(Ks(e)){Yr.info("Invalid current version sent as parameter.");return}if(Ks(t)){Yr.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let _=0;_<l;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(Hue,"compareVersions");function Gue(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(Gue,"isCompatibleDataVersion");function que(e){if(An(e))return e;let t=String(e);return t==="."?ft.UNICODE_PERIOD:t===".."?ft.UNICODE_PERIOD+ft.UNICODE_PERIOD:t.replace(ft.FORWARD_SLASH_REGEX,ft.UNICODE_FORWARD_SLASH)}a(que,"escapeRawValue");function xue(e){if(An(e))return e;let t=String(e);return t===ft.UNICODE_PERIOD?".":t===ft.UNICODE_PERIOD+ft.UNICODE_PERIOD?"..":String(e).replace(ft.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(xue,"unescapeValue");function Fue(e,t){if(An(e))return Yr.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+_m.EOL}!Ks(n)&&n[0]===";"?r+=" "+n+s+_m.EOL:Ks(n)||(r+=n+"="+s+_m.EOL)}catch{Yr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(Fue,"stringifyProps");function yk(){let e;try{e=_m.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(yk,"getHomeDir");function kue(){let e=Uo.join(yk(),ft.HDB_HOME_DIR_NAME,ft.BOOT_PROPS_FILE_NAME);return Rk.existsSync(e)||(e=Uo.join(__dirname,"../","hdb_boot_properties.file")),e}a(kue,"getPropsFilePath");function $ue(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a($ue,"timeoutPromise");async function Vue(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=pue.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(Vue,"isPortTaken");function Yue(e){try{return ft.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Yr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Yue,"isClusterOperation");function Kue(e,t){let r=(ge(),ie(ke)).getDatabases();if(!r[e])return fm.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return fm.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Kue,"checkGlobalSchemaTable");function Wue(e,t){if(An(t)){Yr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(An(e)||Ks(e)){Yr.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){Yr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Yr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Wue,"getClusterUser");function Que(){Sk.parsePromise=function(e,t,r){return new Promise(function(n,s){Sk.parse(e,{header:!0,transformHeader:Ik,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Que,"promisifyPapaParse");function Ik(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Ik,"removeBOM");function jue(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Yr.info(`Got cluster status event response: ${Tue(s)}`);try{i.cancel()}catch{Yr.error("Error trying to cancel timeout.")}n(s)})})}a(jue,"createEventPromise");async function zue(e){let t=!0,r=0;do await Ak(bue*r++),(await Sue.findPs(e)).length>0&&(t=!1);while(t&&r<Nue);if(t)throw new Error(`process ${e} was not started`)}a(zue,"checkProcessRunning");function Jue(e,t){let r=wk(e);if(r)return r;let n=Ck(e,t);if(n)return n}a(Jue,"checkSchemaTableExist");function wk(e){let{getDatabases:t}=(ge(),ie(ke));if(!t()[e])return fm.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(wk,"checkSchemaExists");function Ck(e,t){let{getDatabases:r}=(ge(),ie(ke));if(!r()[e][t])return fm.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Ck,"checkTableExists");function Xue(){let e=dm().utc().add(1,ft.MOMENT_DAYS_TAG).startOf(ft.MOMENT_DAYS_TAG).unix(),t=dm().utc().unix();return e-t}a(Xue,"getStartOfTomorrowInSeconds");function Zue(){return dm().utc().format("DD-MM-YYYY")}a(Zue,"getLimitKey");function e_e(e){try{let t=new mue(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){Yr.error("Got an error back ticking items."),Yr.error(t)}}a(e_e,"backtickASTSchemaItems");function t_e(e){return[e]}a(t_e,"createForkArgs");function r_e(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(r_e,"autoCastBoolean");function n_e(e,t){let{getDatabases:r}=(ge(),ie(ke)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(n_e,"getTableHashAttribute");function s_e(e){let{getDatabases:t}=(ge(),ie(ke));return t()[e]!==void 0}a(s_e,"doesSchemaExist");function i_e(e,t){let{getDatabases:r}=(ge(),ie(ke));return r()[e]?.[t]!==void 0}a(i_e,"doesTableExist");function o_e(e){try{return JSON.stringify(e)}catch{return e}}a(o_e,"stringifyObj");function a_e(e){let t=dm.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(a_e,"ms_to_time");function c_e(e,t){let r=Uo.basename(e,Uo.extname(e));return Uo.join(Uo.dirname(e),r+t)}a(c_e,"changeExtension");function fN(){if(process.env[ft.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[ft.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=gue(process.argv);if(e[ft.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[ft.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(fN,"getEnvCliRootPath");var _N;function l_e(){if(_N)return _N;let e=fN();fN()&&Rk.pathExistsSync(Uo.join(e,ft.HDB_CONFIG_FILE))&&(_N=!0)}a(l_e,"noBootFile");function u_e(e,t){let r;return e.protocol==="http:"?r=Aue:r=Rue,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",l=>{c.body+=l}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(u_e,"httpRequest");function __e(e){if(!e.schema&&!e.database){e.schema=ft.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(__e,"transformReq");function d_e(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(d_e,"convertToMS")});var X=T((jye,vk)=>{"use strict";var EN=require("fs-extra"),Qa=require("path"),Lk=require("os"),f_e=require("properties-reader"),Td=x(),Sd=K(),_e=D(),Em=ut(),E_e="Error initializing environment manager",hm="BOOT_PROPS_FILE_PATH",Pk=!1,h_e={[_e.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Hi={};vk.exports={BOOT_PROPS_FILE_PATH:hm,getHdbBasePath:p_e,setHdbBasePath:m_e,get:Mk,initSync:T_e,setProperty:ve,initTestEnvironment:R_e,setCloneVar:g_e};function p_e(){return Hi[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(p_e,"getHdbBasePath");function m_e(e){Hi[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(m_e,"setHdbBasePath");function Mk(e){let t=Em.getConfigValue(e);return t===void 0?Hi[e]:t}a(Mk,"get");function ve(e,t){h_e[e]&&(Hi[e]=t),Em.updateConfigObject(e,t)}a(ve,"setProperty");function S_e(){let e;try{e=Sd.getPropsFilePath(),EN.accessSync(e,EN.constants.F_OK|EN.constants.R_OK),Pk=!0;let t=f_e(e);return Hi[_e.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(_e.HDB_SETTINGS_NAMES.INSTALL_USER),Hi[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Hi[hm]=e,!0}catch{return Td.trace(`Environment manager found no properties file at ${e}`),!1}}a(S_e,"doesPropFileExist");function T_e(e=!1){try{(Pk||S_e()||Sd.noBootFile())&&!Uk&&(Em.initConfig(e),Hi[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Em.getConfigValue(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Td.error(E_e),Td.error(t),console.error(t),process.exit(1)}}a(T_e,"initSync");var Uk=!1;function g_e(e){Uk=e}a(g_e,"setCloneVar");function R_e(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=Qa.join(__dirname,"../../","unitTests");Hi[hm]=Qa.join(l,"hdb_boot_properties.file"),ve(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Qa.join(l,"settings.test")),ve(_e.HDB_SETTINGS_NAMES.INSTALL_USER,Lk.userInfo()?Lk.userInfo().username:void 0),ve(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),ve(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Qa.join(l,"envDir","log")),ve(_e.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),ve(_e.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),ve(_e.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),ve(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Qa.join(l,"envDir")),ve(_e.CONFIG_PARAMS.STORAGE_PATH,Qa.join(l,"envDir")),s&&(ve(_e.CONFIG_PARAMS.HTTP_SECUREPORT,Mk(_e.CONFIG_PARAMS.HTTP_PORT)),ve(_e.CONFIG_PARAMS.HTTP_PORT,null)),ve(_e.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),ve(_e.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),ve(_e.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Sd.isEmpty(i)?!1:i),ve(_e.CONFIG_PARAMS.HTTP_CORS,Sd.isEmpty(i)?!1:i),ve(_e.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),ve(_e.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Qa.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),ve(_e.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Sd.isEmpty(c)?!1:c),o&&(ve("CORS_ACCESSLIST",o),ve(_e.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),ve(_e.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),ve(_e.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),ve(_e.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${hm}. Please check your boot props and settings files`;Td.fatal(r),Td.error(t)}}a(R_e,"initTestEnvironment")});var Gk=T((Jye,Hk)=>{"use strict";var mm=X();mm.initSync();var pm=D(),{httpRequest:A_e}=K(),O_e=require("path"),Bk=require("fs-extra"),b_e=require("yaml"),N_e={describe_table:!0,describe_all:!0,describe_database:!0,list_users:!0,list_roles:!0,drop_role:!0,add_user:!0,alter_user:!0,drop_user:!0,restart_service:!0,restart:!0,create_database:!0,drop_database:!0,create_table:!0,drop_table:!0,create_attribute:!0,drop_attribute:!0,search_by_id:!0,delete:!0,search_by_value:!0,csv_file_load:!0,csv_url_load:!0,cluster_get_routes:!0,cluster_network:!0,cluster_status:!0,remove_node:!0,add_component:!0,deploy_component:!0,package_component:!0,drop_component:!0,get_components:!0,get_component_file:!0,set_component_file:!0,registration_info:!0,get_fingerprint:!0,set_license:!0,get_job:!0,search_jobs_by_start_date:!0,read_log:!0,read_transaction_log:!0,read_audit_log:!0,delete_transaction_logs_before:!0,purge_stream:!0,delete_records_before:!0,install_node_modules:!0,set_configuration:!0,get_configuration:!0,create_authentication_tokens:!0,refresh_operation_token:!0,system_information:!0,sql:!0};Hk.exports={cliOperations:I_e,buildRequest:y_e};function y_e(){let e={};for(let t of process.argv){if(N_e[t]){e.operation=t;continue}if(t.includes("=")){let[r,...n]=t.split("=");n=n.join("=");try{n=JSON.parse(n)}catch{}e[r]=n}}return e}a(y_e,"buildRequest");async function I_e(e){await Bk.exists(O_e.join(mm.get(pm.CONFIG_PARAMS.ROOTPATH),pm.HDB_PID_FILE))||(console.error("HarperDB must be running to perform this operation"),process.exit()),await Bk.exists(mm.get(pm.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))||(console.error("No domain socket found, unable to perform this operation"),process.exit());try{let t=await A_e({method:"POST",protocol:"http:",socketPath:mm.get(pm.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),headers:{"Content-Type":"application/json"}},e);t=JSON.parse(t.body),e.json?console.log(JSON.stringify(t,null,2)):console.log(b_e.stringify(t).trim())}catch(t){let r="Error: ";t?.response?.data?.error?r+=t.response.data.error:t?.response?.data?r+=t?.response?.data:r+=t.message,console.error(r)}}a(I_e,"cliOperations")});var Fk=T((Zye,xk)=>{"use strict";var qk=require("semver/functions/major"),w_e=ha(),hN=process.versions&&process.versions.node?process.versions.node:void 0;xk.exports=C_e;function C_e(){let e=w_e.engines["minimum-node"];if(hN&&qk(hN)<qk(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${hN}. Please install a version of Node.js that is withing the defined range.`}}a(C_e,"checkNodeVersion")});var mN=T((tIe,kk)=>{"use strict";var gd=X();gd.initSync();var yl=require("fs-extra"),pN=require("path"),Il=D(),D_e=require("crypto"),L_e=require("uuid").v4;kk.exports=P_e;function P_e(){if(gd.getHdbBasePath()!==void 0){let e=pN.join(gd.getHdbBasePath(),Il.LICENSE_KEY_DIR_NAME,Il.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=pN.join(gd.getHdbBasePath(),Il.LICENSE_KEY_DIR_NAME,Il.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=pN.join(gd.getHdbBasePath(),Il.LICENSE_KEY_DIR_NAME,Il.JWT_ENUM.JWT_PASSPHRASE_NAME);try{yl.accessSync(r),yl.accessSync(e),yl.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=L_e(),i=D_e.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});yl.writeFileSync(r,s),yl.writeFileSync(e,i.privateKey),yl.writeFileSync(t,i.publicKey)}else throw n}}}a(P_e,"checkJWTTokenExist")});var Vk=T((nIe,$k)=>{"use strict";var SN=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};$k.exports={HdbInfoInsertObject:SN}});var Wk=T((iIe,Kk)=>{"use strict";var Yk=D(),TN=class{static{a(this,"UpgradeObject")}constructor(t,r){this[Yk.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[Yk.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};Kk.exports={UpgradeObject:TN}});var Sm=T((aIe,jk)=>{"use strict";var Qn=require("prompt"),wl=require("chalk"),Qk=x(),Ts=require("os"),gN=Ji(),RN=["yes","y"];async function M_e(e){let t=`${Ts.EOL}`+wl.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Ts.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ts.EOL}${Ts.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Ts.EOL}`;Qn.override=gN(["CONFIRM_UPGRADE"]),Qn.start(),Qn.message=t;let r={properties:{CONFIRM_UPGRADE:{description:wl.magenta(`${Ts.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Qn.get([r])}catch(s){return Qk.error("There was an error when prompting user about an upgrade."),Qk.error(s),!1}return RN.includes(n.CONFIRM_UPGRADE)}a(M_e,"forceUpdatePrompt");async function U_e(e){let t=`${Ts.EOL}`+wl.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ts.EOL}`);Qn.override=gN(["CONFIRM_DOWNGRADE"]),Qn.start(),Qn.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:wl.magenta(`${Ts.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Qn.get([r]);return RN.includes(n.CONFIRM_DOWNGRADE)}a(U_e,"forceDowngradePrompt");async function v_e(){let e=`${Ts.EOL}`+wl.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Qn.override=gN(["GENERATE_CERTS"]),Qn.start(),Qn.message=e;let t={properties:{GENERATE_CERTS:{description:wl.magenta(`${Ts.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Qn.get([t]);return RN.includes(r.GENERATE_CERTS)}a(v_e,"upgradeCertsPrompt");jk.exports={forceUpdatePrompt:M_e,forceDowngradePrompt:U_e,upgradeCertsPrompt:v_e}});var ON=T((lIe,zk)=>{"use strict";var AN=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};zk.exports=AN});var Xk=T((hIe,Jk)=>{"use strict";var B_e=K(),H_e=ut(),_Ie=x(),dIe=require("path"),fIe=require("fs"),EIe=D();Jk.exports={getOldPropsValue:G_e};function G_e(e,t,r=!1){let n=t.getRaw(e);return B_e.isNotEmptyAndHasValue(n)?n:r?H_e.getDefaultConfig(e):""}a(G_e,"getOldPropsValue")});var r$=T((mIe,t$)=>{"use strict";var vo=require("path"),Bo=require("fs-extra"),q_e=require("properties-reader"),x_e=ON(),Ct=x(),{getOldPropsValue:We}=Xk(),{HDB_SETTINGS_NAMES:se,CONFIG_PARAMS:ja}=D(),za=ut(),Tm=X(),Zk=K(),Ws=D(),bN=new x_e("3.1.0"),e$=[];function F_e(){let e=q_e(Tm.get(se.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Ct.info(t);let r=` ;Settings for the HarperDB process.
32
+ `))}},25).unref()}o.close?.(()=>{if(Le.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Tp()==0)try{mx(Le.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,mp),o.cantCleanupProperly||hr.warn("Had to forcefully exit the thread",mp),process.exit(0)},5e3).unref()})}if(yx||process.env.DEV_MODE)try{require("inspector").close()}catch(i){hr.info("Could not close debugger",i)}}}).ref();let e=[];if(Sx&&!Ece)for(let t in Ys){let r=Ys[t];if(isNaN(t)&&Tp()==0){ice(t)&&mx(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),hr.info("Domain socket listening on "+t)}).on("error",i)}));continue}let n;try{n=Sx(+t,"::")}catch(s){console.error(`Unable to bind to port ${t}`,s);continue}e.push(new Promise((s,i)=>{r.listen({fd:n},()=>{s(),hr.trace("Listening on port "+t,mp)}).on("error",i)}))}Promise.all(e).then(()=>{J_?.postMessage({type:Tt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(Ix,"startServers");Ax||Ix();function ub(e,t,r){let n=e?.read?e:new ece({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Ys[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Ys[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(hr.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(ub,"deliverSocket");var gx=new Map;function mce(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=gx.get(s),r){case"connection":i=ub(void 0,t),gx.set(s,i),i.write=(c,l,_)=>(J_.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,l,_)=>(J_.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),J_.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(mce,"proxyRequest");function _b(e,t,r=!0){!+t&&t!==Le.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(Le.get(Tt.CONFIG_PARAMS.HTTP_PORT),10));let n=Ys[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",Rx),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Ys[t]=e;e.on("unhandled",Rx)}a(_b,"registerServer");function wx(e){let t=[],r=parseInt(e?.securePort);return r&&t.push({port:r,secure:!0}),r=parseInt(e?.port),r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],Le.get(Tt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Le.get(Tt.CONFIG_PARAMS.HTTP_PORT),secure:Le.get(Tt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Le.get(Tt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Le.get(Tt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Le.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:Le.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(wx,"getPorts");function db(e,t){for(let{port:r,secure:n}of wx(t))Cx(r,n,t?.isOperationsServer),typeof e=="function"?cb[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,_b(e,r,!1)),gp[r]=lb(cb,r),hce=lb(pce,r)}a(db,"httpServer");function Cx(e,t,r){if(!wo[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:Le.get(n+"_keepAliveTimeout"),headersTimeout:Le.get(n+"_headersTimeout"),requestTimeout:Le.get(n+"_timeout")},i=Le.get(n+"_mtls"),o=Le.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let l=Le.get(n+"tls_privateKey"),_=Le.get(n+"tls_certificate"),u=Le.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:cl(l),ciphers:Le.get("tls_ciphers"),cert:cl(_),ca:u&&cl(u),rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:cce(),maxHeaderSize:Le.get(Tt.CONFIG_PARAMS.HTTP_MAXHEADERSIZE)})}let c=dce();wo[e]=(t?sce:rce)(s,async(l,_)=>{try{let d=performance.now(),f=new bx(l,_);r&&(f.isOperationsServer=!0);let E=await gp[e](f);if(!E){if(f._nodeResponse.statusCode)return;E=Dx(f)}if(c?E.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):E.headers?.set?.("Server","HarperDB"),E.status===-1){for(let U of E.headers||[])_.setHeader(U[0],U[1]);return l.baseRequest=f,_.baseResponse=E,wo[e].emit("unhandled",l,_)}let h=E.status||200,m=performance.now(),S=m-d,R=E.body,T;if(!E.handlesHeaders){let U=E.headers||new Ox;R?R.length>=0&&(typeof R=="string"?U.set("Content-Length",Buffer.byteLength(R)):U.set("Content-Length",R.length),T=!0):(U.set("Content-Length","0"),T=!0);let v=`hdb;dur=${S.toFixed(2)}`;E.wasCacheMiss&&(v+=", miss"),uce(U,"Server-Timing",v,!0),_.writeHead(h,U&&(U[Symbol.iterator]?Array.from(U):U)),T&&_.end(R)}let A=f.handlerPath,L=f.method;if(z_(S,"duration",A,L,E.wasCacheMiss==null?void 0:E.wasCacheMiss?"cache-miss":"cache-hit"),_ce(h<400,"success",A,L),!T)if(R?.pipe){R.pipe(_),R.destroy&&_.on("close",()=>{R.destroy()});let U=0;R.on("data",v=>{U+=v.length}),R.on("end",()=>{z_(performance.now()-m,"transfer",A,L),z_(U,"bytes-sent",A,L)})}else R?.then?R.then(U=>{_.end(U)},u):_.end(R)}catch(d){u(d)}function u(d){let f=d.headers;_.writeHead(d.statusCode||500,f&&(f[Symbol.iterator]?Array.from(f):f)),_.end(d.toString()),d.statusCode?d.statusCode===500?hr.warn(d):hr.info(d):hr.error(d)}a(u,"onError")}),i&&(wo[e].mtlsConfig=i),t&&(wo[e].on("secureConnection",l=>{l._parent.startTime&&z_(performance.now()-l._parent.startTime,"tls-handshake",e),z_(l.isSessionReused(),"tls-reused",e)}),wo[e].isSecure=!0),_b(wo[e],e)}return wo[e]}a(Cx,"getHTTPServer");function lb(e,t){let r=Dx;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a(c=>s(c,o),"next_callback")}}return r}a(lb,"makeCallbackChain");function Dx(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Ox}}a(Dx,"unhandled");function Sce(e,t){db(e,{requestOnly:!0,...t})}a(Sce,"onRequest");function Tce(e,t){let r;if(t.securePort){let n=Le.get("tls_privateKey"),s=Le.get("tls_certificate"),i=t.mtls?.certificateAuthority||Le.get("tls_certificateAuthority");r=ace({ciphers:Le.get("tls_ciphers"),key:cl(n),cert:cl(s),ca:i&&cl(i),rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls},e),Ys[t.securePort]=r}return t.port&&(r=tce(e),Ys[t.port]=r),r}a(Tce,"onSocket");Object.defineProperty(nce.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.startsWith("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function gce(e,t){let r;for(let{port:n,secure:s}of wx(t)){Sp[n]||(Sp[n]=new oce({server:r=Cx(n,s)}),Sp[n].on("connection",async(c,l)=>{try{let _=new bx(l);_.isWebSocket=!0;let u=gp[n](_),d=l.headers["sec-websocket-protocol"]||"",f=ab[n];if(d){let E;for(let h=0;h<f.length;h++){let m=f[h];m.protocol===d&&(E=!0,m.listener(c,_,u))}if(E)return}for(let E=0;E<f.length;E++){let h=f[E];h.protocol||h.listener(c,_,u)}}catch(_){hr.warn("Error handling WebSocket connection",_)}}),Sp[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=ab[n];o||(o=ab[n]=[]),o.push({listener:e,protocol:i}),gp[n]=lb(cb,n)}return r}a(gce,"onWebSocket");function Rx(e,t){t.writeHead(404),t.end(`Not found
33
+ `)}a(Rx,"defaultNotFound")});var Gx={};Fe(Gx,{startHTTPThreads:()=>Ace,startSocketServer:()=>mb,updateWorkerIdleness:()=>Hx});async function Ace(e=2,t){if(t)hb(0,1,!0);else{let{loadRootComponents:n}=Ap();if(e===0)return(0,Co.setMainIsWorker)(!0),await fb().startServers(),Promise.resolve([]);await n()}let r=(0,Ux.checkMemoryLimit)();r&&!process.env.DEV_MODE&&(console.error(r),setInterval(()=>{yp.notify(r)},Rce).unref());for(let n=0;n<e;n++)hb(n,e);return Promise.all(Bx)}function hb(e,t=1,r){if(Eb++,(0,Co.startWorker)("server/threads/threadServer.js",{name:Np.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(_){_.type===Np.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});Bx.push(s),await s,ll.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=bp.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=ll.indexOf(n);o>-1&&ll.splice(o,1)}if(a(i,"removeWorker"),ul){let o=ul;ul=[];for(let c of o)vx[c.localPort](null,c)}}}),r){let n=setInterval(()=>{pb?pb=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Co.shutdownWorkers)(),Eb=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function mb(e=0,t){if(typeof e=="string")try{(0,Ip.existsSync)(e)&&(0,Ip.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Oce:r=bce(t):r=Sb;let n=(0,_l.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=vx[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),pb=!0,r(o,(c,l)=>{if(!c){if(Lx){let u=o._socket||new _l.Socket({handle:o,writable:!0,readable:!0});Lx.deliverSocket(u,e,l),u.resume()}else Eb>0?(ul.length===0&&setTimeout(()=>{ul.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(),o.localPort=e,ul.push(o)):(console.log("start up a dynamic thread to handle request"),hb(0));un(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:l});else{let u=o._socket||new _l.Socket({handle:o,writable:!0,readable:!0});Ice(u,c,e)}un(!0,"socket-routed")})};let s=Ea();yp.info(`HarperDB ${s.version} Server running on port ${e}`)}return n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function Sb(e,t){let r,n=0;for(let s of ll){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Op)return Op=i,t(r);n=i}Op=0,t(r)}function Oce(e,t){let r={};e.getpeername(r);let n=r.address,s=dl.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);Sb(e,o=>{dl.set(n,{worker:o,lastUsed:i}),t(o)})}function bce(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new _l.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],_=dl.get(l),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,s(_.worker);Sb(n,d=>{dl.set(l,{worker:d,lastUsed:u}),s(d,o)})})}a(r,"findByHeaderAffinity")}function Hx(){Op=0;for(let e of ll)e.expectedIdle=e.recentELU.idle+Nce,e.requests=1;ll.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Ice(e,t,r){let n=yce++;t.postMessage({port:r,requestId:n,event:"connection"}),e.on("data",s=>{let i=s.toString("latin1");t.postMessage({port:r,requestId:n,data:i,event:"data"})}).on("close",s=>{t.postMessage({port:r,requestId:n,event:"close",hadError:s})}).on("error",s=>{t.postMessage({port:r,requestId:n,event:"error",error:s})}).on("drain",s=>{t.postMessage({port:r,requestId:n,event:"drain",error:s})}).on("end",()=>{t.postMessage({port:r,requestId:n,event:"end"})}).resume(),bp.set(n,s=>{s.event=="data"&&e.write(Buffer.from(s.data,"latin1")),s.event=="end"&&(e.end(s.data&&Buffer.from(s.data,"latin1")),bp.delete(n)),s.event=="destroy"&&(e.destroy(),bp.delete(n))})}var Co,_l,Np,yp,Ip,Mx,Ux,ll,ul,vx,Lx,Eb,Bx,Rce,pb,Op,Px,dl,Nce,bp,yce,Tb=be(()=>{Co=B(et()),_l=require("net"),Np=B(D()),yp=B(x()),Ip=require("fs");pi();Mx=require("worker_threads"),Ux=B(oa()),ll=[],ul=[],vx=[],Eb=0,Bx=[];Mx.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});Rce=6e5;a(Ace,"startHTTPThreads");a(hb,"startHTTPWorker");a(mb,"startSocketServer");Op=0;a(Sb,"findMostIdleWorker");Px=36e5,dl=new Map;a(Oce,"findByRemoteAddressAffinity");a(bce,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of dl)r.lastUsed+Px<e&&dl.delete(t)},Px).unref();Nce=1e3;a(Hx,"updateWorkerIdleness");(0,Co.setMonitorListener)(Hx);bp=new Map,yce=1;a(Ice,"proxySocket")});var kx=g((ANe,Fx)=>{"use strict";var wce=require("cluster"),Fa=X();Fa.initSync();var xx=D(),mNe=require("util"),Ui=x(),SNe=require("fs"),Cce=require("fastify"),TNe=Ea(),Dce=require("@fastify/cors"),Lce=require("@fastify/compress"),Pce=require("@fastify/static"),Mce=RO(),Uce=require("path"),{PACKAGE_ROOT:vce}=D(),Bce=Un(),Hce=K(),Gce=Cr(),qce=oa(),{server:xce}=(br(),ie(Ko)),{node_request_key:gNe}=(pp(),ie(ob)),{authHandler:Fce,handlePostRequest:kce,serverErrorHandler:$ce,reqBodyValidationHandler:Vce}=Ep(),RNe=require("net"),{registerContentHandlers:Yce}=(Kc(),ie(cG)),Kce=6e4,Wce=1024*1024*1024,Qce="TRUE",{CONFIG_PARAMS:X_}=xx,fl;Fx.exports={hdbServer:qx,start:qx};async function qx(e){try{Ui.info("In Fastify server"+process.cwd()),Ui.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ui.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=wce.isMaster,await jce();let t=e.securePort>0;fl=zce(t),await fl.ready(),e||(e={}),e.isOperationsServer=!0;try{xce.http(fl.server,e),fl.server.closeIdleConnections||await fl.listen({port:0,host:"::"})}catch(r){throw fl.close(),Ui.error(r),Ui.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Ui.fatal(t),process.exit(1)}}a(qx,"operationsServer");async function jce(){Ui.trace("Configuring HarperDB process."),Bce.setSchemaDataToGlobal(),await Gce.setUsersToGlobal(),await qce.getLicense()}a(jce,"setUp");function zce(e){Ui.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Jce(e),r=Cce(t);r.server.headersTimeout=Zce(),r.setErrorHandler($ce);let n=Xce();n&&r.register(Dce,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,_){r.server.emit("unhandled",l.raw,_.raw)}),c()}),r.register(Mce),r.register(Lce),r.register(Pce,{root:Uce.join(vce,"studio/build-local")}),Yce(r);let s=Fa.get(xx.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Hce.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Vce,Fce],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),kce(i,o)}),r.get("/health",()=>"HarperDB is running."),Ui.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(zce,"buildServer");function Jce(e){let t=Fa.get(X_.OPERATIONSAPI_NETWORK_TIMEOUT),r=Fa.get(X_.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Wce,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Jce,"getServerOptions");function Xce(){let e=Fa.get(X_.OPERATIONSAPI_NETWORK_CORS),t=Fa.get(X_.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Qce)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(Xce,"getCORSOpts");function Zce(){return Fa.get(X_.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Kce}a(Zce,"getHeaderTimeoutConfig")});var Nb={};Fe(Nb,{disableNATS:()=>tle,publishToStream:()=>Dp,setNATSReplicator:()=>gb,setPublishToStream:()=>rle,setSubscription:()=>bb,start:()=>ele});function ele(){Z_.default.get(ed.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&sle()}function tle(e=!0){Wx=e}function rle(e,t){Dp=e,bb=t}function sle(){if(Wx||process.env._DISABLE_NATS)return;let e=Lr(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];gb(s,r,i)}}yb((r,n)=>{gb(r.tableName,r.databaseName,r),n&&jx(r)}),!$x&&($x=!0)}function gb(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends Jt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Ue],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Ue]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Ue],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Ue],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Ue]})}static defineSchema(i){jx(i)}static subscribe(){let i=new Zn;return bb(t,e,i),i}static subscribeOnThisThread(i){return i<(Z_.default.get(ed.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??nle)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new wp(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=Qx;return i}a(n,"getNATSTransaction")}function jx(e){let t=Z_.default.get(ed.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Dp(`${Ab.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,Ob.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 Vx,Ab,Ob,Yx,Kx,Z_,ed,Cp,Wx,Dp,bb,nle,Qx,$x,wp,Rb,zx=be(()=>{Re();es();Vx=B(pt()),Ab=B(Xe()),Ob=B(ui());zl();Yx=B(eR()),Kx=B(Or()),Z_=B(X()),ed=B(D()),Cp=B(x());a(ele,"start");a(tle,"disableNATS");Dp=Vx.publishToStream,bb=Yx.setSubscription;a(rle,"setPublishToStream");nle=2;a(sle,"assignReplicationSource");a(gb,"setNATSReplicator");a(jx,"publishSchema");wp=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=Z_.default.get(ed.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,_;for(let u of i){let d=u.table,f=u.operation=="put"?"upsert":u.operation;l||(Cp.trace(`Sending transaction event ${f}`),_=l={operation:f,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,f!=="delete"&&f!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===f?(o.push(u.record),c.push(u.id)):_=_.next={operation:f,table:d,id:u.id,record:u.record},u.expiresAt&&(_.expiresAt=u.expiresAt)}l&&n.push(Dp(`${Ab.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,Ob.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(u=>{throw Cp.error("An error has occurred trying to replicate transaction",l,u),u.statusCode=504,u}))}return Promise.all(n)}},Rb=class extends wp{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,Kx.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};Qx=new Rb});async function eF({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await Ib.get(e,{returnNonexistent:!0});s=new Db(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await Ib.get(e);i&&i.delete()}s=new Pp(e,t)}return n&&(n.id=e,n.user={username:t?.username},td.put(n)),s}function wb(){return Lp++,Lp>65500&&(Lp=1),Lp}function Cb(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=Ro.getMatch(n);if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return Ze(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var Jx,Do,Xx,Zx,Ib,td,Lp,Pp,Db,tF=be(()=>{Re();O_();Jx=B(Or()),Do=B(x());da();Xx=B(et()),Zx=B(fb());br();Ib=Et({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"}]}}]}),td=Et({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,Xx.getWorkerIndex)()===0&&(async()=>{await Zx.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of td.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await ct.getUser(r.user.username)),Ze(r,()=>{try{Cb(r,t,r)}catch{(0,Do.warn)("Failed to publish will",t)}td.delete(e.id,r)})}})();a(eF,"getSession");Lp=1;a(wb,"getNextMessageId");Pp=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,_;if(c>-1?(l=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let u=this.subscriptions.find(R=>R.topic===s),d;u?(d=i>0,u.end(),this.subscriptions.splice(this.subscriptions.indexOf(u),1)):d=i===2;let f={search:l,async:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Do.trace)("Resuming subscription from",s,"from",o);let E=Ro.getMatch(_);if(!E){let R=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw R.statusCode=404,R}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let R=f.url.slice(1);if(R.indexOf("#")>-1&&R.indexOf("#")!==R.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,R.indexOf("+")===R.length-1)f.onlyChildren=!0,f.url="/"+R.slice(0,R.length-1);else{let T=R.split("/"),A;for(let v=0;v<T.length;v++)if(T[v].indexOf("+")>-1)if(T[v]==="+")A=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&A)throw new Error("Filters can not be combined");let L=!0;T[T.length-1]==="#"&&(T.length--,L=!1),A&&(n=a(v=>{let k=v.id;if(!Array.isArray(k)||L&&k.length!==T.length)return!1;for(let H=0;H<T.length;H++)if(T[H]!=="+"&&T[H]!==k[H])return!1;return!0},"filter"));let U=T.indexOf("+");f.url="/"+(U>-1?T.slice(0,U):T).concat("").join("/")}}let h=E.path,m=E.Resource,S=await Ze(f,async()=>{let R=this.createContext();R.topic=s,R.retainHandling=i;let T=await m.subscribe(f,R);if(!T)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!T[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let A of T)try{let L;if(A.type&&A.type!=="put"&&A.type!=="delete"&&A.type!=="message"&&A.type!=="patch"||n&&!n(A))continue;r?(A.topic=s,L=this.needsAcknowledge(A)):(A.acknowledge?.(),L=wb());let U=A.id;Array.isArray(U)&&(U=Vc(U)),U==null&&(U=""),this.listener(h+"/"+U,A.value,L,t)}catch(L){(0,Do.warn)(L)}})(),T});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=wb();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return Cb(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){let r=this.createContext();Ze(r,async()=>{if(!t){let n=await td.get(this.sessionId);n?.doesExist()&&await Cb(n,n.data,r)}await td.delete(this.sessionId)}).catch(n=>{(0,Do.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(Cb,"publish");Db=class extends Pp{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{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,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=wb(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Do.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,Jx.getNextMonotonicTime)()),(0,Do.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),Ib.put(this.sessionRecord)}}});var Pb={};Fe(Pb,{bypassAuth:()=>ile,start:()=>ole});function ile(){oF=!0}function ole({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){let o=e.mqtt=e.mqtt||{requireAuthentication:i,sessions:new Set,events:new iF.EventEmitter},c,l=r?.mtls;return n&&(c=e.ws((_,u,d)=>{if(_.protocol==="mqtt"){o.events.emit("connection",_),pr.debug("Received WebSocket connection for MQTT from",_._socket.remoteAddress);let{onMessage:f,onClose:E}=nF(_,(h,m)=>{if(_.send(h),m&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},u,Promise.resolve(d).then(()=>u?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{pr.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let u;if(o.events.emit("connection",_),pr.debug(`Received ${_.getCertificate?"SSL":"TCP"} connection for MQTT from ${_.remoteAddress}`),l){if(_.authorized)try{let E=l.user;if(E!==null){(E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN);try{u=await e.getUser(E,null,null),(0,El.get)(sr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&Up.notify({username:u?.username,status:sr.AUTH_AUDIT_STATUS.SUCCESS,type:sr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})}catch(h){throw(0,El.get)(sr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&Up.error({username:E,status:sr.AUTH_AUDIT_STATUS.FAILURE,type:sr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:_.remoteAddress}),h}}else pr.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(E){pr.error(E)}else if(l.required)return pr.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!u&&oF&&_.remoteAddress.includes("127.0.0.1")&&(u=await(0,sF.getSuperUser)(),pr.debug("Auto-authorizing local connection",u?.username));let{onMessage:d,onClose:f}=nF(_,E=>_.write(E),null,u,o);_.on("data",d),_.on("close",f),_.on("error",E=>{pr.info("Socket error",E)})},{port:t,securePort:s,mtls:l})),c}function nF(e,t,r,n,s){rF||(rF=!0,xu(d=>{Mp>0&&d.push({metric:"mqtt-connections",connections:Mp,byThread:!0})}));let i;Mp++;let o,c={protocolVersion:4},l=(0,vp.parser)({protocolVersion:5});function _(d){l.parse(d)}a(_,"onMessage");function u(){Mp--,i||(i=!0,o?.disconnect(),s.events.emit("disconnected",o,e),s.sessions.delete(o),_n(!1,"connection","mqtt","disconnect"),pr.debug("MQTT connection was closed",e.remoteAddress))}return a(u,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await ct.getUser(d.username,d.password.toString(),r),(0,El.get)(sr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&Up.notify({username:n?.username,status:sr.AUTH_AUDIT_STATUS.SUCCESS,type:sr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(A){return(0,El.get)(sr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&Up.error({username:d.username,status:sr.AUTH_AUDIT_STATUS.FAILURE,type:sr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",d,e,A),_n(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",d,e),_n(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let A=e.deserialize||(e.deserialize=Ua(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?A(d.will.payload):void 0,delete d.will.payload}o=eF({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(A){return pr.error(A),s.events.emit("auth-failed",d,e,A),_n(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:A.code||5,returnCode:A.code||128})}s.events.emit("connected",o,e),_n(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((A,L,U,v)=>{try{let k=A.indexOf("/",1),H=k>0?A.slice(0,k):A;f({cmd:"publish",topic:A,payload:E(L),messageId:U||Math.floor(Math.random()*1e8),qos:v.qos},H)}catch(k){pr.error(k),o?.disconnect(),s.sessions.delete(o)}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let A of d.subscriptions){let L;try{L=(await o.addSubscription(A,A.qos>=1)).qos||0}catch(U){pr.error(U),L=c.protocolVersion<5?128:U.statusCode===403?135:U.statusCode===404?143:128}h.push(L)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let A=[];for(let L of d.unsubscriptions)A.push(o.removeSubscription(L)?0:17);f({cmd:"unsuback",granted:A,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let m=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=Ua(r?.headers.get?.("content-type"))),R=d.payload?.length>0?S(d.payload):void 0,T;try{T=await o.publish(d,R)}catch(A){pr.warn(A),d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:T===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),_n(!0,"connection","mqtt","disconnect"),pr.debug("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(h){pr.error(h),f({cmd:"disconnect"})}function f(h,m){let S=(0,vp.generate)(h,c);t(S),un(S.length,"bytes-sent",m,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Da(h,r)}a(E,"serialize")}),{onMessage:_,onClose:u}}var vp,sF,El,sr,Lb,iF,Up,pr,oF,rF,Mp,aF=be(()=>{vp=require("mqtt-packet");tF();sF=B(Cr());Kc();pi();br();El=B(X()),sr=B(D()),Lb=B(x()),iF=require("events"),Up=(0,Lb.loggerWithTag)("auth-event"),pr=(0,Lb.loggerWithTag)("mqtt"),oF=(0,El.get)(sr.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(ile,"bypassAuth");a(ole,"start");Mp=0;a(nF,"onSocket")});var wh={};Fe(wh,{component_errors:()=>pl,loadComponent:()=>Bp,loadComponentDirectories:()=>pF,setErrorReporter:()=>ule});function pF(e,t){t&&(Ub=t),e&&(vb=e);let r=[];if((0,ps.existsSync)(Mb)){let s=(0,ps.readdirSync)(Mb,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Ct.join)(Mb,o);r.push(Bp(c,Ub,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Bp(n,Ub,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{hF=!0})}function ule(e){nd=e}async function Bp(e,t,r,n,s,i){if(!lF.has(e)){lF.set(e,!0),s&&(vb=s);try{let o;n&&(pl=new Map);let c=(0,Ct.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,ps.existsSync)(c)?o=n?(0,EF.getConfigObj)():(0,uF.parseDocument)((0,ps.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=Bb;let l=[],_=n;for(let u in o){let d=o[u];if(pl.set(n?u:(0,Ct.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let T=e,A;for(;!(0,ps.existsSync)(A=(0,Ct.join)(T,"node_modules",u));)if(T=(0,Ct.dirname)(T),T.length<(0,fF.getHdbBasePath)().length){A=null;break}if(A)f=await Bp(A,t,r,!1),_=!0;else throw new Error(`Unable to find package ${u}:${E}`)}else f=lle[u];if(!f)continue;l.push(f);let h=a(T=>(T.origin=r,Et(T)),"ensureTable"),m=d.network||(d.port||d.securePort)&&d,S=m?.securePort||m?.https&&m.port,R=!m?.https&&m?.port;if(hl.isMainThread&&(f=await f.startOnMainThread?.({server:ct,ensureTable:h,port:R,securePort:S,resources:t,...d})||f,n&&m))for(let T of[R,S])try{if(+T&&!cF.includes(T)){let A=Hb.get(Gb.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);A&&rd.default.warn("Session affinity is not recommended and may cause memory leaks"),(A||!hp)&&(cF.push(T),mb(T,A))}}catch(A){console.error("Error listening on socket",T,A,u)}if(t.isWorker&&(f=await f.start?.({server:ct,ensureTable:h,port:R,securePort:S,resources:t,...d})||f),vb.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,dF.handleHDBError)("Can not reference parent directories");let T=(0,Ct.join)(e,d.files).replace(/\\/g,"/"),A=T.indexOf("/*");if(A>-1&&d.files!==Bb[u]?.files&&!(0,ps.existsSync)(T.slice(0,A)))throw new Error(`The path '${T.slice(0,A)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let L=(0,Ct.basename)(e),U=d.path||"/";U=U.startsWith("/")?U:U.startsWith("./")?"/"+L+U.slice(2):U==="."?"/"+L:"/"+L+"/"+U;let v,k,H;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",k=(0,Ct.join)(e,z)}else(H=T.indexOf("/*"))>-1&&(k=T.slice(0,H+1),v=(0,Ct.relative)(e,k));let j=!1;if(hl.isMainThread&&f.setupDirectory&&(j=await f.setupDirectory?.(U,k,t)),t.isWorker&&f.handleDirectory&&(j=await f.handleDirectory?.(U,k,t)),j)continue;for(let z of await(0,_F.default)(T,{onlyFiles:!1,objectMode:!0})){let{path:J,dirent:Se}=z;_=!0;let ue=(0,Ct.relative)(e,J).replace(/\\/g,"/");if(v)if(ue.startsWith(v))ue=ue.slice(v.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${ue}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Ee=U+(U.endsWith("/")?"":"/")+ue;try{if(Se.isFile()){let Me=await cle(J);hl.isMainThread&&await f.setupFile?.(Me,Ee,J,t),t.isWorker&&await f.handleFile?.(Me,Ee,J,t)}else hl.isMainThread&&await f.setupDirectory?.(Ee,J,t),t.isWorker&&await f.handleDirectory?.(Ee,J,t)}catch(Me){Me.message=`Could not load ${Se.isFile()?"file":"directory"} '${J}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${Me.message}`,nd?.(Me),((0,ml.getWorkerIndex)()===0?console:rd.default).error(Me),t.set(d.path||"/",new sd(Me)),pl.set(n?u:(0,Ct.basename)(e),Me.message)}}}}catch(h){h.message=`Could not load component '${u}' for application '${(0,Ct.basename)(e)}' due to: ${h.message}`,nd?.(h),((0,ml.getWorkerIndex)()===0?console:rd.default).error(h),t.set(d.path||"/",new sd(h),null,!0),pl.set(n?u:(0,Ct.basename)(e),h.message)}}if(hl.isMainThread&&!hF&&i&&(0,ml.watchDir)(e,async()=>pF()),o.extensionModule)return await tf((0,Ct.join)(e,o.extensionModule));if(!_&&t.isWorker){let u=`${e} did not load any modules, resources, or files, is this a valid component?`;nd?.(new Error(u)),((0,ml.getWorkerIndex)()===0?console:rd.default).error(u),pl.set((0,Ct.basename)(e),u)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,nd?.(o),t.set("",new sd(o))}}}var ps,Ct,hl,uF,Hb,Gb,_F,ml,rd,dF,fF,ale,EF,cle,Mb,vb,hF,Ub,pl,lle,Bb,cF,lF,nd,sd,Ch=be(()=>{ps=require("fs"),Ct=require("path"),hl=require("worker_threads"),uF=require("yaml"),Hb=B(X()),Gb=B(D());SI();AI();OI();AG();lx();hx();_F=B(require("fast-glob")),ml=B(et()),rd=B(x());pS();br();dF=B(oe());es();Re();Tb();fF=B(X()),ale=B(kx());gh();zx();aF();EF=B(ut());pp();({readFile:cle}=ps.promises),Mb=Hb.get(Gb.CONFIG_PARAMS.COMPONENTSROOT),vb=new Map,pl=new Map;a(pF,"loadComponentDirectories");lle={REST:Kh,rest:Kh,graphqlSchema:hS,jsResource:SS,fastifyRoutes:tb,login:gS,static:rb,operationsApi:ale,customFunctions:{},http:{},clustering:Nb,authentication:N_,mqtt:Pb},Bb={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(Bb,"static",{value:{files:"web/**"}});cF=[],lF=new Map;a(ule,"setErrorReporter");a(Bp,"loadComponent");sd=class extends Jt{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 Ap=g((XNe,SF)=>{var{isMainThread:mF}=require("worker_threads"),{getTables:_le}=(Re(),ie(ke)),{loadComponentDirectories:dle,loadComponent:fle}=(Ch(),ie(wh)),{resetResources:Ele}=(O_(),ie(LB)),hle=vA(),ple=ut(),{dirname:mle}=require("path"),{getConnection:Sle}=pt(),Tle=X(),gle=D(),qb=new Map;async function Rle(e=!1){!mF&&Tle.get(gle.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Sle();try{mF&&await hle()}catch(n){console.error(n)}let t=Ele();_le(),t.isWorker=e,await fle(mle(ple.getConfigFilePath()),t,"hdb",!0,qb),await dle(qb,t);let r=[];for(let[n]of qb)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(Rle,"loadRootComponents");SF.exports.loadRootComponents=Rle});var et=g((eye,Po)=>{"use strict";var{Worker:Ale,MessageChannel:Ole,parentPort:Ks,isMainThread:Vb,threadId:ble,workerData:vi}=require("worker_threads"),{PACKAGE_ROOT:Nle}=D(),{join:AF,isAbsolute:yle,extname:Ile}=require("path"),{server:OF}=(br(),ie(Ko)),{watch:wle,readdir:Cle}=require("fs/promises"),{totalmem:TF}=require("os"),id=D(),bF=X(),Bi=x(),{randomBytes:Dle}=require("crypto"),{_assignPackageExport:Lle}=require("../index"),Ple=D(),gF=1024*1024,Lo=[],$n=[],Mle=50,Yb=1e4,Ule="restart",NF="request_thread_info",yF="resource_report",IF="thread_info",wF="added-port",vle="ack",xb;Lle("threads",$n);Po.exports={startWorker:Fb,restartWorkers:Wb,shutdownWorkers:xle,workers:Lo,setMonitorListener:Qle,onMessageFromWorkers:Fle,onMessageByType:vF,broadcast:$le,broadcastWithAcknowledgement:Yle,setChildListenerByType:qle,getWorkerIndex:CF,getWorkerCount:DF,getTicketKeys:PF,setMainIsWorker:Hle,setTerminateTimeout:Ble,restartNumber:vi?.restartNumber||1};$n.onMessageByType=vF;$n.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=$n.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var Kb;function Ble(e){Yb=e}a(Ble,"setTerminateTimeout");function CF(){return vi?vi.workerIndex:Kb?0:void 0}a(CF,"getWorkerIndex");function DF(){return vi?vi.workerCount:Kb?1:void 0}a(DF,"getWorkerCount");function Hle(e){Kb=e}a(Hle,"setMainIsWorker");var LF=1,Hp;function PF(){return Hp||(Hp=Vb?Dle(48):vi.ticketKeys,Hp)}a(PF,"getTicketKeys");Object.defineProperty(OF,"workerIndex",{get(){return CF()}});Object.defineProperty(OF,"workerCount",{get(){return DF()}});var MF={[NF](e,t){Kle(t)},[yF](e,t){Wle(t,e)}};function Fb(e,t={}){let r=process.constrainedMemory?.()||TF();r=Math.min(r,TF(),2e4*gF);let n=bF.get(id.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/gF/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of $n){let _=new Ole;_.existingPort=l,i.push(_),o.push(_.port2)}Ile(e)||(e+=".js");let c=new Ale(yle(e)?e:AF(Nle,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:LF=t.threadCount,name:t.name,restartNumber:Po.exports.restartNumber,ticketKeys:PF()},transferList:o},t));for(let{port1:l,existingPort:_}of i)_.postMessage({type:wF,port:l,threadId:c.threadId},[l]);return qp(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>Fb(e,t),c.on("error",l=>{console.error("Worker error:",l),Bi.error("Worker error:",l)}),c.on("exit",l=>{Lo.splice(Lo.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Mle?(t.unexpectedRestarts=c.unexpectedRestarts+1,Fb(e,t)):Bi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{MF[l.type]?.(l,c)}),Lo.push(c),zle(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(Fb,"startWorker");var Gle=[id.THREAD_TYPES.HTTP];async function Wb(e=null,t=Math.max(LF>3,1),r=!0){if(Vb){if(r){let{loadRootComponents:o}=Ap();await o()}Po.exports.restartNumber++,t<1&&(t=t*Lo.length);let n=[],s=[];for(let o of Lo.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Bi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Po.exports.restartNumber,type:id.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Gle.indexOf(o.name)>-1,l=new Promise(_=>{let u=setTimeout(()=>o.terminate(),Yb*2).unref();o.on("exit",()=>{clearTimeout(u),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),_()})});if(n.push(l),c&&r){let _=o.startCopy(),u=new Promise(d=>{let f=a(E=>{E.type===Ple.ITC_EVENT_TYPES.CHILD_STARTED&&(Bi.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(u)),_.off("message",f))},"startListener");Bi.trace("Waiting for worker to start",_.threadId),_.on("message",f)});s.push(u),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=Ia();r&&(e==="http"||!e)&&bF.get(id.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Ks.postMessage({type:Ule,workerType:e})}a(Wb,"restartWorkers");function qle(e,t){MF[e]=t}a(qle,"setChildListenerByType");function xle(e){return Wb(e,1/0,!1)}a(xle,"shutdownWorkers");var UF=[];function Fle(e){UF.push(e)}a(Fle,"onMessageFromWorkers");var kb=new Map;function vF(e,t){let r=kb.get(e);r||kb.set(e,r=[]),r.push(t)}a(vF,"onMessageByType");var kle=10;async function $le(e){let t=0;for(let r of $n)try{r.postMessage(e),t++>kle&&(t=0,await new Promise(setImmediate))}catch(n){Bi.error("Unable to send message to worker",n)}}a($le,"broadcast");var Gp=new Map,Vle=1;function Yle(e){return new Promise(t=>{let r=0;for(let n of $n)try{let s=Vle++,i=a(()=>{Gp.delete(s),--r===0&&t(),n!==Ks&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Gp.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of Gp)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Bi.error("Unable to send message to worker",s)}r===0&&t()})}a(Yle,"broadcastWithAcknowledgement");function Kle(e){e.postMessage({type:IF,workers:BF()})}a(Kle,"sendThreadInfo");function BF(){let e=Date.now();return Lo.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(BF,"getChildWorkerInfo");function Wle(e,t){e.resources=t,e.resources.updated=Date.now()}a(Wle,"recordResourceReport");var $b;function Qle(e){$b=e}a(Qle,"setMonitorListener");var jle=1e3,RF=!1;function zle(){RF||(RF=!0,setInterval(()=>{for(let e of Lo){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}$b&&$b()},jle).unref())}a(zle,"startMonitoring");var Jle=1e3;if(Ks){qp(Ks);for(let e=0,t=vi.addPorts.length;e<t;e++){let r=vi.addPorts[e];r.threadId=vi.addThreadIds[e],qp(r)}setInterval(()=>{let e=process.memoryUsage();Ks.postMessage({type:yF,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Jle).unref(),xb=a(()=>new Promise((e,t)=>{Ks.on("message",r),Ks.postMessage({type:NF});function r(n){n.type===IF&&(Ks.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else xb=BF;Po.exports.getThreadInfo=xb;function qp(e,t){$n.push(e),e.on("message",r=>{if(r.type===wF)r.port.threadId=r.threadId,qp(r.port);else if(r.type===vle){let n=Gp.get(r.id);n&&n()}else{for(let s of UF)s(r,e);let n=kb.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){Bi.error(i)}}}).on("close",()=>{$n.splice($n.indexOf(e),1)}).on("exit",()=>{$n.splice($n.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(qp,"addPort");if(Vb){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await Cle(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(AF(n,i.name));try{for await(let{filename:i}of wle(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await Wb(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");Po.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Ks.on("message",async e=>{let{type:t}=e;t===id.ITC_EVENT_TYPES.SHUTDOWN&&(Po.exports.restartNumber=e.restartNumber,Ks.unref(),setTimeout(()=>{Bi.warn("Thread did not voluntarily terminate",ble),process.exit(0)},Yb).unref())})});var IP={};Fe(IP,{AUDIT_STORE_OPTIONS:()=>dh,createAuditEntry:()=>af,openAuditStore:()=>$p,readAuditEntry:()=>kt,setAuditRetention:()=>Zle,transactionKeyEncoder:()=>YF});function $p(e){let t=e.auditStore=e.openDB(kF.AUDIT_STORE_NAME,dh);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=xp){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed")return;let o=0,c;try{for(let{key:l,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-Qb})){if((_[0]&15)===Jb){let u=kt(_),d=u.tableId;r[d]?.(u.recordId)}if(c=t.remove(l),await new Promise(setImmediate),++o>=Xle){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,Qb/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,kp.getWorkerIndex)()===(0,kp.getWorkerCount)()-1&&s(xp),t}function Zle(e,t=xp){Qb=e,xp=t}function af(e,t,r,n,s,i,o){let c=KF[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let l=1;n&&(n>1?Sl.setFloat64(0,n):Vn.set(BS),l=9),f(0),f(t),d(r),Sl.setFloat64(l,e),l+=8,s?d(s):Vn[l++]=0,Vn[n?8:0]=c;let u=Vn.subarray(0,l);if(o)return Buffer.concat([u,o]);return u;function d(E){let h=l;l+=1,l=(0,Tl.writeKey)(E,Vn,l);let m=l-h-1;m>127?m>16383?(Zb.error("Key or username was too large for audit entry",E),l=h+1,Vn[h]=0):(Vn.copyWithin(h+2,h+1,l),Sl.setUint16(h,m|32768),l++):Vn[h]=m}function f(E){E<128?Vn[l++]=E:E<16384?(Sl.setUint16(l,E|32768),l+=2):E<1056964608?(Sl.setUint32(l,E|3221225472),l+=4):(Vn[l]=255,Sl.setUint32(l+1,E),l+=5)}}function kt(e){try{let t=e.dataView||(e.dataView=new Xb(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,l=t.position+=o,_=t.readFloat64();o=t.readInt();let u=t.position,d=t.position+=o;return{type:KF[n&7],tableId:i,get recordId(){return FF(e,c,l)},version:_,previousLocalTime:r,get user(){return d>u?FF(e,u,d):void 0},getValue(f,E,h){if(n&jb||n&zb&&!E)return f.decoder.decode(e.subarray(t.position));if(n&zb&&h)return eN(f.getEntry(this.recordId),h,f)}}}catch(t){return Zb.error("Reading audit entry error",t,e),{}}}function FF(e,t,r){let n=e.subarray(t,r);return(0,Tl.readKey)(n,0,r-t)}var Tl,Fp,kF,$F,kp,VF,Zb,Vn,Sl,YF,dh,Qb,Xle,xp,jb,zb,HF,Jb,GF,qF,xF,KF,Xb,eo=be(()=>{Tl=require("ordered-binary"),Fp=B(X()),kF=B(at()),$F=B(D()),kp=B(et()),VF=B(K());nu();Zb=B(x());Vp();(0,Fp.initSync)();Vn=Buffer.alloc(1024),Sl=new DataView(Vn.buffer,Vn.byteOffset,1024),YF={writeKey(e,t,r){return e===ru?(t.set(ru,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Tl.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,Tl.readKey)(e,t,r)}},dh={encoding:"binary",keyEncoder:YF},Qb=(0,VF.convertToMS)((0,Fp.get)($F.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Xle=1e3,xp=1e4;a($p,"openAuditStore");a(Zle,"setAuditRetention");jb=16,zb=32,HF=1,Jb=2,GF=3,qF=4,xF=5,KF={put:HF|jb,[HF]:"put",delete:Jb,[Jb]:"delete",message:GF|jb,[GF]:"message",invalidate:qF,[qF]:"invalidate",patch:xF|zb,[xF]:"patch"};a(af,"createAuditEntry");a(kt,"readAuditEntry");Xb=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch{debugger}}};a(FF,"readKeySafely")});var tN={};Fe(tN,{add:()=>Yp,applyReverse:()=>WF,getRecordAtTime:()=>eN,rebuildUpdateBefore:()=>Kp});function Yp(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function Kp(e,t){let r=null;for(let n in e)if(n in t){let s=t[n];if(s?.__op__){let i=e[n];if(i?.__op__)if(i.__op__===s.__op__)r||(r={}),r[n]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[n]=i,Yp(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function WF(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=eue[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=QF}}function eN(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let l=n.get(i),_=kt(l);switch(_.type){case"put":s=_.getValue(r);break;case"patch":WF(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let l in s)s[l]===QF&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),_=kt(l),u;switch(_.type){case"put":u=_.getValue(r);break;case"patch":u=_.getValue(r);break}for(let d in u)o[d]&&(s[d]=u[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var eue,QF,Vp=be(()=>{eo();a(Yp,"add");Yp.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};eue={add:Yp};a(Kp,"rebuildUpdateBefore");a(WF,"applyReverse");QF={};a(eN,"getRecordAtTime")});function mn(e){return e[Gt]||(e[Gt]=Object.create(null))}function Jp(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,l,_;if(o.resolve)_={get(){return o.resolve(this,this[Ie])},set(u){return o.set(this,u)},configurable:!0};else{switch(o.type){case"String":l=a(function(u){if(!(typeof u=="string"||u==null&&o.nullable!==!1))throw new Yn.ClientError(`${c} must be a string, attempt to assign ${u}`);mn(this)[c]=u},"set");break;case"ID":l=a(function(u){if(!(typeof u=="string"||u?.length>0&&u.every?.(d=>typeof d=="string")||u==null&&o.nullable!==!1))throw new Yn.ClientError(`${c} must be a string, attempt to assign ${u}`);mn(this)[c]=u},"set");break;case"Float":case"Number":l=a(function(u){let d=u?.__op__?u.value:u;if(!(typeof d=="number"||u==null&&o.nullable!==!1))throw new Yn.ClientError(`${c} must be a number, attempt to assign ${d}`);mn(this)[c]=u},"set");break;case"Int":l=a(function(u){let d=u?.__op__?u.value:u;if(!(d>>0===d||u==null&&o.nullable!==!1))if(typeof d=="number"&&Math.abs((d>>0)-d)<=1)d=Math.round(d),u?.__op__?u.value=d:u=d;else throw new Yn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${u}`);mn(this)[c]=u},"set");break;case"Long":l=a(function(u){let d=u?.__op__?u.value:u;if(!(Math.round(d)===u&&Math.abs(d)<=9007199254740992||u==null&&o.nullable!==!1))if(typeof d=="number"&&Math.abs(d)<=9007199254740992)d=Math.round(d),u?.__op__?u.value=d:u=d;else throw new Yn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${u}`);mn(this)[c]=u},"set");break;case"BigInt":l=a(function(u){let d=u?.__op__?u.value:u;if(!(typeof d=="bigint"||u==null&&o.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=BigInt(d),u?.__op__?u.value=d:u=d;else throw new Yn.ClientError(`${c} must be a number, attempt to assign ${u}`);mn(this)[c]=u},"set");break;case"Boolean":l=a(function(u){if(!(typeof u=="boolean"||u==null&&o.nullable!==!1))throw new Yn.ClientError(`${c} must be a boolean, attempt to assign ${u}`);mn(this)[c]=u},"set");break;case"Date":l=a(function(u){if(!(u instanceof Date||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=new Date(u);else throw new Yn.ClientError(`${c} must be a Date, attempt to assign ${u}`);mn(this)[c]=u},"set");break;case"Bytes":l=a(function(u){if(!(u instanceof Uint8Array||u==null&&o.nullable!==!1))throw new Yn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${u}`);mn(this)[c]=u},"set");break;case"Any":case void 0:l=a(function(u){mn(this)[c]=u},"set");break;default:l=a(function(u){if(!(typeof u=="object"||u==null&&o.nullable!==!1))throw new Yn.ClientError(`${c} must be an object, attempt to assign ${u}`);mn(this)[c]=u},"set")}_={get(){let u=this[Gt];if(u&&c in u){let f=u[c];if(f?.__op__){let E=this[fe]?.[c];return f.update(E)}return f}let d=this[fe]?.[c];if(d&&typeof d=="object"){let f=zF(d,o);if(f)return u||(u=this[Gt]=Object.create(null)),u[c]=f}return d},set:l,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let l=this[Gt];return l?.[o]!==void 0?l[o]:this[fe]?.[o]}),i("set",function(o,c){let l=n[o];if(l)return l.set.call(this,c);if(t.sealed)throw new Yn.ClientError("Can not add a property to a sealed table schema");mn(this)[o]=c}),i("deleteProperty",function(o){mn(this)[o]=void 0}),i("toJSON",function(){let o=this[Gt],c;for(let _ in o){c||(c=Object.assign({},this[fe]));let u=o[_];if(u?.__op__){let d=c[_];u=u.update(d)}c[_]=u}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[fe])),Object.assign(c,this)),c||this[fe]}),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 zF(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){if(s?.[fe])throw new Error("Can not track an already tracked object, check for circular references");this[fe]=s}},Jp(r,t)),new r(e)):new Wp(e);case Array:let n=new jp(e.length);n[fe]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=zF(o,t?.elements)),n[s]=o}return n;default:return e}}function rE(e){let t=e[Gt],r;for(let s in t){r||(r=Object.assign({},e[fe]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=rE(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[fe])),Object.assign(r,e)),r||e[fe]}function $a(e,t=e[Gt]){let r;if(jF.call(e,fe)&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=$a(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[fe]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=tN[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=$a(s);r[n]=s}return r?Object.freeze(r):jF.call(e,fe)?e[fe]:e}function Qp(e){let t=e[fe];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[ka]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.[fe]===s){if(Qp(i))return!0}else return!0}}else{let r=e[Gt];if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s[fe]===i){if(Qp(s))return!0}else return!0}else return!0}}return!1}var Yn,Gt,Wp,jF,ka,jp,zp,nE=be(()=>{es();Yn=B(oe());Vp();Gt=Symbol("own-data");a(mn,"getChanges");a(Jp,"assignTrackedAccessors");a(zF,"trackObject");Wp=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[fe])throw new Error("Can not track an already tracked object, check for circular references");this[fe]=t}};Jp(Wp,{});a(rE,"collapseData");jF=Object.prototype.hasOwnProperty;a($a,"deepFreeze");a(Qp,"hasChanges");ka=Symbol.for("has-array-changes"),jp=class extends Array{static{a(this,"TrackedArray")}[ka];constructor(t){super(t)}splice(...t){return this[ka]=!0,super.splice(...t)}push(...t){return this[ka]=!0,super.push(...t)}pop(){return this[ka]=!0,super.pop()}unshift(...t){return this[ka]=!0,super.unshift(...t)}shift(){return this[ka]=!0,super.shift()}};jp.prototype.constructor=Array;zp=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var ug={};Fe(ug,{CONTEXT:()=>Ie,ID_PROPERTY:()=>Ue,IS_COLLECTION:()=>Kn,RECORD_PROPERTY:()=>fe,Resource:()=>Jt,snake_case:()=>rue,transformForSelect:()=>Zp});function rue(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function JF(e,t){if(od=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(od=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new nN;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){od=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function Sn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,_,u;if(r?(o?(u=i,o=o[Ie]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(u=s,c=u[this.primaryKey]??null,o=i[Ie]||i):u=i:(u=s,c=u[Ue]??u[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[Ie]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(l=s,s[Symbol.iterator]){c=[],_=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let E=c.indexOf("?");if(E>-1){let m=this.parseQuery(c.slice(E+1));l?l=Object.assign(m,l):l=m,c=c.slice(0,E)}let h=this.parsePath(c,o,l);h?.id!==void 0?(h.query&&(l?l=Object.assign(h.query,l):l=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||_?(d=Object.assign({},t),l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),_&&(d.isCollection=!0)):d=t,o.transaction){let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)}else return Ze(o,()=>{let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)},d);function f(E){if(o.authorize){o.authorize=!1;let h=t.type==="read"?E.allowRead(o.user,l,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,u,o):E.allowUpdate(o.user,u,o):t.type==="create"?E.allowCreate(o.user,u,o):E.allowDelete(o.user,l,o);if(h?.then)return h.then(m=>{if(!m)throw new Xp(o.user);return typeof u?.then=="function"?u.then(S=>e(E,l,o,S)):e(E,l,o,u)});if(!h)throw new Xp(o.user)}return typeof u?.then=="function"?u.then(h=>e(E,l,o,h)):e(E,l,o,u)}a(f,"authorizeActionOnResource")}}function Tn(e,t){let r=new ek.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function rN(e,t,r){let n=e[fe];if(n){let s=e[Gt];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function Zp(e,t){let r=t?.propertyResolvers,n=t[Ie],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):rN(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let _=[],u=i(rN(l,r,n));for(let d of e)_.push(u(d));return _},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(f=>f&&typeof f=="object"?c(f):f);let _={},u=i(rN(l,r,n)),d;for(let f of e){let E=u(f);E===void 0&&o&&(E=null),E?.then?(d||(d=[]),d.push(E.then(h=>_[f.name||f]=h))):_[f.name||f]=E}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let u=r[c.name]?.definition?.tableClass;l=s[c.name]=Zp(c.select||c,u)}let _=o(c.name);return l(_)}else return o(c);else return c}}a(i,"handleProperty")}var XF,ZF,ek,Ie,Ue,Kn,fe,tue,Jt,Xp,od,nN,es=be(()=>{XF=require("crypto");zl();ZF=require("../index"),ek=B(oe());nE();da();Vh();Ie=Symbol.for("context"),Ue=Symbol.for("primary-key"),Kn=Symbol("is-collection"),fe=Symbol("stored-record"),tue={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Jt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Ue]=t;let n=r?.[Ie];this[Ie]=n!==void 0?n:r||null}static get=Sn(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let _=Zp(l,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Sn(function(t,r,n,s){if(Array.isArray(s)&&t[Kn]){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,_=l.getResource(c[l.primaryKey],n,{async:!0});_.then?i.push(_.then(u=>u.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):Tn(t,"put")},{hasContent:!0,type:"update"});static patch=Sn(function(t,r,n,s){return t.patch?t.patch(s,r):Tn(t,"patch")},{hasContent:!0,type:"update"});static delete=Sn(function(t,r,n,s){return t.delete?t.delete(r):Tn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,XF.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),Ze(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):Tn(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=Sn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Tn(t,"delete")},{hasContent:!1,type:"update"});static post=Sn(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=Sn(function(t,r,n,s){return t.connect?t.connect(s,r):Tn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Sn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Tn(t,"subscribe")},{type:"read"});static publish=Sn(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.publish?t.publish(s,r):Tn(t,"publish")},{hasContent:!0,type:"create"});static search=Sn(function(t,r,n,s){let i=t.search?t.search(r):Tn(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=Zp(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Sn(function(t,r,n,s){return t.search?t.search(s,r):Tn(t,"search")},{hasContent:!0,type:"read"});static copy=Sn(function(t,r,n,s){return t.copy?t.copy(s,r):Tn(t,"copy")},{type:"create"});static move=Sn(function(t,r,n,s){return t.move?t.move(s,r):Tn(t,"move")},{type:"delete"});post(t){if(this[Kn])return this.constructor.create(this[Ue],t,this[Ie]);Tn(this,"post")}static isCollection(t){return t?.[Kn]}static coerceId(t){return t}static parseQuery(t){return $h(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&tue[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:JF(t,this),isCollection:od}}let i=JF(t,this);return od?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Ie],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let _=l.asMap.get(t);if(s=_?.find(u=>u.constructor===c),s)return s;_||l.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=l.find(_=>_[Ue]===t&&_.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let _=new Map;for(let u of l){let d=u[Ue],f=_.get(d);f?f.push(u):_.set(d,[u])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[Kn]=!0),s}subscribe(t){return new Zn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Zn}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[Ue]}getContext(){return this[Ie]}};Jt.prototype[Ie]=null;(0,ZF._assignPackageExport)("Resource",Jt);a(rue,"snake_case");Xp=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(JF,"pathToId");nN=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Sn,"transactional");a(Tn,"missingMethod");a(rN,"selectFromObject");a(Zp,"transformForSelect")});function rk(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;gl||((0,em.onMessageByType)(tk,u=>{nk(u.path)}),gl=Object.create(null));let o=gl[s]||(gl[s]=[]);o.auditStore=e.auditStore,o.lastTxnTime==null&&(o.lastTxnTime=Date.now());let c=o[i];c||(c=o[i]=new Map,c.envs=o,c.tableId=i,c.store=e.primaryStore),t=Vc(t);let l=new iN(r);l.startTime=n;let _=c.get(t);return _?_.push(l):(c.set(t,_=[l]),_.tables=c,_.key=t),l.subscriptions=_,l}function nk(e,t){if(!gl)return;let r=gl[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(s){throw s.message+=" in "+e,s}let n;for(let{key:s,value:i}of r.auditStore.getRange({start:r.lastTxnTime,exclusiveStart:!0})){r.lastTxnTime=s;let o=kt(i),c=r[o.tableId];if(!c)continue;let l=o.recordId,_,u=Vc(o.recordId),d=0;do{let f=c.get(u);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=s){(0,sN.info)("omitting",l,h.startTime,s);continue}try{if(h.crossThreads===!1&&!t)continue;let m;h.supportsTransactions&&h.txnInProgress!==o.version&&(m=!0,h.txnInProgress||(n?n.push(h):n=[h]),h.txnInProgress=o.version),h.listener(l,o,s,m)}catch(m){console.error(m),(0,sN.info)(m)}}}if(u==null)break;let E=u.lastIndexOf?.("/",u.length-2);E>-1?u=u.slice(0,E):u=null,d++}while(!0)}if(n)for(let s of n)s.txnInProgress=null,s.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function sk(e,t){let r=t||e,n=r.env;if(t&&!t.cache&&(t.cache=new Map),!n.hasBroadcastListener){n.hasBroadcastListener=!0;let s=n.path;r.on("aftercommit",()=>{(0,em.broadcast)({type:tk,path:s}),nk(s,!0)})}}var sN,em,tk,gl,Aye,iN,ik=be(()=>{sN=B(x()),em=B(et());zl();O_();eo();tk="transaction",Aye=Buffer.alloc(4096);a(rk,"addSubscription");iN=class extends Zn{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 n=t.envs,s=t.dbi;delete n[s]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(nk,"notifyFromTransactionData");a(sk,"listenToCommits")});var GO={};Fe(GO,{coerceType:()=>tm,makeTable:()=>sm,setServerUtilities:()=>_ue,updateResource:()=>rm});function sm(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:_,dbisDB:u,sealed:d}=e,{expirationMS:f,evictionMS:E,audit:h,trackDeletes:m}=e,{attributes:S}=e;S||(S=[]),sk(i,l);let R=qS(i,n,l),T=0,A,L,U={},v=Promise.resolve(),k,H,j;for(let W of S)(W.assignCreatedTime||W.name==="__createdtime__")&&(k=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(H=W),W.expiresAt&&(j=W),W.isPrimaryKey&&(U=W);let z,J=[],Se=[],ue=1,Ee=2,Me={},Ge={},Ft=864e5,qd,xd,Wi,ay=!1,Ym,Km,VV=i.getRange({start:!1,end:!1}).constructor,YV=10,KV=6;h&&uy();class Je extends Jt{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=k;static updatedTimeProperty=H;static propertyResolvers;static sources=[];static get expirationMS(){return f}static dbisDB=u;static schemaDefined=_;static sourcedFrom(p,O){O&&(this.sourceOptions=O,(O.expiration||O.eviction||O.scanInterval)&&this.setTTLExpiration(O)),O?.intermediateSource?(p.intermediateSource=!0,this.sources.unshift(p)):this.sources.push(p),L=p.get&&(!p.get.reliesOnPrototype||p.prototype.get);let I=a(P=>{let y=this.sources.slice(0,-1);if(y=y.filter(M=>M[P]&&(!M[P].reliesOnPrototype||M.prototype[P])),y.length>0)if(y.length===1){let M=y[0];return($,C,G)=>{if($?.source!==M)return M[P](C,G,$)}}else return(M,$,C)=>{let G=[];for(let q of y){if(M?.source===q)break;G.push(q[P]($,C,M))}return Promise.all(G)}},"getApplyToIntermediateSource"),N=this.sources[this.sources.length-1],b=a(P=>{if(N[P]&&(!N[P].reliesOnPrototype||N.prototype[P]))return(y,M,$)=>{if(!y?.source)return N[P](M,$,y)}},"getApplyToCanonicalSource");return Me={put:b("put"),patch:b("patch"),delete:b("delete"),publish:b("publish")},Ge={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish"),invalidate:I("invalidate")},(async()=>{let P=!1,y=a(async(M,$)=>{let C=M.value,G=M.table?lt[c][M.table]:Je;if(c===Ss.SYSTEM_SCHEMA_NAME&&(M.table===Ss.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===Ss.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(P=!0),M.id===void 0&&(M.id=C[G.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=p;let q=await G.getResource(M.id,$,Rl);switch(M.type){case"put":return q._writeUpdate(C,!0,Rl);case"patch":return q._writeUpdate(C,!1,Rl);case"delete":return q._writeDelete(Rl);case"publish":return q._writePublish(C,Rl);case"invalidate":return q.invalidate(Rl);default:st.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=p.subscribe;M&&m==null&&(m=!0);let $=p.subscribeOnThisThread?p.subscribeOnThisThread((0,Ya.getWorkerIndex)()):(0,Ya.getWorkerIndex)()===0,C=M&&$&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let G;for await(let q of C)try{if(!(q.type==="transaction"?q.writes[0]:q)){st.error("Bad subscription event",q);continue}if(q.source=p,G)if(q.beginTxn)G.resolve();else{y(q,G);continue}if(q.type==="end_txn")continue;let Te=Ze(q,()=>{if(q.type==="transaction"){let te=[];for(let Be of q.writes)try{te.push(y(Be,q))}catch(le){throw le.message+=" writing "+JSON.stringify(Be)+" of event "+JSON.stringify(q),le}return Promise.all(te)}else if(q.type==="define_schema"){let te=this.attributes.slice(0),Be;for(let le of q.attributes)te.find($e=>$e.name===le.name)||(te.push(le),Be=!0);Be&&(Et({table:s,database:c,attributes:te,origin:"cluster"}),fd.signalSchemaChange(new Ed.SchemaEventMsg(process.pid,Ss.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return q.beginTxn?(G=q,y(q,q),new Promise(te=>{G.resolve=te})):y(q,q)});P&&(await Te,fd.signalUserChange(new Ed.UserEventMsg(process.pid))),q.onCommit&&(Te?.then?Te.then(q.onCommit):q.onCommit())}catch(ae){st.error("error in subscription handler",ae)}}}catch(M){st.error(M)}})(),this}static getResource(p,O,I){let N=super.getResource(p,O,I);if(p!=null){vl(p);try{if(N.hasOwnProperty(fe))return N;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let b=!I?.async||i.cache?.get(p),P=Jn(O),y=P.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Wm(p,O,{transaction:y},b,M=>{if(M?rm(N,M):N[fe]=null,O.onlyIfCached&&O.noCacheStore){if(!N.doesExist())throw new Rn.ServerError("Entry is not cached",504)}else if(I?.ensureLoaded){let $=Qm(p,M,O,N);if($)return P?.disregardReadTxn(),N[oN]=!0,cN($,C=>(rm(N,C),N))}return N})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(p)),b}}return N}ensureLoaded(){let p=Qm(this[Ue],this[gn],this[Ie]);if(p)return this[oN]=!0,cN(p,O=>{this[gn]=O,this[fe]=O.value,this[_d]=O.version})}static setTTLExpiration(p){if(typeof p=="number")f=p*1e3,E||(E=0);else if(p&&typeof p=="object")f=p.expiration*1e3,E=(p.eviction||0)*1e3,Ft=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(f<0)throw new Error("Expiration can not be negative");Ft=Ft||(f+E)/4,zm()}static enableAuditing(p=!0){h=p,p&&uy(),Je.audit=p}static coerceId(p){return p===""?null:tm(p,U)}static async dropTable(){if(delete lt[c][s],c===o){for(let p of S)u.remove(Je.tableName+"/"+p.name),r[p.name]?.drop();u.remove(Je.tableName+"/"),i.drop(),await u.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));fd.signalSchemaChange(new Ed.SchemaEventMsg(process.pid,Ss.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(p){if(typeof p=="string")return this.getProperty(p);if(this[Kn])return this.search(p);if(this[Ue]===null){if(p?.conditions)return this.search(p);let O=Je.getRecordCount();return{recordCount:O.recordCount,estimatedRecordRange:O.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[Ie]?.returnNonexistent)return this}allowRead(p,O){let I=kd(p);if(I?.read){if(I.isSuperUser)return!0;let N=I.attribute_permissions,b=O?.select;if(N?.length>0||ay&&b){if(O||(O={}),b){let P=N?.length>0&&aN(N,"read");O.select=b.map(y=>{let M=y.name||y;if(!P||P[M]){let $=Wi[M]?.definition?.tableClass;if($){if(y.name||(y={name:y}),!$.prototype.allowRead.call(null,p,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else O.select=N.filter(P=>P.read&&!Wi[P.attribute_name]).map(P=>P.attribute_name);return O}else return!0}}allowUpdate(p,O){let I=kd(p);if(I?.update){let N=I.attribute_permissions;if(N?.length>0){let b=aN(N,"update");for(let P in O)if(!b[P])return!1;for(let P of N){let y=P.attribute_name;!P.update&&!(y in O)&&(O[y]=this.getProperty(y))}}return!0}}allowCreate(p,O){if(this[Kn]){let I=kd(p);if(I?.insert){let N=I.attribute_permissions;if(N?.length>0){let b=aN(N,"insert");for(let P in O)if(!b[P])return!1}else return!0}}else return this.allowUpdate(p,{})}allowDelete(p){return kd(p)?.delete}update(p,O){if(!Jn(this[Ie]))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let N;return typeof p=="object"&&p&&(O?(Object.isFrozen(p)&&(p=Object.assign({},p)),this[fe]={},this[Gt]=p):(N=this[Gt],N&&(p=Object.assign(N,p)),this[Gt]=N=p)),this._writeUpdate(this[Gt],O),this}addTo(p,O){if(typeof O=="number"||typeof O=="bigint")this[ad]===ak?this.set(p,(+this.getProperty(p)||0)+O):(this[ad]||this.update(),this.set(p,new zp(O)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,O){if(typeof O=="number")return this.addTo(p,-O);throw new Error("Can not subtract a non-numeric value")}invalidate(p){let O=this[Ie],I=this[Ue];vl(I),Jn(this[Ie]).addWrite({key:I,store:i,invalidated:!0,entry:this[gn],nodeName:this[Ie]?.nodeName,before:Me.invalidate?.bind(this,O,I),beforeIntermediate:Ge.invalidate?.bind(this,O,I),commit:(b,P)=>{if(P?.version>b)return;let y=null;for(let M in r)y||(y={}),y[M]=this.getProperty(M);R(I,y,this[gn],b,cd,h,this[Ie],0,"invalidate")}})}static evict(p,O,I){let N=this.Source,b;if(!((L||h)&&(!O||(b=i.getEntry(p),!b||!O)||b.version!==I))){if(L){if(i.hasLock(p,b.version))return;let P;for(let y in r)P||(P={}),P[y]=O[y];if(P)return R(p,P,b,I,ld,null,null,0,null,!0)}return i.ifVersion(p,I,()=>{Fd(p,O,null)}),h?R(p,null,b,I,ld,null,null,0,null,!0):i.remove(p,I)}}lock(){throw new Error("Not yet implemented")}static operation(p,O){return p.table||=s,p.schema||=c,fk.operation(p,O)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,O,I){let N=this[Ie],b=Jn(N),P=this[Ue];vl(P);let y=this[gn];this[ad]=O?ak:cue;let M={key:P,store:i,entry:y,nodeName:N?.nodeName,validate:$=>{p||(p=this[Gt]),O||p&&Qp(p)?N?.source||(b.checkOverloaded(),this.validate(p,!O),H&&(p[H.name]=H.type==="Date"?new Date($):H.type==="String"?new Date($).toISOString():$),O&&(t&&p[t]!==P&&(p[t]=P),k&&(y?.value?p[k.name]=y?.value[k.name]:p[k.name]=k.type==="Date"?new Date($):k.type==="String"?new Date($).toISOString():$),p=$a(p))):b.removeWrite(M)},before:O?Me.put?()=>Me.put(N,P,p):null:Me.patch?()=>Me.patch(N,P,p):Me.put?()=>Me.put(N,P,$a(this)):null,beforeIntermediate:O?Ge.put?()=>Ge.put(N,P,p):null:Ge.patch?()=>Ge.patch(N,P,p):Ge.put?()=>Ge.put(N,P,$a(this)):null,commit:($,C,G)=>{if(G){if(N&&C?.version>(N.lastModified||0)&&(N.lastModified=C.version),this[gn]=C,C?.value?.[fe])throw new Error("Can not assign a record to a record, check for circular references");O||(this[fe]=C?.value??null)}this[Gt]=p,this[_d]=$;let q=C?.value,ae=p;if(this[ad]=0,C?.version>=$)if(h){let le=C.localTime,$e=C.version;for(;ae&&(le>$||$e>=$&&le>0);){let ne=l.get(le);if(!ne)break;let Z=kt(ne);if($e=Z.version,$e>$){if(Z.type==="patch"){let ge=Z.getValue(i);ae=Kp(ae,ge)}else if(Z.type==="put"||Z.type==="delete")return}else if($e===$)return;le=Z.previousLocalTime}}else{if(O)return;ae=Kp(ae,q)}let Te;if(O?Te=ae:(this[fe]=q,Te=O?ae:$a(this,ae)),this[fe]=Te,Te?.[fe])throw new Error("Can not assign a record to a record, check for circular references");let te;O||(te=p),Fd(P,q,Te);let Be=O?"put":"patch";R(P,Te,C,$,0,h,N,N.expiresAt||(f?f+Date.now():0),Be,!1,te)}};b.addWrite(M)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[Kn]){for await(let O of this.search(p))(await Je.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[fe]?this._writeDelete(p):!1}_writeDelete(p){let O=Jn(this[Ie]),I=this[Ue];vl(I);let N=this[Ie];return O.addWrite({key:I,store:i,resource:this,nodeName:N?.nodeName,before:Me.delete?.bind(this,N,I),beforeIntermediate:Ge.delete?.bind(this,N,I),commit:(b,P,y)=>{let M=P?.value;y&&(N&&P?.version>(N.lastModified||0)&&(N.lastModified=P.version),rm(this,P)),!(P?.version>b)&&(Fd(this[Ue],M),st.trace("Write delete entry",I,b),h||m?(R(I,null,this[gn],b,0,h,this[Ie],0,"delete"),h||zm()):i.remove(this[Ue]))}}),!0}search(p){let O=this[Ie],I=Jn(O);if(!p)throw new Error("No query provided");let N=p.conditions;N?N.length===void 0&&(N=N[Symbol.iterator]?Array.from(N):[N]):N=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[Ue]&&(N=[{attribute:null,comparator:"prefix",value:this[Ue]}].concat(N));let b,P={};function y(Z,ge){let qe;switch(ge){case"and":case void 0:if(Z.length<1)throw new Error('An "and" operator requires at least one condition');qe=!0;break;case"or":if(Z.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ge)}let bs=qe&&{},Qi;for(let Qe of Z){if(Qe.conditions){Qe.conditions=y(Qe.conditions,Qe.operator);continue}let jt=Qe[0]??Qe.attribute,Dn=jt==null?U:Di(S,jt);if(Dn){if(qe){let Ns=ds(jt),zt=bs[Ns];zt?(zt.push(Qe),Qi=!0):bs[Ns]=[Qe]}(Dn.type||uO[Qe.comparator])&&(Qe[1]===void 0?Qe.value=$(Qe.value,Dn):Qe[1]=$(Qe[1],Dn))}else if(jt!=null)throw(0,Rn.handleHDBError)(new Error,`${jt} is not a defined attribute`,404)}if(p.enforceExecutionOrder)return Z;if(Qi)for(let Qe in bs){let jt=bs[Qe],Dn=jt.length;if(Dn>1)for(let Ns=0;Ns<Dn;Ns++){let zt=jt[Ns];if(zt.comparator==="ge"||zt.comparator==="greater_than_equal")for(let ji=0;ji<Dn;ji++){let ic=jt[ji];(ic.comparator==="le"||ic.comparator==="less_than_equal")&&(zt.comparator="between",zt.value=[zt.value,ic.value],Z.splice(Z.indexOf(ic),1))}if(zt.comparator==="equals"||!zt.comparator){for(let ji=0;ji<Dn;ji++)if(ji!==Ns){let ic=jt[ji];Z.splice(Z.indexOf(ic),1)}break}}}return Z}a(y,"prepareConditions");function M(Z,ge){if(p.enforceExecutionOrder)return Z;for(let qe of Z)qe.conditions&&(qe.conditions=M(qe.conditions,qe.operator));return Z.length>1&&ge!=="or"?(0,dk.sortBy)(Z,kh(Je)):Z}a(M,"orderConditions");function $(Z,ge){return Array.isArray(Z)?Z.map(qe=>tm(qe,ge)):tm(Z,ge)}a($,"coerceTypedValues");let C=p.operator;(N.length>0||C)&&(N=y(N,C));let G=typeof p.sort=="object"&&p.sort,q;if(G&&C!=="or"){let Z=G.attribute;if(b=N.find(ge=>ds(ge.attribute)===ds(Z)),!b){let ge=Di(S,Z);if(!ge)throw(0,Rn.handleHDBError)(new Error,`${Array.isArray(Z)?Z.join("."):Z} is not a defined attribute`,404);if(ge.indexed)b={attribute:Z,comparator:"sort"},N.push(b);else if(N.length===0&&!p.allowFullScan)throw(0,Rn.handleHDBError)(new Error,`${Array.isArray(Z)?Z.join("."):Z} is not indexed and not combined with any other conditions`,404)}b&&(b.descending=!!G.descending)}N=M(N,C),G&&(b&&N[0]===b?G.next&&(q={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(b&&N.splice(N.indexOf(b),1),q=G));let ae=p.select;if(N.length===0&&(N=[{attribute:t,comparator:"greater_than",value:!0}]),p.explain)return{conditions:N,operator:C,postOrdering:q,selectApplied:!!ae};let Te=I.useReadTxn(),te=_O(N,C,Je,Te,p,O,(Z,ge)=>cy(Z,ae,O,Te,ge),P),Be=p.ensureLoaded!==!1;q||(te=ne(te));let le=Je.transformEntryForSelect(ae,O,Te,P,Be,!0),$e=Je.transformToOrderedSelect(te,ae,q,Te,O,le);function ne(Z){return p.offset||p.limit!==void 0?Z.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0):Z}return a(ne,"applyOffset"),q&&($e=ne($e)),$e.onDone=()=>{$e.onDone=null,I.doneReadTxn()},$e.selectApplied=!0,$e.getColumns=()=>{if(ae){let Z=[];for(let ge of ae)ge==="*"?Z.push(...S.map(qe=>qe.name)):Z.push(ge.name||ge);return Z}return S.map(Z=>Z.name)},$e}static transformToOrderedSelect(p,O,I,N,b,P){let y=new VV;if(I){p=cy(p,O,N,b,null);let M;y.iterate=function(){let C,G=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),q,ae=I.dbOrderedAttribute,Te,te,Be=!0;function le(ne){let Z=ne.next&&le(ne.next),ge=ne.descending;return(qe,bs)=>{let Qi=jm(qe,ne.attribute,N),Qe=jm(bs,ne.attribute,N),jt=ge?(0,Ka.compareKeys)(Qe,Qi):(0,Ka.compareKeys)(Qi,Qe);return jt===0?Z?.(qe,bs)||0:jt}}a(le,"createComparator");let $e=le(I);return{async next(){let ne;if(C)if(ne=C.next(),ne.done){if(q)return y.onDone&&y.onDone(),ne}else return{value:await P.call(this,ne.value)};M=[],Te&&M.push(Te);do if(ne=await G.next(),ne.done){if(q=!0,M.length)break;return y.onDone&&y.onDone(),ne}else{let Z=ne.value;if(Z?.then&&(Z=await Z),ae){let ge=jm(Z,ae,N);if(Be)Be=!1,te=ge;else if(ge!==te){te=ge,Te=Z;break}}M.push(Z)}while(!0);return I.isGrouped,M.sort($e),C=M[Symbol.iterator](),ne=C.next(),ne.done?(y.onDone&&y.onDone(),ne):{value:await P.call(this,ne.value)}},return(){y.onDone&&y.onDone(),G.return()},throw(){y.onDone&&y.onDone(),G.throw()}}};let $=a(C=>{if(typeof O=="object"&&Array.isArray(C.attribute))for(let G=0;G<O.length;G++){let q=O[G],ae;if(q.name===C.attribute[0]){for(ae=q.sort||(q.sort={});ae.next;)ae=ae.next;ae.attribute=C.attribute.slice(1),ae.descending=C.descending}else q===C.attribute[0]&&(O[G]=ae={name:q,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&$(C.next)},"applySortingOnSelect");$(I)}else y.iterate=(p[Symbol.asyncIterator]||p[Symbol.iterator]).bind(p),y=y.map(P);return y}static transformEntryForSelect(p,O,I,N,b,P){if(p&&(p===t||p?.length===1&&p[0]===t)){let C=a(G=>(O?.transaction?.stale&&(O.transaction.stale=!1),G?.key??G),"transform");return p===t?C:p.asArray?G=>[C(G)]:G=>({[t]:C(G)})}let y;b&&L&&!p?.every(C=>{let G;return typeof C=="object"?G=C.name:G=C,r[G]||G===t})&&(y=!0);let M,$=a(function(C){let G;if(O?.transaction?.stale&&(O.transaction.stale=!1),C!=null){if(Ym=C,G=C.value||C.deref?.(),!G&&(C.key===void 0||C.deref)){if(C=Wm(C.key??C,O,{transaction:I,lazy:p?.length<4},this.isSync,q=>q),C?.then)return C.then($.bind(this));G=C?.value}if(y&&(C.metadataFlags&(cd|ld)||C.expiresAt&&C.expiresAt<Date.now())){let q=Qm(C.key??C,C,O);if(q?.then)return q.then($)}}if(G==null)return P?Va.SKIP:G;if(p&&!(p[0]==="*"&&p.length===1)){let q,ae=a((te,Be)=>{let le;typeof te=="object"?le=te.name:le=te;let $e=Wi?.[le],ne;if($e){let Z=N?.[le];if(Z)if(Z.hasMappings){let qe=$e.from?G[$e.from]:ds(C.key);ne=Z.get(qe),ne||(ne=[])}else ne=Z.fromRecord?.(G);else ne=$e(G,O,C);let ge=a(qe=>{if(qe&&typeof qe=="object"){let bs=$e.definition?.tableClass||Je;M||(M={});let Qi=M[le]||(M[le]=bs.transformEntryForSelect(le===te?null:te.select||(Array.isArray(te)?te:null),O,I,Z,b));if(Array.isArray(qe)){let Qe=[],jt=bs.transformToOrderedSelect(qe,te.select,typeof te.sort=="object"&&te.sort,O,I,Qi)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Dn=a(zt=>{for(;!zt.done;){if(zt?.then)return zt.then(Dn);Qe.push(zt.value),zt=jt.next()}Be(Qe,le)},"nextValue"),Ns=Dn(jt.next());Ns&&(q||(q=[]),q.push(Ns));return}else if(qe=Qi.call(this,qe),qe?.then){q||(q=[]),q.push(qe.then(Qe=>Be(Qe,le)));return}}Be(qe,le)},"handleResolvedValue");ne?.then?(q||(q=[]),q.push(ne.then(ge))):ge(ne);return}else ne=G[le],ne&&typeof ne=="object"&&le!==te&&(ne=Je.transformEntryForSelect(te.select||te,O,I,null)({value:ne}));Be(ne,le)},"selectAttribute"),Te;if(typeof p=="string")ae(p,te=>{Te=te});else if(Array.isArray(p))if(p.asArray)Te=[],p.forEach((te,Be)=>{te==="*"?p[Be]=G:ae(te,le=>Te[Be]=le)});else{Te={};let te=p.forceNulls;for(let Be of p)if(Be==="*")for(let le in G)Te[le]=G[le];else ae(Be,(le,$e)=>{le===void 0&&te&&(le=null),Te[$e]=le})}else throw new Rn.ClientError("Invalid select"+p);return q?Promise.all(q).then(()=>Te):Te}return G},"transform");return $}async subscribe(p){if(!l)throw new Error("Can not subscribe to a table without an audit log");h||Et({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),p||(p={});let O=!p.rawEvents,I=rk(Je,this[Ue]??null,function(y,M,$,C){try{let G=M.getValue?.(i,O);if(!G&&M.type==="patch"&&O){let q=i.getEntry(y);q?.version===M.version?G=q.value:G=M.getValue?.(i,!0,$),M.type="put"}this.send({id:y,timestamp:$,value:G,version:M.version,type:M.type,beginTxn:C})}catch(G){st.error(G)}},p.startTime||0,this[Kn]);this[Kn]&&(I.includeDescendants=!0,p.onlyChildren&&(I.onlyChildren=!0)),p.crossThreads===!1&&(I.crossThreads=!1),p.supportsTransactions&&(I.supportsTransactions=!0);let N=this[Ue],b=p.previousCount;b>1e3&&(b=1e3);let P=p.startTime;if(this[Kn]){if(P){if(b)throw new Rn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:M}of l.getRange({start:P,exclusiveStart:!0})){let $=kt(M);if($.tableId!==n)continue;let C=$.recordId;if(N==null||uk(N,C)){let G=$.getValue(i,O,y);I.send({id:C,timestamp:y,value:G,version:$.version,type:$.type})}I.startTime=y}}else if(b){let y=[];for(let{key:M,value:$}of l.getRange({start:"z",end:!1,reverse:!0}))try{let C=kt($);if(C.tableId!==n)continue;let G=C.recordId;if(N==null||uk(N,G)){let q=C.getValue(i,O,M);if(y.push({id:G,timestamp:M,value:q,version:C.version,type:C.type}),--b<=0)break}}catch(C){st.error("Error getting history entry",M,C)}for(let M=y.length;M>0;)I.send(y[--M]);y[0]&&(I.startTime=y[0].timestamp)}else if(!p.omitCurrent)for(let{key:y,value:M,version:$,localTime:C}of i.getRange({start:N??!1,end:N==null?void 0:[N,Ka.MAXIMUM_KEY],versions:!0}))M&&I.send({id:y,timestamp:C,value:M,version:$,type:"put"})}else{b&&!P&&(P=0);let y=this[gn]?.localTime;if(y===GS&&(i.cache?.delete(N),this[gn]=i.getEntry(N),st.trace("re-retrieved record",y,this[gn]?.localTime),y=this[gn]?.localTime),st.trace("Subscription from",P,"from",N,y),P<y){let M=[],$=y;do{let C=l.get($);if(C){p.omitCurrent=!0;let G=kt(C),q=G.getValue(i,O,$);O&&(G.type="put"),M.push({id:N,value:q,timestamp:$,...G}),$=G.previousLocalTime}else break;b&&b--}while($>P&&b!==0);for(let C=M.length;C>0;)I.send(M[--C]);I.startTime=y}!p.omitCurrent&&this.doesExist()&&I.send({id:N,timestamp:y,value:this,version:this[_d],type:"put"})}return p.listener&&I.on("data",p.listener),I}doesExist(){return!!(this[fe]||this[ad])}publish(p,O){this._writePublish(p,O)}_writePublish(p,O){let I=Jn(this[Ie]),N=this[Ue]||null;vl(N);let b=this[Ie];I.addWrite({key:N,store:i,entry:this[gn],nodeName:b?.nodeName,validate:()=>{b?.source||(I.checkOverloaded(),this.validate(p))},before:Me.publish?.bind(this,b,N,p),beforeIntermediate:Ge.publish?.bind(this,b,N,p),commit:(P,y,M)=>{y===void 0&&m&&!h&&zm(),R(N,y?.value??null,y,y?.version||P,0,!0,b,y?.expiresAt,"message",!1,p)}})}validate(p,O){let I,N=a((b,P,y)=>{if(P.type&&b!=null)if(O&&b.__op__&&(b=b.value),P.properties){typeof b!="object"&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be an object${P.type?" ("+P.type+")":""}`);let M=P.properties;for(let $=0,C=M.length;$<C;$++){let G=M[$],q=N(b[G.name],G,y+"."+G.name);q&&(b[G.name]=q)}if(P.sealed&&b!=null&&typeof b=="object")for(let $ in b)M.find(C=>C.name===$)||(I||(I=[])).push(`Property ${$} is not allowed within object in property ${y}`)}else switch(P.type){case"Int":(typeof b!="number"||b>>0!==b)&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof b!="number"||!(Math.floor(b)===b&&Math.abs(b)<=9007199254740992))&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(M=>typeof M=="string")||(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a string`);break;case"Boolean":typeof b!="boolean"&&(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a boolean`);break;case"Date":if(!(b instanceof Date)){if(typeof b=="string"||typeof b=="number")return new Date(b);(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof b!="bigint"){if(typeof b=="string"||typeof b=="number")return BigInt(b);(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a bigint`)}break;case"Bytes":b instanceof Uint8Array||(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(b)){if(P.elements)for(let M=0,$=b.length;M<$;M++){let C=b[M],G=N(C,P.elements,y+"[*]");G&&(b[M]=G)}}else(I||(I=[])).push(`Value ${ms(b)} in property ${y} must be a Buffer or Uint8Array`);break}P.nullable===!1&&b==null&&(I||(I=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let b=0,P=S.length;b<P;b++){let y=S[b];if(!y.relationship&&(!O||y.name in p)){let M=N(p[y.name],y,y.name);M&&(p[y.name]=M)}}if(d)for(let b in p)S.find(P=>P.name===b)||(I||(I=[])).push(`Property ${b} is not allowed`);if(I)throw new Rn.ClientError(I.join(". "))}getUpdatedTime(){return this[_d]}wasLoadedFromSource(){return L?!!this[oN]:void 0}static async addAttributes(p){let O=S.slice(0);for(let I of p){if(!I.name)throw new Rn.ClientError("Attribute name is required");if(I.name.match(/[`/]/))throw new Rn.ClientError("Attribute names cannot include backticks or forward slashes");O.push(I)}return Et({table:s,database:c,schemaDefined:_,attributes:O}),Je.indexingOperation}static async removeAttributes(p){let O=S.filter(I=>!p.includes(I.name));return Et({table:s,database:c,schemaDefined:_,attributes:O}),Je.indexingOperation}static getRecordCount(p){let O=i.getStats().entryCount,I=5e3,N=1e3,b;O>I&&!p?.exactCount&&(b=N);let P=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:b}))y!=null&&P++;if(b){let y=P;P=0;for(let{value:Be}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:b}))Be!=null&&P++;let M=b*2,$=(P+y)/M,C=Math.pow((P-y+1)/b/2,2)+$*(1-$)/M,G=Math.max(Math.sqrt(C)*O,1),q=Math.round($*O),ae=Math.max(q-1.96*G,0),Te=Math.min(q+1.96*G,O),te=Math.pow(10,Math.round(Math.log10(G)));return te>q&&(te=te/10),P=Math.round(q/te)*te,{recordCount:P,estimatedRange:[Math.round(ae),Math.round(Te)]}}return{recordCount:P}}static updatedAttributes(){Wi=this.propertyResolvers={$id:(p,O,I)=>({value:I.key}),$updatedtime:(p,O,I)=>I.version,$record:(p,O,I)=>I?{value:p}:p};for(let p of this.attributes){p.resolve=null;let O=p.relationship;if(O)if(p.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),ay=!0,O.to)p.elements?.definition?(Wi[p.name]=p.resolve=(I,N,b)=>{let P=I[O.from?O.from:t],y=p.elements.definition.tableClass;return b?tl({attribute:O.to,value:P},Jn(N).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:O.to,value:P}],N).asArray},p.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},p.resolve.definition=p.elements.definition,O.from&&(p.resolve.from=O.from)):console.error(`The one-to-many/many-to-many relationship property "${p.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(O.from){let I=p.definition||p.elements?.definition;I?(Wi[p.name]=p.resolve=(N,b,P)=>{let y=N[O.from];if(y!==void 0){if(p.elements){let M,$=y.map(C=>{let G=P?I.tableClass.primaryStore.getEntry(C,{transaction:Jn(b).getReadTxn()}):I.tableClass.get(C,b);return G?.then&&(M=!0),G});return O.filterMissing?M?Promise.all($).then(C=>C.filter(_k)):$.filter(_k):M?Promise.all($):$}return P?I.tableClass.primaryStore.getEntry(y,{transaction:Jn(b).getReadTxn()}):I.tableClass.get(y,b)}},p.set=(N,b)=>{if(Array.isArray(b)){let P=b.map(y=>y[Ue]||y[I.tableClass.primaryKey]);N[O.from]=P}else{let P=b[Ue]||b[I.tableClass.primaryKey];N[O.from]=P}},p.resolve.definition=p.definition||p.elements?.definition,p.resolve.from=O.from):console.error(`The relationship property "${p.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${p.name}" in table "${s}" must use either "from" or "to" arguments`)}Jp(this,this)}static async deleteHistory(p=0){let O;for(let{key:I,value:N}of l.getRange({start:0,end:p}))await ud(),kt(N).tableId===n&&(O=l.remove(I));await O}static async*getHistory(p=0,O=1/0){for(let{key:I,value:N}of l.getRange({start:p,end:O})){await ud();let b=kt(N);b.tableId===n&&(yield{id:b.recordId,localTime:I,version:b.version,type:b.type,value:b.getValue(i,!0,I),user:b.user})}}static async getHistoryOfRecord(p){let O=[];if(p==null)throw new Error("An id is required");let I=i.getEntry(p);if(!I)return O;let N=I.localTime;if(!N)throw new Error("The entry does not have a local audit time");let b=0;do{await ud();let P=l.get(N);if(P){let y=kt(P);O.push({id:y.recordId,localTime:N,version:y.version,type:y.type,value:y.getValue(i,!0,N),user:y.user}),N=y.previousLocalTime}else break}while(b<1e3&&N);return O.reverse()}static cleanup(){z?.remove()}}Je.updatedAttributes();let WV=Je.prototype;return WV[aue]=!0,f&&Je.setTTLExpiration(f/1e3),j&&QV(),Je;function Fd(W,p,O){let I;for(let N in r){let b=r[N],P=b.isIndexing,y=O?.[N],M=p?.[N];if(y===M&&!P)continue;I=!0;let $=b.indexNulls,C=(0,dd.getIndexedValues)(y,$),G=(0,dd.getIndexedValues)(M,$);if(G?.length>0){let q=new Set(G);if(C=C?C.filter(ae=>{if(q.has(ae))q.delete(ae);else return!0}):[],G=Array.from(q),(G.length>0||C.length>0)&&ok){let ae=G.concat(C).map(Te=>({key:Te,value:W}));b.prefetch(ae,lk)}for(let ae=0,Te=G.length;ae<Te;ae++)b.remove(G[ae],W)}else C?.length>0&&ok&&b.prefetch(C.map(q=>({key:q,value:W})),lk);if(C)for(let q=0,ae=C.length;q<ae;q++)b.put(C[q],W)}return I}a(Fd,"updateIndices");function vl(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>ck)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)return!0;break;case"bigint":if(W<2n**64n&&W>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,Ka.writeKey)(W,lue,0)>ck)throw new Error("Primary key size is too large: "+W.length);return!0}a(vl,"checkValidId");function Wm(W,p,O,I,N){let b=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),O.transaction?.isDone)return N(null,W);let P=i.getEntry(W,O);return P&&p&&(P?.version>(p.lastModified||0)&&(p.lastModified=P.version),P?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=P.localTime)),N(P,W)},"whenPrefetched");return I?b():ue>0?(ue--,b()):new Promise((P,y)=>{ue===0?(ue--,i.prefetch([W],()=>{M(),$()})):(J.push(W),Se.push($),J.length>KV&&(ue--,M()));function M(){if(J.length>0){let C=Se;i.prefetch(J,()=>{ue===-1?M():ue++;for(let G of C)G()}),J=[],Se=[],Ee>2&&Ee--}else ue=Ee,Ee<YV&&Ee++}a(M,"prefetch");function $(){try{P(b())}catch(C){y(C)}}a($,"load")})}a(Wm,"loadLocalRecord");function kd(W){if(!W?.role)return;let p=W.role.permission;if(p.super_user)return uue;let O=p[c],I,N=O?.tables;if(N)return N[s];if(c==="data"&&(I=p[s])&&!I.tables)return I}a(kd,"getTablePermissions");function Qm(W,p,O,I){if(L){let N;if(O.noCache?N=!0:(p?(!p.value||p.metadataFlags&(cd|ld)||p.expiresAt&&p.expiresAt<Date.now())&&(N=!0):N=!0,_n(!N,"cache-hit",s)),N){let b=ly(W,p,O).then(P=>(P?.value?.[fe]&&st.error("Can not assign a record with a record property"),O&&(P?.version>(O.lastModified||0)&&(O.lastModified=P.version),O.lastRefreshed=Date.now()),P));if(O?.onlyIfCached||p?.value&&I?.allowStaleWhileRevalidate?.(p,W)){if(b.catch(P=>st.warn(P)),O?.onlyIfCached&&!I.doesExist())throw new Rn.ServerError("Entry is not cached",504);return}else return b}}}a(Qm,"ensureLoadedFromSource");function Jn(W){let p=W?.transaction;if(p){if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let O=p.next;if(!O)return p=p.next=new _a,p.lmdbDb=i,p;p=O}while(!0)}else return new eE}a(Jn,"txnForContext");function jm(W,p,O){if(!W)return;Ym=W;let I=W.value||W.deref?.()||(Ym=i.getEntry(W.key))?.value;if(typeof p=="object"){let b=Wi,P=I;for(let y=0,M=p.length;y<M;y++){let $=p[y],C=b?.[$];P=C&&P?C(P,O,!0)?.value:P?.[$],b=C?.definition?.tableClass?.propertyResolvers}return P}let N=Wi[p];return N?N(I,O):I[p]}a(jm,"getAttributeValue");function cy(W,p,O,I,N){let b=N?.length,P={transaction:I,lazy:b>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},y;function M($,C){let G=$?.value;if(!G)return Va.SKIP;for(let q=0;q<b;q++)if(!y?.includes(q)&&!N[q](G,$))return Va.SKIP;return C!==void 0&&($.key=C),$}if(a(M,"processEntry"),b>0||!W.hasEntries){let $=W.map(C=>{if(y=null,typeof C=="object"&&C?.key!==void 0)return b>0?M(C):C;if(C==null)return Va.SKIP;for(let G=0;G<b;G++){let ae=N[G].idFilter;if(ae){if(!ae(C))return Va.SKIP;y||(y=[]),y.push(G)}}return Wm(C,O,P,!1,M)});return Array.isArray(W)&&($=$.filter(C=>C!==Va.SKIP)),$.hasEntries=!0,$}return W}a(cy,"transformToEntries");async function ly(W,p,O){let I=p?.metadataFlags,N=p?.version,b,P;if(!i.attemptLock(W,N,()=>{clearTimeout(P);let C=i.getEntry(W);!C||!C.value||C.metadataFlags&(cd|ld)?b(ly(W,i.getEntry(W),O)):b(C)}))return new Promise(C=>{b=C,P=setTimeout(()=>{i.unlock(W,N)},oue)});let y=p?.value,M={requestContext:O,replacingRecord:y,replacingVersion:N,source:null,resourceCache:O?.resourceCache},$=O?.responseHeaders;return new Promise((C,G)=>{let q;cN(Ze(M,async ae=>{let Te=performance.now(),te,Be,le;try{for(let ge of Je.sources)if(ge.get&&(!ge.get.reliesOnPrototype||ge.prototype.get)&&(M.source=ge,te=await ge.get(W,M),te))break;le=I&cd;let ne=M.lastModified||le&&N;Be=le||ne>N||!y,ne||(ne=(0,dd.getNextMonotonicTime)());let Z=performance.now()-Te;if(un(Z,"cache-resolution",s),$&&PA($,"Server-Timing",`cache-resolve;dur=${Z.toFixed(2)}`,!0),ae.timestamp=ne,f&&!M.expiresAt&&(M.expiresAt=Date.now()+f),te){if(typeof te!="object")throw new Error("Only objects can be cached and stored in tables");typeof te.toJSON=="function"&&(te=te.toJSON()),t&&te[t]!==W&&(te[t]=W)}q=!0,C({version:ne,value:te})}catch(ne){ne.message+=` while resolving record ${W} for ${s}`,y&&((ne.code==="ECONNRESET"||ne.code==="ECONNREFUSED"||ne.code==="EAI_AGAIN")&&!O?.mustRevalidate||O?.staleIfError&&(ne.statusCode===500||ne.statusCode===502||ne.statusCode===503||ne.statusCode===504))?(C({version:N,value:y}),st.trace(ne.message,"(returned stale record)")):G(ne),M.transaction.abort();return}if(O?.noCacheStore){M.transaction.abort();return}Jn(M).addWrite({key:W,store:i,entry:p,nodeName:"source",commit:(ne,Z)=>{if(Z?.version!==N)return;let ge=Fd(W,y,te);te?(Ge.put?.(M,W,te),R(W,te,Z,ne,0,h&&Be||null,M,M.expiresAt,"put",!!le)):(Ge.delete?.(M,W),h||m?R(W,null,Z,ne,0,h&&Be||null,M,0,"delete",!!le):i.remove(W,N))}})}),()=>{i.unlock(W,N)},ae=>{i.unlock(W,N),q&&st.error("Error committing cache update",ae)})})}a(ly,"getFromSource");function zm(){if(Ft!==qd&&(qd=Ft,(0,Ya.getWorkerIndex)()===(0,Ya.getWorkerCount)()-1)){if(xd&&clearTimeout(xd),!Ft)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let p=Math.ceil((Date.now()-W.getTime())/Ft)*Ft+W.getTime(),O=a(I=>{st.trace(`Scheduled next cleanup scan at ${new Date(I)}ms`),xd=setTimeout(()=>v=v.then(async()=>{if(O(Math.max(I+Ft,Date.now())),i.rootStore.status!=="open"){clearTimeout(xd);return}let N=50,b=new Array(N),P=0;st.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:M,value:$,version:C,expiresAt:G}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let q;$===null&&!h&&C+iue<Date.now()?q=i.remove(M,C):G&&G+E<Date.now()&&(q=Je.evict(M,$,C),y++),q&&(await b[P],b[P]=q.catch(ae=>{st.error("Cleanup error",ae)}),++P>=N&&(P=0)),await ud()}st.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){st.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");O(p)}}a(zm,"scheduleCleanup");function uy(){z=l?.addDeleteRemovalCallback(n,W=>{let p=i.getEntry(W);p?.value===null&&i.remove(W,p.version)})}a(uy,"addDeleteRemoval");function QV(){(0,Ya.getWorkerIndex)()===0&&setInterval(async()=>{if(!Km){Km=!0;try{let W=j.name,p=r[W];if(!p)throw new Error(`expiresAt attribute ${j} must be indexed`);for(let O of p.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let I of p.getValues(O)){let N=i.getEntry(I);N?.value?N.value[W]<Date.now()&&Je.evict(I,N.value,N.version):i.ifVersion(I,N?.version,()=>p.remove(O,I))}await ud()}}catch(W){st.error("Error in evicting old records",W)}finally{Km=!1}}},sue).unref()}a(QV,"runRecordExpirationEviction")}function aN(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function lk(){}function _ue(e){fk=e}function tm(e,t){let r=t?.type;return e===null?e:e===""&&r&&r!=="String"&&r!=="Any"?null:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Boolean"?e==="true"?!0:e==="false"?!1:e:r==="Date"?isNaN(e)?e==="null"?null:(due.test(e)||(e+="Z"),new Date(e)):new Date(+e):!r||r==="Any"?(0,nm.autoCast)(e):e}function uk(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 n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function cN(e,t,r){return e?.then?e.then(t,r):t(e)}function rm(e,t){e[gn]=t,e[fe]=t?.value??null,e[_d]=t?.version}function _k(e){return e!=null}function ms(e){try{return JSON.stringify(e)}catch{return e}}var Ss,Va,dd,dk,hd,Rn,fd,Ed,st,Ka,Ya,nm,nue,fk,sue,iue,ok,oue,_d,aue,gn,ad,ak,cue,oN,Rl,cd,ld,lue,ck,uue,xye,due,ud,sp=be(()=>{Ss=B(D()),Va=require("lmdb"),dd=B(Or()),dk=require("lodash");es();Pg();hd=B(X());ik();Rn=B(oe()),fd=B(di()),Ed=B(is());Re();Vh();st=B(x());nE();da();Ka=require("ordered-binary"),Ya=B(et());eo();nm=B(K());nu();pi();Vp();b_();nue=new Uint8Array(9);nue[8]=192;sue=6e4,iue=864e5;hd.initSync();ok=hd.get(Ss.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),oue=1e4,_d=Symbol.for("version"),aue=Symbol.for("incremental-update"),gn=Symbol("entry"),ad=Symbol("is-saving"),ak=1,cue=2,oN=Symbol("loaded-from-source"),Rl={isNotification:!0,ensureLoaded:!1},cd=1,ld=8,lue=Buffer.allocUnsafeSlow(8192),ck=1978,uue={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},xye=(0,nm.convertToMS)(hd.get(Ss.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(sm,"makeTable");a(aN,"attributesAsObject");a(lk,"noop");a(_ue,"setServerUtilities");due=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(tm,"coerceType");a(uk,"isDescendantId");ud=a(()=>new Promise(setImmediate),"rest");a(cN,"when");a(rm,"updateResource");a(_k,"exists");a(ms,"stringify")});var ke={};Fe(ke,{database:()=>Mu,databases:()=>lt,dropDatabase:()=>Hg,dropTableMeta:()=>mue,getDatabases:()=>Lr,getDefaultCompression:()=>fh,getTables:()=>fue,onUpdatedTable:()=>yb,readMetaDb:()=>pd,resetDatabases:()=>m_,table:()=>Et,tables:()=>en});function fue(){return lm||Lr(),en||{}}function Lr(){if(lm)return lt;lm=!0,bl=new Map;let e=(0,gt.getHdbBasePath)()&&(0,it.join)((0,gt.getHdbBasePath)(),qt.DATABASES_DIR_NAME),t=(0,gt.get)(qt.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,gt.get)(qt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,An.existsSync)(e)?e:(0,it.join)((0,gt.getHdbBasePath)(),qt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,An.existsSync)(e))for(let r of(0,An.readdirSync)(e,{withFileTypes:!0})){let n=(0,it.basename)(r.name,".mdb");r.isFile()&&(0,it.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&pd((0,it.join)(e,r.name),null,n)}if((0,An.existsSync)((0,Ol.getBaseSchemaPath)())){for(let r of(0,An.readdirSync)((0,Ol.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,it.join)((0,Ol.getBaseSchemaPath)(),r.name),s=(0,it.join)((0,Ol.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,An.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,it.extname)(i.name).toLowerCase()===".mdb"){let o=(0,it.join)(s,i.name);pd((0,it.join)(n,i.name),(0,it.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,An.existsSync)(s))for(let o of(0,An.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,it.extname)(o.name).toLowerCase()===".mdb"&&pd((0,it.join)(s,o.name),(0,it.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,it.join)(c.path,(0,it.basename)(o+".mdb"));(0,An.existsSync)(l)&&pd(l,o,r,null,!0)}}for(let r in lt){let n=bl.get(r);if(n){let s=lt[r];r.includes("delete")&&Wn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Wn.trace(`delete table class ${i}`),delete s[i])}else if(delete lt[r],r==="data"){for(let s in en)delete en[s];delete en[_m]}}return bl=null,lt}}function m_(){lm=!1;for(let[,e]of Mo)e.needsDeletion=!0;Lr();for(let[e,t]of Mo)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Mo.delete(e));return lt}function pd(e,t,r=_N,n,s){let i=new lN.default(e,!1);try{let o=Mo.get(e);o?o.needsDeletion=!1:(o=(0,om.open)(i),Mo.set(e,o));let c=new Wa.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(im.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,An.existsSync)(n)&&(i.path=n,_=(0,om.open)(i),_.isLegacy=!0):_=$p(o));let u=mk(r),d=u[_m],f=new Map;for(let{key:E,value:h}of l.getRange({start:!1})){let[m,S]=E.toString().split("/");S===""?S=h.name:S||(S=m,m=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(m);let R=f.get(m);R||f.set(m,R={attributes:[]}),(S==null||h.is_hash_attribute)&&(R.primary=h),S!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:m,primary:S}=h;if(!S){for(let J of m)if(J.is_hash_attribute||J.isPrimaryKey){S=J;break}if(!S){Wn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(m)}`);continue}}let R=u[E],T={},A=[],L,U,v=typeof S.audit=="boolean"?S.audit:(0,gt.get)(qt.CONFIG_PARAMS.LOGGING_AUDITLOG),k=S.trackDeletes,H=S.expiration,j=S.eviction,z=S.sealed;if(R)T=R.indices,A=R.attributes,R.schemaVersion++;else{L=S.tableId,L?L>=(l.get(Al)||0)&&l.putSync(Al,L+1):(S.tableId=L=l.get(Al),L||(L=1),l.putSync(Al,L+1),l.putSync(S.key,S));let J=new Wa.default(!S.is_hash_attribute,S.is_hash_attribute);if(J.compression=S.compression,J.compression){let Se=(0,gt.get)(qt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||pk;J.compression.threshold=Se}U=cf(o.openDB(S.key,J)),U.rootStore=o,U.tableId=L}for(let J of m){J.attribute=J.name;try{if(!J.is_hash_attribute&&(J.indexed||J.attribute&&!J.name)){if(!T[J.name]){let ue=new Wa.default(!J.is_hash_attribute,J.is_hash_attribute);T[J.name]=o.openDB(J.key,ue),T[J.name].indexNulls=J.indexNulls}let Se=A.find(ue=>ue.name===J.name);Se?A.splice(A.indexOf(Se),1,J):A.push(J)}}catch(Se){Wn.error("Error trying to update attribute",J,A,T,Se)}}if(!R){R=Sk(u,E,sm({primaryStore:U,auditStore:_,audit:v,sealed:z,expirationMS:H&&H*1e3,evictionMS:j&&j*1e3,trackDeletes:k,tableName:E,tableId:L,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:T,attributes:m,schemaDefined:S.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let J of dN)J(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function mk(e){let t=lt[e];if(t||(e==="data"?t=lt[e]=en:e==="system"?Object.defineProperty(lt,"system",{value:t=Object.create(null),configurable:!0}):t=lt[e]=Object.create(null)),bl&&!bl.has(e)){let r=new Set;t[_m]=r,bl.set(e,r)}return t}function Sk(e,t,r){return e[t]=r,r}function Mu({database:e,table:t}){e||(e=_N),Lr();let r=mk(e),n=(0,it.join)((0,gt.getHdbBasePath)(),qt.DATABASES_DIR_NAME),s=(0,gt.get)(qt.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,gt.get)(qt.CONFIG_PARAMS.STORAGE_PATH)||((0,An.existsSync)(n)?n:(0,it.join)((0,gt.getHdbBasePath)(),qt.LEGACY_DATABASES_DIR_NAME));let o=(0,it.join)(n,(i?t:e)+".mdb"),c=Mo.get(o);if(!c){let l=new lN.default(o,!1);c=(0,om.open)(l),Mo.set(o,c)}return c}async function Hg(e){if(!lt[e])throw new Error("Schema does not exist");let t=lt[e];for(let r in t){let s=t[r].primaryStore.rootStore;Mo.delete(s.path),s.status==="open"&&(await s.close(),await um.remove(s.path))}if(e==="data"){for(let r in en)delete en[r];delete en[_m]}delete lt[e]}function Et({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:l,schemaDefined:_,origin:u}){t||(t=_N);let d=Mu({database:t,table:e}),f=lt[t],E=f?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,m,S,R;_==null&&(_=!0);let T=new Wa.default(!1);for(let H of i)H.attribute?(H.name=H.attribute,H.indexed=!0):H.attribute=H.name,H.expiresAt&&(H.indexed=!0);let A,L;if(E){if(h=E.primaryKey,E.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);E.attributes.splice(0,E.attributes.length,...i)}else{let H=d.auditStore;H||(H=$p(d)),m=i.find(Se=>Se.isPrimaryKey)||{},h=m.name,m.is_hash_attribute=!0,m.schemaDefined=_,m.compression=fh(),l&&(m.trackDeletes=!0),o=m.audit=typeof o=="boolean"?o:(0,gt.get)(qt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(m.expiration=r),n&&(m.eviction=n),typeof c=="boolean"&&(m.sealed=c),u&&(m.origins?m.origins.includes(u)||m.origins.push(u):m.origins=[u]),Wn.trace(`${e} table loading, opening primary store`);let j=new Wa.default(!1,!0);j.compression=m.compression;let z=e+"/",J=cf(d.openDB(z,j));J.rootStore=d,R=d.dbisDb=d.openDB(im.INTERNAL_DBIS_NAME,T),J.tableId=R.get(Al),J.tableId||(J.tableId=1),R.putSync(Al,J.tableId+1),m.tableId=J.tableId,E=Sk(f,e,sm({primaryStore:J,auditStore:H,audit:o,sealed:c,trackDeletes:l,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:J.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:R})),E.schemaVersion=1,A=!0,k(),R.put(z,m)}S=E.indices,R=R||(d.dbisDb=d.openDB(im.INTERNAL_DBIS_NAME,T)),E.dbisDB=R;let U=[];for(let{key:H,value:j}of R.getRange({start:!0})){let[z,J]=H.toString().split("/");if(J===""&&(J=j.name),J){if(z!==e)continue}else J=z;if(!i.find(ue=>ue.name===J)?.indexed&&j.indexed&&!j.isPrimaryKey){k(),A=!0,R.remove(H);let ue=E.indices[z];ue&&U.push(ue)}}let v=[];try{for(let H of i||[]){if(H.relationship)continue;let j=e+"/"+(H.name||"");Object.defineProperty(H,"key",{value:j,configurable:!0});let z=R.get(j);if(H.isPrimaryKey){if(z=z||R.get(j=e+"/")||{},o!==E.audit||c!==c||(+r||void 0)!==(+z.expiration||void 0)||(+n||void 0)!==(+z.eviction||void 0)){let Se=Object.assign({},z);typeof o=="boolean"&&(o&&E.enableAuditing(o),Se.audit=o),r&&(Se.expiration=+r),n&&(Se.eviction=+n),c!==void 0&&(Se.sealed=c),A=!0,k(),R.put(j,Se)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let J=!z||z.type!==H.type||z.indexed!==H.indexed||z.nullable!==H.nullable||JSON.stringify(z.attributes)!==JSON.stringify(H.attributes)||JSON.stringify(z.elements)!==JSON.stringify(H.elements);if(H.indexed){let Se=new Wa.default(!0,!1),ue=d.openDB(j,Se);(J||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<md.workerData?.restartNumber)&&(A=!0,k(),z=R.get(j),(J||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<md.workerData?.restartNumber)&&(A=!0,H.indexNulls===void 0&&(H.indexNulls=!0),E.primaryStore.getStats().entryCount>0&&(H.lastIndexedKey=z?.lastIndexedKey||!1,H.indexingPID=process.pid,ue.isIndexing=!0,Object.defineProperty(H,"dbi",{value:ue}),v.push(H))),R.put(j,H)),z?.indexNulls&&H.indexNulls===void 0&&(H.indexNulls=!0),ue.indexNulls=H.indexNulls,S[H.name]=ue}else J&&(A=!0,k(),R.put(j,H))}}finally{L&&L()}if(A&&(E.schemaVersion++,E.updatedAttributes()),Wn.trace(`${e} table loading, running index`),v.length>0||U.length>0?E.indexingOperation=pue(E,v,U):A&&am.signalSchemaChange(new cm.SchemaEventMsg(process.pid,"schema-change",E.databaseName,E.tableName)),E.origin=u,A)for(let H of dN)H(E,u!=="cluster");return(r||n||s)&&E.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),Wn.trace(`${e} table loaded`),E;function k(){L||d.transactionSync(()=>({then(H){L=H}}))}a(k,"startTxn")}async function pue(e,t,r){try{let n=e.schemaVersion;await am.signalSchemaChange(new cm.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let l of r)s=l.drop();let i,o=0,c=t.length;if(await new Promise(l=>setImmediate(l)),c>0){let l=0;for(let{key:_,value:u,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(u){if(l++,s=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,m=(0,Ek.getIndexedValues)(u[h]);if(m)for(let S=0,R=m.length;S<R;S++)E.dbi.put(m[S],_)}}),s.then(()=>l--,f=>{l--,Wn.error(f)}),md.workerData&&md.workerData.restartNumber!==hk.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}l>Eue?await s:l>hue&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await am.signalSchemaChange(new cm.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){Wn.error("Error in indexing",n)}}function mue({table:e,database:t}){let r=Mu({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function yb(e){dN.push(e)}function fh(){let e=(0,gt.get)(qt.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,gt.get)(qt.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,gt.get)(qt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||pk,n={startingOffset:32};return t&&(n.dictionary=um.readFileSync(t)),r&&(n.threshold=r),e&&n}var gt,im,om,it,An,Ol,Wa,lN,qt,um,uN,Ek,am,cm,md,Wn,hk,_N,_m,pk,en,lt,Al,dN,lm,Mo,bl,Eue,hue,Re=be(()=>{gt=B(X()),im=B(at()),om=require("lmdb"),it=require("path"),An=require("fs"),Ol=B(je());sp();Wa=B(su()),lN=B(iu()),qt=B(D()),um=B(require("fs-extra")),uN=require("../index"),Ek=B(Or()),am=B(di()),cm=B(is()),md=require("worker_threads"),Wn=B(x()),hk=B(et());eo();nu();_N="data",_m=Symbol("defined-tables"),pk=((0,gt.get)(qt.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,gt.initSync)();en=Object.create(null),lt=Object.create(null);(0,uN._assignPackageExport)("databases",lt);(0,uN._assignPackageExport)("tables",en);Al=Symbol.for("next-table-id"),dN=[],Mo=new Map;a(fue,"getTables");a(Lr,"getDatabases");a(m_,"resetDatabases");a(pd,"readMetaDb");a(mk,"ensureDB");a(Sk,"setTable");a(Mu,"database");a(Hg,"dropDatabase");a(Et,"table");Eue=1e3,hue=10;a(pue,"runIndexing");a(mue,"dropTableMeta");a(yb,"onUpdatedTable");a(fh,"getDefaultCompression")});var K=g((jye,Pk)=>{"use strict";var Uo=require("path"),Ok=require("fs-extra"),Kr=x(),Tk=require("fs-extra"),dm=require("os"),Sue=require("net"),Tue=require("recursive-iterator"),ft=D(),gue=lS(),gk=require("papaparse"),fm=require("moment"),{inspect:Rue}=require("util"),Rk=require("is-number"),Qye=require("lodash"),Aue=require("minimist"),Oue=require("https"),bue=require("http"),{hdb_errors:Em}=oe(),Nue=/^((\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)))$/,bk=require("util").promisify(setTimeout),yue=100,Iue=5,wue="",Cue=4,Ak={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Pk.exports={isEmpty:On,isEmptyOrZeroLength:Ws,arrayHasEmptyValues:Pue,arrayHasEmptyOrZeroLengthValues:Mue,buildFolderPath:Uue,isBoolean:Nk,errorizeMessage:Due,stripFileExtension:Bue,autoCast:Hue,autoCastJSON:yk,autoCastJSONDeep:EN,removeDir:Gue,compareVersions:que,isCompatibleDataVersion:xue,escapeRawValue:Fue,unescapeValue:kue,stringifyProps:$ue,timeoutPromise:Yue,isClusterOperation:Wue,getClusterUser:jue,checkGlobalSchemaTable:Que,getHomeDir:wk,getPropsFilePath:Vue,promisifyPapaParse:zue,removeBOM:Ck,createEventPromise:Jue,checkProcessRunning:Xue,checkSchemaTableExist:Zue,checkSchemaExists:Dk,checkTableExists:Lk,getStartOfTomorrowInSeconds:e_e,getLimitKey:t_e,isObject:vue,isNotEmptyAndHasValue:Lue,autoCasterIsNumberCheck:Ik,backtickASTSchemaItems:r_e,isPortTaken:Kue,createForkArgs:n_e,autoCastBoolean:s_e,async_set_timeout:bk,getTableHashAttribute:i_e,doesSchemaExist:o_e,doesTableExist:a_e,stringifyObj:c_e,ms_to_time:l_e,changeExtension:u_e,getEnvCliRootPath:hN,noBootFile:__e,httpRequest:d_e,transformReq:f_e,convertToMS:E_e,PACKAGE_ROOT:ft.PACKAGE_ROOT};function Due(e){return e instanceof Error?e:new Error(e)}a(Due,"errorizeMessage");function On(e){return e==null}a(On,"isEmpty");function Lue(e){return!On(e)&&(e||e===0||e===""||Nk(e))}a(Lue,"isNotEmptyAndHasValue");function Ws(e){return On(e)||e.length===0||e.size===0}a(Ws,"isEmptyOrZeroLength");function Pue(e){if(On(e))return!0;for(let t=0;t<e.length;t++)if(On(e[t]))return!0;return!1}a(Pue,"arrayHasEmptyValues");function Mue(e){if(Ws(e))return!0;for(let t=0;t<e.length;t++)if(Ws(e[t]))return!0;return!1}a(Mue,"arrayHasEmptyOrZeroLengthValues");function Uue(...e){try{return e.join(Uo.sep)}catch{console.error(e)}}a(Uue,"buildFolderPath");function Nk(e){return On(e)?!1:e===!0||e===!1}a(Nk,"isBoolean");function vue(e){return On(e)?!1:typeof e=="object"}a(vue,"isObject");function Bue(e){return Ws(e)?wue:e.slice(0,-Cue)}a(Bue,"stripFileExtension");function Hue(e){return On(e)||e===""||typeof e!="string"?e:Ak[e]!==void 0?Ak[e]:Ik(e)===!0?Number(e):Nue.test(e)?new Date(e):e}a(Hue,"autoCast");function yk(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(yk,"autoCastJSON");function EN(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let n=e[t],s=EN(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=EN(r);n!==r&&(e[t]=n)}return e}else return yk(e)}a(EN,"autoCastJSONDeep");function Ik(e){if(e.startsWith("0.")&&Rk(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Rk(e))}a(Ik,"autoCasterIsNumberCheck");async function Gue(e){if(Ws(e))throw new Error(`Directory path: ${e} does not exist`);try{await Tk.emptyDir(e),await Tk.remove(e)}catch(t){throw Kr.error(`Error removing files in ${e} -- ${t}`),t}}a(Gue,"removeDir");function que(e,t){if(Ws(e)){Kr.info("Invalid current version sent as parameter.");return}if(Ws(t)){Kr.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let _=0;_<l;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(que,"compareVersions");function xue(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(xue,"isCompatibleDataVersion");function Fue(e){if(On(e))return e;let t=String(e);return t==="."?ft.UNICODE_PERIOD:t===".."?ft.UNICODE_PERIOD+ft.UNICODE_PERIOD:t.replace(ft.FORWARD_SLASH_REGEX,ft.UNICODE_FORWARD_SLASH)}a(Fue,"escapeRawValue");function kue(e){if(On(e))return e;let t=String(e);return t===ft.UNICODE_PERIOD?".":t===ft.UNICODE_PERIOD+ft.UNICODE_PERIOD?"..":String(e).replace(ft.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(kue,"unescapeValue");function $ue(e,t){if(On(e))return Kr.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+dm.EOL}!Ws(n)&&n[0]===";"?r+=" "+n+s+dm.EOL:Ws(n)||(r+=n+"="+s+dm.EOL)}catch{Kr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a($ue,"stringifyProps");function wk(){let e;try{e=dm.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(wk,"getHomeDir");function Vue(){let e=Uo.join(wk(),ft.HDB_HOME_DIR_NAME,ft.BOOT_PROPS_FILE_NAME);return Ok.existsSync(e)||(e=Uo.join(__dirname,"../","hdb_boot_properties.file")),e}a(Vue,"getPropsFilePath");function Yue(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(Yue,"timeoutPromise");async function Kue(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=Sue.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(Kue,"isPortTaken");function Wue(e){try{return ft.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Kr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Wue,"isClusterOperation");function Que(e,t){let r=(Re(),ie(ke)).getDatabases();if(!r[e])return Em.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Em.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Que,"checkGlobalSchemaTable");function jue(e,t){if(On(t)){Kr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(On(e)||Ws(e)){Kr.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){Kr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Kr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(jue,"getClusterUser");function zue(){gk.parsePromise=function(e,t,r){return new Promise(function(n,s){gk.parse(e,{header:!0,transformHeader:Ck,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(zue,"promisifyPapaParse");function Ck(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Ck,"removeBOM");function Jue(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Kr.info(`Got cluster status event response: ${Rue(s)}`);try{i.cancel()}catch{Kr.error("Error trying to cancel timeout.")}n(s)})})}a(Jue,"createEventPromise");async function Xue(e){let t=!0,r=0;do await bk(yue*r++),(await gue.findPs(e)).length>0&&(t=!1);while(t&&r<Iue);if(t)throw new Error(`process ${e} was not started`)}a(Xue,"checkProcessRunning");function Zue(e,t){let r=Dk(e);if(r)return r;let n=Lk(e,t);if(n)return n}a(Zue,"checkSchemaTableExist");function Dk(e){let{getDatabases:t}=(Re(),ie(ke));if(!t()[e])return Em.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Dk,"checkSchemaExists");function Lk(e,t){let{getDatabases:r}=(Re(),ie(ke));if(!r()[e][t])return Em.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Lk,"checkTableExists");function e_e(){let e=fm().utc().add(1,ft.MOMENT_DAYS_TAG).startOf(ft.MOMENT_DAYS_TAG).unix(),t=fm().utc().unix();return e-t}a(e_e,"getStartOfTomorrowInSeconds");function t_e(){return fm().utc().format("DD-MM-YYYY")}a(t_e,"getLimitKey");function r_e(e){try{let t=new Tue(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){Kr.error("Got an error back ticking items."),Kr.error(t)}}a(r_e,"backtickASTSchemaItems");function n_e(e){return[e]}a(n_e,"createForkArgs");function s_e(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(s_e,"autoCastBoolean");function i_e(e,t){let{getDatabases:r}=(Re(),ie(ke)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(i_e,"getTableHashAttribute");function o_e(e){let{getDatabases:t}=(Re(),ie(ke));return t()[e]!==void 0}a(o_e,"doesSchemaExist");function a_e(e,t){let{getDatabases:r}=(Re(),ie(ke));return r()[e]?.[t]!==void 0}a(a_e,"doesTableExist");function c_e(e){try{return JSON.stringify(e)}catch{return e}}a(c_e,"stringifyObj");function l_e(e){let t=fm.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(l_e,"ms_to_time");function u_e(e,t){let r=Uo.basename(e,Uo.extname(e));return Uo.join(Uo.dirname(e),r+t)}a(u_e,"changeExtension");function hN(){if(process.env[ft.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[ft.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Aue(process.argv);if(e[ft.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[ft.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(hN,"getEnvCliRootPath");var fN;function __e(){if(fN)return fN;let e=hN();if(hN()&&Ok.pathExistsSync(Uo.join(e,ft.HDB_CONFIG_FILE)))return fN=!0,!0}a(__e,"noBootFile");function d_e(e,t){let r;return e.protocol==="http:"?r=bue:r=Oue,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",l=>{c.body+=l}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(d_e,"httpRequest");function f_e(e){if(!e.schema&&!e.database){e.schema=ft.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(f_e,"transformReq");function E_e(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(E_e,"convertToMS")});var X=g((Jye,Hk)=>{"use strict";var pN=require("fs-extra"),Qa=require("path"),Mk=require("os"),h_e=require("properties-reader"),Td=x(),Sd=K(),_e=D(),hm=ut(),p_e="Error initializing environment manager",pm="BOOT_PROPS_FILE_PATH",Uk=!1,m_e={[_e.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Hi={};Hk.exports={BOOT_PROPS_FILE_PATH:pm,getHdbBasePath:S_e,setHdbBasePath:T_e,get:vk,initSync:R_e,setProperty:ve,initTestEnvironment:O_e,setCloneVar:A_e};function S_e(){return Hi[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(S_e,"getHdbBasePath");function T_e(e){Hi[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(T_e,"setHdbBasePath");function vk(e){let t=hm.getConfigValue(e);return t===void 0?Hi[e]:t}a(vk,"get");function ve(e,t){m_e[e]&&(Hi[e]=t),hm.updateConfigObject(e,t)}a(ve,"setProperty");function g_e(){let e;try{e=Sd.getPropsFilePath(),pN.accessSync(e,pN.constants.F_OK|pN.constants.R_OK),Uk=!0;let t=h_e(e);return Hi[_e.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(_e.HDB_SETTINGS_NAMES.INSTALL_USER),Hi[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Hi[pm]=e,!0}catch{return Td.trace(`Environment manager found no properties file at ${e}`),!1}}a(g_e,"doesPropFileExist");function R_e(e=!1){try{(Uk||g_e()||Sd.noBootFile())&&!Bk&&(hm.initConfig(e),Hi[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=hm.getConfigValue(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Td.error(p_e),Td.error(t),console.error(t),process.exit(1)}}a(R_e,"initSync");var Bk=!1;function A_e(e){Bk=e}a(A_e,"setCloneVar");function O_e(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=Qa.join(__dirname,"../../","unitTests");Hi[pm]=Qa.join(l,"hdb_boot_properties.file"),ve(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Qa.join(l,"settings.test")),ve(_e.HDB_SETTINGS_NAMES.INSTALL_USER,Mk.userInfo()?Mk.userInfo().username:void 0),ve(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),ve(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Qa.join(l,"envDir","log")),ve(_e.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),ve(_e.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),ve(_e.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),ve(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Qa.join(l,"envDir")),ve(_e.CONFIG_PARAMS.STORAGE_PATH,Qa.join(l,"envDir")),s&&(ve(_e.CONFIG_PARAMS.HTTP_SECUREPORT,vk(_e.CONFIG_PARAMS.HTTP_PORT)),ve(_e.CONFIG_PARAMS.HTTP_PORT,null)),ve(_e.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),ve(_e.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),ve(_e.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Sd.isEmpty(i)?!1:i),ve(_e.CONFIG_PARAMS.HTTP_CORS,Sd.isEmpty(i)?!1:i),ve(_e.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),ve(_e.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Qa.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),ve(_e.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Sd.isEmpty(c)?!1:c),o&&(ve("CORS_ACCESSLIST",o),ve(_e.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),ve(_e.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),ve(_e.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),ve(_e.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${pm}. Please check your boot props and settings files`;Td.fatal(r),Td.error(t)}}a(O_e,"initTestEnvironment")});var xk=g((Zye,qk)=>{"use strict";var Sm=X();Sm.initSync();var mm=D(),{httpRequest:b_e}=K(),N_e=require("path"),Gk=require("fs-extra"),y_e=require("yaml"),I_e={describe_table:!0,describe_all:!0,describe_database:!0,list_users:!0,list_roles:!0,drop_role:!0,add_user:!0,alter_user:!0,drop_user:!0,restart_service:!0,restart:!0,create_database:!0,drop_database:!0,create_table:!0,drop_table:!0,create_attribute:!0,drop_attribute:!0,search_by_id:!0,delete:!0,search_by_value:!0,csv_file_load:!0,csv_url_load:!0,cluster_get_routes:!0,cluster_network:!0,cluster_status:!0,remove_node:!0,add_component:!0,deploy_component:!0,package_component:!0,drop_component:!0,get_components:!0,get_component_file:!0,set_component_file:!0,registration_info:!0,get_fingerprint:!0,set_license:!0,get_job:!0,search_jobs_by_start_date:!0,read_log:!0,read_transaction_log:!0,read_audit_log:!0,delete_transaction_logs_before:!0,purge_stream:!0,delete_records_before:!0,install_node_modules:!0,set_configuration:!0,get_configuration:!0,create_authentication_tokens:!0,refresh_operation_token:!0,system_information:!0,sql:!0};qk.exports={cliOperations:C_e,buildRequest:w_e};function w_e(){let e={};for(let t of process.argv){if(I_e[t]){e.operation=t;continue}if(t.includes("=")){let[r,...n]=t.split("=");n=n.join("=");try{n=JSON.parse(n)}catch{}e[r]=n}}return e}a(w_e,"buildRequest");async function C_e(e){await Gk.exists(N_e.join(Sm.get(mm.CONFIG_PARAMS.ROOTPATH),mm.HDB_PID_FILE))||(console.error("HarperDB must be running to perform this operation"),process.exit()),await Gk.exists(Sm.get(mm.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))||(console.error("No domain socket found, unable to perform this operation"),process.exit());try{let t=await b_e({method:"POST",protocol:"http:",socketPath:Sm.get(mm.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),headers:{"Content-Type":"application/json"}},e);t=JSON.parse(t.body),e.json?console.log(JSON.stringify(t,null,2)):console.log(y_e.stringify(t).trim())}catch(t){let r="Error: ";t?.response?.data?.error?r+=t.response.data.error:t?.response?.data?r+=t?.response?.data:r+=t.message,console.error(r)}}a(C_e,"cliOperations")});var $k=g((tIe,kk)=>{"use strict";var Fk=require("semver/functions/major"),D_e=Ea(),mN=process.versions&&process.versions.node?process.versions.node:void 0;kk.exports=L_e;function L_e(){let e=D_e.engines["minimum-node"];if(mN&&Fk(mN)<Fk(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${mN}. Please install a version of Node.js that is withing the defined range.`}}a(L_e,"checkNodeVersion")});var TN=g((nIe,Vk)=>{"use strict";var gd=X();gd.initSync();var Nl=require("fs-extra"),SN=require("path"),yl=D(),P_e=require("crypto"),M_e=require("uuid").v4;Vk.exports=U_e;function U_e(){if(gd.getHdbBasePath()!==void 0){let e=SN.join(gd.getHdbBasePath(),yl.LICENSE_KEY_DIR_NAME,yl.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=SN.join(gd.getHdbBasePath(),yl.LICENSE_KEY_DIR_NAME,yl.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=SN.join(gd.getHdbBasePath(),yl.LICENSE_KEY_DIR_NAME,yl.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Nl.accessSync(r),Nl.accessSync(e),Nl.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=M_e(),i=P_e.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Nl.writeFileSync(r,s),Nl.writeFileSync(e,i.privateKey),Nl.writeFileSync(t,i.publicKey)}else throw n}}}a(U_e,"checkJWTTokenExist")});var Kk=g((iIe,Yk)=>{"use strict";var gN=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};Yk.exports={HdbInfoInsertObject:gN}});var jk=g((aIe,Qk)=>{"use strict";var Wk=D(),RN=class{static{a(this,"UpgradeObject")}constructor(t,r){this[Wk.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[Wk.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};Qk.exports={UpgradeObject:RN}});var Tm=g((lIe,Jk)=>{"use strict";var Qn=require("prompt"),Il=require("chalk"),zk=x(),Ts=require("os"),AN=Xi(),ON=["yes","y"];async function v_e(e){let t=`${Ts.EOL}`+Il.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Ts.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ts.EOL}${Ts.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Ts.EOL}`;Qn.override=AN(["CONFIRM_UPGRADE"]),Qn.start(),Qn.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Il.magenta(`${Ts.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Qn.get([r])}catch(s){return zk.error("There was an error when prompting user about an upgrade."),zk.error(s),!1}return ON.includes(n.CONFIRM_UPGRADE)}a(v_e,"forceUpdatePrompt");async function B_e(e){let t=`${Ts.EOL}`+Il.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ts.EOL}`);Qn.override=AN(["CONFIRM_DOWNGRADE"]),Qn.start(),Qn.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Il.magenta(`${Ts.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Qn.get([r]);return ON.includes(n.CONFIRM_DOWNGRADE)}a(B_e,"forceDowngradePrompt");async function H_e(){let e=`${Ts.EOL}`+Il.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Qn.override=AN(["GENERATE_CERTS"]),Qn.start(),Qn.message=e;let t={properties:{GENERATE_CERTS:{description:Il.magenta(`${Ts.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Qn.get([t]);return ON.includes(r.GENERATE_CERTS)}a(H_e,"upgradeCertsPrompt");Jk.exports={forceUpdatePrompt:v_e,forceDowngradePrompt:B_e,upgradeCertsPrompt:H_e}});var NN=g((_Ie,Xk)=>{"use strict";var bN=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};Xk.exports=bN});var e$=g((mIe,Zk)=>{"use strict";var G_e=K(),q_e=ut(),fIe=x(),EIe=require("path"),hIe=require("fs"),pIe=D();Zk.exports={getOldPropsValue:x_e};function x_e(e,t,r=!1){let n=t.getRaw(e);return G_e.isNotEmptyAndHasValue(n)?n:r?q_e.getDefaultConfig(e):""}a(x_e,"getOldPropsValue")});var s$=g((TIe,n$)=>{"use strict";var vo=require("path"),Bo=require("fs-extra"),F_e=require("properties-reader"),k_e=NN(),Dt=x(),{getOldPropsValue:We}=e$(),{HDB_SETTINGS_NAMES:se,CONFIG_PARAMS:ja}=D(),za=ut(),gm=X(),t$=K(),Qs=D(),yN=new k_e("3.1.0"),r$=[];function $_e(){let e=F_e(gm.get(se.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Dt.info(t);let r=` ;Settings for the HarperDB process.
34
34
 
35
35
  ;The directory selected during install where the database files reside.
36
36
  ${se.HDB_ROOT_KEY} = ${We(se.HDB_ROOT_KEY,e)}
@@ -99,12 +99,12 @@ ${se.CUSTOM_FUNCTIONS_PORT_KEY} = ${za.getDefaultConfig(ja.HTTP_PORT)}
99
99
  ${se.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${vo.join(We(se.HDB_ROOT_KEY,e),"custom_functions")}
100
100
  ;Set the max number of processes HarperDB will start for the Custom Functions server
101
101
  ${se.MAX_CUSTOM_FUNCTION_PROCESSES} = ${za.getDefaultConfig(ja.HTTP_THREADS)}
102
- `,n=Tm.get("settings_path"),s=vo.dirname(n),i=vo.join(s,"3_1_0_upgrade_settings.bak");try{Ct.info(`Backing up old settings file to: ${i}`),Bo.copySync(n,i)}catch(c){throw Ct.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Ct.info("New settings file values for 3.1.0 upgrade:",r),Ct.info(`Creating new/upgraded settings file at '${n}'`),Bo.writeFileSync(n,r),Ct.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),Ct.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Ct.error(c),Bo.copySync(i,n),c}Tm.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),Ct.info(o),o}a(F_e,"updateSettingsFile_3_1_0");function k_e(){let e=vo.join(Zk.getHomeDir(),Ws.HDB_HOME_DIR_NAME,Ws.LICENSE_KEY_DIR_NAME,Ws.LICENSE_FILE_NAME),t=vo.join(Zk.getHomeDir(),Ws.HDB_HOME_DIR_NAME,Ws.LICENSE_KEY_DIR_NAME,Ws.REG_KEY_FILE_NAME),r=vo.join(Tm.getHdbBasePath(),Ws.LICENSE_KEY_DIR_NAME,Ws.LICENSE_FILE_NAME),n=vo.join(r,Ws.LICENSE_FILE_NAME),s=vo.join(r,Ws.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Ct.info(i);let o="Creating .license directory";console.log(o),Ct.info(o),Bo.mkdirpSync(r);try{Bo.accessSync(e);try{let c="Moving licence file";console.log(c),Ct.info(c),Bo.moveSync(e,n);let l="License file successfully moved.";console.log(l),Ct.info(l)}catch{let l="moving license file failed";console.error(l),Ct.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Ct.warn(l)}try{Bo.accessSync(t);try{let c="Moving registration file";console.log(c),Ct.info(c),Bo.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Ct.info(l)}catch{let l="moving registration file failed";console.error(l),Ct.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Ct.warn(l)}}a(k_e,"moveLicenseFiles");bN.sync_functions.push(F_e);bN.sync_functions.push(k_e);e$.push(bN);t$.exports=e$});var a$=T((TIe,o$)=>{"use strict";var On=Ve(),{insertRecords:$_e}=Jo(),V_e=Ar(),Ho=at(),Y_e=K(),Gi=x(),K_e=K(),Qs=require("fs-extra"),qi=require("path"),W_e=require("cli-progress"),Rd=require("assert"),Q_e=require("pino"),j_e=X();o$.exports=z_e;var gm,n$,Rm,NN,pr,Ad=!1;async function z_e(e=!0){return gm=j_e.getHdbBasePath(),n$=qi.join(gm,"schema"),Rm=qi.join(gm,"4_0_0_upgrade_tmp"),NN=qi.join(gm,"transactions"),console.info("Reindexing upgrade started for schemas"),Gi.notify("Reindexing upgrade started for schemas"),await s$(n$,!1,e),await Qs.pathExists(NN)&&(console.info(`
102
+ `,n=gm.get("settings_path"),s=vo.dirname(n),i=vo.join(s,"3_1_0_upgrade_settings.bak");try{Dt.info(`Backing up old settings file to: ${i}`),Bo.copySync(n,i)}catch(c){throw Dt.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Dt.info("New settings file values for 3.1.0 upgrade:",r),Dt.info(`Creating new/upgraded settings file at '${n}'`),Bo.writeFileSync(n,r),Dt.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),Dt.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Dt.error(c),Bo.copySync(i,n),c}gm.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),Dt.info(o),o}a($_e,"updateSettingsFile_3_1_0");function V_e(){let e=vo.join(t$.getHomeDir(),Qs.HDB_HOME_DIR_NAME,Qs.LICENSE_KEY_DIR_NAME,Qs.LICENSE_FILE_NAME),t=vo.join(t$.getHomeDir(),Qs.HDB_HOME_DIR_NAME,Qs.LICENSE_KEY_DIR_NAME,Qs.REG_KEY_FILE_NAME),r=vo.join(gm.getHdbBasePath(),Qs.LICENSE_KEY_DIR_NAME,Qs.LICENSE_FILE_NAME),n=vo.join(r,Qs.LICENSE_FILE_NAME),s=vo.join(r,Qs.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Dt.info(i);let o="Creating .license directory";console.log(o),Dt.info(o),Bo.mkdirpSync(r);try{Bo.accessSync(e);try{let c="Moving licence file";console.log(c),Dt.info(c),Bo.moveSync(e,n);let l="License file successfully moved.";console.log(l),Dt.info(l)}catch{let l="moving license file failed";console.error(l),Dt.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Dt.warn(l)}try{Bo.accessSync(t);try{let c="Moving registration file";console.log(c),Dt.info(c),Bo.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Dt.info(l)}catch{let l="moving registration file failed";console.error(l),Dt.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Dt.warn(l)}}a(V_e,"moveLicenseFiles");yN.sync_functions.push($_e);yN.sync_functions.push(V_e);r$.push(yN);n$.exports=r$});var l$=g((RIe,c$)=>{"use strict";var bn=Ve(),{insertRecords:Y_e}=zo(),K_e=Or(),Ho=at(),W_e=K(),Gi=x(),Q_e=K(),js=require("fs-extra"),qi=require("path"),j_e=require("cli-progress"),Rd=require("assert"),z_e=require("pino"),J_e=X();c$.exports=X_e;var Rm,i$,Am,IN,mr,Ad=!1;async function X_e(e=!0){return Rm=J_e.getHdbBasePath(),i$=qi.join(Rm,"schema"),Am=qi.join(Rm,"4_0_0_upgrade_tmp"),IN=qi.join(Rm,"transactions"),console.info("Reindexing upgrade started for schemas"),Gi.notify("Reindexing upgrade started for schemas"),await o$(i$,!1,e),await js.pathExists(IN)&&(console.info(`
103
103
 
104
- Reindexing upgrade started for transaction logs`),Gi.notify("Reindexing upgrade started for transaction logs"),await s$(NN,!0,e)),Gi.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Ad?", but errors occurred":"")}a(z_e,"reindexUpgrade");async function s$(e,t,r){let n=await Qs.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=qi.join(e,o.toString());if(o===".DS_Store")continue;let l=await Qs.readdir(c),_=l.length;for(let u=0;u<_;u++){let d=l[u];if(d!==".DS_Store"&&Qs.statSync(qi.join(c,d)).isDirectory())try{await J_e(o,d,t),pr.info(`Reindexing started for ${o}.${d}`),Gi.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await Z_e(o,d,c,t,r),pr.info(`Reindexing completed for ${o}.${d}`),Gi.notify(`Reindexing completed for ${o}.${d}`)}catch(f){Ad=!0,f.schema_path=c,f.table_name=d,Gi.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Gi.error(f),pr.error(f),console.error(f)}}}if(!Ad)try{await Qs.rm(Rm,{recursive:!0})}catch{}}a(s$,"processTables");async function J_e(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=qi.join(Rm,s);await Qs.ensureDir(Rm),await Qs.writeFile(i,""),pr=Q_e({level:"debug",formatters:{bindings(){}}},i)}a(J_e,"initPinoLogger");var X_e=20;async function Z_e(e,t,r,n,s){let i;try{i=await On.openEnvironment(r,t,n)}catch(g){if(g.message==="MDB_INVALID: File is not an LMDB file"){Gi.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),pr.error(g);return}throw g}let o=rde(i.dbis),c=On.openDBI(i,o),l=Object.keys(i.dbis),_=On.statDBI(i,o);pr.info(`Old environment stats: ${JSON.stringify(_)}`);let u=new W_e.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});u.start(_.entryCount,0,{});let d=await On.createEnvironment(r,t,!1);On.createDBI(d,o,!1,!0);let f=[];try{for(let g of c.getRange({start:!1}))g.value=Object.assign({},g.value),f.push(g),n||e==="system"&&(t==="hdb_schema"&&(g.key=g.key.toString(),g.value.name=g.value.name.toString()),t==="hdb_table"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.name=g.value.name.toString()),t==="hdb_attribute"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.table=g.value.table.toString(),g.value.attribute=g.value.attribute.toString())),f.length>X_e&&await E();await E()}catch(g){throw Ad=!0,pr.error(g),g}async function E(){let g,A=f.map(({value:U})=>U);n?g=await Promise.all(A.map(U=>ede(d,U))):g=await $_e(d,o,l.filter(U=>U!=="__blob__"),A,!1);for(let U=0,v=f.length;U<v;U++){let{key:k,value:H}=f[U];pr.info(`Record hash value: ${k} hash: ${o}`);let j;n?j=g[U]:j=g.written_hashes.indexOf(k)>-1,Rd(j,!0),tde(d,o,H[o],n),pr.info(`Insert success, written hashes: ${g.written_hashes}`),u.increment()}f=[],u.value/u.total*100%10===0&&Gi.notify(`${e}.${t} ${u.value}/${u.total} records inserted`),pr.info(`${u.value}/${u.total} records inserted`)}a(E,"finishOutstanding"),u.stop();let h=On.statDBI(i,o),m=On.statDBI(d,o);if(pr.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${m.entryCount}`),Rd.deepStrictEqual(h.entryCount,m.entryCount),await On.closeEnvironment(i),await On.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let g=qi.join(r,t),A=qi.join(g,"data.mdb"),P=qi.join(g,"lock.mdb");await Qs.unlink(A),await Qs.unlink(P),await Qs.rmdir(g),pr.info(`Deleted old environment files from schema folder: ${A}, ${P}`)}let S=await On.openEnvironment(r,t),R=On.statDBI(S,o);pr.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify(R)}`),Rd.deepStrictEqual(R.entryCount,m.entryCount),await On.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(Z_e,"processTable");async function ede(e,t){On.initializeDBIs(e,Ho.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ho.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Ho.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Ho.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),K_e.isEmpty(t.user_name)||e.dbis[Ho.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Ho.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(ede,"insertTransaction");function tde(e,t,r,n){let i=e.dbis[t].get(r);Rd.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Ho.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Ho.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,l]of o)if(c!==t&&e.dbis[c]!==void 0&&!Y_e.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let _=0,u=l.length;_<u;_++){let d=l[_];i$(e,c,d,r)}else i$(e,c,l,r)}a(tde,"validateIndices");function i$(e,t,r,n){try{let s=!1,i=V_e.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||pr.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),Rd.deepStrictEqual(s,!0)}catch(s){Ad=!0,pr.error(s),console.error(s)}}a(i$,"validateIndex");function rde(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(rde,"getHashDBI")});var Om=T((RIe,l$)=>{"use strict";var nde=require("mkcert"),Am=require("path"),yN=require("fs-extra"),IN=x(),sde=X(),wN=D(),Cl=AT(),ide=Ji(),ode=ut();l$.exports={generateKeys:ade,updateConfigCert:c$};async function ade(){let e=sde.getHdbBasePath(),t=Am.join(e,wN.LICENSE_KEY_DIR_NAME),r=await nde.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:3650,caKey:Cl.CERTIFICATE_VALUES.key,caCert:Cl.CERTIFICATE_VALUES.cert}),n=Am.join(t,Cl.CERTIFICATE_PEM_NAME),s=Am.join(t,Cl.PRIVATEKEY_PEM_NAME),i=Am.join(t,Cl.CA_PEM_NAME);try{await yN.writeFile(n,r.cert)}catch(o){throw IN.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await yN.writeFile(s,r.key)}catch(o){throw IN.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await yN.writeFile(i,Cl.CERTIFICATE_VALUES.cert)}catch(o){throw IN.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}c$(n,s,i)}a(ade,"generateKeys");function c$(e,t,r){let n=ide(Object.keys(wN.CONFIG_PARAM_MAP),!0),s=wN.CONFIG_PARAMS,i={[s.CLUSTERING_TLS_CERTIFICATE]:n[s.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?n[s.CLUSTERING_TLS_CERTIFICATE]:e,[s.CLUSTERING_TLS_PRIVATEKEY]:n[s.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?n[s.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[s.CLUSTERING_TLS_CERT_AUTH]:n[s.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?n[s.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[s.TLS_CERTIFICATE]:n[s.TLS_CERTIFICATE.toLowerCase()]?n[s.TLS_CERTIFICATE.toLowerCase()]:e,[s.TLS_PRIVATEKEY]:n[s.TLS_PRIVATEKEY.toLowerCase()]?n[s.TLS_PRIVATEKEY.toLowerCase()]:t,[s.TLS_CERTIFICATEAUTHORITY]:n[s.TLS_CERTIFICATEAUTHORITY.toLowerCase()]?n[s.TLS_CERTIFICATEAUTHORITY.toLowerCase()]:r};n[s.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_CERTIFICATE]=n[s.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),n[s.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_PRIVATEKEY]=n[s.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),n[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=n[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),ode.updateConfigValue(void 0,void 0,i,!1,!0)}a(c$,"updateConfigCert")});var E$=T((bIe,f$)=>{"use strict";var bm=require("path"),Go=require("fs-extra"),cde=ON(),Ja=x(),u$=ut(),CN=X(),gs=D(),Nm=K(),lde=require("properties-reader"),ude=os(),_de=wE(),dde=ir(),OIe=require("util"),fde=dde.searchByValue,Ede=yr(),hde=jE(),pde=Xe(),mde=a$(),_$=Om(),Sde=Sm(),Nd=new cde("4.0.0"),d$=[],Od,bd;async function Tde(){try{if(await Sde.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Od){let t=Nm.changeExtension(Od,".bak");await Go.move(Od,t)}if(bd){let t=Nm.changeExtension(bd,".bak");await Go.move(bd,t)}await _$.generateKeys()}else console.log("Using existing certificates."),_$.updateConfigCert(Od,bd,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(Tde,"generateNewKeys");async function gde(){console.log("Updating HarperDB nodes."),Ja.info("Updating HarperDB nodes.");let e=[];try{let t=new ude(gs.SYSTEM_SCHEMA_NAME,gs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await fde(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!pde.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let u=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(u),u}let l={host:c.host,port:c.port};e.push(l);let _=[];for(let u=0,d=c.subscriptions.length;u<d;u++){let f=c.subscriptions[u],E=f.channel.split(":");_.push({schema:E[0],table:E[1],publish:f.publish,subscribe:f.subscribe})}n.push({name:c.name,subscriptions:_,system_info:{hdb_version:gs.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(Nm.isEmptyOrZeroLength(n))return;let s=new _de(gs.SYSTEM_SCHEMA_NAME,gs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await Ede.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{hde.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(gde,"updateNodes");async function Rde(){let e=CN.get(gs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(bm.join("config","settings.js"))){Ja.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),Ja.info(t);let r=bm.dirname(e),n=CN.get(gs.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=bm.join(n,"backup","4_0_0_upgrade_settings.bak"),i=bm.join(n,gs.HDB_CONFIG_FILE);try{Ja.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Go.copySync(e,s)}catch(d){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),d}try{Ja.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),Ja.info("Updating env variables with new settings values");let d=u$.initOldConfig(e);Od=d[gs.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],bd=d[gs.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],u$.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=Nm.getPropsFilePath();Go.accessSync(o,Go.constants.F_OK|Go.constants.R_OK);let l=lde(o).get(gs.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
105
- install_user = ${l}`;try{Go.writeFileSync(o,_)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{CN.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let u="New settings file for 4.0.0 upgrade successfully created.";try{Go.removeSync(r),console.log(u),Ja.info(u)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(Rde,"updateSettingsFile_4_0_0");Nd.async_functions.push(Rde);Nd.async_functions.push(Tde);Nd.async_functions.push(mde);Nd.async_functions.push(gde);d$.push(Nd);f$.exports=d$});var DN=T((yIe,S$)=>{"use strict";var Xa=K(),Ade=D(),h$=x(),{DATA_VERSION:Ode,UPGRADE_VERSION:bde}=Ade.UPGRADE_JSON_FIELD_NAMES_ENUM,p$=r$(),ym=E$(),Za=new Map;p$&&p$.forEach(e=>{Za.set(e.version,e)});ym&&ym.forEach(e=>{Za.set(e.version,e)});ym&&ym.forEach(e=>{Za.set(e.version,e)});function Nde(){return[...Za.keys()].sort(Xa.compareVersions)}a(Nde,"getSortedVersions");function m$(e){let t=e[Ode],r=e[bde];return Xa.isEmptyOrZeroLength(t)||Xa.isEmptyOrZeroLength(r)?(h$.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),h$.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...Za.keys()].sort(Xa.compareVersions).filter(function(n){return Xa.compareVersions(n,t)>0&&Xa.compareVersions(n,r)<=0})}a(m$,"getVersionsForUpgrade");function yde(e){return m$(e).length>0}a(yde,"hasUpgradesRequired");function Ide(e){return Xa.isEmptyOrZeroLength(e)?null:Za.has(e)?Za.get(e):null}a(Ide,"getDirectiveByVersion");S$.exports={getSortedVersions:Nde,getDirectiveByVersion:Ide,getVersionsForUpgrade:m$,hasUpgradesRequired:yde}});var yd=T((wIe,O$)=>{"use strict";var wde=require("util"),LN=require("chalk"),Cde=require("os"),g$=yr(),Dde=ir(),bn=D(),R$=Vk(),MN=mT(),{UpgradeObject:T$}=Wk(),{forceDowngradePrompt:Lde}=Sm(),Pde=Si(),Im=x(),Dl=K(),UN=Mn(),Mde=(ge(),ie(ke)),Ude=DN(),vde=wde.promisify(UN.setSchemaDataToGlobal),Bde=Dde.searchByValue,Hde="info_id",Gde="2.9.9",qde="3.0.0";async function xde(e){let t=new R$.HdbInfoInsertObject(1,e,e),r=new MN.InsertObject(bn.OPERATIONS_ENUM.INSERT,bn.SYSTEM_SCHEMA_NAME,bn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,bn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return UN.setSchemaDataToGlobal(),g$.insert(r)}a(xde,"insertHdbInstallInfo");async function PN(e){let t,r=await A$(),n=new Map([[0,{}]]);for(let c of r)n.set(c.info_id,c);let i=Math.max.apply(null,[...n.keys()])+1;t=new R$.HdbInfoInsertObject(i,e,e);let o=new MN.InsertObject(bn.OPERATIONS_ENUM.INSERT,bn.SYSTEM_SCHEMA_NAME,bn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,bn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await vde(),g$.insert(o)}a(PN,"insertHdbUpgradeInfo");async function A$(){let e=new MN.NoSQLSeachObject(bn.SYSTEM_SCHEMA_NAME,bn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Hde,bn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Bde(e))}catch(r){console.error(r)}return t}a(A$,"getAllHdbInfoRecords");async function Fde(){let e=await A$();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(Fde,"getLatestHdbInfoRecord");async function kde(){Im.info("Checking if HDB software has been updated");try{let e=Pde.version(),t=await Fde(),r;if(Dl.isEmpty(t))r=Gde;else if(r=t.data_version_num,Dl.compareVersions(r.toString(),e.toString())>0){if(!Dl.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(LN.yellow(`This instance's data was last run on version ${r}`)),console.error(LN.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${Cde.EOL}${bn.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Dl.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(LN.yellow(`This instance's data was last run on version ${r}`)),await Lde(new T$(r,e))?await PN(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(UN.setSchemaDataToGlobal(),$de(r),e.toString()===r.toString())return;let n=new T$(r,e);if(Ude.hasUpgradesRequired(n))return n;Dl.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await PN(n.upgrade_version),Im.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw Im.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Im.fatal(e),e}}a(kde,"getVersionUpdateInfo");function $de(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${bn.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in Mde.databases.system))throw console.log(t),new Error(t);if(!Dl.isEmpty(e)&&e<qde)throw console.log(t),new Error(t)}a($de,"checkIfInstallIsSupported");O$.exports={insertHdbInstallInfo:xde,insertHdbUpgradeInfo:PN,getVersionUpdateInfo:kde}});var w$=T((DIe,I$)=>{"use strict";var vN=require("joi"),{boolean:Vde,string:b$,number:Yde}=vN.types(),N$=require("fs-extra"),Id=D(),y$=require("path"),Kde=tt();I$.exports=Wde;function Wde(e){let t=b$.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=vN.object({[Id.INSTALL_PROMPTS.ROOTPATH]:vN.custom(Qde),[Id.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:Yde.min(0).allow("null",null),[Id.INSTALL_PROMPTS.TC_AGREEMENT]:b$.valid("yes","YES","Yes"),[Id.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Id.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Vde});return Kde.validateBySchema(e,r)}a(Wde,"installValidator");function Qde(e,t){if(N$.existsSync(y$.join(e,"system/hdb_user/data.mdb"))||N$.existsSync(y$.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(Qde,"validateRootAvailable")});var GN=T((PIe,C$)=>{"use strict";var{mkdirpSync:jde}=require("fs-extra"),js=require("path"),Ll=D(),HN=x(),zde=Un(),BN=ci(),Jde=je();C$.exports=Xde;async function Xde(e){HN.trace("Mounting HarperDB"),Rs(e),Rs(js.join(e,"backup")),Rs(js.join(e,"trash")),Rs(js.join(e,"keys")),Rs(js.join(e,"keys",Ll.LICENSE_FILE_NAME)),Rs(js.join(e,"log")),Rs(js.join(e,"doc")),Rs(js.join(e,"database")),Rs(js.join(e,Ll.TRANSACTIONS_DIR_NAME)),Rs(js.join(e,"clustering","leaf")),Rs(js.join(e,"components")),await Zde()}a(Xde,"mountHdb");async function Zde(){let e=wu(),t=Object.keys(BN);for(let r=0;r<t.length;r++){let n=t[r],s=BN[n].hash_attribute;try{Jde.initSystemSchemaPaths(Ll.SYSTEM_SCHEMA_NAME,n);let i=new e(Ll.SYSTEM_SCHEMA_NAME,n,s);i.attributes=BN[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,await zde.createTable(n,i)}catch(i){throw HN.error(`issue creating environment for ${Ll.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(Zde,"createLMDBTables");function Rs(e){jde(e,{mode:Ll.HDB_FILE_PERMISSIONS}),HN.info(`Directory ${e} created`)}a(Rs,"makeDirectory")});var Cm=T((UIe,F$)=>{"use strict";var xN=require("os"),M$=require("inquirer"),jn=require("fs-extra"),efe=require("properties-reader"),ec=require("chalk"),Xs=require("path"),tfe=require("human-readable-ids").hri,rfe=require("ora"),nfe=require("yaml"),Dt=x(),Fo=X(),wd=K(),wm=Ji(),U$=yd(),v$=Si(),re=D(),sfe=w$(),ife=GN(),FN=ut(),ofe=wr(),afe=NE(),cfe=mN(),lfe=Mn(),ufe=require("util").promisify,_fe=ufe(lfe.setSchemaDataToGlobal),dfe=Om(),Pl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),mr=a(e=>ec.magenta.bold(e),"HDB_PROMPT_MSG"),ffe="https://harperdb.io/legal/end-user-license-agreement",ko=xN.EOL,qo="",Efe="yes",D$="Starting HarperDB install...",L$="HarperDB installation was successful.",P$="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",hfe="An out of date version of HarperDB is already installed.",qN="It appears that HarperDB is already installed. Exiting install...",pfe="Aborting install",mfe=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),Sfe=new RegExp(/^[^\s.,*>]+$/),Tfe=xN.homedir(),gfe=Xs.join(Tfe,re.HDB_ROOT_DIR_NAME),Rfe=9925,Afe="HDB_ADMIN",Ofe="CLUSTER_USER",Kr={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},$o=wm([re.INSTALL_PROMPTS.HDB_CONFIG]),Js,B$=!1,H$=!1;F$.exports={install:G$,updateConfigEnv:Ufe,setIgnoreExisting:vfe};G$.createSuperUser=x$;async function G$(){console.log(mr(ko+D$+ko)),Dt.notify(D$);let e;$o[re.INSTALL_PROMPTS.HDB_CONFIG]&&(e=bfe());let t=yfe();Object.assign(t,e);let r=sfe(t);if(r)throw r.message;await Ife(),await wfe(t);let n=await Nfe(t);n[re.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT]&&(n[re.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]=null),Js=n[re.INSTALL_PROMPTS.ROOTPATH],$o[re.INSTALL_PROMPTS.HDB_CONFIG]&&Xs.dirname($o[re.INSTALL_PROMPTS.HDB_CONFIG])===Js&&(B$=!0),!$o[re.INSTALL_PROMPTS.HDB_CONFIG]&&await jn.pathExists(Xs.join(Js,re.HDB_CONFIG_FILE))&&(console.error(qN),process.exit());let s=rfe({prefixText:mr("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),wd.isEmpty(Js))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Fo.setHdbBasePath(Js),await ife(Js),await Cfe(),await Dfe(n),Dt.initLogSettings(!0),await x$(n),await Pfe(n),await dfe.generateKeys(),await Mfe(),cfe(),s.stop(),console.log(mr(ko+L$+ko)),Dt.notify(L$)}a(G$,"install");function bfe(){let e=nfe.parseDocument(jn.readFileSync($o[re.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=FN.flattenConfig(e.toJSON());return t[re.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[re.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(bfe,"getConfigFromFile");async function Nfe(e){Dt.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Pl,when:xo(e[re.INSTALL_PROMPTS.ROOTPATH],Kr.DESTINATION),name:re.INSTALL_PROMPTS.ROOTPATH,prefix:qo,default:gfe,validate:async s=>zs(s)?zs(s):await jn.pathExists(Xs.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,message:mr(Kr.DESTINATION)},{type:"input",transformer:Pl,when:xo(e[re.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]??e[re.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT],Kr.HDB_PORT),name:re.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:qo,default:Rfe,validate:s=>mfe.test(s)?!0:"Invalid port.",message:mr(Kr.HDB_PORT)},{type:"input",transformer:Pl,when:xo(e[re.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Kr.HDB_USERNAME),name:re.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:qo,default:Afe,validate:s=>zs(s)?zs(s):(t=s,!0),message:mr(Kr.HDB_USERNAME)},{type:"password",when:xo(e[re.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Kr.HDB_PASS),name:re.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:qo,validate:s=>zs(s)?zs(s):!0,message:mr(Kr.HDB_PASS)}];if(wd.autoCastBoolean(e[re.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Pl,when:xo(e[re.INSTALL_PROMPTS.CLUSTERING_NODENAME],Kr.NODE_NAME),name:re.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:qo,default:tfe.random(),validate:i=>Sfe.test(i)?!0:"Invalid node name, must not contain ., * or >",message:mr(Kr.NODE_NAME)},{type:"input",transformer:Pl,when:xo(e[re.INSTALL_PROMPTS.CLUSTERING_USER],Kr.CLUSTER_USERNAME),name:re.INSTALL_PROMPTS.CLUSTERING_USER,prefix:qo,default:Ofe,validate:i=>zs(i)?zs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:mr(Kr.CLUSTER_USERNAME)},{type:"password",when:xo(e[re.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Kr.CLUSTER_PASS),name:re.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:qo,validate:i=>zs(i)?zs(i):!0,message:mr(Kr.CLUSTER_PASS)}];r.push(...s)}let n=await M$.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}a(Nfe,"installPrompts");function xo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${mr(t)} ${ec.gray("[hidden]")}`),Dt.trace(`${mr(t)} [hidden]`)):(console.log(`${mr(t)} ${e}`),Dt.trace(`${mr(t)} ${e}`)),!1):!0}a(xo,"displayCmdEnvVar");function zs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(zs,"checkForEmptyValue");function yfe(){let e=Object.keys(re.INSTALL_PROMPTS),t=wm(e),r=wm(Object.keys(re.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=re.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(yfe,"checkForPromptOverride");async function Ife(){Dt.trace("Checking for existing install.");let e=wd.getPropsFilePath(),t=await jn.pathExists(e),r;if(t){Dt.trace(`Install found an existing boot prop file at:${e}`);let n=efe(e),s=FN.getConfigValue(re.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(re.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await jn.pathExists(s)}if(!t&&wd.noBootFile()&&(r=!0),r&&!H$){if(Dt.trace(`Install found existing HDB config at:${e}`),await U$.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${v$.version()}. Exiting install...`;console.log(ko+ec.magenta.bold(hfe)),console.log(ec.magenta.bold(s)),Dt.error(s)}else console.log(ko+ec.magenta.bold(qN)),Dt.error(qN);process.exit(0)}}a(Ife,"checkForExistingInstall");async function wfe(e){Dt.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${ffe}${ko}and can be viewed by typing or copying and pasting the URL into your web browser.${ko}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:qo,transformer:Pl,when:xo(e[re.INSTALL_PROMPTS.TC_AGREEMENT],t),name:re.INSTALL_PROMPTS.TC_AGREEMENT,message:mr(t),validate:s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:ec.yellow("Please enter 'yes' or 'no'")},n=await M$.prompt([r]);n[re.INSTALL_PROMPTS.TC_AGREEMENT]&&n[re.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Efe&&(console.log(ec.yellow(P$)),Dt.error(P$),process.exit(0))}a(wfe,"termsAgreement");async function Cfe(){let e=Xs.join(Js,re.HDB_CONFIG_FILE),t;try{t=xN.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
106
- install_user = ${t}`,n=wd.getHomeDir(),s=Xs.join(n,re.HDB_HOME_DIR_NAME),i=Xs.join(s,re.LICENSE_KEY_DIR_NAME);try{jn.mkdirpSync(s,{mode:re.HDB_FILE_PERMISSIONS}),jn.mkdirpSync(i,{mode:re.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${re.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Xs.join(s,re.BOOT_PROPS_FILE_NAME);try{await jn.writeFile(o,r)}catch(c){throw Dt.error(`There was an error creating the boot file at path: ${o}`),c}Fo.setProperty(re.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Fo.setProperty(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Fo.setProperty(Fo.BOOT_PROPS_FILE_PATH,o)}}a(Cfe,"createBootPropertiesFile");async function Dfe(e){Dt.trace("Creating HarperDB config file");let t=wm(Object.keys(re.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{$o[re.INSTALL_PROMPTS.HDB_CONFIG]||FN.createConfigFile(t),Fo.initSync()}catch(r){Lfe(r)}}a(Dfe,"createConfigFile");function Lfe(e){Dt.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(pfe);let t=Xs.resolve(Fo.get(Fo.BOOT_PROPS_FILE_PATH),"../");t&&jn.removeSync(t),Js&&(B$?jn.readdirSync(Js,{withFileTypes:!0}).forEach(n=>{let s=Xs.join(n.path,n.name);s!==$o[re.INSTALL_PROMPTS.HDB_CONFIG]&&jn.removeSync(s)}):jn.removeSync(Js)),process.exit(1)}a(Lfe,"rollbackInstall");async function q$(e,t){Dt.trace("Creating admin user"),await _fe();let r;try{r=await afe.addRole(e)}catch(n){if(n.message.includes("already exists"))t=void 0;else throw n.message+="Error creating role",n}if(t)try{t.role=r.role,await ofe.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(q$,"createAdminUser");async function x$(e){Dt.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[re.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[re.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await q$(t,r),delete e[re.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[re.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(x$,"createSuperUser");async function Pfe(e){Dt.trace("Creating Cluster user.");let t;e[re.INSTALL_PROMPTS.CLUSTERING_USER]&&e[re.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[re.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[re.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await q$({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[re.INSTALL_PROMPTS.CLUSTERING_USER],delete e[re.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(Pfe,"createClusterUser");async function Mfe(){let e=v$.version();if(e)await U$.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(Mfe,"insertHdbVersionInfo");function Ufe(e){$o[re.INSTALL_PROMPTS.HDB_CONFIG]=e}a(Ufe,"updateConfigEnv");function vfe(e){H$=e}a(vfe,"setIgnoreExisting")});var V$=T((BIe,$$)=>{"use strict";var kN=K(),Nn=x(),k$=DN();$$.exports={processDirectives:Bfe};async function Bfe(e){console.log("Starting upgrade process...");let t=k$.getVersionsForUpgrade(e),r=qfe(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;Nn.notify(c),console.log(c);let l=[],_=[];try{l=Hfe(o.sync_functions)}catch(u){throw Nn.error(`Error while running an upgrade script for ${o.version}`),u}try{_=await Gfe(o.async_functions)}catch(u){throw Nn.error(`Error while running an upgrade script for ${o.version}`),u}n.push(...l,..._)}return n}a(Bfe,"processDirectives");function Hfe(e){if(kN.isEmptyOrZeroLength(e))return Nn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Nn.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Nn.info(`Running function ${r.name}`),!(r instanceof Function)){Nn.info("Variable being processed is not a function");continue}let n=r();Nn.info(n),t.push(n)}return t}a(Hfe,"runSyncFunctions");async function Gfe(e){if(kN.isEmptyOrZeroLength(e))return Nn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Nn.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(Nn.info(`Running function ${s.name}`),!(s instanceof Function)){Nn.info("Variable being processed is not a function");continue}let i=await s();Nn.info(i),t.push(i)}return t}a(Gfe,"runAsyncFunctions");function qfe(e){if(kN.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=k$.getDirectiveByVersion(r);n&&t.push(n)}return t}a(qfe,"getUpgradeDirectivesToInstall")});var YN=T((GIe,z$)=>{"use strict";var Dm=X();Dm.initSync();var Q$=require("chalk"),Y$=require("fs-extra"),Fi=x(),xi=D(),K$=Si(),xfe=V$(),$N=K(),j$=yd(),Ffe=Sm(),W$=aS(),kfe=Mn(),$fe=require("util").promisify,Vfe=$fe(kfe.setSchemaDataToGlobal),VN,{UPGRADE_VERSION:Lm}=xi.UPGRADE_JSON_FIELD_NAMES_ENUM;z$.exports={upgrade:Yfe};async function Yfe(e){await Vfe(),VN===void 0&&(VN=$c()),Y$.existsSync(Dm.get(Dm.BOOT_PROPS_FILE_PATH))||(Cd("The hdb_boot_properties file was not found. Please install HDB.",xi.LOG_LEVELS.ERROR),process.exit(1)),Y$.existsSync(Dm.get(xi.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(Cd("The hdb settings file was not found. Please make sure HDB is installed.",xi.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await j$.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),Cd(`This version of HarperDB is ${K$.version()}`,xi.LOG_LEVELS.INFO);let r=t[Lm]?t[Lm]:K$.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${xi.HDB_SUPPORT_ADDRESS}`),Fi.notify("Missing new version field from upgrade info object"),process.exit(1)),await Kfe();let n,s=0;try{n=await Ffe.forceUpdatePrompt(t)}catch(i){Fi.error("There was an error when prompting user about upgrade."),Fi.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Fi.info(`Starting upgrade to version ${r}`),await Wfe(t),Cd(`HarperDB was successfully upgraded to version ${t[Lm]}`,xi.LOG_LEVELS.INFO)}a(Yfe,"upgrade");async function Kfe(){let e=!1,t=await W$.findPs(xi.HDB_PROC_NAME);if($N.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await W$.findPs("hdb_express");$N.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await VN.list();$N.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(Q$.red(r)),Fi.error(r),process.exit(1)}}a(Kfe,"checkIfRunning");async function Wfe(e){try{await xfe.processDirectives(e)}catch(t){throw Cd("There was an error during the data upgrade. Please check the logs.",xi.LOG_LEVELS.ERROR),t}try{await j$.insertHdbUpgradeInfo(e[Lm])}catch(t){Fi.error("Error updating the 'hdb_info' system table."),Fi.error(t)}}a(Wfe,"runUpgrade");function Cd(e,t=void 0){t||(t=Fi.info),Fi[t](e),console.log(Q$.magenta(e))}a(Cd,"printToLogAndConsole")});var tV=T((xIe,eV)=>{"use strict";var{promises:WN,createReadStream:Qfe,createWriteStream:jfe}=require("fs"),{createGzip:zfe}=require("zlib"),{promisify:Jfe}=require("util"),{pipeline:Xfe}=require("stream"),Zfe=Jfe(Xfe),eEe=require("path"),rc=X();rc.initSync();var tc=x(),{CONFIG_PARAMS:Dd,ITC_EVENT_TYPES:tEe}=D(),{onMessageFromWorkers:rEe}=et(),nEe=6e4,sEe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",iEe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",KN,X$;eV.exports=Z$;rEe(e=>{e.type===tEe.RESTART&&(rc.initSync(!0),clearInterval(X$),rc.get(Dd.LOGGING_ROTATION_ENABLED)&&Z$())});async function Z$(){try{let e=tc.getLogFilePath(),t=rc.get(Dd.LOGGING_ROTATION_MAXSIZE),r=rc.get(Dd.LOGGING_ROTATION_INTERVAL);if(!t&&!r){tc.error(sEe);return}let n=rc.get(Dd.LOGGING_ROTATION_PATH);if(!n){tc.error(iEe);return}let s;if(t){let o=t.slice(-1),c=t.slice(0,-1);o==="G"?s=c*1e9:o==="M"?s=c*1e6:s=c*1e3}let i;if(r){let o=r.slice(-1),c=r.slice(0,-1);o==="D"?i=c*1440:o==="H"?i=c*60:i=c}KN=Date.now()/6e4,tc.trace("Log rotate enabled, maxSize:",t,"interval:",r),X$=setInterval(async()=>{if(s){let o;o=await WN.stat(e),o.size>=s&&await J$(e,n)}i&&Date.now()/6e4-KN>=i&&(await J$(e,n),KN=Date.now()/6e4)},nEe).unref()}catch(e){tc.error(e)}}a(Z$,"logRotator");async function J$(e,t){let r=rc.get(Dd.LOGGING_ROTATION_COMPRESS),n=eEe.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await Zfe(Qfe(e),zfe(),jfe(n)),await WN.unlink(e)):await WN.rename(e,n),tc.closeLogFile(),tc.notify(`hdb.log rotated, old log moved to ${n}`)}a(J$,"moveLogFile")});var nc=T((zIe,lV)=>{"use strict";var Wr=X();Wr.initSync();var kIe=wa(),Lt=D(),ei=x(),ki=require("fs-extra"),Vo=require("path"),oEe=require("systeminformation"),aEe=mN(),{install:cEe}=Cm(),QN=require("chalk"),lEe=ha(),$i=K(),nV=ut(),sV=Ji(),rV=rh(),uEe=YN(),_Ee=tV(),{compactOnStart:dEe}=(uh(),ie(lh)),fEe=require("minimist"),{PACKAGE_ROOT:EEe}=D(),{startHTTPThreads:hEe,startSocketServer:$Ie,mostIdleRouting:VIe,remoteAffinityRouting:YIe}=(mb(),ie(Bx)),pEe=yd(),{isMainThread:mEe}=require("worker_threads"),KIe=ci(),WIe=_i(),QIe=fg(),jIe=wu(),Pm=D(),Zs,Ml,iV=!1,SEe="Upgrade complete. Starting HarperDB.",TEe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",gEe="HarperDB not found, starting install process.",REe="There was an error during install, check install_log.log for more details. Exiting.",AEe="HarperDB successfully started.";function OEe(){if(!iV){let e=a(()=>{ki.removeSync(Vo.join(Wr.get(Lt.CONFIG_PARAMS.ROOTPATH),Lt.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(OEe,"addExitListeners");async function oV(e=!1,t=!1){if(console.log(QN.magenta("Starting HarperDB...")),await cV()===!1){console.log(gEe);try{await cEe()}catch(o){console.error(REe,o),ei.error(o),process.exit(1)}}if(!e){let o=sV(Object.keys(Lt.CONFIG_PARAM_MAP),!0);!$i.isEmpty(o)&&!$i.isEmptyOrZeroLength(Object.keys(o))&&nV.updateConfigValue(void 0,void 0,o,!0,!0)}let r,n=Ml?.service==="clustering";Ml?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await ki.readFile(Vo.join(Wr.get(Lt.CONFIG_PARAMS.ROOTPATH),Lt.HDB_PID_FILE),"utf8")),c=await oEe.processes();for(let l of c.list)if(l.pid===o){n?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}Zs===void 0&&(Zs=$c()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Wr.get(Lt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await rV.generateNatsConfig(),await Zs.startClusteringProcesses(!0),process.exit()),OEe(),await ki.writeFile(Vo.join(Wr.get(Pm.CONFIG_PARAMS.ROOTPATH),Pm.HDB_PID_FILE),`${process.pid}`),ei.info("HarperDB PID",process.pid);let s;try{let o=await pEe.getVersionUpdateInfo();o!==void 0&&(s=o[Lt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await uEe.upgrade(o),console.log(SEe))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`,o),ei.error(o)):(console.error(TEe,o),ei.error(o)),process.exit(1)}aEe(),yEe(),$i.autoCastBoolean(Wr.get(Lt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&mEe&&await rV.generateNatsConfig(t)}a(oV,"initialize");async function bEe(e=!1){try{Ml=fEe(process.argv),Ml.ROOTPATH&&nV.updateConfigObject("settings_path",Vo.join(Ml.ROOTPATH,Lt.HDB_CONFIG_FILE)),await oV(e,!0),Wr.get(Lt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await dEe();let t=process.env.IS_SCRIPTED_SERVICE&&!Ml.service;$i.autoCastBoolean(Wr.get(Lt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await Zs.startClusteringProcesses(),await Zs.startClusteringThreads()),await hEe(process.env.DEV_MODE?1:Wr.get(Pm.CONFIG_PARAMS.THREADS_COUNT)??Wr.get(Pm.CONFIG_PARAMS.THREADS)),Wr.get(Lt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await _Ee(),t||aV()}catch(t){console.error(t),ei.error(t),process.exit(1)}}a(bEe,"main");function aV(){ei.suppressLogging(()=>{console.log(QN.magenta(""+ki.readFileSync(Vo.join(EEe,"utility/install/ascii_logo.txt")))),console.log(QN.magenta(`|------------- HarperDB ${lEe.version} successfully started ------------|`))}),ei.notify(AEe)}a(aV,"started");async function NEe(e=!0){iV=!e;try{Zs===void 0&&(Zs=$c()),Zs.enterPM2Mode(),await oV(),$i.autoCastBoolean(Wr.get(Lt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await Zs.startClusteringProcesses(),await Zs.startService(Lt.PROCESS_DESCRIPTORS.HDB),aV(),e&&process.exit(0)}catch(t){console.error(t),ei.error(t),process.exit(1)}}a(NEe,"launch");function yEe(){let e=Vo.join(Wr.getHdbBasePath(),Lt.LICENSE_KEY_DIR_NAME,Lt.LICENSE_FILE_NAME),t=Vo.join(e,Lt.LICENSE_FILE_NAME),r=Vo.join(e,Lt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=sV(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if($i.isEmpty(n)||$i.isEmpty(s))return;ki.mkdirpSync(e),ki.writeFileSync(r,n),ki.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),ei.error(s)}}a(yEe,"writeLicenseFromVars");lV.exports={launch:NEe,main:bEe,isHdbInstalled:cV};async function cV(){try{await ki.stat($i.getPropsFilePath()),await ki.stat(Wr.get(Lt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if($i.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw ei.error(`Error checking for HDB install - ${e}`),e}return!0}a(cV,"isHdbInstalled")});var ZN=T((XIe,IV)=>{"use strict";var uV=require("os"),Um=require("https"),_V=require("http"),xt=require("fs-extra"),dV=require("yaml"),IEe=require("human-readable-ids").hri,{pipeline:fV}=require("stream/promises"),{createWriteStream:vm,ensureDir:Bm}=require("fs-extra"),{join:In}=require("path"),TV=require("lodash"),wEe=require("minimist"),Ud=require("path"),CEe=require("properties-reader"),ri=X(),DEe=mi(),gV=x(),jN=ut(),{restart:LEe}=wa(),Hm=K(),PEe=Ji(),EV=pt(),MEe=Mn(),{main:RV,launch:UEe}=nc(),{install:vEe,updateConfigEnv:BEe,setIgnoreExisting:AV}=Cm(),OV=GN(),Qr=D(),HEe=Si(),GEe=yd(),{SYSTEM_TABLE_NAMES:hV,SYSTEM_SCHEMA_NAME:qEe,CONFIG_PARAMS:Gm,OPERATIONS_ENUM:wn}=Qr,xEe=1e4,FEe="clone-node-config.yaml",JN=[hV.ROLE_TABLE_NAME,hV.USER_TABLE_NAME],kEe={clustering_nodename:!0,clustering_leafserver_streams_path:!0,clustering_tls_certificate:!0,clustering_tls_privatekey:!0,clustering_tls_certificateauthority:!0,logging_file:!0,logging_root:!0,logging_rotation_path:!0,operationsapi_network_domainsocket:!0,operationsapi_tls_certificate:!0,operationsapi_tls_privatekey:!0,operationsapi_tls_certificateauthority:!0,rootpath:!0,storage_path:!0,storage_audit_path:!0,databases:!0,mqtt_network_mtls_certificateauthority:!0,componentsroot:!0,tls_certificate:!0,tls_privatekey:!0,tls_certificateauthority:!0},zr={HDB_LEADER_USERNAME:"HDB_LEADER_USERNAME",HDB_LEADER_PASSWORD:"HDB_LEADER_PASSWORD",HDB_LEADER_URL:"HDB_LEADER_URL",HDB_LEADER_CLUSTERING_HOST:"HDB_LEADER_CLUSTERING_HOST",HDB_LEADER_CLUSTERING_PORT:"HDB_LEADER_CLUSTERING_PORT",HDB_FULLY_CONNECTED:"HDB_FULLY_CONNECTED",HDB_CLONE_OVERTOP:"HDB_CLONE_OVERTOP",CLUSTERING_NODENAME:"CLUSTERING_NODENAME"},Yo=wEe(process.argv),Ld=Yo[zr.HDB_LEADER_USERNAME]??process.env[zr.HDB_LEADER_USERNAME],Pd=Yo[zr.HDB_LEADER_PASSWORD]??process.env[zr.HDB_LEADER_PASSWORD],Md=Yo[zr.HDB_LEADER_URL]??process.env[zr.HDB_LEADER_URL],zN=Yo[zr.HDB_LEADER_CLUSTERING_HOST]??process.env[zr.HDB_LEADER_CLUSTERING_HOST],$Ee=(Yo[zr.HDB_FULLY_CONNECTED]??process.env[zr.HDB_FULLY_CONNECTED])==="true",bV=(Yo[zr.HDB_CLONE_OVERTOP]??process.env[zr.HDB_CLONE_OVERTOP])==="true",pV=Yo[zr.CLUSTERING_NODENAME]??process.env[zr.CLUSTERING_NODENAME],VEe=Yo[Gm.CLONED.toUpperCase()]??process.env[Gm.CLONED.toUpperCase()],NV,jr,Yi={},mV,Vi,ti={},ot,Ul,Pt,yn,As,sc=!1,qm=!1;IV.exports=a(async function(t=!1){if(console.info(`Starting clone node form leader node: ${Md}`),delete process.env.HDB_LEADER_URL,Pt=Hm.getEnvCliRootPath(),!Pt)try{let s=In(uV.homedir(),Qr.HDB_HOME_DIR_NAME,Qr.BOOT_PROPS_FILE_NAME);if(await xt.pathExists(s)){let i=CEe(s);Pt=Ud.parse(i.get(Qr.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)).dir}}catch{throw new Error("There was an error setting the clone default root path. Please set ROOTPATH using an environment or CLI variable.")}Pt?await xt.pathExists(Pt)?console.log(`Existing HarperDB install found at ${Pt}. Clone node will only clone items that do not already exist on clone.`):(console.log(`No HarperDB install found at ${Pt} starting fresh clone`),sc=!0):(console.log("No HarperDB install found, starting fresh clone"),sc=!0),Pt||(Pt=In(uV.homedir(),Qr.HDB_ROOT_DIR_NAME),console.log("Using default root path",Pt));let r;try{r=In(Pt,FEe),jr=dV.parseDocument(await xt.readFile(r,"utf8"),{simpleKeys:!0}).toJSON(),console.log("Clone config file found")}catch{}let n=In(Pt,Qr.HDB_CONFIG_FILE);if(!sc&&await xt.pathExists(n))try{mV=dV.parseDocument(await xt.readFile(n,"utf8"),{simpleKeys:!0}).toJSON(),Yi=jN.flattenConfig(mV)}catch(s){console.error("Error reading existing harperdb-config.yaml on clone",s)}if(Yi?.cloned&&VEe!=="false")return console.log("Instance marked as cloned, clone will not run"),ri.setCloneVar(!1),ri.initSync(),RV();pV?Ul=pV:Yi[Qr.CONFIG_PARAMS.CLUSTERING_NODENAME.toLowerCase()]?Ul=Yi[Qr.CONFIG_PARAMS.CLUSTERING_NODENAME.toLowerCase()]:Ul=jr?.clustering?.nodeName??IEe.random(),await YEe(),ri.setCloneVar(!1),ri.setHdbBasePath(Pt),xt.ensureDir(ri.get(Qr.CONFIG_PARAMS.LOGGING_ROOT)),gV.initLogSettings(),await KEe(),qm||await WEe(),await zEe(t),NV&&zN&&await JEe(),console.info(`
107
- Successfully cloned node: `+Md),t&&process.exit()},"cloneNode");async function YEe(){console.info("Cloning configuration"),Vi=await XN({operation:wn.GET_CONFIGURATION}),Vi=await JSON.parse(Vi.body),NV=Vi?.clustering?.enabled,ti=jN.flattenConfig(Vi);let e=Vi?.clustering?.hubServer?.cluster?.network?.port,t=jr?.componentConfig?.exclude,r={cloned:!0,clustering_nodename:Ul,rootpath:Pt};for(let s in ti)if(!(ti[s]!==null&&typeof ti[s]=="object"&&!(ti[s]instanceof Array)||kEe[s])){if(s.includes("_package")||s.includes("_port")){if(ti[s].includes?.("hdb/components"))continue;if(t){let i=!1;for(let o of t)if(s.includes(o.name)){i=!0;break}if(i)continue}}Yi[s]||(s==="clustering_hubserver_cluster_network_routes"&&zN&&e&&(Array.isArray(ti[s])||(ti[s]=[]),ti[s].push({host:zN,port:e})),r[s]=ti[s])}for(let s in Yi)s!=="databases"&&typeof Yi[s]=="object"&&!(Yi[s]instanceof Array)||(r[s]=Yi[s]);let n=PEe(Object.keys(Qr.CONFIG_PARAM_MAP),!0);Object.assign(r,n),jN.createConfigFile(r,!0),ri.initSync(!0)}a(YEe,"cloneConfig");async function KEe(){process.env.HDB_FETCH==="true"?(await jEe(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await QEe()}a(KEe,"cloneDatabases");async function WEe(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=Pt,!Ld)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=Ld,!Pd)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=Pd,process.env.OPERATIONSAPI_NETWORK_PORT=ri.get(Gm.OPERATIONSAPI_NETWORK_PORT),BEe(Ud.join(Pt,Qr.HDB_CONFIG_FILE)),await vEe()}a(WEe,"installHDB");function ni(e){return ri.get(Qr.CONFIG_PARAMS.DATABASES)?.[e]?.path||ri.get(Gm.STORAGE_PATH)||Ud.join(Pt,Qr.DATABASES_DIR_NAME)}a(ni,"getDBPath");async function QEe(){let e=ni("system"),t=In(e,"system.mdb");if(sc||!await xt.exists(t)||bV){console.info("Cloning system database"),await Bm(e);let r=vm(t,{overwrite:!0}),n={operation:wn.GET_BACKUP,database:"system",tables:JN},s=await SV(n,r);await xt.utimes(t,Date.now(),new Date(s.date)),sc||(await OV(Pt),await yV(),AV(!0))}else qm=!0,console.log("Not cloning system database due to it already existing on clone");ot=await XN({operation:wn.DESCRIBE_ALL}),ot=await JSON.parse(ot.body),yn=jr?.databaseConfig?.excludeDatabases,yn=yn?yn.reduce((r,n)=>({...r,[n.database]:!0}),{}):{};for(let r in ot)await xt.exists(Ud.join(ni(r),r+".mdb"))&&(console.log(`Not cloning database ${r} due to it already existing on clone`),yn[r]=!0);As=jr?.databaseConfig?.excludeTables,As=As?As.reduce((r,n)=>({...r,[n.database==null?null:n.database+n.table]:!0}),{}):{};for(let r in ot){if(yn[r]){ot[r]="excluded";continue}if(TV.isEmpty(ot[r]))continue;let n=[],s=!1;for(let u in ot[r])As[r+u]?(s=!0,ot[r][u]="excluded"):n.push(u);if(n.length===0)return;let i;s?(console.info(`Cloning database: ${r} tables: ${n}`),i={operation:wn.GET_BACKUP,database:r,tables:n}):(console.info(`Cloning database: ${r}`),i={operation:wn.GET_BACKUP,database:r});let o=ni(r);await Bm(o);let c=In(o,r+".mdb"),l=vm(c,{overwrite:!0}),_=await SV(i,l);await xt.utimes(c,Date.now(),new Date(_.date))}}a(QEe,"cloneTablesHttp");async function jEe(){let e=ni("system"),t=In(e,"system.mdb");if(sc||!await xt.exists(t)||bV){console.info("Cloning system database using fetch");let r={operation:wn.GET_BACKUP,database:"system",tables:JN},n=await Mm(r,!0),s=ni("system");await Bm(s);let i=In(s,"system.mdb");await fV(n.body,vm(i,{overwrite:!0})),await xt.utimes(i,Date.now(),new Date(n.headers.get("date"))),sc||(await OV(Pt),await yV(),AV(!0))}else qm=!0,console.log("Not cloning system database due to it already existing on clone");ot=await Mm({operation:wn.DESCRIBE_ALL}),ot=await ot.json(),yn=jr?.databaseConfig?.excludeDatabases,yn=yn?yn.reduce((r,n)=>({...r,[n.database]:!0}),{}):{};for(let r in ot)await xt.exists(Ud.join(ni(r),r+".mdb"))&&(console.log(`Not cloning database ${r} due to it already existing on clone`),yn[r]=!0);As=jr?.databaseConfig?.excludeTables,As=As?As.reduce((r,n)=>({...r,[n.database==null?null:n.database+n.table]:!0}),{}):{};for(let r in ot){if(yn[r]){ot[r]="excluded";continue}if(TV.isEmpty(ot[r]))continue;let n=[],s=!1;for(let u in ot[r])As[r+u]?(s=!0,ot[r][u]="excluded"):n.push(u);if(n.length===0)return;let i;s?(console.info(`Cloning database: ${r} tables: ${n}`),i=await Mm({operation:wn.GET_BACKUP,database:r,tables:n},!0)):(console.info(`Cloning database: ${r}`),i=await Mm({operation:wn.GET_BACKUP,database:r},!0));let o=ni(r);await Bm(o);let c=new Date(i.headers.get("date")),l=In(o,`${c.getTime()}-${r}.mdb`);await fV(i.body,vm(l,{overwrite:!0}));let _=In(o,r+".mdb");await xt.rename(l,_),await xt.utimes(_,Date.now(),c)}}a(jEe,"cloneTablesFetch");async function Mm(e,t=!1){let r=jr?.httpsRejectUnauthorized??!1,n=new Um.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(Ld+":"+Pd).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(Md,{method:"POST",headers:i,body:JSON.stringify(e),agent:n,compress:!0});if(o.ok)return o;throw console.error(`HTTP Error Response: ${o.status} ${o.statusText}`),new Error(await o.text())}a(Mm,"leaderHttpReqFetch");async function zEe(e){let t=await DEe.getHDBProcessInfo();t.clustering.length===0||t.core.length===0?e?await UEe(!1):await RV():(console.info(await LEe({operation:wn.RESTART})),await Hm.async_set_timeout(xEe)),e&&await Hm.async_set_timeout(2e3)}a(zEe,"startHDB");async function JEe(){console.info("Clustering cloned tables");let e=jr?.clusteringConfig?.subscribeToLeaderNode!==!1,t=jr?.clusteringConfig?.publishToLeaderNode!==!1;await MEe.setSchemaDataToGlobalAsync();let r=s_(),n=await XN({operation:wn.CLUSTER_STATUS});n=await JSON.parse(n.body);let s=[];if(!qm){let l=await xt.stat(In(ni("system"),"system.mdb"));for(let _ of JN)s.push({schema:qEe,table:_,subscribe:e,publish:t,start_time:l.mtime.toISOString()})}let i=jr?.clusteringConfig?.excludeDatabases;i=i?i.reduce((l,_)=>({...l,[_.database]:!0}),{}):{};let o=jr?.clusteringConfig?.excludeTables;o=o?o.reduce((l,_)=>({...l,[_.database==null?null:_.database+_.table]:!0}),{}):{};for(let l in ot){if(ot[l]==="excluded"||i[l])continue;let _=await xt.stat(In(ni(l),l+".mdb"));_.mtime.setSeconds(_.mtime.getSeconds()-10);for(let u in ot[l])ot[l][u]==="excluded"||o[l+u]||s.push({schema:l,table:u,subscribe:e,publish:t,start_time:_.mtime.toISOString()})}await EV.createTableStreams(s),gV.info("Sending add_node request to node:",Vi?.clustering?.nodeName,"with subscriptions:",s);let c;if($Ee&&n.connections.length>0){let l=$E(),_=[{node_name:Vi?.clustering?.nodeName,subscriptions:s}],u=!1;Ul=ri.get(Qr.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let d of n.connections){if(d.node_name===Ul)continue;let f={node_name:d.node_name,subscriptions:[]};for(let E of d.subscriptions){if(yn[E.schema]||As[E.schema+E.table]||i[E.schema]||o[E.schema+E.table])continue;u=!0;let h=await xt.stat(In(ni(E.schema),E.schema+".mdb"));h.mtime.setSeconds(h.mtime.getSeconds()-10),E.start_time=h.mtime.toISOString(),f.subscriptions.push(E)}_.push(f)}u&&(c=await l({operation:wn.CONFIGURE_CLUSTER,connections:_}),console.info(JSON.stringify(c)))}!c&&s.length>0&&await r({operation:wn.ADD_NODE,node_name:Vi?.clustering?.nodeName,subscriptions:s},!0),await EV.closeConnection()}a(JEe,"clusterTables");async function XN(e){let t=new Um.Agent({rejectUnauthorized:jr?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(Ld+":"+Pd).toString("base64"),"Content-Type":"application/json"},s=new URL(Md),i={protocol:s.protocol,host:s.hostname,method:"POST",headers:n};return s.protocol==="https:"&&(i.agent=t),s.port&&(i.port=s.port),await Hm.httpRequest(i,e)}a(XN,"leaderHttpReq");async function SV(e,t){let r=new Um.Agent({rejectUnauthorized:jr?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(Ld+":"+Pd).toString("base64"),"Content-Type":"application/json"},i=new URL(Md),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:s};return i.protocol==="https:"&&(o.agent=r,_V=Um),i.port&&(o.port=i.port),new Promise((c,l)=>{let _=_V.request(o,u=>{u.statusCode!==200&&l("Request to leader node failed with code: "+u.statusCode),u.pipe(t),u.on("end",()=>{t.close(),c(u.headers)})});_.on("error",u=>{l(u)}),_.write(JSON.stringify(e)),_.end()})}a(SV,"leaderHttpStream");async function yV(){let e=HEe.version();if(e)await GEe.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(yV,"insertHdbVersionInfo")});var CV=T((ewe,wV)=>{var XEe=Cm(),ZEe=x();wV.exports=ehe;async function ehe(){try{await XEe.install()}catch(e){console.error("There was an error during the install."),console.error(e),ZEe.error(e),process.exit(1)}}a(ehe,"install")});var PV=T((rwe,LV)=>{"use strict";var the=JE(),rhe=x(),DV="Registration failed.";async function nhe(){let e;try{e=await the.register()}catch(t){return rhe.error(`Registration error ${t}`),DV}return e||DV}a(nhe,"register");LV.exports={register:nhe}});var BV=T((swe,vV)=>{"use strict";var she=x(),ihe=D(),ohe=require("util"),ahe=require("child_process"),MV=ohe.promisify(ahe.exec),che=mi(),vd=$c(),UV="Stopping HarperDB.";vV.exports=lhe;async function lhe(){if(console.log(UV),she.notify(UV),await vd.isServiceRegistered(ihe.HDB_PROC_DESCRIPTOR)){vd.enterPM2Mode();let r=await vd.getUniqueServicesList();for(let n in r)await vd.stop(n)}await vd.kill();let t=await che.getHDBProcessInfo();t.clustering.forEach(r=>{MV(`kill ${r.pid}`)}),t.core.forEach(r=>{MV(`kill ${r.pid}`)})}a(lhe,"stop")});var xV=T((owe,qV)=>{"use strict";var ty=require("fs-extra"),ry=require("path"),ey=require("yaml"),Bd=pt(),Hd=D(),HV=Xe(),ny=x(),uhe=wr(),_he=WE(),dhe=YE(),fhe=mi(),GV=X(),{isHdbInstalled:Ehe}=nc();GV.initSync();var zn={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},Jr={LEAF:"leaf server",HUB:"hub server"},xm;qV.exports=hhe;async function hhe(){let e={harperdb:{status:zn.STOPPED}};if(!await Ehe()){e.harperdb.status=zn.NOT_INSTALLED,console.log(ey.stringify(e));return}xm=GV.get(Hd.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await ty.readFile(ry.join(xm,Hd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Hd.NODE_ERROR_CODES.ENOENT){ny.info("`harperdb status` did not find a hdb.pid file"),e.harperdb.status=zn.STOPPED,console.log(ey.stringify(e));return}throw n}let r=await fhe.getHDBProcessInfo();for(let n of r.core)if(n.pid===t){e.harperdb.status=zn.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await phe(r),e.clustering[Jr.HUB].status===zn.RUNNING&&e.clustering[Jr.LEAF].status===zn.RUNNING){let n=[],s=await _he({});for(let o of s.nodes){let c={};for(let l in o)c[l.replace("_"," ")]=o[l];n.push(c)}e.clustering.network=n;let i=await dhe.clusterStatus();e.clustering.replication={"node name":i.node_name,"is enabled":i.is_enabled,connections:[]};for(let o of i.connections){let c={};c["node name"]=o?.node_name,c.status=o?.status,c.ports={clustering:o?.ports?.clustering,"operations api":o?.ports?.operations_api},c["latency ms"]=o?.latency_ms,c.uptime=o?.uptime,c.subscriptions=o?.subscriptions,c["system info"]={"hdb version":o?.system_info?.hdb_version,"node version":o?.system_info?.node_version,platform:o?.system_info?.platform},e.clustering.replication.connections.push(c)}await Bd.closeConnection()}console.log(ey.stringify(e)),process.exit()}a(hhe,"status");async function phe(e){let t={[Jr.HUB]:{},[Jr.LEAF]:{}};if(e.clustering.length===0)return t[Jr.HUB].status=zn.STOPPED,t[Jr.LEAF].status=zn.STOPPED,t;let{port:r}=Bd.getServerConfig(Hd.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:n,decrypt_hash:s}=await uhe.getClusterUser();try{(await Bd.createConnection(r,n,s,!1)).close(),t[Jr.HUB].status=zn.RUNNING}catch{t[Jr.HUB].status=zn.ERRORED}let{port:i}=Bd.getServerConfig(Hd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await Bd.createConnection(i,n,s,!1)).close(),t[Jr.LEAF].status=zn.RUNNING}catch{t[Jr.LEAF].status=zn.ERRORED}try{t[Jr.HUB].pid=Number.parseInt(await ty.readFile(ry.join(xm,"clustering",HV.PID_FILES.HUB),"utf8"))}catch(o){ny.error(o),t[Jr.HUB].pid=void 0}try{t[Jr.LEAF].pid=Number.parseInt(await ty.readFile(ry.join(xm,"clustering",HV.PID_FILES.LEAF),"utf8"))}catch(o){ny.error(o),t[Jr.LEAF].pid=void 0}return t}a(phe,"getHubLeafStatus")});var km=process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL");km&&X().setCloneVar(!0);var Fm=require("fs"),FV=require("path"),ic=x(),kV=Gk(),mhe=Si(),She=Fk(),sy=D(),{SERVICE_ACTIONS_ENUM:Sr,PACKAGE_ROOT:The}=sy;ghe();function ghe(){let e=She();if(e)if(e.error){console.error(e.error),ic.error(e.error);return}else e.warn&&(console.warn(e.warn),ic.warn(e.warn));let t;Fm.readdir(FV.join(The,"bin"),r=>{if(r)return ic.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let n;km||(n=kV.buildRequest(),n.operation&&(t=Sr.OPERATION));let s;switch(t){case Sr.OPERATION:ic.trace("calling cli operations with:",n),kV.cliOperations(n).then();break;case Sr.DEV:process.env.DEV_MODE=!0;case Sr.RUN:let i=process.argv[3];i&&i[0]!=="-"&&(Fm.existsSync(i)||(console.error(`The folder ${i} does not exist`),process.exit(1)),Fm.statSync(i).isDirectory()||(console.error(`The path ${i} is not a folder`),process.exit(1)),Fm.existsSync(FV.join(i,sy.HDB_CONFIG_FILE))?process.env.ROOTPATH=i:process.env.RUN_HDB_APP=i),nc().main();break;case Sr.START:km?ZN()(!0).catch(S=>{console.log(S)}):s=nc().launch();break;case Sr.INSTALL:CV()().then(()=>nc().main(!0)).catch(m=>{console.error(m)});break;case Sr.REGISTER:PV().register().then(m=>{console.log(m)}).catch(m=>{console.error(m)});break;case Sr.STOP:BV()().then(()=>{process.exit(0)}).catch(m=>{console.error(m)});break;case Sr.RESTART:wa().restart({}).then().catch(m=>{ic.error(m),console.error(`There was an error restarting HarperDB. ${m}`),process.exit(1)});break;case Sr.VERSION:mhe.printVersion();break;case Sr.UPGRADE:ic.setLogLevel(sy.LOG_LEVELS.INFO),YN().upgrade(null).then(()=>{console.log("Your instance of HarperDB is up to date!")}).catch(m=>{ic.error(`Got an error during upgrade ${m}`)});break;case Sr.STATUS:xV()().then().catch(m=>{console.error(m)});break;case Sr.RENEWCERTS:let{generateKeys:f}=Om();f().then(()=>{console.log("Successfully renewed self-signed certificates")}).catch(()=>{console.error(r)});break;case Sr.COPYDB:let E=process.argv[3],h=process.argv[4];(uh(),ie(lh)).copyDb(E,h);break;case void 0:km?ZN()().catch(S=>{console.log(S)}):nc().main();break;default:console.warn(`The "${t}" command is not understood.`);case Sr.HELP:console.log(`
104
+ Reindexing upgrade started for transaction logs`),Gi.notify("Reindexing upgrade started for transaction logs"),await o$(IN,!0,e)),Gi.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Ad?", but errors occurred":"")}a(X_e,"reindexUpgrade");async function o$(e,t,r){let n=await js.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=qi.join(e,o.toString());if(o===".DS_Store")continue;let l=await js.readdir(c),_=l.length;for(let u=0;u<_;u++){let d=l[u];if(d!==".DS_Store"&&js.statSync(qi.join(c,d)).isDirectory())try{await Z_e(o,d,t),mr.info(`Reindexing started for ${o}.${d}`),Gi.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await tde(o,d,c,t,r),mr.info(`Reindexing completed for ${o}.${d}`),Gi.notify(`Reindexing completed for ${o}.${d}`)}catch(f){Ad=!0,f.schema_path=c,f.table_name=d,Gi.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Gi.error(f),mr.error(f),console.error(f)}}}if(!Ad)try{await js.rm(Am,{recursive:!0})}catch{}}a(o$,"processTables");async function Z_e(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=qi.join(Am,s);await js.ensureDir(Am),await js.writeFile(i,""),mr=z_e({level:"debug",formatters:{bindings(){}}},i)}a(Z_e,"initPinoLogger");var ede=20;async function tde(e,t,r,n,s){let i;try{i=await bn.openEnvironment(r,t,n)}catch(T){if(T.message==="MDB_INVALID: File is not an LMDB file"){Gi.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),mr.error(T);return}throw T}let o=sde(i.dbis),c=bn.openDBI(i,o),l=Object.keys(i.dbis),_=bn.statDBI(i,o);mr.info(`Old environment stats: ${JSON.stringify(_)}`);let u=new j_e.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});u.start(_.entryCount,0,{});let d=await bn.createEnvironment(r,t,!1);bn.createDBI(d,o,!1,!0);let f=[];try{for(let T of c.getRange({start:!1}))T.value=Object.assign({},T.value),f.push(T),n||e==="system"&&(t==="hdb_schema"&&(T.key=T.key.toString(),T.value.name=T.value.name.toString()),t==="hdb_table"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.name=T.value.name.toString()),t==="hdb_attribute"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.table=T.value.table.toString(),T.value.attribute=T.value.attribute.toString())),f.length>ede&&await E();await E()}catch(T){throw Ad=!0,mr.error(T),T}async function E(){let T,A=f.map(({value:U})=>U);n?T=await Promise.all(A.map(U=>rde(d,U))):T=await Y_e(d,o,l.filter(U=>U!=="__blob__"),A,!1);for(let U=0,v=f.length;U<v;U++){let{key:k,value:H}=f[U];mr.info(`Record hash value: ${k} hash: ${o}`);let j;n?j=T[U]:j=T.written_hashes.indexOf(k)>-1,Rd(j,!0),nde(d,o,H[o],n),mr.info(`Insert success, written hashes: ${T.written_hashes}`),u.increment()}f=[],u.value/u.total*100%10===0&&Gi.notify(`${e}.${t} ${u.value}/${u.total} records inserted`),mr.info(`${u.value}/${u.total} records inserted`)}a(E,"finishOutstanding"),u.stop();let h=bn.statDBI(i,o),m=bn.statDBI(d,o);if(mr.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${m.entryCount}`),Rd.deepStrictEqual(h.entryCount,m.entryCount),await bn.closeEnvironment(i),await bn.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let T=qi.join(r,t),A=qi.join(T,"data.mdb"),L=qi.join(T,"lock.mdb");await js.unlink(A),await js.unlink(L),await js.rmdir(T),mr.info(`Deleted old environment files from schema folder: ${A}, ${L}`)}let S=await bn.openEnvironment(r,t),R=bn.statDBI(S,o);mr.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify(R)}`),Rd.deepStrictEqual(R.entryCount,m.entryCount),await bn.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(tde,"processTable");async function rde(e,t){bn.initializeDBIs(e,Ho.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ho.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Ho.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Ho.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),Q_e.isEmpty(t.user_name)||e.dbis[Ho.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Ho.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(rde,"insertTransaction");function nde(e,t,r,n){let i=e.dbis[t].get(r);Rd.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Ho.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Ho.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,l]of o)if(c!==t&&e.dbis[c]!==void 0&&!W_e.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let _=0,u=l.length;_<u;_++){let d=l[_];a$(e,c,d,r)}else a$(e,c,l,r)}a(nde,"validateIndices");function a$(e,t,r,n){try{let s=!1,i=K_e.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||mr.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),Rd.deepStrictEqual(s,!0)}catch(s){Ad=!0,mr.error(s),console.error(s)}}a(a$,"validateIndex");function sde(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(sde,"getHashDBI")});var bm=g((OIe,_$)=>{"use strict";var ide=require("mkcert"),Om=require("path"),wN=require("fs-extra"),CN=x(),ode=X(),DN=D(),wl=bT(),ade=Xi(),cde=ut();_$.exports={generateKeys:lde,updateConfigCert:u$};async function lde(){let e=ode.getHdbBasePath(),t=Om.join(e,DN.LICENSE_KEY_DIR_NAME),r=await ide.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:3650,caKey:wl.CERTIFICATE_VALUES.key,caCert:wl.CERTIFICATE_VALUES.cert}),n=Om.join(t,wl.CERTIFICATE_PEM_NAME),s=Om.join(t,wl.PRIVATEKEY_PEM_NAME),i=Om.join(t,wl.CA_PEM_NAME);try{await wN.writeFile(n,r.cert)}catch(o){throw CN.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await wN.writeFile(s,r.key)}catch(o){throw CN.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await wN.writeFile(i,wl.CERTIFICATE_VALUES.cert)}catch(o){throw CN.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}u$(n,s,i)}a(lde,"generateKeys");function u$(e,t,r){let n=ade(Object.keys(DN.CONFIG_PARAM_MAP),!0),s=DN.CONFIG_PARAMS,i={[s.CLUSTERING_TLS_CERTIFICATE]:n[s.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?n[s.CLUSTERING_TLS_CERTIFICATE]:e,[s.CLUSTERING_TLS_PRIVATEKEY]:n[s.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?n[s.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[s.CLUSTERING_TLS_CERT_AUTH]:n[s.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?n[s.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[s.TLS_CERTIFICATE]:n[s.TLS_CERTIFICATE.toLowerCase()]?n[s.TLS_CERTIFICATE.toLowerCase()]:e,[s.TLS_PRIVATEKEY]:n[s.TLS_PRIVATEKEY.toLowerCase()]?n[s.TLS_PRIVATEKEY.toLowerCase()]:t,[s.TLS_CERTIFICATEAUTHORITY]:n[s.TLS_CERTIFICATEAUTHORITY.toLowerCase()]?n[s.TLS_CERTIFICATEAUTHORITY.toLowerCase()]:r};n[s.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_CERTIFICATE]=n[s.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),n[s.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_PRIVATEKEY]=n[s.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),n[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=n[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),cde.updateConfigValue(void 0,void 0,i,!1,!0)}a(u$,"updateConfigCert")});var p$=g((yIe,h$)=>{"use strict";var Nm=require("path"),Go=require("fs-extra"),ude=NN(),Ja=x(),d$=ut(),LN=X(),gs=D(),ym=K(),_de=require("properties-reader"),dde=os(),fde=CE(),Ede=or(),NIe=require("util"),hde=Ede.searchByValue,pde=Ir(),mde=zE(),Sde=Xe(),Tde=l$(),f$=bm(),gde=Tm(),Nd=new ude("4.0.0"),E$=[],Od,bd;async function Rde(){try{if(await gde.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Od){let t=ym.changeExtension(Od,".bak");await Go.move(Od,t)}if(bd){let t=ym.changeExtension(bd,".bak");await Go.move(bd,t)}await f$.generateKeys()}else console.log("Using existing certificates."),f$.updateConfigCert(Od,bd,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(Rde,"generateNewKeys");async function Ade(){console.log("Updating HarperDB nodes."),Ja.info("Updating HarperDB nodes.");let e=[];try{let t=new dde(gs.SYSTEM_SCHEMA_NAME,gs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await hde(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!Sde.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let u=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(u),u}let l={host:c.host,port:c.port};e.push(l);let _=[];for(let u=0,d=c.subscriptions.length;u<d;u++){let f=c.subscriptions[u],E=f.channel.split(":");_.push({schema:E[0],table:E[1],publish:f.publish,subscribe:f.subscribe})}n.push({name:c.name,subscriptions:_,system_info:{hdb_version:gs.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(ym.isEmptyOrZeroLength(n))return;let s=new fde(gs.SYSTEM_SCHEMA_NAME,gs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await pde.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{mde.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(Ade,"updateNodes");async function Ode(){let e=LN.get(gs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(Nm.join("config","settings.js"))){Ja.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),Ja.info(t);let r=Nm.dirname(e),n=LN.get(gs.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=Nm.join(n,"backup","4_0_0_upgrade_settings.bak"),i=Nm.join(n,gs.HDB_CONFIG_FILE);try{Ja.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Go.copySync(e,s)}catch(d){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),d}try{Ja.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),Ja.info("Updating env variables with new settings values");let d=d$.initOldConfig(e);Od=d[gs.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],bd=d[gs.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],d$.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=ym.getPropsFilePath();Go.accessSync(o,Go.constants.F_OK|Go.constants.R_OK);let l=_de(o).get(gs.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
105
+ install_user = ${l}`;try{Go.writeFileSync(o,_)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{LN.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let u="New settings file for 4.0.0 upgrade successfully created.";try{Go.removeSync(r),console.log(u),Ja.info(u)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(Ode,"updateSettingsFile_4_0_0");Nd.async_functions.push(Ode);Nd.async_functions.push(Rde);Nd.async_functions.push(Tde);Nd.async_functions.push(Ade);E$.push(Nd);h$.exports=E$});var PN=g((wIe,g$)=>{"use strict";var Xa=K(),bde=D(),m$=x(),{DATA_VERSION:Nde,UPGRADE_VERSION:yde}=bde.UPGRADE_JSON_FIELD_NAMES_ENUM,S$=s$(),Im=p$(),Za=new Map;S$&&S$.forEach(e=>{Za.set(e.version,e)});Im&&Im.forEach(e=>{Za.set(e.version,e)});Im&&Im.forEach(e=>{Za.set(e.version,e)});function Ide(){return[...Za.keys()].sort(Xa.compareVersions)}a(Ide,"getSortedVersions");function T$(e){let t=e[Nde],r=e[yde];return Xa.isEmptyOrZeroLength(t)||Xa.isEmptyOrZeroLength(r)?(m$.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),m$.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...Za.keys()].sort(Xa.compareVersions).filter(function(n){return Xa.compareVersions(n,t)>0&&Xa.compareVersions(n,r)<=0})}a(T$,"getVersionsForUpgrade");function wde(e){return T$(e).length>0}a(wde,"hasUpgradesRequired");function Cde(e){return Xa.isEmptyOrZeroLength(e)?null:Za.has(e)?Za.get(e):null}a(Cde,"getDirectiveByVersion");g$.exports={getSortedVersions:Ide,getDirectiveByVersion:Cde,getVersionsForUpgrade:T$,hasUpgradesRequired:wde}});var yd=g((DIe,N$)=>{"use strict";var Dde=require("util"),MN=require("chalk"),Lde=require("os"),A$=Ir(),Pde=or(),Nn=D(),O$=Kk(),vN=TT(),{UpgradeObject:R$}=jk(),{forceDowngradePrompt:Mde}=Tm(),Ude=Si(),wm=x(),Cl=K(),BN=Un(),vde=(Re(),ie(ke)),Bde=PN(),Hde=Dde.promisify(BN.setSchemaDataToGlobal),Gde=Pde.searchByValue,qde="info_id",xde="2.9.9",Fde="3.0.0";async function kde(e){let t=new O$.HdbInfoInsertObject(1,e,e),r=new vN.InsertObject(Nn.OPERATIONS_ENUM.INSERT,Nn.SYSTEM_SCHEMA_NAME,Nn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Nn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return BN.setSchemaDataToGlobal(),A$.insert(r)}a(kde,"insertHdbInstallInfo");async function UN(e){let t,r=await b$(),n=new Map([[0,{}]]);for(let c of r)n.set(c.info_id,c);let i=Math.max.apply(null,[...n.keys()])+1;t=new O$.HdbInfoInsertObject(i,e,e);let o=new vN.InsertObject(Nn.OPERATIONS_ENUM.INSERT,Nn.SYSTEM_SCHEMA_NAME,Nn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Nn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Hde(),A$.insert(o)}a(UN,"insertHdbUpgradeInfo");async function b$(){let e=new vN.NoSQLSeachObject(Nn.SYSTEM_SCHEMA_NAME,Nn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,qde,Nn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Gde(e))}catch(r){console.error(r)}return t}a(b$,"getAllHdbInfoRecords");async function $de(){let e=await b$();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a($de,"getLatestHdbInfoRecord");async function Vde(){wm.info("Checking if HDB software has been updated");try{let e=Ude.version(),t=await $de(),r;if(Cl.isEmpty(t))r=xde;else if(r=t.data_version_num,Cl.compareVersions(r.toString(),e.toString())>0){if(!Cl.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(MN.yellow(`This instance's data was last run on version ${r}`)),console.error(MN.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${Lde.EOL}${Nn.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Cl.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(MN.yellow(`This instance's data was last run on version ${r}`)),await Mde(new R$(r,e))?await UN(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(BN.setSchemaDataToGlobal(),Yde(r),e.toString()===r.toString())return;let n=new R$(r,e);if(Bde.hasUpgradesRequired(n))return n;Cl.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await UN(n.upgrade_version),wm.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw wm.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),wm.fatal(e),e}}a(Vde,"getVersionUpdateInfo");function Yde(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${Nn.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in vde.databases.system))throw console.log(t),new Error(t);if(!Cl.isEmpty(e)&&e<Fde)throw console.log(t),new Error(t)}a(Yde,"checkIfInstallIsSupported");N$.exports={insertHdbInstallInfo:kde,insertHdbUpgradeInfo:UN,getVersionUpdateInfo:Vde}});var D$=g((PIe,C$)=>{"use strict";var HN=require("joi"),{boolean:Kde,string:y$,number:Wde}=HN.types(),I$=require("fs-extra"),Id=D(),w$=require("path"),Qde=tt();C$.exports=jde;function jde(e){let t=y$.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=HN.object({[Id.INSTALL_PROMPTS.ROOTPATH]:HN.custom(zde),[Id.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:Wde.min(0).allow("null",null),[Id.INSTALL_PROMPTS.TC_AGREEMENT]:y$.valid("yes","YES","Yes"),[Id.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Id.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Kde});return Qde.validateBySchema(e,r)}a(jde,"installValidator");function zde(e,t){if(I$.existsSync(w$.join(e,"system/hdb_user/data.mdb"))||I$.existsSync(w$.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(zde,"validateRootAvailable")});var xN=g((UIe,L$)=>{"use strict";var{mkdirpSync:Jde}=require("fs-extra"),zs=require("path"),Dl=D(),qN=x(),Xde=vn(),GN=ci(),Zde=je();L$.exports=efe;async function efe(e){qN.trace("Mounting HarperDB"),Rs(e),Rs(zs.join(e,"backup")),Rs(zs.join(e,"trash")),Rs(zs.join(e,"keys")),Rs(zs.join(e,"keys",Dl.LICENSE_FILE_NAME)),Rs(zs.join(e,"log")),Rs(zs.join(e,"doc")),Rs(zs.join(e,"database")),Rs(zs.join(e,Dl.TRANSACTIONS_DIR_NAME)),Rs(zs.join(e,"clustering","leaf")),Rs(zs.join(e,"components")),await tfe()}a(efe,"mountHdb");async function tfe(){let e=wu(),t=Object.keys(GN);for(let r=0;r<t.length;r++){let n=t[r],s=GN[n].hash_attribute;try{Zde.initSystemSchemaPaths(Dl.SYSTEM_SCHEMA_NAME,n);let i=new e(Dl.SYSTEM_SCHEMA_NAME,n,s);i.attributes=GN[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,await Xde.createTable(n,i)}catch(i){throw qN.error(`issue creating environment for ${Dl.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(tfe,"createLMDBTables");function Rs(e){Jde(e,{mode:Dl.HDB_FILE_PERMISSIONS}),qN.info(`Directory ${e} created`)}a(Rs,"makeDirectory")});var Dm=g((BIe,$$)=>{"use strict";var kN=require("os"),v$=require("inquirer"),jn=require("fs-extra"),rfe=require("properties-reader"),ec=require("chalk"),Zs=require("path"),nfe=require("human-readable-ids").hri,sfe=require("ora"),ife=require("yaml"),Lt=x(),Fo=X(),wd=K(),Cm=Xi(),B$=yd(),H$=Si(),re=D(),ofe=D$(),afe=xN(),$N=ut(),cfe=Cr(),lfe=yE(),ufe=TN(),_fe=Un(),dfe=require("util").promisify,ffe=dfe(_fe.setSchemaDataToGlobal),Efe=bm(),Ll=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Sr=a(e=>ec.magenta.bold(e),"HDB_PROMPT_MSG"),hfe="https://harperdb.io/legal/end-user-license-agreement",ko=kN.EOL,qo="",pfe="yes",P$="Starting HarperDB install...",M$="HarperDB installation was successful.",U$="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",mfe="An out of date version of HarperDB is already installed.",FN="It appears that HarperDB is already installed. Exiting install...",Sfe="Aborting install",Tfe=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),gfe=new RegExp(/^[^\s.,*>]+$/),Rfe=kN.homedir(),Afe=Zs.join(Rfe,re.HDB_ROOT_DIR_NAME),Ofe=9925,bfe="HDB_ADMIN",Nfe="CLUSTER_USER",Wr={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},$o=Cm([re.INSTALL_PROMPTS.HDB_CONFIG]),Xs,G$=!1,q$=!1;$$.exports={install:x$,updateConfigEnv:Bfe,setIgnoreExisting:Hfe};x$.createSuperUser=k$;async function x$(){console.log(Sr(ko+P$+ko)),Lt.notify(P$);let e;$o[re.INSTALL_PROMPTS.HDB_CONFIG]&&(e=yfe());let t=wfe();Object.assign(t,e);let r=ofe(t);if(r)throw r.message;await Cfe(),await Dfe(t);let n=await Ife(t);n[re.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT]&&(n[re.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]=null),Xs=n[re.INSTALL_PROMPTS.ROOTPATH],$o[re.INSTALL_PROMPTS.HDB_CONFIG]&&Zs.dirname($o[re.INSTALL_PROMPTS.HDB_CONFIG])===Xs&&(G$=!0),!$o[re.INSTALL_PROMPTS.HDB_CONFIG]&&await jn.pathExists(Zs.join(Xs,re.HDB_CONFIG_FILE))&&(console.error(FN),process.exit());let s=sfe({prefixText:Sr("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),wd.isEmpty(Xs))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Fo.setHdbBasePath(Xs),await afe(Xs),await Lfe(),await Pfe(n),Lt.initLogSettings(!0),await k$(n),await Ufe(n),await Efe.generateKeys(),await vfe(),ufe(),s.stop(),console.log(Sr(ko+M$+ko)),Lt.notify(M$)}a(x$,"install");function yfe(){let e=ife.parseDocument(jn.readFileSync($o[re.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=$N.flattenConfig(e.toJSON());return t[re.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[re.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(yfe,"getConfigFromFile");async function Ife(e){Lt.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Ll,when:xo(e[re.INSTALL_PROMPTS.ROOTPATH],Wr.DESTINATION),name:re.INSTALL_PROMPTS.ROOTPATH,prefix:qo,default:Afe,validate:async s=>Js(s)?Js(s):await jn.pathExists(Zs.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,message:Sr(Wr.DESTINATION)},{type:"input",transformer:Ll,when:xo(e[re.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]??e[re.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT],Wr.HDB_PORT),name:re.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:qo,default:Ofe,validate:s=>Tfe.test(s)?!0:"Invalid port.",message:Sr(Wr.HDB_PORT)},{type:"input",transformer:Ll,when:xo(e[re.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Wr.HDB_USERNAME),name:re.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:qo,default:bfe,validate:s=>Js(s)?Js(s):(t=s,!0),message:Sr(Wr.HDB_USERNAME)},{type:"password",when:xo(e[re.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Wr.HDB_PASS),name:re.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:qo,validate:s=>Js(s)?Js(s):!0,message:Sr(Wr.HDB_PASS)}];if(wd.autoCastBoolean(e[re.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Ll,when:xo(e[re.INSTALL_PROMPTS.CLUSTERING_NODENAME],Wr.NODE_NAME),name:re.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:qo,default:nfe.random(),validate:i=>gfe.test(i)?!0:"Invalid node name, must not contain ., * or >",message:Sr(Wr.NODE_NAME)},{type:"input",transformer:Ll,when:xo(e[re.INSTALL_PROMPTS.CLUSTERING_USER],Wr.CLUSTER_USERNAME),name:re.INSTALL_PROMPTS.CLUSTERING_USER,prefix:qo,default:Nfe,validate:i=>Js(i)?Js(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:Sr(Wr.CLUSTER_USERNAME)},{type:"password",when:xo(e[re.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Wr.CLUSTER_PASS),name:re.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:qo,validate:i=>Js(i)?Js(i):!0,message:Sr(Wr.CLUSTER_PASS)}];r.push(...s)}let n=await v$.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}a(Ife,"installPrompts");function xo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Sr(t)} ${ec.gray("[hidden]")}`),Lt.trace(`${Sr(t)} [hidden]`)):(console.log(`${Sr(t)} ${e}`),Lt.trace(`${Sr(t)} ${e}`)),!1):!0}a(xo,"displayCmdEnvVar");function Js(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Js,"checkForEmptyValue");function wfe(){let e=Object.keys(re.INSTALL_PROMPTS),t=Cm(e),r=Cm(Object.keys(re.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=re.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(wfe,"checkForPromptOverride");async function Cfe(){Lt.trace("Checking for existing install.");let e=wd.getPropsFilePath(),t=await jn.pathExists(e),r;if(t){Lt.trace(`Install found an existing boot prop file at:${e}`);let n=rfe(e),s=$N.getConfigValue(re.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(re.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await jn.pathExists(s)}if(!t&&wd.noBootFile()&&(r=!0),r&&!q$){if(Lt.trace(`Install found existing HDB config at:${e}`),await B$.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${H$.version()}. Exiting install...`;console.log(ko+ec.magenta.bold(mfe)),console.log(ec.magenta.bold(s)),Lt.error(s)}else console.log(ko+ec.magenta.bold(FN)),Lt.error(FN);process.exit(0)}}a(Cfe,"checkForExistingInstall");async function Dfe(e){Lt.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${hfe}${ko}and can be viewed by typing or copying and pasting the URL into your web browser.${ko}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:qo,transformer:Ll,when:xo(e[re.INSTALL_PROMPTS.TC_AGREEMENT],t),name:re.INSTALL_PROMPTS.TC_AGREEMENT,message:Sr(t),validate:s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:ec.yellow("Please enter 'yes' or 'no'")},n=await v$.prompt([r]);n[re.INSTALL_PROMPTS.TC_AGREEMENT]&&n[re.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==pfe&&(console.log(ec.yellow(U$)),Lt.error(U$),process.exit(0))}a(Dfe,"termsAgreement");async function Lfe(){let e=Zs.join(Xs,re.HDB_CONFIG_FILE),t;try{t=kN.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
106
+ install_user = ${t}`,n=wd.getHomeDir(),s=Zs.join(n,re.HDB_HOME_DIR_NAME),i=Zs.join(s,re.LICENSE_KEY_DIR_NAME);try{jn.mkdirpSync(s,{mode:re.HDB_FILE_PERMISSIONS}),jn.mkdirpSync(i,{mode:re.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${re.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Zs.join(s,re.BOOT_PROPS_FILE_NAME);try{await jn.writeFile(o,r)}catch(c){throw Lt.error(`There was an error creating the boot file at path: ${o}`),c}Fo.setProperty(re.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Fo.setProperty(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Fo.setProperty(Fo.BOOT_PROPS_FILE_PATH,o)}}a(Lfe,"createBootPropertiesFile");async function Pfe(e){Lt.trace("Creating HarperDB config file");let t=Cm(Object.keys(re.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{$o[re.INSTALL_PROMPTS.HDB_CONFIG]||$N.createConfigFile(t),Fo.initSync()}catch(r){Mfe(r)}}a(Pfe,"createConfigFile");function Mfe(e){Lt.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Sfe);let t=Zs.resolve(Fo.get(Fo.BOOT_PROPS_FILE_PATH),"../");t&&jn.removeSync(t),Xs&&(G$?jn.readdirSync(Xs,{withFileTypes:!0}).forEach(n=>{let s=Zs.join(n.path,n.name);s!==$o[re.INSTALL_PROMPTS.HDB_CONFIG]&&jn.removeSync(s)}):jn.removeSync(Xs)),process.exit(1)}a(Mfe,"rollbackInstall");async function F$(e,t){Lt.trace("Creating admin user"),await ffe();let r;try{r=await lfe.addRole(e)}catch(n){if(n.message.includes("already exists"))t=void 0;else throw n.message+="Error creating role",n}if(t)try{t.role=r.role,await cfe.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(F$,"createAdminUser");async function k$(e){Lt.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[re.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[re.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await F$(t,r),delete e[re.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[re.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(k$,"createSuperUser");async function Ufe(e){Lt.trace("Creating Cluster user.");let t;e[re.INSTALL_PROMPTS.CLUSTERING_USER]&&e[re.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[re.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[re.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await F$({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[re.INSTALL_PROMPTS.CLUSTERING_USER],delete e[re.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(Ufe,"createClusterUser");async function vfe(){let e=H$.version();if(e)await B$.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(vfe,"insertHdbVersionInfo");function Bfe(e){$o[re.INSTALL_PROMPTS.HDB_CONFIG]=e}a(Bfe,"updateConfigEnv");function Hfe(e){q$=e}a(Hfe,"setIgnoreExisting")});var K$=g((GIe,Y$)=>{"use strict";var VN=K(),yn=x(),V$=PN();Y$.exports={processDirectives:Gfe};async function Gfe(e){console.log("Starting upgrade process...");let t=V$.getVersionsForUpgrade(e),r=Ffe(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;yn.notify(c),console.log(c);let l=[],_=[];try{l=qfe(o.sync_functions)}catch(u){throw yn.error(`Error while running an upgrade script for ${o.version}`),u}try{_=await xfe(o.async_functions)}catch(u){throw yn.error(`Error while running an upgrade script for ${o.version}`),u}n.push(...l,..._)}return n}a(Gfe,"processDirectives");function qfe(e){if(VN.isEmptyOrZeroLength(e))return yn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return yn.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(yn.info(`Running function ${r.name}`),!(r instanceof Function)){yn.info("Variable being processed is not a function");continue}let n=r();yn.info(n),t.push(n)}return t}a(qfe,"runSyncFunctions");async function xfe(e){if(VN.isEmptyOrZeroLength(e))return yn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return yn.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(yn.info(`Running function ${s.name}`),!(s instanceof Function)){yn.info("Variable being processed is not a function");continue}let i=await s();yn.info(i),t.push(i)}return t}a(xfe,"runAsyncFunctions");function Ffe(e){if(VN.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=V$.getDirectiveByVersion(r);n&&t.push(n)}return t}a(Ffe,"getUpgradeDirectivesToInstall")});var WN=g((xIe,X$)=>{"use strict";var Lm=X();Lm.initSync();var z$=require("chalk"),W$=require("fs-extra"),Fi=x(),xi=D(),Q$=Si(),kfe=K$(),YN=K(),J$=yd(),$fe=Tm(),j$=lS(),Vfe=Un(),Yfe=require("util").promisify,Kfe=Yfe(Vfe.setSchemaDataToGlobal),KN,{UPGRADE_VERSION:Pm}=xi.UPGRADE_JSON_FIELD_NAMES_ENUM;X$.exports={upgrade:Wfe};async function Wfe(e){await Kfe(),KN===void 0&&(KN=kc()),W$.existsSync(Lm.get(Lm.BOOT_PROPS_FILE_PATH))||(Cd("The hdb_boot_properties file was not found. Please install HDB.",xi.LOG_LEVELS.ERROR),process.exit(1)),W$.existsSync(Lm.get(xi.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(Cd("The hdb settings file was not found. Please make sure HDB is installed.",xi.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await J$.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),Cd(`This version of HarperDB is ${Q$.version()}`,xi.LOG_LEVELS.INFO);let r=t[Pm]?t[Pm]:Q$.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${xi.HDB_SUPPORT_ADDRESS}`),Fi.notify("Missing new version field from upgrade info object"),process.exit(1)),await Qfe();let n,s=0;try{n=await $fe.forceUpdatePrompt(t)}catch(i){Fi.error("There was an error when prompting user about upgrade."),Fi.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Fi.info(`Starting upgrade to version ${r}`),await jfe(t),Cd(`HarperDB was successfully upgraded to version ${t[Pm]}`,xi.LOG_LEVELS.INFO)}a(Wfe,"upgrade");async function Qfe(){let e=!1,t=await j$.findPs(xi.HDB_PROC_NAME);if(YN.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await j$.findPs("hdb_express");YN.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await KN.list();YN.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(z$.red(r)),Fi.error(r),process.exit(1)}}a(Qfe,"checkIfRunning");async function jfe(e){try{await kfe.processDirectives(e)}catch(t){throw Cd("There was an error during the data upgrade. Please check the logs.",xi.LOG_LEVELS.ERROR),t}try{await J$.insertHdbUpgradeInfo(e[Pm])}catch(t){Fi.error("Error updating the 'hdb_info' system table."),Fi.error(t)}}a(jfe,"runUpgrade");function Cd(e,t=void 0){t||(t=Fi.info),Fi[t](e),console.log(z$.magenta(e))}a(Cd,"printToLogAndConsole")});var nV=g((kIe,rV)=>{"use strict";var{promises:jN,createReadStream:zfe,createWriteStream:Jfe}=require("fs"),{createGzip:Xfe}=require("zlib"),{promisify:Zfe}=require("util"),{pipeline:eEe}=require("stream"),tEe=Zfe(eEe),rEe=require("path"),rc=X();rc.initSync();var tc=x(),{CONFIG_PARAMS:Dd,ITC_EVENT_TYPES:nEe}=D(),{onMessageFromWorkers:sEe}=et(),iEe=6e4,oEe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",aEe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",QN,eV;rV.exports=tV;sEe(e=>{e.type===nEe.RESTART&&(rc.initSync(!0),clearInterval(eV),rc.get(Dd.LOGGING_ROTATION_ENABLED)&&tV())});async function tV(){try{let e=tc.getLogFilePath(),t=rc.get(Dd.LOGGING_ROTATION_MAXSIZE),r=rc.get(Dd.LOGGING_ROTATION_INTERVAL);if(!t&&!r){tc.error(oEe);return}let n=rc.get(Dd.LOGGING_ROTATION_PATH);if(!n){tc.error(aEe);return}let s;if(t){let o=t.slice(-1),c=t.slice(0,-1);o==="G"?s=c*1e9:o==="M"?s=c*1e6:s=c*1e3}let i;if(r){let o=r.slice(-1),c=r.slice(0,-1);o==="D"?i=c*1440:o==="H"?i=c*60:i=c}QN=Date.now()/6e4,tc.trace("Log rotate enabled, maxSize:",t,"interval:",r),eV=setInterval(async()=>{if(s){let o;o=await jN.stat(e),o.size>=s&&await Z$(e,n)}i&&Date.now()/6e4-QN>=i&&(await Z$(e,n),QN=Date.now()/6e4)},iEe).unref()}catch(e){tc.error(e)}}a(tV,"logRotator");async function Z$(e,t){let r=rc.get(Dd.LOGGING_ROTATION_COMPRESS),n=rEe.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await tEe(zfe(e),Xfe(),Jfe(n)),await jN.unlink(e)):await jN.rename(e,n),tc.closeLogFile(),tc.notify(`hdb.log rotated, old log moved to ${n}`)}a(Z$,"moveLogFile")});var nc=g((XIe,_V)=>{"use strict";var Qr=X();Qr.initSync();var VIe=Ia(),Rt=D(),ti=x(),ki=require("fs-extra"),Vo=require("path"),cEe=require("systeminformation"),lEe=TN(),{install:uEe}=Dm(),zN=require("chalk"),_Ee=Ea(),$i=K(),iV=ut(),oV=Xi(),sV=nh(),dEe=WN(),fEe=nV(),{compactOnStart:EEe}=(_h(),ie(uh)),hEe=require("minimist"),{PACKAGE_ROOT:pEe}=D(),{startHTTPThreads:mEe,startSocketServer:YIe,mostIdleRouting:KIe,remoteAffinityRouting:WIe}=(Tb(),ie(Gx)),SEe=yd(),{isMainThread:TEe}=require("worker_threads"),QIe=ci(),jIe=_i(),zIe=hg(),JIe=wu(),Mm=D(),ei,Pl,aV=!1,gEe="Upgrade complete. Starting HarperDB.",REe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",AEe="HarperDB not found, starting install process.",OEe="There was an error during install, check install_log.log for more details. Exiting.",bEe="HarperDB successfully started.";function NEe(){if(!aV){let e=a(()=>{ki.removeSync(Vo.join(Qr.get(Rt.CONFIG_PARAMS.ROOTPATH),Rt.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(NEe,"addExitListeners");async function cV(e=!1,t=!1){if(console.log(zN.magenta("Starting HarperDB...")),await uV()===!1){console.log(AEe);try{await uEe()}catch(o){console.error(OEe,o),ti.error(o),process.exit(1)}}if(!e){let o=oV(Object.keys(Rt.CONFIG_PARAM_MAP),!0);!$i.isEmpty(o)&&!$i.isEmptyOrZeroLength(Object.keys(o))&&iV.updateConfigValue(void 0,void 0,o,!0,!0)}let r,n=Pl?.service==="clustering";Pl?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await ki.readFile(Vo.join(Qr.get(Rt.CONFIG_PARAMS.ROOTPATH),Rt.HDB_PID_FILE),"utf8")),c=await cEe.processes();for(let l of c.list)if(l.pid===o){n?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}ei===void 0&&(ei=kc()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Qr.get(Rt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await sV.generateNatsConfig(),await ei.startClusteringProcesses(!0),process.exit()),NEe(),await ki.writeFile(Vo.join(Qr.get(Mm.CONFIG_PARAMS.ROOTPATH),Mm.HDB_PID_FILE),`${process.pid}`),ti.info("HarperDB PID",process.pid);let s;try{let o=await SEe.getVersionUpdateInfo();o!==void 0&&(s=o[Rt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await dEe.upgrade(o),console.log(gEe))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`,o),ti.error(o)):(console.error(REe,o),ti.error(o)),process.exit(1)}lEe(),wEe(),$i.autoCastBoolean(Qr.get(Rt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&TEe&&await sV.generateNatsConfig(t)}a(cV,"initialize");async function yEe(e=!1){try{Pl=hEe(process.argv),Pl.ROOTPATH&&iV.updateConfigObject("settings_path",Vo.join(Pl.ROOTPATH,Rt.HDB_CONFIG_FILE)),await cV(e,!0),Qr.get(Rt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await EEe();let t=process.env.IS_SCRIPTED_SERVICE&&!Pl.service;$i.autoCastBoolean(Qr.get(Rt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await ei.startClusteringProcesses(),await ei.startClusteringThreads()),await mEe(process.env.DEV_MODE?1:Qr.get(Mm.CONFIG_PARAMS.THREADS_COUNT)??Qr.get(Mm.CONFIG_PARAMS.THREADS)),Qr.get(Rt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await fEe(),t||lV()}catch(t){console.error(t),ti.error(t),process.exit(1)}}a(yEe,"main");function lV(){ti.suppressLogging(()=>{console.log(zN.magenta(""+ki.readFileSync(Vo.join(pEe,"utility/install/ascii_logo.txt")))),console.log(zN.magenta(`|------------- HarperDB ${_Ee.version} successfully started ------------|`))}),ti.notify(bEe)}a(lV,"started");async function IEe(e=!0){aV=!e;try{ei===void 0&&(ei=kc()),ei.enterPM2Mode(),await cV(),$i.autoCastBoolean(Qr.get(Rt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await ei.startClusteringProcesses(),await ei.startService(Rt.PROCESS_DESCRIPTORS.HDB),lV(),e&&process.exit(0)}catch(t){console.error(t),ti.error(t),process.exit(1)}}a(IEe,"launch");function wEe(){let e=Vo.join(Qr.get(Rt.CONFIG_PARAMS.ROOTPATH),Rt.LICENSE_KEY_DIR_NAME,Rt.LICENSE_FILE_NAME),t=Vo.join(e,Rt.LICENSE_FILE_NAME),r=Vo.join(e,Rt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=oV(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if($i.isEmpty(n)||$i.isEmpty(s))return;ki.mkdirpSync(e),ki.writeFileSync(r,n),ki.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),ti.error(s)}}a(wEe,"writeLicenseFromVars");_V.exports={launch:IEe,main:yEe,isHdbInstalled:uV};async function uV(){try{await ki.stat($i.getPropsFilePath()),await ki.stat(Qr.get(Rt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if($i.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw ti.error(`Error checking for HDB install - ${e}`),e}return!0}a(uV,"isHdbInstalled")});var ty=g((ewe,wV)=>{"use strict";var dV=require("os"),Bm=require("https"),fV=require("http"),xt=require("fs-extra"),EV=require("yaml"),CEe=require("human-readable-ids").hri,{pipeline:hV}=require("stream/promises"),{createWriteStream:Hm,ensureDir:Gm}=require("fs-extra"),{join:wn}=require("path"),AV=require("lodash"),DEe=require("minimist"),vd=require("path"),LEe=require("properties-reader"),As=X(),PEe=mi(),OV=x(),JN=ut(),{restart:MEe}=Ia(),qm=K(),UEe=Xi(),pV=pt(),vEe=Un(),{main:bV,launch:BEe}=nc(),{install:HEe,updateConfigEnv:GEe,setIgnoreExisting:ZN}=Dm(),NV=xN(),jr=D(),qEe=Si(),xEe=yd(),{SYSTEM_TABLE_NAMES:mV,SYSTEM_SCHEMA_NAME:FEe,CONFIG_PARAMS:Ld,OPERATIONS_ENUM:Cn}=jr,kEe=1e4,$Ee="clone-node-config.yaml",ey=[mV.ROLE_TABLE_NAME,mV.USER_TABLE_NAME],VEe={clustering_nodename:!0,clustering_leafserver_streams_path:!0,clustering_tls_certificate:!0,clustering_tls_privatekey:!0,clustering_tls_certificateauthority:!0,logging_file:!0,logging_root:!0,logging_rotation_path:!0,operationsapi_network_domainsocket:!0,operationsapi_tls_certificate:!0,operationsapi_tls_privatekey:!0,operationsapi_tls_certificateauthority:!0,rootpath:!0,storage_path:!0,storage_audit_path:!0,databases:!0,mqtt_network_mtls_certificateauthority:!0,componentsroot:!0,tls_certificate:!0,tls_privatekey:!0,tls_certificateauthority:!0},ir={HDB_LEADER_USERNAME:"HDB_LEADER_USERNAME",HDB_LEADER_PASSWORD:"HDB_LEADER_PASSWORD",HDB_LEADER_URL:"HDB_LEADER_URL",HDB_LEADER_CLUSTERING_HOST:"HDB_LEADER_CLUSTERING_HOST",HDB_LEADER_CLUSTERING_PORT:"HDB_LEADER_CLUSTERING_PORT",HDB_CLONE_CLUSTERING_HOST:"HDB_CLONE_CLUSTERING_HOST",HDB_FULLY_CONNECTED:"HDB_FULLY_CONNECTED",HDB_CLONE_OVERTOP:"HDB_CLONE_OVERTOP",CLUSTERING_NODENAME:"CLUSTERING_NODENAME"},Ki=DEe(process.argv),Pd=Ki[ir.HDB_LEADER_USERNAME]??process.env[ir.HDB_LEADER_USERNAME],Md=Ki[ir.HDB_LEADER_PASSWORD]??process.env[ir.HDB_LEADER_PASSWORD],Ud=Ki[ir.HDB_LEADER_URL]??process.env[ir.HDB_LEADER_URL],vm=Ki[ir.HDB_LEADER_CLUSTERING_HOST]??process.env[ir.HDB_LEADER_CLUSTERING_HOST],SV=Ki[ir.HDB_CLONE_CLUSTERING_HOST]??process.env[ir.HDB_CLONE_CLUSTERING_HOST],YEe=(Ki[ir.HDB_FULLY_CONNECTED]??process.env[ir.HDB_FULLY_CONNECTED])==="true",yV=(Ki[ir.HDB_CLONE_OVERTOP]??process.env[ir.HDB_CLONE_OVERTOP])==="true",TV=Ki[ir.CLUSTERING_NODENAME]??process.env[ir.CLUSTERING_NODENAME],KEe=Ki[Ld.CLONED.toUpperCase()]??process.env[Ld.CLONED.toUpperCase()],XN,zr,Yi={},gV,Vi,ri={},ot,Ml,Pt,In,Os,Ul=!1,Fm=!1;wV.exports=a(async function(t=!1){if(console.info(`Starting clone node form leader node: ${Ud}`),delete process.env.HDB_LEADER_URL,Pt=qm.getEnvCliRootPath(),!Pt)try{let s=wn(dV.homedir(),jr.HDB_HOME_DIR_NAME,jr.BOOT_PROPS_FILE_NAME);if(await xt.pathExists(s)){let i=LEe(s);Pt=vd.parse(i.get(jr.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)).dir}}catch{throw new Error("There was an error setting the clone default root path. Please set ROOTPATH using an environment or CLI variable.")}Pt?await xt.pathExists(Pt)?console.log(`Existing HarperDB install found at ${Pt}. Clone node will only clone items that do not already exist on clone.`):(console.log(`No HarperDB install found at ${Pt} starting fresh clone`),Ul=!0):(console.log("No HarperDB install found, starting fresh clone"),Ul=!0),Pt||(Pt=wn(dV.homedir(),jr.HDB_ROOT_DIR_NAME),console.log("Using default root path",Pt));let r;try{r=wn(Pt,$Ee),zr=EV.parseDocument(await xt.readFile(r,"utf8"),{simpleKeys:!0}).toJSON(),console.log("Clone config file found")}catch{}let n=wn(Pt,jr.HDB_CONFIG_FILE);if(await xt.pathExists(n))try{gV=EV.parseDocument(await xt.readFile(n,"utf8"),{simpleKeys:!0}).toJSON(),Yi=JN.flattenConfig(gV)}catch(s){console.error("Error reading existing harperdb-config.yaml on clone",s)}if(Yi?.cloned&&KEe!=="false")return console.log("Instance marked as cloned, clone will not run"),As.setCloneVar(!1),As.initSync(),bV();TV?Ml=TV:Yi[jr.CONFIG_PARAMS.CLUSTERING_NODENAME.toLowerCase()]?Ml=Yi[jr.CONFIG_PARAMS.CLUSTERING_NODENAME.toLowerCase()]:Ml=zr?.clustering?.nodeName??CEe.random(),await WEe(),As.setCloneVar(!1),As.setHdbBasePath(Pt),xt.ensureDir(As.get(jr.CONFIG_PARAMS.LOGGING_ROOT)),OV.initLogSettings(),await QEe(),Fm||await jEe(),await XEe(t),XN&&vm&&await ZEe(),console.info(`
107
+ Successfully cloned node: `+Ud),t&&process.exit()},"cloneNode");async function WEe(){console.info("Cloning configuration"),Vi=await xm({operation:Cn.GET_CONFIGURATION}),Vi=await JSON.parse(Vi.body),XN=Vi?.clustering?.enabled,ri=JN.flattenConfig(Vi);let e=Vi?.clustering?.hubServer?.cluster?.network?.port,t=zr?.componentConfig?.exclude,r={cloned:!0,clustering_nodename:Ml,rootpath:Pt};for(let s in ri)if(!(ri[s]!==null&&typeof ri[s]=="object"&&!(ri[s]instanceof Array)||VEe[s])){if(s.includes("_package")||s.includes("_port")){if(ri[s].includes?.("hdb/components"))continue;if(t){let i=!1;for(let o of t)if(s.includes(o.name)){i=!0;break}if(i)continue}}Yi[s]||(s==="clustering_hubserver_cluster_network_routes"&&vm&&e&&(Array.isArray(ri[s])||(ri[s]=[]),ri[s].push({host:vm,port:e})),r[s]=ri[s])}for(let s in Yi)s!=="databases"&&typeof Yi[s]=="object"&&!(Yi[s]instanceof Array)||(r[s]=Yi[s]);let n=UEe(Object.keys(jr.CONFIG_PARAM_MAP),!0);if(Object.assign(r,n),JN.createConfigFile(r,!0),As.initSync(!0),XN&&vm&&SV){let s={host:SV,port:As.get(Ld.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT)};console.log("Setting clustering route on leader:",s),await xm({operation:"cluster_set_routes",server:"hub",routes:[s]})}}a(WEe,"cloneConfig");async function QEe(){process.env.HDB_FETCH==="true"?(await JEe(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await zEe()}a(QEe,"cloneDatabases");async function jEe(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=Pt,!Pd)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=Pd,!Md)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=Md,process.env.OPERATIONSAPI_NETWORK_PORT=As.get(Ld.OPERATIONSAPI_NETWORK_PORT),GEe(vd.join(Pt,jr.HDB_CONFIG_FILE)),ZN(!0),await HEe()}a(jEe,"installHDB");function ni(e){return As.get(jr.CONFIG_PARAMS.DATABASES)?.[e]?.path||As.get(Ld.STORAGE_PATH)||vd.join(Pt,jr.DATABASES_DIR_NAME)}a(ni,"getDBPath");async function zEe(){let e=ni("system"),t=wn(e,"system.mdb");if(Ul||!await xt.exists(t)||yV){console.info("Cloning system database"),await Gm(e);let r=Hm(t,{overwrite:!0}),n={operation:Cn.GET_BACKUP,database:"system",tables:ey},s=await RV(n,r);await xt.utimes(t,Date.now(),new Date(s.date)),Ul||(await NV(Pt),await IV(),ZN(!0))}else Fm=!0,console.log("Not cloning system database due to it already existing on clone");ot=await xm({operation:Cn.DESCRIBE_ALL}),ot=await JSON.parse(ot.body),In=zr?.databaseConfig?.excludeDatabases,In=In?In.reduce((r,n)=>({...r,[n.database]:!0}),{}):{};for(let r in ot)await xt.exists(vd.join(ni(r),r+".mdb"))&&(console.log(`Not cloning database ${r} due to it already existing on clone`),In[r]=!0);Os=zr?.databaseConfig?.excludeTables,Os=Os?Os.reduce((r,n)=>({...r,[n.database==null?null:n.database+n.table]:!0}),{}):{};for(let r in ot){if(In[r]){ot[r]="excluded";continue}if(AV.isEmpty(ot[r]))continue;let n=[],s=!1;for(let u in ot[r])Os[r+u]?(s=!0,ot[r][u]="excluded"):n.push(u);if(n.length===0)return;let i;s?(console.info(`Cloning database: ${r} tables: ${n}`),i={operation:Cn.GET_BACKUP,database:r,tables:n}):(console.info(`Cloning database: ${r}`),i={operation:Cn.GET_BACKUP,database:r});let o=ni(r);await Gm(o);let c=wn(o,r+".mdb"),l=Hm(c,{overwrite:!0}),_=await RV(i,l);await xt.utimes(c,Date.now(),new Date(_.date))}}a(zEe,"cloneTablesHttp");async function JEe(){let e=ni("system"),t=wn(e,"system.mdb");if(Ul||!await xt.exists(t)||yV){console.info("Cloning system database using fetch");let r={operation:Cn.GET_BACKUP,database:"system",tables:ey},n=await Um(r,!0),s=ni("system");await Gm(s);let i=wn(s,"system.mdb");await hV(n.body,Hm(i,{overwrite:!0})),await xt.utimes(i,Date.now(),new Date(n.headers.get("date"))),Ul||(await NV(Pt),await IV(),ZN(!0))}else Fm=!0,console.log("Not cloning system database due to it already existing on clone");ot=await Um({operation:Cn.DESCRIBE_ALL}),ot=await ot.json(),In=zr?.databaseConfig?.excludeDatabases,In=In?In.reduce((r,n)=>({...r,[n.database]:!0}),{}):{};for(let r in ot)await xt.exists(vd.join(ni(r),r+".mdb"))&&(console.log(`Not cloning database ${r} due to it already existing on clone`),In[r]=!0);Os=zr?.databaseConfig?.excludeTables,Os=Os?Os.reduce((r,n)=>({...r,[n.database==null?null:n.database+n.table]:!0}),{}):{};for(let r in ot){if(In[r]){ot[r]="excluded";continue}if(AV.isEmpty(ot[r]))continue;let n=[],s=!1;for(let u in ot[r])Os[r+u]?(s=!0,ot[r][u]="excluded"):n.push(u);if(n.length===0)return;let i;s?(console.info(`Cloning database: ${r} tables: ${n}`),i=await Um({operation:Cn.GET_BACKUP,database:r,tables:n},!0)):(console.info(`Cloning database: ${r}`),i=await Um({operation:Cn.GET_BACKUP,database:r},!0));let o=ni(r);await Gm(o);let c=new Date(i.headers.get("date")),l=wn(o,`${c.getTime()}-${r}.mdb`);await hV(i.body,Hm(l,{overwrite:!0}));let _=wn(o,r+".mdb");await xt.rename(l,_),await xt.utimes(_,Date.now(),c)}}a(JEe,"cloneTablesFetch");async function Um(e,t=!1){let r=zr?.httpsRejectUnauthorized??!1,n=new Bm.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(Pd+":"+Md).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(Ud,{method:"POST",headers:i,body:JSON.stringify(e),agent:n,compress:!0});if(o.ok)return o;throw console.error(`HTTP Error Response: ${o.status} ${o.statusText}`),new Error(await o.text())}a(Um,"leaderHttpReqFetch");async function XEe(e){let t=await PEe.getHDBProcessInfo();t.clustering.length===0||t.core.length===0?e?await BEe(!1):await bV():(console.info(await MEe({operation:Cn.RESTART})),await qm.async_set_timeout(kEe)),e&&await qm.async_set_timeout(2e3)}a(XEe,"startHDB");async function ZEe(){console.info("Clustering cloned tables");let e=zr?.clusteringConfig?.subscribeToLeaderNode!==!1,t=zr?.clusteringConfig?.publishToLeaderNode!==!1;await vEe.setSchemaDataToGlobalAsync();let r=s_(),n=await xm({operation:Cn.CLUSTER_STATUS});n=await JSON.parse(n.body);let s=[];if(!Fm){let l=await xt.stat(wn(ni("system"),"system.mdb"));for(let _ of ey)s.push({schema:FEe,table:_,subscribe:e,publish:t,start_time:l.mtime.toISOString()})}let i=zr?.clusteringConfig?.excludeDatabases;i=i?i.reduce((l,_)=>({...l,[_.database]:!0}),{}):{};let o=zr?.clusteringConfig?.excludeTables;o=o?o.reduce((l,_)=>({...l,[_.database==null?null:_.database+_.table]:!0}),{}):{};for(let l in ot){if(ot[l]==="excluded"||i[l])continue;let _=await xt.stat(wn(ni(l),l+".mdb"));_.mtime.setSeconds(_.mtime.getSeconds()-10);for(let u in ot[l])ot[l][u]==="excluded"||o[l+u]||s.push({schema:l,table:u,subscribe:e,publish:t,start_time:_.mtime.toISOString()})}await pV.createTableStreams(s),OV.info("Sending add_node request to node:",Vi?.clustering?.nodeName,"with subscriptions:",s);let c;if(YEe&&n.connections.length>0){let l=VE(),_=[{node_name:Vi?.clustering?.nodeName,subscriptions:s}],u=!1;Ml=As.get(jr.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let d of n.connections){if(d.node_name===Ml)continue;let f={node_name:d.node_name,subscriptions:[]};for(let E of d.subscriptions){if(In[E.schema]||Os[E.schema+E.table]||i[E.schema]||o[E.schema+E.table])continue;u=!0;let h=await xt.stat(wn(ni(E.schema),E.schema+".mdb"));h.mtime.setSeconds(h.mtime.getSeconds()-10),E.start_time=h.mtime.toISOString(),f.subscriptions.push(E)}_.push(f)}u&&(c=await l({operation:Cn.CONFIGURE_CLUSTER,connections:_}),console.info(JSON.stringify(c)))}!c&&s.length>0&&await r({operation:Cn.ADD_NODE,node_name:Vi?.clustering?.nodeName,subscriptions:s},!0),await pV.closeConnection()}a(ZEe,"clusterTables");async function xm(e){let t=new Bm.Agent({rejectUnauthorized:zr?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(Pd+":"+Md).toString("base64"),"Content-Type":"application/json"},s=new URL(Ud),i={protocol:s.protocol,host:s.hostname,method:"POST",headers:n};return s.protocol==="https:"&&(i.agent=t),s.port&&(i.port=s.port),await qm.httpRequest(i,e)}a(xm,"leaderHttpReq");async function RV(e,t){let r=new Bm.Agent({rejectUnauthorized:zr?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(Pd+":"+Md).toString("base64"),"Content-Type":"application/json"},i=new URL(Ud),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:s};return i.protocol==="https:"&&(o.agent=r,fV=Bm),i.port&&(o.port=i.port),new Promise((c,l)=>{let _=fV.request(o,u=>{u.statusCode!==200&&l("Request to leader node failed with code: "+u.statusCode),u.pipe(t),u.on("end",()=>{t.close(),c(u.headers)})});_.on("error",u=>{l(u)}),_.write(JSON.stringify(e)),_.end()})}a(RV,"leaderHttpStream");async function IV(){let e=qEe.version();if(e)await xEe.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(IV,"insertHdbVersionInfo")});var DV=g((rwe,CV)=>{var ehe=Dm(),the=x();CV.exports=rhe;async function rhe(){try{await ehe.install()}catch(e){console.error("There was an error during the install."),console.error(e),the.error(e),process.exit(1)}}a(rhe,"install")});var MV=g((swe,PV)=>{"use strict";var nhe=XE(),she=x(),LV="Registration failed.";async function ihe(){let e;try{e=await nhe.register()}catch(t){return she.error(`Registration error ${t}`),LV}return e||LV}a(ihe,"register");PV.exports={register:ihe}});var HV=g((owe,BV)=>{"use strict";var ohe=x(),ahe=D(),che=require("util"),lhe=require("child_process"),UV=che.promisify(lhe.exec),uhe=mi(),Bd=kc(),vV="Stopping HarperDB.";BV.exports=_he;async function _he(){if(console.log(vV),ohe.notify(vV),await Bd.isServiceRegistered(ahe.HDB_PROC_DESCRIPTOR)){Bd.enterPM2Mode();let r=await Bd.getUniqueServicesList();for(let n in r)await Bd.stop(n)}await Bd.kill();let t=await uhe.getHDBProcessInfo();t.clustering.forEach(r=>{UV(`kill ${r.pid}`)}),t.core.forEach(r=>{UV(`kill ${r.pid}`)})}a(_he,"stop")});var FV=g((cwe,xV)=>{"use strict";var ny=require("fs-extra"),sy=require("path"),ry=require("yaml"),Hd=pt(),Gd=D(),GV=Xe(),iy=x(),dhe=Cr(),fhe=QE(),Ehe=KE(),hhe=mi(),qV=X(),{isHdbInstalled:phe}=nc();qV.initSync();var zn={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},Jr={LEAF:"leaf server",HUB:"hub server"},km;xV.exports=mhe;async function mhe(){let e={harperdb:{status:zn.STOPPED}};if(!await phe()){e.harperdb.status=zn.NOT_INSTALLED,console.log(ry.stringify(e));return}km=qV.get(Gd.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await ny.readFile(sy.join(km,Gd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Gd.NODE_ERROR_CODES.ENOENT){iy.info("`harperdb status` did not find a hdb.pid file"),e.harperdb.status=zn.STOPPED,console.log(ry.stringify(e));return}throw n}let r=await hhe.getHDBProcessInfo();for(let n of r.core)if(n.pid===t){e.harperdb.status=zn.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await She(r),e.clustering[Jr.HUB].status===zn.RUNNING&&e.clustering[Jr.LEAF].status===zn.RUNNING){let n=[],s=await fhe({});for(let o of s.nodes){let c={};for(let l in o)c[l.replace("_"," ")]=o[l];n.push(c)}e.clustering.network=n;let i=await Ehe.clusterStatus();e.clustering.replication={"node name":i.node_name,"is enabled":i.is_enabled,connections:[]};for(let o of i.connections){let c={};c["node name"]=o?.node_name,c.status=o?.status,c.ports={clustering:o?.ports?.clustering,"operations api":o?.ports?.operations_api},c["latency ms"]=o?.latency_ms,c.uptime=o?.uptime,c.subscriptions=o?.subscriptions,c["system info"]={"hdb version":o?.system_info?.hdb_version,"node version":o?.system_info?.node_version,platform:o?.system_info?.platform},e.clustering.replication.connections.push(c)}await Hd.closeConnection()}console.log(ry.stringify(e)),process.exit()}a(mhe,"status");async function She(e){let t={[Jr.HUB]:{},[Jr.LEAF]:{}};if(e.clustering.length===0)return t[Jr.HUB].status=zn.STOPPED,t[Jr.LEAF].status=zn.STOPPED,t;let{port:r}=Hd.getServerConfig(Gd.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:n,decrypt_hash:s}=await dhe.getClusterUser();try{(await Hd.createConnection(r,n,s,!1)).close(),t[Jr.HUB].status=zn.RUNNING}catch{t[Jr.HUB].status=zn.ERRORED}let{port:i}=Hd.getServerConfig(Gd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await Hd.createConnection(i,n,s,!1)).close(),t[Jr.LEAF].status=zn.RUNNING}catch{t[Jr.LEAF].status=zn.ERRORED}try{t[Jr.HUB].pid=Number.parseInt(await ny.readFile(sy.join(km,"clustering",GV.PID_FILES.HUB),"utf8"))}catch(o){iy.error(o),t[Jr.HUB].pid=void 0}try{t[Jr.LEAF].pid=Number.parseInt(await ny.readFile(sy.join(km,"clustering",GV.PID_FILES.LEAF),"utf8"))}catch(o){iy.error(o),t[Jr.LEAF].pid=void 0}return t}a(She,"getHubLeafStatus")});var Vm=process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL");Vm&&X().setCloneVar(!0);var $m=require("fs"),kV=require("path"),sc=x(),$V=xk(),The=Si(),ghe=$k(),oy=D(),{SERVICE_ACTIONS_ENUM:Tr,PACKAGE_ROOT:Rhe}=oy;Ahe();function Ahe(){let e=ghe();if(e)if(e.error){console.error(e.error),sc.error(e.error);return}else e.warn&&(console.warn(e.warn),sc.warn(e.warn));let t;$m.readdir(kV.join(Rhe,"bin"),r=>{if(r)return sc.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let n;Vm||(n=$V.buildRequest(),n.operation&&(t=Tr.OPERATION));let s;switch(t){case Tr.OPERATION:sc.trace("calling cli operations with:",n),$V.cliOperations(n).then();break;case Tr.DEV:process.env.DEV_MODE=!0;case Tr.RUN:let i=process.argv[3];i&&i[0]!=="-"&&($m.existsSync(i)||(console.error(`The folder ${i} does not exist`),process.exit(1)),$m.statSync(i).isDirectory()||(console.error(`The path ${i} is not a folder`),process.exit(1)),$m.existsSync(kV.join(i,oy.HDB_CONFIG_FILE))?process.env.ROOTPATH=i:process.env.RUN_HDB_APP=i),nc().main();break;case Tr.START:Vm?ty()(!0).catch(S=>{console.log(S)}):s=nc().launch();break;case Tr.INSTALL:DV()().then(()=>nc().main(!0)).catch(m=>{console.error(m)});break;case Tr.REGISTER:MV().register().then(m=>{console.log(m)}).catch(m=>{console.error(m)});break;case Tr.STOP:HV()().then(()=>{process.exit(0)}).catch(m=>{console.error(m)});break;case Tr.RESTART:Ia().restart({}).then().catch(m=>{sc.error(m),console.error(`There was an error restarting HarperDB. ${m}`),process.exit(1)});break;case Tr.VERSION:The.printVersion();break;case Tr.UPGRADE:sc.setLogLevel(oy.LOG_LEVELS.INFO),WN().upgrade(null).then(()=>{console.log("Your instance of HarperDB is up to date!")}).catch(m=>{sc.error(`Got an error during upgrade ${m}`)});break;case Tr.STATUS:FV()().then().catch(m=>{console.error(m)});break;case Tr.RENEWCERTS:let{generateKeys:f}=bm();f().then(()=>{console.log("Successfully renewed self-signed certificates")}).catch(()=>{console.error(r)});break;case Tr.COPYDB:let E=process.argv[3],h=process.argv[4];(_h(),ie(uh)).copyDb(E,h);break;case void 0:Vm?ty()().catch(S=>{console.log(S)}):nc().main();break;default:console.warn(`The "${t}" command is not understood.`);case Tr.HELP:console.log(`
108
108
  Usage: harperdb [command]
109
109
 
110
110
  With no command, harperdb will simply run HarperDB (in the foreground)
@@ -121,4 +121,4 @@ Commands:
121
121
  upgrade - Upgrade harperdb
122
122
  renew-certs - Generate a new set of self-signed certificates
123
123
  status - Print the status of HarperDB and clustering
124
- <api-operation> <parameter>=<value> - Run an API operation and return result to the CLI, not all operations are supported`)}})}a(ghe,"harperDBService");
124
+ <api-operation> <parameter>=<value> - Run an API operation and return result to the CLI, not all operations are supported`)}})}a(Ahe,"harperDBService");