harperdb 4.3.0 → 4.3.2

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,109 +1,110 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var MV=Object.create;var Ll=Object.defineProperty;var UV=Object.getOwnPropertyDescriptor;var vV=Object.getOwnPropertyNames;var BV=Object.getPrototypeOf,HV=Object.prototype.hasOwnProperty;var a=(e,t)=>Ll(e,"name",{value:t,configurable:!0});var Oe=(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)Ll(e,r,{get:t[r],enumerable:!0})},ay=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of vV(t))!HV.call(e,s)&&s!==r&&Ll(e,s,{get:()=>t[s],enumerable:!(n=UV(t,s))||n.enumerable});return e};var B=(e,t,r)=>(r=e!=null?MV(BV(e)):{},ay(t||!e||!e.__esModule?Ll(r,"default",{value:e,enumerable:!0}):r,e)),se=e=>ay(Ll({},"__esModule",{value:!0}),e);var uy=g((she,ly)=>{var GV=require("fast-glob"),{statSync:Km,existsSync:Wm,readFileSync:qV,writeFileSync:xV}=require("fs"),{spawnSync:FV,spawn:kV,execFileSync:nhe}=require("child_process"),{isMainThread:$V}=require("worker_threads"),{join:ki,relative:cy}=require("path"),{PACKAGE_ROOT:jn}=C(),{tmpdir:VV,platform:YV}=require("os");require("source-map-support").install();var KV=["resources","server","dataLayer","components"],Pl="ts-build",Qm,WV=__filename.endsWith("tsBuild.js");if(WV){if($V){let r;try{Km(ki(jn,Pl)),r=!0}catch{}if(r)for(let n of GV.sync(KV.map(s=>s+"/**/*.ts"),{cwd:jn})){let s=0,i=0;try{s=Km(ki(jn,n)).mtimeMs-5e3,i=Km(ki(jn,Pl,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."),Qm=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),Qm=!0;if(Qm){let n=ki(jn,"node_modules/.bin/tsc");YV()==="win32"&&(n+=".cmd");let s=FV(n,{cwd:jn});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=ki(VV(),"harperdb-tsc.pid"),o;if(Wm(i))try{process.kill(+qV(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=kV(n,["--watch"],{cwd:jn,detached:!0,stdio:"ignore"});xV(i,c.pid.toString()),c.unref()}}}}let e=ly.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(jn)&&!n[0].includes("node_modules")){let i=cy(jn,n[0]),o;i.startsWith(Pl)?o=ki(jn,cy(Pl,i)):o=ki(jn,Pl,i);let c=ki(o,r),l=c+".js";if(Wm(l))return l;if(c.includes(".")&&Wm(c))return c}return t(r,n,s)}}});var C=g((ahe,by)=>{"use strict";var yn=require("path"),QV=require("fs"),{relative:ihe,join:ohe}=yn,{existsSync:jV}=QV;function zV(){let e=__dirname;for(;!jV(yn.join(e,"package.json"));){let t=yn.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(zV,"getHDBPackageRoot");var $i=zV(),_y="js",Gd=_y,JV="harperdb-config.yaml",XV="defaultConfig.yaml",ZV="hdb",dy=`harperdb.${Gd}`,fy=`customFunctionsServer.${Gd}`,eY=`restartHdb.${Gd}`,zm="HarperDB",Hd="Custom Functions",qd="Clustering Hub",xd="Clustering Leaf",tY="Clustering Ingest Service",rY="Clustering Reply Service",nY="foreground.pid",sY="hdb.pid",iY="data",oY={HDB:zm,CLUSTERING_HUB:qd,CLUSTERING_LEAF:xd,CLUSTERING_INGEST_SERVICE:tY,CLUSTERING_REPLY_SERVICE:rY,CUSTOM_FUNCTIONS:Hd,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"},cY={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},lY={harperdb:zm,"clustering hub":qd,"clustering leaf":xd,"custom functions":Hd,custom_functions:Hd,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},uY={CLUSTERING_HUB_PROC_DESCRIPTOR:qd,CLUSTERING_LEAF_PROC_DESCRIPTOR:xd},jm={HDB:yn.join($i,"server/harperdb"),CUSTOM_FUNCTIONS:yn.join($i,"server/customFunctions"),CLUSTERING_HUB:yn.join($i,"server/nats"),CLUSTERING_LEAF:yn.join($i,"server/nats")},_Y={HDB:yn.join(jm.HDB,dy),CUSTOM_FUNCTIONS:yn.join(jm.CUSTOM_FUNCTIONS,fy)},dY={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:yn.join($i,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:yn.join($i,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:yn.join($i,"launchServiceScripts/launchUpdateNodes4-0-0.js")},fY={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Ey="support@harperdb.io",EY="customer-success@harperdb.io",hy=1,hY=4141,py="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",pY="https://www.harperdb.io/product",mY=`For support, please submit a request at ${py} or contact ${Ey}`,my=`For license support, please contact ${EY}`,SY="None of the specified records were found.",TY="hash attribute not found",gY=`Your current license only supports ${hy} role. ${my}`,RY="Your current license only supports 3 connections to a node.",AY="127.0.0.1",OY=1,bY=/^\.$/,NY=/^\.\.$/,yY="U+002E",IY=/\//g,wY="U+002F",CY=/U\+002F/g,DY=/^U\+002E$/,LY=/^U\+002EU\+002E$/,PY="d",MY=999999,UY="*",vY="--max-old-space-size=",BY="system",HY="__hdb_hash",GY=".harperdb",qY=".hdb",xY="keys",FY="hdb_boot_properties.file",kY=".updateConfig.json",$Y="SIGTSTP",VY=24,YY=6e4,KY=448,WY="blob",QY="trash",jY="database",zY="schema",JY="transactions",XY=".count",ZY="id",e1="PROCESS_NAME",Sy={SETTINGS_PATH_KEY:"settings_path"},Ty=require("lodash"),t1={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"},r1={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},n1={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},s1={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"},i1={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"},jr="hdb_internal:",o1={CREATE_SCHEMA:jr+"create_schema",CREATE_TABLE:jr+"create_table",CREATE_ATTRIBUTE:jr+"create_attribute",ADD_USER:jr+"add_user",ALTER_USER:jr+"alter_user",DROP_USER:jr+"drop_user",HDB_NODES:jr+"hdb_nodes",HDB_USERS:jr+"hdb_users",HDB_WORKERS:jr+"hdb_workers",CATCHUP:jr+"catchup",SCHEMA_CATCHUP:jr+"schema_catchup",WORKER_ROOM:jr+"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"},c1="060493.ks",l1=".license",u1={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"},_1={CSV:".csv",JSON:".json"},d1={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},f1={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Ml={};Ml[ee.INSERT]=ee.INSERT;Ml[ee.UPDATE]=ee.UPDATE;Ml[ee.UPSERT]=ee.UPSERT;Ml[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 E1={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"},h1={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},gy={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=Ty.invert(gy),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"},Ry={settings_path:Sy.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];Ry[t.toLowerCase()]=t}var S1={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},T1={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"},g1={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"},R1={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},A1={VERSION_DEFAULT:"2.2.0"},O1={DEVELOPMENT:8192,DEFAULT:512},b1={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"},N1={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"},y1={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},Ay={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},I1=Symbol("metadata"),w1="__clustering__",C1=Object.values(Ay),D1=15984864e5,Oy={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},L1=Ty.invert(Oy),P1={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"},M1=111,U1=`\r
3
- `,v1={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},B1=["*","%"],H1="unauthorized_access",G1="func_val",q1={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},x1={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},F1={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"},k1={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},$1={HTTP:"http"},V1={STOPPED:"stopped",ONLINE:"online"},Y1="3.x.x",K1={SUCCESS:"success",FAILURE:"failure"},W1={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};by.exports={LOCAL_HARPERDB_OPERATIONS:xe,HDB_SUPPORT_ADDRESS:Ey,HDB_SUPPORT_URL:py,HDB_PRICING_URL:pY,SUPPORT_HELP_MSG:mY,LICENSE_HELP_MSG:my,HDB_PROC_NAME:dy,HDB_PROC_DESCRIPTOR:zm,CLUSTERING_LEAF_PROC_DESCRIPTOR:xd,CLUSTERING_HUB_PROC_DESCRIPTOR:qd,SYSTEM_SCHEMA_NAME:BY,HASH_FOLDER_NAME:HY,HDB_HOME_DIR_NAME:GY,UPDATE_FILE_NAME:kY,LICENSE_KEY_DIR_NAME:xY,BOOT_PROPS_FILE_NAME:FY,JOB_TYPE_ENUM:T1,JOB_STATUS_ENUM:u1,SYSTEM_TABLE_NAMES:s1,SYSTEM_TABLE_HASH_ATTRIBUTES:i1,OPERATIONS_ENUM:ee,VALID_S3_FILE_TYPES:_1,S3_BUCKET_AUTH_KEYS:d1,VALID_SQL_OPS_ENUM:f1,GEO_CONVERSION_ENUM:h1,HDB_SETTINGS_NAMES:gy,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:p1,SERVICE_ACTIONS_ENUM:E1,CLUSTER_MESSAGE_TYPE_ENUM:g1,CLUSTER_CONNECTION_DIRECTION_ENUM:R1,CLUSTER_EVENTS_DEFS_ENUM:b1,PERIOD_REGEX:bY,DOUBLE_PERIOD_REGEX:NY,UNICODE_PERIOD:yY,FORWARD_SLASH_REGEX:IY,UNICODE_FORWARD_SLASH:wY,ESCAPED_FORWARD_SLASH_REGEX:CY,ESCAPED_PERIOD_REGEX:DY,ESCAPED_DOUBLE_PERIOD_REGEX:LY,REG_KEY_FILE_NAME:c1,RESTART_TIMEOUT_MS:YY,HDB_FILE_PERMISSIONS:KY,DATABASES_DIR_NAME:jY,LEGACY_DATABASES_DIR_NAME:zY,TRANSACTIONS_DIR_NAME:JY,LIMIT_COUNT_NAME:XY,ID_ATTRIBUTE_STRING:ZY,INSERT_MODULE_ENUM:r1,UPGRADE_JSON_FIELD_NAMES_ENUM:n1,RESTART_CODE:$Y,RESTART_CODE_NUM:VY,CLUSTER_OPERATIONS:Ml,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:a1,HDB_INTERNAL_SC_CHANNEL_PREFIX:jr,INTERNAL_SC_CHANNELS:o1,CLUSTERING_MESSAGE_TYPES:P1,HDB_FILE_SUFFIX:qY,BLOB_FOLDER_NAME:WY,HDB_TRASH_DIR:QY,ORIGINATOR_SET_VALUE:M1,LICENSE_VALUES:A1,RAM_ALLOCATION_ENUM:O1,TIME_STAMP_NAMES_ENUM:Ay,TIME_STAMP_NAMES:C1,PERMS_UPDATE_RELEASE_TIMESTAMP:D1,SEARCH_NOT_FOUND_MESSAGE:SY,SEARCH_ATTRIBUTE_NOT_FOUND:TY,LICENSE_ROLE_DENIED_RESPONSE:gY,LICENSE_MAX_CONNS_REACHED:RY,BASIC_LICENSE_MAX_NON_CU_ROLES:hy,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:hY,VALUE_SEARCH_COMPARATORS:Oy,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:L1,LICENSE_FILE_NAME:l1,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:N1,NEW_LINE:U1,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:OY,MOMENT_DAYS_TAG:PY,API_TURNOVER_SEC:MY,LOOPBACK:AY,CODE_EXTENSION:Gd,WILDCARD_SEARCH_VALUE:UY,NODE_ERROR_CODES:y1,JAVASCRIPT_EXTENSION:_y,PERMS_CRUD_ENUM:v1,UNAUTHORIZED_PERMISSION_NAME:H1,SEARCH_WILDCARDS:B1,FUNC_VAL:G1,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:q1,JWT_ENUM:x1,CLUSTERING_FLAG:w1,ITC_EVENT_TYPES:F1,CUSTOM_FUNCTION_PROC_NAME:fy,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Hd,SERVICES:k1,THREAD_TYPES:$1,MEM_SETTING_KEY:vY,HDB_RESTART_SCRIPT:eY,PROCESS_DESCRIPTORS:oY,SERVICE_SERVERS:_Y,SERVICE_SERVERS_CWD:jm,PROCESS_DESCRIPTORS_VALIDATE:lY,LAUNCH_SERVICE_SCRIPTS:dY,LOG_LEVELS:cY,PROCESS_NAME_ENV_PROP:e1,LOG_NAMES:aY,PM2_PROCESS_STATUSES:V1,CONFIG_PARAM_MAP:Ry,CONFIG_PARAMS:w,HDB_CONFIG_FILE:JV,HDB_DEFAULT_CONFIG_FILE:XV,ROLE_TYPES_ENUM:fY,BOOT_PROP_PARAMS:Sy,INSTALL_PROMPTS:t1,HDB_ROOT_DIR_NAME:ZV,CLUSTERING_PROCESSES:uY,FOREGROUND_PID_FILE:nY,PACKAGE_ROOT:$i,PRE_4_0_0_VERSION:Y1,DATABASES_PARAM_CONFIG:S1,METADATA_PROPERTY:I1,AUTH_AUDIT_STATUS:K1,AUTH_AUDIT_TYPES:W1,HDB_PID_FILE:sY,DEFAULT_DATABASE_NAME:iY,LEGACY_CONFIG_PARAMS:m1};uy()});var qo=g((lhe,Iy)=>{"use strict";var Ny=require("minimist");Iy.exports=Q1;function Q1(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=yy(process.env),n=yy(Ny(process.argv))):(r=process.env,n=Ny(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(Q1,"assignCMDENVVariables");function yy(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(yy,"objKeysToLowerCase")});var x=g((_he,nS)=>{"use strict";var xo=require("fs-extra"),{workerData:j1,threadId:z1}=require("worker_threads"),ei=require("path"),Dy=require("yaml"),Ly=require("properties-reader"),Mt=C(),wy=qo(),J1=require("os"),{PACKAGE_ROOT:Xm}=C(),{_assignPackageExport:X1}=require("../index"),vl={};for(let e in console)vl[e]||(vl[e]=console[e]);var gr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Py={STDOUT:"stdOut",STDERR:"stdErr"},Z1=ei.join(Xm,"logs"),eK=ei.join(Xm,"config/yaml/",Mt.HDB_DEFAULT_CONFIG_FILE),tK=1e4,Zs,bs,Tr,Fd,kd,Bl,nc,Ul;Ul===void 0&&My();nS.exports={notify:By,fatal:Hy,error:Hl,warn:rS,info:$d,debug:tS,trace:eS,setLogLevel:cK,log_level:Tr,loggerWithTag:rK,suppressLogging:nK,initLogSettings:My,setupConsoleLogging:Uy,logCustomLevel:oK,closeLogFile:Zm,getLogFilePath:()=>Bl,OUTPUTS:Py,AuthAuditLog:_K};X1("logger",nS.exports);function My(e=!1){try{if(Ul===void 0||e){Zm();let t=aK(),r=wy(["ROOTPATH"]);try{Ul=Ly(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!xo.pathExistsSync(ei.join(r.ROOTPATH,Mt.HDB_CONFIG_FILE)))throw n}({level:Tr,config_log_path:kd,to_file:Zs,to_stream:bs}=lK(r.ROOTPATH?ei.join(r.ROOTPATH,Mt.HDB_CONFIG_FILE):Ul.get("settings_path"))),Fd=Mt.LOG_NAMES.HDB,Bl=ei.join(kd,Fd)}}catch(t){if(Ul=void 0,t.code===Mt.NODE_ERROR_CODES.ENOENT){let r=wy(Object.keys(Mt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Mt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Mt.CONFIG_PARAMS.LOGGING_LEVEL){Tr=l;continue}if(c===Mt.CONFIG_PARAMS.LOGGING_STDSTREAMS){bs=l;continue}c===Mt.CONFIG_PARAMS.LOGGING_FILE&&(Zs=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=uK();Zs=Zs===void 0?s:Zs,Zs=Cy(Zs),bs=bs===void 0?i:bs,bs=Cy(bs),Tr=Tr===void 0?n:Tr,kd=Z1,Fd=Mt.LOG_NAMES.INSTALL,Bl=ei.join(kd,Fd);return}throw Hl("Error initializing log settings"),Hl(t),t}process.env.DEV_MODE&&(bs=!0),Uy()}a(My,"initLogSettings");var Jm=!0;function Uy(){rc("error",Hl),rc("warn",rS),rc("log",$d),rc("info",$d),rc("debug",tS),rc("trace",eS)}a(Uy,"setupConsoleLogging");function rc(e,t){console[e]=function(...r){if(Jm&&t(...r),!/PM2 log:|App \[/.test(r[0]))return vl[e](...r)}}a(rc,"logConsole");function rK(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(By),fatal:r(Hy),error:r(Hl),warn:r(rS),info:r($d),debug:r(tS),trace:r(eS)};function r(n){return function(...s){return n(t,...s)}}}a(rK,"loggerWithTag");function nK(e){try{Jm=!1,e()}finally{Jm=!0}}a(nK,"suppressLogging");var sK=j1?.name?.replace(/ /g,"-")||"main";function ti(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||sK+"/"+z1);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(ti,"createLogRecord");function Gl(e){Zs&&vy(e),bs&&process.stdout.write(e)}a(Gl,"logStdOut");function Vd(e){Zs&&vy(e),bs&&process.stderr.write(e)}a(Vd,"logStdErr");function vy(e){iK(),nc?xo.appendFileSync(nc,e):vl.log(e)}a(vy,"logToFile");function Zm(){try{xo.closeSync(nc)}catch{}nc=null}a(Zm,"closeLogFile");function iK(){if(!nc){try{if(!Bl)debugger;nc=xo.openSync(Bl,"a")}catch(e){vl.error(e)}setTimeout(()=>{Zm()},tK).unref()}}a(iK,"openLogFile");function $d(...e){gr[Tr]<=gr.info&&Gl(ti("info",e))}a($d,"info");function eS(...e){gr[Tr]<=gr.trace&&Gl(ti("trace",e))}a(eS,"trace");function Hl(...e){gr[Tr]<=gr.error&&Vd(ti("error",e))}a(Hl,"error");function tS(...e){gr[Tr]<=gr.debug&&Gl(ti("debug",e))}a(tS,"debug");function By(...e){gr[Tr]<=gr.notify&&Gl(ti("notify",e))}a(By,"notify");function Hy(...e){gr[Tr]<=gr.fatal&&Vd(ti("fatal",e))}a(Hy,"fatal");function rS(...e){gr[Tr]<=gr.warn&&Vd(ti("warn",e))}a(rS,"warn");function oK(e,t,...r){t===Py.STDERR?Vd(ti(e,r)):Gl(ti(e,r))}a(oK,"logCustomLevel");function aK(){let e;try{e=J1.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ei.join(e,Mt.HDB_HOME_DIR_NAME,Mt.BOOT_PROPS_FILE_NAME);return xo.existsSync(t)||(t=ei.join(Xm,"utility/hdb_boot_properties.file")),t}a(aK,"getPropsFilePath");function cK(e){Tr=e}a(cK,"setLogLevel");function Cy(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Cy,"autoCastBoolean");function lK(e){try{if(e.includes("config/settings.js")){let o=Ly(e);return{level:o.get(Mt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ei.dirname(o.get(Mt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Mt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Mt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Dy.parseDocument(xo.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===Mt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(lK,"getLogConfig");function uK(){try{let e=Dy.parseDocument(xo.readFileSync(eK,"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(uK,"getDefaultConfig");function _K(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(_K,"AuthAuditLog")});var Fo=g((fhe,dK)=>{dK.exports={name:"harperdb",version:"4.3.0",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.0",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 Vi=g((Ehe,Gy)=>{"use strict";Gy.exports={version:fK,printVersion:EK};var Yd=Fo();function fK(){if(Yd)return Yd.version}a(fK,"version");function EK(){Yd&&console.log(`HarperDB Version ${Yd.version}`)}a(EK,"printVersion")});var Fy=g((phe,xy)=>{"use strict";var qy=require("semver/functions/major"),hK=Fo(),sS=process.versions&&process.versions.node?process.versions.node:void 0;xy.exports=pK;function pK(){let e=hK.engines["minimum-node"];if(sS&&qy(sS)<qy(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${sS}. Please install a version of Node.js that is withing the defined range.`}}a(pK,"checkNodeVersion")});var ko={};Fe(ko,{server:()=>at});var ky,at,Rr=Oe(()=>{ky=require("../index"),at={};(0,ky._assignPackageExport)("server",at)});var iS=g((She,$y)=>{"use strict";var mK=require("util"),SK=require("path"),TK=require("child_process"),gK=mK.promisify(TK.execFile),RK=1e3*1e3*10;$y.exports={findPs:AK};async function AK(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await gK("ps",["wwxo",`pid,${r}`],{maxBuffer:RK});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:SK.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(AK,"findPs")});var ct=g((ghe,Yy)=>{"use strict";var OK="__dbis__",bK="__txns__",NK="__environment_name__",yK="__dbi_defintion__",IK={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"},wK=["__createdtime__","__updatedtime__"],CK="\uFFFF",Vy={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},DK=Object.values(Vy);Yy.exports={AUDIT_STORE_NAME:bK,INTERNAL_DBIS_NAME:OK,DBI_DEFINITION_NAME:yK,SEARCH_TYPES:IK,TIMESTAMP_NAMES:wK,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:NK,TRANSACTIONS_DBI_NAMES_ENUM:Vy,TRANSACTIONS_DBIS:DK,OVERFLOW_MARKER:CK}});var zr=g((Rhe,eI)=>{"use strict";var Ky=C(),Wy=ct(),Qy={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},jy=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),zy={500:jy("There was an error processing your request."),400:"Invalid request"},LK=zy[Qy.INTERNAL_SERVER_ERROR],PK={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.`},MK={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},UK={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"},vK={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 ${Wy.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Wy.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"},BK={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Ky.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 ${Ky.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"},Jy={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"},HK={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."},GK={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`},qK={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"},xK={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},FK={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`},Xy={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}`},kK={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."},$K={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},VK={...Jy,...UK,...PK,...HK,...GK,...qK,...xK,...FK,...BK,...Xy,...Zy,...kK,...$K,...MK};eI.exports={CHECK_LOGS_WRAPPER:jy,HDB_ERROR_MSGS:VK,DEFAULT_ERROR_MSGS:zy,DEFAULT_ERROR_RESP:LK,HTTP_STATUS_CODES:Qy,LMDB_ERRORS_ENUM:vK,AUTHENTICATION_ERROR_MSGS:Jy,VALIDATION_ERROR_MSGS:Xy,ITC_ERRORS:Zy}});var oe=g((Ohe,nI)=>{"use strict";var sc=zr(),YK=x(),KK=C(),Kd=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,tI),this.statusCode=n||sc.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(sc.DEFAULT_ERROR_MSGS[n]?sc.DEFAULT_ERROR_MSGS[n]:sc.DEFAULT_ERROR_MSGS[sc.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&&YK[s](i)}},oS=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}},aS=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function tI(e,t,r,n=KK.LOG_LEVELS.ERROR,s=null,i=!1){if(rI(e))return e;let o=new Kd(e,t,r,n,s);return i&&delete o.stack,o}a(tI,"handleHDBError");function rI(e){return e.__proto__.constructor.name===Kd.name}a(rI,"isHDBError");nI.exports={isHDBError:rI,handleHDBError:tI,ClientError:oS,ServerError:aS,hdb_errors:sc}});var ze=g((Nhe,uI)=>{"use strict";var $l=C(),WK=K(),Ar=X(),Vl=require("path"),QK=require("minimist"),sI=require("fs-extra"),iI=require("lodash");Ar.initSync();var{CONFIG_PARAMS:Yi,DATABASES_PARAM_CONFIG:ql,SYSTEM_SCHEMA_NAME:Wd}=$l,xl,Fl,kl;function oI(){if(xl!==void 0)return xl;if(Ar.getHdbBasePath()!==void 0)return xl=Ar.get(Yi.STORAGE_PATH)||Vl.join(Ar.getHdbBasePath(),$l.DATABASES_DIR_NAME),xl}a(oI,"getBaseSchemaPath");function aI(){if(Fl!==void 0)return Fl;if(Ar.getHdbBasePath()!==void 0)return Fl=lI(Wd),Fl}a(aI,"getSystemSchemaPath");function cI(){if(kl!==void 0)return kl;if(Ar.getHdbBasePath()!==void 0)return kl=Ar.get($l.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Vl.join(Ar.getHdbBasePath(),$l.TRANSACTIONS_DIR_NAME),kl}a(cI,"getTransactionAuditStoreBasePath");function jK(e,t){let r=Ar.get(Yi.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Vl.join(cI(),e.toString())}a(jK,"getTransactionAuditStorePath");function lI(e,t){e=e.toString(),t=t&&t.toString();let r=Ar.get($l.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Vl.join(oI(),e)}a(lI,"getSchemaPath");function zK(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,QK(process.argv));let n=r[Yi.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!WK.isObject(n))throw o;i=n}for(let o of i){let c=o[Wd];if(!c)continue;let l=Ar.get(Yi.DATABASES);l=l??{};let _=c?.tables?.[t]?.[ql.PATH];if(_)return iI.set(l,[Wd,ql.TABLES,t,ql.PATH],_),Ar.setProperty(Yi.DATABASES,l),_;let u=c?.[ql.PATH];if(u)return iI.set(l,[Wd,ql.PATH],u),Ar.setProperty(Yi.DATABASES,l),u}}let s=r[Yi.STORAGE_PATH.toUpperCase()];if(s){if(!sI.pathExistsSync(s))throw new Error(s+" does not exist");let i=Vl.join(s,e);return sI.mkdirsSync(i),Ar.setProperty(Yi.STORAGE_PATH,s),i}return aI()}a(zK,"initSystemSchemaPaths");function JK(){xl=void 0,Fl=void 0,kl=void 0}a(JK,"resetPaths");uI.exports={getBaseSchemaPath:oI,getSystemSchemaPath:aI,getTransactionAuditStorePath:jK,getTransactionAuditStoreBasePath:cI,getSchemaPath:lI,initSystemSchemaPaths:zK,resetPaths:JK}});var Or=g((Che,hI)=>{"use strict";var XK=zr().LMDB_ERRORS_ENUM,Ihe=require("lmdb"),ZK=ct(),whe=require("buffer").Buffer,{OVERFLOW_MARKER:_I,MAX_SEARCH_KEY_LENGTH:Qd}=ZK,dI=["number","string","symbol","boolean","bigint"];function eW(e){if(e=e?.primaryStore||e,!e)throw new Error(XK.ENV_REQUIRED)}a(eW,"validateEnv");function tW(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(tW,"stringifyData");function rW(e){return e instanceof Date?e.valueOf():e}a(rW,"convertKeyValueToWrite");function nW(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(dI.includes(typeof e))return e.length>Qd?[e.slice(0,Qd)+_I]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(dI.includes(typeof i))i.length>Qd?r.push(i.slice(0,Qd)+_I):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(nW,"getIndexedValues");var jd=0,fI=0;function EI(){fI=Date.now()-performance.now()}a(EI,"adjustStartTime");EI();var sW=6e4;setInterval(EI,sW).unref();function iW(){let e=performance.now()+fI;return e>jd?(jd=e,e):(jd+=488e-6,jd)}a(iW,"getNextMonotonicTime");hI.exports={validateEnv:eW,stringifyData:tW,convertKeyValueToWrite:rW,getNextMonotonicTime:iW,getIndexedValues:nW}});var pI,zn,cS,Yl=Oe(()=>{pI=require("events"),zn=class extends pI.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new cS;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)}},cS=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 gI={};Fe(gI,{HAS_EXPIRATION:()=>hS,LAST_TIMESTAMP_PLACEHOLDER:()=>Ql,LOCAL_TIMESTAMP:()=>oW,METADATA:()=>Kl,NO_TIMESTAMP:()=>uS,PENDING_LOCAL_TIME:()=>pS,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>ES,RecordEncoder:()=>fS,TIMESTAMP_ASSIGN_LAST:()=>cW,TIMESTAMP_ASSIGN_NEW:()=>SI,TIMESTAMP_ASSIGN_PREVIOUS:()=>TI,TIMESTAMP_PLACEHOLDER:()=>zd,TIMESTAMP_RECORD_PREVIOUS:()=>_S,getUpdateRecord:()=>mS,handleLocalTimeForGets:()=>ef});function uW(){return Wl[0]=Wl[0]^64,aW.getFloat64(0)}function ef(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?.[Kl];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?.[Kl]>=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[Kl];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,$o.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<$o.length;l++){let _=$o[l].deref();(!_||_.isDone||_.isCommitted)&&$o.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function mS(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",f,E){if(f||l==null?ic=i?.localTime?_S|TI:uS:ic=l?i?.localTime?_S|16384:SI|16384:uS,u>0&&(c|=hS),Xd=c,dS=u,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:ic>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&&(Jd=e.encoder.encode(E)),f&&i?.localTime){let T=i?.localTime,A=r.get(T);if(A){let P=kt(A).previousLocalTime;return r.put(T,Zd(o,t,n,P,R,d,Jd),{ifVersion:m}),S}}r.put(Ql,Zd(o,t,n,i?.localTime?1:0,R,d,Jd),{append:d!=="invalidate",instructedWrite:!0,ifVersion:m})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var mI,lS,zd,Ql,ES,oW,Kl,Wl,aW,uS,SI,cW,TI,_S,hS,pS,lW,Jd,ic,Xd,dS,fS,$o,jl=Oe(()=>{mI=require("msgpackr");Ki();lS=B(x()),zd=new Uint8Array([1,1,1,1,4,64,0,0]),Ql=new Uint8Array([1,1,1,1,1,0,0,0]),ES=new Uint8Array([1,1,1,1,3,64,0,0]),oW=Symbol("local-timestamp"),Kl=Symbol("metadata"),Wl=new Uint8Array(8),aW=new DataView(Wl.buffer,0,8),uS=0,SI=0,cW=1,TI=3,_S=4,hS=16,pS=1,ic=0,Xd=-1,dS=0,fS=class extends mI.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(ic||Xd>=0){let i=0,o=ic;o&&(i+=8,ic=0);let c=Xd,l=dS;c>=0&&(i+=2,Xd=-1,l&&(i+=8,dS=0));let _=lW=r.call(this,n,s|2048|i);Jd=_.subarray((_.start||0)+i,_.end);let u=_.start||0;return o&&(zd[4]=o,zd[5]=o>>8,_.set(zd,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(Wl,0,c),c+=8;else for(let d=0;d<8;d++)Wl[d]=t[c++];l=uW(),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,[Kl]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(uW,"getTimestamp");a(ef,"handleLocalTimeForGets");$o=[];setInterval(()=>{for(let e=0;e<$o.length;e++){let t=$o[e].deref();!t||t.isDone||t.isCommitted?$o.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(mS,"getUpdateRecord")});var LI={};Fe(LI,{AUDIT_STORE_OPTIONS:()=>sf,createAuditEntry:()=>Zd,openAuditStore:()=>of,readAuditEntry:()=>kt,setAuditRetention:()=>dW,transactionKeyEncoder:()=>CI});function of(e){let t=e.auditStore=e.openDB(yI.AUDIT_STORE_NAME,sf);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=tf){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()-SS})){if((_[0]&15)===RS){let u=kt(_),d=u.tableId;r[d]?.(u.recordId)}if(c=t.remove(l),await new Promise(setImmediate),++o>=_W){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,SS/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,nf.getWorkerIndex)()===(0,nf.getWorkerCount)()-1&&s(tf),t}function dW(e,t=tf){SS=e,tf=t}function Zd(e,t,r,n,s,i,o){let c=DI[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let l=1;n&&(n>1?oc.setFloat64(0,n):In.set(ES),l=9),f(0),f(t),d(r),oc.setFloat64(l,e),l+=8,s?d(s):In[l++]=0,In[n?8:0]=c;let u=In.subarray(0,l);if(o)return Buffer.concat([u,o]);return u;function d(E){let h=l;l+=1,l=(0,ac.writeKey)(E,In,l);let m=l-h-1;m>127?m>16383?(OS.error("Key or username was too large for audit entry",E),l=h+1,In[h]=0):(In.copyWithin(h+2,h+1,l),oc.setUint16(h,m|32768),l++):In[h]=m}function f(E){E<128?In[l++]=E:E<16384?(oc.setUint16(l,E|32768),l+=2):E<1056964608?(oc.setUint32(l,E|3221225472),l+=4):(In[l]=255,oc.setUint32(l+1,E),l+=5)}}function kt(e){try{let t=e.dataView||(e.dataView=new AS(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:DI[n&7],tableId:i,get recordId(){return NI(e,c,l)},version:_,previousLocalTime:r,get user(){return d>u?NI(e,u,d):void 0},getValue(f,E,h){if(n&TS||n&gS&&!E)return f.decoder.decode(e.subarray(t.position));if(n&gS&&h)return bS(f.getEntry(this.recordId),h,f)}}}catch(t){return OS.error("Reading audit entry error",t,e),{}}}function NI(e,t,r){let n=e.subarray(t,r);return(0,ac.readKey)(n,0,r-t)}var ac,rf,yI,II,nf,wI,OS,In,oc,CI,sf,SS,_W,tf,TS,gS,RI,RS,AI,OI,bI,DI,AS,Ki=Oe(()=>{ac=require("ordered-binary"),rf=B(X()),yI=B(ct()),II=B(C()),nf=B(tt()),wI=B(K());jl();OS=B(x());af();(0,rf.initSync)();In=Buffer.alloc(1024),oc=new DataView(In.buffer,In.byteOffset,1024),CI={writeKey(e,t,r){return e===Ql?(t.set(Ql,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,ac.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,ac.readKey)(e,t,r)}},sf={encoding:"binary",keyEncoder:CI},SS=(0,wI.convertToMS)((0,rf.get)(II.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,_W=1e3,tf=1e4;a(of,"openAuditStore");a(dW,"setAuditRetention");TS=16,gS=32,RI=1,RS=2,AI=3,OI=4,bI=5,DI={put:RI|TS,[RI]:"put",delete:RS,[RS]:"delete",message:AI|TS,[AI]:"message",invalidate:OI,[OI]:"invalidate",patch:bI|gS,[bI]:"patch"};a(Zd,"createAuditEntry");a(kt,"readAuditEntry");AS=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(NI,"readKeySafely")});var NS={};Fe(NS,{add:()=>cf,applyReverse:()=>PI,getRecordAtTime:()=>bS,rebuildUpdateBefore:()=>lf});function cf(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function lf(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,cf(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function PI(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=fW[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=MI}}function bS(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":PI(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let l in s)s[l]===MI&&(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 fW,MI,af=Oe(()=>{Ki();a(cf,"add");cf.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};fW={add:cf};a(lf,"rebuildUpdateBefore");a(PI,"applyReverse");MI={};a(bS,"getRecordAtTime")});function Jr(e){return e[Ut]||(e[Ut]=Object.create(null))}function Ef(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[ye])},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 wn.ClientError(`${c} must be a string, attempt to assign ${u}`);Jr(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 wn.ClientError(`${c} must be a string, attempt to assign ${u}`);Jr(this)[c]=u},"set");break;case"Float":case"Number":l=a(function(u){if(!(typeof u=="number"||u==null&&o.nullable!==!1))throw new wn.ClientError(`${c} must be a number, attempt to assign ${u}`);Jr(this)[c]=u},"set");break;case"Int":l=a(function(u){if(!(u>>0===u||u==null&&o.nullable!==!1))if(typeof u=="number"&&Math.abs((u>>0)-u)<=1)u=Math.round(u);else throw new wn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${u}`);Jr(this)[c]=u},"set");break;case"Long":l=a(function(u){if(!(Math.round(u)===u&&Math.abs(u)<=9007199254740992||u==null&&o.nullable!==!1))if(typeof u=="number"&&Math.abs(u)<=9007199254740992)u=Math.round(u);else throw new wn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${u}`);Jr(this)[c]=u},"set");break;case"BigInt":l=a(function(u){if(!(typeof u=="bigint"||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=BigInt(u);else throw new wn.ClientError(`${c} must be a number, attempt to assign ${u}`);Jr(this)[c]=u},"set");break;case"Boolean":l=a(function(u){if(!(typeof u=="boolean"||u==null&&o.nullable!==!1))throw new wn.ClientError(`${c} must be a boolean, attempt to assign ${u}`);Jr(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 wn.ClientError(`${c} must be a Date, attempt to assign ${u}`);Jr(this)[c]=u},"set");break;case"Bytes":l=a(function(u){if(!(u instanceof Uint8Array||u==null&&o.nullable!==!1))throw new wn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${u}`);Jr(this)[c]=u},"set");break;case"Any":case void 0:l=a(function(u){Jr(this)[c]=u},"set");break;default:l=a(function(u){if(!(typeof u=="object"||u==null&&o.nullable!==!1))throw new wn.ClientError(`${c} must be an object, attempt to assign ${u}`);Jr(this)[c]=u},"set")}_={get(){let u=this[Ut];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=vI(d,o);if(f)return u||(u=this[Ut]=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[Ut];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 wn.ClientError("Can not add a property to a sealed table schema");Jr(this)[o]=c}),i("deleteProperty",function(o){Jr(this)[o]=void 0}),i("toJSON",function(){let o=this[Ut],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 vI(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}},Ef(r,t)),new r(e)):new uf(e);case Array:let n=new df(e.length);n[fe]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=vI(o,t?.elements)),n[s]=o}return n;default:return e}}function hf(e){let t=e[Ut],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=hf(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[fe])),Object.assign(r,e)),r||e[fe]}function Yo(e,t=e[Ut]){let r;if(UI.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=Yo(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=NS[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Yo(s);r[n]=s}return r?Object.freeze(r):UI.call(e,fe)?e[fe]:e}function _f(e){let t=e[fe];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Vo]||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(_f(i))return!0}else return!0}}else{let r=e[Ut];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(_f(s))return!0}else return!0}else return!0}}return!1}var wn,Ut,uf,UI,Vo,df,ff,pf=Oe(()=>{Jn();wn=B(oe());af();Ut=Symbol("own-data");a(Jr,"getChanges");a(Ef,"assignTrackedAccessors");a(vI,"trackObject");uf=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}};Ef(uf,{});a(hf,"collapseData");UI=Object.prototype.hasOwnProperty;a(Yo,"deepFreeze");a(_f,"hasChanges");Vo=Symbol.for("has-array-changes"),df=class extends Array{static{a(this,"TrackedArray")}[Vo];constructor(t){super(t)}splice(...t){return this[Vo]=!0,super.splice(...t)}push(...t){return this[Vo]=!0,super.push(...t)}pop(){return this[Vo]=!0,super.pop()}unshift(...t){return this[Vo]=!0,super.unshift(...t)}shift(){return this[Vo]=!0,super.shift()}};df.prototype.constructor=Array;ff=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});function SW(){mW=setInterval(function(){for(let e of yS)if(e.stale){let t=e[ye]?.url;GI.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},pW).unref()}var IS,HI,GI,EW,yS,hW,zl,BI,Ko,mf,pW,mW,wS=Oe(()=>{IS=B(Or()),HI=B(oe()),GI=B(x());Jn();EW=100,yS=new Set,hW=25e3,Ko=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),yS.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(yS.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(zl&&performance.now()-BI>hW)throw new HI.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,IS.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<EW>>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 zl||(zl=s,BI=performance.now(),zl.then(()=>{zl=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=[]}},mf=class extends Ko{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,IS.getNextMonotonicTime)())}getReadTxn(){}},pW=3e4;a(SW,"startMonitoringTxns");SW()});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 Ko;e.timestamp&&(n.timestamp=e.timestamp),n[ye]=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 qI,Wo=Oe(()=>{qI=require("../index");Jn();wS();a(Ze,"transaction");(0,qI._assignPackageExport)("transaction",Ze);Ze.commit=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ze.abort=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function LS(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?LS(d.conditions,d.operator,r,n,s,i,o,c):uc(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?(P,v)=>A.some(U=>U(P,v)):(P,v)=>A.every(U=>U(P,v))}let S=(h.attribute||h[0])===r.primaryKey,R=MS(h,r,i,c,S,E);return f&&m<d.length-1&&E&&(E=IW(r.primaryStore,h.estimated_count,E)),R}).filter(Boolean)}a(u,"mapConditionsToFilters")}function uc(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=ni(n.attributes,T);if(A.relationship){if(o.length<2)throw new Xr.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,v=new Map,U=uc({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,P,s,v);if(A.relationship.to){i[o[0]]=v;let k=!!ni(P.attributes,A.relationship.to)?.elements;U=OW(U,A,P.primaryStore,k,v)}if(A.relationship.from){let k=a(H=>uc({attribute:A.relationship.from,value:H},t,r,n,s,v),"searchEntry");A.elements?(i[o[0]]=v,U=bW(U,A,P.primaryStore,v,k)):U=U.flatMap(k)}return U}else if(o.length===1)o=o[0];else throw new Xr.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,u,d,f;c instanceof Date&&(c=c.getTime());let E;switch(PS[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]=Ns.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 Xr.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 Xr.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&E)throw new Xr.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 Xr.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!m.indexNulls)throw new Xr.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=MS(e),!S)throw new Xr.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:P}){return this.isSync?P&&S(P)?A:Wi.SKIP:new Promise((v,U)=>setImmediate(()=>{try{v(P&&S(P)?A:Wi.SKIP)}catch(k){U(k)}}))}:A=>A.value==null?Wi.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:Wi.SKIP:new Promise((P,v)=>setImmediate(()=>{try{P(S({[o]:T})?A:Wi.SKIP)}catch(U){v(U)}}))}:({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:Wi.SKIP:new Promise((P,v)=>setImmediate(()=>{try{P(A&&S(A)?T:Wi.SKIP)}catch(U){v(U)}}))})}function ni(e,t){if(Array.isArray(t))if(t.length>1){let r=ni(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?ni(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 OW(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=Xn(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 bW(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 _=Xn(l.value);if(!c.has(_))return c.add(_),l}if(!i){let _=new Map;n.fromRecord=u=>u[t.relationship.from]?.filter?.(d=>_.has(Xn(d)));for(let u of e){if(n.filters){let d=r.get(u);if(n.filters.some(f=>!f(d)))continue}_.set(Xn(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 MS(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=ni(t.attributes,u),f=d.definition?.tableClass||d.elements.definition?.tableClass,E=n?.[u],h=MS({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 P,v;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 U=S(T);return S.idFilter&&(R.idFilter=S.idFilter),U}v=m(T,r,A),P=v?.value}else P=T[u];return P?Array.isArray(P)?P.some(h):h(P,v):!1},"recordFilter");return R}}switch(l instanceof Date&&(l=l.getTime()),PS[o]||o){case CS.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,Ns.compareKeys)(u,l[0])>=0&&(0,Ns.compareKeys)(u,l[1])<=0,!0);case"gt":return _(c,u=>(0,Ns.compareKeys)(u,l)>0);case"ge":return _(c,u=>(0,Ns.compareKeys)(u,l)>=0);case"lt":return _(c,u=>(0,Ns.compareKeys)(u,l)<0);case"le":return _(c,u=>(0,Ns.compareKeys)(u,l)<=0);case"ne":return _(c,u=>(0,Ns.compareKeys)(u,l)!==0);case"sort":return()=>!0;default:throw new Xr.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&&Tf(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],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 v=uc(e,r.transaction.getReadTxn(),!1,t).map(Xn),U=new Set(v);R.idFilter=k=>U.has(Xn(k)),R.idFilter.idSet=U}return P}return a(R,"recordFilter"),s&&(R.idFilter=d),R}a(_,"attributeComparator")}function Tf(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/ri(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=PS[n]||n,n===CS.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=ni(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=Tf(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*ri(e.indices[i.relationship.from])/(ri(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=ri(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=RW*ri(e.primaryStore)+1:n==="between"?r.estimated_count=gW*ri(e.primaryStore)+1:n==="sort"?r.estimated_count=ri(e.primaryStore)+1:r.estimated_count=TW*ri(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function gf(e){if(e)if(Qi=e,cc.lastIndex=0,NW.test(e))try{let t=Jl(new lc,"");if(br!==Qi.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 ${br} in '${Qi}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Jl(e,t){let r=cc,n,s,i,o,c,l=decodeURIComponent,_;for(;n=r.exec(Qi);){br=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=xI}else{if(l=decodeURIComponent,i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");s=Xl(u)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=AW[d],l=DS[i]?xI:decodeURIComponent,!u)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=Xl(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"&&FI(h,u),Sf(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(Xl(u)),s=void 0;break;case"(":cc.lastIndex=br;let E=Jl(u?[]:new lc,")");switch(u){case"":Sf(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=kI(E);break;default:throw new SyntaxError(`unknown query function call ${u}`)}Qi[br]===","?r.lastIndex=++br: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");cc.lastIndex=br,f=Jl([],"}"),f.name=u,e.push(f),Qi[br]===","?r.lastIndex=++br:o=!0;break;case"[":cc.lastIndex=br,u?(f=Jl(new lc,"]"),f.name=u):f=Jl(e.conditions?new lc:[],"]"),e.conditions?(Sf(e,_),e.conditions.push(f),s=null):e.push(f),Qi[br]===","?r.lastIndex=++br: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"&&FI(h,u),Sf(e,_),e.conditions.push(h)}else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(Xl(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?yW:cc,r.lastIndex=br),br===Qi.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Sf(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 Xl(e){return e.indexOf(".")>-1?e.split(".").map(Xl):decodeURIComponent(e)}function xI(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(decodeURIComponent(r));if(t==="string")return decodeURIComponent(r);throw new Xr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function FI(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Xr.ClientError("wildcard can only be used at the end of a string")}function kI(e){let t=$I(e[0]);return e.length>1&&(t.next=kI(e.slice(1))),t}function $I(e){if(Array.isArray(e)){let t=$I(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 Xn(e){return Array.isArray(e)?e.join("\0"):e}function ri(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function IW(e,t,r){return t*r/ri(e)}var Xr,CS,Ns,Wi,TW,gW,RW,AW,DS,PS,NW,cc,yW,br,Qi,lc,Rf=Oe(()=>{Xr=B(oe()),CS=B(ct()),Ns=require("ordered-binary"),Wi=require("lmdb"),TW=.3,gW=.1,RW=.05,AW={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},DS={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(LS,"executeConditions");a(uc,"searchByIndex");a(ni,"findAttribute");a(OW,"joinTo");a(bW,"joinFrom");PS={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(MS,"filterByType");a(Tf,"estimateCondition");NW=/[()[\]|!<>.]|(=\w*=)/,cc=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,yW=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(gf,"parseQuery");a(Jl,"parseBlock");a(Sf,"assignOperator");a(Xl,"decodeProperty");a(xI,"typedDecoding");a(FI,"wildcardDecoding");a(kI,"toSortObject");a($I,"toSortEntry");lc=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(Xn,"flattenKey");a(ri,"estimatedEntryCount");a(IW,"intersectionEstimate")});var BS={};Fe(BS,{CONTEXT:()=>ye,ID_PROPERTY:()=>Ue,IS_COLLECTION:()=>Cn,RECORD_PROPERTY:()=>fe,Resource:()=>Jt,snake_case:()=>CW,transformForSelect:()=>Of});function CW(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function VI(e,t){if(Zl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(Zl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new vS;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){Zl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function Zr(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[ye]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(u=s,c=u[this.primaryKey]??null,o=i[ye]||i):u=i:(u=s,c=u[Ue]??u[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[ye]||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 Af(o.user);return typeof u?.then=="function"?u.then(S=>e(E,l,o,S)):e(E,l,o,u)});if(!h)throw new Af(o.user)}return typeof u?.then=="function"?u.then(h=>e(E,l,o,h)):e(E,l,o,u)}a(f,"authorizeActionOnResource")}}function en(e,t){let r=new WI.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 US(e,t,r){let n=e[fe];if(n){let s=e[Ut];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 Of(e,t){let r=t?.propertyResolvers,n=t[ye],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):US(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(US(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(US(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]=Of(c.select||c,u)}let _=o(c.name);return l(_)}else return o(c);else return c}}a(i,"handleProperty")}var YI,KI,WI,ye,Ue,Cn,fe,wW,Jt,Af,Zl,vS,Jn=Oe(()=>{YI=require("crypto");Yl();KI=require("../index"),WI=B(oe());pf();Wo();Rf();ye=Symbol.for("context"),Ue=Symbol.for("primary-key"),Cn=Symbol("is-collection"),fe=Symbol("stored-record"),wW={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?.[ye];this[ye]=n!==void 0?n:r||null}static get=Zr(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 _=Of(l,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Zr(function(t,r,n,s){if(Array.isArray(s)&&t[Cn]){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):en(t,"put")},{hasContent:!0,type:"update"});static patch=Zr(function(t,r,n,s){return t.patch?t.patch(s,r):en(t,"patch")},{hasContent:!0,type:"update"});static delete=Zr(function(t,r,n,s){return t.delete?t.delete(r):en(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,YI.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):en(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=Zr(function(t,r,n,s){return t.invalidate?t.invalidate(r):en(t,"delete")},{hasContent:!1,type:"update"});static post=Zr(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=Zr(function(t,r,n,s){return t.connect?t.connect(s,r):en(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Zr(function(t,r,n,s){return t.subscribe?t.subscribe(r):en(t,"subscribe")},{type:"read"});static publish=Zr(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.publish?t.publish(s,r):en(t,"publish")},{hasContent:!0,type:"create"});static search=Zr(function(t,r,n,s){let i=t.search?t.search(r):en(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=Of(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Zr(function(t,r,n,s){return t.search?t.search(s,r):en(t,"search")},{hasContent:!0,type:"read"});static copy=Zr(function(t,r,n,s){return t.copy?t.copy(s,r):en(t,"copy")},{type:"create"});static move=Zr(function(t,r,n,s){return t.move?t.move(s,r):en(t,"move")},{type:"delete"});post(t){if(this[Cn])return this.constructor.create(this[Ue],t,this[ye]);en(this,"post")}static isCollection(t){return t?.[Cn]}static coerceId(t){return t}static parseQuery(t){return gf(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&&wW[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:VI(t,this),isCollection:Zl}}let i=VI(t,this);return Zl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[ye],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[Cn]=!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[ye]}};Jt.prototype[ye]=null;(0,KI._assignPackageExport)("Resource",Jt);a(CW,"snake_case");Af=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(VI,"pathToId");vS=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Zr,"transactional");a(en,"missingMethod");a(US,"selectFromObject");a(Of,"transformForSelect")});var QI={};Fe(QI,{Resources:()=>bf,keyArrayToString:()=>_c,resetResources:()=>DW,resources:()=>ji});function DW(){return ji=new bf}function _c(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var bf,ji,eu=Oe(()=>{Wo();bf=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(DW,"resetResources");a(_c,"keyArrayToString")});function zI(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;dc||((0,Nf.onMessageByType)(jI,u=>{JI(u.path)}),dc=Object.create(null));let o=dc[s]||(dc[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=_c(t);let l=new GS(r);l.startTime=n;let _=c.get(t);return _?_.push(l):(c.set(t,_=[l]),_.tables=c,_.key=t),l.subscriptions=_,l}function JI(e,t){if(!dc)return;let r=dc[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=_c(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,HS.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,HS.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 XI(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,Nf.broadcast)({type:jI,path:s}),JI(s,!0)})}}var HS,Nf,jI,dc,hpe,GS,ZI=Oe(()=>{HS=B(x()),Nf=B(tt());Yl();eu();Ki();jI="transaction",hpe=Buffer.alloc(4096);a(zI,"addSubscription");GS=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(JI,"notifyFromTransactionData");a(XI,"listenToCommits")});var tw=g((Spe,ew)=>{"use strict";var qS=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};ew.exports=qS});var nw=g((gpe,rw)=>{"use strict";var xS=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};rw.exports=xS});var tu=g((Ope,iw)=>{"use strict";var sw=X(),LW=C(),{RecordEncoder:PW}=(jl(),se(gI)),Ape=require("fs");sw.initSync();var MW=sw.get(LW.CONFIG_PARAMS.STORAGE_CACHING)!==!1,FS=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=MW&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:PW})}};iw.exports=FS});var ru=g((Npe,ow)=>{"use strict";var tn=X(),Dn=C();tn.initSync();var yf=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(Dn.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||tn.get(Dn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||tn.get(Dn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",tn.get(Dn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=tn.get(Dn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),tn.get(Dn.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=tn.get(Dn.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),tn.get(Dn.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=tn.get(Dn.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),tn.get(Dn.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=tn.get(Dn.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=tn.get(Dn.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};ow.exports=yf;yf.MAX_DBS=1e4});var Ve=g((Ipe,pw)=>{"use strict";var $S=require("lmdb"),Zn=require("fs-extra"),rn=require("path"),If=Or(),lw=x(),Nr=zr().LMDB_ERRORS_ENUM,wf=nw(),VS=tu(),uw=ru(),zi=ct(),aw=C(),{table:UW,resetDatabases:vW}=(ge(),se(ke)),cw=X(),es=zi.INTERNAL_DBIS_NAME,_w=zi.DBI_DEFINITION_NAME,BW="data.mdb",HW="lock.mdb",nu=".mdb",GW="-lock",kS=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Ln(t,r),this.key_type=this.dbi[zi.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[zi.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new $S.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Cf(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(Cf,"pathEnvNameValidation");async function YS(e,t,r=!0){try{await Zn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Nr.INVALID_BASE_PATH):n}try{let n=rn.join(e,t+nu);return await Zn.access(n,Zn.constants.R_OK|Zn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Zn.access(rn.join(e,t,BW),Zn.constants.R_OK|Zn.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(YS,"validateEnvironmentPath");function Df(e,t){if(If.validateEnv(e),t===void 0)throw new Error(Nr.DBI_NAME_REQUIRED)}a(Df,"validateEnvDBIName");async function qW(e,t,r=!1,n=!1){Cf(e,t);let s=rn.basename(e);t=t.toString();let i=cw.get(aw.CONFIG_PARAMS.DATABASES);i||cw.setProperty(aw.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await YS(e,t,n),dw(e,t,r)}catch(o){if(o.message===Nr.INVALID_ENVIRONMENT){let c=rn.join(e,t);await Zn.mkdirp(n?c:e);let l=new uw(n?c:c+nu,!1),_=$S.open(l);_.dbis=Object.create(null);let u=new VS(!1);_.openDB(es,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=KS(e,t,r);return _[zi.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(qW,"createEnvironment");async function xW(e,t,r,n=!0){Cf(e,t),t=t.toString();let s=rn.join(e,t);return UW({table:t,database:rn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(xW,"copyEnvironment");async function dw(e,t,r=!1){Cf(e,t),t=t.toString();let n=KS(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 YS(e,t),i=rn.join(e,t+nu),o=s!=i,c=new uw(s,o),l=$S.open(c);l.dbis=Object.create(null);let _=Ew(l);for(let u=0;u<_.length;u++)Ln(l,_[u]);return l[zi.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(dw,"openEnvironment");async function FW(e,t,r=!1){Cf(e,t),t=t.toString();let n=rn.join(e,t+nu),s=await YS(e,t);if(global.lmdb_map!==void 0){let i=KS(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await fw(o),delete global.lmdb_map[i]}}await Zn.remove(s),await Zn.remove(s===n?s+GW:rn.join(rn.dirname(s),HW))}a(FW,"deleteEnvironment");async function fw(e){If.validateEnv(e);let t=e[zi.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(fw,"closeEnvironment");function KS(e,t,r=!1){let s=`${rn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(KS,"getCachedEnvironmentName");function kW(e){If.validateEnv(e);let t=Object.create(null),r=Ln(e,es);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==es)try{t[n]=Object.assign(new wf,s)}catch{lw.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(kW,"listDBIDefinitions");function Ew(e){If.validateEnv(e);let t=[],r=Ln(e,es);for(let{key:n}of r.getRange({start:!1}))n!==es&&t.push(n);return t}a(Ew,"listDBIs");function $W(e,t){let n=Ln(e,es).getEntry(t),s=new wf;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{lw.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a($W,"getDBIDefinition");function hw(e,t,r,n=!r){if(Df(e,t),t=t.toString(),t===es)throw new Error(Nr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ln(e,t)}catch(s){if(s.message===Nr.DBI_DOES_NOT_EXIST){let i=new VS(r,n===!0),o=e.openDB(t,i),c=new wf(r===!0,n);return o[_w]=c,Ln(e,es).putSync(t,c),e.dbis[t]=o,o}throw s}}a(hw,"createDBI");function Ln(e,t){if(Df(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==es?r=$W(e,t):r=new wf,r===void 0)throw new Error(Nr.DBI_DOES_NOT_EXIST);let n;try{let s=new VS(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[_w]=r,e.dbis[t]=n,n}a(Ln,"openDBI");function VW(e,t){Df(e,t),t=t.toString();let r=Ln(e,t),n=r.getStats();return r[zi.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(VW,"statDBI");async function YW(e,t){try{let r=rn.join(e,t+nu);return(await Zn.stat(r)).size}catch{throw new Error(Nr.INVALID_ENVIRONMENT)}}a(YW,"environmentDataSize");function KW(e,t){if(Df(e,t),t=t.toString(),t===es)throw new Error(Nr.CANNOT_DROP_INTERNAL_DBIS_NAME);Ln(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ln(e,es).removeSync(t)}a(KW,"dropDBI");function WW(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Ln(e,i)}catch(o){if(o.message===Nr.DBI_DOES_NOT_EXIST)hw(e,i,i!==t,i===t),n=!0;else throw o}}n&&vW()}a(WW,"initializeDBIs");pw.exports={openDBI:Ln,openEnvironment:dw,createEnvironment:qW,listDBIs:Ew,listDBIDefinitions:kW,createDBI:hw,dropDBI:KW,statDBI:VW,deleteEnvironment:FW,initializeDBIs:WW,TransactionCursor:kS,environmentDataSize:YW,copyEnvironment:xW,closeEnvironment:fw}});var Tw=g((Cpe,Sw)=>{"use strict";var WS=Ve(),QW=x(),mw=zr().LMDB_ERRORS_ENUM;Sw.exports=jW;async function jW(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 WS.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==mw.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await WS.closeEnvironment(global.lmdb_map[n]),await WS.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==mw.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){QW.error(t)}}a(jW,"cleanLMDBMap")});var si=g((Lpe,zW)=>{zW.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"},{attribute:"time"},{attribute:"metric"}]},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 Pw=g((Mpe,Lw)=>{"use strict";var QS=require("recursive-iterator"),JW=require("alasql"),jS=require("clone"),gw=K(),{handleHDBError:Rw,hdb_errors:XW}=oe(),{HDB_ERROR_MSGS:Aw,HTTP_STATUS_CODES:Ow}=XW,{getDatabases:ZW}=(ge(),se(ke)),eQ=["DISTINCT_ARRAY"],bw=Symbol("validateTables"),zS=Symbol("validateTable"),Ppe=Symbol("getAllColumns"),Nw=Symbol("validateAllColumns"),Lf=Symbol("findColumn"),yw=Symbol("validateOrderBy"),su=Symbol("validateSegment"),JS=Symbol("validateColumn"),Iw=Symbol("setColumnsForTable"),ww=Symbol("checkColumnsForAsterisk"),Cw=Symbol("validateGroupBy"),Dw=Symbol("hasColumns"),XS=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[bw](),this[ww](),this[Nw]()}[bw](){if(this[Dw]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[zS](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[zS](t.table)})}}[Dw](){let t=!1,r=new QS(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[zS](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=ZW();if(!r[t.databaseid])throw Rw(new Error,Aw.SCHEMA_NOT_FOUND(t.databaseid),Ow.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Rw(new Error,Aw.TABLE_NOT_FOUND(t.databaseid,t.tableid),Ow.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=jS(s);i.table=jS(t),this.attributes.push(i)})}[Lf](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)}[ww](){let t=new QS(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[Iw](r.tableid)}[Iw](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new JW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Nw](){this[su](this.statement.columns,!1),this[su](this.statement.joins,!1),this[su](this.statement.where,!1),this[Cw](this.statement.group,!1),this[su](this.statement.order,!0)}[su](t,r){if(!t)return;let n=new QS(t),s=[];for(let{node:i,path:o}of n)!gw.isEmpty(i)&&!gw.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[yw](i):s.push(this[JS](i)));return s}[Cw](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&eQ.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=jS(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Lf](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[Lf](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`}[yw](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[JS](t)}[JS](t){let r=this[Lf](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]}};Lw.exports=XS});var Uw=g((vpe,Mw)=>{"use strict";var ZS=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")}};Mw.exports=ZS});var Bw=g((Hpe,vw)=>{"use strict";var eT=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};vw.exports=eT});var Gw=g((qpe,Hw)=>{"use strict";var tT=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}};Hw.exports=tT});var xw=g((Fpe,qw)=>{"use strict";var rT=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};qw.exports=rT});var jo=g((Kpe,$w)=>{"use strict";var tQ=Ve(),rQ=Bw(),nQ=Gw(),sQ=xw(),ys=Or(),iu=zr().LMDB_ERRORS_ENUM,iQ=ct(),ii=C(),oQ=K(),aQ=require("uuid"),$pe=require("lmdb"),{handleHDBError:cQ,hdb_errors:lQ}=oe(),{OVERFLOW_MARKER:Vpe,MAX_SEARCH_KEY_LENGTH:Ype}=iQ,Fw=X();Fw.initSync();var Pf=Fw.get(ii.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),nT=ii.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Qo=ii.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function uQ(e,t,r,n,s=ys.getNextMonotonicTime()){aT(e,t,r,n),sT(e,t,r);let i=new rQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];kw(_,!0,s);let u=_Q(e,t,r,_),d=_[t];o.push(u),c.push(d)}return iT(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][ii.FUNC_VAL],n[o]=c)}let l=ys.getIndexedValues(c),_=e.dbis[o];if(l){Pf&&_.prefetch(l.map(u=>({key:u,value:s})),Mf);for(let u=0,d=l.length;u<d;u++)_.put(l[u],s)}}Pf&&e.dbis[t].prefetch([s],Mf),e.dbis[t].put(s,n,n[Qo])})}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 kw(e,t,r){let n=r>0;(n||!Number.isInteger(e[Qo]))&&(e[Qo]=r||(r=ys.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[nT]))&&(e[nT]=r||ys.getNextMonotonicTime()):delete e[nT]}a(kw,"setTimestamps");function sT(e,t,r){r.indexOf(ii.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ii.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ii.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ii.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),tQ.initializeDBIs(e,t,r)}a(sT,"initializeTransaction");async function fQ(e,t,r,n,s=ys.getNextMonotonicTime()){aT(e,t,r,n),sT(e,t,r);let i=new nQ,o=[],c=[],l=[];for(let _=0;_<n.length;_++){let u=n[_],d=u[t],f;try{f=oT(e,t,u,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),l.push(d)}return iT(c,l,n,i,s,o)}a(fQ,"updateRecords");async function EQ(e,t,r,n,s=ys.getNextMonotonicTime()){try{aT(e,t,r,n)}catch(l){throw cQ(l,l.message,lQ.HTTP_STATUS_CODES.BAD_REQUEST)}sT(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=oT(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return iT(o,c,n,i,s)}a(EQ,"upsertRecords");async function iT(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(),dQ(r,i),n}a(iT,"finalizeWrite");function oT(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(kw(r,!u,o),Number.isInteger(r[Qo])&&_[Qo]>r[Qo])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][ii.FUNC_VAL],r[h]=m)}if(m===R)continue;let T=ys.getIndexedValues(R);if(T){Pf&&S.prefetch(T.map(A=>({key:A,value:n})),Mf);for(let A=0,P=T.length;A<P;A++)S.remove(T[A],n)}if(T=ys.getIndexedValues(m),T){Pf&&S.prefetch(T.map(A=>({key:A,value:n})),Mf);for(let A=0,P=T.length;A<P;A++)S.put(T[A],n)}}let E=Object.assign({},_,r);c.put(n,E,E[Qo])},"do_put");return l?d=c.ifVersion(n,l.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:oT(e,t,r,n,s,i,o))}a(oT,"updateUpsertRecord");function hQ(e,t,r){if(ys.validateEnv(e),t===void 0)throw new Error(iu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(iu.WRITE_ATTRIBUTES_REQUIRED):new Error(iu.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(hQ,"validateBasic");function aT(e,t,r,n){if(hQ(e,t,r),!Array.isArray(n))throw n===void 0?new Error(iu.RECORDS_REQUIRED):new Error(iu.RECORDS_MUST_BE_ARRAY)}a(aT,"validateWrite");function Mf(){}a(Mf,"noop");$w.exports={insertRecords:uQ,updateRecords:fQ,upsertRecords:EQ}});var ws=g((Qpe,Kw)=>{"use strict";var Yw=K(),Vw=C(),fc=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Is=require("joi"),Ji={schema_format:{pattern:fc,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(Ji.schema_length.maximum).pattern(fc).messages({"string.pattern.base":"{:#label} "+Ji.schema_format.message}),Is.number(),Is.array()).required(),mQ=Is.alternatives(Is.string().min(1).max(Ji.schema_length.maximum).pattern(fc).messages({"string.pattern.base":"{:#label} "+Ji.schema_format.message}),Is.number()),SQ=Is.alternatives(Is.string().min(1).max(Ji.schema_length.maximum).pattern(fc).messages({"string.pattern.base":"{:#label} "+Ji.schema_format.message}),Is.number()).required();function TQ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Ji.schema_length.maximum?`'${e}' maximum of 250 characters`:fc.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(TQ,"checkValidTable");function gQ(e,t){return Yw.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 Yw.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(RQ,"validateTableExists");function AQ(e,t){return e.toLowerCase()===Vw.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Vw.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(AQ,"validateSchemaName");Kw.exports={common_validators:Ji,schema_regex:fc,hdb_schema_table:pQ,validateSchemaExists:gQ,validateTableExists:RQ,validateSchemaName:AQ,checkValidTable:TQ,hdb_database:mQ,hdb_table:SQ}});var rt=g((zpe,Ww)=>{"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};Ww.exports={validateObject:OQ,validateObjectAsync:bQ,validateBySchema:NQ};function OQ(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(OQ,"validateObject");async function bQ(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(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 Uf=g((Xpe,Qw)=>{var{common_validators:Cs}=ws(),au=rt(),ou="is required",Ot={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 cu(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(cu,"makeAttributesStrings");function yQ(e){return e=cu(e),Ot.table.presence=!1,Ot.attribute.presence=!1,Ot.hash_attribute.presence=!1,au.validateObject(e,Ot)}a(yQ,"schema_object");function IQ(e){return e=cu(e),Ot.table.presence={message:ou},Ot.attribute.presence=!1,Ot.hash_attribute.presence=!1,au.validateObject(e,Ot)}a(IQ,"table_object");function wQ(e){return e=cu(e),Ot.table.presence={message:ou},Ot.attribute.presence=!1,au.validateObject(e,Ot)}a(wQ,"create_table_object");function CQ(e){return e=cu(e),Ot.table.presence={message:ou},Ot.attribute.presence={message:ou},Ot.hash_attribute.presence=!1,au.validateObject(e,Ot)}a(CQ,"attribute_object");function DQ(e){return e=cu(e),Ot.table.presence={message:ou},Ot.attribute.presence=!1,Ot.hash_attribute.presence=!1,au.validateObject(e,Ot)}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");Qw.exports={schema_object:yQ,create_table_object:wQ,table_object:IQ,attribute_object:CQ,describe_table:DQ,validateTableResidence:LQ}});var zw=g((eme,jw)=>{"use strict";var PQ=require("uuid"),cT=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}`}};jw.exports=cT});var vf=g((rme,Jw)=>{"use strict";var MQ=zw(),lT=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}};Jw.exports=lT});var Zw=g((sme,Xw)=>{"use strict";Xw.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 Bf=g((ome,sC)=>{"use strict";var BQ=C(),uT=Ve(),HQ=jo(),{getSystemSchemaPath:GQ,getSchemaPath:qQ}=ze(),xQ=si(),FQ=Uf(),kQ=vf(),$Q=Zw(),{handleHDBError:eC,hdb_errors:rC}=oe(),tC=K(),{HTTP_STATUS_CODES:VQ}=rC,_T=xQ.hdb_attribute,nC=[];for(let e=0;e<_T.attributes.length;e++)nC.push(_T.attributes[e].attribute);var YQ="inserted";sC.exports=KQ;async function KQ(e){let t=FQ.attribute_object(e);if(t)throw eC(new Error,t.message,rC.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&tC.checkGlobalSchemaTable(e.schema,e.table);if(r)throw eC(new Error,r,VQ.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=tC.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 uT.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}`);uT.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await uT.openEnvironment(GQ(),BQ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await HQ.insertRecords(o,_T.hash_attribute,nC,[s]);return $Q(YQ,c,{records:[s]},l)}catch(i){throw i}}a(KQ,"lmdbCreateAttribute")});var fT=g((cme,oC)=>{var{hdb_table:WQ,hdb_database:iC}=ws(),QQ=rt(),dT=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=dT.object({database:iC,schema:iC,table:WQ,records:dT.array().items(dT.object().custom(zQ)).required()});oC.exports=function(e){return QQ.validateBySchema(e,JQ)}});var lu=g((_me,cC)=>{"use strict";var oi=K(),aC=x(),ume=fT(),{getDatabases:XQ}=(ge(),se(ke)),{ClientError:zo}=oe();cC.exports=ZQ;function ZQ(e){if(oi.isEmpty(e))throw new zo("invalid update parameters defined.");if(oi.isEmptyOrZeroLength(e.schema))throw new zo("invalid schema specified.");if(oi.isEmptyOrZeroLength(e.table))throw new zo("invalid table specified.");if(!Array.isArray(e.records))throw new zo("records must be an array");let t=XQ()[e.schema]?.[e.table];if(oi.isEmpty(t))throw new zo(`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&&oi.isEmptyOrZeroLength(o[r]))throw aC.error("a valid hash attribute must be provided with update record:",o),new zo("a valid hash attribute must be provided with update record, check log for more info");if(!oi.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw aC.error(`a valid hash value must be provided with ${e.operation} record:`,o),new zo(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!oi.isEmpty(o[r])&&o[r]!==""&&n.has(oi.autoCast(o[r]))&&(o.skip=!0),n.add(oi.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 uu=g((fme,lC)=>{"use strict";var ej=C().OPERATIONS_ENUM,ET=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}};lC.exports=ET});var _u=g((pme,_C)=>{"use strict";var hme=uu(),Hf=C(),hT=K(),uC=x(),tj=require("uuid"),{handleHDBError:Gf,hdb_errors:rj}=oe(),{HDB_ERROR_MSGS:qf,HTTP_STATUS_CODES:xf}=rj;_C.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))>Hf.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Gf(new Error,qf.ATTR_NAME_LENGTH_ERR(e),xf.BAD_REQUEST,void 0,void 0,!0);if(hT.isEmptyOrZeroLength(e)||hT.isEmpty(e.trim()))throw Gf(new Error,qf.ATTR_NAME_NULLISH_ERR,xf.BAD_REQUEST,void 0,void 0,!0)}a(sj,"validateAttribute");function ij(e,t,r){if(!e.hasOwnProperty(t)||hT.isEmptyOrZeroLength(e[t])){if(r===Hf.OPERATIONS_ENUM.INSERT||r===Hf.OPERATIONS_ENUM.UPSERT){e[t]=tj.v4();return}throw uC.error("Update transaction aborted due to record with no hash value:",e),Gf(new Error,qf.RECORD_MISSING_HASH_ERR,xf.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Hf.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw uC.error(e),Gf(new Error,qf.HASH_VAL_LENGTH_ERR,xf.BAD_REQUEST,void 0,void 0,!0)}a(ij,"validateHash")});var Ff=g((Sme,fC)=>{"use strict";var dC=K(),oj=C(),aj=x(),cj=Bf(),lj=vf(),uj=ai(),{SchemaEventMsg:_j}=ts(),dj="already exists in";fC.exports=fj;async function fj(e,t,r){if(dC.isEmptyOrZeroLength(r))return r;let n=[];dC.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 Ec=g((gme,EC)=>{"use strict";var pT=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}};EC.exports=pT});var pC=g((Ame,hC)=>{"use strict";var pj=Ec(),mj=C().OPERATIONS_ENUM,mT=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}};hC.exports=mT});var SC=g((bme,mC)=>{"use strict";var Sj=Ec(),Tj=C().OPERATIONS_ENUM,ST=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}};mC.exports=ST});var gC=g((yme,TC)=>{"use strict";var gj=Ec(),Rj=C().OPERATIONS_ENUM,TT=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}};TC.exports=TT});var AC=g((wme,RC)=>{"use strict";var Aj=Ec(),Oj=C().OPERATIONS_ENUM,gT=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}};RC.exports=gT});var du=g((Lme,yC)=>{"use strict";var Dme=require("path"),OC=Ve(),bj=pC(),Nj=SC(),yj=gC(),Ij=AC(),hc=ct(),bC=K(),{CONFIG_PARAMS:wj}=C(),NC=X();NC.initSync();var kf=C().OPERATIONS_ENUM,{getTransactionAuditStorePath:Cj}=ze();yC.exports=Dj;async function Dj(e,t){if(NC.get(wj.LOGGING_AUDITLOG)===!1)return;let r=Cj(e.schema,e.table),n=await OC.openEnvironment(r,e.table,!0),s=Lj(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){OC.initializeDBIs(n,hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,hc.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),bC.isEmpty(s.user_name)||n.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(Dj,"writeTransaction");function Lj(e,t){let r=bC.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===kf.INSERT)return new bj(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===kf.UPDATE)return new Nj(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===kf.UPSERT)return new yj(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===kf.DELETE)return new Ij(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Lj,"createTransactionObject")});var RT=g((Ume,IC)=>{"use strict";var Pj=lu(),Mme=uu(),fu=C(),Mj=_u(),Uj=jo().insertRecords,vj=Ve(),Bj=x(),Hj=Ff(),{getSchemaPath:Gj}=ze(),qj=du();IC.exports=xj;async function xj(e){try{let{schema_table:t,attributes:r}=Pj(e);Mj(e,r,t.hash_attribute),e.schema!==fu.SYSTEM_SCHEMA_NAME&&(r.includes(fu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(fu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(fu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(fu.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 DC=g((Bme,CC)=>{"use strict";var wC=C(),Fj=RT(),kj=uu(),$j=require("fs-extra"),{getSchemaPath:Vj}=ze();CC.exports=Yj;async function Yj(e){let t=[{name:e.schema,createddate:Date.now()}],r=new kj(wC.SYSTEM_SCHEMA_NAME,wC.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Fj(r),await $j.mkdirp(Vj(e.schema))}a(Yj,"lmdbCreateSchema")});var PC=g((Gme,LC)=>{"use strict";var AT=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}};LC.exports=AT});var BC=g(($me,vC)=>{"use strict";var MC=Ve(),OT=Or(),bT=zr().LMDB_ERRORS_ENUM,Kj=ct(),UC=x(),xme=K(),Wj=require("lmdb"),Qj=PC(),jj=C(),{OVERFLOW_MARKER:Fme,MAX_SEARCH_KEY_LENGTH:kme}=Kj,zj=jj.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Jj(e,t,r,n){if(OT.validateEnv(e),t===void 0)throw new Error(bT.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(bT.IDS_REQUIRED):new Error(bT.IDS_MUST_BE_ITERABLE);try{let s=MC.listDBIs(e);MC.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 P=OT.getIndexedValues(A);if(P)for(let v=0,U=P.length;v<U;v++)T.remove(P[v],o)}catch{UC.warn(`cannot delete from attribute: ${R}, ${A}:${o}`)}}});c.push(m),l.push(o),i.original_records.push(h)}catch(h){UC.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=OT.getNextMonotonicTime(),i}catch(s){throw s}}a(Jj,"deleteRecords");vC.exports={deleteRecords:Jj}});var Eu=g((Yme,GC)=>{"use strict";var pc=K(),Xj=BC(),Zj=Ve(),{getSchemaPath:ez}=ze(),tz=du(),rz=x();GC.exports=nz;async function nz(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(pc.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(pc.isEmptyOrZeroLength(e.hash_values)&&!pc.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];pc.isEmpty(l)||e.hash_values.push(l)}}if(pc.isEmptyOrZeroLength(e.hash_values))return HC([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(pc.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=ez(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 tz(e,o)}catch(c){rz.error(`unable to write transaction due to ${c.message}`)}return HC(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(nz,"lmdbDeleteRecords");function HC(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(HC,"createDeleteResponse")});var yT=g((Qme,qC)=>{"use strict";var sz=C(),Wme=Or();function NT(e,t){let r=Object.create(null);if(t.length===1&&sz.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(NT,"parseRow");function iz(e,t,r,n){let s=NT(r,e);n.push(s)}a(iz,"searchAll");function oz(e,t,r,n){let s=NT(r,e);n[t]=s}a(oz,"searchAllToMap");function az(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(az,"iterateDBI");function Jo(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(Jo,"pushResults");function cz(e,t,r,n,s,i){t.toString().endsWith(e)&&Jo(t,r,n,s,i)}a(cz,"endsWith");function lz(e,t,r,n,s,i){t.toString().includes(e)&&Jo(t,r,n,s,i)}a(lz,"contains");function uz(e,t,r,n,s,i){t>e&&Jo(t,r,n,s,i)}a(uz,"greaterThanCompare");function _z(e,t,r,n,s,i){t>=e&&Jo(t,r,n,s,i)}a(_z,"greaterThanEqualCompare");function dz(e,t,r,n,s,i){t<e&&Jo(t,r,n,s,i)}a(dz,"lessThanCompare");function fz(e,t,r,n,s,i){t<=e&&Jo(t,r,n,s,i)}a(fz,"lessThanEqualCompare");qC.exports={parseRow:NT,searchAll:iz,searchAllToMap:oz,iterateDBI:az,endsWith:cz,contains:lz,greaterThanCompare:uz,greaterThanEqualCompare:_z,lessThanCompare:dz,lessThanEqualCompare:fz,pushResults:Jo}});var mc=g((Zme,KC)=>{"use strict";var Xi=Ve(),zme=x(),nn=Or(),$f=ct(),Et=zr().LMDB_ERRORS_ENUM,Jme=K(),Ez=C(),Vf=yT(),{parseRow:hz}=Vf,Xme=require("lmdb"),{OVERFLOW_MARKER:xC,MAX_SEARCH_KEY_LENGTH:pz}=$f;function FC(e,t,r,n=!1,s=void 0,i=void 0){return Xo(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(FC,"iterateFullIndex");function hu(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return Xo(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(hu,"iterateRangeBetween");function Xo(e,t,r,n){let s=e.database||e,i=Xi.openDBI(s,r);i[$f.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Xi.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(Xo,"setupTransaction");function kC(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(xC)){if(!s)if(r)s=Xi.openDBI(e,r);else{let l=Xi.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=Xi.openDBI(e,l[_]),!s[$f.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(kC,"getOverflowCheck");function mz(e,t,r,n=!1,s=void 0,i=void 0){if(nn.validateEnv(e),t===void 0)throw new Error(Et.HASH_ATTRIBUTE_REQUIRED);return Xo(e,t,t,(o,c,l)=>(Yf(r),r=pu(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>hz(_.value,r))))}a(mz,"searchAll");function Sz(e,t,r,n=!1,s=void 0,i=void 0){if(nn.validateEnv(e),t===void 0)throw new Error(Et.HASH_ATTRIBUTE_REQUIRED);Yf(r),r=pu(e.database||e,r);let o=new Map;for(let{key:c,value:l}of FC(e,t,t,n,s,i))o.set(c,Vf.parseRow(l,r));return o}a(Sz,"searchAllToMap");function Tz(e,t,r=!1,n=void 0,s=void 0){if(nn.validateEnv(e),t===void 0)throw new Error(Et.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=FC(e,void 0,t,r,n,s),c=o.transaction,l=kC(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(Tz,"iterateDBI");function gz(e,t){if(nn.validateEnv(e),t===void 0)throw new Error(Et.HASH_ATTRIBUTE_REQUIRED);return Xi.statDBI(e,t).entryCount}a(gz,"countAll");function Rz(e,t,r,n,s=!1,i=void 0,o=void 0){return Zi(e,r,n),Xo(e,t,r,(c,l,_,u)=>(n=nn.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(Rz,"equals");function Az(e,t,r){return Zi(e,t,r),Xi.openDBI(e,t).getValuesCount(r)}a(Az,"count");function Oz(e,t,r,n,s=!1,i=void 0,o=void 0){return Zi(e,r,n),Xo(e,null,r,(c,l)=>{n=nn.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(Oz,"startsWith");function bz(e,t,r,n,s=!1,i=void 0,o=void 0){return $C(e,t,r,n,s,i,o,!0)}a(bz,"endsWith");function $C(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Zi(e,r,n),Xo(e,null,r,(l,_,u,d)=>{let f=kC(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(xC)?_.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))?_[$f.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($C,"contains");function Nz(e,t,r,n,s=!1,i=void 0,o=void 0){Zi(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),hu(e,t,r,n,l,s,i,o,!0,!1)}a(Nz,"greaterThan");function yz(e,t,r,n,s=!1,i=void 0,o=void 0){Zi(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),hu(e,t,r,n,l,s,i,o,!1,!1)}a(yz,"greaterThanEqual");function Iz(e,t,r,n,s=!1,i=void 0,o=void 0){Zi(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),hu(e,t,r,l,n,s,i,o,!1,!0)}a(Iz,"lessThan");function wz(e,t,r,n,s=!1,i=void 0,o=void 0){Zi(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),hu(e,t,r,l,n,s,i,o,!1,!1)}a(wz,"lessThanEqual");function Cz(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(nn.validateEnv(e),r===void 0)throw new Error(Et.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Et.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Et.END_VALUE_REQUIRED);if(n=nn.convertKeyValueToWrite(n),s=nn.convertKeyValueToWrite(s),n>s)throw new Error(Et.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return hu(e,t,r,n,s,i,o,c)}a(Cz,"between");function Dz(e,t,r,n){nn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Et.HASH_ATTRIBUTE_REQUIRED);if(Yf(r),r=pu(s,r),n===void 0)throw new Error(Et.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Vf.parseRow(c,r)),o}a(Dz,"searchByHash");function Lz(e,t,r){nn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Et.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Et.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(Lz,"checkHashExists");function Pz(e,t,r,n,s=[]){return YC(e,t,r,n,s),VC(e,t,r,n,s).map(i=>i[1])}a(Pz,"batchSearchByHash");function Mz(e,t,r,n,s=[]){YC(e,t,r,n,s);let i=new Map;for(let[o,c]of VC(e,t,r,n,s))i.set(o,c);return i}a(Mz,"batchSearchByHashToMap");function VC(e,t,r,n,s=[]){return Xo(e,t,t,(i,o,c)=>{r=pu(c,r);let l=r.length<3;return n.map(_=>{let u=c.dbis[t].get(_,{transaction:i,lazy:l});if(u)return[_,Vf.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(VC,"batchHashSearch");function YC(e,t,r,n,s){if(nn.validateEnv(e),t===void 0)throw new Error(Et.HASH_ATTRIBUTE_REQUIRED);if(Yf(r),n==null)throw new Error(Et.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Et.IDS_MUST_BE_ITERABLE)}a(YC,"initializeBatchSearchByHash");function Yf(e){if(!Array.isArray(e))throw e===void 0?new Error(Et.FETCH_ATTRIBUTES_REQUIRED):new Error(Et.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Yf,"validateFetchAttributes");function Zi(e,t,r){if(nn.validateEnv(e),t===void 0)throw new Error(Et.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Et.SEARCH_VALUE_REQUIRED);if(r?.length>pz)throw new Error(Et.SEARCH_VALUE_TOO_LARGE)}a(Zi,"validateComparisonFunctions");function pu(e,t){return t.length===1&&Ez.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Xi.listDBIs(e)),t}a(pu,"setGetWholeRowAttributes");KC.exports={searchAll:mz,searchAllToMap:Sz,count:Az,countAll:gz,equals:Rz,startsWith:Oz,endsWith:bz,contains:$C,searchByHash:Dz,setGetWholeRowAttributes:pu,batchSearchByHash:Pz,batchSearchByHashToMap:Mz,checkHashExists:Lz,iterateDBI:Tz,greaterThan:Nz,greaterThanEqual:yz,lessThan:Iz,lessThanEqual:wz,between:Cz}});var Sc=g((tSe,JC)=>{var WC=require("lodash"),QC=rt(),he=require("joi"),Uz=K(),{hdb_schema_table:mu,checkValidTable:jC,hdb_table:zC,hdb_database:Kf}=ws(),{handleHDBError:vz,hdb_errors:Bz}=oe(),{getDatabases:Hz}=(ge(),se(ke)),{HTTP_STATUS_CODES:Gz}=Bz,qz=he.object({database:Kf,schema:Kf,table:zC,search_attribute:mu,search_value:he.any().required(),get_attributes:he.array().min(1).items(he.alternatives(mu,he.object())).optional(),desc:he.bool(),limit:he.number().integer().min(1),offset:he.number().integer().min(0)}),xz=he.object({database:Kf,schema:Kf,table:zC,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(mu,he.object())).optional(),sort:he.object({attribute:he.alternatives(mu,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(mu,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()});JC.exports=function(e,t){let r=null;switch(t){case"value":r=QC.validateBySchema(e,qz);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(jC("database",e.schema)),i(jC("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=QC.validateBySchema(e,xz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Uz.checkGlobalSchemaTable(e.schema,e.table);if(s)return vz(new Error,s,Gz.NOT_FOUND);let o=Hz()[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 _=WC.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!Array.isArray(u)&&!u.name&&!WC.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 IT=g((nSe,XC)=>{"use strict";var Fz=Ve(),kz=Sc(),{getSchemaPath:$z}=ze();XC.exports=Vz;function Vz(e){let t=kz(e,"hashes");if(t)throw t;let r=$z(e.schema,e.table);return Fz.openEnvironment(r,e.table)}a(Vz,"initialize")});var wT=g((iSe,ZC)=>{"use strict";var Yz=mc(),Kz=IT();ZC.exports=Wz;async function Wz(e){let t=await Kz(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Yz.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Wz,"lmdbGetDataByHash")});var Tc=g((aSe,eD)=>{"use strict";var CT=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};eD.exports=CT});var rD=g((uSe,tD)=>{"use strict";var lSe=Tc(),Qz=mc(),jz=IT();tD.exports=zz;async function zz(e){let t=await jz(e),r=global.hdb_schema[e.schema][e.table];return Qz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(zz,"lmdbSearchByHash")});var rs=g((dSe,nD)=>{"use strict";var DT=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}};nD.exports=DT});var Wf=g((ESe,lD)=>{"use strict";var ir=mc(),Jz=Ve(),Xz=K(),pe=ct(),Zo=C(),Zz=si(),sD=zr().LMDB_ERRORS_ENUM,{getSchemaPath:eJ}=ze(),ci=Zo.SEARCH_WILDCARDS;async function tJ(e,t,r){let n;e.schema===Zo.SYSTEM_SCHEMA_NAME?n=Zz[e.table]:n=global.hdb_schema[e.schema][e.table];let s=cD(e,n.hash_attribute,r,t);return oD(e,s,n.hash_attribute,r)}a(tJ,"prepSearch");async function oD(e,t,r,n){let s=eJ(e.schema,e.table),i=await Jz.openEnvironment(s,e.table),o=aD(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(rJ(e,r)===!1){let u=e.search_attribute;if(u===r)return n?iD(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[u]:f.key}),"toObject");return n?iD(o,d):o.map(d)}let _=e.search_attribute===r?o.map(u=>u.key):o.map(u=>u.value);return n===!0?ir.batchSearchByHashToMap(c,r,e.get_attributes,_):ir.batchSearchByHash(c,r,e.get_attributes,_)}a(oD,"executeSearch");function aD(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=ir.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.CONTAINS:s=ir.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=ir.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=ir.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return ir.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return ir.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.SEARCH_ALL:return ir.searchAll(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return ir.searchAllToMap(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.BETWEEN:s=ir.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=ir.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=ir.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=ir.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=ir.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(aD,"searchByType");function iD(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(iD,"createMapFromIterable");function rJ(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(rJ,"checkToFetchMore");function cD(e,t,r,n){if(Xz.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),ci.indexOf(s)>-1)return r===!0?pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:pe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ci[0])<0&&s.indexOf(ci[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(ci.indexOf(i)>=0&&ci.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),pe.SEARCH_TYPES.CONTAINS;if(ci.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),pe.SEARCH_TYPES.ENDS_WITH;if(ci.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),pe.SEARCH_TYPES.STARTS_WITH;if(s.includes(ci[0])||s.includes(ci[1]))return pe.SEARCH_TYPES.EQUALS;throw new Error(sD.UNKNOWN_SEARCH_TYPE)}else switch(n){case Zo.VALUE_SEARCH_COMPARATORS.BETWEEN:return pe.SEARCH_TYPES.BETWEEN;case Zo.VALUE_SEARCH_COMPARATORS.GREATER:return pe.SEARCH_TYPES.GREATER_THAN;case Zo.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return pe.SEARCH_TYPES.GREATER_THAN_EQUAL;case Zo.VALUE_SEARCH_COMPARATORS.LESS:return pe.SEARCH_TYPES.LESS_THAN;case Zo.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return pe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(sD.UNKNOWN_SEARCH_TYPE)}}a(cD,"createSearchTypeFromSearchObject");lD.exports={executeSearch:oD,createSearchTypeFromSearchObject:cD,prepSearch:tJ,searchByType:aD}});var _D=g((mSe,uD)=>{"use strict";var pSe=rs(),nJ=Sc(),sJ=K(),iJ=C(),oJ=Wf();uD.exports=aJ;function aJ(e,t){if(!sJ.isEmpty(t)&&iJ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=nJ(e,"value");if(n)throw n;return oJ.prepSearch(e,t,!0)}a(aJ,"lmdbGetDataByValue")});var Su=g((gSe,dD)=>{"use strict";var TSe=rs(),cJ=Sc(),lJ=K(),uJ=C(),_J=Wf();dD.exports=dJ;async function dJ(e,t){if(!lJ.isEmpty(t)&&uJ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=cJ(e,"value");if(n)throw n;return _J.prepSearch(e,t,!1)}a(dJ,"lmdbSearchByValue")});var ED=g((OSe,fD)=>{"use strict";var ASe=ct(),LT=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}},PT=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},MT=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};fD.exports={SearchByConditionsObject:LT,SearchCondition:PT,SortAttribute:MT}});var TD=g((ISe,SD)=>{"use strict";var NSe=ED().SearchByConditionsObject,fJ=rs(),EJ=Sc(),UT=mc(),Qf=ct(),{Resource:ySe}=(Jn(),se(BS)),mD=Wf(),hJ=yT(),pJ=require("lodash"),{getSchemaPath:mJ}=ze(),hD=Ve(),{handleHDBError:SJ,hdb_errors:TJ}=oe(),{HTTP_STATUS_CODES:gJ}=TJ,RJ=1e8;SD.exports=AJ;async function AJ(e){let t=EJ(e,"conditions");if(t)throw SJ(t,t.message,gJ.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=mJ(e.schema,e.table),n=await hD.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)hD.openDBI(n,_.search_attribute);let i=pJ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===Qf.SEARCH_TYPES.EQUALS?_.estimated_count=UT.count(n,_.search_attribute,_.search_value):u===Qf.SEARCH_TYPES.CONTAINS||u===Qf.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=RJ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await pD(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(mD.filterByType),d=u.length,f=UT.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=>hJ.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await pD(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=UT.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(AJ,"lmdbSearchByConditions");async function pD(e,t,r,n){let s=new fJ(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===Qf.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,mD.searchByType(e,s,i,n).map(o=>o.value)}a(pD,"executeConditionSearch")});var Tu=g((CSe,gD)=>{"use strict";var OJ=C().OPERATIONS_ENUM,vT=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=OJ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};gD.exports=vT});var BT=g((LSe,wD)=>{"use strict";var bD=rs(),ND=Tu(),yD=Su(),ID=Eu(),Ir=C(),RD=K(),AD=Ve(),{getTransactionAuditStorePath:bJ,getSchemaPath:NJ}=ze(),OD=x();wD.exports=yJ;async function yJ(e){try{if(RD.isEmpty(global.hdb_schema[e.schema])||RD.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await IJ(e),await wJ(e);let t=NJ(e.schema,e.table);try{await AD.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")OD.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=bJ(e.schema,e.table);await AD.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")OD.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(yJ,"lmdbDropTable");async function IJ(e){let t=new bD(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ir.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ir.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await yD(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 ND(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await ID(s)}a(IJ,"deleteAttributesFromSystem");async function wJ(e){let t=new bD(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ir.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ir.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ir.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ir.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await yD(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 ND(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await ID(s)}catch(i){throw i}}a(wJ,"dropTableFromSystem")});var DD=g((MSe,CD)=>{"use strict";var CJ=require("fs-extra"),DJ=rs(),LJ=Tc(),PJ=Tu(),MJ=BT(),UJ=Eu(),vJ=wT(),BJ=Su(),li=C(),{getSchemaPath:HJ}=ze(),{handleHDBError:GJ,hdb_errors:qJ}=oe(),{HDB_ERROR_MSGS:xJ,HTTP_STATUS_CODES:FJ}=qJ;CD.exports=kJ;async function kJ(e){let t;try{t=await $J(e.schema);let r=new DJ(li.SYSTEM_SCHEMA_NAME,li.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,li.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[li.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await BJ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await MJ(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new PJ(li.SYSTEM_SCHEMA_NAME,li.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await UJ(s);let i=HJ(t);await CJ.remove(i)}catch(r){throw r}}a(kJ,"lmdbDropSchema");async function $J(e){let t=new LJ(li.SYSTEM_SCHEMA_NAME,li.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[li.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await vJ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw GJ(new Error,xJ.SCHEMA_NOT_FOUND(e),FJ.NOT_FOUND,void 0,void 0,!0);return n}a($J,"validateDropSchema")});var gu=g((vSe,LD)=>{"use strict";var HT=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};LD.exports=HT});var qT=g((GSe,PD)=>{"use strict";var VJ=require("fs-extra"),jf=Ve(),{getTransactionAuditStorePath:YJ}=ze(),GT=ct(),HSe=gu();PD.exports=KJ;async function KJ(e){let t;try{let r=YJ(e.schema,e.table);await VJ.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,GT.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),jf.createDBI(t,GT.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),jf.createDBI(t,GT.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(KJ,"createTransactionsAuditEnvironment")});var BD=g((xSe,vD)=>{"use strict";var xT=C(),MD=Ve(),WJ=jo(),{getSystemSchemaPath:QJ,getSchemaPath:jJ}=ze(),zJ=si(),JJ=Bf(),FT=vf(),XJ=x(),ZJ=qT(),$T=zJ.hdb_table,UD=[];for(let e=0;e<$T.attributes.length;e++)UD.push($T.attributes[e].attribute);vD.exports=e2;async function e2(e,t){let r=jJ(t.schema,t.table),n=new FT(t.schema,t.table,xT.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new FT(t.schema,t.table,xT.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new FT(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await MD.createEnvironment(r,t.table),e!==void 0){let o=await MD.openEnvironment(QJ(),xT.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await WJ.insertRecords(o,$T.hash_attribute,UD,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await kT(n),await kT(s),await kT(i)}await ZJ(t)}catch(o){throw o}}a(e2,"lmdbCreateTable");async function kT(e){try{await JJ(e)}catch(t){XJ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(kT,"createAttribute")});var GD=g((kSe,HD)=>{"use strict";var t2=lu(),r2=_u(),n2=Ff(),Ru=C(),s2=jo().updateRecords,i2=Ve(),{getSchemaPath:o2}=ze(),a2=du(),c2=x();HD.exports=l2;async function l2(e){try{let{schema_table:t,attributes:r}=t2(e);r2(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 n2(e.hdb_auth_header,t,r),s=o2(e.schema,e.table),i=await i2.openEnvironment(s,e.table),o=await s2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await a2(e,o)}catch(c){c2.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(l2,"lmdbUpdateRecords")});var xD=g((VSe,qD)=>{"use strict";var u2=C().OPERATIONS_ENUM,VT=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=u2.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};qD.exports=VT});var kD=g((WSe,FD)=>{"use strict";var KSe=xD(),_2=lu(),d2=_u(),f2=Ff(),Au=C(),E2=jo().upsertRecords,h2=Ve(),{getSchemaPath:p2}=ze(),m2=du(),S2=x(),{handleHDBError:T2,hdb_errors:g2}=oe();FD.exports=R2;async function R2(e){let t;try{t=_2(e)}catch(l){throw T2(l,l.message,g2.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;d2(e,n,r.hash_attribute),e.schema!==Au.SYSTEM_SCHEMA_NAME&&(n.includes(Au.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Au.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Au.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Au.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await f2(e.hdb_auth_header,r,n),i=p2(e.schema,e.table),o=await h2.openEnvironment(i,e.table),c=await E2(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await m2(e,c)}catch(l){S2.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(R2,"lmdbUpsertRecords")});var VD=g((jSe,$D)=>{"use strict";var YT=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};$D.exports=YT});var KD=g((JSe,YD)=>{"use strict";var KT=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}};YD.exports=KT});var jD=g((eTe,QD)=>{"use strict";var WT=Ve(),{getTransactionAuditStorePath:A2}=ze(),ZSe=VD(),Ou=ct(),O2=K(),WD=KD(),b2=require("util").promisify,N2=b2(setTimeout),y2=1e4,I2=100;QD.exports=w2;async function w2(e){let t=A2(e.schema,e.table),r=await WT.openEnvironment(t,e.table,!0),n=WT.listDBIs(r);WT.initializeDBIs(r,Ou.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new WD;do s=await C2(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 N2(I2);while(s.transactions_deleted>0);return i}a(w2,"deleteAuditLogsBefore");async function C2(e,t){let r=new WD;try{let n=e.dbis[Ou.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[Ou.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];O2.isEmpty(c)||(s=e.dbis[Ou.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Ou.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>y2)break}return await s,r}catch(n){throw n}}a(C2,"deleteTransactions")});var JD=g((rTe,zD)=>{"use strict";var QT=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};zD.exports=QT});var ZD=g((iTe,XD)=>{"use strict";var D2=rs(),L2=Tu(),sTe=JD(),Ds=C(),P2=K(),jT=Ve(),M2=si(),U2=Su(),v2=Eu(),{getSchemaPath:B2}=ze();XD.exports=H2;async function H2(e,t=!0){let r;e.schema===Ds.SYSTEM_SCHEMA_NAME?r=M2[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await q2(e),s=B2(e.schema,e.table),i=await jT.openEnvironment(s,e.table);return t===!0&&await G2(e,i,r.hash_attribute),jT.dropDBI(i,e.attribute),n}a(H2,"lmdbDropAttribute");async function G2(e,t,r){let n=jT.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(G2,"removeAttributeFromAllObjects");async function q2(e){let t=new D2(Ds.SYSTEM_SCHEMA_NAME,Ds.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ds.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ds.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Ds.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await U2(t)).filter(o=>o[Ds.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(P2.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Ds.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new L2(Ds.SYSTEM_SCHEMA_NAME,Ds.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return v2(i)}a(q2,"dropAttributeFromSystem")});var iL=g((cTe,sL)=>{"use strict";var zT=Ve(),gc=ct(),aTe=Or(),JT=C(),eL=K(),{getTransactionAuditStorePath:x2}=ze(),F2=mc(),zf=Ec(),k2=x();sL.exports=$2;async function $2(e){let t=x2(e.schema,e.table),r=await zT.openEnvironment(t,e.table,!0),n=zT.listDBIs(r);zT.initializeDBIs(r,gc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case JT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return tL(r,e.search_values);case JT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,Y2(r,e.search_values,s);case JT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return V2(r,e.search_values);default:return tL(r)}}a($2,"readAuditLog");function tL(e,t=[0,Date.now()]){eL.isEmpty(t[0])&&(t[0]=0),eL.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[gc.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(tL,"searchTransactionsByTimestamp");function V2(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[gc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,nL(e,i))}return Object.fromEntries(r)}a(V2,"searchTransactionsByUsername");function Y2(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=F2.equals(e,gc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,gc.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=nL(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);rL(l,"records",r,u,o),rL(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(Y2,"searchTransactionsByHashValues");function rL(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(rL,"loopRecords");function nL(e,t){let r=[];try{let n=e.dbis[gc.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){k2.warn(i)}return r}catch(n){throw n}}a(nL,"batchSearchTransactions")});var aL=g((dTe,oL)=>{"use strict";var{getSchemaPath:uTe}=ze(),_Te=Ve(),{database:K2}=(ge(),se(ke));oL.exports={writeTransaction:W2};async function W2(e,t,r){return K2({database:e,table:t}).transaction(r)}a(W2,"writeTransaction")});var _L=g((ETe,uL)=>{"use strict";var{getSchemaPath:cL}=ze(),lL=Ve();uL.exports={flush:Q2,resetReadTxn:j2};async function Q2(e,t){return(await lL.openEnvironment(cL(e,t),t.toString())).flushed}a(Q2,"flush");async function j2(e,t){try{(await lL.openEnvironment(cL(e,t),t.toString())).resetReadTxn()}catch{}}a(j2,"resetReadTxn")});var hL=g((pTe,EL)=>{"use strict";var{Readable:z2}=require("stream"),{getDatabases:J2}=(ge(),se(ke)),{readSync:X2,openSync:Z2,createReadStream:dL}=require("fs"),{open:e4}=require("lmdb"),fL=tu(),t4=ru(),{AUDIT_STORE_OPTIONS:r4}=(Ki(),se(LI)),{INTERNAL_DBIS_NAME:n4,AUDIT_STORE_NAME:s4}=ct();EL.exports=o4;var XT=32768,i4=100;async function o4(e){let t=e.database||e.schema||"data",r=J2()[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=e4({noSync:!0,maxDbs:t4.MAX_DBS}),f,E=d.openDB(n4,new fL(!1)),h=u.useReadTransaction(),m=0,S=a(async function(T,A){A.encoding="binary",A.encoder=void 0;let P=d.openDB(T,A),v=u.openDB(T,A);for(let{key:U,version:k,value:H}of v.getRange({start:null,transaction:h,versions:v.useVersions}))f=P.put(U,H,k),m++%i4===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(P=>T.startsWith?.(P+"/"))){E.put(T,A);let[,P]=T.split("/"),v=!P,U=new fL(!v,v);await S(T,U)}e.include_audit&&await S(s4,Object.assign({},r4)),await f;let R=dL(d.path);return R.headers=l(),R.on("close",()=>{h.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=Z2(o.path);return o.transaction(()=>{let _=Buffer.alloc(XT);X2(c,_,0,XT),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=dL(null,{fd:c,start:XT}),f=new z2.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(o4,"getBackup")});var SL=g((STe,mL)=>{"use strict";var a4=x(),{handleHDBError:c4}=oe(),l4=Uw(),u4=Bf(),_4=RT(),d4=DC(),f4=Eu(),E4=wT(),h4=rD(),p4=_D(),m4=Su(),S4=TD(),T4=DD(),g4=BD(),R4=GD(),A4=kD(),O4=jD(),b4=BT(),N4=ZD(),y4=iL(),I4=aL(),pL=_L(),w4=hL(),ZT=class extends l4{static{a(this,"LMDBBridge")}async searchByConditions(t){return S4(t)}async getDataByHash(t){return await E4(t)}async searchByHash(t){return await h4(t)}async getDataByValue(t,r){return await p4(t,r)}async searchByValue(t){return await m4(t)}async createSchema(t){return await d4(t)}async dropSchema(t){return await T4(t)}async createTable(t,r){return await g4(t,r)}async dropTable(t){return await b4(t)}async createAttribute(t){return await u4(t)}async createRecords(t){return await _4(t)}async updateRecords(t){return await R4(t)}async upsertRecords(t){try{return await A4(t)}catch(r){throw c4(r,null,null,a4.ERR,r)}}async deleteRecords(t){return await f4(t)}async dropAttribute(t){return await N4(t)}async deleteAuditLogsBefore(t){return await O4(t)}async readAuditLog(t){return await y4(t)}writeTransaction(t,r,n){return I4.writeTransaction(t,r,n)}flush(t,r){return pL.flush(t,r)}resetReadTxn(t,r){return pL.resetReadTxn(t,r)}getBackup(t){return w4(t)}};mL.exports=ZT});var IL={};Fe(IL,{ResourceBridge:()=>rg});function ng({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 gL(e,t){let r=Ls(e),n=ng(e,r);if(!r)throw new ns.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&&hf(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 Ls(e){let t=e.database||e.schema||D4,r=wr()[t];if(!r)throw(0,ns.handleHDBError)(new Error,C4.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function RL(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*AL(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 OL,Jf,ns,bL,NL,ss,eg,tg,yL,C4,D4,L4,P4,TL,rg,wL=Oe(()=>{"use strict";OL=B(SL()),Jf=B(Sc()),ns=B(oe());ge();bL=B(lu()),NL=B(_u()),ss=B(C()),eg=B(ai()),tg=B(ts()),yL=B(K());Wo();pf();({HDB_ERROR_MSGS:C4}=ns.hdb_errors),D4="data",L4=1e4,P4=10,rg=class extends OL.default{static{a(this,"ResourceBridge")}constructor(t){super(t),TL=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,Jf.default)(t,"conditions");if(r)throw(0,ns.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Ls(t);if(!n)throw new ns.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:ng(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 ns.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}]}ht({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await Ls(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Ls(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){Ls(t).dropTable()}createSchema(t){return bu({database:t.schema,table:null}),eg.signalSchemaChange(new tg.SchemaEventMsg(process.pid,ss.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await sg(t.schema),eg.signalSchemaChange(new tg.SchemaEventMsg(process.pid,ss.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,TL.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,bL.default)(t);(0,NL.default)(t,n,r.primaryKey);let s,i=wr()[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=hf(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=wr()[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 RL(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=wr()[t.schema][t.table];if(!r.createdTimeProperty)throw new ns.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:ss.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,yL.async_set_timeout)(P4),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%L4===0&&await _();return l.length>0&&await _(),s?RL(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Jf.default)(t,"hashes");if(r)throw r;return gL(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of gL(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&ss.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,Jf.default)(t,"value");if(n)throw n;let s=Ls(t);if(!s)throw new ns.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===ss.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:ng(t,s)})}async getDataByValue(t,r){let n=new Map,s=Ls(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){Ls({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Ls(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Ls(t),n={};switch(t.search_type){case ss.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 ss.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of AL(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return AL(r,t.search_values?.[0],t.search_values?.[1])}}};a(ng,"getSelect");a(gL,"getRecords");a(Ls,"getTable");a(RL,"createDeleteResponse");a(AL,"groupRecordsInHistory")});var Pn=g((bTe,CL)=>{"use strict";var{ResourceBridge:M4}=(wL(),se(IL)),U4=X();U4.initSync();var Xf;function v4(){return Xf||(Xf=new M4,Xf)}a(v4,"getBridge");CL.exports=v4()});var ML=g((yTe,PL)=>{"use strict";var DL=require("lodash"),Nu=require("mathjs"),B4=require("jsonata"),LL=K();PL.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?DL.uniqWith(e,DL.isEqual):e,searchJSON:H4,mad:yu.bind(null,Nu.mad),mean:yu.bind(null,Nu.mean),mode:yu.bind(null,Nu.mode),prod:yu.bind(null,Nu.prod),median:yu.bind(null,Nu.median)};function yu(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(yu,"aggregateFunction");function H4(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(LL.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),LL.isEmpty(this.__ala__.res[r])){let n=B4(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(H4,"searchJSON")});var vL=g((wTe,UL)=>{"use strict";var bt=require("moment"),ig="YYYY-MM-DDTHH:mm:ss.SSSZZ";bt.suppressDeprecationWarnings=!0;UL.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(ig),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(ig),offset_utc:(e,t)=>bt(e).utc().utcOffset(t).format(ig)}});var qL=g((CTe,GL)=>{"use strict";var G4=require("@turf/area"),q4=require("@turf/length"),x4=require("@turf/circle"),F4=require("@turf/difference"),k4=require("@turf/distance"),$4=require("@turf/boolean-contains"),V4=require("@turf/boolean-equal"),Y4=require("@turf/boolean-disjoint"),K4=require("@turf/helpers"),BL=C(),Re=K(),ui=x();GL.exports={geoArea:W4,geoLength:Q4,geoCircle:j4,geoDifference:z4,geoDistance:HL,geoNear:J4,geoContains:X4,geoEqual:Z4,geoCrosses:e3,geoConvert:t3};function W4(e){if(Re.isEmpty(e))return NaN;typeof e=="string"&&(e=Re.autoCastJSON(e));try{return G4.default(e)}catch(t){return ui.trace(t,e),NaN}}a(W4,"geoArea");function Q4(e,t){if(Re.isEmpty(e))return NaN;typeof e=="string"&&(e=Re.autoCastJSON(e));try{return q4.default(e,{units:t||"kilometers"})}catch(r){return ui.trace(r,e),NaN}}a(Q4,"geoLength");function j4(e,t,r){if(Re.isEmpty(e))return NaN;if(Re.isEmpty(t))return NaN;typeof e=="string"&&(e=Re.autoCastJSON(e));try{return x4.default(e,t,{units:r||"kilometers"})}catch(n){return ui.trace(n,e,t),NaN}}a(j4,"geoCircle");function z4(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 F4(e,t)}catch(r){return ui.trace(r,e,t),NaN}}a(z4,"geoDifference");function HL(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 k4.default(e,t,{units:r||"kilometers"})}catch(n){return ui.trace(n,e,t),NaN}}a(HL,"geoDistance");function J4(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 HL(e,t,n)<=r}catch(s){return ui.trace(s,e,t),!1}}a(J4,"geoNear");function X4(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 $4.default(e,t)}catch(r){return ui.trace(r,e,t),!1}}a(X4,"geoContains");function Z4(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 V4.default(e,t)}catch(r){return ui.trace(r,e,t),!1}}a(Z4,"geoEqual");function e3(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!Y4.default(e,t)}catch(r){return ui.trace(r,e,t),!1}}a(e3,"geoCrosses");function t3(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(BL.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(BL.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Re.autoCastJSON(e)),K4[t](e,r)}a(t3,"geoConvert")});var Zf=g((LTe,xL)=>{var ea=ML(),sn=vL(),Ps=qL();xL.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=sn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=sn.current_time,e.fn.extract=e.fn.EXTRACT=sn.extract,e.fn.date=e.fn.DATE=sn.date,e.fn.date_format=e.fn.DATE_FORMAT=sn.date_format,e.fn.date_add=e.fn.DATE_ADD=sn.date_add,e.fn.date_sub=e.fn.DATE_SUB=sn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=sn.date_diff,e.fn.now=e.fn.NOW=sn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=sn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=sn.get_server_time,e.fn.getdate=e.fn.GETDATE=sn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=sn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ps.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ps.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ps.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ps.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ps.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ps.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ps.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ps.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ps.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ps.geoNear}});var VL=g((PTe,$L)=>{"use strict";var Iu=require("lodash"),Cr=require("alasql");Cr.options.cache=!1;var r3=Zf(),FL=require("clone"),eE=require("recursive-iterator"),de=x(),Le=K(),Rc=Pn(),n3=C(),{hdb_errors:s3}=oe(),{getDatabases:kL}=(ge(),se(ke)),i3="IS NULL",is="There was a problem performing this search. Please check the logs and try again.";r3(Cr);var og=class{static{a(this,"SQLSearch")}constructor(t,r){if(Le.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(),Le.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Le.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(is)}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(is)}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(is)}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(is)}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(is)}}_getColumns(){let t=new eE(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(FL(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Iu.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=kL()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Le.isEmpty(this.statement.where)){de.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new eE(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Le.isEmpty(r)&&r.right)if(Le.isNotEmptyAndHasValue(r.right.value)){let n=Le.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Cr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Le.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Cr.yy.LogicValue({value:i}):n instanceof Cr.yy.StringValue&&Le.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Cr.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 eE(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(!Le.isEmpty(n3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Le.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Le.isEmptyOrZeroLength(r.left.columnid)||Le.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(Le.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"=":!Le.isEmpty(r.right.value)||!Le.isEmpty(r.left.value)?n.add(Le.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(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from)&&Le.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&&Iu.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(Le.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Le.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(Le.isEmptyOrZeroLength(this.all_table_attributes)&&!Le.isEmptyOrZeroLength(this.columns.columns))return t;if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Cr.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(FL(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(Le.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(i3)>-1&&this.tables.forEach(s=>{let i={columnid:kL()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Iu.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),!Le.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.exact_search_values[_].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[_].values);let u=await Rc.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(is)}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 Rc.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(is)}else if(!Le.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Le.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 Rc.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(is)}else try{c.search_attribute=s.attribute,c.search_value="*";let u=await Rc.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(is)}}}_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 Cr.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 Cr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Cr.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 Cr.yy.FuncValue:new Cr.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 Cr.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=Iu.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 eE(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=Iu.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(is)}}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 Rc.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 Cr.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(s3.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 Rc.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(is)}}return Object.values(Object.values(this.data)[0].__merged_data)}};$L.exports=og});var or=g((UTe,YL)=>{"use strict";var o3=Pw();YL.exports={searchByConditions:c3,searchByHash:l3,searchByValue:u3,search:_3};var ag=Pn(),{transformReq:cg}=K(),a3=VL();async function c3(e){return cg(e),ag.searchByConditions(e)}a(c3,"searchByConditions");async function l3(e){cg(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of ag.searchByHash(e))r&&t.push(r);return t}a(l3,"searchByHash");async function u3(e){cg(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of ag.searchByValue(e))t.push(r);return t}a(u3,"searchByValue");function _3(e,t){try{let r=new o3(e);r.validate(),new a3(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(_3,"search")});var _i=g((BTe,jL)=>{"use strict";var wu=require("crypto"),d3=X(),{CONFIG_PARAMS:f3}=C(),WL="aes-256-cbc",E3=32,h3=16,lg=64,QL=32,p3=lg+QL,KL=new Map;jL.exports={encrypt:m3,decrypt:S3,createNatsTableStreamName:T3};function m3(e){let t=wu.randomBytes(E3),r=wu.randomBytes(h3),n=wu.createCipheriv(WL,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(m3,"encrypt");function S3(e){let t=e.substr(0,lg),r=e.substr(lg,QL),n=e.substr(p3,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=wu.createDecipheriv(WL,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(S3,"decrypt");function T3(e,t){let r=d3.get(f3.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=KL.get(r);return n||(n=wu.createHash("md5").update(r).digest("hex"),KL.set(r,n)),n}a(T3,"createNatsTableStreamName")});var di=g((qTe,JL)=>{"use strict";var GTe=or(),tE=x(),zL=Uf(),g3=_i(),rE=K(),{handleHDBError:nE,hdb_errors:R3}=oe(),{HDB_ERROR_MSGS:sE,HTTP_STATUS_CODES:ug}=R3,A3=X();A3.initSync();var{getDatabases:_g}=(ge(),se(ke));JL.exports={describeAll:O3,describeTable:iE,describeSchema:b3};async function O3(e){try{let t=rE.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=_g(),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 iE({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 iE({schema:u,table:f,exact_count:l},h)}E&&c.push(E)}catch(E){tE.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 tE.error("Got an error in describeAll"),tE.error(t),nE(new Error,sE.DESCRIBE_ALL_ERR)}}a(O3,"describeAll");async function iE(e,t){rE.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=zL.describe_table(e);if(i)throw i;let c=_g()[r];if(!c)throw nE(new Error,sE.SCHEMA_NOT_FOUND(e.schema),ug.NOT_FOUND);let l=c[n];if(!l)throw nE(new Error,sE.TABLE_NOT_FOUND(e.schema,e.table),ug.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=g3.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){tE.warn(`unable to stat table dbi due to ${f}`)}return d}a(iE,"descTable");async function b3(e){rE.transformReq(e);let t=zL.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=_g()[n];if(!i)throw nE(new Error,sE.SCHEMA_NOT_FOUND(e.schema),ug.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),rE.isEmpty(l)||l.describe){let _=await iE({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(b3,"describeSchema")});var Mn=g(($Te,rP)=>{var N3=si(),{callbackify:ZL,promisify:y3}=require("util"),{getDatabases:eP}=(ge(),se(ke));rP.exports={setSchemaDataToGlobal:XL,getTableSchema:I3,getSystemSchema:w3,setSchemaDataToGlobalAsync:y3(XL)};var tP=di(),FTe=ZL(tP.describeAll),kTe=ZL(tP.describeTable);function XL(e){global.hdb_schema=eP(),e&&e()}a(XL,"setSchemaDataToGlobal");function I3(e,t,r){let n=eP()[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(I3,"getTableSchema");function w3(){return N3}a(w3,"getSystemSchema")});var Dr=g((YTe,oP)=>{"use strict";var aE=fT(),Xt=K(),C3=require("util"),cE=Pn(),D3=Mn(),nP=x(),{handleHDBError:ta,hdb_errors:L3}=oe(),{HTTP_STATUS_CODES:ra}=L3,P3=C3.promisify(D3.getTableSchema),M3="updated",sP="inserted",iP="upserted";oP.exports={insert:v3,update:B3,upsert:H3,validation:U3,flush:G3};async function U3(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 P3(e.schema,e.table),r=aE(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 nP.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 nP.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(U3,"validation");async function v3(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=aE(e);if(t)throw ta(new Error,t.message,ra.BAD_REQUEST);Xt.transformReq(e);let r=Xt.checkSchemaTableExist(e.schema,e.table);if(r)throw ta(new Error,r,ra.BAD_REQUEST);let n=await cE.createRecords(e);return oE(sP,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(v3,"insertData");async function B3(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=aE(e);if(t)throw ta(new Error,t.message,ra.BAD_REQUEST);Xt.transformReq(e);let r=Xt.checkSchemaTableExist(e.schema,e.table);if(r)throw ta(new Error,r,ra.BAD_REQUEST);let n=await cE.updateRecords(e);return Xt.isEmpty(n.existing_rows)?oE(M3,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):oE(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(B3,"updateData");async function H3(e){if(e.operation!=="upsert")throw ta(new Error,"invalid operation, must be upsert",ra.INTERNAL_SERVER_ERROR);let t=aE(e);if(t)throw ta(new Error,t.message,ra.BAD_REQUEST);Xt.transformReq(e);let r=Xt.checkSchemaTableExist(e.schema,e.table);if(r)throw ta(new Error,r,ra.BAD_REQUEST);let n=await cE.upsertRecords(e);return oE(iP,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(H3,"upsertData");function oE(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===sP?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===iP?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(oE,"returnObject");function G3(e){return Xt.transformReq(e),cE.flush(e.schema,e.table)}a(G3,"flush")});var fg=g((WTe,lP)=>{var q3=rt(),dg=require("joi"),{hdb_table:x3,hdb_database:aP}=ws(),cP={schema:aP,database:aP,table:x3},F3={date:dg.date().iso().required()},k3={timestamp:dg.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};lP.exports=function(e,t){let r=t==="timestamp"?{...cP,...k3}:{...cP,...F3},n=dg.object(r);return q3.validateBySchema(e,n)}});var dP=g((QTe,_P)=>{var $3=rt(),Eg=require("joi"),{hdb_table:V3,hdb_database:uP}=ws(),Y3=Eg.object({schema:uP,database:uP,table:V3,hash_values:Eg.array().required(),ids:Eg.array()});_P.exports=function(e){return $3.validateBySchema(e,Y3)}});var Sg=g((jTe,fP)=>{"use strict";var hg=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}},pg=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}},mg=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};fP.exports={InsertObject:hg,NoSQLSeachObject:pg,DeleteResponseObject:mg}});var ia=g((JTe,SP)=>{"use strict";var hP=fg(),K3=dP(),na=K(),EP=require("moment"),pP=x(),{promisify:W3,callbackify:Q3}=require("util"),sa=C(),j3=Mn(),Tg=W3(j3.getTableSchema),gg=Pn(),{DeleteResponseObject:z3}=Sg(),{handleHDBError:eo,hdb_errors:J3}=oe(),{HDB_ERROR_MSGS:lE,HTTP_STATUS_CODES:to}=J3,X3="records successfully deleted",Z3=Q3(mP);SP.exports={delete:Z3,deleteRecord:mP,deleteFilesBefore:eX,deleteAuditLogsBefore:tX};async function eX(e){let t=hP(e,"date");if(t)throw eo(t,t.message,to.BAD_REQUEST,void 0,void 0,!0);if(na.transformReq(e),!EP(e.date,EP.ISO_8601).isValid())throw eo(new Error,lE.INVALID_DATE,to.BAD_REQUEST,sa.LOG_LEVELS.ERROR,lE.INVALID_DATE,!0);let n=na.checkSchemaTableExist(e.schema,e.table);if(n)throw eo(new Error,n,to.NOT_FOUND,sa.LOG_LEVELS.ERROR,n,!0);let s=await gg.deleteRecordsBefore(e);if(await Tg(e.schema,e.table),pP.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(eX,"deleteFilesBefore");async function tX(e){let t=hP(e,"timestamp");if(t)throw eo(t,t.message,to.BAD_REQUEST,void 0,void 0,!0);if(na.transformReq(e),isNaN(e.timestamp))throw eo(new Error,lE.INVALID_VALUE("Timestamp"),to.BAD_REQUEST,sa.LOG_LEVELS.ERROR,lE.INVALID_VALUE("Timestamp"),!0);let r=na.checkSchemaTableExist(e.schema,e.table);if(r)throw eo(new Error,r,to.NOT_FOUND,sa.LOG_LEVELS.ERROR,r,!0);let n=await gg.deleteAuditLogsBefore(e);return await Tg(e.schema,e.table),pP.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(tX,"deleteAuditLogsBefore");async function mP(e){e.ids&&(e.hash_values=e.ids);let t=K3(e);if(t)throw eo(t,t.message,to.BAD_REQUEST,void 0,void 0,!0);na.transformReq(e);let r=na.checkSchemaTableExist(e.schema,e.table);if(r)throw eo(new Error,r,to.NOT_FOUND,sa.LOG_LEVELS.ERROR,r,!0);try{await Tg(e.schema,e.table);let n=await gg.deleteRecords(e);return na.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${X3}`),n}catch(n){if(n.message===sa.SEARCH_NOT_FOUND_MESSAGE){let s=new z3;return s.message=sa.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(mP,"deleteRecord")});var uE=g((ZTe,RP)=>{var rX=require("crypto"),TP=9;function nX(e){let t=iX(TP),r=gP(e+t);return t+r}a(nX,"createHash");function sX(e,t){let r=e?.substr(0,TP),n=r+gP(t+r);return e===n}a(sX,"validateHash");function iX(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(iX,"generateSalt");function gP(e){return rX.createHash("md5").update(e).digest("hex")}a(gP,"md5");RP.exports={hash:nX,validate:sX}});var OP=g((tge,AP)=>{var Rg=rt(),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 oX(e){return ar.password.presence=!0,ar.username.presence=!0,ar.role.presence=!0,ar.active.presence=!0,Rg.validateObject(e,ar)}a(oX,"addUserValidation");function aX(e){return ar.password.presence=!1,ar.username.presence=!0,ar.role.presence=!1,ar.active.presence=!1,Rg.validateObject(e,ar)}a(aX,"alterUserValidation");function cX(e){return ar.password.presence=!1,ar.username.presence=!0,ar.role.presence=!1,ar.active.presence=!1,Rg.validateObject(e,ar)}a(cX,"dropUserValidation");AP.exports={addUserValidation:oX,alterUserValidation:aX,dropUserValidation:cX}});var et=g((sge,NP)=>{"use strict";var{platform:nge}=require("os"),lX="nats-server.zip",Ag="nats-server",uX=process.platform==="win32"?`${Ag}.exe`:Ag,_X=/^[^\s.,*>]+$/,bP="__request__",dX=a(e=>`${e}.${bP}`,"REQUEST_SUBJECT"),fX={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},EX={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},hX={HUB:"hub.pid",LEAF:"leaf.pid"},pX={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},mX={SUCCESS:"success",ERROR:"error"},SX={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},TX={TXN:"txn",MSGID:"msgid"},Ac={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},gX={[Ac.ERR]:1,[Ac.WRN]:2,[Ac.INF]:3,[Ac.DBG]:4,[Ac.TRC]:5},RX={debug:"-D",trace:"-DVV"};NP.exports={NATS_SERVER_ZIP:lX,NATS_SERVER_NAME:Ag,NATS_BINARY_NAME:uX,PID_FILES:hX,NATS_CONFIG_FILES:EX,SERVER_SUFFIX:pX,NATS_TERM_CONSTRAINTS_RX:_X,REQUEST_SUFFIX:bP,UPDATE_REMOTE_RESPONSE_STATUSES:mX,CLUSTER_STATUS_STATUSES:SX,REQUEST_SUBJECT:dX,SUBJECT_PREFIXES:TX,MSG_HEADERS:fX,LOG_LEVELS:Ac,LOG_LEVEL_FLAGS:RX,LOG_LEVEL_HIERARCHY:gX}});var Og=g((oge,yP)=>{"use strict";var AX={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 WV=Object.create;var vl=Object.defineProperty;var QV=Object.getOwnPropertyDescriptor;var jV=Object.getOwnPropertyNames;var zV=Object.getPrototypeOf,JV=Object.prototype.hasOwnProperty;var a=(e,t)=>vl(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)vl(e,r,{get:t[r],enumerable:!0})},ly=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of jV(t))!JV.call(e,s)&&s!==r&&vl(e,s,{get:()=>t[s],enumerable:!(n=QV(t,s))||n.enumerable});return e};var B=(e,t,r)=>(r=e!=null?WV(zV(e)):{},ly(t||!e||!e.__esModule?vl(r,"default",{value:e,enumerable:!0}):r,e)),ie=e=>ly(vl({},"__esModule",{value:!0}),e);var dy=T((Ahe,_y)=>{var XV=require("fast-glob"),{statSync:Qm,existsSync:jm,readFileSync:ZV,writeFileSync:eY}=require("fs"),{spawnSync:tY,spawn:rY,execFileSync:Rhe}=require("child_process"),{isMainThread:nY}=require("worker_threads"),{join:ji,relative:uy}=require("path"),{PACKAGE_ROOT:Xn}=D(),{tmpdir:sY,platform:iY}=require("os");require("source-map-support").install();var oY=["resources","server","dataLayer","components"],Bl="ts-build",zm,aY=__filename.endsWith("tsBuild.js");if(aY){if(nY){let r;try{Qm(ji(Xn,Bl)),r=!0}catch{}if(r)for(let n of XV.sync(oY.map(s=>s+"/**/*.ts"),{cwd:Xn})){let s=0,i=0;try{s=Qm(ji(Xn,n)).mtimeMs-5e3,i=Qm(ji(Xn,Bl,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=ji(Xn,"node_modules/.bin/tsc");iY()==="win32"&&(n+=".cmd");let s=tY(n,{cwd:Xn});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=ji(sY(),"harperdb-tsc.pid"),o;if(jm(i))try{process.kill(+ZV(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=rY(n,["--watch"],{cwd:Xn,detached:!0,stdio:"ignore"});eY(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(Bl)?o=ji(Xn,uy(Bl,i)):o=ji(Xn,Bl,i);let c=ji(o,r),l=c+".js";if(jm(l))return l;if(c.includes(".")&&jm(c))return c}return t(r,n,s)}}});var D=T((Nhe,yy)=>{"use strict";var Cn=require("path"),cY=require("fs"),{relative:Ohe,join:bhe}=Cn,{existsSync:lY}=cY;function uY(){let e=__dirname;for(;!lY(Cn.join(e,"package.json"));){let t=Cn.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(uY,"getHDBPackageRoot");var zi=uY(),fy="js",$d=fy,_Y="harperdb-config.yaml",dY="defaultConfig.yaml",fY="hdb",Ey=`harperdb.${$d}`,hy=`customFunctionsServer.${$d}`,EY=`restartHdb.${$d}`,Xm="HarperDB",kd="Custom Functions",Vd="Clustering Hub",Yd="Clustering Leaf",hY="Clustering Ingest Service",pY="Clustering Reply Service",mY="foreground.pid",SY="hdb.pid",TY="data",gY={HDB:Xm,CLUSTERING_HUB:Vd,CLUSTERING_LEAF:Yd,CLUSTERING_INGEST_SERVICE:hY,CLUSTERING_REPLY_SERVICE:pY,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"},RY={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},AY={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},OY={harperdb:Xm,"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"},bY={CLUSTERING_HUB_PROC_DESCRIPTOR:Vd,CLUSTERING_LEAF_PROC_DESCRIPTOR:Yd},Jm={HDB:Cn.join(zi,"server/harperdb"),CUSTOM_FUNCTIONS:Cn.join(zi,"server/customFunctions"),CLUSTERING_HUB:Cn.join(zi,"server/nats"),CLUSTERING_LEAF:Cn.join(zi,"server/nats")},NY={HDB:Cn.join(Jm.HDB,Ey),CUSTOM_FUNCTIONS:Cn.join(Jm.CUSTOM_FUNCTIONS,hy)},yY={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Cn.join(zi,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Cn.join(zi,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Cn.join(zi,"launchServiceScripts/launchUpdateNodes4-0-0.js")},IY={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},py="support@harperdb.io",wY="customer-success@harperdb.io",my=1,CY=4141,Sy="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",DY="https://www.harperdb.io/product",LY=`For support, please submit a request at ${Sy} or contact ${py}`,Ty=`For license support, please contact ${wY}`,PY="None of the specified records were found.",MY="hash attribute not found",UY=`Your current license only supports ${my} role. ${Ty}`,vY="Your current license only supports 3 connections to a node.",BY="127.0.0.1",HY=1,GY=/^\.$/,qY=/^\.\.$/,xY="U+002E",FY=/\//g,kY="U+002F",$Y=/U\+002F/g,VY=/^U\+002E$/,YY=/^U\+002EU\+002E$/,KY="d",WY=999999,QY="*",jY="--max-old-space-size=",zY="system",JY="__hdb_hash",XY=".harperdb",ZY=".hdb",e1="keys",t1="hdb_boot_properties.file",r1=".updateConfig.json",n1="SIGTSTP",s1=24,i1=6e4,o1=448,a1="blob",c1="trash",l1="database",u1="schema",_1="transactions",d1=".count",f1="id",E1="PROCESS_NAME",gy={SETTINGS_PATH_KEY:"settings_path"},Ry=require("lodash"),h1={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"},p1={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},m1={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},S1={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"},T1={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"},zr="hdb_internal:",g1={CREATE_SCHEMA:zr+"create_schema",CREATE_TABLE:zr+"create_table",CREATE_ATTRIBUTE:zr+"create_attribute",ADD_USER:zr+"add_user",ALTER_USER:zr+"alter_user",DROP_USER:zr+"drop_user",HDB_NODES:zr+"hdb_nodes",HDB_USERS:zr+"hdb_users",HDB_WORKERS:zr+"hdb_workers",CATCHUP:zr+"catchup",SCHEMA_CATCHUP:zr+"schema_catchup",WORKER_ROOM:zr+"cluster_workers"},R1={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"},A1="060493.ks",O1=".license",b1={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"},N1={CSV:".csv",JSON:".json"},y1={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},I1={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Hl={};Hl[ee.INSERT]=ee.INSERT;Hl[ee.UPDATE]=ee.UPDATE;Hl[ee.UPSERT]=ee.UPSERT;Hl[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 w1={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"},C1={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"},D1=Ry.invert(Ay),L1={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 P1={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},M1={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"},U1={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"},v1={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},B1={VERSION_DEFAULT:"2.2.0"},H1={DEVELOPMENT:8192,DEFAULT:512},G1={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"},q1={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"},x1={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},by={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},F1=Symbol("metadata"),k1="__clustering__",$1=Object.values(by),V1=15984864e5,Ny={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Y1=Ry.invert(Ny),K1={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"},W1=111,Q1=`\r
3
+ `,j1={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},z1=["*","%"],J1="unauthorized_access",X1="func_val",Z1={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},eK={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},tK={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"},rK={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},nK={HTTP:"http"},sK={STOPPED:"stopped",ONLINE:"online"},iK="3.x.x",oK={SUCCESS:"success",FAILURE:"failure"},aK={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};yy.exports={LOCAL_HARPERDB_OPERATIONS:xe,HDB_SUPPORT_ADDRESS:py,HDB_SUPPORT_URL:Sy,HDB_PRICING_URL:DY,SUPPORT_HELP_MSG:LY,LICENSE_HELP_MSG:Ty,HDB_PROC_NAME:Ey,HDB_PROC_DESCRIPTOR:Xm,CLUSTERING_LEAF_PROC_DESCRIPTOR:Yd,CLUSTERING_HUB_PROC_DESCRIPTOR:Vd,SYSTEM_SCHEMA_NAME:zY,HASH_FOLDER_NAME:JY,HDB_HOME_DIR_NAME:XY,UPDATE_FILE_NAME:r1,LICENSE_KEY_DIR_NAME:e1,BOOT_PROPS_FILE_NAME:t1,JOB_TYPE_ENUM:M1,JOB_STATUS_ENUM:b1,SYSTEM_TABLE_NAMES:S1,SYSTEM_TABLE_HASH_ATTRIBUTES:T1,OPERATIONS_ENUM:ee,VALID_S3_FILE_TYPES:N1,S3_BUCKET_AUTH_KEYS:y1,VALID_SQL_OPS_ENUM:I1,GEO_CONVERSION_ENUM:C1,HDB_SETTINGS_NAMES:Ay,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:D1,SERVICE_ACTIONS_ENUM:w1,CLUSTER_MESSAGE_TYPE_ENUM:U1,CLUSTER_CONNECTION_DIRECTION_ENUM:v1,CLUSTER_EVENTS_DEFS_ENUM:G1,PERIOD_REGEX:GY,DOUBLE_PERIOD_REGEX:qY,UNICODE_PERIOD:xY,FORWARD_SLASH_REGEX:FY,UNICODE_FORWARD_SLASH:kY,ESCAPED_FORWARD_SLASH_REGEX:$Y,ESCAPED_PERIOD_REGEX:VY,ESCAPED_DOUBLE_PERIOD_REGEX:YY,REG_KEY_FILE_NAME:A1,RESTART_TIMEOUT_MS:i1,HDB_FILE_PERMISSIONS:o1,DATABASES_DIR_NAME:l1,LEGACY_DATABASES_DIR_NAME:u1,TRANSACTIONS_DIR_NAME:_1,LIMIT_COUNT_NAME:d1,ID_ATTRIBUTE_STRING:f1,INSERT_MODULE_ENUM:p1,UPGRADE_JSON_FIELD_NAMES_ENUM:m1,RESTART_CODE:n1,RESTART_CODE_NUM:s1,CLUSTER_OPERATIONS:Hl,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:R1,HDB_INTERNAL_SC_CHANNEL_PREFIX:zr,INTERNAL_SC_CHANNELS:g1,CLUSTERING_MESSAGE_TYPES:K1,HDB_FILE_SUFFIX:ZY,BLOB_FOLDER_NAME:a1,HDB_TRASH_DIR:c1,ORIGINATOR_SET_VALUE:W1,LICENSE_VALUES:B1,RAM_ALLOCATION_ENUM:H1,TIME_STAMP_NAMES_ENUM:by,TIME_STAMP_NAMES:$1,PERMS_UPDATE_RELEASE_TIMESTAMP:V1,SEARCH_NOT_FOUND_MESSAGE:PY,SEARCH_ATTRIBUTE_NOT_FOUND:MY,LICENSE_ROLE_DENIED_RESPONSE:UY,LICENSE_MAX_CONNS_REACHED:vY,BASIC_LICENSE_MAX_NON_CU_ROLES:my,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:CY,VALUE_SEARCH_COMPARATORS:Ny,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Y1,LICENSE_FILE_NAME:O1,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:q1,NEW_LINE:Q1,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:HY,MOMENT_DAYS_TAG:KY,API_TURNOVER_SEC:WY,LOOPBACK:BY,CODE_EXTENSION:$d,WILDCARD_SEARCH_VALUE:QY,NODE_ERROR_CODES:x1,JAVASCRIPT_EXTENSION:fy,PERMS_CRUD_ENUM:j1,UNAUTHORIZED_PERMISSION_NAME:J1,SEARCH_WILDCARDS:z1,FUNC_VAL:X1,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:Z1,JWT_ENUM:eK,CLUSTERING_FLAG:k1,ITC_EVENT_TYPES:tK,CUSTOM_FUNCTION_PROC_NAME:hy,CUSTOM_FUNCTION_PROC_DESCRIPTOR:kd,SERVICES:rK,THREAD_TYPES:nK,MEM_SETTING_KEY:jY,HDB_RESTART_SCRIPT:EY,PROCESS_DESCRIPTORS:gY,SERVICE_SERVERS:NY,SERVICE_SERVERS_CWD:Jm,PROCESS_DESCRIPTORS_VALIDATE:OY,LAUNCH_SERVICE_SCRIPTS:yY,LOG_LEVELS:AY,PROCESS_NAME_ENV_PROP:E1,LOG_NAMES:RY,PM2_PROCESS_STATUSES:sK,CONFIG_PARAM_MAP:Oy,CONFIG_PARAMS:w,HDB_CONFIG_FILE:_Y,HDB_DEFAULT_CONFIG_FILE:dY,ROLE_TYPES_ENUM:IY,BOOT_PROP_PARAMS:gy,INSTALL_PROMPTS:h1,HDB_ROOT_DIR_NAME:fY,CLUSTERING_PROCESSES:bY,FOREGROUND_PID_FILE:mY,PACKAGE_ROOT:zi,PRE_4_0_0_VERSION:iK,DATABASES_PARAM_CONFIG:P1,METADATA_PROPERTY:F1,AUTH_AUDIT_STATUS:oK,AUTH_AUDIT_TYPES:aK,HDB_PID_FILE:SY,DEFAULT_DATABASE_NAME:TY,LEGACY_CONFIG_PARAMS:L1};dy()});var Ji=T((Ihe,Cy)=>{"use strict";var Iy=require("minimist");Cy.exports=cK;function cK(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(cK,"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((Che,iS)=>{"use strict";var Ko=require("fs-extra"),{workerData:lK,threadId:uK}=require("worker_threads"),ii=require("path"),Py=require("yaml"),My=require("properties-reader"),Rt=D(),Dy=Ji(),_K=require("os"),{PACKAGE_ROOT:eS}=D(),{_assignPackageExport:dK}=require("../index"),ql={};for(let e in console)ql[e]||(ql[e]=console[e]);var Sr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Uy={STDOUT:"stdOut",STDERR:"stdErr"},fK=ii.join(eS,"logs"),EK=ii.join(eS,"config/yaml/",Rt.HDB_DEFAULT_CONFIG_FILE),hK=1e4,si,Ns,mr,Kd,Wd,xl,cc,Gl;Gl===void 0&&vy();iS.exports={notify:Gy,fatal:qy,error:Fl,warn:sS,info:Qd,debug:nS,trace:rS,setLogLevel:AK,log_level:mr,loggerWithTag:pK,suppressLogging:mK,initLogSettings:vy,setupConsoleLogging:By,logCustomLevel:gK,closeLogFile:tS,getLogFilePath:()=>xl,OUTPUTS:Uy,AuthAuditLog:NK};dK("logger",iS.exports);function vy(e=!1){try{if(Gl===void 0||e){tS();let t=RK(),r=Dy(["ROOTPATH"]);try{Gl=My(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Ko.pathExistsSync(ii.join(r.ROOTPATH,Rt.HDB_CONFIG_FILE)))throw n}({level:mr,config_log_path:Wd,to_file:si,to_stream:Ns}=OK(r.ROOTPATH?ii.join(r.ROOTPATH,Rt.HDB_CONFIG_FILE):Gl.get("settings_path"))),Kd=Rt.LOG_NAMES.HDB,xl=ii.join(Wd,Kd)}}catch(t){if(Gl=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){mr=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}=bK();si=si===void 0?s:si,si=Ly(si),Ns=Ns===void 0?i:Ns,Ns=Ly(Ns),mr=mr===void 0?n:mr,Wd=fK,Kd=Rt.LOG_NAMES.INSTALL,xl=ii.join(Wd,Kd);return}throw Fl("Error initializing log settings"),Fl(t),t}process.env.DEV_MODE&&(Ns=!0),By()}a(vy,"initLogSettings");var Zm=!0;function By(){ac("error",Fl),ac("warn",sS),ac("log",Qd),ac("info",Qd),ac("debug",nS),ac("trace",rS)}a(By,"setupConsoleLogging");function ac(e,t){console[e]=function(...r){if(Zm&&t(...r),!/PM2 log:|App \[/.test(r[0]))return ql[e](...r)}}a(ac,"logConsole");function pK(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Gy),fatal:r(qy),error:r(Fl),warn:r(sS),info:r(Qd),debug:r(nS),trace:r(rS)};function r(n){return function(...s){return n(t,...s)}}}a(pK,"loggerWithTag");function mK(e){try{Zm=!1,e()}finally{Zm=!0}}a(mK,"suppressLogging");var SK=lK?.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||SK+"/"+uK);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 kl(e){si&&Hy(e),Ns&&process.stdout.write(e)}a(kl,"logStdOut");function jd(e){si&&Hy(e),Ns&&process.stderr.write(e)}a(jd,"logStdErr");function Hy(e){TK(),cc?Ko.appendFileSync(cc,e):ql.log(e)}a(Hy,"logToFile");function tS(){try{Ko.closeSync(cc)}catch{}cc=null}a(tS,"closeLogFile");function TK(){if(!cc){try{if(!xl)debugger;cc=Ko.openSync(xl,"a")}catch(e){ql.error(e)}setTimeout(()=>{tS()},hK).unref()}}a(TK,"openLogFile");function Qd(...e){Sr[mr]<=Sr.info&&kl(oi("info",e))}a(Qd,"info");function rS(...e){Sr[mr]<=Sr.trace&&kl(oi("trace",e))}a(rS,"trace");function Fl(...e){Sr[mr]<=Sr.error&&jd(oi("error",e))}a(Fl,"error");function nS(...e){Sr[mr]<=Sr.debug&&kl(oi("debug",e))}a(nS,"debug");function Gy(...e){Sr[mr]<=Sr.notify&&kl(oi("notify",e))}a(Gy,"notify");function qy(...e){Sr[mr]<=Sr.fatal&&jd(oi("fatal",e))}a(qy,"fatal");function sS(...e){Sr[mr]<=Sr.warn&&jd(oi("warn",e))}a(sS,"warn");function gK(e,t,...r){t===Uy.STDERR?jd(oi(e,r)):kl(oi(e,r))}a(gK,"logCustomLevel");function RK(){let e;try{e=_K.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(eS,"utility/hdb_boot_properties.file")),t}a(RK,"getPropsFilePath");function AK(e){mr=e}a(AK,"setLogLevel");function Ly(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Ly,"autoCastBoolean");function OK(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(OK,"getLogConfig");function bK(){try{let e=Py.parseDocument(Ko.readFileSync(EK,"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(bK,"getDefaultConfig");function NK(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(NK,"AuthAuditLog")});var oS=T((Lhe,xy)=>{"use strict";var yK=require("util"),IK=require("path"),wK=require("child_process"),CK=yK.promisify(wK.execFile),DK=1e3*1e3*10;xy.exports={findPs:LK};async function LK(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await CK("ps",["wwxo",`pid,${r}`],{maxBuffer:DK});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:IK.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(LK,"findPs")});var at=T((Mhe,ky)=>{"use strict";var PK="__dbis__",MK="__txns__",UK="__environment_name__",vK="__dbi_defintion__",BK={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"},HK=["__createdtime__","__updatedtime__"],GK="\uFFFF",Fy={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},qK=Object.values(Fy);ky.exports={AUDIT_STORE_NAME:MK,INTERNAL_DBIS_NAME:PK,DBI_DEFINITION_NAME:vK,SEARCH_TYPES:BK,TIMESTAMP_NAMES:HK,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:UK,TRANSACTIONS_DBI_NAMES_ENUM:Fy,TRANSACTIONS_DBIS:qK,OVERFLOW_MARKER:GK}});var Jr=T((Uhe,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"},xK=Wy[Yy.INTERNAL_SERVER_ERROR],FK={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.`},kK={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},$K={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"},VK={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"},YK={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"},KK={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."},WK={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`},QK={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."},zK={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}`},JK={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."},XK={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},ZK={...Qy,...$K,...FK,...KK,...WK,...QK,...jK,...zK,...YK,...jy,...zy,...JK,...XK,...kK};Jy.exports={CHECK_LOGS_WRAPPER:Ky,HDB_ERROR_MSGS:ZK,DEFAULT_ERROR_MSGS:Wy,DEFAULT_ERROR_RESP:xK,HTTP_STATUS_CODES:Yy,LMDB_ERRORS_ENUM:VK,AUTHENTICATION_ERROR_MSGS:Qy,VALIDATION_ERROR_MSGS:jy,ITC_ERRORS:zy}});var oe=T((Bhe,eI)=>{"use strict";var lc=Jr(),eW=x(),tW=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&&eW[s](i)}},aS=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}},cS=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Xy(e,t,r,n=tW.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:aS,ServerError:cS,hdb_errors:lc}});var je=T((Ghe,aI)=>{"use strict";var Wl=D(),rW=K(),Tr=X(),Ql=require("path"),nW=require("minimist"),tI=require("fs-extra"),rI=require("lodash");Tr.initSync();var{CONFIG_PARAMS:Xi,DATABASES_PARAM_CONFIG:$l,SYSTEM_SCHEMA_NAME:Jd}=Wl,Vl,Yl,Kl;function nI(){if(Vl!==void 0)return Vl;if(Tr.getHdbBasePath()!==void 0)return Vl=Tr.get(Xi.STORAGE_PATH)||Ql.join(Tr.getHdbBasePath(),Wl.DATABASES_DIR_NAME),Vl}a(nI,"getBaseSchemaPath");function sI(){if(Yl!==void 0)return Yl;if(Tr.getHdbBasePath()!==void 0)return Yl=oI(Jd),Yl}a(sI,"getSystemSchemaPath");function iI(){if(Kl!==void 0)return Kl;if(Tr.getHdbBasePath()!==void 0)return Kl=Tr.get(Wl.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Ql.join(Tr.getHdbBasePath(),Wl.TRANSACTIONS_DIR_NAME),Kl}a(iI,"getTransactionAuditStoreBasePath");function sW(e,t){let r=Tr.get(Xi.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Ql.join(iI(),e.toString())}a(sW,"getTransactionAuditStorePath");function oI(e,t){e=e.toString(),t=t&&t.toString();let r=Tr.get(Wl.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Ql.join(nI(),e)}a(oI,"getSchemaPath");function iW(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,nW(process.argv));let n=r[Xi.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!rW.isObject(n))throw o;i=n}for(let o of i){let c=o[Jd];if(!c)continue;let l=Tr.get(Xi.DATABASES);l=l??{};let _=c?.tables?.[t]?.[$l.PATH];if(_)return rI.set(l,[Jd,$l.TABLES,t,$l.PATH],_),Tr.setProperty(Xi.DATABASES,l),_;let u=c?.[$l.PATH];if(u)return rI.set(l,[Jd,$l.PATH],u),Tr.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=Ql.join(s,e);return tI.mkdirsSync(i),Tr.setProperty(Xi.STORAGE_PATH,s),i}return sI()}a(iW,"initSystemSchemaPaths");function oW(){Vl=void 0,Yl=void 0,Kl=void 0}a(oW,"resetPaths");aI.exports={getBaseSchemaPath:nI,getSystemSchemaPath:sI,getTransactionAuditStorePath:sW,getTransactionAuditStoreBasePath:iI,getSchemaPath:oI,initSystemSchemaPaths:iW,resetPaths:oW}});var gr=T((khe,dI)=>{"use strict";var aW=Jr().LMDB_ERRORS_ENUM,xhe=require("lmdb"),cW=at(),Fhe=require("buffer").Buffer,{OVERFLOW_MARKER:cI,MAX_SEARCH_KEY_LENGTH:Xd}=cW,lI=["number","string","symbol","boolean","bigint"];function lW(e){if(e=e?.primaryStore||e,!e)throw new Error(aW.ENV_REQUIRED)}a(lW,"validateEnv");function uW(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(uW,"stringifyData");function _W(e){return e instanceof Date?e.valueOf():e}a(_W,"convertKeyValueToWrite");function dW(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(dW,"getIndexedValues");var Zd=0,uI=0;function _I(){uI=Date.now()-performance.now()}a(_I,"adjustStartTime");_I();var fW=6e4;setInterval(_I,fW).unref();function EW(){let e=performance.now()+uI;return e>Zd?(Zd=e,e):(Zd+=488e-6,Zd)}a(EW,"getNextMonotonicTime");dI.exports={validateEnv:lW,stringifyData:uW,convertKeyValueToWrite:_W,getNextMonotonicTime:EW,getIndexedValues:dW}});var fI,Zn,lS,jl=Oe(()=>{fI=require("events"),Zn=class extends fI.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new lS;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)}},lS=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,Rr=Oe(()=>{EI=require("../index"),ct={};(0,EI._assignPackageExport)("server",ct)});var dS={};Fe(dS,{loadGQLSchema:()=>mW,start:()=>_S,startOnMainThread:()=>pW});function _S({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 g=S.name.value,R=[],A={table:null,database:null,properties:R};f.set(g,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=g),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,R.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=g,g==="Query"&&(h=A)}function m(S){let g=f.get(S.type);g?(Object.defineProperty(S,"properties",{value:g.properties}),Object.defineProperty(S,"definition",{value:g})):S.type==="array"?m(S.elements):hW.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 g of S.properties)m(g);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,uS.dirname)(n),S.tableClass):i.set((0,uS.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var uS,hI,hW,pW,mW,pI=Oe(()=>{uS=require("path");ge();hI=B(et()),hW=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(_S,"start");pW=_S,mW=_S({ensureTable:Et}).handleFile});async function ef(e){return SW?(zl||(zl=TW(RW)),(await(await zl).import(e)).namespace):import(e)}async function TW(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),zl=new Compartment({console,Math,Date,fetch:gW,...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:Xr,databases:lt})}};let n=await(0,mI.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),zl}function gW(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 RW(){return{Resource:Jt,tables:Xr}}var mI,SI,SW,zl,fS=Oe(()=>{es();ge();mI=require("fs/promises"),SI=require("path"),SW=!1;a(ef,"secureImport");a(TW,"getCompartment");a(gW,"secureOnlyFetch");a(RW,"getGlobalVars")});var hS={};Fe(hS,{handleFile:()=>AW});async function AW(e,t,r,n){let s=new Map,i=(0,TI.pathToFileURL)(r).toString(),o=await ef(i);l(o.default)&&n.set((0,ES.dirname)(t),o.default),c(o,(0,ES.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,ES,gI=Oe(()=>{TI=require("url");fS();ES=require("path");a(AW,"handleFile")});var mS={};Fe(mS,{start:()=>OW});function OW({resources:e}){e.set("login",pS),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var pS,RI=Oe(()=>{es();a(OW,"start");pS=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:()=>TS,streamAsJSON:()=>Jl,stringify:()=>Qo});function Jl(e){return new SS({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 TS(e){return yW.test(e)?bW.parse(e):JSON.parse(e)}var bI,NI,bW,NW,yI,SS,yW,gS=Oe(()=>{bI=require("stream"),NI=B(require("json-bigint-fixes")),bW=(0,NI.default)({useNativeBigInt:!0}),NW=1e4,yI={};BigInt.prototype.toJSON=function(){throw yI};a(Jl,"streamAsJSON");SS=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>NW?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");yW=/[[,:]\s*-?\d{16,}/;a(TS,"parse")});var FI=T((spe,xI)=>{"use strict";var RS=require("recursive-iterator"),IW=require("alasql"),AS=require("clone"),CI=K(),{handleHDBError:DI,hdb_errors:wW}=oe(),{HDB_ERROR_MSGS:LI,HTTP_STATUS_CODES:PI}=wW,{getDatabases:CW}=(ge(),ie(ke)),DW=["DISTINCT_ARRAY"],MI=Symbol("validateTables"),OS=Symbol("validateTable"),npe=Symbol("getAllColumns"),UI=Symbol("validateAllColumns"),tf=Symbol("findColumn"),vI=Symbol("validateOrderBy"),Xl=Symbol("validateSegment"),bS=Symbol("validateColumn"),BI=Symbol("setColumnsForTable"),HI=Symbol("checkColumnsForAsterisk"),GI=Symbol("validateGroupBy"),qI=Symbol("hasColumns"),NS=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[OS](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[OS](t.table)})}}[qI](){let t=!1,r=new RS(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[OS](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=CW();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=AS(s);i.table=AS(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 RS(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 IW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[UI](){this[Xl](this.statement.columns,!1),this[Xl](this.statement.joins,!1),this[Xl](this.statement.where,!1),this[GI](this.statement.group,!1),this[Xl](this.statement.order,!0)}[Xl](t,r){if(!t)return;let n=new RS(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[bS](i)));return s}[GI](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&DW.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=AS(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[bS](t)}[bS](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=NS});var $I=T((ope,kI)=>{"use strict";var yS=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=yS});var YI=T((cpe,VI)=>{"use strict";var IS=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};VI.exports=IS});var jI={};Fe(jI,{HAS_EXPIRATION:()=>US,LAST_TIMESTAMP_PLACEHOLDER:()=>tu,LOCAL_TIMESTAMP:()=>LW,METADATA:()=>Zl,NO_TIMESTAMP:()=>CS,PENDING_LOCAL_TIME:()=>vS,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>MS,RecordEncoder:()=>PS,TIMESTAMP_ASSIGN_LAST:()=>MW,TIMESTAMP_ASSIGN_NEW:()=>WI,TIMESTAMP_ASSIGN_PREVIOUS:()=>QI,TIMESTAMP_PLACEHOLDER:()=>rf,TIMESTAMP_RECORD_PREVIOUS:()=>DS,getUpdateRecord:()=>BS,handleLocalTimeForGets:()=>af});function vW(){return eu[0]=eu[0]^64,PW.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?.[Zl];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?.[Zl]>=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[Zl];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 BS(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",f,E){if(f||l==null?uc=i?.localTime?DS|QI:CS:uc=l?i?.localTime?DS|16384:WI|16384:CS,u>0&&(c|=US),sf=c,LS=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 g=_?.user?.username;if(E&&(nf=e.encoder.encode(E)),f&&i?.localTime){let R=i?.localTime,A=r.get(R);if(A){let P=kt(A).previousLocalTime;return r.put(R,of(o,t,n,P,g,d,nf),{ifVersion:m}),S}}r.put(tu,of(o,t,n,i?.localTime?1:0,g,d,nf),{append:d!=="invalidate",instructedWrite:!0,ifVersion:m})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var KI,wS,rf,tu,MS,LW,Zl,eu,PW,CS,WI,MW,QI,DS,US,vS,UW,nf,uc,sf,LS,PS,jo,ru=Oe(()=>{KI=require("msgpackr");Zi();wS=B(x()),rf=new Uint8Array([1,1,1,1,4,64,0,0]),tu=new Uint8Array([1,1,1,1,1,0,0,0]),MS=new Uint8Array([1,1,1,1,3,64,0,0]),LW=Symbol("local-timestamp"),Zl=Symbol("metadata"),eu=new Uint8Array(8),PW=new DataView(eu.buffer,0,8),CS=0,WI=0,MW=1,QI=3,DS=4,US=16,vS=1,uc=0,sf=-1,LS=0,PS=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=LS;c>=0&&(i+=2,sf=-1,l&&(i+=8,LS=0));let _=UW=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(eu,0,c),c+=8;else for(let d=0;d<8;d++)eu[d]=t[c++];l=vW(),i=t[c]}let _;i<32&&(o=i,c+=2,o&US&&(_=(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,[Zl]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(vW,"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?(wS.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):wS.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(BS,"getUpdateRecord")});var nu=T((fpe,JI)=>{"use strict";var zI=X(),BW=D(),{RecordEncoder:HW}=(ru(),ie(jI)),dpe=require("fs");zI.initSync();var GW=zI.get(BW.CONFIG_PARAMS.STORAGE_CACHING)!==!1,HS=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=GW&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:HW})}};JI.exports=HS});var su=T((hpe,XI)=>{"use strict";var Zr=X(),Dn=D();Zr.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=Zr.get(Dn.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Zr.get(Dn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Zr.get(Dn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Zr.get(Dn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Zr.get(Dn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Zr.get(Dn.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Zr.get(Dn.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Zr.get(Dn.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Zr.get(Dn.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Zr.get(Dn.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Zr.get(Dn.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Zr.get(Dn.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};XI.exports=cf;cf.MAX_DBS=1e4});var Ve=T((mpe,cw)=>{"use strict";var qS=require("lmdb"),ts=require("fs-extra"),en=require("path"),lf=gr(),tw=x(),Ar=Jr().LMDB_ERRORS_ENUM,uf=YI(),xS=nu(),rw=su(),eo=at(),ZI=D(),{table:qW,resetDatabases:xW}=(ge(),ie(ke)),ew=X(),rs=eo.INTERNAL_DBIS_NAME,nw=eo.DBI_DEFINITION_NAME,FW="data.mdb",kW="lock.mdb",iu=".mdb",$W="-lock",GS=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Ln(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 qS.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(Ar.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Ar.ENV_NAME_REQUIRED)}a(_f,"pathEnvNameValidation");async function FS(e,t,r=!0){try{await ts.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Ar.INVALID_BASE_PATH):n}try{let n=en.join(e,t+iu);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(en.join(e,t,FW),ts.constants.R_OK|ts.constants.F_OK),en.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Ar.INVALID_ENVIRONMENT)}else throw new Error(Ar.INVALID_ENVIRONMENT);throw n}}a(FS,"validateEnvironmentPath");function df(e,t){if(lf.validateEnv(e),t===void 0)throw new Error(Ar.DBI_NAME_REQUIRED)}a(df,"validateEnvDBIName");async function VW(e,t,r=!1,n=!1){_f(e,t);let s=en.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 FS(e,t,n),sw(e,t,r)}catch(o){if(o.message===Ar.INVALID_ENVIRONMENT){let c=en.join(e,t);await ts.mkdirp(n?c:e);let l=new rw(n?c:c+iu,!1),_=qS.open(l);_.dbis=Object.create(null);let u=new xS(!1);_.openDB(rs,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=kS(e,t,r);return _[eo.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(VW,"createEnvironment");async function YW(e,t,r,n=!0){_f(e,t),t=t.toString();let s=en.join(e,t);return qW({table:t,database:en.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(YW,"copyEnvironment");async function sw(e,t,r=!1){_f(e,t),t=t.toString();let n=kS(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 FS(e,t),i=en.join(e,t+iu),o=s!=i,c=new rw(s,o),l=qS.open(c);l.dbis=Object.create(null);let _=ow(l);for(let u=0;u<_.length;u++)Ln(l,_[u]);return l[eo.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(sw,"openEnvironment");async function KW(e,t,r=!1){_f(e,t),t=t.toString();let n=en.join(e,t+iu),s=await FS(e,t);if(global.lmdb_map!==void 0){let i=kS(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+$W:en.join(en.dirname(s),kW))}a(KW,"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 kS(e,t,r=!1){let s=`${en.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(kS,"getCachedEnvironmentName");function WW(e){lf.validateEnv(e);let t=Object.create(null),r=Ln(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(WW,"listDBIDefinitions");function ow(e){lf.validateEnv(e);let t=[],r=Ln(e,rs);for(let{key:n}of r.getRange({start:!1}))n!==rs&&t.push(n);return t}a(ow,"listDBIs");function QW(e,t){let n=Ln(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(QW,"getDBIDefinition");function aw(e,t,r,n=!r){if(df(e,t),t=t.toString(),t===rs)throw new Error(Ar.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ln(e,t)}catch(s){if(s.message===Ar.DBI_DOES_NOT_EXIST){let i=new xS(r,n===!0),o=e.openDB(t,i),c=new uf(r===!0,n);return o[nw]=c,Ln(e,rs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(aw,"createDBI");function Ln(e,t){if(df(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==rs?r=QW(e,t):r=new uf,r===void 0)throw new Error(Ar.DBI_DOES_NOT_EXIST);let n;try{let s=new xS(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(Ar.DBI_DOES_NOT_EXIST):s}return n[nw]=r,e.dbis[t]=n,n}a(Ln,"openDBI");function jW(e,t){df(e,t),t=t.toString();let r=Ln(e,t),n=r.getStats();return r[eo.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(jW,"statDBI");async function zW(e,t){try{let r=en.join(e,t+iu);return(await ts.stat(r)).size}catch{throw new Error(Ar.INVALID_ENVIRONMENT)}}a(zW,"environmentDataSize");function JW(e,t){if(df(e,t),t=t.toString(),t===rs)throw new Error(Ar.CANNOT_DROP_INTERNAL_DBIS_NAME);Ln(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ln(e,rs).removeSync(t)}a(JW,"dropDBI");function XW(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Ln(e,i)}catch(o){if(o.message===Ar.DBI_DOES_NOT_EXIST)aw(e,i,i!==t,i===t),n=!0;else throw o}}n&&xW()}a(XW,"initializeDBIs");cw.exports={openDBI:Ln,openEnvironment:sw,createEnvironment:VW,listDBIs:ow,listDBIDefinitions:WW,createDBI:aw,dropDBI:JW,statDBI:jW,deleteEnvironment:KW,initializeDBIs:XW,TransactionCursor:GS,environmentDataSize:zW,copyEnvironment:YW,closeEnvironment:iw}});var uw=T((Tpe,lw)=>{"use strict";var $S=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=$S});var dw=T((Rpe,_w)=>{"use strict";var VS=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=VS});var Ew=T((Ope,fw)=>{"use strict";var YS=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=YS});var Jo=T((wpe,mw)=>{"use strict";var ZW=Ve(),eQ=uw(),tQ=dw(),rQ=Ew(),ys=gr(),ou=Jr().LMDB_ERRORS_ENUM,nQ=at(),ai=D(),sQ=K(),iQ=require("uuid"),Npe=require("lmdb"),{handleHDBError:oQ,hdb_errors:aQ}=oe(),{OVERFLOW_MARKER:ype,MAX_SEARCH_KEY_LENGTH:Ipe}=nQ,hw=X();hw.initSync();var ff=hw.get(ai.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),KS=ai.TIME_STAMP_NAMES_ENUM.CREATED_TIME,zo=ai.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function cQ(e,t,r,n,s=ys.getNextMonotonicTime()){zS(e,t,r,n),WS(e,t,r);let i=new eQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];pw(_,!0,s);let u=lQ(e,t,r,_),d=_[t];o.push(u),c.push(d)}return QS(o,c,n,i,s)}a(cQ,"insertRecords");function lQ(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(lQ,"insertRecord");function uQ(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(uQ,"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[KS]))&&(e[KS]=r||ys.getNextMonotonicTime()):delete e[KS]}a(pw,"setTimestamps");function WS(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),ZW.initializeDBIs(e,t,r)}a(WS,"initializeTransaction");async function _Q(e,t,r,n,s=ys.getNextMonotonicTime()){zS(e,t,r,n),WS(e,t,r);let i=new tQ,o=[],c=[],l=[];for(let _=0;_<n.length;_++){let u=n[_],d=u[t],f;try{f=jS(e,t,u,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),l.push(d)}return QS(c,l,n,i,s,o)}a(_Q,"updateRecords");async function dQ(e,t,r,n,s=ys.getNextMonotonicTime()){try{zS(e,t,r,n)}catch(l){throw oQ(l,l.message,aQ.HTTP_STATUS_CODES.BAD_REQUEST)}WS(e,t,r);let i=new rQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l],u;sQ.isEmpty(_[t])?(u=iQ.v4(),_[t]=u):u=_[t];let d=jS(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return QS(o,c,n,i,s)}a(dQ,"upsertRecords");async function QS(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(),uQ(r,i),n}a(QS,"finalizeWrite");function jS(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 g=_[h];if(typeof m=="function"){let A=m([[_]]);Array.isArray(A)&&(m=A[0][ai.FUNC_VAL],r[h]=m)}if(m===g)continue;let R=ys.getIndexedValues(g);if(R){ff&&S.prefetch(R.map(A=>({key:A,value:n})),Ef);for(let A=0,P=R.length;A<P;A++)S.remove(R[A],n)}if(R=ys.getIndexedValues(m),R){ff&&S.prefetch(R.map(A=>({key:A,value:n})),Ef);for(let A=0,P=R.length;A<P;A++)S.put(R[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:jS(e,t,r,n,s,i,o))}a(jS,"updateUpsertRecord");function fQ(e,t,r){if(ys.validateEnv(e),t===void 0)throw new Error(ou.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ou.WRITE_ATTRIBUTES_REQUIRED):new Error(ou.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(fQ,"validateBasic");function zS(e,t,r,n){if(fQ(e,t,r),!Array.isArray(n))throw n===void 0?new Error(ou.RECORDS_REQUIRED):new Error(ou.RECORDS_MUST_BE_ARRAY)}a(zS,"validateWrite");function Ef(){}a(Ef,"noop");mw.exports={insertRecords:cQ,updateRecords:_Q,upsertRecords:dQ}});var ci=T((Dpe,EQ)=>{EQ.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((Lpe,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"}},hQ=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(),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()),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()).required();function SQ(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(SQ,"checkValidTable");function TQ(e,t){return Tw.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(TQ,"validateSchemaExists");function gQ(e,t){let r=t.state.ancestors[0].schema;return Tw.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(gQ,"validateTableExists");function RQ(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(RQ,"validateSchemaName");gw.exports={common_validators:to,schema_regex:_c,hdb_schema_table:hQ,validateSchemaExists:TQ,validateTableExists:gQ,validateSchemaName:RQ,checkValidTable:SQ,hdb_database:pQ,hdb_table:mQ}});var tt=T((Mpe,Rw)=>{"use strict";var Or=require("validate.js");Or.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Or.validators.type.checks[t](e)?null:` must be a '${t}' value`};Or.validators.type.checks={Object:function(e){return Or.isObject(e)&&!Or.isArray(e)},Array:Or.isArray,Integer:Or.isInteger,Number:Or.isNumber,String:Or.isString,Date:Or.isDate,Boolean:function(e){return typeof e=="boolean"}};Or.validators.hasValidFileExt=function(e,t){return Or.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:AQ,validateObjectAsync:OQ,validateBySchema:bQ};function AQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Or(e,t,{format:"flat"});return r?new Error(r):null}a(AQ,"validateObject");async function OQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Or.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(OQ,"validateObjectAsync");function bQ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(bQ,"validateBySchema")});var hf=T((vpe,Aw)=>{var{common_validators:Cs}=ws(),cu=tt(),au="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 lu(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(lu,"makeAttributesStrings");function NQ(e){return e=lu(e),At.table.presence=!1,At.attribute.presence=!1,At.hash_attribute.presence=!1,cu.validateObject(e,At)}a(NQ,"schema_object");function yQ(e){return e=lu(e),At.table.presence={message:au},At.attribute.presence=!1,At.hash_attribute.presence=!1,cu.validateObject(e,At)}a(yQ,"table_object");function IQ(e){return e=lu(e),At.table.presence={message:au},At.attribute.presence=!1,cu.validateObject(e,At)}a(IQ,"create_table_object");function wQ(e){return e=lu(e),At.table.presence={message:au},At.attribute.presence={message:au},At.hash_attribute.presence=!1,cu.validateObject(e,At)}a(wQ,"attribute_object");function CQ(e){return e=lu(e),At.table.presence={message:au},At.attribute.presence=!1,At.hash_attribute.presence=!1,cu.validateObject(e,At)}a(CQ,"describe_table");function DQ(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(DQ,"validateTableResidence");Aw.exports={schema_object:NQ,create_table_object:IQ,table_object:yQ,attribute_object:wQ,describe_table:CQ,validateTableResidence:DQ}});var bw=T((Hpe,Ow)=>{"use strict";var LQ=require("uuid"),JS=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||LQ.v4(),this.schema_table=`${this.schema}.${this.table}`}};Ow.exports=JS});var pf=T((qpe,Nw)=>{"use strict";var PQ=bw(),XS=class extends PQ{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=XS});var Iw=T((Fpe,yw)=>{"use strict";yw.exports=UQ;var MQ="inserted";function UQ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===MQ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(UQ,"returnObject")});var mf=T(($pe,Pw)=>{"use strict";var vQ=D(),ZS=Ve(),BQ=Jo(),{getSystemSchemaPath:HQ,getSchemaPath:GQ}=je(),qQ=ci(),xQ=hf(),FQ=pf(),kQ=Iw(),{handleHDBError:ww,hdb_errors:Dw}=oe(),Cw=K(),{HTTP_STATUS_CODES:$Q}=Dw,eT=qQ.hdb_attribute,Lw=[];for(let e=0;e<eT.attributes.length;e++)Lw.push(eT.attributes[e].attribute);var VQ="inserted";Pw.exports=YQ;async function YQ(e){let t=xQ.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,$Q.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 FQ(e.schema,e.table,e.attribute,e.id);try{let i=await ZS.openEnvironment(GQ(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}`);ZS.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await ZS.openEnvironment(HQ(),vQ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await BQ.insertRecords(o,eT.hash_attribute,Lw,[s]);return kQ(VQ,c,{records:[s]},l)}catch(i){throw i}}a(YQ,"lmdbCreateAttribute")});var rT=T((Ype,Uw)=>{var{hdb_table:KQ,hdb_database:Mw}=ws(),WQ=tt(),tT=require("joi"),QQ={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||QQ[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"),zQ=tT.object({database:Mw,schema:Mw,table:KQ,records:tT.array().items(tT.object().custom(jQ)).required()});Uw.exports=function(e){return WQ.validateBySchema(e,zQ)}});var uu=T((Qpe,Bw)=>{"use strict";var li=K(),vw=x(),Wpe=rT(),{getDatabases:JQ}=(ge(),ie(ke)),{ClientError:Xo}=oe();Bw.exports=XQ;function XQ(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=JQ()[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(XQ,"insertUpdateValidate")});var _u=T((zpe,Hw)=>{"use strict";var ZQ=D().OPERATIONS_ENUM,nT=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=ZQ.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Hw.exports=nT});var du=T((Zpe,qw)=>{"use strict";var Xpe=_u(),Sf=D(),sT=K(),Gw=x(),ej=require("uuid"),{handleHDBError:Tf,hdb_errors:tj}=oe(),{HDB_ERROR_MSGS:gf,HTTP_STATUS_CODES:Rf}=tj;qw.exports=rj;function rj(e,t,r){for(let s=0;s<t.length;s++)nj(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];sj(i,r,e.operation)}}a(rj,"processRows");function nj(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(sT.isEmptyOrZeroLength(e)||sT.isEmpty(e.trim()))throw Tf(new Error,gf.ATTR_NAME_NULLISH_ERR,Rf.BAD_REQUEST,void 0,void 0,!0)}a(nj,"validateAttribute");function sj(e,t,r){if(!e.hasOwnProperty(t)||sT.isEmptyOrZeroLength(e[t])){if(r===Sf.OPERATIONS_ENUM.INSERT||r===Sf.OPERATIONS_ENUM.UPSERT){e[t]=ej.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(sj,"validateHash")});var Fw=T((tme,xw)=>{"use strict";var iT=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};xw.exports=iT});var Vw=T((nme,$w)=>{"use strict";var oT=Ve(),ij=x(),kw=Jr().LMDB_ERRORS_ENUM;$w.exports=oj;async function oj(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 oT.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 oT.closeEnvironment(global.lmdb_map[n]),await oT.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){ij.error(t)}}a(oj,"cleanLMDBMap")});var ui=T((ime,Qw)=>{"use strict";var fu=require("crypto"),aj=X(),{CONFIG_PARAMS:cj}=D(),Kw="aes-256-cbc",lj=32,uj=16,aT=64,Ww=32,_j=aT+Ww,Yw=new Map;Qw.exports={encrypt:dj,decrypt:fj,createNatsTableStreamName:Ej};function dj(e){let t=fu.randomBytes(lj),r=fu.randomBytes(uj),n=fu.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(dj,"encrypt");function fj(e){let t=e.substr(0,aT),r=e.substr(aT,Ww),n=e.substr(_j,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=fu.createDecipheriv(Kw,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(fj,"decrypt");function Ej(e,t){let r=aj.get(cj.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=Yw.get(r);return n||(n=fu.createHash("md5").update(r).digest("hex"),Yw.set(r,n)),n}a(Ej,"createNatsTableStreamName")});var _i=T((cme,zw)=>{"use strict";var ame=sr(),Af=x(),jw=hf(),hj=ui(),Of=K(),{handleHDBError:bf,hdb_errors:pj}=oe(),{HDB_ERROR_MSGS:Nf,HTTP_STATUS_CODES:cT}=pj,mj=X();mj.initSync();var{getDatabases:lT}=(ge(),ie(ke));zw.exports={describeAll:Sj,describeTable:yf,describeSchema:Tj};async function Sj(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=lT(),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(Sj,"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=lT()[r];if(!c)throw bf(new Error,Nf.SCHEMA_NOT_FOUND(e.schema),cT.NOT_FOUND);let l=c[n];if(!l)throw bf(new Error,Nf.TABLE_NOT_FOUND(e.schema,e.table),cT.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=hj.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 Tj(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=lT()[n];if(!i)throw bf(new Error,Nf.SCHEMA_NOT_FOUND(e.schema),cT.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(Tj,"describeSchema")});var Pn=T((dme,tC)=>{var gj=ci(),{callbackify:Xw,promisify:Rj}=require("util"),{getDatabases:Zw}=(ge(),ie(ke));tC.exports={setSchemaDataToGlobal:Jw,getTableSchema:Aj,getSystemSchema:Oj,setSchemaDataToGlobalAsync:Rj(Jw)};var eC=_i(),ume=Xw(eC.describeAll),_me=Xw(eC.describeTable);function Jw(e){global.hdb_schema=Zw(),e&&e()}a(Jw,"setSchemaDataToGlobal");function Aj(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(Aj,"getTableSchema");function Oj(){return gj}a(Oj,"getSystemSchema")});var br=T((Eme,iC)=>{"use strict";var wf=rT(),Xt=K(),bj=require("util"),Cf=Mn(),Nj=Pn(),rC=x(),{handleHDBError:Zo,hdb_errors:yj}=oe(),{HTTP_STATUS_CODES:ea}=yj,Ij=bj.promisify(Nj.getTableSchema),wj="updated",nC="inserted",sC="upserted";iC.exports={insert:Dj,update:Lj,upsert:Pj,validation:Cj,flush:Mj};async function Cj(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 Ij(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(Cj,"validation");async function Dj(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(Dj,"insertData");async function Lj(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(wj,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(Lj,"updateData");async function Pj(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(Pj,"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 Mj(e){return Xt.transformReq(e),Cf.flush(e.schema,e.table)}a(Mj,"flush")});var _T=T((pme,cC)=>{var Uj=tt(),uT=require("joi"),{hdb_table:vj,hdb_database:oC}=ws(),aC={schema:oC,database:oC,table:vj},Bj={date:uT.date().iso().required()},Hj={timestamp:uT.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};cC.exports=function(e,t){let r=t==="timestamp"?{...aC,...Hj}:{...aC,...Bj},n=uT.object(r);return Uj.validateBySchema(e,n)}});var _C=T((mme,uC)=>{var Gj=tt(),dT=require("joi"),{hdb_table:qj,hdb_database:lC}=ws(),xj=dT.object({schema:lC,database:lC,table:qj,hash_values:dT.array().required(),ids:dT.array()});uC.exports=function(e){return Gj.validateBySchema(e,xj)}});var pT=T((Sme,dC)=>{"use strict";var fT=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}},ET=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}},hT=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};dC.exports={InsertObject:fT,NoSQLSeachObject:ET,DeleteResponseObject:hT}});var na=T((gme,mC)=>{"use strict";var EC=_T(),Fj=_C(),ta=K(),fC=require("moment"),hC=x(),{promisify:kj,callbackify:$j}=require("util"),ra=D(),Vj=Pn(),mT=kj(Vj.getTableSchema),ST=Mn(),{DeleteResponseObject:Yj}=pT(),{handleHDBError:ro,hdb_errors:Kj}=oe(),{HDB_ERROR_MSGS:Df,HTTP_STATUS_CODES:no}=Kj,Wj="records successfully deleted",Qj=$j(pC);mC.exports={delete:Qj,deleteRecord:pC,deleteFilesBefore:jj,deleteAuditLogsBefore:zj};async function jj(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 ST.deleteRecordsBefore(e);if(await mT(e.schema,e.table),hC.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(jj,"deleteFilesBefore");async function zj(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 ST.deleteAuditLogsBefore(e);return await mT(e.schema,e.table),hC.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(zj,"deleteAuditLogsBefore");async function pC(e){e.ids&&(e.hash_values=e.ids);let t=Fj(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 mT(e.schema,e.table);let n=await ST.deleteRecords(e);return ta.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Wj}`),n}catch(n){if(n.message===ra.SEARCH_NOT_FOUND_MESSAGE){let s=new Yj;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((Ame,gC)=>{var Jj=require("crypto"),SC=9;function Xj(e){let t=ez(SC),r=TC(e+t);return t+r}a(Xj,"createHash");function Zj(e,t){let r=e?.substr(0,SC),n=r+TC(t+r);return e===n}a(Zj,"validateHash");function ez(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(ez,"generateSalt");function TC(e){return Jj.createHash("md5").update(e).digest("hex")}a(TC,"md5");gC.exports={hash:Xj,validate:Zj}});var AC=T((bme,RC)=>{var TT=tt(),ir={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 tz(e){return ir.password.presence=!0,ir.username.presence=!0,ir.role.presence=!0,ir.active.presence=!0,TT.validateObject(e,ir)}a(tz,"addUserValidation");function rz(e){return ir.password.presence=!1,ir.username.presence=!0,ir.role.presence=!1,ir.active.presence=!1,TT.validateObject(e,ir)}a(rz,"alterUserValidation");function nz(e){return ir.password.presence=!1,ir.username.presence=!0,ir.role.presence=!1,ir.active.presence=!1,TT.validateObject(e,ir)}a(nz,"dropUserValidation");RC.exports={addUserValidation:tz,alterUserValidation:rz,dropUserValidation:nz}});var Xe=T((Ime,bC)=>{"use strict";var{platform:yme}=require("os"),sz="nats-server.zip",gT="nats-server",iz=process.platform==="win32"?`${gT}.exe`:gT,oz=/^[^\s.,*>]+$/,OC="__request__",az=a(e=>`${e}.${OC}`,"REQUEST_SUBJECT"),cz={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},lz={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},uz={HUB:"hub.pid",LEAF:"leaf.pid"},_z={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},dz={SUCCESS:"success",ERROR:"error"},fz={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Ez={TXN:"txn",MSGID:"msgid"},dc={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},hz={[dc.ERR]:1,[dc.WRN]:2,[dc.INF]:3,[dc.DBG]:4,[dc.TRC]:5},pz={debug:"-D",trace:"-DVV"};bC.exports={NATS_SERVER_ZIP:sz,NATS_SERVER_NAME:gT,NATS_BINARY_NAME:iz,PID_FILES:uz,NATS_CONFIG_FILES:lz,SERVER_SUFFIX:_z,NATS_TERM_CONSTRAINTS_RX:oz,REQUEST_SUFFIX:OC,UPDATE_REMOTE_RESPONSE_STATUSES:dz,CLUSTER_STATUS_STATUSES:fz,REQUEST_SUBJECT:az,SUBJECT_PREFIXES:Ez,MSG_HEADERS:cz,LOG_LEVELS:dc,LOG_LEVEL_FLAGS:pz,LOG_LEVEL_HIERARCHY:hz}});var RT=T((Cme,NC)=>{"use strict";var mz={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
- `)},OX="certificate.pem",bX="privateKey.pem",NX="ca.pem";yP.exports={CERTIFICATE_VALUES:AX,CERTIFICATE_PEM_NAME:OX,PRIVATEKEY_PEM_NAME:bX,CA_PEM_NAME:NX}});var Ng=g((cge,LP)=>{"use strict";var DP=require("fs-extra"),ce=require("joi"),yX=require("os"),{boolean:Ie,string:cr,number:nt,array:bg}=ce.types(),{totalmem:IP}=require("os"),oa=require("path"),IX=x(),_E=K(),age=Og(),wP=C(),wX=rt(),CP="log",CX="components",DX="Invalid logging.rotation.maxSize unit. Available units are G, M or K",LX="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",PX="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",MX="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",UX="rootPath config parameter is undefined",vX="clustering.enabled config parameter is undefined",aa=nt.min(0).required(),dE=bg.items({host:cr.required(),port:aa}).empty(null),Ms;LP.exports={configValidator:BX,routesValidator:kX,route_constraints:dE};function BX(e){if(Ms=e.rootPath,_E.isEmpty(Ms))throw UX;let t=Ie.required(),r=nt.min(0).max(1e3).empty(null).default(FX),n=cr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Cu),s=cr.optional().empty(null),i=cr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ce.string().empty(null).default(Cu),c=ce.custom(GX).empty(null).default(Cu),l=e.clustering?.enabled;if(_E.isEmpty(l))throw vX;let _;return l===!0?_=ce.object({enabled:t,hubServer:ce.object({cluster:ce.object({name:ce.required().empty(null),network:ce.object({port:aa,routes:dE}).required()}).required(),leafNodes:ce.object({network:ce.object({port:aa}).required()}).required(),network:ce.object({port:aa}).required()}).required(),leafServer:ce.object({network:ce.object({port:aa,routes:dE}).required(),streams:ce.object({maxAge:nt.min(120).allow(null).optional(),maxBytes:nt.min(1).allow(null).optional(),maxMsgs:nt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ce.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Ie.optional(),databaseLevel:Ie.optional(),tls:ce.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Ie.required(),verify:Ie.optional()}),user:cr.optional().empty(null)}).required():_=ce.object({enabled:t,tls:ce.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Ie.required()})}).required(),ce.object({authentication:ce.object({authorizeLocal:Ie,cacheTTL:nt.required(),enableSessions:Ie}),analytics:ce.object({aggregatePeriod:nt}),componentsRoot:n.optional(),clustering:_,localStudio:ce.object({enabled:t}).required(),logging:ce.object({auditAuthEvents:ce.object({logFailed:Ie,logSuccessful:Ie}),file:Ie.required(),level:ce.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ce.object({enabled:Ie.optional(),compress:Ie.optional(),interval:cr.custom(xX).optional().empty(null),maxSize:cr.custom(qX).optional().empty(null),path:cr.optional().empty(null).default(Cu)}).required(),root:n,stdStreams:Ie.required(),auditLog:Ie.required()}).required(),operationsApi:ce.object({network:ce.object({cors:Ie.optional(),corsAccessList:bg.optional(),headersTimeout:nt.min(1).optional(),keepAliveTimeout:nt.min(1).optional(),port:nt.optional().empty(null),domainSocket:ce.optional().empty("hdb/operations-server").default(Cu),securePort:nt.optional().empty(null),timeout:nt.min(1).optional()}).optional(),tls:ce.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:cr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ce.object({network:ce.object({port:aa,securePort:aa,mtls:ce.alternatives([Ie.optional(),ce.object({user:cr.optional(),certificateAuthority:s,required:Ie.optional()})])}).required(),webSocket:Ie.optional(),requireAuthentication:Ie.optional()}),http:ce.object({compressionThreshold:nt.optional(),cors:Ie.optional(),corsAccessList:bg.optional(),headersTimeout:nt.min(1).optional(),port:nt.min(0).optional().empty(null),securePort:nt.min(0).optional().empty(null),maxHeaderSize:nt.optional(),mtls:ce.alternatives([Ie.optional(),ce.object({user:cr.optional(),certificateAuthority:s,required:Ie.optional()})])}).required(),threads:ce.alternatives(r.optional(),ce.object({count:r.optional(),debug:ce.alternatives(Ie.optional(),ce.object({startingPort:nt.min(1).optional(),host:cr.optional(),waitForDebugger:Ie.optional()})),maxHeapMemory:nt.min(0).optional()})),storage:ce.object({writeAsync:Ie.required(),overlappingSync:Ie.optional(),caching:Ie.optional(),compression:ce.alternatives([Ie.optional(),ce.object({dictionary:cr.optional(),threshold:nt.optional()})]),compactOnStart:Ie.optional(),compactOnStartKeepBackup:Ie.optional(),noReadAhead:Ie.optional(),path:c,prefetchWrites:Ie.optional(),maxFreeSpaceToLoad:nt.optional(),maxFreeSpaceToRetain:nt.optional()}).required(),ignoreScripts:Ie.optional(),tls:ce.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:cr.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(BX,"configValidator");function HX(e){return DP.existsSync(e)?null:`Specified path ${e} does not exist.`}a(HX,"doesPathExist");function GX(e,t){ce.assert(e,cr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=HX(e);if(r)return t.message(r)}a(GX,"validatePath");function qX(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(DX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(PX):e}a(qX,"validateRotationMaxSize");function xX(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(LX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(MX):e}a(xX,"validateRotationInterval");function FX(e,t){let r=t.state.path.join("."),n=yX.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||IP();return i=Math.round(Math.min(i,IP())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),IX.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(FX,"setDefaultThreads");function Cu(e,t){let r=t.state.path.join(".");if(!_E.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(_E.isEmpty(Ms))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return oa.join(Ms,CX);case"logging.root":return oa.join(Ms,CP);case"clustering.leafServer.streams.path":return oa.join(Ms,"clustering","leaf");case"storage.path":let n=oa.join(Ms,wP.LEGACY_DATABASES_DIR_NAME);return DP.existsSync(n)?n:oa.join(Ms,wP.DATABASES_DIR_NAME);case"logging.rotation.path":return oa.join(Ms,CP);case"operationsApi.network.domainSocket":return r==null?null:oa.join(Ms,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Cu,"setDefaultRoot");function kX(e){let t=ce.object({routes:dE});return wX.validateBySchema({routes:e},t)}a(kX,"routesValidator")});var lt=g((_ge,xP)=>{"use strict";var an=C(),$t=K(),vt=x(),{configValidator:$X,routesValidator:PP}=Ng(),Lr=require("fs-extra"),VX=require("yaml"),os=require("path"),YX=require("is-number"),UP=require("properties-reader"),KX=require("lodash"),{handleHDBError:WX}=oe(),{HTTP_STATUS_CODES:QX,HDB_ERROR_MSGS:fE}=zr(),uge=require("minimist"),{server:jX}=(Rr(),se(ko)),{DATABASES_PARAM_CONFIG:Du,CONFIG_PARAMS:on,CONFIG_PARAM_MAP:as}=an,zX="Unable to get config value because config is uninitialized",JX="Config successfully initialized",XX="Error backing up config file",ZX="Empty parameter sent to getConfigValue",vP=os.join(an.PACKAGE_ROOT,"config","yaml",an.HDB_DEFAULT_CONFIG_FILE),eZ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",MP={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"},EE,Bt,hE;xP.exports={createConfigFile:tZ,getDefaultConfig:rZ,getConfigValue:HP,initConfig:Ig,flattenConfig:Oc,updateConfigValue:GP,updateConfigObject:sZ,getConfiguration:aZ,setConfiguration:cZ,readConfigFile:Cg,getClusteringRoutes:lZ,initOldConfig:qP,getConfigFromFile:uZ,getConfigFilePath:ca,addConfig:_Z,deleteConfigFromFile:dZ,getConfigObj:fZ};function tZ(e){let t=ro(vP);EE=Oc(t.toJSON());let r;for(let o in e){let c=as[o.toLowerCase()];if(c===on.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let l=c.split("_"),_=yg(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...l],_)}catch(u){vt.error(u)}}}r&&BP(t,r),wg(t);let n=t.toJSON();Bt=Oc(n);let s=t.getIn(["rootPath"]),i=os.join(s,an.HDB_CONFIG_FILE);Lr.createFileSync(i),Lr.writeFileSync(i,String(t)),vt.trace(`Config file written to ${i}`)}a(tZ,"createConfigFile");function BP(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(Du.TABLES))for(let i in n[s][Du.TABLES])for(let o in n[s][Du.TABLES][i]){let c=n[s][Du.TABLES][i][o],l=[on.DATABASES,s,Du.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=[on.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){vt.error("Error parsing schemas CLI/env config arguments",n)}}a(BP,"setSchemasConfig");function rZ(e){if(EE===void 0){let r=ro(vP);EE=Oc(r.toJSON())}let t=as[e.toLowerCase()];if(t!==void 0)return EE[t.toLowerCase()]}a(rZ,"getDefaultConfig");function HP(e){if(e==null){vt.error(ZX);return}if(Bt===void 0){vt.trace(zX);return}let t=as[e.toLowerCase()];if(t!==void 0)return Bt[t.toLowerCase()]}a(HP,"getConfigValue");function ca(e=$t.getPropsFilePath()){let t=$t.getEnvCliRootPath();return t?os.join(t,an.HDB_CONFIG_FILE):UP(e).get(an.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ca,"getConfigFilePath");function Ig(e=!1){if(Bt===void 0||e){let t;if(!$t.noBootFile()){t=$t.getPropsFilePath();try{Lr.accessSync(t,Lr.constants.F_OK|Lr.constants.R_OK)}catch(i){throw vt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ca(t),n;if(r.includes("config/settings.js"))try{qP(r);return}catch(i){if(i.code!==an.NODE_ERROR_CODES.ENOENT)throw i}try{n=ro(r)}catch(i){if(i.code===an.NODE_ERROR_CODES.ENOENT){vt.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 vt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}nZ(n,r),wg(n);let s=n.toJSON();if(jX.config=s,Bt=Oc(s),Bt.logging_rotation_rotate)for(let i in MP)Bt[i]&&vt.error(`Config ${MP[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);vt.trace(JX)}}a(Ig,"initConfig");function nZ(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],os.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],os.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],os.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&&(vt.trace("Updating config file with missing config params"),Lr.writeFileSync(t,String(e)))}a(nZ,"checkForUpdatedConfig");function wg(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t?.http?.threads&&(t.threads=t?.http?.threads);let r=$X(t);if(r.error)throw fE.CONFIG_VALIDATION(r.error.message);typeof r.value.threads=="object"?e.setIn(["threads","count"],r.value.threads.count):e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],r.value?.operationsApi?.network?.domainSocket)}a(wg,"validateConfig");function sZ(e,t){Bt===void 0&&(Bt={});let r=as[e.toLowerCase()];if(r===void 0){vt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Bt[r.toLowerCase()]=t}a(sZ,"updateConfigObject");function GP(e,t,r=void 0,n=!1,s=!1,i=!1){Bt===void 0&&Ig();let o=HP(as.hdb_root),c=os.join(o,an.HDB_CONFIG_FILE),l=ro(c),_;if(r===void 0&&e.toLowerCase()===on.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=as[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=yg(f,t);l.setIn([...E],h)}else for(let f in r){let E=as[f.toLowerCase()];if(E===on.HTTP_SECUREPORT&&r[f]===Bt[on.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),E===on.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===Bt[on.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),E===on.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")&&(E=f),E!==void 0){let h=E.split("_"),m=an.LEGACY_CONFIG_PARAMS[f.toUpperCase()];m&&m.startsWith("customFunctions")&&l.hasIn(m.split("_"))&&(E=m,h=m.split("_"));let S=yg(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){vt.error(R)}}}_&&BP(l,_),wg(l);let u=l.getIn(["rootPath"]),d=os.join(u,an.HDB_CONFIG_FILE);n===!0&&iZ(c,u),Lr.writeFileSync(d,String(l)),s&&(Bt=Oc(l.toJSON())),vt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(GP,"updateConfigValue");function iZ(e,t){try{let r=os.join(t,"backup",`${an.HDB_CONFIG_FILE}.bak`);Lr.copySync(e,r),vt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){vt.error(XX),vt.error(r)}}a(iZ,"backupConfigFile");var oZ=["databases"];function Oc(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)),hE=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])&&!oZ.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;!on[l.toUpperCase()]&&as[l]&&(s[as[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Oc,"flattenConfig");function yg(e,t){if(e===on.CLUSTERING_NODENAME||e===on.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(YX(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(yg,"castConfigValue");function aZ(){let e=$t.getPropsFilePath(),t=ca(e);return ro(t).toJSON()}a(aZ,"getConfiguration");async function cZ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return GP(void 0,void 0,s,!0),eZ}catch(i){throw typeof i=="string"||i instanceof String?WX(i,i,QX.BAD_REQUEST,void 0,void 0,!0):i}}a(cZ,"setConfiguration");function Cg(){let e=$t.getPropsFilePath();try{Lr.accessSync(e,Lr.constants.F_OK|Lr.constants.R_OK)}catch(n){if(!$t.noBootFile())throw vt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ca(e);return ro(t).toJSON()}a(Cg,"readConfigFile");function ro(e){return VX.parseDocument(Lr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ro,"parseYamlDoc");function lZ(){let e=Cg(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=$t.isEmptyOrZeroLength(t)?[]:t;let r=PP(t);if(r)throw fE.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=$t.isEmptyOrZeroLength(n)?[]:n;let s=PP(n);if(s)throw fE.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 fE.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(lZ,"getClusteringRoutes");function qP(e){let t=UP(e);Bt={};for(let r in as){let n=t.get(r.toUpperCase());if($t.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=as[r].toLowerCase();s===on.LOGGING_ROOT?Bt[s]=os.dirname(n):Bt[s]=n}return Bt}a(qP,"initOldConfig");function uZ(e){let t=Cg();return KX.get(t,e.replaceAll("_","."))}a(uZ,"getConfigFromFile");async function _Z(e,t){let r=ro(ca());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Lr.writeFile(ca(),String(r))}a(_Z,"addConfig");function dZ(e){let t=ca($t.getPropsFilePath()),r=ro(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=os.join(n,an.HDB_CONFIG_FILE);Lr.writeFileSync(s,String(r))}a(dZ,"deleteConfigFromFile");function fZ(){return hE||(Ig(),hE)}a(fZ,"getConfigObj")});var kP=g((fge,FP)=>{"use strict";var pE=C(),mE=class{static{a(this,"BaseLicense")}constructor(t=0,r=pE.RAM_ALLOCATION_ENUM.DEFAULT,n=pE.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},Dg=class extends mE{static{a(this,"ExtendedLicense")}constructor(t=0,r=pE.RAM_ALLOCATION_ENUM.DEFAULT,n=pE.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};FP.exports={BaseLicense:mE,ExtendedLicense:Dg}});var la=g((hge,QP)=>{"use strict";var Nc=require("fs-extra"),VP=uE(),YP=require("crypto"),EZ=require("moment"),hZ=require("uuid").v4,lr=x(),Pg=require("path"),pZ=K(),no=C(),{totalmem:$P}=require("os"),mZ=kP().ExtendedLicense,bc="invalid license key format",SZ="061183",TZ="mofi25",gZ="aes-256-cbc",RZ=16,AZ=32,KP=X();KP.initSync();var Lg;QP.exports={validateLicense:WP,generateFingerPrint:bZ,licenseSearch:vg,getLicense:IZ,checkMemoryLimit:wZ};function Mg(){return Pg.join(KP.getHdbBasePath(),no.LICENSE_KEY_DIR_NAME,no.LICENSE_FILE_NAME)}a(Mg,"getLicenseDirPath");function OZ(){let e=Mg();return Pg.join(e,no.LICENSE_FILE_NAME)}a(OZ,"getLicenseFilePath");function Ug(){let e=Mg();return Pg.join(e,no.REG_KEY_FILE_NAME)}a(Ug,"getFingerPrintFilePath");async function bZ(){let e=Ug();try{return await Nc.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await NZ();throw lr.error(`Error writing fingerprint file to ${e}`),lr.error(t),new Error("There was an error generating the fingerprint")}}a(bZ,"generateFingerPrint");async function NZ(){let e=hZ(),t=VP.hash(e),r=Ug();try{await Nc.mkdirp(Mg()),await Nc.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(NZ,"writeFingerprint");function WP(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:no.RAM_ALLOCATION_ENUM.DEFAULT,version:no.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return lr.error("empty license key passed to validate."),r;let n=Ug(),s=!1;try{s=Nc.statSync(n)}catch(i){lr.error(i)}if(s){let i;try{i=Nc.readFileSync(n,"utf8")}catch{lr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(TZ),c=o[1];c=Buffer.concat([Buffer.from(c)],RZ);let l=Buffer.concat([Buffer.from(i)],AZ),_=YP.createDecipheriv(gZ,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=yZ(o[0],i);if(E)u=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(bc),lr.error(bc),new Error(bc)}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(bc),lr.error(bc),new Error(bc)}else r.exp_date=u;r.exp_date<EZ().valueOf()&&(r.valid_date=!1),VP.validate(o[1],`${SZ}${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(WP,"validateLicense");function yZ(e,t){try{let r=YP.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(yZ,"checkOldLicense");function vg(){let e=new mZ,t=[];try{t=Nc.readFileSync(OZ(),"utf-8").split(no.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(pZ.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=WP(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=no.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Lg=e,e}a(vg,"licenseSearch");async function IZ(){return Lg||await vg(),Lg}a(IZ,"getLicense");function wZ(){let e=vg().ram_allocation,t=process.constrainedMemory?.()||$P();if(t=Math.round(Math.min(t,$P())/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(wZ,"checkMemoryLimit")});var Pr=g((gge,uM)=>{"use strict";var XP="username is required",ZP="nothing to update, must supply active, role or password to update",eM="password cannot be an empty string",tM="If role is specified, it cannot be empty.",rM="active must be true or false";uM.exports={addUser:HZ,alterUser:GZ,dropUser:xZ,getSuperUser:VZ,userInfo:FZ,listUsers:TE,listUsersExternal:kZ,setUsersToGlobal:Ic,findAndValidateUser:cM,getClusterUser:YZ,USERNAME_REQUIRED:XP,ALTERUSER_NOTHING_TO_UPDATE:ZP,EMPTY_PASSWORD:eM,EMPTY_ROLE:tM,ACTIVE_BOOLEAN:rM};var nM=Dr(),CZ=ia(),Gg=uE(),sM=OP(),iM=or(),qg=ai(),cn=K(),oM=require("validate.js"),be=x(),{promisify:DZ}=require("util"),xg=_i(),jP=C(),zP=et(),LZ=lt(),mge=X(),Sge=la(),PZ=si(),{table:Tge}=(ge(),se(ke)),{handleHDBError:Us,hdb_errors:MZ}=oe(),{HTTP_STATUS_CODES:vs,AUTHENTICATION_ERROR_MSGS:Bg,HDB_ERROR_MSGS:yc}=MZ,{UserEventMsg:Fg}=ts(),Hg=require("lodash"),{server:kg}=(Rr(),se(ko)),UZ=x();kg.getUser=(e,t)=>cM(e,t,t!=null);var aM={username:!0,active:!0,role:!0,password:!0},JP=new Map,SE=iM.searchByValue,vZ=iM.searchByHash,BZ=DZ(CZ.delete);async function HZ(e){let t=oM.cleanAttributes(e,aM),r=sM.addUserValidation(t);if(r)throw Us(new Error,r.message,vs.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 SE(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 Us(new Error,yc.ROLE_NAME_NOT_FOUND(t.role),vs.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Us(new Error,yc.DUP_ROLES_FOUND(t.role),vs.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=xg.encrypt(t.password)),t.password=Gg.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await nM.insert(i)}catch(l){throw be.error("There was an error searching for a user."),be.error(l),l}be.debug(o);try{await Ic()}catch(l){throw be.error("Got an error setting users to global"),be.error(l),l}if(o.skipped_hashes.length===1)throw Us(new Error,yc.USER_ALREADY_EXISTS(t.username),vs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],qg.signalUserChange(new Fg(process.pid)),`${c.username} successfully added`}a(HZ,"addUser");async function GZ(e){let t=oM.cleanAttributes(e,aM);if(cn.isEmptyOrZeroLength(t.username))throw new Error(XP);if(cn.isEmptyOrZeroLength(t.password)&&cn.isEmptyOrZeroLength(t.role)&&cn.isEmptyOrZeroLength(t.active))throw new Error(ZP);if(!cn.isEmpty(t.password)&&cn.isEmptyOrZeroLength(t.password.trim()))throw new Error(eM);if(!cn.isEmpty(t.active)&&!cn.isBoolean(t.active))throw new Error(rM);let r=qZ(t.username);if(!cn.isEmpty(t.password)&&!cn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=xg.encrypt(t.password)),t.password=Gg.hash(t.password)),t.role==="")throw new Error(tM);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 SE(i)||[])}catch(c){throw be.error("Got an error searching for a role."),be.error(c),c}if(!o||o.length===0){let c=yc.ALTER_USER_ROLE_NOT_FOUND(t.role);throw be.error(c),Us(new Error,c,vs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=yc.ALTER_USER_DUP_ROLES(t.role);throw be.error(c),Us(new Error,c,vs.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 nM.update(n)}catch(i){throw be.error("Error during update."),be.error(i),i}try{await Ic()}catch(i){throw be.error("Got an error setting users to global"),be.error(i),i}return qg.signalUserChange(new Fg(process.pid)),s}a(GZ,"alterUser");function qZ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(qZ,"isClusterUser");async function xZ(e){try{let t=sM.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(cn.isEmpty(global.hdb_users.get(e.username)))throw Us(new Error,yc.USER_NOT_EXIST(e.username),vs.NOT_FOUND,void 0,void 0,!0);let n;try{n=await BZ(r)}catch(s){throw be.error("Got an error deleting a user."),be.error(s),s}be.debug(n);try{await Ic()}catch(s){throw be.error("Got an error setting users to global."),be.error(s),s}return qg.signalUserChange(new Fg(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(xZ,"dropUser");async function FZ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Hg.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await vZ(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(FZ,"userInfo");async function kZ(){let e;try{e=await TE()}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(kZ,"listUsersExternal");async function TE(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await SE(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]=Hg.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 SE(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=Hg.cloneDeep(o),o.role=r[o.role],$Z(o.role),i.set(o.username,o);return i}catch(e){throw be.error("got an error listing users"),be.error(e),cn.errorizeMessage(e)}return null}a(TE,"listUsers");function $Z(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(PZ)){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($Z,"appendSystemTablesToRole");async function Ic(){try{let e=await TE();global.hdb_users=e}catch(e){throw be.error(e),e}}a(Ic,"setUsersToGlobal");async function cM(e,t,r=!0){global.hdb_users||await Ic();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Us(new Error,Bg.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Us(new Error,Bg.USER_INACTIVE,vs.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(JP.get(t)===n.password)return s;if(Gg.validate(n.password,t))JP.set(t,n.password);else throw Us(new Error,Bg.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0)}return s}a(cM,"findAndValidateUser");async function VZ(){global.hdb_users||await Ic();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(VZ,"getSuperUser");async function YZ(){let e=await TE(),t=LZ.getConfigFromFile(jP.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!cn.isEmpty(r)&&r?.role?.role===jP.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=xg.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+zP.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+zP.SERVER_SUFFIX.ADMIN,r}a(YZ,"getClusterUser");var lM=[];kg.invalidateUser=function(e){for(let t of lM)try{t(e)}catch(r){UZ.error("Error invalidating user",r)}};kg.onInvalidatedUser=function(e){lM.push(e)}});var Pu=g((bge,EM)=>{"use strict";var ua=x(),ln=C(),KZ=Tw(),Age=Mn(),Oge=di(),WZ=Pr(),{validateEvent:_M}=ts(),Lu=Pn(),QZ=require("process"),{resetDatabases:jZ}=(ge(),se(ke)),zZ={[ln.ITC_EVENT_TYPES.SCHEMA]:JZ,[ln.ITC_EVENT_TYPES.USER]:fM};async function JZ(e){let t=_M(e);if(t){ua.error(t);return}ua.trace("ITC schemaHandler received schema event:",e),await KZ(e.message),await XZ(e.message)}a(JZ,"schemaHandler");async function XZ(e){try{Lu.resetReadTxn(ln.SYSTEM_SCHEMA_NAME,ln.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Lu.resetReadTxn(ln.SYSTEM_SCHEMA_NAME,ln.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Lu.resetReadTxn(ln.SYSTEM_SCHEMA_NAME,ln.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=jZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ua.error(t)}}a(XZ,"syncSchemaMetadata");var dM=[];async function fM(e){try{try{Lu.resetReadTxn(ln.SYSTEM_SCHEMA_NAME,ln.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Lu.resetReadTxn(ln.SYSTEM_SCHEMA_NAME,ln.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ua.warn(r)}let t=_M(e);if(t){ua.error(t);return}ua.trace(`ITC userHandler ${ln.HDB_ITC_CLIENT_PREFIX}${QZ.pid} received user event:`,e),await WZ.setUsersToGlobal();for(let r of dM)r()}catch(t){ua.error(t)}}a(fM,"userHandler");fM.addListener=function(e){dM.push(e)};EM.exports=zZ});var ts=g((Dge,pM)=>{"use strict";var yge=x(),$g=K(),ZZ=C(),{ITC_ERRORS:Mu}=zr(),{parentPort:Ige,threadId:e5,isMainThread:t5,workerData:wge}=require("worker_threads"),{onMessageFromWorkers:r5,broadcast:Cge,broadcastWithAcknowledgement:n5}=tt();pM.exports={sendItcEvent:s5,validateEvent:hM,SchemaEventMsg:i5,UserEventMsg:o5};var gE;r5(async(e,t)=>{gE=gE||Pu(),hM(e),gE[e.type]&&await gE[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function s5(e){return!t5&&e.message&&(e.message.originator=e5),n5(e)}a(s5,"sendItcEvent");function hM(e){if(typeof e!="object")return Mu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||$g.isEmpty(e.type))return Mu.MISSING_TYPE;if(!e.hasOwnProperty("message")||$g.isEmpty(e.message))return Mu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||$g.isEmpty(e.message.originator))return Mu.MISSING_ORIGIN;if(ZZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Mu.INVALID_EVENT(e.type)}a(hM,"validateEvent");function i5(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(i5,"SchemaEventMsg");function o5(e){this.originator=e}a(o5,"UserEventMsg")});var ai=g((Mge,gM)=>{"use strict";var mM=C(),Pge=K(),RE=x(),SM=tw(),wc,{sendItcEvent:TM}=ts();function a5(e){try{RE.trace("signalSchemaChange called with message:",e),wc=wc||Pu();let t=new SM(mM.ITC_EVENT_TYPES.SCHEMA,e);return wc.schema(t),TM(t)}catch(t){RE.error(t)}}a(a5,"signalSchemaChange");function c5(e){try{RE.trace("signalUserChange called with message:",e),wc=wc||Pu();let t=new SM(mM.ITC_EVENT_TYPES.USER,e);return wc.user(t),TM(t)}catch(t){RE.error(t)}}a(c5,"signalUserChange");gM.exports={signalSchemaChange:a5,signalUserChange:c5}});var Gu={};Fe(Gu,{addAnalyticsListener:()=>Hu,recordAction:()=>un,recordActionBinary:()=>Un,setAnalyticsEnabled:()=>l5});function l5(e){CM=e}function un(e,t,r,n,s){if(!CM)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=bE.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},bE.set(i,o)}AE||u5()}function Un(e,t,r,n,s){un(!!e,t,r,n,s)}function Hu(e){PM.push(e)}function u5(){AE=performance.now(),setTimeout(async()=>{let e=performance.now()-AE;AE=0;let t=[],r={time:Date.now(),period:e,threadId:_a.threadId,metrics:t};for(let[s,i]of bE){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 MM){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 UM()}let n=process.memoryUsage();t.push({metric:"memory",threadId:_a.threadId,byThread:!0,...n});for(let s of PM)s(t);bE=new Map,_a.parentPort?_a.parentPort.postMessage({type:LM,report:r}):HM({report:r})},DM).unref()}async function _5(e,t=6e4){let r=Kg(),n=vM(),s=new Promise(m=>{let S=performance.now();setImmediate(()=>{let R=performance.now();R-S>5e3&&(0,Uu.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,Uu.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:P,method:v,type:U,metric:k,count:H,total:j,distribution:z,threads:J,...Se}=A;H||(H=1);let ue=k+(P?"-"+P:"");v!==void 0&&(ue+="-"+v),U!==void 0&&(ue+="-"+U);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 UM()}for(let m of _){let{path:S,method:R,type:T,metric:A,count:P,total:v,distribution:U,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=[],P=0,v=0,U;for(let Ge of MM){let Ft=T*Ge;for(;P<Ft;)U=S[v++],P+=U.count,v===1&&P--;let Md=S[v>1?v-2:0];U||(U=S[0]),A.push(U.value-(U.value-Md.value)*(P-Ft)/U.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,OE.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,OE.getNextMonotonicTime)(),S={id:m,metric:"main-thread-utilization",idle:E-RM,active:h-AM,taskQueueLatency:await s,time:f,...process.memoryUsage()};n.primaryStore.put(m,S,{append:!0}).then(R=>{R||n.primaryStore.put(m,S)})}RM=E,AM=h}async function OM(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 bM||(bM=ht({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function vM(){return NM||(NM=ht({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function E5(){BM=!0;let e=(0,Bu.get)(Yg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await _5(DM,e),await OM(Kg(),d5),await OM(vM(),f5)},Math.min(e/2,2147483647)).unref()}function HM(e,t){let r=e.report;r.threadId=t?.threadId||_a.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(yM+=n.mean*n.count);r.totalBytesProcessed=yM,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(IM.get(t))}),IM.set(t,t.performance.eventLoopUtilization())),r.id=(0,OE.getNextMonotonicTime)(),Kg().primaryStore.put(r.id,r),BM||E5(),h5&&(GM=m5(r))}async function m5(e){if(await GM,!so){let r=(0,vu.dirname)((0,Uu.getLogFilePath)());try{so=await(0,Vg.open)((0,vu.join)(r,"analytics.log"),"r+")}catch{so=await(0,Vg.open)((0,vu.join)(r,"analytics.log"),"w+")}}let t=(await so.stat()).size;if(t>p5){let r=Buffer.alloc(t);await so.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await so.write(r,{position:0}),await so.truncate(r.length),t=r.length}await so.write(JSON.stringify(e)+`
9
- `,t)}var _a,wM,Uu,vu,Vg,OE,Bu,Yg,bE,CM,AE,DM,LM,PM,MM,RM,AM,UM,d5,f5,bM,NM,BM,yM,IM,h5,GM,so,p5,fi=Oe(()=>{_a=require("worker_threads"),wM=B(tt());ge();Uu=B(x()),vu=require("path"),Vg=require("fs/promises"),OE=B(Or()),Bu=B(X()),Yg=B(C());Rr();(0,Bu.initSync)();bE=new Map,CM=(0,Bu.get)(Yg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(l5,"setAnalyticsEnabled");a(un,"recordAction");at.recordAnalytics=un;a(Un,"recordActionBinary");AE=0,DM=1e3,LM="analytics-report",PM=[];a(Hu,"addAnalyticsListener");MM=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(u5,"sendAnalytics");a(_5,"aggregation");RM=0,AM=0,UM=a(()=>new Promise(setImmediate),"rest");a(OM,"cleanup");d5=36e5,f5=31536e6;a(Kg,"getRawAnalyticsTable");a(vM,"getAnalyticsTable");(0,wM.setChildListenerByType)(LM,HM);a(E5,"startScheduledTasks");yM=0,IM=new Map,h5=!1;a(HM,"recordAnalytics");p5=1e6;a(m5,"logAnalytics")});var qM={};Fe(qM,{Headers:()=>io,appendHeader:()=>Wg});function Wg(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 io,qu=Oe(()=>{io=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(Wg,"appendHeader")});var Jg={};Fe(Jg,{coerceType:()=>NE,makeTable:()=>wE,setServerUtilities:()=>y5,updateResource:()=>yE});function wE(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=[]),XI(i,l);let R=mS(i,n,l),T=0,A,P,v={},U=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&&(v=W);let z,J=[],Se=[],ue=1,Ee=2,Me={},Ge={},Ft=864e5,Md,Ud,qi,ny=!1,xm,Fm,wV=i.getRange({start:!1,end:!1}).constructor,CV=10,DV=6;h&&oy();class Xe 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($,D,G)=>{if($?.source!==M)return M[L](D,G,$)}}else return(M,$,D)=>{let G=[];for(let q of y){if(M?.source===q)break;G.push(q[L]($,D,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 D=M.value,G=M.table?ut[c][M.table]:Xe;if(c===ls.SYSTEM_SCHEMA_NAME&&(M.table===ls.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===ls.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(L=!0),M.id===void 0&&(M.id=D[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,$,Cc);switch(M.type){case"put":return q._writeUpdate(D,!0,Cc);case"patch":return q._writeUpdate(D,!1,Cc);case"delete":return q._writeDelete(Cc);case"publish":return q._writePublish(D,Cc);case"invalidate":return q.invalidate(Cc);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,fa.getWorkerIndex)()):(0,fa.getWorkerIndex)()===0,D=M&&$&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(D){let G;for await(let q of D)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&&(ht({table:s,database:c,attributes:te,origin:"cluster"}),Ku.signalSchemaChange(new Wu.SchemaEventMsg(process.pid,ls.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,Ku.signalUserChange(new Wu.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){Dl(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=Qn(O),y=L.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return km(p,O,{transaction:y},b,M=>{if(M?yE(N,M):N[fe]=null,O.onlyIfCached&&O.noCacheStore){if(!N.doesExist())throw new vn.ServerError("Entry is not cached",504)}else if(I?.ensureLoaded){let $=$m(p,M,O,N);if($)return L?.disregardReadTxn(),N[Qg]=!0,zg($,D=>(yE(N,D),N))}return N})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(p)),b}}return N}ensureLoaded(){let p=$m(this[Ue],this[_n],this[ye]);if(p)return this[Qg]=!0,zg(p,O=>{this[_n]=O,this[fe]=O.value,this[Vu]=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,Ym()}static enableAuditing(p=!0){h=p,p&&oy(),Xe.audit=p}static coerceId(p){return p===""?null:NE(p,v)}static async dropTable(){if(delete ut[c][s],c===o){for(let p of S)u.remove(Xe.tableName+"/"+p.name),r[p.name]?.drop();u.remove(Xe.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));Ku.signalSchemaChange(new Wu.SchemaEventMsg(process.pid,ls.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(p){if(typeof p=="string")return this.getProperty(p);if(this[Cn])return this.search(p);if(this[Ue]===null){if(p?.conditions)return this.search(p);let O=Xe.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[ye]?.returnNonexistent)return this}allowRead(p,O){let I=Bd(p);if(I?.read){if(I.isSuperUser)return!0;let N=I.attribute_permissions,b=O?.select;if(N?.length>0||ny&&b){if(O||(O={}),b){let L=N?.length>0&&jg(N,"read");O.select=b.map(y=>{let M=y.name||y;if(!L||L[M]){let $=qi[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&&!qi[L.attribute_name]).map(L=>L.attribute_name);return O}else return!0}}allowUpdate(p,O){let I=Bd(p);if(I?.update){let N=I.attribute_permissions;if(N?.length>0){let b=jg(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[Cn]){let I=Bd(p);if(I?.insert){let N=I.attribute_permissions;if(N?.length>0){let b=jg(N,"insert");for(let L in O)if(!b[L])return!1}else return!0}}else return this.allowUpdate(p,{})}allowDelete(p){return Bd(p)?.delete}update(p,O){if(!Qn(this[ye]))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[Ut]=p):(N=this[Ut],N&&(p=Object.assign(N,p)),this[Ut]=N=p)),this._writeUpdate(this[Ut],O),this}addTo(p,O){if(typeof O=="number")this[xu]===FM?this.set(p,(+this.getProperty(p)||0)+O):(this[xu]||this.update(),this.set(p,new ff(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[ye],I=this[Ue];Dl(I),Qn(this[ye]).addWrite({key:I,store:i,invalidated:!0,entry:this[_n],nodeName:this[ye]?.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[_n],b,Fu,h,this[ye],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,ku,null,null,0,null,!0)}return i.ifVersion(p,I,()=>{vd(p,O,null)}),h?R(p,null,b,I,ku,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,WM.operation(p,O)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,O,I){let N=this[ye],b=Qn(N),L=this[Ue];Dl(L);let y=this[_n];this[xu]=O?FM:O5;let M={key:L,store:i,entry:y,nodeName:N?.nodeName,validate:$=>{p||(p=this[Ut]),O||p&&_f(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=Yo(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,Yo(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,Yo(this)):null,commit:($,D,G)=>{if(G){if(N&&D?.version>(N.lastModified||0)&&(N.lastModified=D.version),this[_n]=D,D?.value?.[fe])throw new Error("Can not assign a record to a record, check for circular references");O||(this[fe]=D?.value??null)}this[Ut]=p,this[Vu]=$;let q=D?.value,ae=p;if(this[xu]=0,D?.version>=$)if(h){let le=D.localTime,$e=D.version;for(;ae&&(le>$||$e>=$&&le>0);){let re=l.get(le);if(!re)break;let Z=kt(re);if($e=Z.version,$e>$){if(Z.type==="patch"){let Ne=Z.getValue(i);ae=lf(ae,Ne)}else if(Z.type==="put"||Z.type==="delete")return}else if($e===$)return;le=Z.previousLocalTime}}else{if(O)return;ae=lf(ae,q)}let Te;if(O?Te=ae:(this[fe]=q,Te=O?ae:Yo(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),vd(L,q,Te);let Be=O?"put":"patch";R(L,Te,D,$,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[Cn]){for await(let O of this.search(p))(await Xe.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[fe]?this._writeDelete(p):!1}_writeDelete(p){let O=Qn(this[ye]),I=this[Ue];Dl(I);let N=this[ye];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),yE(this,L)),!(L?.version>b)&&(vd(this[Ue],M),st.trace("Write delete entry",I,b),h||m?(R(I,null,this[_n],b,0,h,this[ye],0,"delete"),h||Ym()):i.remove(this[Ue]))}}),!0}search(p){let O=this[ye],I=Qn(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 As=qe&&{},xi;for(let je of Z){if(je.conditions){je.conditions=y(je.conditions,je.operator);continue}let jt=je[0]??je.attribute,Nn=jt==null?v:ni(S,jt);if(Nn){if(qe){let Os=Xn(jt),zt=As[Os];zt?(zt.push(je),xi=!0):As[Os]=[je]}(Nn.type||DS[je.comparator])&&(je[1]===void 0?je.value=$(je.value,Nn):je[1]=$(je[1],Nn))}else if(jt!=null)throw(0,vn.handleHDBError)(new Error,`${jt} is not a defined attribute`,404)}if(p.enforceExecutionOrder)return Z;if(xi)for(let je in As){let jt=As[je],Nn=jt.length;if(Nn>1)for(let Os=0;Os<Nn;Os++){let zt=jt[Os];if(zt.comparator==="ge"||zt.comparator==="greater_than_equal")for(let Fi=0;Fi<Nn;Fi++){let tc=jt[Fi];(tc.comparator==="le"||tc.comparator==="less_than_equal")&&(zt.comparator="between",zt.value=[zt.value,tc.value],Z.splice(Z.indexOf(tc),1))}if(zt.comparator==="equals"||!zt.comparator){for(let Fi=0;Fi<Nn;Fi++)if(Fi!==Os){let tc=jt[Fi];Z.splice(Z.indexOf(tc),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,KM.sortBy)(Z,Tf(Xe)):Z}a(M,"orderConditions");function $(Z,Ne){return Array.isArray(Z)?Z.map(qe=>NE(qe,Ne)):NE(Z,Ne)}a($,"coerceTypedValues");let D=p.operator;(N.length>0||D)&&(N=y(N,D));let G=typeof p.sort=="object"&&p.sort,q;if(G&&D!=="or"){let Z=G.attribute;if(b=N.find(Ne=>Xn(Ne.attribute)===Xn(Z)),!b){if(!ni(S,Z))throw(0,vn.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,D),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:D,postOrdering:q,selectApplied:!!ae};let Te=I.useReadTxn(),te=LS(N,D,Xe,Te,p,O,(Z,Ne)=>sy(Z,ae,O,Te,Ne),L),Be=p.ensureLoaded!==!1;q||(te=re(te));let le=Xe.transformEntryForSelect(ae,O,Te,L,Be,!0),$e=Xe.transformToOrderedSelect(te,ae,q,Te,O,le);function re(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(re,"applyOffset"),q&&($e=re($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 wV;if(I){p=sy(p,O,N,b,null);let M;y.iterate=function(){let D,G=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),q,ae=I.dbOrderedAttribute,Te,te,Be=!0;function le(re){let Z=re.next&&le(re.next),Ne=re.descending;return(qe,As)=>{let xi=Vm(qe,re.attribute,N),je=Vm(As,re.attribute,N),jt=Ne?(0,Ea.compareKeys)(je,xi):(0,Ea.compareKeys)(xi,je);return jt===0?Z?.(qe,As)||0:jt}}a(le,"createComparator");let $e=le(I);return{async next(){let re;if(D)if(re=D.next(),re.done){if(q)return y.onDone&&y.onDone(),re}else return{value:await L.call(this,re.value)};M=[],Te&&M.push(Te);do if(re=await G.next(),re.done){if(q=!0,M.length)break;return y.onDone&&y.onDone(),re}else{let Z=re.value;if(Z?.then&&(Z=await Z),ae){let Ne=Vm(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),D=M[Symbol.iterator](),re=D.next(),re.done?(y.onDone&&y.onDone(),re):{value:await L.call(this,re.value)}},return(){y.onDone&&y.onDone(),G.return()},throw(){y.onDone&&y.onDone(),G.throw()}}};let $=a(D=>{if(typeof O=="object"&&Array.isArray(D.attribute))for(let G=0;G<O.length;G++){let q=O[G],ae;if(q.name===D.attribute[0]){for(ae=q.sort||(q.sort={});ae.next;)ae=ae.next;ae.attribute=D.attribute.slice(1),ae.descending=D.descending}else q===D.attribute[0]&&(O[G]=ae={name:q,sort:{attribute:D.attribute.slice(1),descending:D.descending}})}D.next&&$(D.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 D=a(G=>G?.key??G,"transform");return p===t?D:p.asArray?G=>[D(G)]:G=>({[t]:D(G)})}let y;b&&P&&!p?.every(D=>{let G;return typeof D=="object"?G=D.name:G=D,r[G]||G===t})&&(y=!0);let M,$=a(function(D){let G;if(D!=null){if(xm=D,G=D.value||D.deref?.(),!G&&(D.key===void 0||D.deref)){if(D=km(D.key??D,O,{transaction:I,lazy:p?.length<4},this.isSync,q=>q),D?.then)return D.then($.bind(this));G=D?.value}if(y&&(D.metadataFlags&(Fu|ku)||D.expiresAt&&D.expiresAt<Date.now())){let q=$m(D.key??D,D,O);if(q?.then)return q.then($)}}if(G==null)return L?da.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=qi?.[le],re;if($e){let Z=N?.[le];if(Z)if(Z.hasMappings){let qe=$e.from?G[$e.from]:Xn(D.key);re=Z.get(qe),re||(re=[])}else re=Z.fromRecord?.(G);else re=$e(G,O,D);let Ne=a(qe=>{if(qe&&typeof qe=="object"){let As=$e.definition?.tableClass||Xe;M||(M={});let xi=M[le]||(M[le]=As.transformEntryForSelect(le===te?null:te.select||(Array.isArray(te)?te:null),O,I,Z,b));if(Array.isArray(qe)){let je=[],jt=As.transformToOrderedSelect(qe,te.select,typeof te.sort=="object"&&te.sort,O,I,xi)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Nn=a(zt=>{for(;!zt.done;){if(zt?.then)return zt.then(Nn);je.push(zt.value),zt=jt.next()}Be(je,le)},"nextValue"),Os=Nn(jt.next());Os&&(q||(q=[]),q.push(Os));return}else if(qe=xi.call(this,qe),qe?.then){q||(q=[]),q.push(qe.then(je=>Be(je,le)));return}}Be(qe,le)},"handleResolvedValue");re?.then?(q||(q=[]),q.push(re.then(Ne))):Ne(re);return}else re=G[le],re&&typeof re=="object"&&le!==te&&(re=Xe.transformEntryForSelect(te.select||te,O,I,null)({value:re}));Be(re,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 vn.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||ht({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),p||(p={});let O=!p.rawEvents,I=zI(Xe,this[Ue]??null,function(y,M,$,D){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:D})}catch(G){st.error(G)}},p.startTime||0,this[Cn]);this[Cn]&&(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[Cn]){if(L){if(b)throw new vn.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 D=$.recordId;if(N==null||VM(N,D)){let G=$.getValue(i,O,y);I.send({id:D,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 D=kt($);if(D.tableId!==n)continue;let G=D.recordId;if(N==null||VM(N,G)){let q=D.getValue(i,O,M);if(y.push({id:G,timestamp:M,value:q,version:D.version,type:D.type}),--b<=0)break}}catch(D){st.error("Error getting history entry",M,D)}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:D}of i.getRange({start:N??!1,end:N==null?void 0:[N,Ea.MAXIMUM_KEY],versions:!0}))M&&I.send({id:y,timestamp:D,value:M,version:$,type:"put"})}else{b&&!L&&(L=0);let y=this[_n]?.localTime;if(y===pS&&(i.cache?.delete(N),this[_n]=i.getEntry(N),st.trace("re-retrieved record",y,this[_n]?.localTime),y=this[_n]?.localTime),st.trace("Subscription from",L,"from",N,y),L<y){let M=[],$=y;do{let D=l.get($);if(D){p.omitCurrent=!0;let G=kt(D),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 D=M.length;D>0;)I.send(M[--D]);I.startTime=y}!p.omitCurrent&&this.doesExist()&&I.send({id:N,timestamp:y,value:this,version:this[Vu],type:"put"})}return p.listener&&I.on("data",p.listener),I}doesExist(){return!!(this[fe]||this[xu])}publish(p,O){this._writePublish(p,O)}_writePublish(p,O){let I=Qn(this[ye]),N=this[Ue]||null;Dl(N);let b=this[ye];I.addWrite({key:N,store:i,entry:this[_n],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&&Ym(),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 ${cs(b)} in property ${y} must be an object${L.type?" ("+L.type+")":""}`);let M=L.properties;for(let $=0,D=M.length;$<D;$++){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(D=>D.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 ${cs(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 ${cs(b)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(I||(I=[])).push(`Value ${cs(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 ${cs(b)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(I||(I=[])).push(`Value ${cs(b)} in property ${y} must be a string`);break;case"Boolean":typeof b!="boolean"&&(I||(I=[])).push(`Value ${cs(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 ${cs(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 ${cs(b)} in property ${y} must be a bigint`)}break;case"Bytes":b instanceof Uint8Array||(I||(I=[])).push(`Value ${cs(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 D=b[M],G=N(D,L.elements,y+"[*]");G&&(b[M]=G)}}else(I||(I=[])).push(`Value ${cs(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 vn.ClientError(I.join(". "))}getUpdatedTime(){return this[Vu]}wasLoadedFromSource(){return P?!!this[Qg]:void 0}static async addAttributes(p){let O=S.slice(0);for(let I of p){if(!I.name)throw new vn.ClientError("Attribute name is required");if(I.name.match(/[`/]/))throw new vn.ClientError("Attribute names cannot include backticks or forward slashes");O.push(I)}return ht({table:s,database:c,schemaDefined:_,attributes:O}),Xe.indexingOperation}static async removeAttributes(p){let O=S.filter(I=>!p.includes(I.name));return ht({table:s,database:c,schemaDefined:_,attributes:O}),Xe.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,D=Math.pow((L-y+1)/b/2,2)+$*(1-$)/M,G=Math.max(Math.sqrt(D)*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(){qi=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)"),ny=!0,O.to)p.elements?.definition?(qi[p.name]=p.resolve=(I,N,b)=>{let L=I[O.from?O.from:t],y=p.elements.definition.tableClass;return b?uc({attribute:O.to,value:L},Qn(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?(qi[p.name]=p.resolve=(N,b,L)=>{let y=N[O.from];if(y!==void 0){if(p.elements){let M,$=y.map(D=>{let G=L?I.tableClass.primaryStore.getEntry(D,{transaction:Qn(b).getReadTxn()}):I.tableClass.get(D,b);return G?.then&&(M=!0),G});return O.filterMissing?M?Promise.all($).then(D=>D.filter(YM)):$.filter(YM):M?Promise.all($):$}return L?I.tableClass.primaryStore.getEntry(y,{transaction:Qn(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`)}Ef(this,this)}static async deleteHistory(p=0){let O;for(let{key:I,value:N}of l.getRange({start:0,end:p}))await $u(),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 $u();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 $u();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()}}Xe.updatedAttributes();let LV=Xe.prototype;return LV[A5]=!0,f&&Xe.setTTLExpiration(f/1e3),j&&PV(),Xe;function vd(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,D=(0,Yu.getIndexedValues)(y,$),G=(0,Yu.getIndexedValues)(M,$);if(G?.length>0){let q=new Set(G);if(D=D?D.filter(ae=>{if(q.has(ae))q.delete(ae);else return!0}):[],G=Array.from(q),(G.length>0||D.length>0)&&xM){let ae=G.concat(D).map(Te=>({key:Te,value:W}));b.prefetch(ae,$M)}for(let ae=0,Te=G.length;ae<Te;ae++)b.remove(G[ae],W)}else D?.length>0&&xM&&b.prefetch(D.map(q=>({key:q,value:W})),$M);if(D)for(let q=0,ae=D.length;q<ae;q++)b.put(D[q],W)}return I}a(vd,"updateIndices");function Dl(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>kM)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,Ea.writeKey)(W,b5,0)>kM)throw new Error("Primary key size is too large: "+W.length);return!0}a(Dl,"checkValidId");function km(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>DV&&(ue--,M()));function M(){if(J.length>0){let D=Se;i.prefetch(J,()=>{ue===-1?M():ue++;for(let G of D)G()}),J=[],Se=[],Ee>2&&Ee--}else ue=Ee,Ee<CV&&Ee++}a(M,"prefetch");function $(){try{L(b())}catch(D){y(D)}}a($,"load")})}a(km,"loadLocalRecord");function Bd(W){if(!W?.role)return;let p=W.role.permission;if(p.super_user)return N5;let O=p[c],I,N=O?.tables;if(N)return N[s];if(c==="data"&&(I=p[s])&&!I.tables)return I}a(Bd,"getTablePermissions");function $m(W,p,O,I){if(P){let N;if(O.noCache?N=!0:(p?(!p.value||p.metadataFlags&(Fu|ku)||p.expiresAt&&p.expiresAt<Date.now())&&(N=!0):N=!0,Un(!N,"cache-hit",s)),N){let b=iy(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 vn.ServerError("Entry is not cached",504);return}else return b}}}a($m,"ensureLoadedFromSource");function Qn(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 Ko,p.lmdbDb=i,p;p=O}while(!0)}else return new mf}a(Qn,"txnForContext");function Vm(W,p,O){if(!W)return;xm=W;let I=W.value||W.deref?.()||(xm=i.getEntry(W.key))?.value;if(typeof p=="object"){let b=qi,L=I;for(let y=0,M=p.length;y<M;y++){let $=p[y],D=b?.[$];L=D&&L?D(L,O,!0)?.value:L?.[$],b=D?.definition?.tableClass?.propertyResolvers}return L}let N=qi[p];return N?N(I,O):I[p]}a(Vm,"getAttributeValue");function sy(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($,D){let G=$?.value;if(!G)return da.SKIP;for(let q=0;q<b;q++)if(!y?.includes(q)&&!N[q](G,$))return da.SKIP;return D!==void 0&&($.key=D),$}if(a(M,"processEntry"),b>0||!W.hasEntries){let $=W.map(D=>{if(y=null,typeof D=="object"&&D.key!==void 0)return b>0?M(D):D;if(D==null)return da.SKIP;for(let G=0;G<b;G++){let ae=N[G].idFilter;if(ae){if(!ae(D))return da.SKIP;y||(y=[]),y.push(G)}}return km(D,O,L,!1,M)});return Array.isArray(W)&&($=$.filter(D=>D!==da.SKIP)),$.hasEntries=!0,$}return W}a(sy,"transformToEntries");async function iy(W,p,O){let I=p?.metadataFlags,N=p?.version,b,L;if(!i.attemptLock(W,N,()=>{clearTimeout(L);let D=i.getEntry(W);!D||!D.value||D.metadataFlags&(Fu|ku)?b(iy(W,i.getEntry(W),O)):b(D)}))return new Promise(D=>{b=D,L=setTimeout(()=>{i.unlock(W,N)},R5)});let y=p?.value,M={requestContext:O,replacingRecord:y,replacingVersion:N,source:null,resourceCache:O?.resourceCache},$=O?.responseHeaders;return new Promise((D,G)=>{let q;zg(Ze(M,async ae=>{let Te=performance.now(),te,Be,le;try{for(let Ne of Xe.sources)if(Ne.get&&(!Ne.get.reliesOnPrototype||Ne.prototype.get)&&(M.source=Ne,te=await Ne.get(W,M),te))break;le=I&Fu;let re=M.lastModified||le&&N;Be=le||re>N||!y,re||(re=(0,Yu.getNextMonotonicTime)());let Z=performance.now()-Te;if(un(Z,"cache-resolution",s),$&&Wg($,"Server-Timing",`cache-resolve;dur=${Z.toFixed(2)}`,!0),ae.timestamp=re,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,D({version:re,value:te})}catch(re){re.message+=` while resolving record ${W} for ${s}`,y&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!O?.mustRevalidate||O?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(D({version:N,value:y}),st.trace(re.message,"(returned stale record)")):G(re),M.transaction.abort();return}if(O?.noCacheStore){M.transaction.abort();return}Qn(M).addWrite({key:W,store:i,entry:p,nodeName:"source",commit:(re,Z)=>{if(Z?.version!==N)return;let Ne=vd(W,y,te);te?(Ge.put?.(M,W,te),R(W,te,Z,re,0,h&&Be||null,M,M.expiresAt,"put",!!le)):(Ge.delete?.(M,W),h||m?R(W,null,Z,re,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(iy,"getFromSource");function Ym(){if(Ft!==Md&&(Md=Ft,(0,fa.getWorkerIndex)()===(0,fa.getWorkerCount)()-1)){if(Ud&&clearTimeout(Ud),!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`),Ud=setTimeout(()=>U=U.then(async()=>{if(O(Math.max(I+Ft,Date.now())),i.rootStore.status!=="open"){clearTimeout(Ud);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:D,expiresAt:G}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let q;$===null&&!h&&D+g5<Date.now()?q=i.remove(M,D):G&&G+E<Date.now()&&(q=Xe.evict(M,$,D),y++),q&&(await b[L],b[L]=q.catch(ae=>{st.error("Cleanup error",ae)}),++L>=N&&(L=0)),await $u()}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(Ym,"scheduleCleanup");function oy(){z=l?.addDeleteRemovalCallback(n,W=>{let p=i.getEntry(W);p?.value===null&&i.remove(W,p.version)})}a(oy,"addDeleteRemoval");function PV(){(0,fa.getWorkerIndex)()===0&&setInterval(async()=>{if(!Fm){Fm=!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()&&Xe.evict(I,N.value,N.version):i.ifVersion(I,N?.version,()=>p.remove(O,I))}await $u()}}catch(W){st.error("Error in evicting old records",W)}finally{Fm=!1}}},T5).unref()}a(PV,"runRecordExpirationEviction")}function jg(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 $M(){}function y5(e){WM=e}function NE(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"?(typeof e!="number"&&!I5.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,IE.autoCast)(e):e}function VM(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 zg(e,t,r){return e?.then?e.then(t,r):t(e)}function yE(e,t){e[_n]=t,e[fe]=t?.value??null,e[Vu]=t?.version}function YM(e){return e!=null}function cs(e){try{return JSON.stringify(e)}catch{return e}}var ls,da,Yu,KM,Qu,vn,Ku,Wu,st,Ea,fa,IE,S5,WM,T5,g5,xM,R5,Vu,A5,_n,xu,FM,O5,Qg,Cc,Fu,ku,b5,kM,N5,oRe,I5,$u,CE=Oe(()=>{ls=B(C()),da=require("lmdb"),Yu=B(Or()),KM=require("lodash");Jn();wS();Qu=B(X());ZI();vn=B(oe()),Ku=B(ai()),Wu=B(ts());ge();Rf();st=B(x());pf();Wo();Ea=require("ordered-binary"),fa=B(tt());Ki();IE=B(K());jl();fi();af();qu();S5=new Uint8Array(9);S5[8]=192;T5=6e4,g5=864e5;Qu.initSync();xM=Qu.get(ls.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),R5=1e4,Vu=Symbol.for("version"),A5=Symbol.for("incremental-update"),_n=Symbol("entry"),xu=Symbol("is-saving"),FM=1,O5=2,Qg=Symbol("loaded-from-source"),Cc={isNotification:!0,ensureLoaded:!1},Fu=1,ku=8,b5=Buffer.allocUnsafeSlow(8192),kM=1978,N5={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},oRe=(0,IE.convertToMS)(Qu.get(ls.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(wE,"makeTable");a(jg,"attributesAsObject");a($M,"noop");a(y5,"setServerUtilities");I5=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(NE,"coerceType");a(VM,"isDescendantId");$u=a(()=>new Promise(setImmediate),"rest");a(zg,"when");a(yE,"updateResource");a(YM,"exists");a(cs,"stringify")});var ke={};Fe(ke,{database:()=>bu,databases:()=>ut,dropDatabase:()=>sg,dropTableMeta:()=>P5,getDatabases:()=>wr,getDefaultCompression:()=>HE,getTables:()=>w5,onUpdatedTable:()=>rR,readMetaDb:()=>ju,resetDatabases:()=>Ju,table:()=>ht,tables:()=>fn});function w5(){return UE||wr(),fn||{}}function wr(){if(UE)return ut;UE=!0,Pc=new Map;let e=(0,pt.getHdbBasePath)()&&(0,it.join)((0,pt.getHdbBasePath)(),Ht.DATABASES_DIR_NAME),t=(0,pt.get)(Ht.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,pt.get)(Ht.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,dn.existsSync)(e)?e:(0,it.join)((0,pt.getHdbBasePath)(),Ht.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,dn.existsSync)(e))for(let r of(0,dn.readdirSync)(e,{withFileTypes:!0})){let n=(0,it.basename)(r.name,".mdb");r.isFile()&&(0,it.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&ju((0,it.join)(e,r.name),null,n)}if((0,dn.existsSync)((0,Lc.getBaseSchemaPath)())){for(let r of(0,dn.readdirSync)((0,Lc.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,it.join)((0,Lc.getBaseSchemaPath)(),r.name),s=(0,it.join)((0,Lc.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,dn.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,it.extname)(i.name).toLowerCase()===".mdb"){let o=(0,it.join)(s,i.name);ju((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,dn.existsSync)(s))for(let o of(0,dn.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,it.extname)(o.name).toLowerCase()===".mdb"&&ju((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,dn.existsSync)(l)&&ju(l,o,r,null,!0)}}for(let r in ut){let n=Pc.get(r);if(n){let s=ut[r];r.includes("delete")&&Bn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Bn.trace(`delete table class ${i}`),delete s[i])}else if(delete ut[r],r==="data"){for(let s in fn)delete fn[s];delete fn[BE]}}return Pc=null,ut}}function Ju(){UE=!1;for(let[,e]of oo)e.needsDeletion=!0;wr();for(let[e,t]of oo)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),oo.delete(e));return ut}function ju(e,t,r=eR,n,s){let i=new Xg.default(e,!1);try{let o=oo.get(e);o?o.needsDeletion=!1:(o=(0,LE.open)(i),oo.set(e,o));let c=new ha.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(DE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,dn.existsSync)(n)&&(i.path=n,_=(0,LE.open)(i),_.isLegacy=!0):_=of(o));let u=JM(r),d=u[BE],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){Bn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(m)}`);continue}}let R=u[E],T={},A=[],P,v,U=typeof S.audit=="boolean"?S.audit:(0,pt.get)(Ht.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{P=S.tableId,P?P>=(l.get(Dc)||0)&&l.putSync(Dc,P+1):(S.tableId=P=l.get(Dc),P||(P=1),l.putSync(Dc,P+1),l.putSync(S.key,S));let J=new ha.default(!S.is_hash_attribute,S.is_hash_attribute);if(J.compression=S.compression,J.compression){let Se=(0,pt.get)(Ht.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||zM;J.compression.threshold=Se}v=ef(o.openDB(S.key,J)),v.rootStore=o,v.tableId=P}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 ha.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){Bn.error("Error trying to update attribute",J,A,T,Se)}}if(!R){R=XM(u,E,wE({primaryStore:v,auditStore:_,audit:U,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:T,attributes:m,schemaDefined:S.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let J of tR)J(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function JM(e){let t=ut[e];if(t||(e==="data"?t=ut[e]=fn:e==="system"?Object.defineProperty(ut,"system",{value:t=Object.create(null),configurable:!0}):t=ut[e]=Object.create(null)),Pc&&!Pc.has(e)){let r=new Set;t[BE]=r,Pc.set(e,r)}return t}function XM(e,t,r){return e[t]=r,r}function bu({database:e,table:t}){e||(e=eR),wr();let r=JM(e),n=(0,it.join)((0,pt.getHdbBasePath)(),Ht.DATABASES_DIR_NAME),s=(0,pt.get)(Ht.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,pt.get)(Ht.CONFIG_PARAMS.STORAGE_PATH)||((0,dn.existsSync)(n)?n:(0,it.join)((0,pt.getHdbBasePath)(),Ht.LEGACY_DATABASES_DIR_NAME));let o=(0,it.join)(n,(i?t:e)+".mdb"),c=oo.get(o);if(!c){let l=new Xg.default(o,!1);c=(0,LE.open)(l),oo.set(o,c)}return c}async function sg(e){if(!ut[e])throw new Error("Schema does not exist");let t=ut[e];for(let r in t){let s=t[r].primaryStore.rootStore;oo.delete(s.path),s.status==="open"&&(await s.close(),await vE.remove(s.path))}if(e==="data"){for(let r in fn)delete fn[r];delete fn[BE]}delete ut[e]}function ht({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:l,schemaDefined:_,origin:u}){t||(t=eR);let d=bu({database:t,table:e}),f=ut[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 ha.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=of(d)),m=i.find(Se=>Se.isPrimaryKey)||{},h=m.name,m.is_hash_attribute=!0,m.schemaDefined=_,m.compression=HE(),l&&(m.trackDeletes=!0),o=m.audit=typeof o=="boolean"?o:(0,pt.get)(Ht.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]),Bn.trace(`${e} table loading, opening primary store`);let j=new ha.default(!1,!0);j.compression=m.compression;let z=e+"/",J=ef(d.openDB(z,j));J.rootStore=d,R=d.dbisDb=d.openDB(DE.INTERNAL_DBIS_NAME,T),J.tableId=R.get(Dc),J.tableId||(J.tableId=1),R.putSync(Dc,J.tableId+1),m.tableId=J.tableId,E=XM(f,e,wE({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(DE.INTERNAL_DBIS_NAME,T)),E.dbisDB=R;let v=[];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&&v.push(ue)}}let U=[];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 ha.default(!0,!1),ue=d.openDB(j,Se);(J||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<zu.workerData?.restartNumber)&&(A=!0,k(),z=R.get(j),(J||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<zu.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}),U.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()),Bn.trace(`${e} table loading, running index`),U.length>0||v.length>0?E.indexingOperation=L5(E,U,v):A&&PE.signalSchemaChange(new ME.SchemaEventMsg(process.pid,"schema-change",E.databaseName,E.tableName)),E.origin=u,A)for(let H of tR)H(E,u!=="cluster");return(r||n||s)&&E.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),Bn.trace(`${e} table loaded`),E;function k(){P||d.transactionSync(()=>({then(H){P=H}}))}a(k,"startTxn")}async function L5(e,t,r){try{let n=e.schemaVersion;await PE.signalSchemaChange(new ME.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,QM.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--,Bn.error(f)}),zu.workerData&&zu.workerData.restartNumber!==jM.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}l>C5?await s:l>D5&&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 PE.signalSchemaChange(new ME.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){Bn.error("Error in indexing",n)}}function P5({table:e,database:t}){let r=bu({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 rR(e){tR.push(e)}function HE(){let e=(0,pt.get)(Ht.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,pt.get)(Ht.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,pt.get)(Ht.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||zM,n={startingOffset:32};return t&&(n.dictionary=vE.readFileSync(t)),r&&(n.threshold=r),e&&n}var pt,DE,LE,it,dn,Lc,ha,Xg,Ht,vE,Zg,QM,PE,ME,zu,Bn,jM,eR,BE,zM,fn,ut,Dc,tR,UE,oo,Pc,C5,D5,ge=Oe(()=>{pt=B(X()),DE=B(ct()),LE=require("lmdb"),it=require("path"),dn=require("fs"),Lc=B(ze());CE();ha=B(tu()),Xg=B(ru()),Ht=B(C()),vE=B(require("fs-extra")),Zg=require("../index"),QM=B(Or()),PE=B(ai()),ME=B(ts()),zu=require("worker_threads"),Bn=B(x()),jM=B(tt());Ki();jl();eR="data",BE=Symbol("defined-tables"),zM=((0,pt.get)(Ht.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,pt.initSync)();fn=Object.create(null),ut=Object.create(null);(0,Zg._assignPackageExport)("databases",ut);(0,Zg._assignPackageExport)("tables",fn);Dc=Symbol.for("next-table-id"),tR=[],oo=new Map;a(w5,"getTables");a(wr,"getDatabases");a(Ju,"resetDatabases");a(ju,"readMetaDb");a(JM,"ensureDB");a(XM,"setTable");a(bu,"database");a(sg,"dropDatabase");a(ht,"table");C5=1e3,D5=10;a(L5,"runIndexing");a(P5,"dropTableMeta");a(rR,"onUpdatedTable");a(HE,"getDefaultCompression")});var K=g((hRe,dU)=>{"use strict";var ao=require("path"),nU=require("fs-extra"),Mr=x(),ZM=require("fs-extra"),GE=require("os"),M5=require("net"),U5=require("recursive-iterator"),_t=C(),v5=iS(),eU=require("papaparse"),qE=require("moment"),{inspect:B5}=require("util"),tU=require("is-number"),ERe=require("lodash"),H5=require("minimist"),G5=require("https"),q5=require("http"),{hdb_errors:xE}=oe(),x5=/^((\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)))$/,sU=require("util").promisify(setTimeout),F5=100,k5=5,$5="",V5=4,rU={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};dU.exports={isEmpty:En,isEmptyOrZeroLength:Bs,arrayHasEmptyValues:W5,arrayHasEmptyOrZeroLengthValues:Q5,buildFolderPath:j5,isBoolean:iU,errorizeMessage:Y5,stripFileExtension:J5,autoCast:X5,autoCastJSON:oU,autoCastJSONDeep:sR,removeDir:Z5,compareVersions:e8,isCompatibleDataVersion:t8,escapeRawValue:r8,unescapeValue:n8,stringifyProps:s8,timeoutPromise:o8,isClusterOperation:c8,getClusterUser:u8,checkGlobalSchemaTable:l8,getHomeDir:cU,getPropsFilePath:i8,promisifyPapaParse:_8,removeBOM:lU,createEventPromise:d8,checkProcessRunning:f8,checkSchemaTableExist:E8,checkSchemaExists:uU,checkTableExists:_U,getStartOfTomorrowInSeconds:h8,getLimitKey:p8,isObject:z5,isNotEmptyAndHasValue:K5,autoCasterIsNumberCheck:aU,backtickASTSchemaItems:m8,isPortTaken:a8,createForkArgs:S8,autoCastBoolean:T8,async_set_timeout:sU,getTableHashAttribute:g8,doesSchemaExist:R8,doesTableExist:A8,stringifyObj:O8,ms_to_time:b8,changeExtension:N8,getEnvCliRootPath:iR,noBootFile:y8,httpRequest:I8,transformReq:w8,convertToMS:C8,PACKAGE_ROOT:_t.PACKAGE_ROOT};function Y5(e){return e instanceof Error?e:new Error(e)}a(Y5,"errorizeMessage");function En(e){return e==null}a(En,"isEmpty");function K5(e){return!En(e)&&(e||e===0||e===""||iU(e))}a(K5,"isNotEmptyAndHasValue");function Bs(e){return En(e)||e.length===0||e.size===0}a(Bs,"isEmptyOrZeroLength");function W5(e){if(En(e))return!0;for(let t=0;t<e.length;t++)if(En(e[t]))return!0;return!1}a(W5,"arrayHasEmptyValues");function Q5(e){if(Bs(e))return!0;for(let t=0;t<e.length;t++)if(Bs(e[t]))return!0;return!1}a(Q5,"arrayHasEmptyOrZeroLengthValues");function j5(...e){try{return e.join(ao.sep)}catch{console.error(e)}}a(j5,"buildFolderPath");function iU(e){return En(e)?!1:e===!0||e===!1}a(iU,"isBoolean");function z5(e){return En(e)?!1:typeof e=="object"}a(z5,"isObject");function J5(e){return Bs(e)?$5:e.slice(0,-V5)}a(J5,"stripFileExtension");function X5(e){return En(e)||e===""||typeof e!="string"?e:rU[e]!==void 0?rU[e]:aU(e)===!0?Number(e):x5.test(e)?new Date(e):e}a(X5,"autoCast");function oU(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(oU,"autoCastJSON");function sR(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=sR(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=sR(r);n!==r&&(e[t]=n)}return e}else return oU(e)}a(sR,"autoCastJSONDeep");function aU(e){if(e.startsWith("0.")&&tU(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&tU(e))}a(aU,"autoCasterIsNumberCheck");async function Z5(e){if(Bs(e))throw new Error(`Directory path: ${e} does not exist`);try{await ZM.emptyDir(e),await ZM.remove(e)}catch(t){throw Mr.error(`Error removing files in ${e} -- ${t}`),t}}a(Z5,"removeDir");function e8(e,t){if(Bs(e)){Mr.info("Invalid current version sent as parameter.");return}if(Bs(t)){Mr.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(e8,"compareVersions");function t8(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(t8,"isCompatibleDataVersion");function r8(e){if(En(e))return e;let t=String(e);return t==="."?_t.UNICODE_PERIOD:t===".."?_t.UNICODE_PERIOD+_t.UNICODE_PERIOD:t.replace(_t.FORWARD_SLASH_REGEX,_t.UNICODE_FORWARD_SLASH)}a(r8,"escapeRawValue");function n8(e){if(En(e))return e;let t=String(e);return t===_t.UNICODE_PERIOD?".":t===_t.UNICODE_PERIOD+_t.UNICODE_PERIOD?"..":String(e).replace(_t.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(n8,"unescapeValue");function s8(e,t){if(En(e))return Mr.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+GE.EOL}!Bs(n)&&n[0]===";"?r+=" "+n+s+GE.EOL:Bs(n)||(r+=n+"="+s+GE.EOL)}catch{Mr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(s8,"stringifyProps");function cU(){let e;try{e=GE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(cU,"getHomeDir");function i8(){let e=ao.join(cU(),_t.HDB_HOME_DIR_NAME,_t.BOOT_PROPS_FILE_NAME);return nU.existsSync(e)||(e=ao.join(__dirname,"../","hdb_boot_properties.file")),e}a(i8,"getPropsFilePath");function o8(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(o8,"timeoutPromise");async function a8(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=M5.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(a8,"isPortTaken");function c8(e){try{return _t.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Mr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(c8,"isClusterOperation");function l8(e,t){let r=(ge(),se(ke)).getDatabases();if(!r[e])return xE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return xE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(l8,"checkGlobalSchemaTable");function u8(e,t){if(En(t)){Mr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(En(e)||Bs(e)){Mr.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){Mr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Mr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(u8,"getClusterUser");function _8(){eU.parsePromise=function(e,t,r){return new Promise(function(n,s){eU.parse(e,{header:!0,transformHeader:lU,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(_8,"promisifyPapaParse");function lU(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(lU,"removeBOM");function d8(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Mr.info(`Got cluster status event response: ${B5(s)}`);try{i.cancel()}catch{Mr.error("Error trying to cancel timeout.")}n(s)})})}a(d8,"createEventPromise");async function f8(e){let t=!0,r=0;do await sU(F5*r++),(await v5.findPs(e)).length>0&&(t=!1);while(t&&r<k5);if(t)throw new Error(`process ${e} was not started`)}a(f8,"checkProcessRunning");function E8(e,t){let r=uU(e);if(r)return r;let n=_U(e,t);if(n)return n}a(E8,"checkSchemaTableExist");function uU(e){let{getDatabases:t}=(ge(),se(ke));if(!t()[e])return xE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(uU,"checkSchemaExists");function _U(e,t){let{getDatabases:r}=(ge(),se(ke));if(!r()[e][t])return xE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(_U,"checkTableExists");function h8(){let e=qE().utc().add(1,_t.MOMENT_DAYS_TAG).startOf(_t.MOMENT_DAYS_TAG).unix(),t=qE().utc().unix();return e-t}a(h8,"getStartOfTomorrowInSeconds");function p8(){return qE().utc().format("DD-MM-YYYY")}a(p8,"getLimitKey");function m8(e){try{let t=new U5(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){Mr.error("Got an error back ticking items."),Mr.error(t)}}a(m8,"backtickASTSchemaItems");function S8(e){return[e]}a(S8,"createForkArgs");function T8(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(T8,"autoCastBoolean");function g8(e,t){let{getDatabases:r}=(ge(),se(ke)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(g8,"getTableHashAttribute");function R8(e){let{getDatabases:t}=(ge(),se(ke));return t()[e]!==void 0}a(R8,"doesSchemaExist");function A8(e,t){let{getDatabases:r}=(ge(),se(ke));return r()[e]?.[t]!==void 0}a(A8,"doesTableExist");function O8(e){try{return JSON.stringify(e)}catch{return e}}a(O8,"stringifyObj");function b8(e){let t=qE.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(b8,"ms_to_time");function N8(e,t){let r=ao.basename(e,ao.extname(e));return ao.join(ao.dirname(e),r+t)}a(N8,"changeExtension");function iR(){if(process.env[_t.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[_t.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=H5(process.argv);if(e[_t.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[_t.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(iR,"getEnvCliRootPath");var nR;function y8(){if(nR)return nR;let e=iR();iR()&&nU.pathExistsSync(ao.join(e,_t.HDB_CONFIG_FILE))&&(nR=!0)}a(y8,"noBootFile");function I8(e,t){let r;return e.protocol==="http:"?r=q5:r=G5,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(I8,"httpRequest");function w8(e){if(!e.schema&&!e.database){e.schema=_t.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(w8,"transformReq");function C8(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(C8,"convertToMS")});var X=g((mRe,pU)=>{"use strict";var oR=require("fs-extra"),pa=require("path"),fU=require("os"),D8=require("properties-reader"),Zu=x(),Xu=K(),_e=C(),FE=lt(),L8="Error initializing environment manager",kE="BOOT_PROPS_FILE_PATH",EU=!1,P8={[_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},Ei={};pU.exports={BOOT_PROPS_FILE_PATH:kE,getHdbBasePath:M8,setHdbBasePath:U8,get:hU,initSync:B8,setProperty:ve,initTestEnvironment:H8};function M8(){return Ei[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(M8,"getHdbBasePath");function U8(e){Ei[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(U8,"setHdbBasePath");function hU(e){let t=FE.getConfigValue(e);return t===void 0?Ei[e]:t}a(hU,"get");function ve(e,t){P8[e]&&(Ei[e]=t),FE.updateConfigObject(e,t)}a(ve,"setProperty");function v8(){let e;try{e=Xu.getPropsFilePath(),oR.accessSync(e,oR.constants.F_OK|oR.constants.R_OK),EU=!0;let t=D8(e);return Ei[_e.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(_e.HDB_SETTINGS_NAMES.INSTALL_USER),Ei[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ei[kE]=e,!0}catch{return Zu.trace(`Environment manager found no properties file at ${e}`),!1}}a(v8,"doesPropFileExist");function B8(e=!1){try{(EU||v8()||Xu.noBootFile())&&(FE.initConfig(e),Ei[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=FE.getConfigValue(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Zu.error(L8),Zu.error(t),console.error(t),process.exit(1)}}a(B8,"initSync");function H8(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=pa.join(__dirname,"../../","unitTests");Ei[kE]=pa.join(l,"hdb_boot_properties.file"),ve(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,pa.join(l,"settings.test")),ve(_e.HDB_SETTINGS_NAMES.INSTALL_USER,fU.userInfo()?fU.userInfo().username:void 0),ve(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),ve(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY,pa.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,pa.join(l,"envDir")),ve(_e.CONFIG_PARAMS.STORAGE_PATH,pa.join(l,"envDir")),s&&(ve(_e.CONFIG_PARAMS.HTTP_SECUREPORT,hU(_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,Xu.isEmpty(i)?!1:i),ve(_e.CONFIG_PARAMS.HTTP_CORS,Xu.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,pa.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),ve(_e.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Xu.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 ${kE}. Please check your boot props and settings files`;Zu.fatal(r),Zu.error(t)}}a(H8,"initTestEnvironment")});var lR={};Fe(lR,{loadGQLSchema:()=>x8,start:()=>cR,startOnMainThread:()=>q8});function cR({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 v=function(U){if(U.kind==="NonNullType"){let j=v(U.type);return j.nullable=!1,j}if(U.kind==="ListType")return{type:"array",elements:v(U.type)};let H={type:U.name?.value};return Object.defineProperty(H,"location",{value:U.loc.startToken}),H};a(v,"getProperty");let R=S.name.value,T=[],A={table:null,database:null,properties:T};f.set(R,A);for(let U of S.directives){if(U.name.value==="table"){for(let k of U.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(U.name.value==="sealed"&&(A.sealed=!0),U.name.value==="export"){A.export=!0;for(let k of U.arguments)k.name.value==="name"&&(A.export={name:k.value.value})}}let P=!1;for(let U of S.fields){let k=v(U.type);k.name=U.name.value,T.push(k);for(let H of U.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):G8.includes(S.type)||(0,mU.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,aR.dirname)(n),S.tableClass):i.set((0,aR.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var aR,mU,G8,q8,x8,SU=Oe(()=>{aR=require("path");ge();mU=B(tt()),G8=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(cR,"start");q8=cR,x8=cR({ensureTable:ht}).handleFile});async function $E(e){return F8?(e_||(e_=k8(V8)),(await(await e_).import(e)).namespace):import(e)}async function k8(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),e_=new Compartment({console,Math,Date,fetch:$8,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,gU.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:fn,databases:ut})}};let n=await(0,TU.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),e_}function $8(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 V8(){return{Resource:Jt,tables:fn}}var TU,gU,F8,e_,uR=Oe(()=>{Jn();ge();TU=require("fs/promises"),gU=require("path"),F8=!1;a($E,"secureImport");a(k8,"getCompartment");a($8,"secureOnlyFetch");a(V8,"getGlobalVars")});var dR={};Fe(dR,{handleFile:()=>Y8});async function Y8(e,t,r,n){let s=new Map,i=(0,RU.pathToFileURL)(r).toString(),o=await $E(i);l(o.default)&&n.set((0,_R.dirname)(t),o.default),c(o,(0,_R.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 RU,_R,AU=Oe(()=>{RU=require("url");uR();_R=require("path");a(Y8,"handleFile")});var ER={};Fe(ER,{start:()=>K8});function K8({resources:e}){e.set("login",fR),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var fR,OU=Oe(()=>{Jn();a(K8,"start");fR=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 DU={};Fe(DU,{parse:()=>pR,streamAsJSON:()=>t_,stringify:()=>ma});function t_(e){return new hR({value:e})}function bU(e){return console.error(e),JSON.stringify(e.toString())}function NU(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function ma(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===wU)return CU(e);if(t.resolution)return t.resolution.then(()=>ma(e));throw t}}function CU(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+=CU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+ma(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function pR(e){return j8.test(e)?W8.parse(e):JSON.parse(e)}var yU,IU,W8,Q8,wU,hR,j8,mR=Oe(()=>{yU=require("stream"),IU=B(require("json-bigint-fixes")),W8=(0,IU.default)({useNativeBigInt:!0}),Q8=1e4,wU={};BigInt.prototype.toJSON=function(){throw wU};a(t_,"streamAsJSON");hR=class extends yU.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),bU)}catch(s){yield bU(s)}else yield ma(t)}else yield ma(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);NU(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>Q8?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 NU(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(bU,"handleError");a(NU,"when");a(ma,"stringify");a(CU,"jsStringify");j8=/[[,:]\s*-?\d{16,}/;a(pR,"parse")});var VE=g((DRe,LU)=>{"use strict";var z8=Pn();LU.exports={writeTransaction:J8};function J8(e,t,r){return z8.writeTransaction(e,t,r)}a(J8,"writeTransaction")});var vU=g((MRe,UU)=>{"use strict";var X8=or(),Z8=Mn(),PU=x(),e6=Dr(),PRe=VE(),t6=require("clone"),TR=require("alasql"),r6=Zf(),MU=require("util"),n6=MU.promisify(Z8.getTableSchema),s6=MU.promisify(X8.search),i6=C(),SR=K();r6(TR);UU.exports={update:a6};var o6="There was a problem performing this update. Please check the logs and try again.";async function a6({statement:e,hdb_user:t}){let r=await n6(e.table.databaseid,e.table.tableid),n=c6(e.columns);SR.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=t6(s),c=SR.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=TR.parse(l).statements[0],u=await s6(_),d=l6(n,u);return u6(o,d,t)}a(a6,"update");function c6(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=TR.compile(`SELECT ${r.expression.toString()} AS [${i6.FUNC_VAL}] FROM ?`)}),t}catch(t){throw PU.error(t),new Error(o6)}}a(c6,"createUpdateRecord");function l6(e,t){return SR.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(l6,"buildUpdateRecords");async function u6(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await e6.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){PU.error(`Error delete new_attributes from update response: ${i}`)}return s}a(u6,"updateRecords")});var HU=g((HRe,BU)=>{var _6=require("alasql"),d6=or(),f6=x(),E6=Pn(),RR=require("util"),gR=K(),h6=C(),p6=Mn(),vRe=VE(),BRe=Dr(),m6="record",S6="successfully deleted",T6=RR.callbackify(O6),g6=RR.promisify(d6.search),R6=RR.promisify(p6.getTableSchema);BU.exports={convertDelete:T6};function A6(e){return`${e.deleted_hashes.length} ${m6}${e.deleted_hashes.length===1?"":"s"} ${S6}`}a(A6,"generateReturnMessage");async function O6({statement:e,hdb_user:t}){let r=await R6(e.table.databaseid,e.table.tableid);gR.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=gR.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=_6.parse(o).statements[0],l={operation:h6.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await g6(c);let _=await E6.deleteRecords(l);return gR.isEmptyOrZeroLength(_.message)&&(_.message=A6(_)),delete _.txn_time,_}catch(_){throw f6.error(_),_.hdb_code?_.message:_}}a(O6,"convertDelete")});var kU=g((qRe,FU)=>{"use strict";var b6=di(),{hdb_errors:GU}=oe(),{getDatabases:qU}=(ge(),se(ke));FU.exports={checkSchemaExists:xU,checkSchemaTableExists:N6,schema_describe:b6};async function xU(e){if(!qU()[e])return GU.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(xU,"checkSchemaExists");async function N6(e,t){let r=await xU(e);if(r)return r;if(!qU()[e][t])return GU.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(N6,"checkSchemaTableExists")});var IR=g((VRe,XU)=>{"use strict";var{decode:y6}=require("msgpackr"),{isMainThread:FRe,parentPort:kRe,threadId:$Re}=require("worker_threads"),r_=mt(),Mc=et(),bR=C(),ur=x(),OR=X(),I6=C(),{onMessageByType:w6}=tt(),YU=_i(),{recordAction:C6,recordActionBinary:D6}=(fi(),se(Gu)),{publishToStream:L6}=r_,{ConsumerEvents:$U}=require("nats"),P6=or(),{promisify:M6}=require("util"),KU=M6(setTimeout),WE=1e4,QE,KE,U6,v6,WU,n_=new Map,Uc=new Map;XU.exports={initialize:NR,ingestConsumer:yR,setSubscription:B6,setIgnoreOrigin:q6,getDatabaseSubscriptions:G6,updateConsumer:QU};async function NR(){w6(bR.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await QU(n)}),WU=!0,ur.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await r_.getNATSReferences();QE=e,KE=e.info.server_name,U6=t,v6=r}a(NR,"initialize");async function QU(e){if(e.status==="start"){let{js:t,jsm:r}=await jU(e.node_domain_name);yR(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=n_.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?.(),n_.set(e.stream_name+e.node_domain_name,"close")),Uc.get(e.node_domain_name)==="failed"&&Uc.set(e.node_domain_name,"close")}}a(QU,"updateConsumer");var jE=new Map;function B6(e,t,r){let n=jE.get(e);n||jE.set(e,n=new Map),n.set(t,r),WU||NR().then(H6)}a(B6,"setSubscription");async function H6(){let e=await P6.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Mc.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions)if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await jU(r),!n))break;let{schema:o,table:c}=i,l=YU.createNatsTableStreamName(o,c);yR(l,n,s,r)}}}a(H6,"accessConsumers");async function jU(e){let t,r,n=1;for(;!r;)try{t=await QE.jetstream({domain:e}),r=await QE.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Uc.get(e)==="close")break;Uc.set(e,"failed"),n%10===1&&ur.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<WE?n++*100:WE;await KU(i)}return{js:t,jsm:r}}a(jU,"connectToRemoteJS");function G6(){return jE}a(G6,"getDatabaseSubscriptions");var zU;function q6(e){zU=e}a(q6,"setIgnoreOrigin");var JU=100,VU=new Array(JU),YE=0;async function yR(e,t,r,n){let{connection:s}=await r_.getNATSReferences();QE=s,KE=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,KE),ur.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(Uc.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 r_.createConsumer(r,e,KE,new Date(Date.now()).toISOString()));let u=o++*100<WE?o++*100:WE;await KU(u)}let c=!1,l;for(;!c;){if(n_.get(e+n)==="close"||Uc.get(n)==="close"){n_.delete(e+n),c=!0;continue}l=await i.consume({max_messages:OR.get(bR.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100}),n_.set(e+n,l);let _=!1;(async()=>{for await(let u of await l.status())if(u.type===$U.ConsumerDeleted&&(await l.close(),c=!0),u.type===$U.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 VU[YE],VU[YE]=x6(u).catch(d=>{ur.error(d)}),++YE>=JU&&(YE=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)}r_.clearClientCache(),!c&&_&&await NR()}}a(yR,"ingestConsumer");async function x6(e){let t=y6(e.data);C6(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=OR.get(bR.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Mc.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Mc.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Mc.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!zU),D6(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Mc.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(Mc.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let m=new Promise(P=>h=P),{timestamp:S,user:R,node_name:T}=f||{},A=jE.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:AR(o),value:u[0],id:d?.[0],expiresAt:E,timestamp:S,table:_,onCommit:h,user:R,nodeName:T});else{let P=u.map((v,U)=>({type:AR(o),value:v,expiresAt:E,id:d?.[U],table:_}));for(;l;)P.push({type:AR(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:T})}OR.get(I6.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&L6(e.subject.split(".").slice(0,-1).join("."),YU.createNatsTableStreamName(c,_),e.headers,e.data),await m}catch(o){ur.error(o)}e.ack()}a(x6,"messageProcessor");function AR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(AR,"convertOperation")});var mt=g((JRe,hv)=>{"use strict";var Vt=X();Vt.initSync();var F6=require("fs-extra"),k6=require("semver"),o_=require("path"),{monotonicFactory:$6}=require("ulidx"),ev=$6(),V6=require("util"),tv=require("child_process"),Y6=V6.promisify(tv.exec),K6=tv.spawn,Zt=et(),Pe=C(),zE=K(),us=x(),JE=_i(),W6=VE(),s_=lt(),{broadcast:Q6,onMessageByType:j6,getWorkerIndex:z6}=tt(),{isMainThread:rv}=require("worker_threads"),{Encoder:J6,decode:LR}=require("msgpackr"),nv=new J6,{isEmpty:Ra}=zE,sv=Pr(),KRe=48*36e11;rv&&j6(Pe.ITC_EVENT_TYPES.RESTART,()=>{Ur=void 0,ga=void 0});var{connect:X6,StorageType:Z6,RetentionPolicy:e9,AckPolicy:PR,DeliverPolicy:MR,DiscardPolicy:t9,NatsConnection:WRe,JetStreamManager:QRe,JetStreamClient:jRe,StringCodec:zRe,JSONCodec:r9,createInbox:UR,headers:n9,ErrorCode:ZU}=require("nats"),{PACKAGE_ROOT:s9}=C(),i9=Fo(),{recordAction:o9}=(fi(),se(Gu)),iv=r9(),a9="clustering",c9=i9.engines[Zt.NATS_SERVER_NAME],l9=o_.join(s9,"dependencies"),DR=o_.join(l9,`${process.platform}-${process.arch}`,Zt.NATS_BINARY_NAME),wR,CR,i_,Sa,Ta;hv.exports={runCommand:ov,checkNATSServerInstalled:u9,createConnection:vR,getConnection:XE,getJetStreamManager:a_,getJetStream:cv,getNATSReferences:_s,getServerList:d9,createLocalStream:BR,listStreams:lv,deleteLocalStream:f9,getServerConfig:c_,listRemoteStreams:E9,viewStream:h9,viewStreamIterator:p9,publishToStream:m9,request:g9,reloadNATS:HR,reloadNATSHub:R9,reloadNATSLeaf:A9,extractServerName:T9,requestErrorHandler:O9,createLocalTableStream:fv,createTableStreams:y9,purgeTableStream:Ev,purgeSchemaTableStreams:I9,getStreamInfo:w9,updateLocalStreams:D9,closeConnection:_9,getJsmServerName:ZE,addNatsMsgHeader:uv,clearClientCache:av,updateRemoteConsumer:b9,createConsumer:_v,updateConsumerIterator:N9};async function ov(e,t=void 0){let{stdout:r,stderr:n}=await Y6(e,{cwd:t});if(n)throw new Error(n.replace(`
7
+ `)},Sz="certificate.pem",Tz="privateKey.pem",gz="ca.pem";NC.exports={CERTIFICATE_VALUES:mz,CERTIFICATE_PEM_NAME:Sz,PRIVATEKEY_PEM_NAME:Tz,CA_PEM_NAME:gz}});var OT=T((Lme,LC)=>{"use strict";var CC=require("fs-extra"),ce=require("joi"),Rz=require("os"),{boolean:ye,string:or,number:rt,array:AT}=ce.types(),{totalmem:yC}=require("os"),sa=require("path"),Az=x(),Pf=K(),Dme=RT(),IC=D(),Oz=tt(),wC="log",bz="components",Nz="Invalid logging.rotation.maxSize unit. Available units are G, M or K",yz="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Iz="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",wz="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",Cz="rootPath config parameter is undefined",Dz="clustering.enabled config parameter is undefined",ia=rt.min(0).required(),Mf=AT.items({host:or.required(),port:ia}).empty(null),Ds,DC=!1;LC.exports={configValidator:Lz,routesValidator:Hz,route_constraints:Mf};function Lz(e,t=!1){if(DC=t,Ds=e.rootPath,Pf.isEmpty(Ds))throw Cz;let r=ye.required(),n=rt.min(0).max(1e3).empty(null).default(Bz),s=or.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Eu),i=or.optional().empty(null),o=or.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ce.string().empty(null).default(Eu),l=ce.custom(Mz).empty(null).default(Eu),_=e.clustering?.enabled;if(Pf.isEmpty(_))throw Dz;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:or.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:or.custom(vz).optional().empty(null),maxSize:or.custom(Uz).optional().empty(null),path:or.optional().empty(null).default(Eu)}).required(),root:s,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:ce.object({network:ce.object({cors:ye.optional(),corsAccessList:AT.optional(),headersTimeout:rt.min(1).optional(),keepAliveTimeout:rt.min(1).optional(),port:rt.optional().empty(null),domainSocket:ce.optional().empty("hdb/operations-server").default(Eu),securePort:rt.optional().empty(null),timeout:rt.min(1).optional()}).optional(),tls:ce.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:or.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:or.optional(),certificateAuthority:i,required:ye.optional()})])}).required(),webSocket:ye.optional(),requireAuthentication:ye.optional()}),http:ce.object({compressionThreshold:rt.optional(),cors:ye.optional(),corsAccessList:AT.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:or.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:or.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:or.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:or.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(Lz,"configValidator");function Pz(e){return DC||CC.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Pz,"doesPathExist");function Mz(e,t){ce.assert(e,or.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Pz(e);if(r)return t.message(r)}a(Mz,"validatePath");function Uz(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Nz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Iz):e}a(Uz,"validateRotationMaxSize");function vz(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(yz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(wz):e}a(vz,"validateRotationInterval");function Bz(e,t){let r=t.state.path.join("."),n=Rz.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),Az.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(Bz,"setDefaultThreads");function Eu(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,bz);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(Eu,"setDefaultRoot");function Hz(e){let t=ce.object({routes:Mf});return Oz.validateBySchema({routes:e},t)}a(Hz,"routesValidator")});var ut=T((Ume,xC)=>{"use strict";var rn=D(),$t=K(),Mt=x(),{configValidator:Gz,routesValidator:PC}=OT(),Nr=require("fs-extra"),qz=require("yaml"),ns=require("path"),xz=require("is-number"),UC=require("properties-reader"),Fz=require("lodash"),{handleHDBError:kz}=oe(),{HTTP_STATUS_CODES:$z,HDB_ERROR_MSGS:Uf}=Jr(),Mme=require("minimist"),{server:Vz}=(Rr(),ie(Wo)),{DATABASES_PARAM_CONFIG:hu,CONFIG_PARAMS:tn,CONFIG_PARAM_MAP:ss}=rn,Yz="Unable to get config value because config is uninitialized",Kz="Config successfully initialized",Wz="Error backing up config file",Qz="Empty parameter sent to getConfigValue",vC=ns.join(rn.PACKAGE_ROOT,"config","yaml",rn.HDB_DEFAULT_CONFIG_FILE),jz="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:zz,getDefaultConfig:Jz,getConfigValue:HC,initConfig:NT,flattenConfig:fc,updateConfigValue:GC,updateConfigObject:Zz,getConfiguration:r2,setConfiguration:n2,readConfigFile:IT,getClusteringRoutes:s2,initOldConfig:qC,getConfigFromFile:i2,getConfigFilePath:oa,addConfig:o2,deleteConfigFromFile:a2,getConfigObj:c2};function zz(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===tn.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=bT(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),yT(r,t);let s=r.toJSON();Ut=fc(s);let i=r.getIn(["rootPath"]),o=ns.join(i,rn.HDB_CONFIG_FILE);Nr.createFileSync(o),Nr.writeFileSync(o,String(r)),Mt.trace(`Config file written to ${o}`)}a(zz,"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(hu.TABLES))for(let i in n[s][hu.TABLES])for(let o in n[s][hu.TABLES][i]){let c=n[s][hu.TABLES][i][o],l=[tn.DATABASES,s,hu.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=[tn.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 Jz(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(Jz,"getDefaultConfig");function HC(e){if(e==null){Mt.error(Qz);return}if(Ut===void 0){Mt.trace(Yz);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,rn.HDB_CONFIG_FILE):UC(e).get(rn.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(oa,"getConfigFilePath");function NT(e=!1){if(Ut===void 0||e){let t;if(!$t.noBootFile()){t=$t.getPropsFilePath();try{Nr.accessSync(t,Nr.constants.F_OK|Nr.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!==rn.NODE_ERROR_CODES.ENOENT)throw i}try{n=so(r)}catch(i){if(i.code===rn.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}`)}Xz(n,r),yT(n);let s=n.toJSON();if(Vz.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(Kz)}}a(NT,"initConfig");function Xz(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"),Nr.writeFileSync(t,String(e)))}a(Xz,"checkForUpdatedConfig");function yT(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=Gz(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(yT,"validateConfig");function Zz(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(Zz,"updateConfigObject");function GC(e,t,r=void 0,n=!1,s=!1,i=!1){Ut===void 0&&NT();let o=HC(ss.hdb_root),c=ns.join(o,rn.HDB_CONFIG_FILE),l=so(c),_;if(r===void 0&&e.toLowerCase()===tn.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=bT(f,t);l.setIn([...E],h)}else for(let f in r){let E=ss[f.toLowerCase()];if(E===tn.HTTP_SECUREPORT&&r[f]===Ut[tn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),E===tn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===Ut[tn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),E===tn.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=rn.LEGACY_CONFIG_PARAMS[f.toUpperCase()];m&&m.startsWith("customFunctions")&&l.hasIn(m.split("_"))&&(E=m,h=m.split("_"));let S=bT(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(g){Mt.error(g)}}}_&&BC(l,_),yT(l);let u=l.getIn(["rootPath"]),d=ns.join(u,rn.HDB_CONFIG_FILE);n===!0&&e2(c,u),Nr.writeFileSync(d,String(l)),s&&(Ut=fc(l.toJSON())),Mt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(GC,"updateConfigValue");function e2(e,t){try{let r=ns.join(t,"backup",`${rn.HDB_CONFIG_FILE}.bak`);Nr.copySync(e,r),Mt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Mt.error(Wz),Mt.error(r)}}a(e2,"backupConfigFile");var t2=["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])&&!t2.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;!tn[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 bT(e,t){if(e===tn.CLUSTERING_NODENAME||e===tn.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(xz(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(bT,"castConfigValue");function r2(){let e=$t.getPropsFilePath(),t=oa(e);return so(t).toJSON()}a(r2,"getConfiguration");async function n2(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return GC(void 0,void 0,s,!0),jz}catch(i){throw typeof i=="string"||i instanceof String?kz(i,i,$z.BAD_REQUEST,void 0,void 0,!0):i}}a(n2,"setConfiguration");function IT(){let e=$t.getPropsFilePath();try{Nr.accessSync(e,Nr.constants.F_OK|Nr.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(IT,"readConfigFile");function so(e){return qz.parseDocument(Nr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(so,"parseYamlDoc");function s2(){let e=IT(),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(s2,"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===tn.LOGGING_ROOT?Ut[s]=ns.dirname(n):Ut[s]=n}return Ut}a(qC,"initOldConfig");function i2(e){let t=IT();return Fz.get(t,e.replaceAll("_","."))}a(i2,"getConfigFromFile");async function o2(e,t){let r=so(oa());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Nr.writeFile(oa(),String(r))}a(o2,"addConfig");function a2(e){let t=oa($t.getPropsFilePath()),r=so(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ns.join(n,rn.HDB_CONFIG_FILE);Nr.writeFileSync(s,String(r))}a(a2,"deleteConfigFromFile");function c2(){return Bf||(NT(),Bf)}a(c2,"getConfigObj")});var kC=T((Bme,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}},wT=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:wT}});var aa=T((Gme,QC)=>{"use strict";var hc=require("fs-extra"),VC=Lf(),YC=require("crypto"),l2=require("moment"),u2=require("uuid").v4,ar=x(),DT=require("path"),_2=K(),io=D(),{totalmem:$C}=require("os"),d2=kC().ExtendedLicense,Ec="invalid license key format",f2="061183",E2="mofi25",h2="aes-256-cbc",p2=16,m2=32,KC=X();KC.initSync();var CT;QC.exports={validateLicense:WC,generateFingerPrint:T2,licenseSearch:MT,getLicense:A2,checkMemoryLimit:O2};function LT(){return DT.join(KC.getHdbBasePath(),io.LICENSE_KEY_DIR_NAME,io.LICENSE_FILE_NAME)}a(LT,"getLicenseDirPath");function S2(){let e=LT();return DT.join(e,io.LICENSE_FILE_NAME)}a(S2,"getLicenseFilePath");function PT(){let e=LT();return DT.join(e,io.REG_KEY_FILE_NAME)}a(PT,"getFingerPrintFilePath");async function T2(){let e=PT();try{return await hc.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await g2();throw ar.error(`Error writing fingerprint file to ${e}`),ar.error(t),new Error("There was an error generating the fingerprint")}}a(T2,"generateFingerPrint");async function g2(){let e=u2(),t=VC.hash(e),r=PT();try{await hc.mkdirp(LT()),await hc.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw ar.error(`Error writing fingerprint file to ${r}`),ar.error(n),new Error("There was an error generating the fingerprint")}return t}a(g2,"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 ar.error("empty license key passed to validate."),r;let n=PT(),s=!1;try{s=hc.statSync(n)}catch(i){ar.error(i)}if(s){let i;try{i=hc.readFileSync(n,"utf8")}catch{ar.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(E2),c=o[1];c=Buffer.concat([Buffer.from(c)],p2);let l=Buffer.concat([Buffer.from(i)],m2),_=YC.createDecipheriv(h2,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=R2(o[0],i);if(E)u=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Ec),ar.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),ar.error(Ec),new Error(Ec)}else r.exp_date=u;r.exp_date<l2().valueOf()&&(r.valid_date=!1),VC.validate(o[1],`${f2}${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||ar.error("Invalid licence"),r}a(WC,"validateLicense");function R2(e,t){try{let r=YC.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{ar.warn("Check old license failed")}}a(R2,"checkOldLicense");function MT(){let e=new d2,t=[];try{t=hc.readFileSync(S2(),"utf-8").split(io.NEW_LINE)}catch(r){r.code==="ENOENT"?ar.info("no license file found"):ar.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(_2.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){ar.error("There was an error parsing the license string."),ar.error(s),e.ram_allocation=io.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return CT=e,e}a(MT,"licenseSearch");async function A2(){return CT||await MT(),CT}a(A2,"getLicense");function O2(){let e=MT().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(O2,"checkMemoryLimit")});var yr=T(($me,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:P2,alterUser:M2,dropUser:v2,getSuperUser:q2,userInfo:B2,listUsers:xf,listUsersExternal:H2,setUsersToGlobal:mc,findAndValidateUser:cD,getClusterUser:x2,USERNAME_REQUIRED:XC,ALTERUSER_NOTHING_TO_UPDATE:ZC,EMPTY_PASSWORD:eD,EMPTY_ROLE:tD,ACTIVE_BOOLEAN:rD};var nD=br(),b2=na(),BT=Lf(),sD=AC(),iD=sr(),HT=di(),nn=K(),oD=require("validate.js"),be=x(),{promisify:N2}=require("util"),GT=ui(),jC=D(),zC=Xe(),y2=ut(),xme=X(),Fme=aa(),I2=ci(),{table:kme}=(ge(),ie(ke)),{handleHDBError:Ls,hdb_errors:w2}=oe(),{HTTP_STATUS_CODES:Ps,AUTHENTICATION_ERROR_MSGS:UT,HDB_ERROR_MSGS:pc}=w2,{UserEventMsg:qT}=is(),vT=require("lodash"),{server:xT}=(Rr(),ie(Wo)),C2=x();xT.getUser=(e,t)=>cD(e,t,t!=null);var aD={username:!0,active:!0,role:!0,password:!0},JC=new Map,qf=iD.searchByValue,D2=iD.searchByHash,L2=N2(b2.delete);async function P2(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=GT.encrypt(t.password)),t.password=BT.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],HT.signalUserChange(new qT(process.pid)),`${c.username} successfully added`}a(P2,"addUser");async function M2(e){let t=oD.cleanAttributes(e,aD);if(nn.isEmptyOrZeroLength(t.username))throw new Error(XC);if(nn.isEmptyOrZeroLength(t.password)&&nn.isEmptyOrZeroLength(t.role)&&nn.isEmptyOrZeroLength(t.active))throw new Error(ZC);if(!nn.isEmpty(t.password)&&nn.isEmptyOrZeroLength(t.password.trim()))throw new Error(eD);if(!nn.isEmpty(t.active)&&!nn.isBoolean(t.active))throw new Error(rD);let r=U2(t.username);if(!nn.isEmpty(t.password)&&!nn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=GT.encrypt(t.password)),t.password=BT.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 HT.signalUserChange(new qT(process.pid)),s}a(M2,"alterUser");function U2(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(U2,"isClusterUser");async function v2(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(nn.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 L2(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 HT.signalUserChange(new qT(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(v2,"dropUser");async function B2(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=vT.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await D2(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(B2,"userInfo");async function H2(){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(H2,"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]=vT.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=vT.cloneDeep(o),o.role=r[o.role],G2(o.role),i.set(o.username,o);return i}catch(e){throw be.error("got an error listing users"),be.error(e),nn.errorizeMessage(e)}return null}a(xf,"listUsers");function G2(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(I2)){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(G2,"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,UT.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Ls(new Error,UT.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(BT.validate(n.password,t))JC.set(t,n.password);else throw Ls(new Error,UT.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0)}return s}a(cD,"findAndValidateUser");async function q2(){global.hdb_users||await mc();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(q2,"getSuperUser");async function x2(){let e=await xf(),t=y2.getConfigFromFile(jC.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!nn.isEmpty(r)&&r?.role?.role===jC.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=GT.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(x2,"getClusterUser");var lD=[];xT.invalidateUser=function(e){for(let t of lD)try{t(e)}catch(r){C2.error("Error invalidating user",r)}};xT.onInvalidatedUser=function(e){lD.push(e)}});var mu=T((Wme,ED)=>{"use strict";var ca=x(),sn=D(),F2=Vw(),Yme=Pn(),Kme=_i(),k2=yr(),{validateEvent:_D}=is(),pu=Mn(),$2=require("process"),{resetDatabases:V2}=(ge(),ie(ke)),Y2={[sn.ITC_EVENT_TYPES.SCHEMA]:K2,[sn.ITC_EVENT_TYPES.USER]:fD};async function K2(e){let t=_D(e);if(t){ca.error(t);return}ca.trace("ITC schemaHandler received schema event:",e),await F2(e.message),await W2(e.message)}a(K2,"schemaHandler");async function W2(e){try{pu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),pu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),pu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=V2();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ca.error(t)}}a(W2,"syncSchemaMetadata");var dD=[];async function fD(e){try{try{pu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),pu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.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 ${sn.HDB_ITC_CLIENT_PREFIX}${$2.pid} received user event:`,e),await k2.setUsersToGlobal();for(let r of dD)r()}catch(t){ca.error(t)}}a(fD,"userHandler");fD.addListener=function(e){dD.push(e)};ED.exports=Y2});var is=T((Zme,pD)=>{"use strict";var jme=x(),FT=K(),Q2=D(),{ITC_ERRORS:Su}=Jr(),{parentPort:zme,threadId:j2,isMainThread:z2,workerData:Jme}=require("worker_threads"),{onMessageFromWorkers:J2,broadcast:Xme,broadcastWithAcknowledgement:X2}=et();pD.exports={sendItcEvent:Z2,validateEvent:hD,SchemaEventMsg:eJ,UserEventMsg:tJ};var Ff;J2(async(e,t)=>{Ff=Ff||mu(),hD(e),Ff[e.type]&&await Ff[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Z2(e){return!z2&&e.message&&(e.message.originator=j2),X2(e)}a(Z2,"sendItcEvent");function hD(e){if(typeof e!="object")return Su.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||FT.isEmpty(e.type))return Su.MISSING_TYPE;if(!e.hasOwnProperty("message")||FT.isEmpty(e.message))return Su.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||FT.isEmpty(e.message.originator))return Su.MISSING_ORIGIN;if(Q2.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Su.INVALID_EVENT(e.type)}a(hD,"validateEvent");function eJ(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(eJ,"SchemaEventMsg");function tJ(e){this.originator=e}a(tJ,"UserEventMsg")});var di=T((rSe,gD)=>{"use strict";var mD=D(),tSe=K(),kf=x(),SD=Fw(),Sc,{sendItcEvent:TD}=is();function rJ(e){try{kf.trace("signalSchemaChange called with message:",e),Sc=Sc||mu();let t=new SD(mD.ITC_EVENT_TYPES.SCHEMA,e);return Sc.schema(t),TD(t)}catch(t){kf.error(t)}}a(rJ,"signalSchemaChange");function nJ(e){try{kf.trace("signalUserChange called with message:",e),Sc=Sc||mu();let t=new SD(mD.ITC_EVENT_TYPES.USER,e);return Sc.user(t),TD(t)}catch(t){kf.error(t)}}a(nJ,"signalUserChange");gD.exports={signalSchemaChange:rJ,signalUserChange:nJ}});var $f=T((sSe,AD)=>{"use strict";var RD=K(),sJ=D(),iJ=x(),oJ=mf(),aJ=pf(),cJ=di(),{SchemaEventMsg:lJ}=is(),uJ="already exists in";AD.exports=_J;async function _J(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 dJ(e,t.schema,t.name,i)})),s}a(_J,"lmdbCheckForNewAttributes");async function dJ(e,t,r,n){let s=new aJ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await fJ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(uJ))iJ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(dJ,"createNewAttribute");async function fJ(e){let t;return t=await oJ(e),cJ.signalSchemaChange(new lJ(process.pid,sJ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(fJ,"createAttribute")});var Tc=T((oSe,OD)=>{"use strict";var kT=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=kT});var ND=T((cSe,bD)=>{"use strict";var EJ=Tc(),hJ=D().OPERATIONS_ENUM,$T=class extends EJ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(hJ.INSERT,r,n,s,i),this.records=t}};bD.exports=$T});var ID=T((uSe,yD)=>{"use strict";var pJ=Tc(),mJ=D().OPERATIONS_ENUM,VT=class extends pJ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(mJ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};yD.exports=VT});var CD=T((dSe,wD)=>{"use strict";var SJ=Tc(),TJ=D().OPERATIONS_ENUM,YT=class extends SJ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(TJ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};wD.exports=YT});var LD=T((ESe,DD)=>{"use strict";var gJ=Tc(),RJ=D().OPERATIONS_ENUM,KT=class extends gJ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(RJ.DELETE,n,s,t,i),this.original_records=r}};DD.exports=KT});var Tu=T((mSe,vD)=>{"use strict";var pSe=require("path"),PD=Ve(),AJ=ND(),OJ=ID(),bJ=CD(),NJ=LD(),gc=at(),MD=K(),{CONFIG_PARAMS:yJ}=D(),UD=X();UD.initSync();var Vf=D().OPERATIONS_ENUM,{getTransactionAuditStorePath:IJ}=je();vD.exports=wJ;async function wJ(e,t){if(UD.get(yJ.LOGGING_AUDITLOG)===!1)return;let r=IJ(e.schema,e.table),n=await PD.openEnvironment(r,e.table,!0),s=CJ(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(wJ,"writeTransaction");function CJ(e,t){let r=MD.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Vf.INSERT)return new AJ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vf.UPDATE)return new OJ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vf.UPSERT)return new bJ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Vf.DELETE)return new NJ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(CJ,"createTransactionObject")});var WT=T((gSe,BD)=>{"use strict";var DJ=uu(),TSe=_u(),gu=D(),LJ=du(),PJ=Jo().insertRecords,MJ=Ve(),UJ=x(),vJ=$f(),{getSchemaPath:BJ}=je(),HJ=Tu();BD.exports=GJ;async function GJ(e){try{let{schema_table:t,attributes:r}=DJ(e);LJ(e,r,t.hash_attribute),e.schema!==gu.SYSTEM_SCHEMA_NAME&&(r.includes(gu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(gu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(gu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(gu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await vJ(e.hdb_auth_header,t,r),s=BJ(e.schema,e.table),i=await MJ.openEnvironment(s,e.table),o=await PJ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await HJ(e,o)}catch(c){UJ.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(GJ,"lmdbCreateRecords")});var qD=T((ASe,GD)=>{"use strict";var HD=D(),qJ=WT(),xJ=_u(),FJ=require("fs-extra"),{getSchemaPath:kJ}=je();GD.exports=$J;async function $J(e){let t=[{name:e.schema,createddate:Date.now()}],r=new xJ(HD.SYSTEM_SCHEMA_NAME,HD.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await qJ(r),await FJ.mkdirp(kJ(e.schema))}a($J,"lmdbCreateSchema")});var FD=T((bSe,xD)=>{"use strict";var QT=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=QT});var YD=T((CSe,VD)=>{"use strict";var kD=Ve(),jT=gr(),zT=Jr().LMDB_ERRORS_ENUM,VJ=at(),$D=x(),ySe=K(),YJ=require("lmdb"),KJ=FD(),WJ=D(),{OVERFLOW_MARKER:ISe,MAX_SEARCH_KEY_LENGTH:wSe}=VJ,QJ=WJ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function jJ(e,t,r,n){if(jT.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=kD.listDBIs(e);kD.initializeDBIs(e,t,s);let i=new KJ,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[QJ]>n){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,YJ.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let g=s[S];if(!h.hasOwnProperty(g)||g===t)continue;let R=e.dbis[g],A=h[g];if(A!=null)try{let P=jT.getIndexedValues(A);if(P)for(let U=0,v=P.length;U<v;U++)R.remove(P[U],o)}catch{$D.warn(`cannot delete from attribute: ${g}, ${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=jT.getNextMonotonicTime(),i}catch(s){throw s}}a(jJ,"deleteRecords");VD.exports={deleteRecords:jJ}});var Ru=T((LSe,WD)=>{"use strict";var Rc=K(),zJ=YD(),JJ=Ve(),{getSchemaPath:XJ}=je(),ZJ=Tu(),e4=x();WD.exports=t4;async function t4(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=XJ(e.schema,e.table),i=await JJ.openEnvironment(s,e.table),o=await zJ.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await ZJ(e,o)}catch(c){e4.error(`unable to write transaction due to ${c.message}`)}return KD(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(t4,"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 XT=T((USe,QD)=>{"use strict";var r4=D(),MSe=gr();function JT(e,t){let r=Object.create(null);if(t.length===1&&r4.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(JT,"parseRow");function n4(e,t,r,n){let s=JT(r,e);n.push(s)}a(n4,"searchAll");function s4(e,t,r,n){let s=JT(r,e);n[t]=s}a(s4,"searchAllToMap");function i4(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(i4,"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 o4(e,t,r,n,s,i){t.toString().endsWith(e)&&la(t,r,n,s,i)}a(o4,"endsWith");function a4(e,t,r,n,s,i){t.toString().includes(e)&&la(t,r,n,s,i)}a(a4,"contains");function c4(e,t,r,n,s,i){t>e&&la(t,r,n,s,i)}a(c4,"greaterThanCompare");function l4(e,t,r,n,s,i){t>=e&&la(t,r,n,s,i)}a(l4,"greaterThanEqualCompare");function u4(e,t,r,n,s,i){t<e&&la(t,r,n,s,i)}a(u4,"lessThanCompare");function _4(e,t,r,n,s,i){t<=e&&la(t,r,n,s,i)}a(_4,"lessThanEqualCompare");QD.exports={parseRow:JT,searchAll:n4,searchAllToMap:s4,iterateDBI:i4,endsWith:o4,contains:a4,greaterThanCompare:c4,greaterThanEqualCompare:l4,lessThanCompare:u4,lessThanEqualCompare:_4,pushResults:la}});var Ac=T((qSe,tL)=>{"use strict";var oo=Ve(),BSe=x(),on=gr(),Yf=at(),ht=Jr().LMDB_ERRORS_ENUM,HSe=K(),d4=D(),Kf=XT(),{parseRow:f4}=Kf,GSe=require("lmdb"),{OVERFLOW_MARKER:jD,MAX_SEARCH_KEY_LENGTH:E4}=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 Au(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 R={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?(R.values=!1,d.getRange(R).map(A=>({value:A}))):d.getRange(R)})}a(Au,"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 h4(e,t,r,n=!1,s=void 0,i=void 0){if(on.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return ua(e,t,t,(o,c,l)=>(Wf(r),r=Ou(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>f4(_.value,r))))}a(h4,"searchAll");function p4(e,t,r,n=!1,s=void 0,i=void 0){if(on.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);Wf(r),r=Ou(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(p4,"searchAllToMap");function m4(e,t,r=!1,n=void 0,s=void 0){if(on.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(m4,"iterateDBI");function S4(e,t){if(on.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return oo.statDBI(e,t).entryCount}a(S4,"countAll");function T4(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=on.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(T4,"equals");function g4(e,t,r){return ao(e,t,r),oo.openDBI(e,t).getValuesCount(r)}a(g4,"count");function R4(e,t,r,n,s=!1,i=void 0,o=void 0){return ao(e,r,n),ua(e,null,r,(c,l)=>{n=on.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(R4,"startsWith");function A4(e,t,r,n,s=!1,i=void 0,o=void 0){return XD(e,t,r,n,s,i,o,!0)}a(A4,"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 O4(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),Au(e,t,r,n,l,s,i,o,!0,!1)}a(O4,"greaterThan");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),Au(e,t,r,n,l,s,i,o,!1,!1)}a(b4,"greaterThanEqual");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="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Au(e,t,r,l,n,s,i,o,!1,!0)}a(N4,"lessThan");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),Au(e,t,r,l,n,s,i,o,!1,!1)}a(y4,"lessThanEqual");function I4(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(on.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=on.convertKeyValueToWrite(n),s=on.convertKeyValueToWrite(s),n>s)throw new Error(ht.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Au(e,t,r,n,s,i,o,c)}a(I4,"between");function w4(e,t,r,n){on.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=Ou(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(w4,"searchByHash");function C4(e,t,r){on.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(C4,"checkHashExists");function D4(e,t,r,n,s=[]){return eL(e,t,r,n,s),ZD(e,t,r,n,s).map(i=>i[1])}a(D4,"batchSearchByHash");function L4(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(L4,"batchSearchByHashToMap");function ZD(e,t,r,n,s=[]){return ua(e,t,t,(i,o,c)=>{r=Ou(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(on.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(on.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>E4)throw new Error(ht.SEARCH_VALUE_TOO_LARGE)}a(ao,"validateComparisonFunctions");function Ou(e,t){return t.length===1&&d4.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=oo.listDBIs(e)),t}a(Ou,"setGetWholeRowAttributes");tL.exports={searchAll:h4,searchAllToMap:p4,count:g4,countAll:S4,equals:T4,startsWith:R4,endsWith:A4,contains:XD,searchByHash:w4,setGetWholeRowAttributes:Ou,batchSearchByHash:D4,batchSearchByHashToMap:L4,checkHashExists:C4,iterateDBI:m4,greaterThan:O4,greaterThanEqual:b4,lessThan:N4,lessThanEqual:y4,between:I4}});var Oc=T((FSe,oL)=>{var rL=require("lodash"),nL=tt(),he=require("joi"),P4=K(),{hdb_schema_table:bu,checkValidTable:sL,hdb_table:iL,hdb_database:Qf}=ws(),{handleHDBError:M4,hdb_errors:U4}=oe(),{getDatabases:v4}=(ge(),ie(ke)),{HTTP_STATUS_CODES:B4}=U4,H4=he.object({database:Qf,schema:Qf,table:iL,search_attribute:bu,search_value:he.any().required(),get_attributes:he.array().min(1).items(he.alternatives(bu,he.object())).optional(),desc:he.bool(),limit:he.number().integer().min(1),offset:he.number().integer().min(0)}),G4=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(bu,he.object())).optional(),sort:he.object({attribute:he.alternatives(bu,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(bu,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,H4);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,G4);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=P4.checkGlobalSchemaTable(e.schema,e.table);if(s)return M4(new Error,s,B4.NOT_FOUND);let o=v4()[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 ZT=T(($Se,aL)=>{"use strict";var q4=Ve(),x4=Oc(),{getSchemaPath:F4}=je();aL.exports=k4;function k4(e){let t=x4(e,"hashes");if(t)throw t;let r=F4(e.schema,e.table);return q4.openEnvironment(r,e.table)}a(k4,"initialize")});var eg=T((YSe,cL)=>{"use strict";var $4=Ac(),V4=ZT();cL.exports=Y4;async function Y4(e){let t=await V4(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return $4.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Y4,"lmdbGetDataByHash")});var bc=T((WSe,lL)=>{"use strict";var tg=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=tg});var _L=T((zSe,uL)=>{"use strict";var jSe=bc(),K4=Ac(),W4=ZT();uL.exports=Q4;async function Q4(e){let t=await W4(e),r=global.hdb_schema[e.schema][e.table];return K4.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Q4,"lmdbSearchByHash")});var os=T((XSe,dL)=>{"use strict";var rg=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=rg});var jf=T((eTe,SL)=>{"use strict";var cr=Ac(),j4=Ve(),z4=K(),pe=at(),_a=D(),J4=ci(),fL=Jr().LMDB_ERRORS_ENUM,{getSchemaPath:X4}=je(),fi=_a.SEARCH_WILDCARDS;async function Z4(e,t,r){let n;e.schema===_a.SYSTEM_SCHEMA_NAME?n=J4[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(Z4,"prepSearch");async function hL(e,t,r,n){let s=X4(e.schema,e.table),i=await j4.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(e3(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?cr.batchSearchByHashToMap(c,r,e.get_attributes,_):cr.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=cr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.CONTAINS:s=cr.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=cr.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=cr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return cr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return cr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.SEARCH_ALL:return cr.searchAll(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return cr.searchAllToMap(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.BETWEEN:s=cr.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=cr.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=cr.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=cr.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=cr.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 e3(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(e3,"checkToFetchMore");function mL(e,t,r,n){if(z4.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:Z4,searchByType:pL}});var gL=T((nTe,TL)=>{"use strict";var rTe=os(),t3=Oc(),r3=K(),n3=D(),s3=jf();TL.exports=i3;function i3(e,t){if(!r3.isEmpty(t)&&n3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=t3(e,"value");if(n)throw n;return s3.prepSearch(e,t,!0)}a(i3,"lmdbGetDataByValue")});var Nu=T((oTe,RL)=>{"use strict";var iTe=os(),o3=Oc(),a3=K(),c3=D(),l3=jf();RL.exports=u3;async function u3(e,t){if(!a3.isEmpty(t)&&c3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=o3(e,"value");if(n)throw n;return l3.prepSearch(e,t,!1)}a(u3,"lmdbSearchByValue")});var OL=T((lTe,AL)=>{"use strict";var cTe=at(),ng=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}},sg=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},ig=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};AL.exports={SearchByConditionsObject:ng,SearchCondition:sg,SortAttribute:ig}});var wL=T((fTe,IL)=>{"use strict";var _Te=OL().SearchByConditionsObject,_3=os(),d3=Oc(),og=Ac(),zf=at(),{Resource:dTe}=(es(),ie(ag)),yL=jf(),f3=XT(),E3=require("lodash"),{getSchemaPath:h3}=je(),bL=Ve(),{handleHDBError:p3,hdb_errors:m3}=oe(),{HTTP_STATUS_CODES:S3}=m3,T3=1e8;IL.exports=g3;async function g3(e){let t=d3(e,"conditions");if(t)throw p3(t,t.message,S3.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=h3(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=E3.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===zf.SEARCH_TYPES.EQUALS?_.estimated_count=og.count(n,_.search_attribute,_.search_value):u===zf.SEARCH_TYPES.CONTAINS||u===zf.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=T3}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=og.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=>f3.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=og.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(g3,"lmdbSearchByConditions");async function NL(e,t,r,n){let s=new _3(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 yu=T((hTe,CL)=>{"use strict";var R3=D().OPERATIONS_ENUM,cg=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=R3.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};CL.exports=cg});var lg=T((mTe,HL)=>{"use strict";var ML=os(),UL=yu(),vL=Nu(),BL=Ru(),Ir=D(),DL=K(),LL=Ve(),{getTransactionAuditStorePath:A3,getSchemaPath:O3}=je(),PL=x();HL.exports=b3;async function b3(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 N3(e),await y3(e);let t=O3(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=A3(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(b3,"lmdbDropTable");async function N3(e){let t=new ML(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ir.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ir.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(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await BL(s)}a(N3,"deleteAttributesFromSystem");async function y3(e){let t=new ML(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ir.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ir.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ir.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ir.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(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await BL(s)}catch(i){throw i}}a(y3,"dropTableFromSystem")});var qL=T((TTe,GL)=>{"use strict";var I3=require("fs-extra"),w3=os(),C3=bc(),D3=yu(),L3=lg(),P3=Ru(),M3=eg(),U3=Nu(),Ei=D(),{getSchemaPath:v3}=je(),{handleHDBError:B3,hdb_errors:H3}=oe(),{HDB_ERROR_MSGS:G3,HTTP_STATUS_CODES:q3}=H3;GL.exports=x3;async function x3(e){let t;try{t=await F3(e.schema);let r=new w3(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 U3(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await L3(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new D3(Ei.SYSTEM_SCHEMA_NAME,Ei.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await P3(s);let i=v3(t);await I3.remove(i)}catch(r){throw r}}a(x3,"lmdbDropSchema");async function F3(e){let t=new C3(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 M3(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw B3(new Error,G3.SCHEMA_NOT_FOUND(e),q3.NOT_FOUND,void 0,void 0,!0);return n}a(F3,"validateDropSchema")});var Iu=T((RTe,xL)=>{"use strict";var ug=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};xL.exports=ug});var dg=T((bTe,FL)=>{"use strict";var k3=require("fs-extra"),Jf=Ve(),{getTransactionAuditStorePath:$3}=je(),_g=at(),OTe=Iu();FL.exports=V3;async function V3(e){let t;try{let r=$3(e.schema,e.table);await k3.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,_g.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Jf.createDBI(t,_g.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Jf.createDBI(t,_g.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(V3,"createTransactionsAuditEnvironment")});var YL=T((yTe,VL)=>{"use strict";var fg=D(),kL=Ve(),Y3=Jo(),{getSystemSchemaPath:K3,getSchemaPath:W3}=je(),Q3=ci(),j3=mf(),Eg=pf(),z3=x(),J3=dg(),pg=Q3.hdb_table,$L=[];for(let e=0;e<pg.attributes.length;e++)$L.push(pg.attributes[e].attribute);VL.exports=X3;async function X3(e,t){let r=W3(t.schema,t.table),n=new Eg(t.schema,t.table,fg.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Eg(t.schema,t.table,fg.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Eg(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(K3(),fg.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Y3.insertRecords(o,pg.hash_attribute,$L,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await hg(n),await hg(s),await hg(i)}await J3(t)}catch(o){throw o}}a(X3,"lmdbCreateTable");async function hg(e){try{await j3(e)}catch(t){z3.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(hg,"createAttribute")});var WL=T((wTe,KL)=>{"use strict";var Z3=uu(),eX=du(),tX=$f(),wu=D(),rX=Jo().updateRecords,nX=Ve(),{getSchemaPath:sX}=je(),iX=Tu(),oX=x();KL.exports=aX;async function aX(e){try{let{schema_table:t,attributes:r}=Z3(e);eX(e,r,t.hash_attribute),e.schema!==wu.SYSTEM_SCHEMA_NAME&&(r.includes(wu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(wu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(wu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(wu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await tX(e.hdb_auth_header,t,r),s=sX(e.schema,e.table),i=await nX.openEnvironment(s,e.table),o=await rX(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await iX(e,o)}catch(c){oX.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(aX,"lmdbUpdateRecords")});var jL=T((DTe,QL)=>{"use strict";var cX=D().OPERATIONS_ENUM,mg=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=cX.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};QL.exports=mg});var JL=T((MTe,zL)=>{"use strict";var PTe=jL(),lX=uu(),uX=du(),_X=$f(),Cu=D(),dX=Jo().upsertRecords,fX=Ve(),{getSchemaPath:EX}=je(),hX=Tu(),pX=x(),{handleHDBError:mX,hdb_errors:SX}=oe();zL.exports=TX;async function TX(e){let t;try{t=lX(e)}catch(l){throw mX(l,l.message,SX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;uX(e,n,r.hash_attribute),e.schema!==Cu.SYSTEM_SCHEMA_NAME&&(n.includes(Cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await _X(e.hdb_auth_header,r,n),i=EX(e.schema,e.table),o=await fX.openEnvironment(i,e.table),c=await dX(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await hX(e,c)}catch(l){pX.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(TX,"lmdbUpsertRecords")});var ZL=T((vTe,XL)=>{"use strict";var Sg=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};XL.exports=Sg});var tP=T((HTe,eP)=>{"use strict";var Tg=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=Tg});var sP=T((xTe,nP)=>{"use strict";var gg=Ve(),{getTransactionAuditStorePath:gX}=je(),qTe=ZL(),Du=at(),RX=K(),rP=tP(),AX=require("util").promisify,OX=AX(setTimeout),bX=1e4,NX=100;nP.exports=yX;async function yX(e){let t=gX(e.schema,e.table),r=await gg.openEnvironment(t,e.table,!0),n=gg.listDBIs(r);gg.initializeDBIs(r,Du.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new rP;do s=await IX(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 OX(NX);while(s.transactions_deleted>0);return i}a(yX,"deleteAuditLogsBefore");async function IX(e,t){let r=new rP;try{let n=e.dbis[Du.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[Du.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];RX.isEmpty(c)||(s=e.dbis[Du.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Du.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>bX)break}return await s,r}catch(n){throw n}}a(IX,"deleteTransactions")});var oP=T((kTe,iP)=>{"use strict";var Rg=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};iP.exports=Rg});var cP=T((YTe,aP)=>{"use strict";var wX=os(),CX=yu(),VTe=oP(),Ms=D(),DX=K(),Ag=Ve(),LX=ci(),PX=Nu(),MX=Ru(),{getSchemaPath:UX}=je();aP.exports=vX;async function vX(e,t=!0){let r;e.schema===Ms.SYSTEM_SCHEMA_NAME?r=LX[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await HX(e),s=UX(e.schema,e.table),i=await Ag.openEnvironment(s,e.table);return t===!0&&await BX(e,i,r.hash_attribute),Ag.dropDBI(i,e.attribute),n}a(vX,"lmdbDropAttribute");async function BX(e,t,r){let n=Ag.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(BX,"removeAttributeFromAllObjects");async function HX(e){let t=new wX(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 PX(t)).filter(o=>o[Ms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(DX.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 CX(Ms.SYSTEM_SCHEMA_NAME,Ms.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return MX(i)}a(HX,"dropAttributeFromSystem")});var EP=T((QTe,fP)=>{"use strict";var Og=Ve(),Nc=at(),WTe=gr(),bg=D(),lP=K(),{getTransactionAuditStorePath:GX}=je(),qX=Ac(),Xf=Tc(),xX=x();fP.exports=FX;async function FX(e){let t=GX(e.schema,e.table),r=await Og.openEnvironment(t,e.table,!0),n=Og.listDBIs(r);Og.initializeDBIs(r,Nc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case bg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return uP(r,e.search_values);case bg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,$X(r,e.search_values,s);case bg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return kX(r,e.search_values);default:return uP(r)}}a(FX,"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 kX(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(kX,"searchTransactionsByUsername");function $X(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=qX.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($X,"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){xX.warn(i)}return r}catch(n){throw n}}a(dP,"batchSearchTransactions")});var pP=T((XTe,hP)=>{"use strict";var{getSchemaPath:zTe}=je(),JTe=Ve(),{database:VX}=(ge(),ie(ke));hP.exports={writeTransaction:YX};async function YX(e,t,r){return VX({database:e,table:t}).transaction(r)}a(YX,"writeTransaction")});var gP=T((ege,TP)=>{"use strict";var{getSchemaPath:mP}=je(),SP=Ve();TP.exports={flush:KX,resetReadTxn:WX};async function KX(e,t){return(await SP.openEnvironment(mP(e,t),t.toString())).flushed}a(KX,"flush");async function WX(e,t){try{(await SP.openEnvironment(mP(e,t),t.toString())).resetReadTxn()}catch{}}a(WX,"resetReadTxn")});var bP=T((rge,OP)=>{"use strict";var{Readable:QX}=require("stream"),{getDatabases:jX}=(ge(),ie(ke)),{readSync:zX,openSync:JX,createReadStream:RP}=require("fs"),{open:XX}=require("lmdb"),AP=nu(),ZX=su(),{AUDIT_STORE_OPTIONS:eZ}=(Zi(),ie(NP)),{INTERNAL_DBIS_NAME:tZ,AUDIT_STORE_NAME:rZ}=at();OP.exports=sZ;var Ng=32768,nZ=100;async function sZ(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=XX({noSync:!0,maxDbs:ZX.MAX_DBS}),f,E=d.openDB(tZ,new AP(!1)),h=u.useReadTransaction(),m=0,S=a(async function(R,A){A.encoding="binary",A.encoder=void 0;let P=d.openDB(R,A),U=u.openDB(R,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++%nZ===0&&(await new Promise(j=>setTimeout(j,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:R,value:A}of u.getRange({transaction:h,start:!1}))if(s.some(P=>R.startsWith?.(P+"/"))){E.put(R,A);let[,P]=R.split("/"),U=!P,v=new AP(!U,U);await S(R,v)}e.include_audit&&await S(rZ,Object.assign({},eZ)),await f;let g=RP(d.path);return g.headers=l(),g.on("close",()=>{h.done(),d.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=JX(o.path);return o.transaction(()=>{let _=Buffer.alloc(Ng);zX(c,_,0,Ng),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=RP(null,{fd:c,start:Ng}),f=new QX.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(sZ,"getBackup")});var wP=T((sge,IP)=>{"use strict";var iZ=x(),{handleHDBError:oZ}=oe(),aZ=$I(),cZ=mf(),lZ=WT(),uZ=qD(),_Z=Ru(),dZ=eg(),fZ=_L(),EZ=gL(),hZ=Nu(),pZ=wL(),mZ=qL(),SZ=YL(),TZ=WL(),gZ=JL(),RZ=sP(),AZ=lg(),OZ=cP(),bZ=EP(),NZ=pP(),yP=gP(),yZ=bP(),yg=class extends aZ{static{a(this,"LMDBBridge")}async searchByConditions(t){return pZ(t)}async getDataByHash(t){return await dZ(t)}async searchByHash(t){return await fZ(t)}async getDataByValue(t,r){return await EZ(t,r)}async searchByValue(t){return await hZ(t)}async createSchema(t){return await uZ(t)}async dropSchema(t){return await mZ(t)}async createTable(t,r){return await SZ(t,r)}async dropTable(t){return await AZ(t)}async createAttribute(t){return await cZ(t)}async createRecords(t){return await lZ(t)}async updateRecords(t){return await TZ(t)}async upsertRecords(t){try{return await gZ(t)}catch(r){throw oZ(r,null,null,iZ.ERR,r)}}async deleteRecords(t){return await _Z(t)}async dropAttribute(t){return await OZ(t)}async deleteAuditLogsBefore(t){return await RZ(t)}async readAuditLog(t){return await bZ(t)}writeTransaction(t,r,n){return NZ.writeTransaction(t,r,n)}flush(t,r){return yP.flush(t,r)}resetReadTxn(t,r){return yP.resetReadTxn(t,r)}getBackup(t){return yZ(t)}};IP.exports=yg});function LZ(){DZ=setInterval(function(){for(let e of Ig)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},CZ).unref()}var wg,DP,LP,IZ,Ig,wZ,Lu,CP,da,Zf,CZ,DZ,Cg=Oe(()=>{wg=B(gr()),DP=B(oe()),LP=B(x());es();IZ=100,Ig=new Set,wZ=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),Ig.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Ig.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Lu&&performance.now()-CP>wZ)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,wg.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 g=S();E?E.push?E.push(g):E=[E,g]:E=g}}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<IZ>>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 Lu||(Lu=s,CP=performance.now(),Lu.then(()=>{Lu=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,wg.getNextMonotonicTime)())}getReadTxn(){}},CZ=3e4;a(LZ,"startMonitoringTxns");LZ()});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();Cg();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:()=>Pg});function Mg({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=Mg(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||MZ,r=wr()[t];if(!r)throw(0,as.handleHDBError)(new Error,PZ.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,Dg,Lg,xP,PZ,MZ,UZ,vZ,MP,Pg,kP=Oe(()=>{"use strict";HP=B(wP()),eE=B(Oc()),as=B(oe());ge();GP=B(uu()),qP=B(du()),cs=B(D()),Dg=B(di()),Lg=B(is()),xP=B(K());fa();rE();({HDB_ERROR_MSGS:PZ}=as.hdb_errors),MZ="data",UZ=1e4,vZ=10,Pg=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:Mg(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 Pu({database:t.schema,table:null}),Dg.signalSchemaChange(new Lg.SchemaEventMsg(process.pid,cs.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Ug(t.schema),Dg.signalSchemaChange(new Lg.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=wr()[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=wr()[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=wr()[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)(vZ),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%UZ===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:Mg(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(Mg,"getSelect");a(UP,"getRecords");a(Us,"getTable");a(vP,"createDeleteResponse");a(BP,"groupRecordsInHistory")});var Mn=T((Tge,$P)=>{"use strict";var{ResourceBridge:BZ}=(kP(),ie(FP)),HZ=X();HZ.initSync();var nE;function GZ(){return nE||(nE=new BZ,nE)}a(GZ,"getBridge");$P.exports=GZ()});var WP=T((Rge,KP)=>{"use strict";var VP=require("lodash"),Mu=require("mathjs"),qZ=require("jsonata"),YP=K();KP.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?VP.uniqWith(e,VP.isEqual):e,searchJSON:xZ,mad:Uu.bind(null,Mu.mad),mean:Uu.bind(null,Mu.mean),mode:Uu.bind(null,Mu.mode),prod:Uu.bind(null,Mu.prod),median:Uu.bind(null,Mu.median)};function Uu(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(Uu,"aggregateFunction");function xZ(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=qZ(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(xZ,"searchJSON")});var jP=T((Oge,QP)=>{"use strict";var Ot=require("moment"),vg="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(vg),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(vg),offset_utc:(e,t)=>Ot(e).utc().utcOffset(t).format(vg)}});var ZP=T((bge,XP)=>{"use strict";var FZ=require("@turf/area"),kZ=require("@turf/length"),$Z=require("@turf/circle"),VZ=require("@turf/difference"),YZ=require("@turf/distance"),KZ=require("@turf/boolean-contains"),WZ=require("@turf/boolean-equal"),QZ=require("@turf/boolean-disjoint"),jZ=require("@turf/helpers"),zP=D(),Re=K(),hi=x();XP.exports={geoArea:zZ,geoLength:JZ,geoCircle:XZ,geoDifference:ZZ,geoDistance:JP,geoNear:e5,geoContains:t5,geoEqual:r5,geoCrosses:n5,geoConvert:s5};function zZ(e){if(Re.isEmpty(e))return NaN;typeof e=="string"&&(e=Re.autoCastJSON(e));try{return FZ.default(e)}catch(t){return hi.trace(t,e),NaN}}a(zZ,"geoArea");function JZ(e,t){if(Re.isEmpty(e))return NaN;typeof e=="string"&&(e=Re.autoCastJSON(e));try{return kZ.default(e,{units:t||"kilometers"})}catch(r){return hi.trace(r,e),NaN}}a(JZ,"geoLength");function XZ(e,t,r){if(Re.isEmpty(e))return NaN;if(Re.isEmpty(t))return NaN;typeof e=="string"&&(e=Re.autoCastJSON(e));try{return $Z.default(e,t,{units:r||"kilometers"})}catch(n){return hi.trace(n,e,t),NaN}}a(XZ,"geoCircle");function ZZ(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 VZ(e,t)}catch(r){return hi.trace(r,e,t),NaN}}a(ZZ,"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 YZ.default(e,t,{units:r||"kilometers"})}catch(n){return hi.trace(n,e,t),NaN}}a(JP,"geoDistance");function e5(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(e5,"geoNear");function t5(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 KZ.default(e,t)}catch(r){return hi.trace(r,e,t),!1}}a(t5,"geoContains");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,"geoEqual");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,"geoCrosses");function s5(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)),jZ[t](e,r)}a(s5,"geoConvert")});var sE=T((yge,eM)=>{var Ea=WP(),an=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=an.current_date,e.fn.current_time=e.fn.CURRENT_TIME=an.current_time,e.fn.extract=e.fn.EXTRACT=an.extract,e.fn.date=e.fn.DATE=an.date,e.fn.date_format=e.fn.DATE_FORMAT=an.date_format,e.fn.date_add=e.fn.DATE_ADD=an.date_add,e.fn.date_sub=e.fn.DATE_SUB=an.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=an.date_diff,e.fn.now=e.fn.NOW=an.now,e.fn.offset_utc=e.fn.OFFSET_UTC=an.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=an.get_server_time,e.fn.getdate=e.fn.GETDATE=an.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=an.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((Ige,nM)=>{"use strict";var vu=require("lodash"),Cr=require("alasql");Cr.options.cache=!1;var i5=sE(),tM=require("clone"),iE=require("recursive-iterator"),de=x(),Pe=K(),yc=Mn(),o5=D(),{hdb_errors:a5}=oe(),{getDatabases:rM}=(ge(),ie(ke)),c5="IS NULL",ls="There was a problem performing this search. Please check the logs and try again.";i5(Cr);var Bg=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=vu.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 Cr.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 Cr.yy.LogicValue({value:i}):n instanceof Cr.yy.StringValue&&Pe.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Cr.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(o5.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&&vu.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 Cr.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(c5)>-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=vu.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 Cr.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 Cr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Cr.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 Cr.yy.FuncValue:new Cr.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 Cr.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=vu.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,g=m.length;S<g;S++){let R=m[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[R]}})}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=vu.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 Cr.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(a5.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=Bg});var sr=T((Cge,iM)=>{"use strict";var l5=FI();iM.exports={searchByConditions:_5,searchByHash:d5,searchByValue:f5,search:E5};var Hg=Mn(),{transformReq:Gg}=K(),u5=sM();async function _5(e){return Gg(e),Hg.searchByConditions(e)}a(_5,"searchByConditions");async function d5(e){Gg(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Hg.searchByHash(e))r&&t.push(r);return t}a(d5,"searchByHash");async function f5(e){Gg(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Hg.searchByValue(e))t.push(r);return t}a(f5,"searchByValue");function E5(e,t){try{let r=new l5(e);r.validate(),new u5(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(E5,"search")});var oE=T((Lge,oM)=>{"use strict";var h5=Mn();oM.exports={writeTransaction:p5};function p5(e,t,r){return h5.writeTransaction(e,t,r)}a(p5,"writeTransaction")});var uM=T((Uge,lM)=>{"use strict";var m5=sr(),S5=Pn(),aM=x(),T5=br(),Mge=oE(),g5=require("clone"),xg=require("alasql"),R5=sE(),cM=require("util"),A5=cM.promisify(S5.getTableSchema),O5=cM.promisify(m5.search),b5=D(),qg=K();R5(xg);lM.exports={update:y5};var N5="There was a problem performing this update. Please check the logs and try again.";async function y5({statement:e,hdb_user:t}){let r=await A5(e.table.databaseid,e.table.tableid),n=I5(e.columns);qg.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=g5(s),c=qg.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=xg.parse(l).statements[0],u=await O5(_),d=w5(n,u);return C5(o,d,t)}a(y5,"update");function I5(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=xg.compile(`SELECT ${r.expression.toString()} AS [${b5.FUNC_VAL}] FROM ?`)}),t}catch(t){throw aM.error(t),new Error(N5)}}a(I5,"createUpdateRecord");function w5(e,t){return qg.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(w5,"buildUpdateRecords");async function C5(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await T5.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(C5,"updateRecords")});var dM=T((Gge,_M)=>{var D5=require("alasql"),L5=sr(),P5=x(),M5=Mn(),kg=require("util"),Fg=K(),U5=D(),v5=Pn(),Bge=oE(),Hge=br(),B5="record",H5="successfully deleted",G5=kg.callbackify(k5),q5=kg.promisify(L5.search),x5=kg.promisify(v5.getTableSchema);_M.exports={convertDelete:G5};function F5(e){return`${e.deleted_hashes.length} ${B5}${e.deleted_hashes.length===1?"":"s"} ${H5}`}a(F5,"generateReturnMessage");async function k5({statement:e,hdb_user:t}){let r=await x5(e.table.databaseid,e.table.tableid);Fg.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Fg.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=D5.parse(o).statements[0],l={operation:U5.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await q5(c);let _=await M5.deleteRecords(l);return Fg.isEmptyOrZeroLength(_.message)&&(_.message=F5(_)),delete _.txn_time,_}catch(_){throw P5.error(_),_.hdb_code?_.message:_}}a(k5,"convertDelete")});var mM=T((xge,pM)=>{"use strict";var $5=_i(),{hdb_errors:fM}=oe(),{getDatabases:EM}=(ge(),ie(ke));pM.exports={checkSchemaExists:hM,checkSchemaTableExists:V5,schema_describe:$5};async function hM(e){if(!EM()[e])return fM.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(hM,"checkSchemaExists");async function V5(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(V5,"checkSchemaTableExists")});var ha=T((kge,Y5)=>{Y5.exports={name:"harperdb",version:"4.3.2",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.3",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 xu={};Fe(xu,{addAnalyticsListener:()=>qu,recordAction:()=>cn,recordActionBinary:()=>Un,setAnalyticsEnabled:()=>K5});function K5(e){yM=e}function cn(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||W5()}function Un(e,t,r,n,s){cn(!!e,t,r,n,s)}function qu(e){CM.push(e)}function W5(){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 Q5(e,t=6e4){let r=Yg(),n=PM(),s=new Promise(m=>{let S=performance.now();setImmediate(()=>{let g=performance.now();g-S>5e3&&(0,Bu.warn)("Unusually high event queue latency on the main thread of "+Math.round(g-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let g=performance.now();g-S>5e3&&(0,Bu.warn)("Unusually high task queue latency on the main thread of "+Math.round(g-S)+"ms"),m(g-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:g,threadId:R}=S;for(let A of g||[]){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[R];if(Ge)Ee=Ge;else{Ee.threads[R]=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[R]=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:g,type:R,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 g=c.get(m);S.sort((Ge,Ft)=>Ge.value>Ft.value?1:-1);let R=g.count-1,A=[],P=0,U=0,v;for(let Ge of DM){let Ft=R*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(g,{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(g=>{g||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(g=>{g||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 Yg(){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 J5(){MM=!0;let e=(0,Gu.get)(Vg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Q5(IM,e),await gM(Yg(),j5),await gM(PM(),z5)},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)(),Yg().primaryStore.put(r.id,r),MM||J5(),X5&&(vM=e8(r))}async function e8(e){if(await vM,!co){let r=(0,Hu.dirname)((0,Bu.getLogFilePath)());try{co=await(0,$g.open)((0,Hu.join)(r,"analytics.log"),"r+")}catch{co=await(0,$g.open)((0,Hu.join)(r,"analytics.log"),"w+")}}let t=(await co.stat()).size;if(t>Z5){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,Bu,Hu,$g,cE,Gu,Vg,lE,yM,aE,IM,wM,CM,DM,SM,TM,LM,j5,z5,RM,AM,MM,OM,bM,X5,vM,co,Z5,pi=Oe(()=>{pa=require("worker_threads"),NM=B(et());ge();Bu=B(x()),Hu=require("path"),$g=require("fs/promises"),cE=B(gr()),Gu=B(X()),Vg=B(D());Rr();(0,Gu.initSync)();lE=new Map,yM=(0,Gu.get)(Vg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(K5,"setAnalyticsEnabled");a(cn,"recordAction");ct.recordAnalytics=cn;a(Un,"recordActionBinary");aE=0,IM=1e3,wM="analytics-report",CM=[];a(qu,"addAnalyticsListener");DM=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(W5,"sendAnalytics");a(Q5,"aggregation");SM=0,TM=0,LM=a(()=>new Promise(setImmediate),"rest");a(gM,"cleanup");j5=36e5,z5=31536e6;a(Yg,"getRawAnalyticsTable");a(PM,"getAnalyticsTable");(0,NM.setChildListenerByType)(wM,UM);a(J5,"startScheduledTasks");OM=0,bM=new Map,X5=!1;a(UM,"recordAnalytics");Z5=1e6;a(e8,"logAnalytics")});var Jg=T((tRe,YM)=>{"use strict";var{decode:t8}=require("msgpackr"),{isMainThread:Xge,parentPort:Zge,threadId:eRe}=require("worker_threads"),Fu=pt(),Ic=Xe(),Qg=D(),lr=x(),Wg=X(),r8=D(),{onMessageByType:n8}=et(),GM=ui(),{recordAction:s8,recordActionBinary:i8}=(pi(),ie(xu)),{publishToStream:o8}=Fu,{ConsumerEvents:BM}=require("nats"),a8=sr(),{promisify:c8}=require("util"),qM=c8(setTimeout),dE=1e4,fE,_E,l8,u8,xM,ku=new Map,wc=new Map;YM.exports={initialize:jg,ingestConsumer:zg,setSubscription:_8,setIgnoreOrigin:E8,getDatabaseSubscriptions:f8,updateConsumer:FM};async function jg(){n8(Qg.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await FM(n)}),xM=!0,lr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await Fu.getNATSReferences();fE=e,_E=e.info.server_name,l8=t,u8=r}a(jg,"initialize");async function FM(e){if(e.status==="start"){let{js:t,jsm:r}=await kM(e.node_domain_name);zg(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=ku.get(e.stream_name+e.node_domain_name);t&&(lr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),ku.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 _8(e,t,r){let n=EE.get(e);n||EE.set(e,n=new Map),n.set(t,r),xM||jg().then(d8)}a(_8,"setSubscription");async function d8(){let e=await a8.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);zg(l,n,s,r)}}}a(d8,"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&&lr.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 f8(){return EE}a(f8,"getDatabaseSubscriptions");var $M;function E8(e){$M=e}a(E8,"setIgnoreOrigin");var VM=100,HM=new Array(VM),uE=0;async function zg(e,t,r,n){let{connection:s}=await Fu.getNATSReferences();fE=s,_E=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,_E),lr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(wc.get(n)==="close")break;o%10===1&&lr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(lr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await Fu.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(ku.get(e+n)==="close"||wc.get(n)==="close"){ku.delete(e+n),c=!0;continue}l=await i.consume({max_messages:Wg.get(Qg.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100}),ku.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;lr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===2&&(lr.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]=h8(u).catch(d=>{lr.error(d)}),++uE>=VM&&(uE=0)}catch(u){u.message==="consumer deleted"?(lr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):lr.error("Error consuming clustering ingest, restarting consumer",u)}Fu.clearClientCache(),!c&&_&&await jg()}}a(zg,"ingestConsumer");async function h8(e){let t=t8(e.data);s8(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),lr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=Wg.get(Qg.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),i8(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;lr.trace("processing message:",o,c,_,(u?"records: "+u.map(P=>P?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),lr.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:g,node_name:R}=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:Kg(o),value:u[0],id:d?.[0],expiresAt:E,timestamp:S,table:_,onCommit:h,user:g,nodeName:R});else{let P=u.map((U,v)=>({type:Kg(o),value:U,expiresAt:E,id:d?.[v],table:_}));for(;l;)P.push({type:Kg(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:g,nodeName:R})}Wg.get(r8.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&o8(e.subject.split(".").slice(0,-1).join("."),GM.createNatsTableStreamName(c,_),e.headers,e.data),await m}catch(o){lr.error(o)}e.ack()}a(h8,"messageProcessor");function Kg(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(Kg,"convertOperation")});var pt=T((cRe,cU)=>{"use strict";var Vt=X();Vt.initSync();var p8=require("fs-extra"),m8=require("semver"),Yu=require("path"),{monotonicFactory:S8}=require("ulidx"),WM=S8(),T8=require("util"),QM=require("child_process"),g8=T8.promisify(QM.exec),R8=QM.spawn,Zt=Xe(),we=D(),hE=K(),us=x(),pE=ui(),A8=oE(),$u=ut(),{broadcast:O8,onMessageByType:b8,getWorkerIndex:N8}=et(),{isMainThread:jM}=require("worker_threads"),{Encoder:y8,decode:tR}=require("msgpackr"),zM=new y8,{isEmpty:ga}=hE,JM=yr(),nRe=48*36e11;jM&&b8(we.ITC_EVENT_TYPES.RESTART,()=>{Dr=void 0,Ta=void 0});var{connect:I8,StorageType:w8,RetentionPolicy:C8,AckPolicy:rR,DeliverPolicy:nR,DiscardPolicy:D8,NatsConnection:sRe,JetStreamManager:iRe,JetStreamClient:oRe,StringCodec:aRe,JSONCodec:L8,createInbox:sR,headers:P8,ErrorCode:KM}=require("nats"),{PACKAGE_ROOT:M8}=D(),U8=ha(),{recordAction:v8}=(pi(),ie(xu)),XM=L8(),B8="clustering",H8=U8.engines[Zt.NATS_SERVER_NAME],G8=Yu.join(M8,"dependencies"),eR=Yu.join(G8,`${process.platform}-${process.arch}`,Zt.NATS_BINARY_NAME),Xg,Zg,Vu,ma,Sa;cU.exports={runCommand:ZM,checkNATSServerInstalled:q8,createConnection:iR,getConnection:Ku,getJetStreamManager:Wu,getJetStream:tU,getNATSReferences:Bs,getServerList:F8,createLocalStream:oR,listStreams:rU,deleteLocalStream:k8,getServerConfig:Cc,listRemoteStreams:$8,viewStream:V8,viewStreamIterator:Y8,publishToStream:K8,request:j8,reloadNATS:aR,reloadNATSHub:z8,reloadNATSLeaf:J8,extractServerName:Q8,requestErrorHandler:X8,createLocalTableStream:oU,createTableStreams:t6,purgeTableStream:aU,purgeSchemaTableStreams:r6,getStreamInfo:n6,updateLocalStreams:i6,closeConnection:x8,getJsmServerName:mE,addNatsMsgHeader:nU,clearClientCache:eU,updateRemoteConsumer:Z8,createConsumer:sU,updateConsumerIterator:e6};async function ZM(e,t=void 0){let{stdout:r,stderr:n}=await g8(e,{cwd:t});if(n)throw new Error(n.replace(`
10
10
  `,""));return r.replace(`
11
- `,"")}a(ov,"runCommand");async function u9(){try{await F6.access(DR)}catch{return!1}let e=await ov(`${DR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return k6.eq(t,c9)}a(u9,"checkNATSServerInstalled");async function vR(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await sv.getClusterUser();if(Ra(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 X6({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Vt.get(Pe.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),av()}),i}a(vR,"createConnection");function av(){Ur=void 0,Sa=void 0,Ta=void 0,ga=void 0}a(av,"clearClientCache");async function _9(){Ur&&(await Ur.drain(),Ur=void 0,Sa=void 0,Ta=void 0,ga=void 0)}a(_9,"closeConnection");var Ur,ga;async function XE(){return ga||(ga=vR(Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Ur=await ga),Ur||ga}a(XE,"getConnection");async function a_(){if(Sa)return Sa;Ra(Ur)&&await XE();let{domain:e}=c_(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ra(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Sa=await Ur.jetstreamManager({domain:e,timeout:6e4}),Sa}a(a_,"getJetStreamManager");async function cv(){if(Ta)return Ta;Ra(Ur)&&await XE();let{domain:e}=c_(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ra(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ta=Ur.jetstream({domain:e,timeout:6e4}),Ta}a(cv,"getJetStream");async function _s(){let e=Ur||await XE(),t=Sa||await a_(),r=Ta||await cv();return{connection:e,jsm:t,js:r}}a(_s,"getNATSReferences");async function d9(e){let t=Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await sv.getClusterUser(),s=await vR(t,r,n),i=UR(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=iv.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 zE.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(d9,"getServerList");async function BR(e,t){let{jsm:r}=await _s(),n=Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Z6.File,retention:e9.Limits,subjects:t,discard:t9.Old,max_msgs:s,max_bytes:i,max_age:n})}a(BR,"createLocalStream");async function lv(){let{jsm:e}=await _s(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(lv,"listStreams");async function f9(e){let{jsm:t}=await _s();await t.streams.delete(e)}a(f9,"deleteLocalStream");async function E9(e){let{connection:t}=await _s(),r=[],n=UR(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(iv.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(E9,"listRemoteStreams");async function h9(e,t=void 0,r=void 0){let{jsm:n,js:s}=await _s(),i=ev(),o={durable_name:i,ack_policy:PR.Explicit};t&&(o.deliver_policy=MR.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=LR(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(h9,"viewStream");async function*p9(e,t=void 0,r=void 0){let{jsm:n,js:s}=await _s(),i=ev(),o={durable_name:i,ack_policy:PR.Explicit};t&&(o.deliver_policy=MR.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=LR(_.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(p9,"viewStreamIterator");async function m9(e,t,r,n){us.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=uv(n,r);let{js:s}=await _s(),i=await ZE(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:nv.encode(n);try{us.trace(`publishToStream publishing to subject: ${o}`),o9(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 dv(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 BR(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(m9,"publishToStream");function uv(e,t){t===void 0&&(t=n9());let r=Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Zt.MSG_HEADERS.ORIGIN)&&r&&t.append(Zt.MSG_HEADERS.ORIGIN,r),t}a(uv,"addNatsMsgHeader");function c_(e){e=e.toLowerCase();let t=o_.join(Vt.get(Pe.CONFIG_PARAMS.ROOTPATH),a9);if(e===Pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ra(CR)&&(CR={port:s_.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:s_.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zt.SERVER_SUFFIX.HUB,config_file:Zt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:o_.join(t,Zt.PID_FILES.HUB),hdb_nats_path:t}),CR;if(e===Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ra(wR)&&(wR={port:s_.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:s_.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zt.SERVER_SUFFIX.LEAF,config_file:Zt.NATS_CONFIG_FILES.LEAF_SERVER,domain:s_.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zt.SERVER_SUFFIX.LEAF,pid_file_path:o_.join(t,Zt.PID_FILES.LEAF),hdb_nats_path:t}),wR;us.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(c_,"getServerConfig");async function _v(e,t,r,n){try{await e.consumers.add(t,{ack_policy:PR.Explicit,durable_name:r,deliver_policy:MR.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(_v,"createConsumer");async function S9(e,t,r){await e.consumers.delete(t,r)}a(S9,"removeConsumer");function T9(e){return e.split(".")[1]}a(T9,"extractServerName");async function g9(e,t,r=6e4,n=UR()){if(!zE.isObject(t))throw new Error("data param must be an object");let s=nv.encode(t),{connection:i}=await _s(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return LR(c.data)}a(g9,"request");function HR(e){return new Promise(async(t,r)=>{let n=K6(DR,["--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(HR,"reloadNATS");async function R9(){let{pid_file_path:e}=c_(Pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await HR(e)}a(R9,"reloadNATSHub");async function A9(){let{pid_file_path:e}=c_(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await HR(e)}a(A9,"reloadNATSLeaf");function O9(e,t,r){let n;switch(e.code){case ZU.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case ZU.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(O9,"requestErrorHandler");async function b9(e,t){let r=t+Zt.SERVER_SUFFIX.LEAF,{connection:n}=await _s(),{jsm:s}=await P9(r),{schema:i,table:o}=e,c=JE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await dv(async()=>{if(e.subscribe===!0)await _v(s,c,n.info.server_name,l);else try{await S9(s,c,n.info.server_name)}catch(_){us.trace(_)}})}a(b9,"updateRemoteConsumer");async function N9(e,t,r,n){let s=JE.createNatsTableStreamName(e,t),i=r+Zt.SERVER_SUFFIX.LEAF,o={type:Pe.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!rv&&z6()<Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=IR();await c(o)}await Q6(o),n==="stop"&&await zE.async_set_timeout(1e3)}a(N9,"updateConsumerIterator");function dv(e){return W6.writeTransaction(Pe.SYSTEM_SCHEMA_NAME,Pe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(dv,"exclusiveLock");async function fv(e,t){let r=JE.createNatsTableStreamName(e,t),n=await ZE(),s=C9(e,t,n);await BR(r,[s])}a(fv,"createLocalTableStream");async function y9(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await fv(n,s)}}a(y9,"createTableStreams");async function Ev(e,t,r=void 0){if(Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=JE.createNatsTableStreamName(e,t),{jsm:s}=await _s();await s.streams.purge(n,r)}catch(n){if(n.message==="stream not found")us.warn(n);else throw n}}a(Ev,"purgeTableStream");async function I9(e,t){if(Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await Ev(e,t[r])}a(I9,"purgeSchemaTableStreams");async function w9(e){return(await a_()).streams.info(e)}a(w9,"getStreamInfo");function C9(e,t,r){return`${Zt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(C9,"createSubjectName");async function ZE(){if(i_)return i_;if(i_=(await a_())?.nc?.info?.server_name,i_===void 0)throw new Error("Unable to get jetstream manager server name");return i_}a(ZE,"getJsmServerName");async function D9(){let e=await a_(),t=await ZE(),r=await lv();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=L9(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(D9,"updateLocalStreams");function L9(e){let{config:t}=e,r=!1,n=Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Vt.get(Pe.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(L9,"updateStreamLimits");async function P9(e){let t,r;try{t=await Ur.jetstream({domain:e}),r=await Ur.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw us.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(P9,"connectToRemoteJS")});var nh=g((eAe,Tv)=>{"use strict";var vc=Uf(),Bc=kU(),M9=x(),U9=require("uuid").v4,ZRe=require("clone"),th=ai(),Hc=C(),v9=require("util"),co=Pn(),{handleHDBError:vr,hdb_errors:B9}=oe(),{HDB_ERROR_MSGS:eh,HTTP_STATUS_CODES:Br}=B9,{SchemaEventMsg:rh}=ts(),pv=mt(),{getDatabases:H9}=(ge(),se(ke)),{transformReq:Gc}=K();Tv.exports={createSchema:G9,createSchemaStructure:mv,createTable:q9,createTableStructure:Sv,createAttribute:V9,dropSchema:x9,dropTable:F9,dropAttribute:k9,getBackup:Y9};async function G9(e){let t=await mv(e);return th.signalSchemaChange(new rh(process.pid,e.operation,e.schema)),t}a(G9,"createSchema");async function mv(e){let t=vc.schema_object(e);if(t)throw vr(t,t.message,Br.BAD_REQUEST,void 0,void 0,!0);if(Gc(e),!await Bc.checkSchemaExists(e.schema))throw vr(new Error,eh.SCHEMA_EXISTS_ERR(e.schema),Br.BAD_REQUEST,Hc.LOG_LEVELS.ERROR,eh.SCHEMA_EXISTS_ERR(e.schema),!0);return await co.createSchema(e),`database '${e.schema}' successfully created`}a(mv,"createSchemaStructure");async function q9(e){return Gc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await Sv(e)}a(q9,"createTable");async function Sv(e){let t=vc.create_table_object(e);if(t)throw vr(t,t.message,Br.BAD_REQUEST,void 0,void 0,!0);if(vc.validateTableResidence(e.residence),!await Bc.checkSchemaTableExists(e.schema,e.table))throw vr(new Error,eh.TABLE_EXISTS_ERR(e.schema,e.table),Br.BAD_REQUEST,Hc.LOG_LEVELS.ERROR,eh.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:U9(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await co.createTable(n,e);else throw vr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Br.BAD_REQUEST);else await co.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(Sv,"createTableStructure");async function x9(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=vc.schema_object(e),n=t??r;if(n)throw vr(n,n.message,Br.BAD_REQUEST,void 0,void 0,!0);Gc(e);let s=await Bc.checkSchemaExists(e.schema);if(s)throw vr(new Error,s,Br.NOT_FOUND,Hc.LOG_LEVELS.ERROR,s,!0);let i=await Bc.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await co.dropSchema(e),th.signalSchemaChange(new rh(process.pid,e.operation,e.schema)),await pv.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(x9,"dropSchema");async function F9(e){let t=vc.table_object(e);if(t)throw vr(t,t.message,Br.BAD_REQUEST,void 0,void 0,!0);Gc(e);let r=await Bc.checkSchemaTableExists(e.schema,e.table);if(r)throw vr(new Error,r,Br.NOT_FOUND,Hc.LOG_LEVELS.ERROR,r,!0);return await co.dropTable(e),await pv.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(F9,"dropTable");async function k9(e){let t=vc.attribute_object(e);if(t)throw vr(t,t.message,Br.BAD_REQUEST,void 0,void 0,!0);Gc(e);let r=await Bc.checkSchemaTableExists(e.schema,e.table);if(r)throw vr(new Error,r,Br.NOT_FOUND,Hc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw vr(new Error,"You cannot drop a hash attribute",Br.BAD_REQUEST,void 0,void 0,!0);if(Hc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw vr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Br.BAD_REQUEST,void 0,void 0,!0);try{return await co.dropAttribute(e),$9(e),th.signalSchemaChange(new rh(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw M9.error(`Got an error deleting attribute ${v9.inspect(e)}.`),n}}a(k9,"dropAttribute");function $9(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($9,"dropAttributeFromGlobal");async function V9(e){Gc(e);let t=H9()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw vr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Br.BAD_REQUEST,void 0,void 0,!0);return await co.createAttribute(e),th.signalSchemaChange(new rh(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(V9,"createAttribute");function Y9(e){return co.getBackup(e)}a(Y9,"getBackup")});var Rv=g((rAe,gv)=>{"use strict";var{OPERATIONS_ENUM:K9}=C(),GR=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=K9.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};gv.exports=GR});var qR=g((iAe,yv)=>{"use strict";var W9=Pn(),sAe=Rv(),sh=K(),ih=C(),Q9=X(),{handleHDBError:Av,hdb_errors:j9}=oe(),{HDB_ERROR_MSGS:Ov,HTTP_STATUS_CODES:bv}=j9,z9=Object.values(ih.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),Nv="To use this operation audit log must be enabled in harperdb-config.yaml";yv.exports=J9;async function J9(e){if(sh.isEmpty(e.schema))throw new Error(Ov.SCHEMA_REQUIRED_ERR);if(sh.isEmpty(e.table))throw new Error(Ov.TABLE_REQUIRED_ERR);if(!Q9.get(ih.CONFIG_PARAMS.LOGGING_AUDITLOG))throw Av(new Error,Nv,bv.BAD_REQUEST,ih.LOG_LEVELS.ERROR,Nv,!0);let t=sh.checkSchemaTableExist(e.schema,e.table);if(t)throw Av(new Error,t,bv.NOT_FOUND,ih.LOG_LEVELS.ERROR,t,!0);if(!sh.isEmpty(e.search_type)&&z9.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await W9.readAuditLog(e)}a(J9,"readAuditLog")});var wv=g((aAe,Iv)=>{"use strict";var{OPERATIONS_ENUM:X9}=C(),xR=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=X9.GET_BACKUP,this.schema=t,this.table=r}};Iv.exports=xR});var Lv=g((_Ae,Dv)=>{"use strict";var Z9=Pn(),lAe=wv(),FR=K(),e7=C(),uAe=X(),{handleHDBError:t7,hdb_errors:r7}=oe(),{HDB_ERROR_MSGS:Cv,HTTP_STATUS_CODES:n7}=r7;Dv.exports=s7;async function s7(e){if(FR.isEmpty(e.schema))throw new Error(Cv.SCHEMA_REQUIRED_ERR);if(FR.isEmpty(e.table))throw new Error(Cv.TABLE_REQUIRED_ERR);let t=FR.checkSchemaTableExist(e.schema,e.table);if(t)throw t7(new Error,t,n7.NOT_FOUND,e7.LOG_LEVELS.ERROR,t,!0);return await Z9.getBackup(read_audit_log_object)}a(s7,"getBackup")});var Hv=g((fAe,Bv)=>{var lo=require("validate.js"),Mv=rt(),qc=C(),{handleHDBError:i7,hdb_errors:o7}=oe(),{HDB_ERROR_MSGS:St,HTTP_STATUS_CODES:a7}=o7,kR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),c7={STRUCTURE_USER:"structure_user"},Pv=Object.values(qc.ROLE_TYPES_ENUM),l7="attribute_permissions",u7="attribute_name",{PERMS_CRUD_ENUM:xc}=qc,_7=[l7,...Object.values(xc)],Uv=[xc.READ,xc.INSERT,xc.UPDATE],d7=[u7,...Uv];function f7(e){let t=kR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,vv(e,t)}a(f7,"addRoleValidation");function E7(e){let t=kR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,vv(e,t)}a(E7,"alterRoleValidation");function h7(e){let t=kR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Mv.validateObject(e,t)}a(h7,"dropRoleValidation");var p7=["operation","role","id","permission","hdb_user","hdb_auth_header"];function vv(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)p7.includes(n[o])||s.push(n[o]);s.length>0&&Nt(St.INVALID_ROLE_JSON_KEYS(s),r);let i=Mv.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Nt(o,r)}),e.permission){let o=m7(e);o&&Nt(o,r),Pv.forEach(c=>{e.permission[c]&&!lo.isBoolean(e.permission[c])&&Nt(St.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(Pv.indexOf(o)<0){if(o===c7.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(St.SCHEMA_NOT_FOUND(d),r)}continue}Nt(St.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Nt(St.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(St.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(_).forEach(u=>{_7.includes(u)||Nt(St.INVALID_PERM_KEY(u),r,o,l)}),Object.values(xc).forEach(u=>{lo.isDefined(_[u])?lo.isBoolean(_[u])||Nt(St.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):Nt(St.TABLE_PERM_MISSING(u),r,o,l)}),lo.isDefined(_.attribute_permissions)){if(!lo.isArray(_.attribute_permissions)){Nt(St.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}}else{Nt(St.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=>{!d7.includes(m)&&m!==xc.DELETE&&Nt(St.INVALID_ATTR_PERM_KEY(m),r,o,l)}),!lo.isDefined(E.attribute_name)){Nt(St.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=E.attribute_name;if(!u.includes(h)){Nt(St.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}Uv.forEach(m=>{lo.isDefined(E[m])?lo.isBoolean(E[m])||Nt(St.ATTR_PERM_NOT_BOOLEAN(m,h),r,o,l):Nt(St.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(St.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,l)}}}}return S7(r)}a(vv,"customValidate");Bv.exports={addRoleValidation:f7,alterRoleValidation:E7,dropRoleValidation:h7};function m7(e){let{operation:t,permission:r}=e;if(t===qc.OPERATIONS_ENUM.ADD_ROLE||t===qc.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 St.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?qc.ROLE_TYPES_ENUM.SUPER_USER:qc.ROLE_TYPES_ENUM.CLUSTER_USER;return St.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(m7,"validateNoSUPerms");function S7(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:St.ROLE_PERMS_ERROR,...e};return i7(new Error,n,a7.BAD_REQUEST)}else return null}a(S7,"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 ah=g((hAe,Fv)=>{"use strict";var Gv=Dr(),qv=or(),T7=ia(),VR=Hv(),YR=ai(),g7=require("uuid").v4,R7=require("util"),oh=C(),A7=K(),KR=qv.searchByValue,O7=qv.searchByHash,b7=R7.promisify(T7.delete),N7=rs(),y7=Tc(),{hdb_errors:I7,handleHDBError:Aa}=oe(),{HDB_ERROR_MSGS:xv,HTTP_STATUS_CODES:l_}=I7,{UserEventMsg:WR}=ts();Fv.exports={addRole:w7,alterRole:C7,dropRole:D7,listRoles:L7};function $R(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($R,"scrubRoleDetails");async function w7(e){let t=VR.addRoleValidation(e);if(t)throw t;e=$R(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 KR(r)||[])}catch(i){throw Aa(i)}if(n&&n.length>0)throw Aa(new Error,xv.ROLE_ALREADY_EXISTS(e.role),l_.CONFLICT,void 0,void 0,!0);e.id||(e.id=g7());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await Gv.insert(s),YR.signalUserChange(new WR(process.pid)),e=$R(e),e}a(w7,"addRole");async function C7(e){let t=VR.alterRoleValidation(e);if(t)throw t;e=$R(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await Gv.update(r)}catch(s){throw Aa(s)}if(n&&n?.message==="updated 0 of 1 records")throw Aa(new Error,"Invalid role id",l_.BAD_REQUEST,void 0,void 0,!0);return await YR.signalUserChange(new WR(process.pid)),e}a(C7,"alterRole");async function D7(e){let t=VR.dropRoleValidation(e);if(t)throw Aa(new Error,t,l_.BAD_REQUEST,void 0,void 0,!0);let r=new y7(oh.SYSTEM_SCHEMA_NAME,oh.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await O7(r));if(n.length===0)throw Aa(new Error,xv.ROLE_NOT_FOUND,l_.NOT_FOUND,void 0,void 0,!0);let s=new N7(oh.SYSTEM_SCHEMA_NAME,oh.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await KR(s)),o=!1;if(A7.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Aa(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,l_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await b7(c),YR.signalUserChange(new WR(process.pid)),`${n[0].role} successfully deleted`}a(D7,"dropRole");async function L7(){return KR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(L7,"listRoles")});var Yv=g((mAe,Vv)=>{"use strict";var P7=X(),uo=require("joi"),M7=rt(),kv=require("moment"),U7=require("fs-extra"),QR=require("path"),v7=require("lodash"),u_=C(),{LOG_LEVELS:Oa}=C(),B7="YYYY-MM-DD hh:mm:ss",H7=QR.resolve(__dirname,"../logs");Vv.exports=function(e){return M7.validateBySchema(e,G7)};var G7=uo.object({from:uo.custom($v),until:uo.custom($v),level:uo.valid(Oa.NOTIFY,Oa.FATAL,Oa.ERROR,Oa.WARN,Oa.INFO,Oa.DEBUG,Oa.TRACE),order:uo.valid("asc","desc"),limit:uo.number().min(1),start:uo.number().min(0),log_name:uo.custom(q7)});function $v(e,t){if(kv(e,kv.ISO_8601).format(B7)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a($v,"validateDatetime");function q7(e,t){if(v7.invert(u_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=P7.get(u_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?u_.LOG_NAMES.HDB:e,i=s===u_.LOG_NAMES.INSTALL?QR.join(H7,u_.LOG_NAMES.INSTALL):QR.join(n,s);return U7.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(q7,"validateReadLogPath")});var zR=g((TAe,Wv)=>{"use strict";var ch=C(),x7=x(),F7=X(),k7=Yv(),jR=require("path"),Kv=require("fs-extra"),{once:$7}=require("events"),{handleHDBError:V7,hdb_errors:Y7}=oe(),{PACKAGE_ROOT:K7}=C(),W7=jR.join(K7,"logs"),Q7=1e3,j7=200;Wv.exports=z7;async function z7(e){let t=k7(e);if(t)throw V7(t,t.message,Y7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=F7.get(ch.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?ch.LOG_NAMES.HDB:e.log_name,s=n===ch.LOG_NAMES.INSTALL?jR.join(W7,ch.LOG_NAMES.INSTALL):jR.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?Q7: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(Kv.statSync(s).size-(h+5)*j7,0));let S=Kv.createReadStream(s,{start:m});S.on("error",U=>{x7.error(U)});let R=0,T=[],A="",P;S.on("data",U=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;U=A+U;let H=0,j;for(;(j=k.exec(U))&&!S.destroyed;){P&&(P.message=U.slice(H,j.index),v(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=U.slice(H)}),S.on("end",U=>{S.destroyed||P&&(P.message=A.trim(),v(P))}),S.resume();function v(U){let k,H,j;switch(!0){case(i&&c&&_):k=new Date(U.timestamp),H=new Date(l),j=new Date(u),U.level===o&&k>=H&&k<=j&&R<E?R++:U.level===o&&k>=H&&k<=j&&(_o(U,f,T),R++,R===h&&S.destroy());break;case(i&&c):k=new Date(U.timestamp),H=new Date(l),U.level===o&&k>=H&&R<E?R++:U.level===o&&k>=H&&(_o(U,f,T),R++,R===h&&S.destroy());break;case(i&&_):k=new Date(U.timestamp),j=new Date(u),U.level===o&&k<=j&&R<E?R++:U.level===o&&k<=j&&(_o(U,f,T),R++,R===h&&S.destroy());break;case(c&&_):k=new Date(U.timestamp),H=new Date(l),j=new Date(u),k>=H&&k<=j&&R<E?R++:k>=H&&k<=j&&(_o(U,f,T),R++,R===h&&S.destroy());break;case i:U.level===o&&R<E?R++:U.level===o&&(_o(U,f,T),R++,R===h&&S.destroy());break;case c:k=new Date(U.timestamp),H=new Date(l),k>=H&&R<E?R++:k>=H&&R>=E&&(_o(U,f,T),R++,R===h&&S.destroy());break;case _:k=new Date(U.timestamp),j=new Date(u),k<=j&&R<E?R++:k<=j&&R>=E&&(_o(U,f,T),R++,R===h&&S.destroy());break;default:R<E?R++:(_o(U,f,T),R++,R===h&&S.destroy())}}return a(v,"onLogMessage"),await $7(S,"close"),T}a(z7,"readLog");function _o(e,t,r){t==="desc"?J7(e,r):t==="asc"?X7(e,r):r.push(e)}a(_o,"pushLineToResult");function J7(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(J7,"insertDescending");function X7(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(X7,"insertAscending")});var lh=g((bAe,Jv)=>{"use strict";var JR=require("joi"),{string:__,boolean:Qv,date:Z7}=JR.types(),eee=rt(),{validateSchemaExists:RAe,validateTableExists:AAe,validateSchemaName:OAe}=ws(),tee=C(),ree=et(),jv=X();jv.initSync();var nee=__.invalid(jv.get(tee.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(ree.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(),zv={operation:__.valid("add_node","update_node","set_node_replication"),node_name:nee,subscriptions:JR.array().items({table:__.optional(),schema:__.optional(),database:__.optional(),subscribe:Qv.required(),publish:Qv.required().custom(iee),start_time:Z7.iso()}).min(1).required()};function see(e){return eee.validateBySchema(e,JR.object(zv))}a(see,"addUpdateNodeValidator");function iee(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(iee,"checkForFalsy");Jv.exports={addUpdateNodeValidator:see,validation_schema:zv}});var Zv=g((yAe,Xv)=>{var oee=rt(),aee={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Xv.exports=function(e){return oee.validateObject(e,aee)}});var uh=g((IAe,e0)=>{"use strict";var cee=C().OPERATIONS_ENUM,XR=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=cee.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};e0.exports=XR});var r0=g((CAe,t0)=>{"use strict";var lee={OPERATION:"operation",REFRESH:"refresh"},ZR=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},eA=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};t0.exports={JWTTokens:ZR,TOKEN_TYPE_ENUM:lee,JWTRSAKeys:eA}});var E_=g((LAe,o0)=>{"use strict";var f_=require("jsonwebtoken"),tA=require("fs-extra"),rA=K(),Hn=C(),{handleHDBError:Hr,hdb_errors:uee}=oe(),{HTTP_STATUS_CODES:Gr,AUTHENTICATION_ERROR_MSGS:qr}=uee,d_=x(),n0=uE(),iA=Pr(),_ee=Dr().update,dee=uh(),fee=ai(),{UserEventMsg:Eee}=ts(),fo=X();fo.initSync();var nA=require("path"),{JWTTokens:hee,JWTRSAKeys:pee,TOKEN_TYPE_ENUM:_h}=r0(),mee=fo.get(Hn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?fo.get(Hn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",See=fo.get(Hn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?fo.get(Hn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",dh="RS256",sA;o0.exports={createTokens:Tee,validateOperationToken:Ree,refreshOperationToken:gee,validateRefreshToken:i0};async function Tee(e){if(rA.isEmpty(e)||typeof e!="object")throw Hr(new Error,qr.INVALID_AUTH_OBJECT,Gr.BAD_REQUEST,void 0,void 0,!0);if(rA.isEmpty(e.username))throw Hr(new Error,qr.USERNAME_REQUIRED,Gr.BAD_REQUEST,void 0,void 0,!0);if(rA.isEmpty(e.password))throw Hr(new Error,qr.PASSWORD_REQUIRED,Gr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await iA.findAndValidateUser(e.username,e.password),!t)throw Hr(new Error,qr.INVALID_CREDENTIALS,Gr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw d_.error(f),Hr(new Error,qr.INVALID_CREDENTIALS,Gr.UNAUTHORIZED,void 0,void 0,!0)}let r=await fh(),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 s0(i,r.private_key,r.passphrase),c=await f_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:See,algorithm:dh,subject:_h.REFRESH}),l=n0.hash(c),_=new dee(Hn.SYSTEM_SCHEMA_NAME,Hn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await _ee(_)}catch(f){d_.error(f),d=f}if(d!==void 0||u.skipped_hashes.length>0)throw Hr(new Error,qr.REFRESH_TOKEN_SAVE_FAILED,Gr.INTERNAL_SERVER_ERROR);return fee.signalUserChange(new Eee(process.pid)),new hee(o,c)}a(Tee,"createTokens");async function s0(e,t,r){return await f_.sign(e,{key:t,passphrase:r},{expiresIn:mee,algorithm:dh,subject:_h.OPERATION})}a(s0,"signOperationToken");async function fh(){if(sA===void 0)try{let e=nA.join(fo.getHdbBasePath(),Hn.LICENSE_KEY_DIR_NAME,Hn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=nA.join(fo.getHdbBasePath(),Hn.LICENSE_KEY_DIR_NAME,Hn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=nA.join(fo.getHdbBasePath(),Hn.LICENSE_KEY_DIR_NAME,Hn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await tA.readFile(e)).toString(),s=(await tA.readFile(t)).toString(),i=(await tA.readFile(r)).toString();sA=new pee(i,s,n)}catch(e){throw d_.error(e),Hr(new Error,qr.NO_ENCRYPTION_KEYS,Gr.INTERNAL_SERVER_ERROR)}return sA}a(fh,"getJWTRSAKeys");async function gee(e){if(!e)throw Hr(new Error,qr.INVALID_BODY,Gr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Hr(new Error,qr.REFRESH_TOKEN_REQUIRED,Gr.BAD_REQUEST,void 0,void 0,!0);await i0(e.refresh_token);let t=await fh(),r=await f_.decode(e.refresh_token);return{operation_token:await s0({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(gee,"refreshOperationToken");async function Ree(e){try{let t=await fh(),r=await f_.verify(e,t.public_key,{algorithms:dh,subject:_h.OPERATION});return await iA.findAndValidateUser(r.username,void 0,!1)}catch(t){throw d_.warn(t),t.name&&t.name==="TokenExpiredError"?Hr(new Error,qr.TOKEN_EXPIRED,Gr.FORBIDDEN):Hr(new Error,qr.INVALID_TOKEN,Gr.UNAUTHORIZED)}}a(Ree,"validateOperationToken");async function i0(e){let t;try{let r=await fh(),n=await f_.verify(e,r.public_key,{algorithms:dh,subject:_h.REFRESH});t=await iA.findAndValidateUser(n.username,void 0,!1)}catch(r){throw d_.warn(r),r.name&&r.name==="TokenExpiredError"?Hr(new Error,qr.TOKEN_EXPIRED,Gr.FORBIDDEN):Hr(new Error,qr.INVALID_TOKEN,Gr.UNAUTHORIZED)}if(!n0.validate(t.refresh_token,e))throw Hr(new Error,qr.INVALID_TOKEN,Gr.UNAUTHORIZED);return t}a(i0,"validateRefreshToken")});var oA=g((UAe,l0)=>{"use strict";var Aee=Zv(),Fc=require("passport"),Oee=require("passport-local").Strategy,bee=require("passport-http").BasicStrategy,Nee=require("util"),yee=Pr(),c0=Nee.callbackify(yee.findAndValidateUser),MAe=zr(),Iee=C(),a0=E_();Fc.use(new Oee(function(e,t,r){c0(e,t,r)}));Fc.use(new bee(function(e,t,r){c0(e,t,r)}));Fc.serializeUser(function(e,t){t(null,e)});Fc.deserializeUser(function(e,t){t(null,e)});function wee(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":Fc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Iee.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?a0.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):a0.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Fc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(wee,"authorize");function Cee(e,t){let r=Aee(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(Cee,"checkPermissions");l0.exports={authorize:wee,checkPermissions:Cee}});var kc=g((BAe,u0)=>{"use strict";var aA=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},cA=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};u0.exports={Node:aA,NodeSubscription:cA}});var d0=g((GAe,_0)=>{"use strict";var Dee=C().OPERATIONS_ENUM,lA=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Dee.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};_0.exports=lA});var h_=g((xAe,f0)=>{"use strict";var uA=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},_A=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)}};f0.exports={RemotePayloadObject:uA,RemotePayloadSubscription:_A}});var h0=g((kAe,E0)=>{"use strict";var dA=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}};E0.exports=dA});var S0=g((WAe,m0)=>{"use strict";var Lee=h0(),VAe=ct(),p0=Ve(),Pee=x(),{getSchemaPath:YAe,getTransactionAuditStorePath:KAe}=ze(),{getDatabases:Mee}=(ge(),se(ke));m0.exports=Uee;async function Uee(e){let t=new Lee;try{let r=Mee()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await p0.environmentDataSize(schema_path,e.name),o=await p0.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){Pee.warn(`unable to stat table dbi due to ${r}`)}return t}a(Uee,"lmdbGetTableSize")});var g0=g((jAe,T0)=>{"use strict";var fA=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}};T0.exports=fA});var hi=g((eOe,N0)=>{"use strict";var vee=require("fs-extra"),Bee=require("path"),_r=require("systeminformation"),Eo=x(),R0=mt(),JAe=et(),hh=C(),Hee=S0(),Gee=di(),{getThreadInfo:A0}=tt(),OA=X();OA.initSync();var qee=g0(),{openEnvironment:XAe}=Ve(),{getSchemaPath:ZAe}=ze(),{database:xee,databases:O0}=(ge(),se(ke)),Eh;N0.exports={getHDBProcessInfo:mA,getNetworkInfo:TA,getDiskInfo:SA,getMemoryInfo:pA,getCPUInfo:hA,getTimeInfo:EA,getSystemInformation:gA,systemInformation:Fee,getTableSize:RA,getMetrics:AA};function EA(){return _r.time()}a(EA,"getTimeInfo");async function hA(){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,...T}=await _r.currentLoad();return T.cpus=[],R.forEach(A=>{let{raw_load:P,raw_load_idle:v,raw_load_irq:U,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 Eo.error(`error in getCPUInfo: ${e}`),{}}}a(hA,"getCPUInfo");async function pA(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await _r.mem();return Object.assign(s,process.memoryUsage())}catch(e){return Eo.error(`error in getMemoryInfo: ${e}`),{}}}a(pA,"getMemoryInfo");async function mA(){let e={core:[],clustering:[]};try{let t=await _r.processes(),r;try{r=Number.parseInt(await vee.readFile(Bee.join(OA.get(hh.CONFIG_PARAMS.ROOTPATH),hh.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===hh.NODE_ERROR_CODES.ENOENT)Eo.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 Eo.error(`error in getHDBProcessInfo: ${t}`),e}}a(mA,"getHDBProcessInfo");async function SA(){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 Eo.error(`error in getDiskInfo: ${t}`),e}}a(SA,"getDiskInfo");async function TA(){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 Eo.error(`error in getNetworkInfo: ${t}`),e}}a(TA,"getNetworkInfo");async function gA(){if(Eh!==void 0)return Eh;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,Eh=e,Eh}catch(t){return Eo.error(`error in getSystemInformation: ${t}`),e}}a(gA,"getSystemInformation");async function RA(){let e=[],t=await Gee.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Hee(n));return e}a(RA,"getTableSize");async function AA(){let e={};for(let t in O0){let r=e[t]={};for(let n in O0[t])try{let s=xee({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){Eo.notify(`Error getting stats for table ${n}: ${s}`)}}return e}a(AA,"getMetrics");async function b0(){if(OA.get(hh.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await R0.getNATSReferences(),t=await R0.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(b0,"getNatsStreamInfo");async function Fee(e){let t=new qee;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await gA(),t.time=EA(),t.cpu=await hA(),t.memory=await pA(),t.disk=await SA(),t.network=await TA(),t.harperdb_processes=await mA(),t.table_size=await RA(),t.metrics=await AA(),t.threads=await A0(),t.replication=await b0(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await gA();break;case"time":t.time=EA();break;case"cpu":t.cpu=await hA();break;case"memory":t.memory=await pA();break;case"disk":t.disk=await SA();break;case"network":t.network=await TA();break;case"harperdb_processes":t.harperdb_processes=await mA();break;case"table_size":t.table_size=await RA();break;case"database_metrics":case"metrics":t.metrics=await AA();break;case"threads":t.threads=await A0();break;case"replication":t.replication=await b0();break;default:break}return t}a(Fee,"systemInformation")});var pi=g((sOe,C0)=>{"use strict";var kee=Dr(),bA=K(),$ee=require("util"),ba=C(),y0=X();y0.initSync();var Vee=oA(),I0=or(),{Node:rOe,NodeSubscription:nOe}=kc(),Yee=Tc(),Kee=d0(),{RemotePayloadObject:Wee,RemotePayloadSubscription:Qee}=h_(),{handleHDBError:jee,hdb_errors:zee}=oe(),{HTTP_STATUS_CODES:Jee,HDB_ERROR_MSGS:Xee}=zee,Zee=rs(),ete=hi(),tte=Vi(),{getDatabases:rte}=(ge(),se(ke)),nte=$ee.promisify(Vee.authorize),ste=I0.searchByHash,ite=I0.searchByValue;C0.exports={authHeaderToUser:ote,isEmpty:ate,getNodeRecord:cte,upsertNodeRecord:lte,buildNodePayloads:ute,checkClusteringEnabled:_te,getAllNodeRecords:dte,getSystemInfo:fte,reverseSubscription:w0};async function ote(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await nte(t,null),e}a(ote,"authHeaderToUser");function ate(e){return e==null}a(ate,"isEmpty");async function cte(e){let t=new Yee(ba.SYSTEM_SCHEMA_NAME,ba.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return ste(t)}a(cte,"getNodeRecord");async function lte(e){let t=new Kee(ba.SYSTEM_SCHEMA_NAME,ba.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return kee.upsert(t)}a(lte,"upsertNodeRecord");function w0(e){if(bA.isEmpty(e.subscribe)||bA.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(w0,"reverseSubscription");function ute(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=bA.getTableHashAttribute(l,_),{subscribe:d,publish:f}=w0(c),E=rte()[l]?.[_],h=new Qee(l,_,u,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new Wee(r,t,s,n)}a(ute,"buildNodePayloads");function _te(){if(!y0.get(ba.CONFIG_PARAMS.CLUSTERING_ENABLED))throw jee(new Error,Xee.CLUSTERING_NOT_ENABLED,Jee.BAD_REQUEST,void 0,void 0,!0)}a(_te,"checkClusteringEnabled");async function dte(){let e=new Zee(ba.SYSTEM_SCHEMA_NAME,ba.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await ite(e))}a(dte,"getAllNodeRecords");async function fte(){let e=await ete.getSystemInformation();return{hdb_version:tte.version(),node_version:e.node_version,platform:e.platform}}a(fte,"getSystemInfo")});var NA=g((oOe,H0)=>{"use strict";var ph=mt(),D0=K(),L0=et(),P0=C(),mh=x(),M0=nh(),Ete=gu(),{RemotePayloadObject:hte}=h_(),{handleHDBError:U0,hdb_errors:pte}=oe(),{HTTP_STATUS_CODES:v0}=pte,{NodeSubscription:B0}=kc();H0.exports=mte;async function mte(e,t){let r;try{r=await ph.request(`${t}.${L0.REQUEST_SUFFIX}`,new hte(P0.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),mh.trace("Response from remote describe all request:",r)}catch(o){mh.error(`addNode received error from describe all request to remote node: ${o}`);let c=ph.requestErrorHandler(o,"add_node",t);throw U0(new Error,c,v0.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===L0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw U0(new Error,o,v0.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===P0.SYSTEM_SCHEMA_NAME){await ph.createLocalTableStream(l,c);let h=new B0(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=D0.doesSchemaExist(l),u=n[l]!==void 0,d=c?D0.doesTableExist(l,c):!0,f=c?n?.[l]?.[c]!==void 0:!0;if(!_&&!u||!d&&!f){s.push(o);continue}if(!_&&u&&(mh.trace(`addNode creating schema: ${l}`),await M0.createSchema({operation:"create_schema",schema:l})),!d&&f){mh.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Ete(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await M0.createTable(h)}await ph.createLocalTableStream(l,c);let E=new B0(l,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(mte,"reviewSubscriptions")});var S_=g((cOe,x0)=>{"use strict";var{handleHDBError:Sh,hdb_errors:Ste}=oe(),{HTTP_STATUS_CODES:Th}=Ste,{addUpdateNodeValidator:Tte}=lh(),gh=x(),q0=C(),G0=et(),gte=K(),p_=mt(),m_=pi(),Rte=X(),Ate=NA(),{Node:Ote,NodeSubscription:bte}=kc(),{broadcast:Nte}=tt(),yte="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Ite="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",wte=Rte.get(q0.CONFIG_PARAMS.CLUSTERING_NODENAME);x0.exports=Cte;async function Cte(e,t=!1){gh.trace("addNode called with:",e),m_.checkClusteringEnabled();let r=Tte(e);if(r)throw Sh(r,r.message,Th.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await m_.getNodeRecord(n);if(!gte.isEmptyOrZeroLength(d))throw Sh(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,Th.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Ate(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=yte,o;let c=m_.buildNodePayloads(s,wte,q0.OPERATIONS_ENUM.ADD_NODE,await m_.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 bte(E.schema,E.table,E.publish,E.subscribe))}gh.trace("addNode sending remote payload:",c);let _;try{_=await p_.request(`${n}.${G0.REQUEST_SUFFIX}`,c)}catch(d){gh.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 p_.updateRemoteConsumer(m,n)}let f=p_.requestErrorHandler(d,"add_node",n);throw Sh(new Error,f,Th.INTERNAL_SERVER_ERROR,"error",f)}if(_.status===G0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw Sh(new Error,d,Th.INTERNAL_SERVER_ERROR,"error",d)}gh.trace(_);for(let d=0,f=s.length;d<f;d++){let E=s[d];await p_.updateRemoteConsumer(E,n),E.subscribe===!0&&await p_.updateConsumerIterator(E.schema,E.table,n,"start")}let u=new Ote(n,l,_.system_info);return await m_.upsertNodeRecord(u),Nte({type:"nats_update"}),i.length>0?o.message=Ite:o.message=`Successfully added '${n}' to manifest`,o}a(Cte,"addNode")});var wA=g((_Oe,$0)=>{"use strict";var{handleHDBError:yA,hdb_errors:Dte}=oe(),{HTTP_STATUS_CODES:IA}=Dte,{addUpdateNodeValidator:Lte}=lh(),T_=x(),k0=C(),F0=et(),uOe=K(),g_=mt(),R_=pi(),Pte=X(),{cloneDeep:Mte}=require("lodash"),Ute=NA(),{Node:vte,NodeSubscription:Bte}=kc(),{broadcast:Hte}=tt(),Gte="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",qte="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",xte=Pte.get(k0.CONFIG_PARAMS.CLUSTERING_NODENAME);$0.exports=Fte;async function Fte(e){T_.trace("updateNode called with:",e),R_.checkClusteringEnabled();let t=Lte(e);if(t)throw yA(t,t.message,IA.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await R_.getNodeRecord(r);s.length>0&&(n=Mte(s));let{added:i,skipped:o}=await Ute(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Gte,c;let l=R_.buildNodePayloads(i,xte,k0.OPERATIONS_ENUM.UPDATE_NODE,await R_.getSystemInfo());for(let u=0,d=i.length;u<d;u++){let f=i[u];T_.trace(`updateNode updating work stream for node: ${r} subscription:`,f),i[u].start_time===void 0&&delete i[u].start_time}T_.trace("updateNode sending remote payload:",l);let _;try{_=await g_.request(`${r}.${F0.REQUEST_SUFFIX}`,l)}catch(u){T_.error(`updateNode received error from request: ${u}`);let d=g_.requestErrorHandler(u,"update_node",r);throw yA(new Error,d,IA.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===F0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw yA(new Error,u,IA.INTERNAL_SERVER_ERROR,"error",u)}T_.trace(_);for(let u=0,d=i.length;u<d;u++){let f=i[u];await g_.updateRemoteConsumer(f,r),f.subscribe===!0?await g_.updateConsumerIterator(f.schema,f.table,r,"start"):await g_.updateConsumerIterator(f.schema,f.table,r,"stop")}return n||(n=[new vte(r,[],_.system_info)]),await kte(n[0],i,_.system_info),o.length>0?c.message=qte:c.message=`Successfully updated '${r}'`,c}a(Fte,"updateNode");async function kte(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 Bte(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await R_.upsertNodeRecord(n),Hte({type:"nats_update"})}a(kte,"updateNodeTable")});var Q0=g((fOe,W0)=>{"use strict";var K0=require("joi"),{string:V0}=K0.types(),$te=rt(),Y0=C(),Vte=X(),Yte=et();W0.exports=Kte;function Kte(e){let t=V0.invalid(Vte.get(Y0.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Yte.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=K0.object({operation:V0.valid(Y0.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return $te.validateBySchema(e,r)}a(Kte,"removeNodeValidator")});var Ah=g((hOe,Z0)=>{"use strict";var{handleHDBError:j0,hdb_errors:Wte}=oe(),{HTTP_STATUS_CODES:z0}=Wte,Qte=Q0(),A_=x(),J0=pi(),jte=K(),Rh=C(),X0=et(),CA=mt(),zte=X(),{RemotePayloadObject:Jte}=h_(),{NodeSubscription:Xte}=kc(),Zte=Tu(),ere=ia(),{broadcast:tre}=tt(),rre=zte.get(Rh.CONFIG_PARAMS.CLUSTERING_NODENAME);Z0.exports=nre;async function nre(e){A_.trace("removeNode called with:",e),J0.checkClusteringEnabled();let t=Qte(e);if(t)throw j0(t,t.message,z0.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await J0.getNodeRecord(r);if(jte.isEmptyOrZeroLength(n))throw j0(new Error,`Node '${r}' was not found.`,z0.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Jte(Rh.OPERATIONS_ENUM.REMOVE_NODE,rre,[]),i,o=!1;for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];u.subscribe===!0&&await CA.updateConsumerIterator(u.schema,u.table,r,"stop");try{await CA.updateRemoteConsumer(new Xte(u.schema,u.table,!1,!1),r)}catch(d){A_.error(d)}}try{i=await CA.request(`${r}.${X0.REQUEST_SUFFIX}`,s),A_.trace("Remove node reply from remote node:",r,i)}catch(l){A_.error("removeNode received error from request:",l),o=!0}let c=new Zte(Rh.SYSTEM_SCHEMA_NAME,Rh.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await ere.deleteRecord(c),tre({type:"nats_update"}),i?.status===X0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(A_.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(nre,"removeNode")});var rB=g((mOe,tB)=>{"use strict";var eB=require("joi"),{string:sre,array:ire}=eB.types(),ore=rt(),are=lh();tB.exports=cre;function cre(e){let t=eB.object({operation:sre.valid("configure_cluster").required(),connections:ire.items(are.validation_schema).required()});return ore.validateBySchema(e,t)}a(cre,"configureClusterValidator")});var bh=g((TOe,aB)=>{"use strict";var lre=C(),Oh=x(),ure=K(),_re=Ah(),dre=S_(),nB=pi(),fre=rB(),{handleHDBError:sB,hdb_errors:Ere}=oe(),{HTTP_STATUS_CODES:iB}=Ere,hre="Configure cluster complete.",pre="Failed to configure the cluster. Check the logs for more details.",mre="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";aB.exports=Sre;async function Sre(e){Oh.trace("configure cluster called with:",e),nB.checkClusteringEnabled();let t=fre(e);if(t)throw sB(t,t.message,iB.BAD_REQUEST,void 0,void 0,!0);let r=await nB.getAllNodeRecords(),n=[];for(let u=0,d=r.length;u<d;u++){let f=await oB(_re,{operation:lre.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[u].name},r[u].name);n.push(f)}Oh.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 oB(dre,d,d.node_name);s.push(f)}Oh.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"&&(Oh.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(ure.isEmptyOrZeroLength(o))return{message:hre,connections:c};if(l)return{message:mre,failed_nodes:o,connections:c};throw sB(new Error,pre,iB.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Sre,"configureCluster");async function oB(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(oB,"functionWrapper")});var _B=g((ROe,uB)=>{"use strict";var O_=require("joi"),Tre=rt(),{validateSchemaExists:cB,validateTableExists:gre,validateSchemaName:lB}=ws(),Rre=O_.object({operation:O_.string().valid("purge_stream"),schema:O_.string().custom(cB).custom(lB).optional(),database:O_.string().custom(cB).custom(lB).optional(),table:O_.string().custom(gre).required()});function Are(e){return Tre.validateBySchema(e,Rre)}a(Are,"purgeStreamValidator");uB.exports=Are});var DA=g((OOe,dB)=>{"use strict";var{handleHDBError:Ore,hdb_errors:bre}=oe(),{HTTP_STATUS_CODES:Nre}=bre,yre=_B(),Ire=mt(),wre=pi();dB.exports=Cre;async function Cre(e){e.schema=e.schema??e.database;let t=yre(e);if(t)throw Ore(t,t.message,Nre.BAD_REQUEST,void 0,void 0,!0);wre.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Ire.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(Cre,"purgeStream")});var yh=g((NOe,SB)=>{"use strict";var PA=pi(),Dre=mt(),hB=X(),Nh=C(),Na=et(),Lre=K(),LA=x(),{RemotePayloadObject:Pre}=h_(),{ErrorCode:fB}=require("nats"),EB=hB.get(Nh.CONFIG_PARAMS.CLUSTERING_ENABLED),pB=hB.get(Nh.CONFIG_PARAMS.CLUSTERING_NODENAME);SB.exports={clusterStatus:Mre,buildNodeStatus:mB};async function Mre(){let e={node_name:pB,is_enabled:EB,connections:[]};if(!EB)return e;let t=await PA.getAllNodeRecords();if(Lre.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(mB(t[n],e.connections));return await Promise.allSettled(r),e}a(Mre,"clusterStatus");async function mB(e,t){let r=e.name,n=new Pre(Nh.OPERATIONS_ENUM.CLUSTER_STATUS,pB,void 0,await PA.getSystemInfo()),s,i,o=Na.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Dre.request(Na.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Na.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Na.CLUSTER_STATUS_STATUSES.CLOSED,LA.error(`Error getting node status from ${r} `,s))}catch(l){LA.warn(`Error getting node status from ${r}`,l),l.code===fB.NoResponders?o=Na.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===fB.Timeout?o=Na.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Na.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Ure(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!==Nh.PRE_4_0_0_VERSION&&await PA.upsertNodeRecord(l)}catch(l){LA.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(mB,"buildNodeStatus");function Ure(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(Ure,"NodeStatusObject")});var wh=g((IOe,TB)=>{"use strict";var{handleHDBError:vre,hdb_errors:Bre}=oe(),{HTTP_STATUS_CODES:Hre}=Bre,Gre=mt(),qre=pi(),MA=K(),Ih=require("joi"),xre=rt(),Fre=2e3,kre=Ih.object({timeout:Ih.number().min(1),connected_nodes:Ih.boolean(),routes:Ih.boolean()});TB.exports=$re;async function $re(e){qre.checkClusteringEnabled();let t=xre.validateBySchema(e,kre);if(t)throw vre(t,t.message,Hre.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||MA.autoCastBoolean(n),o=s===void 0||MA.autoCastBoolean(s),c={nodes:[]},l=await Gre.getServerList(r??Fre),_={};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:MA.autoCast(m.split(":")[1])})):[]),c.nodes.push(h)}}return c}a($re,"clusterNetwork")});var OB=g((COe,AB)=>{"use strict";var UA=require("joi"),gB=rt(),{route_constraints:RB}=Ng();AB.exports={setRoutesValidator:Vre,deleteRoutesValidator:Yre};function Vre(e){let t=UA.object({server:UA.valid("hub","leaf").required(),routes:RB.required()});return gB.validateBySchema(e,t)}a(Vre,"setRoutesValidator");function Yre(e){let t=UA.object({routes:RB.required()});return gB.validateBySchema(e,t)}a(Yre,"deleteRoutesValidator")});var Dh=g((LOe,IB)=>{"use strict";var ya=lt(),vA=K(),Ch=C(),bB=OB(),{handleHDBError:NB,hdb_errors:Kre}=oe(),{HTTP_STATUS_CODES:yB}=Kre,Wre="cluster routes successfully set",Qre="cluster routes successfully deleted";IB.exports={setRoutes:jre,getRoutes:zre,deleteRoutes:Jre};function jre(e){let t=bB.setRoutesValidator(e);if(t)throw NB(t,t.message,yB.BAD_REQUEST,void 0,void 0,!0);let r=ya.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=vA.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"?ya.updateConfigValue(Ch.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):ya.updateConfigValue(Ch.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:Wre,set:o,skipped:i}}a(jre,"setRoutes");function zre(){let e=ya.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(zre,"getRoutes");function Jre(e){let t=bB.deleteRoutesValidator(e);if(t)throw NB(t,t.message,yB.BAD_REQUEST,void 0,void 0,!0);let r=ya.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=vA.isEmptyOrZeroLength(n)?null:n,ya.updateConfigValue(Ch.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=vA.isEmptyOrZeroLength(s)?null:s,ya.updateConfigValue(Ch.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:Qre,deleted:i,skipped:o}}a(Jre,"deleteRoutes")});var CB=g((MOe,wB)=>{"use strict";var b_=require("alasql"),Ia=require("recursive-iterator"),ds=x(),Xre=K(),N_=C(),BA=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,ene(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=>N_.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=>!N_.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][N_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Zre(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(_=>!N_.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new b_.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 Zre(e){return e.filter(t=>t[N_.PERMS_CRUD_ENUM.READ])}a(Zre,"filterReadRestrictedAttrs");function ene(e,t,r,n,s){tne(e,t,r,n,s)}a(ene,"interpretAST");function y_(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(y_,"addSchemaTableToMap");function tne(e,t,r,n,s){if(!e){ds.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof b_.yy.Insert?ine(e,t,r):e instanceof b_.yy.Select?rne(e,t,r,n,s):e instanceof b_.yy.Update?nne(e,t,r):e instanceof b_.yy.Delete?sne(e,t,r):ds.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(tne,"getRecordAttributesAST");function rne(e,t,r,n,s){if(!e){ds.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Xre.isEmptyOrZeroLength(i)){ds.error("No schema specified");return}e.from.forEach(c=>{y_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),y_(c.table,t,r,n,s)});let o=new Ia(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{ds.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 Ia(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{ds.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 Ia(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{ds.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 Ia(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{ds.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(l.columnid)<0&&t.get(u).get(_).push(l.columnid)}}}a(rne,"getSelectAttributes");function nne(e,t,r){if(!e){ds.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Ia(e.columns),s=e.table.databaseid;y_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&HA(e.table.tableid,s,i.columnid,t,r)}a(nne,"getUpdateAttributes");function sne(e,t,r){if(!e){ds.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Ia(e.where),s=e.table.databaseid;y_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&HA(e.table.tableid,s,i.columnid,t,r)}a(sne,"getDeleteAttributes");function ine(e,t,r){if(!e){ds.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Ia(e.columns),s=e.into.databaseid;y_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&HA(e.into.tableid,s,i.columnid,t,r)}a(ine,"getInsertAttributes");function HA(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(HA,"pushAttribute");wB.exports=BA});var Ph=g((vOe,MB)=>{var Lh=la(),DB=require("chalk"),hn=x(),LB=require("prompt"),{promisify:one}=require("util"),GA=C(),ane=require("fs-extra"),cne=require("path"),lne=K(),une=Vi(),PB=X();PB.initSync();var _ne=require("moment"),dne=one(LB.get),fne=cne.join(PB.getHdbBasePath(),GA.LICENSE_KEY_DIR_NAME,GA.LICENSE_FILE_NAME,GA.LICENSE_FILE_NAME);MB.exports={getFingerprint:hne,setLicense:Ene,parseLicense:qA,register:pne,getRegistrationInfo:Sne};async function Ene(e){if(e&&e.key&&e.company){try{hn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await qA(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw hn.error(r),hn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Ene,"setLicense");async function hne(){let e={};try{e=await Lh.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw hn.error(r),hn.error(t),new Error(r)}return e}a(hne,"getFingerprint");async function qA(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");hn.info("Validating license input...");let r=Lh.validateLicense(e,t);if(hn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(hn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(hn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{hn.info("writing license to disk"),await ane.writeFile(fne,JSON.stringify({license_key:e,company:t}))}catch(n){throw hn.error("Failed to write License"),n}return"Registration successful."}a(qA,"parseLicense");async function pne(){let e=await mne();return qA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(pne,"register");async function mne(){let e=await Lh.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:DB.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:DB.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{LB.start()}catch(n){hn.error(n)}let r;try{r=await dne(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(mne,"promptForRegistration");async function Sne(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Lh.getLicense()}catch(r){throw hn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(lne.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=une.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=_ne.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Sne,"getRegistrationInfo")});var vB=g((HOe,UB)=>{"use strict";var Tne=et(),xA=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+Tne.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"}};UB.exports=xA});var GB=g((qOe,HB)=>{"use strict";var BB=et(),FA=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+BB.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+BB.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"}};HB.exports=FA});var xB=g((FOe,qB)=>{"use strict";var kA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};qB.exports=kA});var kB=g(($Oe,FB)=>{"use strict";var gne=et(),$A=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+gne.SERVER_SUFFIX.ADMIN,this.password=r}};FB.exports=$A});var Hh=g((YOe,YB)=>{"use strict";var $c=require("path"),vh=require("fs-extra"),Rne=vB(),Ane=GB(),One=xB(),bne=kB(),VA=Pr(),Yc=K(),xr=lt(),Uh=C(),I_=et(),{CONFIG_PARAMS:Tt}=Uh,Kc=x(),w_=X(),$B=_i(),YA=mt(),Vc="clustering",Nne=1e4,VB=50;YB.exports={generateNatsConfig:Ine,removeNatsConfig:wne,getHubConfigPath:yne};function yne(){let e=w_.get(Tt.ROOTPATH);return $c.join(e,Vc,I_.NATS_CONFIG_FILES.HUB_SERVER)}a(yne,"getHubConfigPath");async function Ine(e=!1,t=void 0){w_.initSync();let r=w_.get(Tt.ROOTPATH),n=$c.join(r,Vc,I_.PID_FILES.HUB),s=$c.join(r,Vc,I_.PID_FILES.LEAF),i=xr.getConfigFromFile(Tt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=$c.join(r,Vc,I_.NATS_CONFIG_FILES.HUB_SERVER),c=$c.join(r,Vc,I_.NATS_CONFIG_FILES.LEAF_SERVER),l=xr.getConfigFromFile(Tt.CLUSTERING_TLS_CERTIFICATE),_=xr.getConfigFromFile(Tt.CLUSTERING_TLS_PRIVATEKEY),u=xr.getConfigFromFile(Tt.CLUSTERING_TLS_CERT_AUTH),d=xr.getConfigFromFile(Tt.CLUSTERING_TLS_INSECURE),f=xr.getConfigFromFile(Tt.CLUSTERING_TLS_VERIFY),E=xr.getConfigFromFile(Tt.CLUSTERING_NODENAME),h=xr.getConfigFromFile(Tt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await YA.checkNATSServerInstalled()||Bh("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await VA.listUsers(),S=xr.getConfigFromFile(Tt.CLUSTERING_USER),R=await VA.getClusterUser();(Yc.isEmpty(R)||R.active!==!0)&&Bh(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Mh(Tt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Mh(Tt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Mh(Tt.CLUSTERING_HUBSERVER_NETWORK_PORT),await Mh(Tt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let T=[],A=[];for(let[z,J]of m.entries())J.role.role===Uh.ROLE_TYPES_ENUM.CLUSTER_USER&&J.active&&(T.push(new bne(J.username,$B.decrypt(J.hash))),A.push(new One(J.username,$B.decrypt(J.hash))));let P=[],{hub_routes:v}=xr.getClusteringRoutes();if(!Yc.isEmptyOrZeroLength(v))for(let z of v)P.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${z.host}:${z.port}`);let U=new Rne(xr.getConfigFromFile(Tt.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,l,_,u,d,f,h,xr.getConfigFromFile(Tt.CLUSTERING_HUBSERVER_CLUSTER_NAME),xr.getConfigFromFile(Tt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),P,T,A);u==null&&(delete U.tls.ca_file,delete U.leafnodes.tls.ca_file),t=Yc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Uh.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await vh.writeJson(o,U),Kc.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 Ane(xr.getConfigFromFile(Tt.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===Uh.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await vh.writeJson(c,j),Kc.trace(`Leaf server config written to ${c}`))}a(Ine,"generateNatsConfig");async function Mh(e){let t=w_.get(e);return Yc.isEmpty(t)&&Bh(`port undefined for '${e}'`),await Yc.isPortTaken(t)&&Bh(`'${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(Mh,"isPortAvailable");function Bh(e){let t=`Error generating clustering config: ${e}`;Kc.error(t),console.error(t),process.exit(1)}a(Bh,"generateNatsConfigError");async function wne(e){let{port:t,config_file:r}=YA.getServerConfig(e),{username:n,decrypt_hash:s}=await VA.getClusterUser(),i=0,o=2e3;for(;i<VB;){try{let u=await YA.createConnection(t,n,s,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Kc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=VB)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&&Kc.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await Yc.async_set_timeout(_)}let c="0".repeat(Nne),l=$c.join(w_.get(Tt.ROOTPATH),Vc,r);await vh.writeFile(l,c),await vh.remove(l),Kc.notify(e,"started.")}a(wne,"removeNatsConfig")});var JB=g((WOe,zB)=>{"use strict";var pn=X(),Cne=la(),me=C(),C_=et(),mi=require("path"),{PACKAGE_ROOT:qh}=C(),KB=X(),Gh=K(),Wc="/dev/null",Dne=mi.join(qh,"launchServiceScripts"),WB=mi.join(qh,"utility/scripts"),Lne=mi.join(WB,me.HDB_RESTART_SCRIPT),QB=mi.resolve(qh,"dependencies",`${process.platform}-${process.arch}`,C_.NATS_BINARY_NAME);function jB(){let t=Cne.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 Gh.noBootFile()&&(n[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Gh.getEnvCliRootPath()),{name:me.PROCESS_DESCRIPTORS.HDB,script:me.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:qh}}a(jB,"generateMainServerConfig");var Pne=9930;function Mne(){pn.initSync(!0);let e=pn.get(me.CONFIG_PARAMS.ROOTPATH),t=mi.join(e,"clustering",C_.NATS_CONFIG_FILES.HUB_SERVER),r=mi.join(pn.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=KB.get(me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=C_.LOG_LEVEL_FLAGS[pn.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Pne?"-"+n:""),script:QB,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 pn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Wc,i.error_file=Wc),i}a(Mne,"generateNatsHubServerConfig");var Une=9940;function vne(){pn.initSync(!0);let e=pn.get(me.CONFIG_PARAMS.ROOTPATH),t=mi.join(e,"clustering",C_.NATS_CONFIG_FILES.LEAF_SERVER),r=mi.join(pn.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=KB.get(me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=C_.LOG_LEVEL_FLAGS[pn.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Une?"-"+n:""),script:QB,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 pn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Wc,i.error_file=Wc),i}a(vne,"generateNatsLeafServerConfig");function Bne(){pn.initSync();let e=mi.join(pn.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:Dne,autorestart:!1};return pn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Wc,t.error_file=Wc),t}a(Bne,"generateClusteringUpgradeV4ServiceConfig");function Hne(){let e={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.RESTART_HDB};return Gh.noBootFile()&&(e[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Gh.getEnvCliRootPath()),{...{name:me.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:WB},script:Lne}}a(Hne,"generateRestart");function Gne(){return{apps:[jB()]}}a(Gne,"generateAllServiceConfigs");zB.exports={generateAllServiceConfigs:Gne,generateMainServerConfig:jB,generateRestart:Hne,generateNatsHubServerConfig:Mne,generateNatsLeafServerConfig:vne,generateClusteringUpgradeV4ServiceConfig:Bne}});var Qc=g((zOe,uH)=>{"use strict";var He=C(),qne=K(),Ti=Hh(),xh=mt(),Si=et(),ho=JB(),Fh=X(),po=x(),xne=pi(),{startWorker:XB,onMessageFromWorkers:Fne}=tt(),kne=hi(),jOe=require("util"),$ne=require("child_process"),Vne=require("fs"),{execFile:Yne}=$ne,we;uH.exports={enterPM2Mode:Kne,start:mo,stop:KA,reload:eH,restart:tH,list:WA,describe:nH,connect:gi,kill:Jne,startAllServices:Xne,startService:QA,getUniqueServicesList:sH,restartAllServices:Zne,isServiceRegistered:iH,reloadStopStart:oH,restartHdb:rH,deleteProcess:jne,startClusteringProcesses:cH,startClusteringThreads:lH,isHdbRestartRunning:zne,isClusteringRunning:tse,stopClustering:ese,reloadClustering:rse};var D_=!1;Fne(e=>{e.type==="restart"&&Fh.initSync(!0)});function Kne(){D_=!0}a(Kne,"enterPM2Mode");function gi(){return we||(we=require("pm2")),new Promise((e,t)=>{we.connect((r,n)=>{po.setupConsoleLogging(),r&&t(r),e(n)})})}a(gi,"connect");var Fr,Wne=10,ZB;function mo(e,t=!1){if(D_)return Qne(e);let r=Yne(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Fr.indexOf(r);o>-1&&Fr.splice(o,1),!ZB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Wne&&(Vne.existsSync(Ti.getHubConfigPath())?mo(e):(await Ti.generateNatsConfig(!0),mo(e),await new Promise(c=>setTimeout(c,3e3)),await Ti.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ti.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Fh.get(He.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,_=0,u;for(;l=c.exec(i);){if(l.index&&Si.LOG_LEVEL_HIERARCHY[o]>=Si.LOG_LEVEL_HIERARCHY[u||"info"]){let E=u===Si.LOG_LEVELS.ERR||u===Si.LOG_LEVELS.WRN?po.OUTPUTS.STDERR:po.OUTPUTS.STDOUT;po.logCustomLevel(u||"info",E,n,i.slice(_,l.index).trim())}let[d,f]=l;_=l.index+d.length,u=Si.LOG_LEVELS[f]}if(Si.LOG_LEVEL_HIERARCHY[o]>=Si.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===Si.LOG_LEVELS.ERR||u===Si.LOG_LEVELS.WRN?po.OUTPUTS.STDERR:po.OUTPUTS.STDOUT;po.logCustomLevel(u||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),Fr=[],!Fr&&!t){let i=a(()=>{ZB=!0,Fr&&(Fr.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)}Fr.push(r)}a(mo,"start");function Qne(e){return new Promise(async(t,r)=>{try{await gi()}catch(n){r(n)}we.start(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(Qne,"startWithPM2");function KA(e){if(!D_){for(let t of Fr||[])t.name===e&&(Fr.splice(Fr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await gi()}catch(n){r(n)}we.stop(e,async(n,s)=>{n&&(we.disconnect(),r(n)),we.delete(e,(i,o)=>{i&&(we.disconnect(),r(n)),we.disconnect(),t(o)})})})}a(KA,"stop");function eH(e){return new Promise(async(t,r)=>{try{await gi()}catch(n){r(n)}we.reload(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(eH,"reload");function tH(e){if(!D_)for(let t of Fr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await gi()}catch(n){r(n)}we.restart(e,(n,s)=>{we.disconnect(),t(s)})})}a(tH,"restart");function jne(e){return new Promise(async(t,r)=>{try{await gi()}catch(n){r(n)}we.delete(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(jne,"deleteProcess");async function rH(){await mo(ho.generateRestart())}a(rH,"restartHdb");async function zne(){let e=await WA();for(let t in e)if(e[t].name===He.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(zne,"isHdbRestartRunning");function WA(){return new Promise(async(e,t)=>{try{await gi()}catch(r){t(r)}we.list((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(WA,"list");function nH(e){return new Promise(async(t,r)=>{try{await gi()}catch(n){r(n)}we.describe(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(nH,"describe");function Jne(){if(!D_){for(let e of Fr||[])e.kill();Fr=[];return}return new Promise(async(e,t)=>{try{await gi()}catch(r){t(r)}we.killDaemon((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(Jne,"kill");async function Xne(){try{await cH(),await lH(),await mo(ho.generateAllServiceConfigs())}catch(e){throw we?.disconnect(),e}}a(Xne,"startAllServices");async function QA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case He.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=ho.generateMainServerConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=ho.generateNatsIngestServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=ho.generateNatsReplyServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=ho.generateNatsHubServerConfig(),await mo(r,t),await Ti.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=ho.generateNatsLeafServerConfig(),await mo(r,t),await Ti.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=ho.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await mo(r)}catch(r){throw we?.disconnect(),r}}a(QA,"startService");async function sH(){try{let e=await WA(),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 we?.disconnect(),e}}a(sH,"getUniqueServicesList");async function Zne(e=[]){try{let t=!1,r=await sH();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 tH(o))}t&&await oH(He.PROCESS_DESCRIPTORS.HDB)}catch(t){throw we?.disconnect(),t}}a(Zne,"restartAllServices");async function iH(e){if(Fr?.find(r=>r.name===e))return!0;let t=await kne.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(iH,"isServiceRegistered");async function oH(e){let t=Fh.get(He.CONFIG_PARAMS.THREADS_COUNT)??Fh.get(He.CONFIG_PARAMS.THREADS),r=await nH(e),n=qne.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await KA(e),await QA(e)):e===He.PROCESS_DESCRIPTORS.HDB?await rH():await eH(e)}a(oH,"reloadStopStart");var aH;async function cH(e=!1){for(let t in He.CLUSTERING_PROCESSES){let r=He.CLUSTERING_PROCESSES[t];await QA(r,e)}}a(cH,"startClusteringProcesses");async function lH(){aH=XB(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await xh.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await xh.updateLocalStreams();let e=await xne.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===He.PRE_4_0_0_VERSION){po.info("Starting clustering upgrade 4.0.0 process"),XB(He.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(lH,"startClusteringThreads");async function ese(){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 aH.terminate();else{let t=He.CLUSTERING_PROCESSES[e];await KA(t)}}a(ese,"stopClustering");async function tse(){for(let e in He.CLUSTERING_PROCESSES){let t=He.CLUSTERING_PROCESSES[e];if(await iH(t)===!1)return!1}return!0}a(tse,"isClusteringRunning");async function rse(){await Ti.generateNatsConfig(!0),await xh.reloadNATSHub(),await xh.reloadNATSLeaf(),await Ti.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ti.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(rse,"reloadClustering")});var Vh={};Fe(Vh,{compactOnStart:()=>nse,copyDb:()=>pH});async function nse(){L_.notify("Running compact on start"),console.log("Running compact on start");let e=(0,jA.get)(So.CONFIG_PARAMS.ROOTPATH),t=new Map,r=wr();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,kh.join)(e,"backup",n+".mdb"),o=(0,kh.join)(e,So.DATABASES_DIR_NAME,n+"-copy.mdb"),c=await _H(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 pH(n,o),console.log("Backing up",n,"to",i),await(0,wa.move)(s,i,{overwrite:!0})}Ju();for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,wa.move)(i,s,{overwrite:!0}),await(0,wa.remove)((0,kh.join)(e,So.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));Ju()}catch(n){L_.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,zA.updateConfigValue)(So.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,wa.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Ju(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await _H(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(ZM,"runCommand");async function q8(){try{await p8.access(eR)}catch{return!1}let e=await ZM(`${eR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return m8.eq(t,H8)}a(q8,"checkNATSServerInstalled");async function iR(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 I8({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(iR,"createConnection");function eU(){Dr=void 0,ma=void 0,Sa=void 0,Ta=void 0}a(eU,"clearClientCache");async function x8(){Dr&&(await Dr.drain(),Dr=void 0,ma=void 0,Sa=void 0,Ta=void 0)}a(x8,"closeConnection");var Dr,Ta;async function Ku(){return Ta||(Ta=iR(Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Dr=await Ta),Dr||Ta}a(Ku,"getConnection");async function Wu(){if(ma)return ma;ga(Dr)&&await Ku();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 Dr.jetstreamManager({domain:e,timeout:6e4}),ma}a(Wu,"getJetStreamManager");async function tU(){if(Sa)return Sa;ga(Dr)&&await Ku();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=Dr.jetstream({domain:e,timeout:6e4}),Sa}a(tU,"getJetStream");async function Bs(){let e=Dr||await Ku(),t=ma||await Wu(),r=Sa||await tU();return{connection:e,jsm:t,js:r}}a(Bs,"getNATSReferences");async function F8(e){let t=Vt.get(we.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await JM.getClusterUser(),s=await iR(t,r,n),i=sR(),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(F8,"getServerList");async function oR(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:w8.File,retention:C8.Limits,subjects:t,discard:D8.Old,max_msgs:s,max_bytes:i,max_age:n})}a(oR,"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 k8(e){let{jsm:t}=await Bs();await t.streams.delete(e)}a(k8,"deleteLocalStream");async function $8(e){let{connection:t}=await Bs(),r=[],n=sR(),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($8,"listRemoteStreams");async function V8(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Bs(),i=WM(),o={durable_name:i,ack_policy:rR.Explicit};t&&(o.deliver_policy=nR.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=tR(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(V8,"viewStream");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:rR.Explicit};t&&(o.deliver_policy=nR.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=tR(_.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(Y8,"viewStreamIterator");async function K8(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}`),v8(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 oR(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(K8,"publishToStream");function nU(e,t){t===void 0&&(t=P8());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=Yu.join(Vt.get(we.CONFIG_PARAMS.ROOTPATH),B8);if(e===we.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ga(Zg)&&(Zg={port:$u.getConfigFromFile(we.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:$u.getConfigFromFile(we.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zt.SERVER_SUFFIX.HUB,config_file:Zt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Yu.join(t,Zt.PID_FILES.HUB),hdb_nats_path:t}),Zg;if(e===we.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ga(Xg)&&(Xg={port:$u.getConfigFromFile(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:$u.getConfigFromFile(we.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zt.SERVER_SUFFIX.LEAF,config_file:Zt.NATS_CONFIG_FILES.LEAF_SERVER,domain:$u.getConfigFromFile(we.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zt.SERVER_SUFFIX.LEAF,pid_file_path:Yu.join(t,Zt.PID_FILES.LEAF),hdb_nats_path:t}),Xg;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:rR.Explicit,durable_name:r,deliver_policy:nR.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(sU,"createConsumer");async function W8(e,t,r){await e.consumers.delete(t,r)}a(W8,"removeConsumer");function Q8(e){return e.split(".")[1]}a(Q8,"extractServerName");async function j8(e,t,r=6e4,n=sR()){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 tR(c.data)}a(j8,"request");function aR(e){return new Promise(async(t,r)=>{let n=R8(eR,["--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(aR,"reloadNATS");async function z8(){let{pid_file_path:e}=Cc(we.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await aR(e)}a(z8,"reloadNATSHub");async function J8(){let{pid_file_path:e}=Cc(we.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await aR(e)}a(J8,"reloadNATSLeaf");function X8(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(X8,"requestErrorHandler");async function Z8(e,t){let r=t+Zt.SERVER_SUFFIX.LEAF,{connection:n}=await Bs(),{jsm:s}=await a6(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 W8(s,c,n.info.server_name)}catch(_){us.trace(_)}})}a(Z8,"updateRemoteConsumer");async function e6(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&&N8()<Vt.get(we.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=Jg();await c(o)}await O8(o),n==="stop"&&await hE.async_set_timeout(1e3)}a(e6,"updateConsumerIterator");function iU(e){return A8.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=s6(e,t,n);await oR(r,[s])}a(oU,"createLocalTableStream");async function t6(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(t6,"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 Ku()).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 r6(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(r6,"purgeSchemaTableStreams");async function n6(e){return(await Wu()).streams.info(e)}a(n6,"getStreamInfo");function s6(e,t,r){return`${Zt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(s6,"createSubjectName");async function mE(){if(Vu)return Vu;if(Vu=(await Wu())?.nc?.info?.server_name,Vu===void 0)throw new Error("Unable to get jetstream manager server name");return Vu}a(mE,"getJsmServerName");async function i6(){let e=await Wu(),t=await mE(),r=await rU();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=o6(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(i6,"updateLocalStreams");function o6(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(o6,"updateStreamLimits");async function a6(e){let t,r;try{t=await Dr.jetstream({domain:e}),r=await Dr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw us.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(a6,"connectToRemoteJS")});var RE=T((_Re,dU)=>{"use strict";var Dc=hf(),Lc=mM(),c6=x(),l6=require("uuid").v4,uRe=require("clone"),TE=di(),Pc=D(),u6=require("util"),lo=Mn(),{handleHDBError:Lr,hdb_errors:_6}=oe(),{HDB_ERROR_MSGS:SE,HTTP_STATUS_CODES:Pr}=_6,{SchemaEventMsg:gE}=is(),lU=pt(),{getDatabases:d6}=(ge(),ie(ke)),{transformReq:Mc}=K();dU.exports={createSchema:f6,createSchemaStructure:uU,createTable:E6,createTableStructure:_U,createAttribute:T6,dropSchema:h6,dropTable:p6,dropAttribute:m6,getBackup:g6};async function f6(e){let t=await uU(e);return TE.signalSchemaChange(new gE(process.pid,e.operation,e.schema)),t}a(f6,"createSchema");async function uU(e){let t=Dc.schema_object(e);if(t)throw Lr(t,t.message,Pr.BAD_REQUEST,void 0,void 0,!0);if(Mc(e),!await Lc.checkSchemaExists(e.schema))throw Lr(new Error,SE.SCHEMA_EXISTS_ERR(e.schema),Pr.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 E6(e){return Mc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await _U(e)}a(E6,"createTable");async function _U(e){let t=Dc.create_table_object(e);if(t)throw Lr(t,t.message,Pr.BAD_REQUEST,void 0,void 0,!0);if(Dc.validateTableResidence(e.residence),!await Lc.checkSchemaTableExists(e.schema,e.table))throw Lr(new Error,SE.TABLE_EXISTS_ERR(e.schema,e.table),Pr.BAD_REQUEST,Pc.LOG_LEVELS.ERROR,SE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:l6(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await lo.createTable(n,e);else throw Lr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Pr.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 h6(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 Lr(n,n.message,Pr.BAD_REQUEST,void 0,void 0,!0);Mc(e);let s=await Lc.checkSchemaExists(e.schema);if(s)throw Lr(new Error,s,Pr.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(h6,"dropSchema");async function p6(e){let t=Dc.table_object(e);if(t)throw Lr(t,t.message,Pr.BAD_REQUEST,void 0,void 0,!0);Mc(e);let r=await Lc.checkSchemaTableExists(e.schema,e.table);if(r)throw Lr(new Error,r,Pr.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(p6,"dropTable");async function m6(e){let t=Dc.attribute_object(e);if(t)throw Lr(t,t.message,Pr.BAD_REQUEST,void 0,void 0,!0);Mc(e);let r=await Lc.checkSchemaTableExists(e.schema,e.table);if(r)throw Lr(new Error,r,Pr.NOT_FOUND,Pc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Lr(new Error,"You cannot drop a hash attribute",Pr.BAD_REQUEST,void 0,void 0,!0);if(Pc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Lr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Pr.BAD_REQUEST,void 0,void 0,!0);try{return await lo.dropAttribute(e),S6(e),TE.signalSchemaChange(new gE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw c6.error(`Got an error deleting attribute ${u6.inspect(e)}.`),n}}a(m6,"dropAttribute");function S6(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(S6,"dropAttributeFromGlobal");async function T6(e){Mc(e);let t=d6()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Lr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Pr.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(T6,"createAttribute");function g6(e){return lo.getBackup(e)}a(g6,"getBackup")});var EU=T((fRe,fU)=>{"use strict";var{OPERATIONS_ENUM:R6}=D(),cR=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=R6.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};fU.exports=cR});var lR=T((pRe,TU)=>{"use strict";var A6=Mn(),hRe=EU(),AE=K(),OE=D(),O6=X(),{handleHDBError:hU,hdb_errors:b6}=oe(),{HDB_ERROR_MSGS:pU,HTTP_STATUS_CODES:mU}=b6,N6=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=y6;async function y6(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(!O6.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)&&N6.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await A6.readAuditLog(e)}a(y6,"readAuditLog")});var RU=T((SRe,gU)=>{"use strict";var{OPERATIONS_ENUM:I6}=D(),uR=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=I6.GET_BACKUP,this.schema=t,this.table=r}};gU.exports=uR});var bU=T((ARe,OU)=>{"use strict";var w6=Mn(),gRe=RU(),_R=K(),C6=D(),RRe=X(),{handleHDBError:D6,hdb_errors:L6}=oe(),{HDB_ERROR_MSGS:AU,HTTP_STATUS_CODES:P6}=L6;OU.exports=M6;async function M6(e){if(_R.isEmpty(e.schema))throw new Error(AU.SCHEMA_REQUIRED_ERR);if(_R.isEmpty(e.table))throw new Error(AU.TABLE_REQUIRED_ERR);let t=_R.checkSchemaTableExist(e.schema,e.table);if(t)throw D6(new Error,t,P6.NOT_FOUND,C6.LOG_LEVELS.ERROR,t,!0);return await w6.getBackup(read_audit_log_object)}a(M6,"getBackup")});var DU=T((bRe,CU)=>{var uo=require("validate.js"),yU=tt(),Uc=D(),{handleHDBError:U6,hdb_errors:v6}=oe(),{HDB_ERROR_MSGS:mt,HTTP_STATUS_CODES:B6}=v6,dR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),H6={STRUCTURE_USER:"structure_user"},NU=Object.values(Uc.ROLE_TYPES_ENUM),G6="attribute_permissions",q6="attribute_name",{PERMS_CRUD_ENUM:vc}=Uc,x6=[G6,...Object.values(vc)],IU=[vc.READ,vc.INSERT,vc.UPDATE],F6=[q6,...IU];function k6(e){let t=dR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,wU(e,t)}a(k6,"addRoleValidation");function $6(e){let t=dR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,wU(e,t)}a($6,"alterRoleValidation");function V6(e){let t=dR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,yU.validateObject(e,t)}a(V6,"dropRoleValidation");var Y6=["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++)Y6.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=K6(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===H6.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=>{x6.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=>{!F6.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 W6(r)}a(wU,"customValidate");CU.exports={addRoleValidation:k6,alterRoleValidation:$6,dropRoleValidation:V6};function K6(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(K6,"validateNoSUPerms");function W6(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 U6(new Error,n,B6.BAD_REQUEST)}else return null}a(W6,"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((yRe,UU)=>{"use strict";var LU=br(),PU=sr(),Q6=na(),ER=DU(),hR=di(),j6=require("uuid").v4,z6=require("util"),bE=D(),J6=K(),pR=PU.searchByValue,X6=PU.searchByHash,Z6=z6.promisify(Q6.delete),e9=os(),t9=bc(),{hdb_errors:r9,handleHDBError:Ra}=oe(),{HDB_ERROR_MSGS:MU,HTTP_STATUS_CODES:Qu}=r9,{UserEventMsg:mR}=is();UU.exports={addRole:n9,alterRole:s9,dropRole:i9,listRoles:o9};function fR(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(fR,"scrubRoleDetails");async function n9(e){let t=ER.addRoleValidation(e);if(t)throw t;e=fR(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 pR(r)||[])}catch(i){throw Ra(i)}if(n&&n.length>0)throw Ra(new Error,MU.ROLE_ALREADY_EXISTS(e.role),Qu.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 LU.insert(s),hR.signalUserChange(new mR(process.pid)),e=fR(e),e}a(n9,"addRole");async function s9(e){let t=ER.alterRoleValidation(e);if(t)throw t;e=fR(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",Qu.BAD_REQUEST,void 0,void 0,!0);return await hR.signalUserChange(new mR(process.pid)),e}a(s9,"alterRole");async function i9(e){let t=ER.dropRoleValidation(e);if(t)throw Ra(new Error,t,Qu.BAD_REQUEST,void 0,void 0,!0);let r=new t9(bE.SYSTEM_SCHEMA_NAME,bE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await X6(r));if(n.length===0)throw Ra(new Error,MU.ROLE_NOT_FOUND,Qu.NOT_FOUND,void 0,void 0,!0);let s=new e9(bE.SYSTEM_SCHEMA_NAME,bE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await pR(s)),o=!1;if(J6.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`,Qu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Z6(c),hR.signalUserChange(new mR(process.pid)),`${n[0].role} successfully deleted`}a(i9,"dropRole");async function o9(){return pR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(o9,"listRoles")});var GU=T((wRe,HU)=>{"use strict";var a9=X(),_o=require("joi"),c9=tt(),vU=require("moment"),l9=require("fs-extra"),SR=require("path"),u9=require("lodash"),ju=D(),{LOG_LEVELS:Aa}=D(),_9="YYYY-MM-DD hh:mm:ss",d9=SR.resolve(__dirname,"../logs");HU.exports=function(e){return c9.validateBySchema(e,f9)};var f9=_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(E9)});function BU(e,t){if(vU(e,vU.ISO_8601).format(_9)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(BU,"validateDatetime");function E9(e,t){if(u9.invert(ju.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=a9.get(ju.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?ju.LOG_NAMES.HDB:e,i=s===ju.LOG_NAMES.INSTALL?SR.join(d9,ju.LOG_NAMES.INSTALL):SR.join(n,s);return l9.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(E9,"validateReadLogPath")});var gR=T((DRe,xU)=>{"use strict";var yE=D(),h9=x(),p9=X(),m9=GU(),TR=require("path"),qU=require("fs-extra"),{once:S9}=require("events"),{handleHDBError:T9,hdb_errors:g9}=oe(),{PACKAGE_ROOT:R9}=D(),A9=TR.join(R9,"logs"),O9=1e3,b9=200;xU.exports=N9;async function N9(e){let t=m9(e);if(t)throw T9(t,t.message,g9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=p9.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?TR.join(A9,yE.LOG_NAMES.INSTALL):TR.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?O9: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)*b9,0));let S=qU.createReadStream(s,{start:m});S.on("error",v=>{h9.error(v)});let g=0,R=[],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&&g<E?g++:v.level===o&&k>=H&&k<=j&&(fo(v,f,R),g++,g===h&&S.destroy());break;case(i&&c):k=new Date(v.timestamp),H=new Date(l),v.level===o&&k>=H&&g<E?g++:v.level===o&&k>=H&&(fo(v,f,R),g++,g===h&&S.destroy());break;case(i&&_):k=new Date(v.timestamp),j=new Date(u),v.level===o&&k<=j&&g<E?g++:v.level===o&&k<=j&&(fo(v,f,R),g++,g===h&&S.destroy());break;case(c&&_):k=new Date(v.timestamp),H=new Date(l),j=new Date(u),k>=H&&k<=j&&g<E?g++:k>=H&&k<=j&&(fo(v,f,R),g++,g===h&&S.destroy());break;case i:v.level===o&&g<E?g++:v.level===o&&(fo(v,f,R),g++,g===h&&S.destroy());break;case c:k=new Date(v.timestamp),H=new Date(l),k>=H&&g<E?g++:k>=H&&g>=E&&(fo(v,f,R),g++,g===h&&S.destroy());break;case _:k=new Date(v.timestamp),j=new Date(u),k<=j&&g<E?g++:k<=j&&g>=E&&(fo(v,f,R),g++,g===h&&S.destroy());break;default:g<E?g++:(fo(v,f,R),g++,g===h&&S.destroy())}}return a(U,"onLogMessage"),await S9(S,"close"),R}a(N9,"readLog");function fo(e,t,r){t==="desc"?y9(e,r):t==="asc"?I9(e,r):r.push(e)}a(fo,"pushLineToResult");function y9(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(y9,"insertDescending");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,"insertAscending")});var IE=T((vRe,VU)=>{"use strict";var RR=require("joi"),{string:zu,boolean:FU,date:w9}=RR.types(),C9=tt(),{validateSchemaExists:PRe,validateTableExists:MRe,validateSchemaName:URe}=ws(),D9=D(),L9=Xe(),kU=X();kU.initSync();var P9=zu.invalid(kU.get(D9.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(L9.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:zu.valid("add_node","update_node","set_node_replication"),node_name:P9,subscriptions:RR.array().items({table:zu.optional(),schema:zu.optional(),database:zu.optional(),subscribe:FU.required(),publish:FU.required().custom(U9),start_time:w9.iso()}).min(1).required()};function M9(e){return C9.validateBySchema(e,RR.object($U))}a(M9,"addUpdateNodeValidator");function U9(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(U9,"checkForFalsy");VU.exports={addUpdateNodeValidator:M9,validation_schema:$U}});var KU=T((HRe,YU)=>{var v9=tt(),B9={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};YU.exports=function(e){return v9.validateObject(e,B9)}});var wE=T((GRe,WU)=>{"use strict";var H9=D().OPERATIONS_ENUM,AR=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=H9.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};WU.exports=AR});var jU=T((xRe,QU)=>{"use strict";var G9={OPERATION:"operation",REFRESH:"refresh"},OR=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},bR=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};QU.exports={JWTTokens:OR,TOKEN_TYPE_ENUM:G9,JWTRSAKeys:bR}});var Zu=T((kRe,ZU)=>{"use strict";var Xu=require("jsonwebtoken"),NR=require("fs-extra"),yR=K(),vn=D(),{handleHDBError:Mr,hdb_errors:q9}=oe(),{HTTP_STATUS_CODES:Ur,AUTHENTICATION_ERROR_MSGS:vr}=q9,Ju=x(),zU=Lf(),CR=yr(),x9=br().update,F9=wE(),k9=di(),{UserEventMsg:$9}=is(),Eo=X();Eo.initSync();var IR=require("path"),{JWTTokens:V9,JWTRSAKeys:Y9,TOKEN_TYPE_ENUM:CE}=jU(),K9=Eo.get(vn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Eo.get(vn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",W9=Eo.get(vn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Eo.get(vn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",DE="RS256",wR;ZU.exports={createTokens:Q9,validateOperationToken:z9,refreshOperationToken:j9,validateRefreshToken:XU};async function Q9(e){if(yR.isEmpty(e)||typeof e!="object")throw Mr(new Error,vr.INVALID_AUTH_OBJECT,Ur.BAD_REQUEST,void 0,void 0,!0);if(yR.isEmpty(e.username))throw Mr(new Error,vr.USERNAME_REQUIRED,Ur.BAD_REQUEST,void 0,void 0,!0);if(yR.isEmpty(e.password))throw Mr(new Error,vr.PASSWORD_REQUIRED,Ur.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await CR.findAndValidateUser(e.username,e.password),!t)throw Mr(new Error,vr.INVALID_CREDENTIALS,Ur.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Ju.error(f),Mr(new Error,vr.INVALID_CREDENTIALS,Ur.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 Xu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:W9,algorithm:DE,subject:CE.REFRESH}),l=zU.hash(c),_=new F9(vn.SYSTEM_SCHEMA_NAME,vn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await x9(_)}catch(f){Ju.error(f),d=f}if(d!==void 0||u.skipped_hashes.length>0)throw Mr(new Error,vr.REFRESH_TOKEN_SAVE_FAILED,Ur.INTERNAL_SERVER_ERROR);return k9.signalUserChange(new $9(process.pid)),new V9(o,c)}a(Q9,"createTokens");async function JU(e,t,r){return await Xu.sign(e,{key:t,passphrase:r},{expiresIn:K9,algorithm:DE,subject:CE.OPERATION})}a(JU,"signOperationToken");async function LE(){if(wR===void 0)try{let e=IR.join(Eo.getHdbBasePath(),vn.LICENSE_KEY_DIR_NAME,vn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=IR.join(Eo.getHdbBasePath(),vn.LICENSE_KEY_DIR_NAME,vn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=IR.join(Eo.getHdbBasePath(),vn.LICENSE_KEY_DIR_NAME,vn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await NR.readFile(e)).toString(),s=(await NR.readFile(t)).toString(),i=(await NR.readFile(r)).toString();wR=new Y9(i,s,n)}catch(e){throw Ju.error(e),Mr(new Error,vr.NO_ENCRYPTION_KEYS,Ur.INTERNAL_SERVER_ERROR)}return wR}a(LE,"getJWTRSAKeys");async function j9(e){if(!e)throw Mr(new Error,vr.INVALID_BODY,Ur.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Mr(new Error,vr.REFRESH_TOKEN_REQUIRED,Ur.BAD_REQUEST,void 0,void 0,!0);await XU(e.refresh_token);let t=await LE(),r=await Xu.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(j9,"refreshOperationToken");async function z9(e){try{let t=await LE(),r=await Xu.verify(e,t.public_key,{algorithms:DE,subject:CE.OPERATION});return await CR.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Ju.warn(t),t.name&&t.name==="TokenExpiredError"?Mr(new Error,vr.TOKEN_EXPIRED,Ur.FORBIDDEN):Mr(new Error,vr.INVALID_TOKEN,Ur.UNAUTHORIZED)}}a(z9,"validateOperationToken");async function XU(e){let t;try{let r=await LE(),n=await Xu.verify(e,r.public_key,{algorithms:DE,subject:CE.REFRESH});t=await CR.findAndValidateUser(n.username,void 0,!1)}catch(r){throw Ju.warn(r),r.name&&r.name==="TokenExpiredError"?Mr(new Error,vr.TOKEN_EXPIRED,Ur.FORBIDDEN):Mr(new Error,vr.INVALID_TOKEN,Ur.UNAUTHORIZED)}if(!zU.validate(t.refresh_token,e))throw Mr(new Error,vr.INVALID_TOKEN,Ur.UNAUTHORIZED);return t}a(XU,"validateRefreshToken")});var DR=T((YRe,rv)=>{"use strict";var J9=KU(),Bc=require("passport"),X9=require("passport-local").Strategy,Z9=require("passport-http").BasicStrategy,e7=require("util"),t7=yr(),tv=e7.callbackify(t7.findAndValidateUser),VRe=Jr(),r7=D(),ev=Zu();Bc.use(new X9(function(e,t,r){tv(e,t,r)}));Bc.use(new Z9(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 n7(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===r7.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(n7,"authorize");function s7(e,t){let r=J9(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(s7,"checkPermissions");rv.exports={authorize:n7,checkPermissions:s7}});var Hc=T((WRe,nv)=>{"use strict";var LR=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},PR=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:LR,NodeSubscription:PR}});var iv=T((jRe,sv)=>{"use strict";var i7=D().OPERATIONS_ENUM,MR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=i7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};sv.exports=MR});var e_=T((JRe,ov)=>{"use strict";var UR=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},vR=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:UR,RemotePayloadSubscription:vR}});var cv=T((ZRe,av)=>{"use strict";var BR=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=BR});var _v=T((sAe,uv)=>{"use strict";var o7=cv(),tAe=at(),lv=Ve(),a7=x(),{getSchemaPath:rAe,getTransactionAuditStorePath:nAe}=je(),{getDatabases:c7}=(ge(),ie(ke));uv.exports=l7;async function l7(e){let t=new o7;try{let r=c7()[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){a7.warn(`unable to stat table dbi due to ${r}`)}return t}a(l7,"lmdbGetTableSize")});var fv=T((oAe,dv)=>{"use strict";var HR=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=HR});var mi=T((_Ae,Sv)=>{"use strict";var u7=require("fs-extra"),_7=require("path"),ur=require("systeminformation"),ho=x(),Ev=pt(),cAe=Xe(),ME=D(),d7=_v(),f7=_i(),{getThreadInfo:hv}=et(),WR=X();WR.initSync();var E7=fv(),{openEnvironment:lAe}=Ve(),{getSchemaPath:uAe}=je(),{database:h7,databases:pv}=(ge(),ie(ke)),PE;Sv.exports={getHDBProcessInfo:FR,getNetworkInfo:$R,getDiskInfo:kR,getMemoryInfo:xR,getCPUInfo:qR,getTimeInfo:GR,getSystemInformation:VR,systemInformation:p7,getTableSize:YR,getMetrics:KR};function GR(){return ur.time()}a(GR,"getTimeInfo");async function qR(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:_,...u}=await ur.cpu();u.cpu_speed=await ur.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:g,...R}=await ur.currentLoad();return R.cpus=[],g.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;R.cpus.push(z)}),u.current_load=R,u}catch(e){return ho.error(`error in getCPUInfo: ${e}`),{}}}a(qR,"getCPUInfo");async function xR(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await ur.mem();return Object.assign(s,process.memoryUsage())}catch(e){return ho.error(`error in getMemoryInfo: ${e}`),{}}}a(xR,"getMemoryInfo");async function FR(){let e={core:[],clustering:[]};try{let t=await ur.processes(),r;try{r=Number.parseInt(await u7.readFile(_7.join(WR.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(FR,"getHDBProcessInfo");async function kR(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await ur.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,..._}=await ur.fsStats();return e.read_write=_,e.size=await ur.fsSize(),e}catch(t){return ho.error(`error in getDiskInfo: ${t}`),e}}a(kR,"getDiskInfo");async function $R(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await ur.networkInterfaceDefault(),e.latency=await ur.inetChecksite("google.com"),(await ur.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 ur.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($R,"getNetworkInfo");async function VR(){if(PE!==void 0)return PE;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await ur.osInfo();e=c;let l=await ur.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(VR,"getSystemInformation");async function YR(){let e=[],t=await f7.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await d7(n));return e}a(YR,"getTableSize");async function KR(){let e={};for(let t in pv){let r=e[t]={};for(let n in pv[t])try{let s=h7({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(KR,"getMetrics");async function mv(){if(WR.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 p7(e){let t=new E7;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await VR(),t.time=GR(),t.cpu=await qR(),t.memory=await xR(),t.disk=await kR(),t.network=await $R(),t.harperdb_processes=await FR(),t.table_size=await YR(),t.metrics=await KR(),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 VR();break;case"time":t.time=GR();break;case"cpu":t.cpu=await qR();break;case"memory":t.memory=await xR();break;case"disk":t.disk=await kR();break;case"network":t.network=await $R();break;case"harperdb_processes":t.harperdb_processes=await FR();break;case"table_size":t.table_size=await YR();break;case"database_metrics":case"metrics":t.metrics=await KR();break;case"threads":t.threads=await hv();break;case"replication":t.replication=await mv();break;default:break}return t}a(p7,"systemInformation")});var Si=T((fAe,Tv)=>{"use strict";Tv.exports={version:m7,printVersion:S7};var UE=ha();function m7(){if(UE)return UE.version}a(m7,"version");function S7(){UE&&console.log(`HarperDB Version ${UE.version}`)}a(S7,"printVersion")});var Ti=T((mAe,Ov)=>{"use strict";var T7=br(),QR=K(),g7=require("util"),Oa=D(),gv=X();gv.initSync();var R7=DR(),Rv=sr(),{Node:hAe,NodeSubscription:pAe}=Hc(),A7=bc(),O7=iv(),{RemotePayloadObject:b7,RemotePayloadSubscription:N7}=e_(),{handleHDBError:y7,hdb_errors:I7}=oe(),{HTTP_STATUS_CODES:w7,HDB_ERROR_MSGS:C7}=I7,D7=os(),L7=mi(),P7=Si(),{getDatabases:M7}=(ge(),ie(ke)),U7=g7.promisify(R7.authorize),v7=Rv.searchByHash,B7=Rv.searchByValue;Ov.exports={authHeaderToUser:H7,isEmpty:G7,getNodeRecord:q7,upsertNodeRecord:x7,buildNodePayloads:F7,checkClusteringEnabled:k7,getAllNodeRecords:$7,getSystemInfo:V7,reverseSubscription:Av};async function H7(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await U7(t,null),e}a(H7,"authHeaderToUser");function G7(e){return e==null}a(G7,"isEmpty");async function q7(e){let t=new A7(Oa.SYSTEM_SCHEMA_NAME,Oa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return v7(t)}a(q7,"getNodeRecord");async function x7(e){let t=new O7(Oa.SYSTEM_SCHEMA_NAME,Oa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return T7.upsert(t)}a(x7,"upsertNodeRecord");function Av(e){if(QR.isEmpty(e.subscribe)||QR.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 F7(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=QR.getTableHashAttribute(l,_),{subscribe:d,publish:f}=Av(c),E=M7()[l]?.[_],h=new N7(l,_,u,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new b7(r,t,s,n)}a(F7,"buildNodePayloads");function k7(){if(!gv.get(Oa.CONFIG_PARAMS.CLUSTERING_ENABLED))throw y7(new Error,C7.CLUSTERING_NOT_ENABLED,w7.BAD_REQUEST,void 0,void 0,!0)}a(k7,"checkClusteringEnabled");async function $7(){let e=new D7(Oa.SYSTEM_SCHEMA_NAME,Oa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await B7(e))}a($7,"getAllNodeRecords");async function V7(){let e=await L7.getSystemInformation();return{hdb_version:P7.version(),node_version:e.node_version,platform:e.platform}}a(V7,"getSystemInfo")});var jR=T((TAe,Lv)=>{"use strict";var vE=pt(),bv=K(),Nv=Xe(),yv=D(),BE=x(),Iv=RE(),Y7=Iu(),{RemotePayloadObject:K7}=e_(),{handleHDBError:wv,hdb_errors:W7}=oe(),{HTTP_STATUS_CODES:Cv}=W7,{NodeSubscription:Dv}=Hc();Lv.exports=Q7;async function Q7(e,t){let r;try{r=await vE.request(`${t}.${Nv.REQUEST_SUFFIX}`,new K7(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 Y7(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(Q7,"reviewSubscriptions")});var n_=T((RAe,Uv)=>{"use strict";var{handleHDBError:HE,hdb_errors:j7}=oe(),{HTTP_STATUS_CODES:GE}=j7,{addUpdateNodeValidator:z7}=IE(),qE=x(),Mv=D(),Pv=Xe(),J7=K(),t_=pt(),r_=Ti(),X7=X(),Z7=jR(),{Node:eee,NodeSubscription:tee}=Hc(),{broadcast:ree}=et(),nee="Unable to create 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",iee=X7.get(Mv.CONFIG_PARAMS.CLUSTERING_NODENAME);Uv.exports=oee;async function oee(e,t=!1){qE.trace("addNode called with:",e),r_.checkClusteringEnabled();let r=z7(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 r_.getNodeRecord(n);if(!J7.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 Z7(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=nee,o;let c=r_.buildNodePayloads(s,iee,Mv.OPERATIONS_ENUM.ADD_NODE,await r_.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 tee(E.schema,E.table,E.publish,E.subscribe))}qE.trace("addNode sending remote payload:",c);let _;try{_=await t_.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 t_.updateRemoteConsumer(m,n)}let f=t_.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 t_.updateRemoteConsumer(E,n),E.subscribe===!0&&await t_.updateConsumerIterator(E.schema,E.table,n,"start")}let u=new eee(n,l,_.system_info);return await r_.upsertNodeRecord(u),ree({type:"nats_update"}),i.length>0?o.message=see:o.message=`Successfully added '${n}' to manifest`,o}a(oee,"addNode")});var XR=T((bAe,Hv)=>{"use strict";var{handleHDBError:zR,hdb_errors:aee}=oe(),{HTTP_STATUS_CODES:JR}=aee,{addUpdateNodeValidator:cee}=IE(),s_=x(),Bv=D(),vv=Xe(),OAe=K(),i_=pt(),o_=Ti(),lee=X(),{cloneDeep:uee}=require("lodash"),_ee=jR(),{Node:dee,NodeSubscription:fee}=Hc(),{broadcast:Eee}=et(),hee="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",pee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",mee=lee.get(Bv.CONFIG_PARAMS.CLUSTERING_NODENAME);Hv.exports=See;async function See(e){s_.trace("updateNode called with:",e),o_.checkClusteringEnabled();let t=cee(e);if(t)throw zR(t,t.message,JR.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await o_.getNodeRecord(r);s.length>0&&(n=uee(s));let{added:i,skipped:o}=await _ee(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=hee,c;let l=o_.buildNodePayloads(i,mee,Bv.OPERATIONS_ENUM.UPDATE_NODE,await o_.getSystemInfo());for(let u=0,d=i.length;u<d;u++){let f=i[u];s_.trace(`updateNode updating work stream for node: ${r} subscription:`,f),i[u].start_time===void 0&&delete i[u].start_time}s_.trace("updateNode sending remote payload:",l);let _;try{_=await i_.request(`${r}.${vv.REQUEST_SUFFIX}`,l)}catch(u){s_.error(`updateNode received error from request: ${u}`);let d=i_.requestErrorHandler(u,"update_node",r);throw zR(new Error,d,JR.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===vv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw zR(new Error,u,JR.INTERNAL_SERVER_ERROR,"error",u)}s_.trace(_);for(let u=0,d=i.length;u<d;u++){let f=i[u];await i_.updateRemoteConsumer(f,r),f.subscribe===!0?await i_.updateConsumerIterator(f.schema,f.table,r,"start"):await i_.updateConsumerIterator(f.schema,f.table,r,"stop")}return n||(n=[new dee(r,[],_.system_info)]),await Tee(n[0],i,_.system_info),o.length>0?c.message=pee:c.message=`Successfully updated '${r}'`,c}a(See,"updateNode");async function Tee(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 fee(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await o_.upsertNodeRecord(n),Eee({type:"nats_update"})}a(Tee,"updateNodeTable")});var kv=T((yAe,Fv)=>{"use strict";var xv=require("joi"),{string:Gv}=xv.types(),gee=tt(),qv=D(),Ree=X(),Aee=Xe();Fv.exports=Oee;function Oee(e){let t=Gv.invalid(Ree.get(qv.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Aee.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 gee.validateBySchema(e,r)}a(Oee,"removeNodeValidator")});var FE=T((wAe,Wv)=>{"use strict";var{handleHDBError:$v,hdb_errors:bee}=oe(),{HTTP_STATUS_CODES:Vv}=bee,Nee=kv(),a_=x(),Yv=Ti(),yee=K(),xE=D(),Kv=Xe(),ZR=pt(),Iee=X(),{RemotePayloadObject:wee}=e_(),{NodeSubscription:Cee}=Hc(),Dee=yu(),Lee=na(),{broadcast:Pee}=et(),Mee=Iee.get(xE.CONFIG_PARAMS.CLUSTERING_NODENAME);Wv.exports=Uee;async function Uee(e){a_.trace("removeNode called with:",e),Yv.checkClusteringEnabled();let t=Nee(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(yee.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 wee(xE.OPERATIONS_ENUM.REMOVE_NODE,Mee,[]),i,o=!1;for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];u.subscribe===!0&&await ZR.updateConsumerIterator(u.schema,u.table,r,"stop");try{await ZR.updateRemoteConsumer(new Cee(u.schema,u.table,!1,!1),r)}catch(d){a_.error(d)}}try{i=await ZR.request(`${r}.${Kv.REQUEST_SUFFIX}`,s),a_.trace("Remove node reply from remote node:",r,i)}catch(l){a_.error("removeNode received error from request:",l),o=!0}let c=new Dee(xE.SYSTEM_SCHEMA_NAME,xE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Lee.deleteRecord(c),Pee({type:"nats_update"}),i?.status===Kv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(a_.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(Uee,"removeNode")});var zv=T((DAe,jv)=>{"use strict";var Qv=require("joi"),{string:vee,array:Bee}=Qv.types(),Hee=tt(),Gee=IE();jv.exports=qee;function qee(e){let t=Qv.object({operation:vee.valid("configure_cluster").required(),connections:Bee.items(Gee.validation_schema).required()});return Hee.validateBySchema(e,t)}a(qee,"configureClusterValidator")});var $E=T((PAe,t0)=>{"use strict";var xee=D(),kE=x(),Fee=K(),kee=FE(),$ee=n_(),Jv=Ti(),Vee=zv(),{handleHDBError:Xv,hdb_errors:Yee}=oe(),{HTTP_STATUS_CODES:Zv}=Yee,Kee="Configure cluster complete.",Wee="Failed to configure the cluster. Check the logs for more details.",Qee="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";t0.exports=jee;async function jee(e){kE.trace("configure cluster called with:",e),Jv.checkClusteringEnabled();let t=Vee(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(kee,{operation:xee.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($ee,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(Fee.isEmptyOrZeroLength(o))return{message:Kee,connections:c};if(l)return{message:Qee,failed_nodes:o,connections:c};throw Xv(new Error,Wee,Zv.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(jee,"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((UAe,s0)=>{"use strict";var c_=require("joi"),zee=tt(),{validateSchemaExists:r0,validateTableExists:Jee,validateSchemaName:n0}=ws(),Xee=c_.object({operation:c_.string().valid("purge_stream"),schema:c_.string().custom(r0).custom(n0).optional(),database:c_.string().custom(r0).custom(n0).optional(),table:c_.string().custom(Jee).required()});function Zee(e){return zee.validateBySchema(e,Xee)}a(Zee,"purgeStreamValidator");s0.exports=Zee});var eA=T((BAe,o0)=>{"use strict";var{handleHDBError:ete,hdb_errors:tte}=oe(),{HTTP_STATUS_CODES:rte}=tte,nte=i0(),ste=pt(),ite=Ti();o0.exports=ote;async function ote(e){e.schema=e.schema??e.database;let t=nte(e);if(t)throw ete(t,t.message,rte.BAD_REQUEST,void 0,void 0,!0);ite.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await ste.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(ote,"purgeStream")});var YE=T((GAe,d0)=>{"use strict";var rA=Ti(),ate=pt(),l0=X(),VE=D(),ba=Xe(),cte=K(),tA=x(),{RemotePayloadObject:lte}=e_(),{ErrorCode:a0}=require("nats"),c0=l0.get(VE.CONFIG_PARAMS.CLUSTERING_ENABLED),u0=l0.get(VE.CONFIG_PARAMS.CLUSTERING_NODENAME);d0.exports={clusterStatus:ute,buildNodeStatus:_0};async function ute(){let e={node_name:u0,is_enabled:c0,connections:[]};if(!c0)return e;let t=await rA.getAllNodeRecords();if(cte.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(ute,"clusterStatus");async function _0(e,t){let r=e.name,n=new lte(VE.OPERATIONS_ENUM.CLUSTER_STATUS,u0,void 0,await rA.getSystemInfo()),s,i,o=ba.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await ate.request(ba.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===ba.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ba.CLUSTER_STATUS_STATUSES.CLOSED,tA.error(`Error getting node status from ${r} `,s))}catch(l){tA.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 _te(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 rA.upsertNodeRecord(l)}catch(l){tA.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(_0,"buildNodeStatus");function _te(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(_te,"NodeStatusObject")});var WE=T((xAe,f0)=>{"use strict";var{handleHDBError:dte,hdb_errors:fte}=oe(),{HTTP_STATUS_CODES:Ete}=fte,hte=pt(),pte=Ti(),nA=K(),KE=require("joi"),mte=tt(),Ste=2e3,Tte=KE.object({timeout:KE.number().min(1),connected_nodes:KE.boolean(),routes:KE.boolean()});f0.exports=gte;async function gte(e){pte.checkClusteringEnabled();let t=mte.validateBySchema(e,Tte);if(t)throw dte(t,t.message,Ete.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||nA.autoCastBoolean(n),o=s===void 0||nA.autoCastBoolean(s),c={nodes:[]},l=await hte.getServerList(r??Ste),_={};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:nA.autoCast(m.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(gte,"clusterNetwork")});var m0=T((kAe,p0)=>{"use strict";var sA=require("joi"),E0=tt(),{route_constraints:h0}=OT();p0.exports={setRoutesValidator:Rte,deleteRoutesValidator:Ate};function Rte(e){let t=sA.object({server:sA.valid("hub","leaf").required(),routes:h0.required()});return E0.validateBySchema(e,t)}a(Rte,"setRoutesValidator");function Ate(e){let t=sA.object({routes:h0.required()});return E0.validateBySchema(e,t)}a(Ate,"deleteRoutesValidator")});var jE=T((VAe,R0)=>{"use strict";var Na=ut(),iA=K(),QE=D(),S0=m0(),{handleHDBError:T0,hdb_errors:Ote}=oe(),{HTTP_STATUS_CODES:g0}=Ote,bte="cluster routes successfully set",Nte="cluster routes successfully deleted";R0.exports={setRoutes:yte,getRoutes:Ite,deleteRoutes:wte};function yte(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=iA.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:bte,set:o,skipped:i}}a(yte,"setRoutes");function Ite(){let e=Na.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Ite,"getRoutes");function wte(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=iA.isEmptyOrZeroLength(n)?null:n,Na.updateConfigValue(QE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=iA.isEmptyOrZeroLength(s)?null:s,Na.updateConfigValue(QE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:Nte,deleted:i,skipped:o}}a(wte,"deleteRoutes")});var O0=T((KAe,A0)=>{"use strict";var l_=require("alasql"),ya=require("recursive-iterator"),_s=x(),Cte=K(),u_=D(),oA=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,Lte(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=>u_.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=>!u_.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][u_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Dte(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(_=>!u_.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new l_.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 Dte(e){return e.filter(t=>t[u_.PERMS_CRUD_ENUM.READ])}a(Dte,"filterReadRestrictedAttrs");function Lte(e,t,r,n,s){Pte(e,t,r,n,s)}a(Lte,"interpretAST");function __(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(__,"addSchemaTableToMap");function Pte(e,t,r,n,s){if(!e){_s.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof l_.yy.Insert?Bte(e,t,r):e instanceof l_.yy.Select?Mte(e,t,r,n,s):e instanceof l_.yy.Update?Ute(e,t,r):e instanceof l_.yy.Delete?vte(e,t,r):_s.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Pte,"getRecordAttributesAST");function Mte(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(Cte.isEmptyOrZeroLength(i)){_s.error("No schema specified");return}e.from.forEach(c=>{__(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),__(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(Mte,"getSelectAttributes");function Ute(e,t,r){if(!e){_s.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new ya(e.columns),s=e.table.databaseid;__(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&aA(e.table.tableid,s,i.columnid,t,r)}a(Ute,"getUpdateAttributes");function vte(e,t,r){if(!e){_s.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new ya(e.where),s=e.table.databaseid;__(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&aA(e.table.tableid,s,i.columnid,t,r)}a(vte,"getDeleteAttributes");function Bte(e,t,r){if(!e){_s.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new ya(e.columns),s=e.into.databaseid;__(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&aA(e.into.tableid,s,i.columnid,t,r)}a(Bte,"getInsertAttributes");function aA(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(aA,"pushAttribute");A0.exports=oA});var JE=T((QAe,I0)=>{var zE=aa(),b0=require("chalk"),ln=x(),N0=require("prompt"),{promisify:Hte}=require("util"),cA=D(),Gte=require("fs-extra"),qte=require("path"),xte=K(),Fte=Si(),y0=X();y0.initSync();var kte=require("moment"),$te=Hte(N0.get),Vte=qte.join(y0.getHdbBasePath(),cA.LICENSE_KEY_DIR_NAME,cA.LICENSE_FILE_NAME,cA.LICENSE_FILE_NAME);I0.exports={getFingerprint:Kte,setLicense:Yte,parseLicense:lA,register:Wte,getRegistrationInfo:jte};async function Yte(e){if(e&&e.key&&e.company){try{ln.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await lA(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw ln.error(r),ln.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Yte,"setLicense");async function Kte(){let e={};try{e=await zE.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw ln.error(r),ln.error(t),new Error(r)}return e}a(Kte,"getFingerprint");async function lA(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");ln.info("Validating license input...");let r=zE.validateLicense(e,t);if(ln.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(ln.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(ln.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{ln.info("writing license to disk"),await Gte.writeFile(Vte,JSON.stringify({license_key:e,company:t}))}catch(n){throw ln.error("Failed to write License"),n}return"Registration successful."}a(lA,"parseLicense");async function Wte(){let e=await Qte();return lA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Wte,"register");async function Qte(){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){ln.error(n)}let r;try{r=await $te(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(Qte,"promptForRegistration");async function jte(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await zE.getLicense()}catch(r){throw ln.error(`There was an error when searching licenses due to: ${r.message}`),r}if(xte.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Fte.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=kte.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(jte,"getRegistrationInfo")});var C0=T((zAe,w0)=>{"use strict";var zte=Xe(),uA=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+zte.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=uA});var P0=T((XAe,L0)=>{"use strict";var D0=Xe(),_A=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=_A});var U0=T((eOe,M0)=>{"use strict";var dA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};M0.exports=dA});var B0=T((rOe,v0)=>{"use strict";var Jte=Xe(),fA=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Jte.SERVER_SUFFIX.ADMIN,this.password=r}};v0.exports=fA});var rh=T((sOe,q0)=>{"use strict";var Gc=require("path"),eh=require("fs-extra"),Xte=C0(),Zte=P0(),ere=U0(),tre=B0(),EA=yr(),xc=K(),Br=ut(),ZE=D(),d_=Xe(),{CONFIG_PARAMS:St}=ZE,Fc=x(),f_=X(),H0=ui(),hA=pt(),qc="clustering",rre=1e4,G0=50;q0.exports={generateNatsConfig:sre,removeNatsConfig:ire,getHubConfigPath:nre};function nre(){let e=f_.get(St.ROOTPATH);return Gc.join(e,qc,d_.NATS_CONFIG_FILES.HUB_SERVER)}a(nre,"getHubConfigPath");async function sre(e=!1,t=void 0){f_.initSync();let r=f_.get(St.ROOTPATH),n=Gc.join(r,qc,d_.PID_FILES.HUB),s=Gc.join(r,qc,d_.PID_FILES.LEAF),i=Br.getConfigFromFile(St.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Gc.join(r,qc,d_.NATS_CONFIG_FILES.HUB_SERVER),c=Gc.join(r,qc,d_.NATS_CONFIG_FILES.LEAF_SERVER),l=Br.getConfigFromFile(St.CLUSTERING_TLS_CERTIFICATE),_=Br.getConfigFromFile(St.CLUSTERING_TLS_PRIVATEKEY),u=Br.getConfigFromFile(St.CLUSTERING_TLS_CERT_AUTH),d=Br.getConfigFromFile(St.CLUSTERING_TLS_INSECURE),f=Br.getConfigFromFile(St.CLUSTERING_TLS_VERIFY),E=Br.getConfigFromFile(St.CLUSTERING_NODENAME),h=Br.getConfigFromFile(St.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await hA.checkNATSServerInstalled()||th("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await EA.listUsers(),S=Br.getConfigFromFile(St.CLUSTERING_USER),g=await EA.getClusterUser();(xc.isEmpty(g)||g.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 R=[],A=[];for(let[z,J]of m.entries())J.role.role===ZE.ROLE_TYPES_ENUM.CLUSTER_USER&&J.active&&(R.push(new tre(J.username,H0.decrypt(J.hash))),A.push(new ere(J.username,H0.decrypt(J.hash))));let P=[],{hub_routes:U}=Br.getClusteringRoutes();if(!xc.isEmptyOrZeroLength(U))for(let z of U)P.push(`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@${z.host}:${z.port}`);let v=new Xte(Br.getConfigFromFile(St.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,l,_,u,d,f,h,Br.getConfigFromFile(St.CLUSTERING_HUBSERVER_CLUSTER_NAME),Br.getConfigFromFile(St.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),P,R,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://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,H=`tls://${g.uri_encoded_name}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,j=new Zte(Br.getConfigFromFile(St.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[k],[H],R,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(sre,"generateNatsConfig");async function XE(e){let t=f_.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 ire(e){let{port:t,config_file:r}=hA.getServerConfig(e),{username:n,decrypt_hash:s}=await EA.getClusterUser(),i=0,o=2e3;for(;i<G0;){try{let u=await hA.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(rre),l=Gc.join(f_.get(St.ROOTPATH),qc,r);await eh.writeFile(l,c),await eh.remove(l),Fc.notify(e,"started.")}a(ire,"removeNatsConfig")});var Y0=T((oOe,V0)=>{"use strict";var un=X(),ore=aa(),me=D(),E_=Xe(),gi=require("path"),{PACKAGE_ROOT:sh}=D(),x0=X(),nh=K(),kc="/dev/null",are=gi.join(sh,"launchServiceScripts"),F0=gi.join(sh,"utility/scripts"),cre=gi.join(F0,me.HDB_RESTART_SCRIPT),k0=gi.resolve(sh,"dependencies",`${process.platform}-${process.arch}`,E_.NATS_BINARY_NAME);function $0(){let t=ore.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 lre=9930;function ure(){un.initSync(!0);let e=un.get(me.CONFIG_PARAMS.ROOTPATH),t=gi.join(e,"clustering",E_.NATS_CONFIG_FILES.HUB_SERVER),r=gi.join(un.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=x0.get(me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=E_.LOG_LEVEL_FLAGS[un.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==lre?"-"+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 un.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=kc,i.error_file=kc),i}a(ure,"generateNatsHubServerConfig");var _re=9940;function dre(){un.initSync(!0);let e=un.get(me.CONFIG_PARAMS.ROOTPATH),t=gi.join(e,"clustering",E_.NATS_CONFIG_FILES.LEAF_SERVER),r=gi.join(un.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=x0.get(me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=E_.LOG_LEVEL_FLAGS[un.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==_re?"-"+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 un.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=kc,i.error_file=kc),i}a(dre,"generateNatsLeafServerConfig");function fre(){un.initSync();let e=gi.join(un.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:are,autorestart:!1};return un.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=kc,t.error_file=kc),t}a(fre,"generateClusteringUpgradeV4ServiceConfig");function Ere(){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:cre}}a(Ere,"generateRestart");function hre(){return{apps:[$0()]}}a(hre,"generateAllServiceConfigs");V0.exports={generateAllServiceConfigs:hre,generateMainServerConfig:$0,generateRestart:Ere,generateNatsHubServerConfig:ure,generateNatsLeafServerConfig:dre,generateClusteringUpgradeV4ServiceConfig:fre}});var $c=T((lOe,sB)=>{"use strict";var He=D(),pre=K(),Ai=rh(),ih=pt(),Ri=Xe(),po=Y0(),oh=X(),mo=x(),mre=Ti(),{startWorker:K0,onMessageFromWorkers:Sre}=et(),Tre=mi(),cOe=require("util"),gre=require("child_process"),Rre=require("fs"),{execFile:Are}=gre,Ce;sB.exports={enterPM2Mode:Ore,start:So,stop:pA,reload:Q0,restart:j0,list:mA,describe:J0,connect:Oi,kill:wre,startAllServices:Cre,startService:SA,getUniqueServicesList:X0,restartAllServices:Dre,isServiceRegistered:Z0,reloadStopStart:eB,restartHdb:z0,deleteProcess:yre,startClusteringProcesses:rB,startClusteringThreads:nB,isHdbRestartRunning:Ire,isClusteringRunning:Pre,stopClustering:Lre,reloadClustering:Mre};var h_=!1;Sre(e=>{e.type==="restart"&&oh.initSync(!0)});function Ore(){h_=!0}a(Ore,"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 Hr,bre=10,W0;function So(e,t=!1){if(h_)return Nre(e);let r=Are(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Hr.indexOf(r);o>-1&&Hr.splice(o,1),!W0&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<bre&&(Rre.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(),Hr=[],!Hr&&!t){let i=a(()=>{W0=!0,Hr&&(Hr.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)}Hr.push(r)}a(So,"start");function Nre(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(Nre,"startWithPM2");function pA(e){if(!h_){for(let t of Hr||[])t.name===e&&(Hr.splice(Hr.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(pA,"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(!h_)for(let t of Hr||[])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 yre(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(yre,"deleteProcess");async function z0(){await So(po.generateRestart())}a(z0,"restartHdb");async function Ire(){let e=await mA();for(let t in e)if(e[t].name===He.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Ire,"isHdbRestartRunning");function mA(){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(mA,"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 wre(){if(!h_){for(let e of Hr||[])e.kill();Hr=[];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(wre,"kill");async function Cre(){try{await rB(),await nB(),await So(po.generateAllServiceConfigs())}catch(e){throw Ce?.disconnect(),e}}a(Cre,"startAllServices");async function SA(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(SA,"startService");async function X0(){try{let e=await mA(),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 Dre(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(Dre,"restartAllServices");async function Z0(e){if(Hr?.find(r=>r.name===e))return!0;let t=await Tre.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=pre.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await pA(e),await SA(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 SA(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 mre.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 Lre(){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 pA(t)}}a(Lre,"stopClustering");async function Pre(){for(let e in He.CLUSTERING_PROCESSES){let t=He.CLUSTERING_PROCESSES[e];if(await Z0(t)===!1)return!1}return!0}a(Pre,"isClusteringRunning");async function Mre(){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(Mre,"reloadClustering")});var lh={};Fe(lh,{compactOnStart:()=>Ure,copyDb:()=>uB});async function Ure(){m_.notify("Running compact on start"),console.log("Running compact on start");let e=(0,TA.get)(To.CONFIG_PARAMS.ROOTPATH),t=new Map,r=wr();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})}p_();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`));p_()}catch(n){m_.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,gA.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 p_(),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}.
12
12
  Total record count before compaction: ${i}, total after: ${c}.
13
- Database backup has not been removed and can be found here: ${s}`;L_.error(l),console.error(l)}(0,jA.get)(So.CONFIG_PARAMS.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,wa.remove)(s))}(0,zA.updateConfigValue)(So.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1)}async function _H(e){let t=await(0,hH.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function pH(e,t){console.log("copyDb start");let r=wr()[e],n;for(let f in r){n=r[f].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,dH.open)(new fH.default(t)),c=o.openDB($h.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=HE(),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 EH.default(!h,h);R.encoding="binary",R.compression=m;let T=n.openDB(f,R);T.decoder=null,R.compression=S;let A=o.openDB(f,R);A.encoder=null,console.log("copying",f,"from",e,"to",t),await d(T,A,h)}let u=n.openDB($h.AUDIT_STORE_NAME,sf);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:T,version:A}of f.getRange({start:null,versions:h}))l=E.put(R,T,A),m++,S+=(R.length||10)+T.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 dH,kh,wa,jA,fH,EH,$h,So,hH,zA,L_,Yh=Oe(()=>{ge();dH=require("lmdb"),kh=require("path"),wa=require("fs-extra"),jA=B(X()),fH=B(ru()),EH=B(tu()),$h=B(ct()),So=B(C());Ki();hH=B(di()),zA=B(lt()),L_=B(x());a(nse,"compactOnStart");a(_H,"getTotalDBRecordCount");a(pH,"copyDb")});var Ca=g((rbe,OH)=>{"use strict";var sse=require("minimist"),{isMainThread:XA,parentPort:TH}=require("worker_threads"),ot=C(),{PROCESS_DESCRIPTORS_VALIDATE:P_}=ot,Hs=x(),ZA=K(),Wh=Hh(),Kh=mt(),tbe=et(),gH=lt(),Gs=Qc(),mH=hi(),{compactOnStart:ise}=(Yh(),se(Vh)),ose=qo(),{restartWorkers:Qh,onMessageByType:ase}=tt(),{handleHDBError:cse,hdb_errors:lse}=oe(),{HTTP_STATUS_CODES:use}=lse,U_=X();U_.initSync();var M_=`Restarting HarperDB. This may take up to ${ot.RESTART_TIMEOUT_MS/1e3} seconds.`,_se="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",SH="Clustering is not enabled so cannot be restarted",dse="Invalid service",jc,Gn;OH.exports={restart:RH,restartService:eO};XA&&ase(ot.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?eO({service:e.workerType}):RH({operation:"restart"})});async function RH(e){Gn=Object.keys(e).length===0,jc=await Gs.isServiceRegistered(ot.HDB_PROC_DESCRIPTOR);let t=sse(process.argv);if(t.service){await eO(t);return}if(Gn&&!jc){console.error(_se);return}if(Gn&&console.log(M_),jc){Gs.enterPM2Mode(),Hs.notify(M_);let r=ose(Object.keys(ot.CONFIG_PARAM_MAP),!0);return ZA.isEmptyOrZeroLength(Object.keys(r))||gH.updateConfigValue(void 0,void 0,r,!0,!0),fse(),M_}return XA?(Hs.notify(M_),U_.get(ot.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await ise(),setTimeout(()=>{Qh()},50)):TH.postMessage({type:ot.ITC_EVENT_TYPES.RESTART}),M_}a(RH,"restart");async function eO(e){let{service:t}=e;if(ot.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw cse(new Error,dse,use.BAD_REQUEST,void 0,void 0,!0);if(jc=await Gs.isServiceRegistered(ot.HDB_PROC_DESCRIPTOR),!XA)return TH.postMessage({type:ot.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case P_.clustering:if(!U_.get(ot.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=SH;break}Gn&&console.log("Restarting clustering"),Hs.notify("Restarting clustering"),await AH();break;case P_.clustering_config:case P_["clustering config"]:if(!U_.get(ot.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=SH;break}Gn&&console.log("Restarting clustering_config"),Hs.notify("Restarting clustering_config"),await Gs.reloadClustering();break;case"custom_functions":case"custom functions":case P_.harperdb:case P_.http_workers:if(Gn&&!jc){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}Gn&&console.log("Restarting http_workers"),Hs.notify("Restarting http_workers"),Gn?await Gs.restart(ot.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Qh("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Hs.error(r),Gn&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(eO,"restartService");async function fse(){await AH(),await Gs.restart(ot.HDB_PROC_DESCRIPTOR),await ZA.async_set_timeout(2e3),U_.get(ot.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await JA(),Gn&&(await Kh.closeConnection(),process.exit(0))}a(fse,"restartPM2Mode");async function AH(){if(!gH.getConfigFromFile(ot.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await mH.getHDBProcessInfo()).clustering.length===0)Hs.trace("Clustering not running, restart will start clustering services"),await Wh.generateNatsConfig(!0),await Gs.startClusteringProcesses(),await Gs.startClusteringThreads(),await JA(),Gn&&await Kh.closeConnection();else{await Wh.generateNatsConfig(!0),jc?(Hs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Gs.restart(ot.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Gs.restart(ot.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await mH.getHDBProcessInfo()).clustering.forEach(s=>{Hs.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await ZA.async_set_timeout(3e3),await JA(),await Kh.updateLocalStreams(),Gn&&await Kh.closeConnection(),Hs.trace("Restart clustering restarting ingest and reply service threads");let t=Qh(ot.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Qh(ot.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(AH,"restartClustering");async function JA(){await Wh.removeNatsConfig(ot.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Wh.removeNatsConfig(ot.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(JA,"removeNatsConfig")});var UH=g((ibe,MH)=>{"use strict";var sbe=require("lodash"),kr=C(),{handleHDBError:bH,hdb_errors:Ese}=oe(),{HDB_ERROR_MSGS:hse,HTTP_STATUS_CODES:pse}=Ese,tO=x();MH.exports={getRolePermissions:Sse};var Da=Object.create(null),mse=a(e=>({key:e,perms:{}}),"perms_template_obj"),wH=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),CH=a((e=!1,t=!1,r=!1,n=!1)=>({[kr.PERMS_CRUD_ENUM.READ]:e,[kr.PERMS_CRUD_ENUM.INSERT]:t,[kr.PERMS_CRUD_ENUM.UPDATE]:r,[kr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),rO=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...CH(t,r,n,s)}),"table_perms_template"),NH=a((e,t=CH())=>({attribute_name:e,describe:PH(t),[v_]:t[v_],[nO]:t[nO],[sO]:t[sO]}),"attr_perms_template"),yH=a((e,t=!1)=>({attribute_name:e,describe:t,[v_]:t}),"timestamp_attr_perms_template"),{READ:v_,INSERT:nO,UPDATE:sO}=kr.PERMS_CRUD_ENUM,DH=Object.values(kr.PERMS_CRUD_ENUM),LH=[v_,nO,sO];function Sse(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[kr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Da[t]&&Da[t].key===n)return Da[t].perms;let s=Tse(e,r);return Da[t]?Da[t].key=n:Da[t]=mse(n),Da[t].perms=s,s}catch(r){if(!e[kr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[kr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<kr.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 tO.error(n),tO.debug(r),bH(new Error,hse.OUTDATED_PERMS_TRANSLATION_ERROR,pse.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
14
- ${r.stack}`;throw tO.error(n),bH(new Error)}}}a(Sse,"getRolePermissions");function Tse(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[kr.SYSTEM_SCHEMA_NAME]=n[kr.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]=gse(t[i]);return}r[i]=wH(),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],_=Rse(c,l);r[i].describe||DH.forEach(u=>{_[u]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=rO()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=rO()})}),r}a(Tse,"translateRolePermissions");function gse(e){let t=wH(!0);return Object.keys(e).forEach(r=>{t.tables[r]=rO(!0,!0,!0,!0,!0)}),t}a(gse,"createStructureUserPermissions");function Rse(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 kr.TIME_STAMP_NAMES.includes(d)&&(f=yH(d,u[v_])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=NH(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let u=i[_];u.describe=PH(u),s.attribute_permissions.push(u),c||Ase(u,l)}else if(_!==o){let u;kr.TIME_STAMP_NAMES.includes(_)?u=yH(_):u=NH(_),s.attribute_permissions.push(u)}}),c||s.attribute_permissions.push(l),s.describe=IH(s),s}else return e.describe=IH(e),e}a(Rse,"getTableAttrPerms");function IH(e){return DH.filter(t=>e[t]).length>0}a(IH,"getSchemaTableDescribePerm");function PH(e){return LH.filter(t=>e[t]).length>0}a(PH,"getAttributeDescribePerm");function Ase(e,t){LH.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Ase,"checkForHashPerms")});var B_={};Fe(B_,{authentication:()=>kH,bypassAuth:()=>Cse,login:()=>Lse,logout:()=>Pse,start:()=>Dse});function Cse(){FH=!0}async function kH(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?yse?Nse:[]:bse?Ose:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new io([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return jh&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),jh&&o.push("Access-Control-Allow-Credentials","true")}}let l,_;if(jh){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 BH.get(l)}e.session=_||(_={})}e.user=null;let u=a((E,h,m)=>{let S=new zc.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?vH.notify(S):vH.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 at.getUser(E,null,null),u(E,Yt.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,zc.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=La.get(n),!d){let[E,h]=n.split(" "),m,S;try{switch(E){case"Basic":[m,S]=atob(h).split(":"),d=m||S?await at.getUser(m,S,e):null;break;case"Bearer":try{d=await(0,zh.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,zh.validateRefreshToken)(h),c({status:-1})}catch{throw R}}break}}catch(R){return wse&&(La.get(h)||(La.set(h,h),u(m,Yt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:To({error:R.message},e)})}La.set(n,d),Ise&&u(d.username,Yt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await at.getUser(_.user,null,e):(FH&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,GH.getSuperUser)());jh&&(e.session.update=function(E){if(!l){l=(0,qH.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,BH.put(E)},e.login=async function(E,h){e.user=await at.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")&&ji.loginPath?(f.status=302,f.headers.set("Location",ji.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 io);for(let d=0;d<_;){let f=o[d++];u.set(f,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function Dse({server:e,port:t}){e.request(kH,{port:t||"all"}),HH||(HH=!0,setInterval(()=>{La=new Map},qn.get(Yt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),xH.user.addListener(()=>{La=new Map}))}async function Lse(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 Pse(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var GH,zh,qH,qn,Yt,zc,xH,vH,Ose,bse,Nse,yse,BH,jh,FH,Ise,wse,La,HH,Jh=Oe(()=>{GH=B(Pr());Rr();eu();zh=B(E_());ge();qH=require("uuid"),qn=B(X()),Yt=B(C()),zc=B(x()),xH=B(Pu());qu();Jc();vH=(0,zc.loggerWithTag)("auth-event");qn.initSync();Ose=qn.get(Yt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),bse=qn.get(Yt.CONFIG_PARAMS.HTTP_CORS),Nse=qn.get(Yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),yse=qn.get(Yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),BH=ht({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),jh=qn.get(Yt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,FH=qn.get(Yt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Ise=qn.get(Yt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,wse=qn.get(Yt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,La=new Map;at.onInvalidatedUser(()=>{La=new Map});a(Cse,"bypassAuth");a(kH,"authentication");a(Dse,"start");a(Lse,"login");a(Pse,"logout")});var jH=g((fbe,QH)=>{"use strict";var Ce=require("joi"),$H=require("fs-extra"),VH=require("path"),Ai=rt(),YH=X(),KH=C(),WH=x(),{hdb_errors:Mse}=oe(),{HDB_ERROR_MSGS:dr}=Mse,Ri=/^[a-zA-Z0-9-_]+$/;QH.exports={getDropCustomFunctionValidator:vse,setCustomFunctionValidator:Bse,addComponentValidator:xse,dropCustomFunctionProjectValidator:Fse,packageComponentValidator:kse,deployComponentValidator:$se,setComponentFileValidator:Hse,getComponentFileValidator:qse,dropComponentFileValidator:Gse};function Xh(e,t,r){try{let n=YH.get(KH.CONFIG_PARAMS.COMPONENTSROOT),s=VH.join(n,t);return $H.existsSync(s)?e?t:r.message(dr.PROJECT_EXISTS):e?r.message(dr.NO_PROJECT):t}catch(n){return WH.error(n),r.message(dr.VALIDATION_ERR)}}a(Xh,"checkProjectExists");function H_(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(H_,"checkFilePath");function Use(e,t,r,n){try{let s=YH.get(KH.CONFIG_PARAMS.COMPONENTSROOT),i=VH.join(s,e,t,r+".js");return $H.existsSync(i)?r:n.message(dr.NO_FILE)}catch(s){return WH.error(s),n.message(dr.VALIDATION_ERR)}}a(Use,"checkFileExists");function vse(e){let t=Ce.object({project:Ce.string().pattern(Ri).custom(Xh.bind(null,!0)).required().messages({"string.pattern.base":dr.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(Ri).custom(Use.bind(null,e.project,e.type)).custom(H_).required().messages({"string.pattern.base":dr.BAD_FILE_NAME})});return Ai.validateBySchema(e,t)}a(vse,"getDropCustomFunctionValidator");function Bse(e){let t=Ce.object({project:Ce.string().pattern(Ri).custom(Xh.bind(null,!0)).required().messages({"string.pattern.base":dr.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(H_).required(),function_content:Ce.string().required()});return Ai.validateBySchema(e,t)}a(Bse,"setCustomFunctionValidator");function Hse(e){let t=Ce.object({project:Ce.string().pattern(Ri).required().messages({"string.pattern.base":dr.BAD_PROJECT_NAME}),file:Ce.string().custom(H_).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ai.validateBySchema(e,t)}a(Hse,"setComponentFileValidator");function Gse(e){let t=Ce.object({project:Ce.string().pattern(Ri).required().messages({"string.pattern.base":dr.BAD_PROJECT_NAME}),file:Ce.string().custom(H_).optional()});return Ai.validateBySchema(e,t)}a(Gse,"dropComponentFileValidator");function qse(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(H_).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ai.validateBySchema(e,t)}a(qse,"getComponentFileValidator");function xse(e){let t=Ce.object({project:Ce.string().pattern(Ri).custom(Xh.bind(null,!1)).required().messages({"string.pattern.base":dr.BAD_PROJECT_NAME})});return Ai.validateBySchema(e,t)}a(xse,"addComponentValidator");function Fse(e){let t=Ce.object({project:Ce.string().pattern(Ri).custom(Xh.bind(null,!0)).required().messages({"string.pattern.base":dr.BAD_PROJECT_NAME})});return Ai.validateBySchema(e,t)}a(Fse,"dropCustomFunctionProjectValidator");function kse(e){let t=Ce.object({project:Ce.string().pattern(Ri).required().messages({"string.pattern.base":dr.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean()});return Ai.validateBySchema(e,t)}a(kse,"packageComponentValidator");function $se(e){let t=Ce.object({project:Ce.string().pattern(Ri).required().messages({"string.pattern.base":dr.BAD_PROJECT_NAME}),payload:Ce.string().optional().messages({"string.pattern.base":dr.BAD_PACKAGE}),package:Ce.string().optional()});return Ai.validateBySchema(e,t)}a($se,"deployComponentValidator")});var rp=g((hbe,rG)=>{"use strict";var Zh=require("joi"),ep=require("path"),zH=require("fs-extra"),{exec:Vse}=require("child_process"),Yse=require("util"),JH=Yse.promisify(Vse),G_=C(),{handleHDBError:Xc,hdb_errors:Kse}=oe(),{HTTP_STATUS_CODES:Zc}=Kse,q_=X(),Wse=rt(),el=x();q_.initSync();var iO=q_.get(G_.CONFIG_PARAMS.COMPONENTSROOT),XH="npm install --omit=dev --json",Qse=`${XH} --dry-run`;rG.exports={installModules:Xse,auditModules:Zse,installAllRootModules:jse,uninstallRootModule:zse,linkHarperdb:Jse};async function jse(e=!1){await tp(),await x_(e?"npm install --ignore-scripts":"npm install",q_.get(G_.CONFIG_PARAMS.ROOTPATH))}a(jse,"installAllRootModules");async function zse(e){await x_(`npm uninstall ${e}`,q_.get(G_.CONFIG_PARAMS.ROOTPATH))}a(zse,"uninstallRootModule");async function Jse(){await tp(),await x_(`npm link ${G_.PACKAGE_ROOT}`,q_.get(G_.CONFIG_PARAMS.ROOTPATH))}a(Jse,"linkHarperdb");async function x_(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await JH(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
15
- `,""))}return n&&!n.includes("Debugger listening")&&el.error("Error running NPM command:",e,n),el.trace(r,n),r?.replace(`
16
- `,"")}a(x_,"runCommand");async function Xse(e){el.info(`starting installModules for request: ${e}`);let t=tG(e);if(t)throw Xc(t,t.message,Zc.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?Qse:XH;await tp(),await eG(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 _=ep.join(iO,l),u,d=null;try{let{stdout:f,stderr:E}=await JH(s,{cwd:_});u=f?f.replace(`
13
+ Database backup has not been removed and can be found here: ${s}`;m_.error(l),console.error(l)}(0,TA.get)(To.CONFIG_PARAMS.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,Ia.remove)(s))}(0,gA.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=wr()[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 g=new cB.default(!h,h);g.encoding="binary",g.compression=m;let R=n.openDB(f,g);R.decoder=null,g.compression=S;let A=o.openDB(f,g);A.encoder=null,console.log("copying",f,"from",e,"to",t),await d(R,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:g,value:R,version:A}of f.getRange({start:null,versions:h}))l=E.put(g,R,A),m++,S+=(g.length||10)+R.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,TA,aB,cB,ch,To,lB,gA,m_,uh=Oe(()=>{ge();oB=require("lmdb"),ah=require("path"),Ia=require("fs-extra"),TA=B(X()),aB=B(su()),cB=B(nu()),ch=B(at()),To=B(D());Zi();lB=B(_i()),gA=B(ut()),m_=B(x());a(Ure,"compactOnStart");a(iB,"getTotalDBRecordCount");a(uB,"copyDb")});var wa=T((hOe,mB)=>{"use strict";var vre=require("minimist"),{isMainThread:AA,parentPort:fB}=require("worker_threads"),nt=D(),{PROCESS_DESCRIPTORS_VALIDATE:S_}=nt,Hs=x(),OA=K(),Eh=rh(),fh=pt(),EOe=Xe(),EB=ut(),Gs=$c(),_B=mi(),{compactOnStart:Bre}=(uh(),ie(lh)),Hre=Ji(),{restartWorkers:hh,onMessageByType:Gre}=et(),{handleHDBError:qre,hdb_errors:xre}=oe(),{HTTP_STATUS_CODES:Fre}=xre,g_=X();g_.initSync();var T_=`Restarting HarperDB. This may take up to ${nt.RESTART_TIMEOUT_MS/1e3} seconds.`,kre="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",$re="Invalid service",Vc,Bn;mB.exports={restart:hB,restartService:bA};AA&&Gre(nt.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?bA({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=vre(process.argv);if(t.service){await bA(t);return}if(Bn&&!Vc){console.error(kre);return}if(Bn&&console.log(T_),Vc){Gs.enterPM2Mode(),Hs.notify(T_);let r=Hre(Object.keys(nt.CONFIG_PARAM_MAP),!0);return OA.isEmptyOrZeroLength(Object.keys(r))||EB.updateConfigValue(void 0,void 0,r,!0,!0),Vre(),T_}return AA?(Hs.notify(T_),g_.get(nt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Bre(),setTimeout(()=>{hh()},50)):fB.postMessage({type:nt.ITC_EVENT_TYPES.RESTART}),T_}a(hB,"restart");async function bA(e){let{service:t}=e;if(nt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw qre(new Error,$re,Fre.BAD_REQUEST,void 0,void 0,!0);if(Vc=await Gs.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR),!AA)return fB.postMessage({type:nt.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case S_.clustering:if(!g_.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=dB;break}Bn&&console.log("Restarting clustering"),Hs.notify("Restarting clustering"),await pB();break;case S_.clustering_config:case S_["clustering config"]:if(!g_.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 S_.harperdb:case S_.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(bA,"restartService");async function Vre(){await pB(),await Gs.restart(nt.HDB_PROC_DESCRIPTOR),await OA.async_set_timeout(2e3),g_.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await RA(),Bn&&(await fh.closeConnection(),process.exit(0))}a(Vre,"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 RA(),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 OA.async_set_timeout(3e3),await RA(),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 RA(){await Eh.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Eh.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(RA,"removeNatsConfig")});var wB=T((SOe,IB)=>{"use strict";var mOe=require("lodash"),Gr=D(),{handleHDBError:SB,hdb_errors:Yre}=oe(),{HDB_ERROR_MSGS:Kre,HTTP_STATUS_CODES:Wre}=Yre,NA=x();IB.exports={getRolePermissions:jre};var Ca=Object.create(null),Qre=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)=>({[Gr.PERMS_CRUD_ENUM.READ]:e,[Gr.PERMS_CRUD_ENUM.INSERT]:t,[Gr.PERMS_CRUD_ENUM.UPDATE]:r,[Gr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),yA=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),[R_]:t[R_],[IA]:t[IA],[wA]:t[wA]}),"attr_perms_template"),gB=a((e,t=!1)=>({attribute_name:e,describe:t,[R_]:t}),"timestamp_attr_perms_template"),{READ:R_,INSERT:IA,UPDATE:wA}=Gr.PERMS_CRUD_ENUM,bB=Object.values(Gr.PERMS_CRUD_ENUM),NB=[R_,IA,wA];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[Gr.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=zre(e,r);return Ca[t]?Ca[t].key=n:Ca[t]=Qre(n),Ca[t].perms=s,s}catch(r){if(!e[Gr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Gr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Gr.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 NA.error(n),NA.debug(r),SB(new Error,Kre.OUTDATED_PERMS_TRANSLATION_ERROR,Wre.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
14
+ ${r.stack}`;throw NA.error(n),SB(new Error)}}}a(jre,"getRolePermissions");function zre(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Gr.SYSTEM_SCHEMA_NAME]=n[Gr.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]=Jre(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],_=Xre(c,l);r[i].describe||bB.forEach(u=>{_[u]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=yA()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=yA()})}),r}a(zre,"translateRolePermissions");function Jre(e){let t=AB(!0);return Object.keys(e).forEach(r=>{t.tables[r]=yA(!0,!0,!0,!0,!0)}),t}a(Jre,"createStructureUserPermissions");function Xre(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 Gr.TIME_STAMP_NAMES.includes(d)&&(f=gB(d,u[R_])),_[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||Zre(u,l)}else if(_!==o){let u;Gr.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(Xre,"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 Zre(e,t){NB.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Zre,"checkForHashPerms")});var CB={};Fe(CB,{Resources:()=>ph,keyArrayToString:()=>Yc,resetResources:()=>ene,resources:()=>go});function ene(){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,A_=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(ene,"resetResources");a(Yc,"keyArrayToString")});var DB={};Fe(DB,{Headers:()=>Ro,appendHeader:()=>CA});function CA(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,O_=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(CA,"appendHeader")});var b_={};Fe(b_,{authentication:()=>GB,bypassAuth:()=>ane,login:()=>lne,logout:()=>une,start:()=>cne});function ane(){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?sne?nne:[]:rne?tne:[];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,h]=n.split(" "),m,S;try{switch(E){case"Basic":[m,S]=atob(h).split(":"),d=m||S?await ct.getUser(m,S,e):null;break;case"Bearer":try{d=await(0,Sh.validateOperationToken)(h)}catch(g){if(g.message==="invalid token")try{return await(0,Sh.validateRefreshToken)(h),c({status:-1})}catch{throw g}}break}}catch(g){return one&&(Da.get(h)||(Da.set(h,h),u(m,Yt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:Ao({error:g.message},e)})}Da.set(n,d),ine&&u(d.username,Yt.AUTH_AUDIT_STATUS.SUCCESS,E)}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 cne({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 lne(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 une(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,tne,rne,nne,sne,PB,mh,HB,ine,one,Da,MB,Th=Oe(()=>{UB=B(yr());Rr();A_();Sh=B(Zu());ge();vB=require("uuid"),Hn=B(X()),Yt=B(D()),Kc=B(x()),BB=B(mu());O_();Wc();LB=(0,Kc.loggerWithTag)("auth-event");Hn.initSync();tne=Hn.get(Yt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),rne=Hn.get(Yt.CONFIG_PARAMS.HTTP_CORS),nne=Hn.get(Yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),sne=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,ine=Hn.get(Yt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,one=Hn.get(Yt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Da=new Map;ct.onInvalidatedUser(()=>{Da=new Map});a(ane,"bypassAuth");a(GB,"authentication");a(cne,"start");a(lne,"login");a(une,"logout")});var YB=T((COe,VB)=>{"use strict";var De=require("joi"),qB=require("fs-extra"),xB=require("path"),Ni=tt(),FB=X(),kB=D(),$B=x(),{hdb_errors:_ne}=oe(),{HDB_ERROR_MSGS:_r}=_ne,bi=/^[a-zA-Z0-9-_]+$/;VB.exports={getDropCustomFunctionValidator:fne,setCustomFunctionValidator:Ene,addComponentValidator:Sne,dropCustomFunctionProjectValidator:Tne,packageComponentValidator:gne,deployComponentValidator:Rne,setComponentFileValidator:hne,getComponentFileValidator:mne,dropComponentFileValidator:pne};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(_r.PROJECT_EXISTS):e?r.message(_r.NO_PROJECT):t}catch(n){return $B.error(n),r.message(_r.VALIDATION_ERR)}}a(gh,"checkProjectExists");function N_(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(N_,"checkFilePath");function dne(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(_r.NO_FILE)}catch(s){return $B.error(s),n.message(_r.VALIDATION_ERR)}}a(dne,"checkFileExists");function fne(e){let t=De.object({project:De.string().pattern(bi).custom(gh.bind(null,!0)).required().messages({"string.pattern.base":_r.BAD_PROJECT_NAME}),type:De.string().valid("helpers","routes").required(),file:De.string().pattern(bi).custom(dne.bind(null,e.project,e.type)).custom(N_).required().messages({"string.pattern.base":_r.BAD_FILE_NAME})});return Ni.validateBySchema(e,t)}a(fne,"getDropCustomFunctionValidator");function Ene(e){let t=De.object({project:De.string().pattern(bi).custom(gh.bind(null,!0)).required().messages({"string.pattern.base":_r.BAD_PROJECT_NAME}),type:De.string().valid("helpers","routes").required(),file:De.string().custom(N_).required(),function_content:De.string().required()});return Ni.validateBySchema(e,t)}a(Ene,"setCustomFunctionValidator");function hne(e){let t=De.object({project:De.string().pattern(bi).required().messages({"string.pattern.base":_r.BAD_PROJECT_NAME}),file:De.string().custom(N_).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(hne,"setComponentFileValidator");function pne(e){let t=De.object({project:De.string().pattern(bi).required().messages({"string.pattern.base":_r.BAD_PROJECT_NAME}),file:De.string().custom(N_).optional()});return Ni.validateBySchema(e,t)}a(pne,"dropComponentFileValidator");function mne(e){let t=De.object({project:De.string().required(),file:De.string().custom(N_).required(),encoding:De.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ni.validateBySchema(e,t)}a(mne,"getComponentFileValidator");function Sne(e){let t=De.object({project:De.string().pattern(bi).custom(gh.bind(null,!1)).required().messages({"string.pattern.base":_r.BAD_PROJECT_NAME})});return Ni.validateBySchema(e,t)}a(Sne,"addComponentValidator");function Tne(e){let t=De.object({project:De.string().pattern(bi).custom(gh.bind(null,!0)).required().messages({"string.pattern.base":_r.BAD_PROJECT_NAME})});return Ni.validateBySchema(e,t)}a(Tne,"dropCustomFunctionProjectValidator");function gne(e){let t=De.object({project:De.string().pattern(bi).required().messages({"string.pattern.base":_r.BAD_PROJECT_NAME}),skip_node_modules:De.boolean()});return Ni.validateBySchema(e,t)}a(gne,"packageComponentValidator");function Rne(e){let t=De.object({project:De.string().pattern(bi).required().messages({"string.pattern.base":_r.BAD_PROJECT_NAME}),payload:De.string().optional().messages({"string.pattern.base":_r.BAD_PACKAGE}),package:De.string().optional()});return Ni.validateBySchema(e,t)}a(Rne,"deployComponentValidator")});var bh=T((LOe,XB)=>{"use strict";var Rh=require("joi"),Ah=require("path"),KB=require("fs-extra"),{exec:Ane}=require("child_process"),One=require("util"),WB=One.promisify(Ane),y_=D(),{handleHDBError:Qc,hdb_errors:bne}=oe(),{HTTP_STATUS_CODES:jc}=bne,I_=X(),Nne=tt(),zc=x();I_.initSync();var DA=I_.get(y_.CONFIG_PARAMS.COMPONENTSROOT),QB="npm install --omit=dev --json",yne=`${QB} --dry-run`;XB.exports={installModules:Dne,auditModules:Lne,installAllRootModules:Ine,uninstallRootModule:wne,linkHarperdb:Cne};async function Ine(e=!1){await Oh(),await w_(e?"npm install --ignore-scripts":"npm install",I_.get(y_.CONFIG_PARAMS.ROOTPATH))}a(Ine,"installAllRootModules");async function wne(e){await w_(`npm uninstall ${e}`,I_.get(y_.CONFIG_PARAMS.ROOTPATH))}a(wne,"uninstallRootModule");async function Cne(){await Oh(),await w_(`npm link ${y_.PACKAGE_ROOT}`,I_.get(y_.CONFIG_PARAMS.ROOTPATH))}a(Cne,"linkHarperdb");async function w_(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(w_,"runCommand");async function Dne(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?yne: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(DA,l),u,d=null;try{let{stdout:f,stderr:E}=await WB(s,{cwd:_});u=f?f.replace(`
17
17
  `,""):null,d=E?E.replace(`
18
- `,""):null}catch(f){f.stderr?i[l].npm_error=ZH(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 el.info(`finished installModules with response ${i}`),i}a(Xse,"installModules");function ZH(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(ZH,"parseNPMStdErr");async function Zse(e){el.info(`starting auditModules for request: ${e}`);let t=tG(e);if(t)throw Xc(t,t.message,Zc.BAD_REQUEST);let{projects:r}=e;await tp(),await eG(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=ep.join(iO,o);n[o]={npm_output:null,npm_error:null};try{let l=await x_("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=ZH(l.stderr)}}return el.info(`finished auditModules with response ${n}`),n}a(Zse,"auditModules");async function tp(){try{return await x_("npm -v"),!0}catch{throw Xc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Zc.BAD_REQUEST,void 0,void 0,!0)}}a(tp,"checkNPMInstalled");async function eG(e){if(!Array.isArray(e)||e.length===0)throw Xc(new Error,"projects argument must be an array with at least 1 element",Zc.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=ep.join(iO,i.toString());if(!await zH.pathExists(o)){t.push(i);continue}let l=ep.join(o,"package.json");await zH.pathExists(l)||r.push(i)}if(t.length>0)throw Xc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Zc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Xc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Zc.BAD_REQUEST,void 0,void 0,!0)}a(eG,"checkProjectPaths");function tG(e){let t=Zh.object({projects:Zh.array().min(1).items(Zh.string()).required(),dry_run:Zh.boolean().default(!1)});return Wse.validateBySchema(e,t)}a(tG,"modulesValidator")});var aO=g((mbe,aG)=>{"use strict";var tl=require("fs-extra"),oO=require("path"),np=x(),nG=K(),sp=C(),oG=X(),eie=lt();aG.exports=tie;async function tie(){let e=rie(),t=oG.get(sp.CONFIG_PARAMS.ROOTPATH),r=oO.join(t,"package.json"),n={dependencies:{harperdb:"file:"+sp.PACKAGE_ROOT}},s=oO.join(t,"node_modules");await tl.ensureDir(s);let i,o=!0,c=!1;try{i=await tl.readJson(r)}catch(l){if(nG.isEmptyOrZeroLength(e))return;if(l.code!==sp.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!nG.isEmptyOrZeroLength(e)){for(let{name:l,package:_}of e){let u=await sG(_);n.dependencies[l]=u+_}if(!o){np.notify("Installing components"),await iG(r,n,null);return}for(let{name:l,package:_}of e){let u=i.dependencies[l],d=await sG(_);if(u===void 0||u!==d+_){c=!0;break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(np.notify("Removing component",l),c=!0);c&&(np.notify("Updating components."),await iG(r,n,i))}a(tie,"installComponents");function rie(){let e=eie.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(rie,"getComponentsConfig");async function sG(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":oO.extname(e)||await tl.pathExists(e)?"file:":"github:"}a(sG,"getPkgPrefix");async function iG(e,t,r){np.trace("npm installing components package.json",t),await tl.writeFile(e,JSON.stringify(t,null," "));try{await rp().installAllRootModules(oG.get(sp.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await tl.writeFile(e,JSON.stringify(r,null," ")):await tl.unlink(e),n}}a(iG,"installPackages")});var ip=g((gbe,_G)=>{"use strict";var Ye=require("fs-extra"),cO=require("fast-glob"),Ae=require("path"),lG=require("tar-fs"),Tbe=require("uuid").v4,lO=require("normalize-path"),qs=jH(),Gt=x(),Je=C(),yt=X(),F_=lt(),nie=K(),{PACKAGE_ROOT:sie}=C(),{handleHDBError:Kt,hdb_errors:iie}=oe(),{basename:oie}=require("path"),aie=aO(),uG=X(),cie=C(),{Readable:lie}=require("stream"),{isMainThread:uie}=require("worker_threads"),{HDB_ERROR_MSGS:Pa,HTTP_STATUS_CODES:Wt}=iie,_ie=Ae.join(sie,"application-template"),cG=Ae.join(yt.get(Je.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function die(){Gt.trace("getting custom api status");let e={};try{e={port:yt.get(Je.CONFIG_PARAMS.HTTP_PORT),directory:yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Kt(new Error,Pa.FUNCTION_STATUS,Wt.INTERNAL_SERVER_ERROR,Gt.ERR,t)}return e}a(die,"customFunctionsStatus");function fie(){Gt.trace("getting custom api endpoints");let e={},t=yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT);try{cO.sync(lO(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:cO.sync(lO(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:cO.sync(lO(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Kt(new Error,Pa.GET_FUNCTIONS,Wt.INTERNAL_SERVER_ERROR,Gt.ERR,r)}return e}a(fie,"getCustomFunctions");function Eie(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);Gt.trace("getting custom api endpoint file content");let r=yt.get(Je.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,Pa.GET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Gt.ERR,c)}}a(Eie,"getCustomFunction");function hie(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);Gt.trace("setting custom function file content");let r=yt.get(Je.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,Pa.SET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Gt.ERR,c)}}a(hie,"setCustomFunction");function pie(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);Gt.trace("dropping custom function file");let r=yt.get(Je.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,Pa.DROP_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Gt.ERR,o)}}a(pie,"dropCustomFunction");function mie(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);Gt.trace("adding component");let r=yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Ae.join(r,n);return Ye.mkdirSync(s,{recursive:!0}),Ye.copySync(_ie,s),`Successfully added project: ${n}`}catch(s){throw Kt(new Error,Pa.ADD_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Gt.ERR,s)}}a(mie,"addComponent");function Sie(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);Gt.trace("dropping custom function project");let r=yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=yt.get(Je.CONFIG_PARAMS.APPS);if(!nie.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 F_.updateConfigValue(Je.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,Pa.DROP_FUNCTION_PROJECT,Wt.INTERNAL_SERVER_ERROR,Gt.ERR,i)}}a(Sie,"dropCustomFunctionProject");async function Tie(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=yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Gt.trace("packaging component",n);let s;try{s=await Ye.realpath(Ae.join(r,n))}catch(l){if(l.code!==Je.NODE_ERROR_CODES.ENOENT)throw l;try{s=await Ye.realpath(Ae.join(yt.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===Je.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await Ye.ensureDir(cG);let i=Ae.join(cG,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:l=>l.includes(Ae.join(s,"node_modules"))}),lG.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(Tie,"packageComponent");async function gie(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=yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(Gt.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=lie.from(Buffer.from(s,"base64"));await new Promise((h,m)=>{f.pipe(lG.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 F_.addConfig(n,{package:i}),!s){await aie();let f=uG.get(cie.CONFIG_PARAMS.ROOTPATH);o=Ae.join(f,"node_modules",n)}if(uie)return;let c=new Map;c.isWorker=!0;let l=(ap(),se(op)),_;l.setErrorReporter(f=>_=f);let u=oie(o),d=l.component_errors.get(u);try{await l.loadComponent(o,c)}finally{l.component_errors.set(u,d)}if(_)throw _;return Gt.info("Installed component"),`Successfully deployed: ${n}`}a(gie,"deployComponent");async function Rie(){let e=F_.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 Gt.warn("Error loading package",l),{error:l.toString(),entries:[]}}},"walk_dir"),n=await r(yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{name:yt.get(Je.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(yt.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(ap(),se(op)).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(Rie,"getComponents");async function Aie(e){let t=qs.getComponentFileValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);let n=F_.getConfigObj()[e.project]||e.project==="harperdb"?Ae.join(uG.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules"):yt.get(Je.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===Je.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Ae.join(e.project,e.file)}'`):i}}a(Aie,"getComponentFile");async function Oie(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(yt.get(Je.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(Oie,"setComponentFile");async function bie(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(yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),r);return await Ye.pathExists(n)&&await Ye.remove(n),F_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(bie,"dropComponent");_G.exports={customFunctionsStatus:die,getCustomFunctions:fie,getCustomFunction:Eie,setCustomFunction:hie,dropCustomFunction:pie,addComponent:mie,dropCustomFunctionProject:Sie,packageComponent:Tie,deployComponent:gie,getComponents:Rie,getComponentFile:Aie,setComponentFile:Oie,dropComponent:bie}});var uO=g((Abe,fG)=>{"use strict";var xs=require("joi"),dG=rt();fG.exports={readTransactionLogValidator:Nie,deleteTransactionLogsBeforeValidator:yie};function Nie(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 dG.validateBySchema(e,t)}a(Nie,"readTransactionLogValidator");function yie(e){let t=xs.object({schema:xs.string().required(),table:xs.string().required(),timestamp:xs.date().timestamp().required()});return dG.validateBySchema(e,t)}a(yie,"deleteTransactionLogsBeforeValidator")});var lp=g((bbe,SG)=>{"use strict";var _O=C(),cp=mt(),EG=K(),hG=X(),pG=_i(),{handleHDBError:rl,hdb_errors:Iie}=oe(),{HTTP_STATUS_CODES:nl}=Iie,{readTransactionLogValidator:wie,deleteTransactionLogsBeforeValidator:Cie}=uO(),mG="This operation relies on clustering and cannot run with it disable.",Die="Logs successfully deleted from transaction log.",Lie="All logs successfully deleted from transaction log.";SG.exports={readTransactionLog:Pie,deleteTransactionLogsBefore:Mie};async function*Pie(e){let t=wie(e);if(t)throw rl(t,t.message,nl.BAD_REQUEST,void 0,void 0,!0);if(!hG.get(_O.CONFIG_PARAMS.CLUSTERING_ENABLED))throw rl(new Error,mG,nl.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=EG.checkSchemaTableExist(r,n);if(s)throw rl(new Error,s,nl.NOT_FOUND,void 0,void 0,!0);let i=pG.createNatsTableStreamName(r,n),o=await cp.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===_O.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(Pie,"readTransactionLog");async function Mie(e){let t=Cie(e);if(t)throw rl(t,t.message,nl.BAD_REQUEST,void 0,void 0,!0);if(!hG.get(_O.CONFIG_PARAMS.CLUSTERING_ENABLED))throw rl(new Error,mG,nl.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=EG.checkSchemaTableExist(r,n);if(i)throw rl(new Error,i,nl.NOT_FOUND,void 0,void 0,!0);let o=pG.createNatsTableStreamName(r,n),{jsm:c}=await cp.getNATSReferences(),l=await cp.getStreamInfo(o),_=new Date(l.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let u=Die,d,f=new Date(l.state.last_ts).getTime();return s>f?(d=l.state.last_seq+1,u=Lie):d=(await cp.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),u}a(Mie,"deleteTransactionLogsBefore")});var gG=g((ybe,TG)=>{"use strict";var dO=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}};TG.exports=dO});var AG=g((wbe,RG)=>{"use strict";var fO=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};RG.exports=fO});var hO=g((Dbe,bG)=>{"use strict";var OG=gG(),Uie=AG(),{HDB_ERROR_MSGS:vie}=zr(),EO=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=vie.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 OG(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Uie(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 OG(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}};bG.exports=EO});var fp=g((Pbe,xG)=>{"use strict";var pO=Dr(),up=or(),Fn=nh(),V_=di(),mO=ia(),Bie=qR(),Hie=Lv(),Y_=Pr(),_p=ah(),qt=x(),Gie=zR(),qie=S_(),xie=wA(),Fie=Ah(),kie=bh(),$ie=DA(),Vie=yh(),Yie=wh(),SO=Dh(),Oi=K(),Kie=CB(),TO=Ph(),IG=Ca(),xn=C(),wG=UH(),Wie=hi(),CG=E_(),DG=(Jh(),se(B_)),LG=lt(),mn=ip(),Qie=require("alasql"),PG=lp(),MG=rp(),UG=hO(),{handleHDBError:$r,hdb_errors:vG}=oe(),{HDB_ERROR_MSGS:er,HTTP_STATUS_CODES:k_}=vG,V=new Map,BG="delete",go="insert",bi="read",Ma="update",$_="describe",NG=V_.describeSchema.name,yG=V_.describeTable.name,HG={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},jie="catchup",zie="handleGetJob",Jie="handleGetJobsByStartDate",dp={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Xie=[Fn.createTable.name,Fn.createAttribute.name,Fn.dropTable.name,Fn.dropAttribute.name],GG={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(pO.insert.name,new Q(!1,[go]));V.set(pO.update.name,new Q(!1,[Ma]));V.set(pO.upsert.name,new Q(!1,[go,Ma]));V.set(up.searchByConditions.name,new Q(!1,[bi]));V.set(up.searchByHash.name,new Q(!1,[bi]));V.set(up.searchByValue.name,new Q(!1,[bi]));V.set(up.search.name,new Q(!1,[bi]));V.set(Fn.createSchema.name,new Q(!0,[]));V.set(Fn.createTable.name,new Q(!0,[]));V.set(Fn.createAttribute.name,new Q(!1,[go]));V.set(Fn.dropSchema.name,new Q(!0,[]));V.set(Fn.dropTable.name,new Q(!0,[]));V.set(Fn.dropAttribute.name,new Q(!0,[]));V.set(V_.describeSchema.name,new Q(!1,[bi]));V.set(V_.describeTable.name,new Q(!1,[bi]));V.set(mO.deleteRecord.name,new Q(!1,[BG]));V.set(Y_.addUser.name,new Q(!0,[]));V.set(Y_.alterUser.name,new Q(!0,[]));V.set(Y_.dropUser.name,new Q(!0,[]));V.set(Y_.listUsersExternal.name,new Q(!0,[]));V.set(_p.listRoles.name,new Q(!0,[]));V.set(_p.addRole.name,new Q(!0,[]));V.set(_p.alterRole.name,new Q(!0,[]));V.set(_p.dropRole.name,new Q(!0,[]));V.set(Gie.name,new Q(!0,[]));V.set(qie.name,new Q(!0,[]));V.set(xie.name,new Q(!0,[]));V.set(Fie.name,new Q(!0,[]));V.set(kie.name,new Q(!0,[]));V.set($ie.name,new Q(!0,[]));V.set(SO.setRoutes.name,new Q(!0,[]));V.set(SO.getRoutes.name,new Q(!0,[]));V.set(SO.deleteRoutes.name,new Q(!0,[]));V.set(LG.setConfiguration.name,new Q(!0,[]));V.set(Vie.clusterStatus.name,new Q(!0,[]));V.set(Yie.name,new Q(!0,[]));V.set(TO.getFingerprint.name,new Q(!0,[]));V.set(TO.setLicense.name,new Q(!0,[]));V.set(mO.deleteFilesBefore.name,new Q(!0,[]));V.set(mO.deleteAuditLogsBefore.name,new Q(!0,[]));V.set(IG.restart.name,new Q(!0,[]));V.set(IG.restartService.name,new Q(!0,[]));V.set(Bie.name,new Q(!0,[]));V.set(Hie.name,new Q(!0,[bi]));V.set(Wie.systemInformation.name,new Q(!0,[]));V.set(LG.getConfiguration.name,new Q(!0,[]));V.set(PG.readTransactionLog.name,new Q(!0,[]));V.set(PG.deleteTransactionLogsBefore.name,new Q(!0,[]));V.set(MG.installModules.name,new Q(!0,[]));V.set(MG.auditModules.name,new Q(!0,[]));V.set(CG.createTokens.name,new Q(!1,[]));V.set(CG.refreshOperationToken.name,new Q(!1,[]));V.set(DG.login.name,new Q(!1,[]));V.set(DG.logout.name,new Q(!1,[]));V.set(mn.customFunctionsStatus.name,new Q(!0,[]));V.set(mn.getCustomFunctions.name,new Q(!0,[]));V.set(mn.getComponents.name,new Q(!0,[]));V.set(mn.getComponentFile.name,new Q(!0,[]));V.set(mn.setComponentFile.name,new Q(!0,[]));V.set(mn.dropComponent.name,new Q(!0,[]));V.set(mn.getCustomFunction.name,new Q(!0,[]));V.set(mn.setCustomFunction.name,new Q(!0,[]));V.set(mn.dropCustomFunction.name,new Q(!0,[]));V.set(mn.addComponent.name,new Q(!0,[]));V.set(mn.dropCustomFunctionProject.name,new Q(!0,[]));V.set(mn.packageComponent.name,new Q(!0,[]));V.set(mn.deployComponent.name,new Q(!0,[]));V.set(TO.getRegistrationInfo.name,new Q(!1,[]));V.set(Y_.userInfo.name,new Q(!1,[]));V.set(V_.describeAll.name,new Q(!1,[]));V.set(zie,new Q(!1,[]));V.set(Jie,new Q(!0,[]));V.set(jie,new Q(!0,[]));V.set(dp.CSV_DATA_LOAD,new Q(!1,[go,Ma]));V.set(dp.CSV_URL_LOAD,new Q(!1,[go,Ma]));V.set(dp.CSV_FILE_LOAD,new Q(!1,[go,Ma]));V.set(dp.IMPORT_FROM_S3,new Q(!1,[go,Ma]));V.set(GG.EXPORT_TO_S3,new Q(!0,[]));V.set(GG.EXPORT_LOCAL,new Q(!0,[]));V.set(xn.VALID_SQL_OPS_ENUM.DELETE,new Q(!1,[BG]));V.set(xn.VALID_SQL_OPS_ENUM.SELECT,new Q(!1,[bi]));V.set(xn.VALID_SQL_OPS_ENUM.INSERT,new Q(!1,[go]));V.set(xn.VALID_SQL_OPS_ENUM.UPDATE,new Q(!1,[Ma]));xG.exports={verifyPerms:eoe,verifyPermsAst:Zie,verifyBulkLoadAttributePerms:roe};function Zie(e,t,r){if(Oi.isEmptyOrZeroLength(e))throw qt.info("verify_perms_ast has an empty user parameter"),$r(new Error);if(Oi.isEmptyOrZeroLength(t))throw qt.info("verify_perms_ast has an empty user parameter"),$r(new Error);if(Oi.isEmptyOrZeroLength(r))throw qt.info("verify_perms_ast has a null operation parameter"),$r(new Error);try{let n=new UG,s=new Kie(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw qt.info("No schemas defined in verifyPermsAst(), will not continue."),$r(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&HG[r])throw $r(new Error,er.DROP_SYSTEM,k_.FORBIDDEN);if(c&&!l)return null;let _=wG.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof Qie.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=qG(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=RO(t.role.permission,f,d[E]);gO(h,m,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw $r(n)}}a(Zie,"verifyPermsAst");function eoe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw qt.info("null required parameter in verifyPerms"),$r(new Error,er.DEFAULT_INVALID_REQUEST,k_.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 UG;if(Oi.isEmptyOrZeroLength(e.hdb_user.role)||Oi.isEmptyOrZeroLength(e.hdb_user.role.permission))return qt.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(xn.SYSTEM_SCHEMA_NAME)||s===xn.SYSTEM_SCHEMA_NAME;if(u&&HG[r])throw $r(new Error,er.DROP_SYSTEM,k_.FORBIDDEN);if(l&&!u||_===!0&&(r===Fn.createSchema.name||r===Fn.dropSchema.name))return null;if(Xie.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=wG.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===NG||r===yG){if(s===xn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(er.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===NG&&(!d[s]||!d[s][$_]))return c.handleInvalidItem(er.SCHEMA_NOT_FOUND(s));if(r===yG&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][$_]))return c.handleInvalidItem(er.TABLE_NOT_FOUND(s,i))}}let f=qG(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&&xn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let m=[],S=d[s].tables[i];S[xn.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(T=>T[xn.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=toe(e),h=RO(e.hdb_user.role.permission,s,i);return gO(E,h,r,i,s,c,n),c.getPermsResponse()}a(eoe,"verifyPerms");function qG(e,t,r,n,s){if(Oi.arrayHasEmptyValues([e,t,r]))throw qt.info("hasPermissions has an invalid parameter"),$r(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 qt.info(`operation ${t} not found.`),$r(new Error,er.OP_NOT_FOUND(t),k_.BAD_REQUEST);if(V.get(t)&&V.get(t).requires_su)return qt.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][$_]===!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[$_]===!1)n.addInvalidItem(er.TABLE_NOT_FOUND(l,u));else try{let f=[],E=V.get(t).perms;!Oi.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)&&(qt.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 qt.error(E),qt.error(f),$r(vG.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(qG,"hasPermissions");function gO(e,t,r,n,s,i,o){if(!e||!t)throw qt.info("no attributes specified in checkAttributePerms."),$r(new Error);let c=V.get(r).perms;if(!c||c==="")throw qt.info(`no permissions found for ${r} in checkAttributePerms().`),$r(new Error);if(Oi.isEmptyOrZeroLength(t))return qt.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[$_]===!1){i.addInvalidItem(er.ATTR_NOT_FOUND(s,n,u),s,n);continue}if(c)for(let f of c){if(xn.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==bi)throw $r(new Error,er.SYSTEM_TIMESTAMP_PERMS_ERR,k_.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(gO,"checkAttributePerms");function toe(e){let t=new Set;try{if(e.action)return t;if(e.operation===xn.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){qt.info(r)}return t}a(toe,"getRecordAttributes");function RO(e,t,r){let n=new Map;if(Oi.isEmpty(e))return qt.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{qt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(RO,"getAttributePermissions");function roe(e,t,r,n,s,i,o){let c=new Set(i),l=RO(e,n,s);gO(c,l,t,s,n,o,r)}a(roe,"verifyBulkLoadAttributePerms")});var hp=g((Ube,YG)=>{"use strict";YG.exports={evaluateSQL:hoe,processAST:VG,convertSQLToAST:$G,checkASTPermissions:kG};var noe=Dr(),FG=require("util"),soe=FG.callbackify(noe.insert),ioe=or().search,ooe=vU().update,aoe=FG.callbackify(ooe),coe=HU().convertDelete,Ro=require("alasql"),loe=fp(),Ep=x(),uoe=Zf(),_oe=K(),K_=C(),{hdb_errors:doe,handleHDBError:AO}=oe(),{HTTP_STATUS_CODES:OO}=doe;uoe(Ro);var foe=403,Eoe="There was a problem performing this insert. Please check the logs and try again.",bO=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function hoe(e,t){let r=e.parsed_sql_object;if(!r){r=$G(e.sql);let n,s=r.ast.statements[0];if(s instanceof Ro.yy.Insert?n=s.into.databaseid:s instanceof Ro.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Ro.yy.Update||s instanceof Ro.yy.Delete?n=s.table.databaseid:Ep.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Ro.yy.Select)&&_oe.isEmptyOrZeroLength(n))return t("No schema specified",null)}VG(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(hoe,"evaluateSQL");function kG(e,t){let r;try{r=loe.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(kG,"checkASTPermissions");function $G(e){let t=new bO;if(!e)throw AO(new Error,"The 'sql' parameter is missing from the request body",OO.BAD_REQUEST);try{let r=e.trim(),n=Ro.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
20
- `);throw n[1]?AO(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,OO.BAD_REQUEST):AO(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",OO.BAD_REQUEST)}return t}a($G,"convertSQLToAST");function VG(e,t,r){try{let n=poe;if(!e.bypass_auth&&!t.permissions_checked){let i=kG(e,t);if(i&&i.length>0)return r(foe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case K_.VALID_SQL_OPS_ENUM.SELECT:n=ioe,s=t.ast.statements[0];break;case K_.VALID_SQL_OPS_ENUM.INSERT:n=moe;break;case K_.VALID_SQL_OPS_ENUM.UPDATE:n=aoe;break;case K_.VALID_SQL_OPS_ENUM.DELETE:n=coe;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(VG,"processAST");function poe(e,t){Ep.info(e),t("unknown sql statement")}a(poe,"nullFunction");function moe({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=Soe(i,e.values)}catch(o){return r(o)}soe(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){Ep.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(moe,"convertInsert");function Soe(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]]=Ro.compile(`SELECT ${s.toString()} AS [${K_.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Ep.error(r),new Error(Eoe)}}a(Soe,"createDataObjects")});var NO=g((Bbe,WG)=>{"use strict";var{S3:Toe,GetObjectCommand:goe}=require("@aws-sdk/client-s3");WG.exports={getFileStreamFromS3:Roe,getS3AuthObj:KG};async function Roe(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await KG(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new goe(r))).Body}a(Roe,"getFileStreamFromS3");function KG(e,t,r){return new Toe({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(KG,"getS3AuthObj")});var pp=g((Gbe,rq)=>{"use strict";var IO=or(),Aoe=hp(),Ooe=NO(),{AsyncParser:boe,Transform:Noe}=require("json2csv"),Q_=require("stream"),Sn=K(),yO=require("fs-extra"),yoe=require("path"),kn=x(),{promisify:zG}=require("util"),W_=K(),{handleHDBError:It,hdb_errors:Ioe}=oe(),{HDB_ERROR_MSGS:Vr,HTTP_STATUS_CODES:wt}=Ioe,{streamAsJSON:woe}=(mR(),se(DU)),{Upload:Coe}=require("@aws-sdk/lib-storage"),QG=["search_by_value","search_by_hash","sql","search_by_conditions"],jG=["json","csv"],JG="json",XG="csv",Doe="Successfully exported JSON locally.",Loe="Successfully exported CSV locally.",Poe=1e3,Moe=IO.searchByHash,Uoe=IO.searchByValue,voe=zG(Aoe.evaluateSQL),Boe=zG(Q_.finished);rq.exports={export_to_s3:xoe,export_local:Hoe,toCsvStream:ZG};async function Hoe(e){kn.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=eq(e);if(!Sn.isEmpty(t))throw kn.error(t),It(new Error,t,wt.BAD_REQUEST,void 0,void 0,!0);if(Sn.isEmpty(e.path))throw kn.error(Vr.MISSING_VALUE("path")),It(new Error,Vr.MISSING_VALUE("path"),wt.BAD_REQUEST,void 0,void 0,!0);let r=(Sn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(yoe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Sn.buildFolderPath(e.path,r);await Goe(e.path);let s=await tq(e);return await qoe(n,e.format,s)}a(Hoe,"export_local");async function Goe(e){if(kn.trace("in confirmPath"),Sn.isEmptyOrZeroLength(e))throw It(new Error,`Invalid path: ${e}`,wt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await yO.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,kn.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 kn.error(r),It(new Error,r,wt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Goe,"confirmPath");async function qoe(e,t,r){if(kn.trace("in saveToLocal"),W_.isEmptyOrZeroLength(e))throw It(new Error,Vr.INVALID_VALUE("file_path"),wt.BAD_REQUEST,void 0,void 0,!0);if(W_.isEmptyOrZeroLength(t))throw It(new Error,Vr.INVALID_VALUE("Source format"),wt.BAD_REQUEST,void 0,void 0,!0);if(W_.isEmpty(r))throw It(new Error,Vr.NOT_FOUND("Data"),wt.BAD_REQUEST,void 0,void 0,!0);if(t===JG){let n=yO.createWriteStream(e);return woe(r).pipe(n),await Boe(n),{message:Doe,path:e}}else if(t===XG){let n=yO.createWriteStream(e),s=Q_.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(u=>({label:u,value:u})));let c={objectMode:!0};return await new boe(i,c).fromInput(s).toOutput(n).promise(!1),{message:Loe,path:e}}throw It(new Error,Vr.INVALID_VALUE("format"),wt.BAD_REQUEST)}a(qoe,"saveToLocal");async function xoe(e){if(!e.s3||Object.keys(e.s3).length===0)throw It(new Error,Vr.MISSING_VALUE("S3 object"),wt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw It(new Error,Vr.MISSING_VALUE("aws_access_key_id"),wt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw It(new Error,Vr.MISSING_VALUE("aws_secret_access_key"),wt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.bucket))throw It(new Error,Vr.MISSING_VALUE("bucket"),wt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.key))throw It(new Error,Vr.MISSING_VALUE("key"),wt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.region))throw It(new Error,Vr.MISSING_VALUE("region"),wt.BAD_REQUEST);let t=eq(e);if(!Sn.isEmpty(t))throw It(new Error,t,wt.BAD_REQUEST);kn.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await tq(e)}catch(l){throw kn.error(l),l}let n,s=await Ooe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Q_.PassThrough;if(e.format===XG){i=e.s3.key+".csv";let l=ZG(r,r.getColumns?.());l.on("error",_=>{throw _}),l.pipe(o)}else if(e.format===JG){i=e.s3.key+".json";let l=new Q_.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%Poe===0&&(l.push(u),u="")}u.length!==0&&l.push(u),l.push("]"),l.push(null)}else throw It(new Error,Vr.INVALID_VALUE("format"),wt.BAD_REQUEST);return new Coe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(xoe,"export_to_s3");function ZG(e,t){let r=Q_.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 Noe(n,s);return r.pipe(i)}a(ZG,"toCsvStream");function eq(e){if(kn.trace("in exportCoreValidation"),Sn.isEmpty(e.format))return"format missing";if(jG.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${jG.join(", ")}`;let t=e.search_operation.operation;if(Sn.isEmpty(t))return"search_operation.operation missing";if(QG.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${QG.join(", ")}`}a(eq,"exportCoreValidation");async function tq(e){kn.trace("in getRecords");let t,r;if(W_.isEmpty(e.search_operation)||W_.isEmptyOrZeroLength(e.search_operation.operation))throw It(new Error,Vr.INVALID_VALUE("Search operation"),wt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Uoe;break;case"search_by_hash":t=Moe;break;case"search_by_conditions":t=IO.searchByConditions;break;case"sql":t=voe;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,kn.error(r),It(new Error,r,wt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(tq,"getRecords")});var uq={};Fe(uq,{contentTypes:()=>PO,findBestSerializer:()=>Sp,getDeserializer:()=>va,registerContentHandlers:()=>MO,serialize:()=>Tp,serializeMessage:()=>To});function Foe(e){try{return e?.[0]===123?LO(e):e}catch{return e}}function MO(e){e.register($oe,{serializers:[{regex:/^application\/json$/,serializer:t_},{regex:/^application\/cbor$/,serializer:function(t){return new Ua.EncoderStream(z_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?mp.Readable.from((0,Fs.encodeIter)(t,z_)):(0,Fs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,wO.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,Ua.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function Sp(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 Tp(e,t,r){let n=sq&&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=Sp(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,Ni.createBrotliCompress)({params:{[Ni.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Ni.constants.BROTLI_MODE_TEXT:Ni.constants.BROTLI_MODE_GENERIC,[Ni.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>sq?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Ni.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function To(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return j_(e);let r=t.serialize;if(r)return r(e);let n=Sp(t);return r=t.serialize=n.serializer.serialize,r(e)}function Voe(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 va(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||iq(e,n);return o=>Voe(o).then(i)}return e&&Qt.get(e)?.deserialize||iq(e,n)}function iq(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 LO(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function Yoe(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 wO,Fs,Ua,Ni,mp,oq,CO,DO,aq,cq,j_,LO,z_,Qt,PO,nq,lq,koe,$oe,sq,Jc=Oe(()=>{mR();wO=B(pp()),Fs=require("msgpackr"),Ua=require("cbor-x"),Ni=require("zlib"),mp=require("stream");Rr();oq=require("../index"),CO=B(X()),DO=B(C()),aq=B(require("yaml")),cq=CO.default.get(DO.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,j_=cq?ma:JSON.stringify,LO=cq?pR:JSON.parse,z_={useRecords:!1,useToJSON:!0},Qt=new Map,PO=Qt;at.contentTypes=PO;(0,oq._assignPackageExport)("contentTypes",PO);Qt.set("application/json",{serializeStream:t_,serialize:j_,deserialize:LO,q:.8});nq=new Ua.Encoder(z_);Qt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Ua.EncoderStream(z_).end(e)},serialize:nq.encode,deserialize:nq.decode,q:1});Qt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?mp.Readable.from((0,Fs.encodeIter)(e,z_)):(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,wO.toCsvStream)(e,e?.getColumns?.())},q:.1});Qt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Qt.set("text/yaml",{serialize(e){return aq.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Qt.set("text/event-stream",{serializeStream:function(e){return mp.Readable.from(Yoe(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
- `),e.data){let r=e.data;typeof r=="object"&&(r=j_(r)),t+="data: "+r+`
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(Dne,"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 Lne(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(DA,o);n[o]={npm_output:null,npm_error:null};try{let l=await w_("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(Lne,"auditModules");async function Oh(){try{return await w_("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(DA,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 Nne.validateBySchema(e,t)}a(JB,"modulesValidator")});var PA=T((MOe,nH)=>{"use strict";var Jc=require("fs-extra"),LA=require("path"),Nh=x(),ZB=K(),yh=D(),rH=X(),Pne=ut();nH.exports=Mne;async function Mne(){let e=Une(),t=rH.get(yh.CONFIG_PARAMS.ROOTPATH),r=LA.join(t,"package.json"),n={dependencies:{harperdb:"file:"+yh.PACKAGE_ROOT}},s=LA.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(Mne,"installComponents");function Une(){let e=Pne.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(Une,"getComponentsConfig");async function eH(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":LA.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 vA=T((BOe,aH)=>{"use strict";var Ye=require("fs-extra"),MA=require("fast-glob"),Ae=require("path"),iH=require("tar-fs"),vOe=require("uuid").v4,UA=require("normalize-path"),qs=YB(),vt=x(),ze=D(),Nt=X(),C_=ut(),vne=K(),{PACKAGE_ROOT:Bne}=D(),{handleHDBError:Kt,hdb_errors:Hne}=oe(),{basename:Gne}=require("path"),qne=PA(),oH=X(),xne=D(),{Readable:Fne}=require("stream"),{isMainThread:kne}=require("worker_threads"),{HDB_ERROR_MSGS:La,HTTP_STATUS_CODES:Wt}=Hne,$ne=Ae.join(Bne,"application-template"),sH=Ae.join(Nt.get(ze.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Vne(){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(Vne,"customFunctionsStatus");function Yne(){vt.trace("getting custom api endpoints");let e={},t=Nt.get(ze.CONFIG_PARAMS.COMPONENTSROOT);try{MA.sync(UA(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:MA.sync(UA(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:MA.sync(UA(`${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(Yne,"getCustomFunctions");function Kne(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(Kne,"getCustomFunction");function Wne(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(Wne,"setCustomFunction");function Qne(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(Qne,"dropCustomFunction");function jne(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($ne,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 zne(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(!vne.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 C_.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(zne,"dropCustomFunctionProject");async function Jne(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(Jne,"packageComponent");async function Xne(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=Fne.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 C_.addConfig(n,{package:i}),!s){await qne();let f=oH.get(xne.CONFIG_PARAMS.ROOTPATH);o=Ae.join(f,"node_modules",n)}if(kne)return;let c=new Map;c.isWorker=!0;let l=(wh(),ie(Ih)),_;l.setErrorReporter(f=>_=f);let u=Gne(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(Xne,"deployComponent");async function Zne(){let e=C_.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(Zne,"getComponents");async function ese(e){let t=qs.getComponentFileValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);let n=C_.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(ese,"getComponentFile");async function tse(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(tse,"setComponentFile");async function rse(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),C_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(rse,"dropComponent");aH.exports={customFunctionsStatus:Vne,getCustomFunctions:Yne,getCustomFunction:Kne,setCustomFunction:Wne,dropCustomFunction:Qne,addComponent:jne,dropCustomFunctionProject:zne,packageComponent:Jne,deployComponent:Xne,getComponents:Zne,getComponentFile:ese,setComponentFile:tse,dropComponent:rse}});var BA=T((GOe,lH)=>{"use strict";var xs=require("joi"),cH=tt();lH.exports={readTransactionLogValidator:nse,deleteTransactionLogsBeforeValidator:sse};function nse(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(nse,"readTransactionLogValidator");function sse(e){let t=xs.object({schema:xs.string().required(),table:xs.string().required(),timestamp:xs.date().timestamp().required()});return cH.validateBySchema(e,t)}a(sse,"deleteTransactionLogsBeforeValidator")});var Ch=T((xOe,EH)=>{"use strict";var HA=D(),D_=pt(),uH=K(),_H=X(),dH=ui(),{handleHDBError:Xc,hdb_errors:ise}=oe(),{HTTP_STATUS_CODES:Zc}=ise,{readTransactionLogValidator:ose,deleteTransactionLogsBeforeValidator:ase}=BA(),fH="This operation relies on clustering and cannot run with it disable.",cse="Logs successfully deleted from transaction log.",lse="All logs successfully deleted from transaction log.";EH.exports={readTransactionLog:use,deleteTransactionLogsBefore:_se};async function*use(e){let t=ose(e);if(t)throw Xc(t,t.message,Zc.BAD_REQUEST,void 0,void 0,!0);if(!_H.get(HA.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 D_.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===HA.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(use,"readTransactionLog");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(HA.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 D_.getNATSReferences(),l=await D_.getStreamInfo(o),_=new Date(l.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let u=cse,d,f=new Date(l.state.last_ts).getTime();return s>f?(d=l.state.last_seq+1,u=lse):d=(await D_.viewStream(o,parseInt(s),1))[0].nats_sequence,await D_.purgeTableStream(r,n,{seq:d}),u}a(_se,"deleteTransactionLogsBefore")});var pH=T((kOe,hH)=>{"use strict";var GA=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=GA});var SH=T((VOe,mH)=>{"use strict";var qA=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};mH.exports=qA});var FA=T((KOe,gH)=>{"use strict";var TH=pH(),dse=SH(),{HDB_ERROR_MSGS:fse}=Jr(),xA=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=fse.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 dse(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=xA});var Mh=T((QOe,BH)=>{"use strict";var kA=br(),Dh=sr(),qn=RE(),M_=_i(),$A=na(),Ese=lR(),hse=bU(),U_=yr(),Lh=NE(),Bt=x(),pse=gR(),mse=n_(),Sse=XR(),Tse=FE(),gse=$E(),Rse=eA(),Ase=YE(),Ose=WE(),VA=jE(),yi=K(),bse=O0(),YA=JE(),OH=wa(),Gn=D(),bH=wB(),Nse=mi(),NH=Zu(),yH=(Th(),ie(b_)),IH=ut(),_n=vA(),yse=require("alasql"),wH=Ch(),CH=bh(),DH=FA(),{handleHDBError:qr,hdb_errors:LH}=oe(),{HDB_ERROR_MSGS:er,HTTP_STATUS_CODES:L_}=LH,V=new Map,PH="delete",Oo="insert",Ii="read",Pa="update",P_="describe",RH=M_.describeSchema.name,AH=M_.describeTable.name,MH={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Ise="catchup",wse="handleGetJob",Cse="handleGetJobsByStartDate",Ph={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Dse=[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(kA.insert.name,new Q(!1,[Oo]));V.set(kA.update.name,new Q(!1,[Pa]));V.set(kA.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(M_.describeSchema.name,new Q(!1,[Ii]));V.set(M_.describeTable.name,new Q(!1,[Ii]));V.set($A.deleteRecord.name,new Q(!1,[PH]));V.set(U_.addUser.name,new Q(!0,[]));V.set(U_.alterUser.name,new Q(!0,[]));V.set(U_.dropUser.name,new Q(!0,[]));V.set(U_.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(pse.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(VA.setRoutes.name,new Q(!0,[]));V.set(VA.getRoutes.name,new Q(!0,[]));V.set(VA.deleteRoutes.name,new Q(!0,[]));V.set(IH.setConfiguration.name,new Q(!0,[]));V.set(Ase.clusterStatus.name,new Q(!0,[]));V.set(Ose.name,new Q(!0,[]));V.set(YA.getFingerprint.name,new Q(!0,[]));V.set(YA.setLicense.name,new Q(!0,[]));V.set($A.deleteFilesBefore.name,new Q(!0,[]));V.set($A.deleteAuditLogsBefore.name,new Q(!0,[]));V.set(OH.restart.name,new Q(!0,[]));V.set(OH.restartService.name,new Q(!0,[]));V.set(Ese.name,new Q(!0,[]));V.set(hse.name,new Q(!0,[Ii]));V.set(Nse.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(_n.customFunctionsStatus.name,new Q(!0,[]));V.set(_n.getCustomFunctions.name,new Q(!0,[]));V.set(_n.getComponents.name,new Q(!0,[]));V.set(_n.getComponentFile.name,new Q(!0,[]));V.set(_n.setComponentFile.name,new Q(!0,[]));V.set(_n.dropComponent.name,new Q(!0,[]));V.set(_n.getCustomFunction.name,new Q(!0,[]));V.set(_n.setCustomFunction.name,new Q(!0,[]));V.set(_n.dropCustomFunction.name,new Q(!0,[]));V.set(_n.addComponent.name,new Q(!0,[]));V.set(_n.dropCustomFunctionProject.name,new Q(!0,[]));V.set(_n.packageComponent.name,new Q(!0,[]));V.set(_n.deployComponent.name,new Q(!0,[]));V.set(YA.getRegistrationInfo.name,new Q(!1,[]));V.set(U_.userInfo.name,new Q(!1,[]));V.set(M_.describeAll.name,new Q(!1,[]));V.set(wse,new Q(!1,[]));V.set(Cse,new Q(!0,[]));V.set(Ise,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:Pse,verifyPermsAst:Lse,verifyBulkLoadAttributePerms:Use};function Lse(e,t,r){if(yi.isEmptyOrZeroLength(e))throw Bt.info("verify_perms_ast has an empty user parameter"),qr(new Error);if(yi.isEmptyOrZeroLength(t))throw Bt.info("verify_perms_ast has an empty user parameter"),qr(new Error);if(yi.isEmptyOrZeroLength(r))throw Bt.info("verify_perms_ast has a null operation parameter"),qr(new Error);try{let n=new DH,s=new bse(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."),qr(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&MH[r])throw qr(new Error,er.DROP_SYSTEM,L_.FORBIDDEN);if(c&&!l)return null;let _=bH.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof yse.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=WA(t.role.permission,f,d[E]);KA(h,m,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw qr(n)}}a(Lse,"verifyPermsAst");function Pse(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Bt.info("null required parameter in verifyPerms"),qr(new Error,er.DEFAULT_INVALID_REQUEST,L_.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 qr(new Error,er.DROP_SYSTEM,L_.FORBIDDEN);if(l&&!u||_===!0&&(r===qn.createSchema.name||r===qn.dropSchema.name))return null;if(Dse.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][P_]))return c.handleInvalidItem(er.SCHEMA_NOT_FOUND(s));if(r===AH&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][P_]))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(R=>R[Gn.PERMS_CRUD_ENUM.READ]).forEach(R=>{m.push(R.attribute_name)}):m=global.hdb_schema[s][i].attributes.map(g=>g.attribute),e.get_attributes=m)}let E=Mse(e),h=WA(e.hdb_user.role.permission,s,i);return KA(E,h,r,i,s,c,n),c.getPermsResponse()}a(Pse,"verifyPerms");function vH(e,t,r,n,s){if(yi.arrayHasEmptyValues([e,t,r]))throw Bt.info("hasPermissions has an invalid parameter"),qr(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.`),qr(new Error,er.OP_NOT_FOUND(t),L_.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][P_]===!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[P_]===!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),qr(LH.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(vH,"hasPermissions");function KA(e,t,r,n,s,i,o){if(!e||!t)throw Bt.info("no attributes specified in checkAttributePerms."),qr(new Error);let c=V.get(r).perms;if(!c||c==="")throw Bt.info(`no permissions found for ${r} in checkAttributePerms().`),qr(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[P_]===!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 qr(new Error,er.SYSTEM_TIMESTAMP_PERMS_ERR,L_.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(KA,"checkAttributePerms");function Mse(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(Mse,"getRecordAttributes");function WA(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(WA,"getAttributePermissions");function Use(e,t,r,n,s,i,o){let c=new Set(i),l=WA(e,n,s);KA(c,l,t,s,n,o,r)}a(Use,"verifyBulkLoadAttributePerms")});var vh=T((zOe,FH)=>{"use strict";FH.exports={evaluateSQL:Wse,processAST:xH,convertSQLToAST:qH,checkASTPermissions:GH};var vse=br(),HH=require("util"),Bse=HH.callbackify(vse.insert),Hse=sr().search,Gse=uM().update,qse=HH.callbackify(Gse),xse=dM().convertDelete,bo=require("alasql"),Fse=Mh(),Uh=x(),kse=sE(),$se=K(),v_=D(),{hdb_errors:Vse,handleHDBError:QA}=oe(),{HTTP_STATUS_CODES:jA}=Vse;kse(bo);var Yse=403,Kse="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 Wse(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)&&$se.isEmptyOrZeroLength(n))return t("No schema specified",null)}xH(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Wse,"evaluateSQL");function GH(e,t){let r;try{r=Fse.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 zA;if(!e)throw QA(new Error,"The 'sql' parameter is missing from the request body",jA.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]?QA(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,jA.BAD_REQUEST):QA(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",jA.BAD_REQUEST)}return t}a(qH,"convertSQLToAST");function xH(e,t,r){try{let n=Qse;if(!e.bypass_auth&&!t.permissions_checked){let i=GH(e,t);if(i&&i.length>0)return r(Yse,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case v_.VALID_SQL_OPS_ENUM.SELECT:n=Hse,s=t.ast.statements[0];break;case v_.VALID_SQL_OPS_ENUM.INSERT:n=jse;break;case v_.VALID_SQL_OPS_ENUM.UPDATE:n=qse;break;case v_.VALID_SQL_OPS_ENUM.DELETE:n=xse;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 Qse(e,t){Uh.info(e),t("unknown sql statement")}a(Qse,"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=zse(i,e.values)}catch(o){return r(o)}Bse(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(jse,"convertInsert");function zse(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 [${v_.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Uh.error(r),new Error(Kse)}}a(zse,"createDataObjects")});var JA=T((XOe,$H)=>{"use strict";var{S3:Jse,GetObjectCommand:Xse}=require("@aws-sdk/client-s3");$H.exports={getFileStreamFromS3:Zse,getS3AuthObj:kH};async function Zse(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 Xse(r))).Body}a(Zse,"getFileStreamFromS3");function kH(e,t,r){return new Jse({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(kH,"getS3AuthObj")});var Bh=T((ebe,XH)=>{"use strict";var ZA=sr(),eie=vh(),tie=JA(),{AsyncParser:rie,Transform:nie}=require("json2csv"),H_=require("stream"),dn=K(),XA=require("fs-extra"),sie=require("path"),xn=x(),{promisify:KH}=require("util"),B_=K(),{handleHDBError:yt,hdb_errors:iie}=oe(),{HDB_ERROR_MSGS:xr,HTTP_STATUS_CODES:It}=iie,{streamAsJSON:oie}=(gS(),ie(wI)),{Upload:aie}=require("@aws-sdk/lib-storage"),VH=["search_by_value","search_by_hash","sql","search_by_conditions"],YH=["json","csv"],WH="json",QH="csv",cie="Successfully exported JSON locally.",lie="Successfully exported CSV locally.",uie=1e3,_ie=ZA.searchByHash,die=ZA.searchByValue,fie=KH(eie.evaluateSQL),Eie=KH(H_.finished);XH.exports={export_to_s3:Sie,export_local:hie,toCsvStream:jH};async function hie(e){xn.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=zH(e);if(!dn.isEmpty(t))throw xn.error(t),yt(new Error,t,It.BAD_REQUEST,void 0,void 0,!0);if(dn.isEmpty(e.path))throw xn.error(xr.MISSING_VALUE("path")),yt(new Error,xr.MISSING_VALUE("path"),It.BAD_REQUEST,void 0,void 0,!0);let r=(dn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(sie.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=dn.buildFolderPath(e.path,r);await pie(e.path);let s=await JH(e);return await mie(n,e.format,s)}a(hie,"export_local");async function pie(e){if(xn.trace("in confirmPath"),dn.isEmptyOrZeroLength(e))throw yt(new Error,`Invalid path: ${e}`,It.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await XA.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(pie,"confirmPath");async function mie(e,t,r){if(xn.trace("in saveToLocal"),B_.isEmptyOrZeroLength(e))throw yt(new Error,xr.INVALID_VALUE("file_path"),It.BAD_REQUEST,void 0,void 0,!0);if(B_.isEmptyOrZeroLength(t))throw yt(new Error,xr.INVALID_VALUE("Source format"),It.BAD_REQUEST,void 0,void 0,!0);if(B_.isEmpty(r))throw yt(new Error,xr.NOT_FOUND("Data"),It.BAD_REQUEST,void 0,void 0,!0);if(t===WH){let n=XA.createWriteStream(e);return oie(r).pipe(n),await Eie(n),{message:cie,path:e}}else if(t===QH){let n=XA.createWriteStream(e),s=H_.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(u=>({label:u,value:u})));let c={objectMode:!0};return await new rie(i,c).fromInput(s).toOutput(n).promise(!1),{message:lie,path:e}}throw yt(new Error,xr.INVALID_VALUE("format"),It.BAD_REQUEST)}a(mie,"saveToLocal");async function Sie(e){if(!e.s3||Object.keys(e.s3).length===0)throw yt(new Error,xr.MISSING_VALUE("S3 object"),It.BAD_REQUEST);if(dn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw yt(new Error,xr.MISSING_VALUE("aws_access_key_id"),It.BAD_REQUEST);if(dn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw yt(new Error,xr.MISSING_VALUE("aws_secret_access_key"),It.BAD_REQUEST);if(dn.isEmptyOrZeroLength(e.s3.bucket))throw yt(new Error,xr.MISSING_VALUE("bucket"),It.BAD_REQUEST);if(dn.isEmptyOrZeroLength(e.s3.key))throw yt(new Error,xr.MISSING_VALUE("key"),It.BAD_REQUEST);if(dn.isEmptyOrZeroLength(e.s3.region))throw yt(new Error,xr.MISSING_VALUE("region"),It.BAD_REQUEST);let t=zH(e);if(!dn.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 tie.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new H_.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 H_.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%uie===0&&(l.push(u),u="")}u.length!==0&&l.push(u),l.push("]"),l.push(null)}else throw yt(new Error,xr.INVALID_VALUE("format"),It.BAD_REQUEST);return new aie({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Sie,"export_to_s3");function jH(e,t){let r=H_.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 nie(n,s);return r.pipe(i)}a(jH,"toCsvStream");function zH(e){if(xn.trace("in exportCoreValidation"),dn.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(dn.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(B_.isEmpty(e.search_operation)||B_.isEmptyOrZeroLength(e.search_operation.operation))throw yt(new Error,xr.INVALID_VALUE("Search operation"),It.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=die;break;case"search_by_hash":t=_ie;break;case"search_by_conditions":t=ZA.searchByConditions;break;case"sql":t=fie;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:()=>sO,findBestSerializer:()=>Gh,getDeserializer:()=>Ua,registerContentHandlers:()=>iO,serialize:()=>qh,serializeMessage:()=>Ao});function Tie(e){try{return e?.[0]===123?nO(e):e}catch{return e}}function iO(e){e.register(Rie,{serializers:[{regex:/^application\/json$/,serializer:Jl},{regex:/^application\/cbor$/,serializer:function(t){return new Ma.EncoderStream(q_).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,q_)):(0,Fs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,eO.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 G_(e);let r=t.serialize;if(r)return r(e);let n=Gh(t);return r=t.serialize=n.serializer.serialize,r(e)}function Aie(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=>Aie(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 nO(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function Oie(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 eO,Fs,Ma,wi,Hh,rG,tO,rO,nG,sG,G_,nO,q_,Qt,sO,ZH,iG,gie,Rie,eG,Wc=Oe(()=>{gS();eO=B(Bh()),Fs=require("msgpackr"),Ma=require("cbor-x"),wi=require("zlib"),Hh=require("stream");Rr();rG=require("../index"),tO=B(X()),rO=B(D()),nG=B(require("yaml")),sG=tO.default.get(rO.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,G_=sG?Qo:JSON.stringify,nO=sG?TS:JSON.parse,q_={useRecords:!1,useToJSON:!0},Qt=new Map,sO=Qt;ct.contentTypes=sO;(0,rG._assignPackageExport)("contentTypes",sO);Qt.set("application/json",{serializeStream:Jl,serialize:G_,deserialize:nO,q:.8});ZH=new Ma.Encoder(q_);Qt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Ma.EncoderStream(q_).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,q_)):(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,eO.toCsvStream)(e,e?.getColumns?.())},q:.1});Qt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});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(Oie(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
+ `),e.data){let r=e.data;typeof r=="object"&&(r=G_(r)),t+="data: "+r+`
22
22
  `}return e.id&&(t+="id: "+e.id+`
23
23
  `),e.retry&&(t+="retry: "+e.retry+`
24
24
  `),t+`
25
- `}else return typeof e=="object"?`data: ${j_(e)}
25
+ `}else return typeof e=="object"?`data: ${G_(e)}
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()}});lq={type:"application/json",serializeStream:t_,serialize:j_,deserialize:Foe,q:.8};Qt.set("*/*",lq);Qt.set("",lq);a(Foe,"tryJSONParse");a(MO,"registerContentHandlers");koe=require("fastify-plugin"),$oe=koe(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Sp(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(Sp,"findBestSerializer");sq=CO.default.get(DO.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Tp,"serialize");a(To,"serializeMessage");a(Voe,"streamToBuffer");a(va,"getDeserializer");a(iq,"deserializerUnknownType");a(Yoe,"transformIterable")});function hq(e){let t={openapi:Koe,info:{title:"HarperDB HTTP REST interface",version:(0,Eq.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:v,relationship:U,definition:k}of o){if(U)A==="array"?_[P]={type:"array",items:{$ref:Ao+v.type}}:_[P]={$ref:Ao+A};else{let H=k??v?.definition;if(H){if(!t.components.schemas[H.type]){let j={};H.properties.forEach(z=>{j[z.name]=new HO(UO[z.type],z.type)}),t.components.schemas[H.type]=new fq(j)}A==="array"?_[P]={type:"array",items:{$ref:Ao+H.type}}:_[P]={$ref:Ao+H.type}}else A==="array"?v.type==="Any"||v.type=="ID"?_[P]={type:"array",items:{format:v.type}}:_[P]={type:"array",items:new HO(UO[v.type],v.type)}:A==="Any"||A=="ID"?_[P]={format:A}:_[P]=new HO(UO[A],A)}u.push(new GO(P,"query",_[P]))}let d=Object.keys(_),f=new GO(c,"path",{format:"ID"});f.required=!0,f.description="primary key of record";let E=new GO("property","path",{enum:d});E.required=!0,t.components.schemas[i]=new fq(_);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 Woe(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[T]||(t.paths[T]={}),t.paths[T].get=new vO(u,r,{200:new BO({$ref:Ao+i})},"search for records by the specified property name and value pairs")),R&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new dq(u,r,"delete all the records that match the provided query",{204:new _q})),T="/"+s+"/{"+c+"}",S&&(t.paths[T]={},t.paths[T].get=new vO([f],r,{200:new BO({$ref:Ao+i})},"retrieve a record by its primary key")),m&&(t.paths[T]||(t.paths[T]={}),t.paths[T].put=new Qoe([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 dq([f],r,"delete a record with the given primary key",{204:new _q})),S&&E.schema.enum.length>0&&(T="/"+s+"/{"+c+"}.{property}",t.paths[T]={},t.paths[T].get=new vO([f,E],r,{200:new BO({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function Woe(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Ao+e}}}},this.security=t,this.responses={200:{description:qO,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function vO(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function BO(e){this.description=qO,this.content={"application/json":{schema:e}}}function _q(){this.description="successfully processed request, no content returned to client"}function Qoe(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Ao+r}}}},this.responses={200:{description:qO}}}function dq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function fq(e){this.type="object",this.properties=e}function HO(e,t){this.type=e,this.format=t}function GO(e,t,r){this.name=e,this.in=t,this.schema=r}var Eq,Koe,UO,Ao,qO,pq=Oe(()=>{Eq=B(Vi()),Koe="3.0.3",UO={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Ao="#/components/schemas/",qO="successful operation";a(hq,"generateJsonApi");a(Woe,"Post");a(vO,"Get");a(BO,"Response200");a(_q,"Response204");a(Qoe,"Put");a(dq,"Delete");a(fq,"ResourceSchema");a(HO,"Type");a(GO,"Parameter")});var Rp={};Fe(Rp,{start:()=>Joe});async function zoe(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&gf(e);let s=new io;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==mq){let h=gp.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=va(r["content-type"],!0)(e.body,e.headers)}catch(h){throw new sl.ClientError(h,400)}if(e.authorize=!0,i===mq&&n==="GET"){if(e?.user?.role?.permission?.super_user)return hq(gp);throw new sl.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 sl.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new sl.ServerError(`Method ${n} is not recognized`,501)}}),u=200,d;if(_==null)u=n==="GET"||n==="HEAD"?404:204,xO.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){joe[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),xO.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=Tp(_,e,f),n==="HEAD"&&(f.body=void 0)),f}catch(i){i.statusCode?i.statusCode===500?Ba.warn(i):Ba.info(i):Ba.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=Tp(i.contentType?i:i.toString(),e,o),o}}function Joe(e){xO=e,!Sq&&(Sq=!0,gp=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return zoe(t,r)}),e.server.ws(async(t,r,n)=>{J_++;let s=new zn;Tq||(Tq=!0,Hu(u=>{J_>0&&u.push({metric:"ws-connections",connections:J_,byThread:!0})}));let i;t.on("error",u=>{i=!0,Ba.warn(u)});let o;t.on("message",a(function(d){o||(o=va(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{J_--,Un(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let l=r.url.slice(1),_=gp.getMatch(l);if(Un(!!_,"connection","ws","connect"),!_)t.send(To(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,un(h=>({count:h.count,total:J_}),"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=To(E.value,r);t.send(h),un(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var Ba,sl,tr,joe,xO,mq,Sq,gp,Tq,J_,gq=Oe(()=>{Jc();fi();Ba=B(x()),sl=B(oe());Rf();Yl();Wo();qu();pq();tr=new Uint8Array(8),joe=new Float64Array(tr.buffer,0,1),xO={},mq="openapi";a(zoe,"http");J_=0;a(Joe,"start")});var FO=g((Zbe,Rq)=>{var{recordAction:Ap,recordActionBinary:Xoe}=(fi(),se(Gu)),Zoe=require("fastify-plugin"),eae=200;Rq.exports=Zoe(function(e,t,r){e.addHook("onResponse",async(n,s)=>{s.getResponseTime()}),e.addHook("onSend",async(n,s,i)=>{let o=s.getResponseTime(),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),Ap(o,"duration",_,d,u),Xoe(s.raw.statusCode<400,"success",_,d,u);let f=eae;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Ap(performance.now()-c,"transfer",_,d,u),Ap(f,"bytes-sent",_,d,u)})):(f+=i?.length||0,Ap(f,"bytes-sent",_,d,u));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var WO=g((rNe,Nq)=>{var yp=require("clone"),Ip=rt(),tae=K(),bp=C(),eNe=x(),kO=require("fs"),VO=require("joi"),{string:Np}=VO.types(),{hdb_errors:rae,handleHDBError:Op}=oe(),{HDB_ERROR_MSGS:tNe,HTTP_STATUS_CODES:$O}=rae,{common_validators:il}=ws(),Aq=" is required",nae=["insert","update","upsert"],YO={database:{presence:!1,format:il.schema_format,length:il.schema_length},schema:{presence:!1,format:il.schema_format,length:il.schema_length},table:{presence:!0,format:il.schema_format,length:il.schema_length},action:{inclusion:{within:nae,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},sae={schema:Np.required(),table:Np.required(),action:Np.valid("insert","update","upsert")},{AWS_ACCESS_KEY:iae,AWS_SECRET:oae,AWS_BUCKET:aae,AWS_FILE_KEY:cae,REGION:lae}=bp.S3_BUCKET_AUTH_KEYS,uae={s3:{presence:!0},[`s3.${iae}`]:{presence:!0,type:"String"},[`s3.${oae}`]:{presence:!0,type:"String"},[`s3.${aae}`]:{presence:!0,type:"String"},[`s3.${cae}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${lae}`]:{presence:!0,type:"String"}},Oq=yp(YO);Oq.data.presence={message:Aq};var bq=yp(YO);bq.file_path.presence={message:Aq};var _ae=Object.assign(yp(YO),uae),KO=yp(sae);KO.csv_url=Np.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();KO.passthrough_headers=VO.object();function dae(e){let t=Ip.validateObject(e,Oq);return wp(e,t)}a(dae,"dataObject");function fae(e){let t=Ip.validateBySchema(e,VO.object(KO));return wp(e,t)}a(fae,"urlObject");function Eae(e){let t=Ip.validateObject(e,bq);return wp(e,t)}a(Eae,"fileObject");function hae(e){let t=Ip.validateObject(e,_ae);return wp(e,t)}a(hae,"s3FileObject");function wp(e,t){if(!t){let r=tae.checkGlobalSchemaTable(e.schema,e.table);if(r)return Op(new Error,r,$O.BAD_REQUEST);if(e.operation===bp.OPERATIONS_ENUM.CSV_FILE_LOAD)try{kO.accessSync(e.file_path,kO.constants.R_OK|kO.constants.F_OK)}catch(n){return n.code===bp.NODE_ERROR_CODES.ENOENT?Op(n,`No such file or directory ${n.path}`,$O.BAD_REQUEST):n.code===bp.NODE_ERROR_CODES.EACCES?Op(n,`Permission denied ${n.path}`,$O.BAD_REQUEST):Op(n)}}return t}a(wp,"postValidateChecks");Nq.exports={dataObject:dae,urlObject:fae,fileObject:Eae,s3FileObject:hae}});var QO=g((sNe,yq)=>{"use strict";var X_=x(),Cp=C();async function pae(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===Cp.OPERATIONS_ENUM.INSERT||t.operation===Cp.OPERATIONS_ENUM.UPDATE||t.operation===Cp.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===Cp.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(X_.info(i.message),i):i.http_resp_msg?(X_.error(`Error calling operation: ${e.name}`),X_.error(i.http_resp_msg),i):(X_.error(`Error calling operation: ${e.name}`),X_.error(i),i)}}a(pae,"callOperationFunctionAsAwait");yq.exports={callOperationFunctionAsAwait:pae}});var wq=g((oNe,Iq)=>{"use strict";var jO=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}},zO=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};Iq.exports={BulkLoadFileObject:jO,BulkLoadDataObject:zO}});var Dq=g((cNe,Cq)=>{"use strict";var JO=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};Cq.exports=JO});var nb=g((ENe,Wq)=>{"use strict";var Dp=Dr(),Pp=WO(),mae=require("needle"),Es=C(),uNe=et(),ol=K(),{handleHDBError:dt,hdb_errors:qq}=oe(),{HTTP_STATUS_CODES:rr,HDB_ERROR_MSGS:xt,CHECK_LOGS_WRAPPER:Ga}=qq,al=x(),XO=require("papaparse");ol.promisifyPapaParse();var hs=require("fs-extra"),Sae=require("path"),{chain:Lq}=require("stream-chain"),Pq=require("stream-json/streamers/StreamArray"),Mq=require("stream-json/utils/Batch"),Uq=require("stream-chain/utils/comp"),{finished:vq}=require("stream"),Tae=X(),xq=QO(),gae=NO(),{BulkLoadFileObject:eb,BulkLoadDataObject:Rae}=wq(),tb=hO(),{verifyBulkLoadAttributePerms:Fq}=fp(),_Ne=Dq(),dNe=mt(),fNe=_i(),{databases:Aae}=(ge(),se(ke)),{coerceType:Oae}=(CE(),se(Jg)),Bq="No records parsed from csv file.",Ha=`${Tae.get("HDB_ROOT")}/tmp`,{schema_regex:bae}=ws(),Hq=1024*1024*2,Gq=5e3,Nae={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};Wq.exports={csvDataLoad:yae,csvURLLoad:Iae,csvFileLoad:wae,importFromS3:Cae};async function yae(e,t){let r=Pp.dataObject(e);if(r)throw dt(r,r.message,rr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=Vq(e.schema,e.table),i=XO.parse(e.data,{header:!0,skipEmptyLines:!0,transform:ZO.bind(null,s),dynamicTyping:!1}),o=new tb;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&Fq(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 dt(new Error,c,rr.BAD_REQUEST,void 0,void 0,!0);let l=new Rae(e.action,e.schema,e.table,i.data);return n=await xq.callOperationFunctionAsAwait(Yq,l,null),n.message===Bq?Bq:Kq(n.records,n.number_written)}catch(s){throw qa(s)}}a(yae,"csvDataLoad");async function Iae(e){let t=Pp.urlObject(e);if(t)throw dt(t,t.message,rr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Ha}/${r}`;try{await Dae(e,r)}catch(s){throw al.error(xt.DOWNLOAD_FILE_ERR(r)+" - "+s),dt(s,Ga(xt.DOWNLOAD_FILE_ERR(r)))}try{let s=new eb(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 rb(s);return await Lp(n),i}catch(s){throw await Lp(n),qa(s)}}a(Iae,"csvURLLoad");async function wae(e){let t=Pp.fileObject(e);if(t)throw dt(t,t.message,rr.BAD_REQUEST,void 0,void 0,!0);let r=new eb(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 rb(r)}catch(n){throw qa(n)}}a(wae,"csvFileLoad");async function Cae(e){let t=Pp.s3FileObject(e);if(t)throw dt(t,t.message,rr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Sae.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Ha}/${s}`;let i=new eb(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await Lae(s,e);let o=await rb(i);return await Lp(r),o}catch(n){throw await Lp(r),qa(n)}}a(Cae,"importFromS3");async function Dae(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await mae("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 dt(n,s,n.statusCode,Es.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Mae(r,e.csv_url),await Pae(t,r.raw)}a(Dae,"downloadCSVFile");async function Lae(e,t){try{let r=`${Ha}/${e}`;await hs.mkdirp(Ha),await hs.writeFile(`${Ha}/${e}`,"",{flag:"a+"});let n=await hs.createWriteStream(r),s=await gae.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(){al.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw al.error(xt.S3_DOWNLOAD_ERR+" - "+r),dt(r,Ga(xt.S3_DOWNLOAD_ERR))}}a(Lae,"downloadFileFromS3");async function Pae(e,t){try{await hs.mkdirp(Ha),await hs.writeFile(`${Ha}/${e}`,t)}catch(r){throw al.error(xt.WRITE_TEMP_FILE_ERR),dt(r,Ga(xt.DEFAULT_BULK_LOAD_ERR))}}a(Pae,"writeFileToTempFolder");async function Lp(e){if(e)try{await hs.access(e),await hs.unlink(e)}catch{al.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Lp,"deleteTempFile");function Mae(e,t){if(e.statusCode!==qq.HTTP_STATUS_CODES.OK)throw dt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,rr.BAD_REQUEST);if(!Nae[e.headers["content-type"]])throw dt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,rr.BAD_REQUEST);if(!e.raw)throw dt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,rr.BAD_REQUEST)}a(Mae,"validateURLResponse");async function rb(e){try{let t;switch(e.file_type){case Es.VALID_S3_FILE_TYPES.CSV:t=await Uae(e);break;case Es.VALID_S3_FILE_TYPES.JSON:t=await vae(e);break;default:throw dt(new Error,xt.DEFAULT_BULK_LOAD_ERR,rr.BAD_REQUEST,Es.LOG_LEVELS.ERROR,xt.INVALID_FILE_EXT_ERR(e))}return Kq(t.records,t.number_written)}catch(t){throw qa(t)}}a(rb,"fileLoad");async function kq(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 Dp.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&Fq(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=dt(c);r(l)}}a(kq,"validateChunk");async function $q(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;ol.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!ol.isEmpty(c)&&!ol.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 xq.callOperationFunctionAsAwait(Yq,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=dt(c,Ga(xt.INSERT_CSV_ERR),rr.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,xt.INSERT_CSV_ERR+" - "+c);r(l)}}a($q,"insertChunk");async function Uae(e){let t={records:0,number_written:0},r=Vq(e.schema,e.table);try{let n=new tb,s=hs.createReadStream(e.file_path,{highWaterMark:Hq});s.setEncoding("utf8"),await XO.parsePromise(s,kq.bind(null,e,n),ZO.bind(null,r));let i=n.getPermsResponse();if(i)throw dt(new Error,i,rr.BAD_REQUEST);return s=hs.createReadStream(e.file_path,{highWaterMark:Hq}),s.setEncoding("utf8"),await XO.parsePromise(s,$q.bind(null,e,t),ZO.bind(null,r)),s.destroy(),t}catch(n){throw dt(n,Ga(xt.PAPA_PARSE_ERR),rr.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,xt.PAPA_PARSE_ERR+n)}}a(Uae,"callPapaParse");function Vq(e,t){let r=Aae[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>Oae(i,s));return n}a(Vq,"createTransformMap");function ZO(e,t,r){let n=e.get(r);return n?n(t):ol.autoCast(t)}a(ZO,"typeFunction");async function vae(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new tb,s=Lq([hs.createReadStream(e.file_path,{encoding:"utf-8"}),Pq.withParser(),c=>c.value,new Mq({batchSize:Gq}),Uq(async c=>{await kq(e,n,r,c)})]);await new Promise((c,l)=>{vq(s,_=>{_?l(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw dt(new Error,i,rr.BAD_REQUEST);let o=Lq([hs.createReadStream(e.file_path,{encoding:"utf-8"}),Pq.withParser(),c=>c.value,new Mq({batchSize:Gq}),Uq(async c=>{await $q(e,t,r,c)})]);return await new Promise((c,l)=>{vq(o,_=>{_?l(_):c()}),o.resume()}),t}catch(n){throw dt(n,Ga(xt.INSERT_JSON_ERR),rr.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,xt.INSERT_JSON_ERR+n)}}a(vae,"insertJson");async function Yq(e){let t={};try{e.data&&e.data.length>0&&Bae(e.data[0])?t=await Hae(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",al.info(t.message))}catch(r){throw qa(r)}return t}a(Yq,"callBulkFileLoad");function Bae(e){let t=Object.keys(e);for(let r of t)if(!bae.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Bae,"validateColumnNames");async function Hae(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=Dp.insert;break;case"update":i=Dp.update;break;case"upsert":i=Dp.upsert;break;default:throw dt(new Error,xt.INVALID_ACTION_PARAM_ERR(n),rr.BAD_REQUEST,Es.LOG_LEVELS.ERROR,xt.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=ol.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw qa(o)}}a(Hae,"bulkFileLoad");function Kq(e,t){return`successfully loaded ${t} of ${e} records`}a(Kq,"buildResponseMsg");function qa(e){return dt(e,Ga(xt.DEFAULT_BULK_LOAD_ERR),rr.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,xt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(qa,"buildTopLevelErrMsg")});var jq=g((pNe,Qq)=>{"use strict";var sb=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};Qq.exports=sb});var Xq=g((SNe,Jq)=>{"use strict";var Gae=C(),zq=require("moment"),qae=require("uuid").v4,ib=class{static{a(this,"JobObject")}constructor(){this.id=qae(),this.type=void 0,this.start_datetime=zq().valueOf(),this.created_datetime=zq().valueOf(),this.end_datetime=void 0,this.status=Gae.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};Jq.exports=ib});var ob=g((gNe,sx)=>{"use strict";var xae=require("uuid").v4,tx=Dr(),rx=or(),Fae=rs(),kae=Tc(),$ae=jq(),ft=C(),Vae=Xq(),Yae=uh(),$n=x(),Kae=uu(),cl=K(),{promisify:Wae}=require("util"),xa=require("moment"),Qae=hp(),Mp=WO(),Zq=fg(),{deleteTransactionLogsBeforeValidator:jae}=uO(),{handleHDBError:zae,hdb_errors:Jae}=oe(),{HTTP_STATUS_CODES:Xae}=Jae,ex=rx.searchByValue,Zae=rx.searchByHash,ece=tx.insert,tce=Wae(Qae.evaluateSQL),rce=tx.update;sx.exports={addJob:ice,updateJob:ace,handleGetJob:nce,handleGetJobsByStartDate:sce,getJobById:nx};async function nce(e){try{let t=await nx(e.id);return cl.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 $n.error("There was an error getting job",t),new Error(r)}}a(nce,"handleGetJob");async function sce(e){try{let t=await oce(e);if($n.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=xa(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=xa(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 $n.error(r),new Error(r)}}a(sce,"handleGetJobsByStartDate");async function ice(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||cl.isEmptyOrZeroLength(e.operation)){let u="job parameter is invalid";return $n.info(u),t.error=u,t}if(!ft.JOB_TYPE_ENUM[e.operation])return $n.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case ft.OPERATIONS_ENUM.CSV_FILE_LOAD:n=Mp.fileObject(e);break;case ft.OPERATIONS_ENUM.CSV_URL_LOAD:n=Mp.urlObject(e);break;case ft.OPERATIONS_ENUM.CSV_DATA_LOAD:n=Mp.dataObject(e);break;case ft.OPERATIONS_ENUM.IMPORT_FROM_S3:n=Mp.s3FileObject(e);break;case ft.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case ft.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=Zq(e,"date");break;case ft.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=Zq(e,"timestamp");break;case ft.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=jae(e);break;default:break}if(n)throw zae(n,n.message,Xae.BAD_REQUEST,void 0,void 0,!0);let s=new Vae;s.type=e.operation===ft.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?ft.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new Fae(ft.SYSTEM_SCHEMA_NAME,ft.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await ex(i))}catch(u){let d=`There was an error inserting a new job: ${u}`;return $n.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=xae();try{o=await ex(i)}catch(u){let d=`There was an error inserting a new job: ${u}`;return $n.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return $n.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new Kae(ft.SYSTEM_SCHEMA_NAME,ft.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await ece(l)}catch(u){return $n.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,$n.trace(u)}return t}a(ice,"addJob");async function oce(e){let t=xa(e.from_date,xa.ISO_8601),r=xa(e.to_date,xa.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 $ae(n,e.hdb_user);try{return await tce(s)}catch(i){throw $n.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(oce,"getJobsInDateRange");async function nx(e){if(cl.isEmptyOrZeroLength(e))return cl.errorizeMessage("Invalid job ID specified.");let t=new kae(ft.SYSTEM_SCHEMA_NAME,ft.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Zae(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return $n.error(n),cl.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(nx,"getJobById");async function ace(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(cl.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===ft.JOB_STATUS_ENUM.COMPLETE||e.status===ft.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=xa().valueOf());let t=new Yae(ft.SYSTEM_SCHEMA_NAME,ft.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await rce(t),r}a(ace,"updateJob")});var ux=g((ANe,lx)=>{"use strict";var ix=K(),Yr=C(),cce=require("moment"),Up=nb(),vp=x(),ox=ob(),ax=pp(),cx=ia(),lce=tt(),uce=lp(),ab=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function _ce(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(ix.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(ix.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Yr.JOB_TYPE_ENUM.csv_file_load:await yi(e,Up.csvFileLoad);break;case Yr.JOB_TYPE_ENUM.csv_url_load:await yi(e,Up.csvURLLoad);break;case Yr.JOB_TYPE_ENUM.csv_data_load:await yi(e,Up.csvDataLoad);break;case Yr.JOB_TYPE_ENUM.import_from_s3:await yi(e,Up.importFromS3);break;case Yr.JOB_TYPE_ENUM.empty_trash:break;case Yr.JOB_TYPE_ENUM.export_local:await yi(e,ax.export_local);break;case Yr.JOB_TYPE_ENUM.export_to_s3:await yi(e,ax.export_to_s3);break;case Yr.JOB_TYPE_ENUM.delete_files_before:case Yr.JOB_TYPE_ENUM.delete_records_before:await yi(e,cx.deleteFilesBefore);break;case Yr.JOB_TYPE_ENUM.delete_audit_logs_before:await yi(e,cx.deleteAuditLogsBefore);break;case Yr.JOB_TYPE_ENUM.delete_transaction_logs_before:await yi(e,uce.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(_ce,"parseMessage");async function yi(e,t){try{e.job.status=Yr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=cce().valueOf(),await ox.updateJob(e.job),await dce(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):vp.error(`There was an error running ${t.name} job with id ${e.job.id}`),vp.error(n),e.job.message=n,e.job.status=Yr.JOB_STATUS_ENUM.ERROR;try{await ox.updateJob(e.job)}catch(s){throw vp.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(yi,"runJob");async function dce(e){vp.trace("launching job thread:",e),lce.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Yr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(dce,"launchJobThread");lx.exports={parseMessage:_ce,RunnerMessage:ab}});var dx=g((bNe,_x)=>{"use strict";var cb=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};_x.exports=cb});var Cx=g((yNe,Eb)=>{"use strict";var xp=or(),_b=hp(),Bp=nb(),Ii=nh(),Hp=di(),ed=ia(),fce=qR(),Z_=Pr(),Gp=ah(),nr=ip(),qp=x(),Ece=zR(),hce=S_(),fx=wA(),pce=Ah(),mce=bh(),Sce=DA(),Tce=yh(),gce=wh(),lb=Dh(),Ex=pp(),Rce=fp(),db=ob(),F=C(),{hdb_errors:rd,handleHDBError:td}=oe(),{HTTP_STATUS_CODES:hx}=rd,ub=Ph(),px=Ca(),Nx=require("util"),ll=Dr(),Ace=Mn(),Oce=hi(),mx=ux(),Sx=E_(),Tx=(Jh(),se(B_)),gx=lt(),Rx=lp(),Ax=rp(),{setServerUtilities:bce}=(CE(),se(Jg)),{CONTEXT:Nce}=(Jn(),se(BS)),{_assignPackageExport:yce}=require("../index"),{transformReq:Ice}=K(),{server:wce}=(Rr(),se(ko)),fr=qp.loggerWithTag("operation"),Cce=QO(),Ox=xp.searchByHash,Dce=xp.searchByValue,Lce=Nx.promisify(xp.search),Pce=Nx.promisify(_b.evaluateSQL),Mce={[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=dx();async function yx(e,t){try{if(e.body.operation!=="read_log"&&(qp.log_level===F.LOG_LEVELS.INFO||qp.log_level===F.LOG_LEVELS.DEBUG||qp.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 Cce.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Mce[e.body.operation]&&Ace.setSchemaDataToGlobal(n=>{n&&fr.error(n)}),r}a(yx,"processLocalTransaction");var bx=vce();Eb.exports={chooseOperation:Ix,getOperationFunction:wx,operation:fb,processLocalTransaction:yx};bce(Eb.exports);wce.operation=fb;function Ix(e){let t;try{t=wx(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=_b.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=_b.checkASTPermissions(e,i);if(o)throw fr.error(`${hx.FORBIDDEN} from operation ${e.operation}`),fr.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),td(new Error,o,rd.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=Rce.verifyPerms(i,s);if(o)throw fr.error(`${hx.FORBIDDEN} from operation ${e.operation}`),fr.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),td(new Error,o,rd.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw td(s,"There was an error when trying to choose an operation path")}return r}a(Ix,"chooseOperation");function wx(e){if(fr.trace(`getOperationFunction with operation: ${e.operation}`),bx.has(e.operation))return bx.get(e.operation);throw td(new Error,rd.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),rd.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(wx,"getOperationFunction");yce("operation",fb);function fb(e,t){e.hdb_user=this[Nce]?.user,e.bypass_auth=!t;let r=Ix(e);return yx({body:e},r)}a(fb,"operation");async function Uce(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 ll.insert(i);break;case F.OPERATIONS_ENUM.UPDATE:o=await ll.update(i);break;case F.OPERATIONS_ENUM.UPSERT:o=await ll.upsert(i);break;case F.OPERATIONS_ENUM.DELETE:o=await ed.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(Uce,"catchup");async function ks(e){Ice(e);let t,r;try{r=await db.addJob(e),t=r.createdJob,fr.info("addJob result",r);let n=new mx.RunnerMessage(t,e);return await mx.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),td(n,s)}}a(ks,"executeJob");function vce(){let e=new Map;return e.set(F.OPERATIONS_ENUM.INSERT,new Y(ll.insert)),e.set(F.OPERATIONS_ENUM.UPDATE,new Y(ll.update)),e.set(F.OPERATIONS_ENUM.UPSERT,new Y(ll.upsert)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new Y(xp.searchByConditions)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_HASH,new Y(Ox)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_ID,new Y(Ox)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_VALUE,new Y(Dce)),e.set(F.OPERATIONS_ENUM.SEARCH,new Y(Lce)),e.set(F.OPERATIONS_ENUM.SQL,new Y(Pce)),e.set(F.OPERATIONS_ENUM.CSV_DATA_LOAD,new Y(ks,Bp.csvDataLoad)),e.set(F.OPERATIONS_ENUM.CSV_FILE_LOAD,new Y(ks,Bp.csvFileLoad)),e.set(F.OPERATIONS_ENUM.CSV_URL_LOAD,new Y(ks,Bp.csvURLLoad)),e.set(F.OPERATIONS_ENUM.IMPORT_FROM_S3,new Y(ks,Bp.importFromS3)),e.set(F.OPERATIONS_ENUM.CREATE_SCHEMA,new Y(Ii.createSchema)),e.set(F.OPERATIONS_ENUM.CREATE_DATABASE,new Y(Ii.createSchema)),e.set(F.OPERATIONS_ENUM.CREATE_TABLE,new Y(Ii.createTable)),e.set(F.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new Y(Ii.createAttribute)),e.set(F.OPERATIONS_ENUM.DROP_SCHEMA,new Y(Ii.dropSchema)),e.set(F.OPERATIONS_ENUM.DROP_DATABASE,new Y(Ii.dropSchema)),e.set(F.OPERATIONS_ENUM.DROP_TABLE,new Y(Ii.dropTable)),e.set(F.OPERATIONS_ENUM.DROP_ATTRIBUTE,new Y(Ii.dropAttribute)),e.set(F.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new Y(Hp.describeSchema)),e.set(F.OPERATIONS_ENUM.DESCRIBE_DATABASE,new Y(Hp.describeSchema)),e.set(F.OPERATIONS_ENUM.DESCRIBE_TABLE,new Y(Hp.describeTable)),e.set(F.OPERATIONS_ENUM.DESCRIBE_ALL,new Y(Hp.describeAll)),e.set(F.OPERATIONS_ENUM.DELETE,new Y(ed.deleteRecord)),e.set(F.OPERATIONS_ENUM.ADD_USER,new Y(Z_.addUser)),e.set(F.OPERATIONS_ENUM.ALTER_USER,new Y(Z_.alterUser)),e.set(F.OPERATIONS_ENUM.DROP_USER,new Y(Z_.dropUser)),e.set(F.OPERATIONS_ENUM.LIST_USERS,new Y(Z_.listUsersExternal)),e.set(F.OPERATIONS_ENUM.LIST_ROLES,new Y(Gp.listRoles)),e.set(F.OPERATIONS_ENUM.ADD_ROLE,new Y(Gp.addRole)),e.set(F.OPERATIONS_ENUM.ALTER_ROLE,new Y(Gp.alterRole)),e.set(F.OPERATIONS_ENUM.DROP_ROLE,new Y(Gp.dropRole)),e.set(F.OPERATIONS_ENUM.USER_INFO,new Y(Z_.userInfo)),e.set(F.OPERATIONS_ENUM.READ_LOG,new Y(Ece)),e.set(F.OPERATIONS_ENUM.ADD_NODE,new Y(hce)),e.set(F.OPERATIONS_ENUM.UPDATE_NODE,new Y(fx)),e.set(F.OPERATIONS_ENUM.SET_NODE_REPLICATION,new Y(fx)),e.set(F.OPERATIONS_ENUM.REMOVE_NODE,new Y(pce)),e.set(F.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new Y(mce)),e.set(F.OPERATIONS_ENUM.PURGE_STREAM,new Y(Sce)),e.set(F.OPERATIONS_ENUM.SET_CONFIGURATION,new Y(gx.setConfiguration)),e.set(F.OPERATIONS_ENUM.CLUSTER_STATUS,new Y(Tce.clusterStatus)),e.set(F.OPERATIONS_ENUM.CLUSTER_NETWORK,new Y(gce)),e.set(F.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new Y(lb.setRoutes)),e.set(F.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new Y(lb.getRoutes)),e.set(F.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new Y(lb.deleteRoutes)),e.set(F.OPERATIONS_ENUM.EXPORT_TO_S3,new Y(ks,Ex.export_to_s3)),e.set(F.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new Y(ks,ed.deleteFilesBefore)),e.set(F.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new Y(ks,ed.deleteFilesBefore)),e.set(F.OPERATIONS_ENUM.EXPORT_LOCAL,new Y(ks,Ex.export_local)),e.set(F.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new Y(db.handleGetJobsByStartDate)),e.set(F.OPERATIONS_ENUM.GET_JOB,new Y(db.handleGetJob)),e.set(F.OPERATIONS_ENUM.GET_FINGERPRINT,new Y(ub.getFingerprint)),e.set(F.OPERATIONS_ENUM.SET_LICENSE,new Y(ub.setLicense)),e.set(F.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new Y(ub.getRegistrationInfo)),e.set(F.OPERATIONS_ENUM.RESTART,new Y(px.restart)),e.set(F.OPERATIONS_ENUM.RESTART_SERVICE,new Y(px.restartService)),e.set(F.OPERATIONS_ENUM.CATCHUP,new Y(Uce)),e.set(F.OPERATIONS_ENUM.SYSTEM_INFORMATION,new Y(Oce.systemInformation)),e.set(F.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new Y(ks,ed.deleteAuditLogsBefore)),e.set(F.OPERATIONS_ENUM.READ_AUDIT_LOG,new Y(fce)),e.set(F.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new Y(Sx.createTokens)),e.set(F.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new Y(Sx.refreshOperationToken)),e.set(F.OPERATIONS_ENUM.LOGIN,new Y(Tx.login)),e.set(F.OPERATIONS_ENUM.LOGOUT,new Y(Tx.logout)),e.set(F.OPERATIONS_ENUM.GET_CONFIGURATION,new Y(gx.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(Rx.readTransactionLog)),e.set(F.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new Y(ks,Rx.deleteTransactionLogsBefore)),e.set(F.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new Y(Ax.installModules)),e.set(F.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new Y(Ax.auditModules)),e.set(F.OPERATIONS_ENUM.GET_BACKUP,new Y(Ii.getBackup)),e}a(vce,"initializeOperationFunctionMap")});var kp=g((wNe,Px)=>{"use strict";var hb=C(),Bce=K(),nd=x(),{handleHDBError:pb,hdb_errors:Fp}=oe(),{isMainThread:Hce}=require("worker_threads"),{Readable:Gce}=require("stream"),Dx=require("os"),qce=require("util"),xce=oA(),Fce=qce.promisify(xce.authorize),Lx=Cx(),{createGzip:kce,constants:$ce}=require("zlib");function Vce(e){let t=`Found an uncaught exception with message: ${e.message}. ${Dx.EOL}Stack: ${e.stack} ${Dx.EOL}Terminating ${Hce?"HDB":"thread"}.`;console.error(t),nd.fatal(t),process.exit(1)}a(Vce,"handleServerUncaughtException");function Yce(e,t,r){if(nd[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(Yce,"serverErrorHandler");function Kce(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=pb(new Error,"Invalid JSON.",Fp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(Bce.isEmpty(e.body.operation)){let n=pb(new Error,"Request body must include an 'operation' property.",Fp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(Kce,"reqBodyValidationHandler");function Wce(e,t,r){let n;e.body.operation!==hb.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==hb.OPERATIONS_ENUM.LOGIN&&e.body.operation!==hb.OPERATIONS_ENUM.LOGOUT?Fce(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{nd.warn(s),nd.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(pb(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(Wce,"authHandler");async function Qce(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=Lx.chooseOperation(e.body);let s=await Lx.processLocalTransaction(e,n);if(s instanceof Gce&&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(kce({level:$ce.Z_BEST_SPEED})))}return s}catch(s){throw nd.error(s),s}}a(Qce,"handlePostRequest");Px.exports={authHandler:Wce,handlePostRequest:Qce,handleServerUncaughtException:Vce,serverErrorHandler:Yce,reqBodyValidationHandler:Kce}});var Bx=g((DNe,vx)=>{"use strict";var jce=require("fastify-plugin"),{handlePostRequest:Mx,authHandler:zce,reqBodyValidationHandler:Jce}=kp();async function Xce(e){e.decorate("hdbCore",{preValidation:[Jce,zce],request:t=>Ux(Mx(t,response)),requestWithoutAuthentication:(t,r)=>Ux(Mx(t,r,!0))})}a(Xce,"hdbCore");async function Ux(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(Ux,"convertAsyncIterators");vx.exports=jce(Xce)});var qx=g((MNe,Gx)=>{"use strict";var PNe=require("fs"),mb=X();mb.initSync();var{CONFIG_PARAMS:Hx}=C(),Zce=1024*1024*1024;function ele(e){let t=mb.get(Hx.HTTP_TIMEOUT),r=mb.get(Hx.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Zce,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(ele,"getServerOptions");Gx.exports=ele});var kx=g((vNe,Fx)=>{"use strict";var Sb=X();Sb.initSync();var{CONFIG_PARAMS:xx}=C();function tle(){let e=Sb.get(xx.HTTP_CORSACCESSLIST),t=Sb.get(xx.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(tle,"getCORSOptions");Fx.exports=tle});var Yx=g((HNe,Vx)=>{"use strict";var $x=X();$x.initSync();var rle=C();function nle(){return $x.get(rle.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(nle,"getHeaderTimeoutConfig");Vx.exports=nle});var gb={};Fe(gb,{customFunctionsServer:()=>ole,ready:()=>oF,start:()=>ile});function ile(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){wi||(wi=iF(t),at.http((await wi).server));let o=await wi,c=(0,Tb.dirname)(s),l=(0,Tb.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!Kx.has(c)){Kx.add(c);try{o.register(cle(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:oF}}async function ole(){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 ale();let e=Xx.get(Zx.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=wi=await iF(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 ale(){try{Ke.info("Custom Functions starting configuration."),await eF.setUsersToGlobal(),Ke.info("Custom Functions completed configuration.")}catch(e){Ke.error(e)}}function cle(e,t){return async function(r){try{Ke.info("Custom Functions starting buildRoutes"),Ke.trace("Loading fastify routes folder "+e),(0,Wx.existsSync)(e)&&r.register(Jx.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 iF(e){Ke.info("Custom Functions starting buildServer.");let t=(0,tF.default)(e),r=(0,Qx.default)(t);r.server.headersTimeout=(0,nF.default)(),r.setErrorHandler(sF.serverErrorHandler);let n=(0,rF.default)();return n&&r.register(jx.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(zx.default),await r.register(sle),await r.after(),MO(r),Ke.info("Custom Functions completed buildServer."),r}function oF(){if(wi)return wi.then?wi.then(e=>e.ready()):wi.ready()}var Tb,Wx,Qx,jx,zx,Jx,Xx,Zx,Ke,sle,eF,tF,rF,nF,sF,wi,Kx,aF=Oe(()=>{Tb=require("path"),Wx=require("fs"),Qx=B(require("fastify")),jx=B(require("@fastify/cors")),zx=B(FO()),Jx=B(require("@fastify/autoload")),Xx=B(X()),Zx=B(C()),Ke=B(x()),sle=B(Bx()),eF=B(Pr()),tF=B(qx()),rF=B(kx()),nF=B(Yx()),sF=B(kp());Jc();Rr();Kx=new Set;a(ile,"start");a(ole,"customFunctionsServer");a(ale,"setUp");a(cle,"buildRouteFolder");a(iF,"buildServer");a(oF,"ready")});var Rb={};Fe(Rb,{start:()=>lle});function lle(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,dF.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){lF||(lF=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=cF.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,uF.default)(s,(0,_F.realpathSync)(o))}}return i(s)},{runFirst:!0})),cF.set(r,n)}}}var uF,_F,dF,cF,lF,fF=Oe(()=>{uF=B(require("send")),_F=require("fs"),dF=B(require("serve-static")),cF=new Map;a(lle,"start")});var Nb={};Fe(Nb,{Request:()=>Ab,createReuseportFd:()=>$p});var EF,Ab,Ob,bb,$p,Vp=Oe(()=>{EF=require("os"),Ab=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 bb(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 Ob(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},Ob=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)}},bb=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,EF.platform)()!="win32"&&($p=require("node-unix-socket").createReuseportFd)});var SF=g((jNe,mF)=>{"use strict";var ule=require("cluster"),Fa=X();Fa.initSync();var pF=C(),VNe=require("util"),Ci=x(),YNe=require("fs"),_le=require("fastify"),KNe=Fo(),dle=require("@fastify/cors"),fle=require("@fastify/compress"),Ele=require("@fastify/static"),hle=FO(),ple=require("path"),{PACKAGE_ROOT:mle}=C(),Sle=Mn(),Tle=K(),gle=Pr(),Rle=la(),{server:Ale}=(Rr(),se(ko)),{node_request_key:WNe}=(Vp(),se(Nb)),{authHandler:Ole,handlePostRequest:ble,serverErrorHandler:Nle,reqBodyValidationHandler:yle}=kp(),QNe=require("net"),{registerContentHandlers:Ile}=(Jc(),se(uq)),wle=6e4,Cle=1024*1024*1024,Dle="TRUE",{CONFIG_PARAMS:sd}=pF,ul;mF.exports={hdbServer:hF,start:hF};async function hF(e){try{Ci.info("In Fastify server"+process.cwd()),Ci.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ci.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=ule.isMaster,await Lle();let t=e.securePort>0;ul=Ple(t),await ul.ready(),e||(e={}),e.isOperationsServer=!0;try{Ale.http(ul.server,e),ul.server.closeIdleConnections||await ul.listen({port:0,host:"::"})}catch(r){throw ul.close(),Ci.error(r),Ci.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Ci.fatal(t),process.exit(1)}}a(hF,"operationsServer");async function Lle(){Ci.trace("Configuring HarperDB process."),Sle.setSchemaDataToGlobal(),await gle.setUsersToGlobal(),await Rle.getLicense()}a(Lle,"setUp");function Ple(e){Ci.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Mle(e),r=_le(t);r.server.headersTimeout=vle(),r.setErrorHandler(Nle);let n=Ule();n&&r.register(dle,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,_){r.server.emit("unhandled",l.raw,_.raw)}),c()}),r.register(hle),r.register(fle),r.register(Ele,{root:ple.join(mle,"studio/build-local")}),Ile(r);let s=Fa.get(pF.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Tle.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[yle,Ole],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),ble(i,o)}),r.get("/health",()=>"HarperDB is running."),Ci.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Ple,"buildServer");function Mle(e){let t=Fa.get(sd.OPERATIONSAPI_NETWORK_TIMEOUT),r=Fa.get(sd.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Cle,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Mle,"getServerOptions");function Ule(){let e=Fa.get(sd.OPERATIONSAPI_NETWORK_CORS),t=Fa.get(sd.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Dle)&&(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(Ule,"getCORSOpts");function vle(){return Fa.get(sd.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??wle}a(vle,"getHeaderTimeoutConfig")});var Lb={};Fe(Lb,{disableNATS:()=>Hle,publishToStream:()=>Wp,setNATSReplicator:()=>yb,setPublishToStream:()=>Gle,setSubscription:()=>Db,start:()=>Ble});function Ble(){id.default.get(od.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&xle()}function Hle(e=!0){OF=e}function Gle(e,t){Wp=e,Db=t}function xle(){if(OF||process.env._DISABLE_NATS)return;let e=wr(),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];yb(s,r,i)}}rR((r,n)=>{yb(r.tableName,r.databaseName,r),n&&NF(r)}),!TF&&(TF=!0)}function yb(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){NF(i)}static subscribe(){let i=new zn;return Db(t,e,i),i}static subscribeOnThisThread(i){return i<(id.default.get(od.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??qle)}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 Yp(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=bF;return i}a(n,"getNATSTransaction")}function NF(e){let t=id.default.get(od.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Wp(`${wb.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,Cb.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 gF,wb,Cb,RF,AF,id,od,Kp,OF,Wp,Db,qle,bF,TF,Yp,Ib,yF=Oe(()=>{ge();Jn();gF=B(mt()),wb=B(et()),Cb=B(_i());Yl();RF=B(IR()),AF=B(Or()),id=B(X()),od=B(C()),Kp=B(x());a(Ble,"start");a(Hle,"disableNATS");Wp=gF.publishToStream,Db=RF.setSubscription;a(Gle,"setPublishToStream");qle=2;a(xle,"assignReplicationSource");a(yb,"setNATSReplicator");a(NF,"publishSchema");Yp=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=id.default.get(od.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||(Kp.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(Wp(`${wb.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,Cb.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(u=>{throw Kp.error("An error has occurred trying to replicate transaction",l,u),u.statusCode=504,u}))}return Promise.all(n)}},Ib=class extends Yp{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,AF.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};bF=new Ib});var Gb=g(ka=>{"use strict";var{isMainThread:PF,parentPort:cd,threadId:Qp}=require("worker_threads"),{Socket:Fle,createServer:kle}=require("net"),{createServer:$le,IncomingMessage:Vle}=require("http"),{createServer:Yle}=require("https"),{readFileSync:_l,unlinkSync:IF,existsSync:Kle}=require("fs"),Er=x(),De=X(),gt=C(),{server:Xp}=(Rr(),se(ko)),{WebSocketServer:Wle}=require("ws"),{createServer:Qle}=require("tls"),{getTicketKeys:jle,restartNumber:zle,getWorkerIndex:zp}=tt(),{Headers:MF,appendHeader:Jle}=(qu(),se(qM)),{recordAction:ad,recordActionBinary:Xle}=(fi(),se(Gu)),{Request:UF,createReuseportFd:wF}=(Vp(),se(Nb)),{checkMemoryLimit:Zle}=la(),vF=require("tls"),CF=vF.createSecureContext;vF.createSecureContext=function(e){if(!e.cert||!e.key)return CF(e);let t={...e};delete t.key,delete t.cert;let r=CF(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var BF=De.get(gt.CONFIG_PARAMS.THREADS_DEBUG);if(BF){let e;if(PF)e=De.get(gt.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=De.get(gt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&zp()>=0&&(e=t+zp())}if(e){let t=De.get(gt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=De.get(gt.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){zle<=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:rye,CONFIG_PARAMS:eue}=gt;De.initSync();var tue=De.get(eue.HTTP_SESSIONAFFINITY),$s={};ka.registerServer=Bb;ka.httpServer=Hb;ka.deliverSocket=vb;ka.startServers=HF;ka.when_components_loaded=null;Xp.http=Hb;Xp.request=iue;Xp.socket=oue;Xp.ws=aue;var Pb={},jp={},rue,Oo={},Jp={},nue=[],Mb=[];function HF(){return ka.when_components_loaded=Zp().loadRootComponents(!0).then(()=>{cd?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)vb(n,r,s);else if(t.requestId)sue(t);else if(t.type===gt.ITC_EVENT_TYPES.SHUTDOWN){Er.trace("received shutdown request",Qp);for(let i in $s){let o=$s[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()}});iG={type:"application/json",serializeStream:Jl,serialize:G_,deserialize:Tie,q:.8};Qt.set("*/*",iG);Qt.set("",iG);a(Tie,"tryJSONParse");a(iO,"registerContentHandlers");gie=require("fastify-plugin"),Rie=gie(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=tO.default.get(rO.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(qh,"serialize");a(Ao,"serializeMessage");a(Aie,"streamToBuffer");a(Ua,"getDeserializer");a(tG,"deserializerUnknownType");a(Oie,"transformIterable")});function cO(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?cO(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 R=h.operator==="or",A=u(h.conditions,!R,E);return R?(P,U)=>A.some(v=>v(P,U)):(P,U)=>A.every(v=>v(P,U))}let S=(h.attribute||h[0])===r.primaryKey,g=uO(h,r,i,c,S,E);return f&&m<d.length-1&&E&&(E=Pie(r.primaryStore,h.estimated_count,E)),g}).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 R=o[0],A=Di(n.attributes,R);if(A.relationship){if(o.length<2)throw new fn.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=wie(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=Cie(v,A,P.primaryStore,U,k)):v=v.flatMap(k)}return v}else if(o.length===1)o=o[0];else throw new fn.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,u,d,f;c instanceof Date&&(c=c.getTime());let E;switch(lO[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 fn.ClientError(`Unknown query comparator "${l}"`)}if(r){let R=_;_=u,u=R,R=!f,f=!d,d=R}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 fn.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&E)throw new fn.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 fn.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!m.indexNulls)throw new fn.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=uO(e),!S)throw new fn.ClientError(`Unknown search operator ${e.comparator}`)}let g={start:_,end:u,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let R=m.getRange(g).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 R.hasEntries=!0,R}else return m?m.getRange(g).map(S?function({key:R,value:A}){return this.isSync?S({[o]:R})?A:No.SKIP:new Promise((P,U)=>setImmediate(()=>{try{P(S({[o]:R})?A:No.SKIP)}catch(v){U(v)}}))}:({value:R})=>R):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:R,value:A}){return this.isSync?A&&S(A)?R:No.SKIP:new Promise((P,U)=>setImmediate(()=>{try{P(A&&S(A)?R: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 wie(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 Cie(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 uO(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=uO({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,g=a((R,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(R);return S.idFilter&&(g.idFilter=S.idFilter),v}U=m(R,r,A),P=U?.value}else P=R[u];return P?Array.isArray(P)?P.some(h):h(P,U):!1},"recordFilter");return g}}switch(l instanceof Date&&(l=l.getTime()),lO[o]||o){case oO.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 fn.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 g(R){let A=R[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&&!g.idFilter&&++m/S*(i-S)>h)){let U=rl(e,r.transaction.getReadTxn(),!1,t).map(ds),v=new Set(U);g.idFilter=k=>v.has(ds(k)),g.idFilter.idSet=v}return P}return a(g,"recordFilter"),s&&(g.idFilter=d),g}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=lO[n]||n,n===oO.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=yie*Ci(e.primaryStore)+1:n==="between"?r.estimated_count=Nie*Ci(e.primaryStore)+1:n==="sort"?r.estimated_count=Ci(e.primaryStore)+1:r.estimated_count=bie*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,Die.test(e))try{let t=x_(new tl,"");if(Fr!==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 ${Fr} in '${yo}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function x_(e,t){let r=el,n,s,i,o,c,l=decodeURIComponent,_;for(;n=r.exec(yo);){Fr=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=F_(u)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=Iie[d],l=aO[i]?aG:decodeURIComponent,!u)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=F_(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(F_(u)),s=void 0;break;case"(":el.lastIndex=Fr;let E=x_(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[Fr]===","?r.lastIndex=++Fr: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=Fr,f=x_([],"}"),f.name=u,e.push(f),yo[Fr]===","?r.lastIndex=++Fr:o=!0;break;case"[":el.lastIndex=Fr,u?(f=x_(new tl,"]"),f.name=u):f=x_(e.conditions?new tl:[],"]"),e.conditions?(xh(e,_),e.conditions.push(f),s=null):e.push(f),yo[Fr]===","?r.lastIndex=++Fr: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(F_(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?Lie:el,r.lastIndex=Fr),Fr===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 F_(e){return e.indexOf(".")>-1?e.split(".").map(F_):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(decodeURIComponent(r));if(t==="string")return decodeURIComponent(r);throw new fn.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 fn.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 Pie(e,t,r){return t*r/Ci(e)}var fn,oO,ks,No,bie,Nie,yie,Iie,aO,lO,Die,el,Lie,Fr,yo,tl,$h=Oe(()=>{fn=B(oe()),oO=B(at()),ks=require("ordered-binary"),No=require("lmdb"),bie=.3,Nie=.1,yie=.05,Iie={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},aO={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(cO,"executeConditions");a(rl,"searchByIndex");a(Di,"findAttribute");a(wie,"joinTo");a(Cie,"joinFrom");lO={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(uO,"filterByType");a(Fh,"estimateCondition");Die=/[()[\]|!<>.]|(=\w*=)/,el=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,Lie=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(kh,"parseQuery");a(x_,"parseBlock");a(xh,"assignOperator");a(F_,"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(Pie,"intersectionEstimate")});function hG(e){let t={openapi:Mie,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 EO(_O[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 EO(_O[U.type],U.type)}:A==="Any"||A=="ID"?_[P]={format:A}:_[P]=new EO(_O[A],A)}u.push(new hO(P,"query",_[P]))}let d=Object.keys(_),f=new hO(c,"path",{format:"ID"});f.required=!0,f.description="primary key of record";let E=new hO("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",g=typeof l.delete=="function",R="/"+s+"/";h&&(t.paths[R]={},t.paths[R].post=new Uie(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[R]||(t.paths[R]={}),t.paths[R].get=new dO(u,r,{200:new fO({$ref:Io+i})},"search for records by the specified property name and value pairs")),g&&(t.paths[R]||(t.paths[R]={}),t.paths[R].delete=new dG(u,r,"delete all the records that match the provided query",{204:new _G})),R="/"+s+"/{"+c+"}",S&&(t.paths[R]={},t.paths[R].get=new dO([f],r,{200:new fO({$ref:Io+i})},"retrieve a record by its primary key")),m&&(t.paths[R]||(t.paths[R]={}),t.paths[R].put=new vie([f],r,i,"create or update the record with the URL path that maps to the record's primary key")),g&&(t.paths[R]||(t.paths[R]={}),t.paths[R].delete=new dG([f],r,"delete a record with the given primary key",{204:new _G})),S&&E.schema.enum.length>0&&(R="/"+s+"/{"+c+"}.{property}",t.paths[R]={},t.paths[R].get=new dO([f,E],r,{200:new fO({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function Uie(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Io+e}}}},this.security=t,this.responses={200:{description:pO,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function dO(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function fO(e){this.description=pO,this.content={"application/json":{schema:e}}}function _G(){this.description="successfully processed request, no content returned to client"}function vie(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:pO}}}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 EO(e,t){this.type=e,this.format=t}function hO(e,t,r){this.name=e,this.in=t,this.schema=r}var EG,Mie,_O,Io,pO,pG=Oe(()=>{EG=B(Si()),Mie="3.0.3",_O={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Io="#/components/schemas/",pO="successful operation";a(hG,"generateJsonApi");a(Uie,"Post");a(dO,"Get");a(fO,"Response200");a(_G,"Response204");a(vie,"Put");a(dG,"Delete");a(fG,"ResourceSchema");a(EO,"Type");a(hO,"Parameter")});var Yh={};Fe(Yh,{start:()=>Gie});async function Hie(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,mO.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){Bie[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),mO.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 Gie(e){mO=e,!SG&&(SG=!0,Vh=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Hie(t,r)}),e.server.ws(async(t,r,n)=>{k_++;let s=new Zn;TG||(TG=!0,qu(u=>{k_>0&&u.push({metric:"ws-connections",connections:k_,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",()=>{k_--,Un(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let l=r.url.slice(1),_=Vh.getMatch(l);if(Un(!!_,"connection","ws","connect"),!_)t.send(Ao(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,cn(h=>({count:h.count,total:k_}),"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),cn(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var va,nl,tr,Bie,mO,mG,SG,Vh,TG,k_,gG=Oe(()=>{Wc();pi();va=B(x()),nl=B(oe());$h();jl();fa();O_();pG();tr=new Uint8Array(8),Bie=new Float64Array(tr.buffer,0,1),mO={},mG="openapi";a(Hie,"http");k_=0;a(Gie,"start")});var SO=T((Sbe,RG)=>{var{recordAction:Kh,recordActionBinary:qie}=(pi(),ie(xu)),xie=require("fastify-plugin"),Fie=200;RG.exports=xie(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),qie(s.raw.statusCode<400,"success",_,d,u);let f=Fie;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 bO=T((Rbe,NG)=>{var zh=require("clone"),Jh=tt(),kie=K(),Qh=D(),Tbe=x(),TO=require("fs"),RO=require("joi"),{string:jh}=RO.types(),{hdb_errors:$ie,handleHDBError:Wh}=oe(),{HDB_ERROR_MSGS:gbe,HTTP_STATUS_CODES:gO}=$ie,{common_validators:sl}=ws(),AG=" is required",Vie=["insert","update","upsert"],AO={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:Vie,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Yie={schema:jh.required(),table:jh.required(),action:jh.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Kie,AWS_SECRET:Wie,AWS_BUCKET:Qie,AWS_FILE_KEY:jie,REGION:zie}=Qh.S3_BUCKET_AUTH_KEYS,Jie={s3:{presence:!0},[`s3.${Kie}`]:{presence:!0,type:"String"},[`s3.${Wie}`]:{presence:!0,type:"String"},[`s3.${Qie}`]:{presence:!0,type:"String"},[`s3.${jie}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${zie}`]:{presence:!0,type:"String"}},OG=zh(AO);OG.data.presence={message:AG};var bG=zh(AO);bG.file_path.presence={message:AG};var Xie=Object.assign(zh(AO),Jie),OO=zh(Yie);OO.csv_url=jh.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();OO.passthrough_headers=RO.object();function Zie(e){let t=Jh.validateObject(e,OG);return Xh(e,t)}a(Zie,"dataObject");function eoe(e){let t=Jh.validateBySchema(e,RO.object(OO));return Xh(e,t)}a(eoe,"urlObject");function toe(e){let t=Jh.validateObject(e,bG);return Xh(e,t)}a(toe,"fileObject");function roe(e){let t=Jh.validateObject(e,Xie);return Xh(e,t)}a(roe,"s3FileObject");function Xh(e,t){if(!t){let r=kie.checkGlobalSchemaTable(e.schema,e.table);if(r)return Wh(new Error,r,gO.BAD_REQUEST);if(e.operation===Qh.OPERATIONS_ENUM.CSV_FILE_LOAD)try{TO.accessSync(e.file_path,TO.constants.R_OK|TO.constants.F_OK)}catch(n){return n.code===Qh.NODE_ERROR_CODES.ENOENT?Wh(n,`No such file or directory ${n.path}`,gO.BAD_REQUEST):n.code===Qh.NODE_ERROR_CODES.EACCES?Wh(n,`Permission denied ${n.path}`,gO.BAD_REQUEST):Wh(n)}}return t}a(Xh,"postValidateChecks");NG.exports={dataObject:Zie,urlObject:eoe,fileObject:toe,s3FileObject:roe}});var NO=T((Obe,yG)=>{"use strict";var $_=x(),Zh=D();async function noe(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")?($_.info(i.message),i):i.http_resp_msg?($_.error(`Error calling operation: ${e.name}`),$_.error(i.http_resp_msg),i):($_.error(`Error calling operation: ${e.name}`),$_.error(i),i)}}a(noe,"callOperationFunctionAsAwait");yG.exports={callOperationFunctionAsAwait:noe}});var wG=T((Nbe,IG)=>{"use strict";var yO=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}},IO=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:yO,BulkLoadDataObject:IO}});var DG=T((Ibe,CG)=>{"use strict";var wO=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};CG.exports=wO});var UO=T((Mbe,WG)=>{"use strict";var ep=br(),rp=bO(),soe=require("needle"),Es=D(),Cbe=Xe(),il=K(),{handleHDBError:_t,hdb_errors:qG}=oe(),{HTTP_STATUS_CODES:rr,HDB_ERROR_MSGS:Ht,CHECK_LOGS_WRAPPER:Ha}=qG,ol=x(),CO=require("papaparse");il.promisifyPapaParse();var hs=require("fs-extra"),ioe=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"),ooe=X(),xG=NO(),aoe=JA(),{BulkLoadFileObject:LO,BulkLoadDataObject:coe}=wG(),PO=FA(),{verifyBulkLoadAttributePerms:FG}=Mh(),Dbe=DG(),Lbe=pt(),Pbe=ui(),{databases:loe}=(ge(),ie(ke)),{coerceType:uoe}=(np(),ie(vO)),BG="No records parsed from csv file.",Ba=`${ooe.get("HDB_ROOT")}/tmp`,{schema_regex:_oe}=ws(),HG=1024*1024*2,GG=5e3,doe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};WG.exports={csvDataLoad:foe,csvURLLoad:Eoe,csvFileLoad:hoe,importFromS3:poe};async function foe(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=CO.parse(e.data,{header:!0,skipEmptyLines:!0,transform:DO.bind(null,s),dynamicTyping:!1}),o=new PO;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 coe(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(foe,"csvDataLoad");async function Eoe(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 moe(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 LO(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 MO(s);return await tp(n),i}catch(s){throw await tp(n),Ga(s)}}a(Eoe,"csvURLLoad");async function hoe(e){let t=rp.fileObject(e);if(t)throw _t(t,t.message,rr.BAD_REQUEST,void 0,void 0,!0);let r=new LO(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 MO(r)}catch(n){throw Ga(n)}}a(hoe,"csvFileLoad");async function poe(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=ioe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Ba}/${s}`;let i=new LO(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await Soe(s,e);let o=await MO(i);return await tp(r),o}catch(n){throw await tp(r),Ga(n)}}a(poe,"importFromS3");async function moe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await soe("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)}goe(r,e.csv_url),await Toe(t,r.raw)}a(moe,"downloadCSVFile");async function Soe(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 aoe.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(Soe,"downloadFileFromS3");async function Toe(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(Toe,"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 goe(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(!doe[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(goe,"validateURLResponse");async function MO(e){try{let t;switch(e.file_type){case Es.VALID_S3_FILE_TYPES.CSV:t=await Roe(e);break;case Es.VALID_S3_FILE_TYPES.JSON:t=await Aoe(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(MO,"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 Roe(e){let t={records:0,number_written:0},r=VG(e.schema,e.table);try{let n=new PO,s=hs.createReadStream(e.file_path,{highWaterMark:HG});s.setEncoding("utf8"),await CO.parsePromise(s,kG.bind(null,e,n),DO.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 CO.parsePromise(s,$G.bind(null,e,t),DO.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(Roe,"callPapaParse");function VG(e,t){let r=loe[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>uoe(i,s));return n}a(VG,"createTransformMap");function DO(e,t,r){let n=e.get(r);return n?n(t):il.autoCast(t)}a(DO,"typeFunction");async function Aoe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new PO,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(Aoe,"insertJson");async function YG(e){let t={};try{e.data&&e.data.length>0&&Ooe(e.data[0])?t=await boe(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 Ooe(e){let t=Object.keys(e);for(let r of t)if(!_oe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Ooe,"validateColumnNames");async function boe(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(boe,"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((vbe,QG)=>{"use strict";var BO=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};QG.exports=BO});var XG=T((Hbe,JG)=>{"use strict";var Noe=D(),zG=require("moment"),yoe=require("uuid").v4,HO=class{static{a(this,"JobObject")}constructor(){this.id=yoe(),this.type=void 0,this.start_datetime=zG().valueOf(),this.created_datetime=zG().valueOf(),this.end_datetime=void 0,this.status=Noe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};JG.exports=HO});var GO=T((qbe,sq)=>{"use strict";var Ioe=require("uuid").v4,tq=br(),rq=sr(),woe=os(),Coe=bc(),Doe=jG(),dt=D(),Loe=XG(),Poe=wE(),Fn=x(),Moe=_u(),al=K(),{promisify:Uoe}=require("util"),qa=require("moment"),voe=vh(),sp=bO(),ZG=_T(),{deleteTransactionLogsBeforeValidator:Boe}=BA(),{handleHDBError:Hoe,hdb_errors:Goe}=oe(),{HTTP_STATUS_CODES:qoe}=Goe,eq=rq.searchByValue,xoe=rq.searchByHash,Foe=tq.insert,koe=Uoe(voe.evaluateSQL),$oe=tq.update;sq.exports={addJob:Koe,updateJob:Qoe,handleGetJob:Voe,handleGetJobsByStartDate:Yoe,getJobById:nq};async function Voe(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(Voe,"handleGetJob");async function Yoe(e){try{let t=await Woe(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(Yoe,"handleGetJobsByStartDate");async function Koe(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=Boe(e);break;default:break}if(n)throw Hoe(n,n.message,qoe.BAD_REQUEST,void 0,void 0,!0);let s=new Loe;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 woe(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=Ioe();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 Moe(dt.SYSTEM_SCHEMA_NAME,dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await Foe(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(Koe,"addJob");async function Woe(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 Doe(n,e.hdb_user);try{return await koe(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(Woe,"getJobsInDateRange");async function nq(e){if(al.isEmptyOrZeroLength(e))return al.errorizeMessage("Invalid job ID specified.");let t=new Coe(dt.SYSTEM_SCHEMA_NAME,dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await xoe(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 Qoe(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 Poe(dt.SYSTEM_SCHEMA_NAME,dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await $oe(t),r}a(Qoe,"updateJob")});var uq=T((Fbe,lq)=>{"use strict";var iq=K(),kr=D(),joe=require("moment"),ip=UO(),op=x(),oq=GO(),aq=Bh(),cq=na(),zoe=et(),Joe=Ch(),qO=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Xoe(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 kr.JOB_TYPE_ENUM.csv_file_load:await Li(e,ip.csvFileLoad);break;case kr.JOB_TYPE_ENUM.csv_url_load:await Li(e,ip.csvURLLoad);break;case kr.JOB_TYPE_ENUM.csv_data_load:await Li(e,ip.csvDataLoad);break;case kr.JOB_TYPE_ENUM.import_from_s3:await Li(e,ip.importFromS3);break;case kr.JOB_TYPE_ENUM.empty_trash:break;case kr.JOB_TYPE_ENUM.export_local:await Li(e,aq.export_local);break;case kr.JOB_TYPE_ENUM.export_to_s3:await Li(e,aq.export_to_s3);break;case kr.JOB_TYPE_ENUM.delete_files_before:case kr.JOB_TYPE_ENUM.delete_records_before:await Li(e,cq.deleteFilesBefore);break;case kr.JOB_TYPE_ENUM.delete_audit_logs_before:await Li(e,cq.deleteAuditLogsBefore);break;case kr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Li(e,Joe.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(Xoe,"parseMessage");async function Li(e,t){try{e.job.status=kr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=joe().valueOf(),await oq.updateJob(e.job),await Zoe(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=kr.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 Zoe(e){op.trace("launching job thread:",e),zoe.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[kr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Zoe,"launchJobThread");lq.exports={parseMessage:Xoe,RunnerMessage:qO}});var dq=T(($be,_q)=>{"use strict";var xO=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};_q.exports=xO});var Cq=T((Ybe,KO)=>{"use strict";var _p=sr(),$O=vh(),ap=UO(),Pi=RE(),cp=_i(),Y_=na(),eae=lR(),V_=yr(),lp=NE(),nr=vA(),up=x(),tae=gR(),rae=n_(),fq=XR(),nae=FE(),sae=$E(),iae=eA(),oae=YE(),aae=WE(),FO=jE(),Eq=Bh(),cae=Mh(),VO=GO(),F=D(),{hdb_errors:W_,handleHDBError:K_}=oe(),{HTTP_STATUS_CODES:hq}=W_,kO=JE(),pq=wa(),Nq=require("util"),cl=br(),lae=Pn(),uae=mi(),mq=uq(),Sq=Zu(),Tq=(Th(),ie(b_)),gq=ut(),Rq=Ch(),Aq=bh(),{setServerUtilities:_ae}=(np(),ie(vO)),{CONTEXT:dae}=(es(),ie(ag)),{_assignPackageExport:fae}=require("../index"),{transformReq:Eae}=K(),{server:hae}=(Rr(),ie(Wo)),dr=up.loggerWithTag("operation"),pae=NO(),Oq=_p.searchByHash,mae=_p.searchByValue,Sae=Nq.promisify(_p.search),Tae=Nq.promisify($O.evaluateSQL),gae={[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;dr.info(o)}}catch(n){dr.error(n)}let r=await pae.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return gae[e.body.operation]&&lae.setSchemaDataToGlobal(n=>{n&&dr.error(n)}),r}a(yq,"processLocalTransaction");var bq=Aae();KO.exports={chooseOperation:Iq,getOperationFunction:wq,operation:YO,processLocalTransaction:yq};_ae(KO.exports);hae.operation=YO;function Iq(e){let t;try{t=wq(e)}catch(s){throw dr.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=$O.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=$O.checkASTPermissions(e,i);if(o)throw dr.error(`${hq.FORBIDDEN} from operation ${e.operation}`),dr.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),K_(new Error,o,W_.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=cae.verifyPerms(i,s);if(o)throw dr.error(`${hq.FORBIDDEN} from operation ${e.operation}`),dr.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),K_(new Error,o,W_.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw K_(s,"There was an error when trying to choose an operation path")}return r}a(Iq,"chooseOperation");function wq(e){if(dr.trace(`getOperationFunction with operation: ${e.operation}`),bq.has(e.operation))return bq.get(e.operation);throw K_(new Error,W_.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),W_.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(wq,"getOperationFunction");fae("operation",YO);function YO(e,t){e.hdb_user=this[dae]?.user,e.bypass_auth=!t;let r=Iq(e);return yq({body:e},r)}a(YO,"operation");async function Rae(e){dr.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 Y_.deleteRecord(i);break;default:dr.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){dr.info("Invalid operation in transaction"),dr.error(o)}}a(Rae,"catchup");async function $s(e){Eae(e);let t,r;try{r=await VO.addJob(e),t=r.createdJob,dr.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 dr.error(s),K_(n,s)}}a($s,"executeJob");function Aae(){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(mae)),e.set(F.OPERATIONS_ENUM.SEARCH,new Y(Sae)),e.set(F.OPERATIONS_ENUM.SQL,new Y(Tae)),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(Y_.deleteRecord)),e.set(F.OPERATIONS_ENUM.ADD_USER,new Y(V_.addUser)),e.set(F.OPERATIONS_ENUM.ALTER_USER,new Y(V_.alterUser)),e.set(F.OPERATIONS_ENUM.DROP_USER,new Y(V_.dropUser)),e.set(F.OPERATIONS_ENUM.LIST_USERS,new Y(V_.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(V_.userInfo)),e.set(F.OPERATIONS_ENUM.READ_LOG,new Y(tae)),e.set(F.OPERATIONS_ENUM.ADD_NODE,new Y(rae)),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(nae)),e.set(F.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new Y(sae)),e.set(F.OPERATIONS_ENUM.PURGE_STREAM,new Y(iae)),e.set(F.OPERATIONS_ENUM.SET_CONFIGURATION,new Y(gq.setConfiguration)),e.set(F.OPERATIONS_ENUM.CLUSTER_STATUS,new Y(oae.clusterStatus)),e.set(F.OPERATIONS_ENUM.CLUSTER_NETWORK,new Y(aae)),e.set(F.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new Y(FO.setRoutes)),e.set(F.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new Y(FO.getRoutes)),e.set(F.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new Y(FO.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,Y_.deleteFilesBefore)),e.set(F.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new Y($s,Y_.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(VO.handleGetJobsByStartDate)),e.set(F.OPERATIONS_ENUM.GET_JOB,new Y(VO.handleGetJob)),e.set(F.OPERATIONS_ENUM.GET_FINGERPRINT,new Y(kO.getFingerprint)),e.set(F.OPERATIONS_ENUM.SET_LICENSE,new Y(kO.setLicense)),e.set(F.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new Y(kO.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(Rae)),e.set(F.OPERATIONS_ENUM.SYSTEM_INFORMATION,new Y(uae.systemInformation)),e.set(F.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new Y($s,Y_.deleteAuditLogsBefore)),e.set(F.OPERATIONS_ENUM.READ_AUDIT_LOG,new Y(eae)),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(Aae,"initializeOperationFunctionMap")});var fp=T((Wbe,Pq)=>{"use strict";var WO=D(),Oae=K(),Q_=x(),{handleHDBError:QO,hdb_errors:dp}=oe(),{isMainThread:bae}=require("worker_threads"),{Readable:Nae}=require("stream"),Dq=require("os"),yae=require("util"),Iae=DR(),wae=yae.promisify(Iae.authorize),Lq=Cq(),{createGzip:Cae,constants:Dae}=require("zlib");function Lae(e){let t=`Found an uncaught exception with message: ${e.message}. ${Dq.EOL}Stack: ${e.stack} ${Dq.EOL}Terminating ${bae?"HDB":"thread"}.`;console.error(t),Q_.fatal(t),process.exit(1)}a(Lae,"handleServerUncaughtException");function Pae(e,t,r){if(Q_[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(Pae,"serverErrorHandler");function Mae(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=QO(new Error,"Invalid JSON.",dp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(Oae.isEmpty(e.body.operation)){let n=QO(new Error,"Request body must include an 'operation' property.",dp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(Mae,"reqBodyValidationHandler");function Uae(e,t,r){let n;e.body.operation!==WO.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==WO.OPERATIONS_ENUM.LOGIN&&e.body.operation!==WO.OPERATIONS_ENUM.LOGOUT?wae(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{Q_.warn(s),Q_.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(QO(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(Uae,"authHandler");async function vae(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 Nae&&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(Cae({level:Dae.Z_BEST_SPEED})))}return s}catch(s){throw Q_.error(s),s}}a(vae,"handlePostRequest");Pq.exports={authHandler:Uae,handlePostRequest:vae,handleServerUncaughtException:Lae,serverErrorHandler:Pae,reqBodyValidationHandler:Mae}});var Bq=T((jbe,vq)=>{"use strict";var Bae=require("fastify-plugin"),{handlePostRequest:Mq,authHandler:Hae,reqBodyValidationHandler:Gae}=fp();async function qae(e){e.decorate("hdbCore",{preValidation:[Gae,Hae],request:t=>Uq(Mq(t,response)),requestWithoutAuthentication:(t,r)=>Uq(Mq(t,r,!0))})}a(qae,"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=Bae(qae)});var qq=T((Xbe,Gq)=>{"use strict";var Jbe=require("fs"),jO=X();jO.initSync();var{CONFIG_PARAMS:Hq}=D(),xae=1024*1024*1024;function Fae(e){let t=jO.get(Hq.HTTP_TIMEOUT),r=jO.get(Hq.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:xae,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(Fae,"getServerOptions");Gq.exports=Fae});var kq=T((eNe,Fq)=>{"use strict";var zO=X();zO.initSync();var{CONFIG_PARAMS:xq}=D();function kae(){let e=zO.get(xq.HTTP_CORSACCESSLIST),t=zO.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(kae,"getCORSOptions");Fq.exports=kae});var Yq=T((rNe,Vq)=>{"use strict";var $q=X();$q.initSync();var $ae=D();function Vae(){return $q.get($ae.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Vae,"getHeaderTimeoutConfig");Vq.exports=Vae});var XO={};Fe(XO,{customFunctionsServer:()=>Wae,ready:()=>ox,start:()=>Kae});function Kae(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,JO.dirname)(s),l=(0,JO.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!Kq.has(c)){Kq.add(c);try{o.register(jae(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 Wae(){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 Qae();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 Qae(){try{Ke.info("Custom Functions starting configuration."),await ex.setUsersToGlobal(),Ke.info("Custom Functions completed configuration.")}catch(e){Ke.error(e)}}function jae(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(Yae),await r.after(),iO(r),Ke.info("Custom Functions completed buildServer."),r}function ox(){if(Mi)return Mi.then?Mi.then(e=>e.ready()):Mi.ready()}var JO,Wq,Qq,jq,zq,Jq,Xq,Zq,Ke,Yae,ex,tx,rx,nx,sx,Mi,Kq,ax=Oe(()=>{JO=require("path"),Wq=require("fs"),Qq=B(require("fastify")),jq=B(require("@fastify/cors")),zq=B(SO()),Jq=B(require("@fastify/autoload")),Xq=B(X()),Zq=B(D()),Ke=B(x()),Yae=B(Bq()),ex=B(yr()),tx=B(qq()),rx=B(kq()),nx=B(Yq()),sx=B(fp());Wc();Rr();Kq=new Set;a(Kae,"start");a(Wae,"customFunctionsServer");a(Qae,"setUp");a(jae,"buildRouteFolder");a(ix,"buildServer");a(ox,"ready")});var ZO={};Fe(ZO,{start:()=>zae});function zae(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(zae,"start")});var nb={};Fe(nb,{Request:()=>eb,createReuseportFd:()=>Ep});var Ex,eb,tb,rb,Ep,hp=Oe(()=>{Ex=require("os"),eb=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 rb(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 tb(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},tb=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)}},rb=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 ub=T(xa=>{"use strict";var{isMainThread:gx,parentPort:z_,threadId:pp}=require("worker_threads"),{Socket:Jae,createServer:Xae}=require("net"),{createServer:Zae,IncomingMessage:ece}=require("http"),{createServer:tce}=require("https"),{readFileSync:ll,unlinkSync:hx,existsSync:rce}=require("fs"),fr=x(),Le=X(),Tt=D(),{server:gp}=(Rr(),ie(Wo)),{WebSocketServer:nce}=require("ws"),{createServer:sce}=require("tls"),{getTicketKeys:ice,restartNumber:oce,getWorkerIndex:Sp}=et(),{Headers:Rx,appendHeader:ace}=(O_(),ie(DB)),{recordAction:j_,recordActionBinary:cce}=(pi(),ie(xu)),{Request:Ax,createReuseportFd:px}=(hp(),ie(nb)),{checkMemoryLimit:lce}=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){fr.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){fr.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){oce<=1&&fr.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:lNe,CONFIG_PARAMS:uce}=Tt;Le.initSync();var _ce=Le.get(uce.HTTP_SESSIONAFFINITY),Vs={};xa.registerServer=cb;xa.httpServer=lb;xa.deliverSocket=ab;xa.startServers=Nx;xa.when_components_loaded=null;gp.http=lb;gp.request=hce;gp.socket=pce;gp.ws=mce;var sb={},mp={},dce,wo={},Tp={},fce=[],ib=[];function Nx(){return xa.when_components_loaded=Rp().loadRootComponents(!0).then(()=>{z_?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)ab(n,r,s);else if(t.requestId)Ece(t);else if(t.type===Tt.ITC_EVENT_TYPES.SHUTDOWN){fr.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?fr.info(`Closing ${E.length} idle connections`):f&&fr.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(De.get(gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&zp()==0)try{IF(De.get(gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,Qp),o.cantCleanupProperly||Er.warn("Had to forcefully exit the thread",Qp),process.exit(0)},5e3).unref()})}if(BF||process.env.DEV_MODE)try{require("inspector").close()}catch(i){Er.info("Could not close debugger",i)}}}).ref();let e=[];if(wF&&!tue)for(let t in $s){let r=$s[t];if(isNaN(t)&&zp()==0){Kle(t)&&IF(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=wF(+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,Qp)}).on("error",i)}))}Promise.all(e).then(()=>{cd?.postMessage({type:gt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(HF,"startServers");PF||HF();function vb(e,t,r){let n=e?.read?e:new Fle({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=$s[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=$s[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(vb,"deliverSocket");var DF=new Map;function sue(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=DF.get(s),r){case"connection":i=vb(void 0,t),DF.set(s,i),i.write=(c,l,_)=>(cd.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,l,_)=>(cd.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),cd.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(sue,"proxyRequest");function Bb(e,t,r=!0){!+t&&t!==De.get(gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(De.get(gt.CONFIG_PARAMS.HTTP_PORT),10));let n=$s[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",LF),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else $s[t]=e;e.on("unhandled",LF)}a(Bb,"registerServer");function GF(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=[],De.get(gt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:De.get(gt.CONFIG_PARAMS.HTTP_PORT),secure:De.get(gt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),De.get(gt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:De.get(gt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&De.get(gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:De.get(gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(GF,"getPorts");function Hb(e,t){for(let{port:r,secure:n}of GF(t))qF(r,n,t?.isOperationsServer),typeof e=="function"?Mb[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,Bb(e,r,!1)),Jp[r]=Ub(Mb,r),rue=Ub(nue,r)}a(Hb,"httpServer");function qF(e,t,r){if(!Oo[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:De.get(n+"_keepAliveTimeout"),headersTimeout:De.get(n+"_headersTimeout"),requestTimeout:De.get(n+"_timeout")},i=De.get(n+"_mtls"),o=De.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let l=De.get(n+"tls_privateKey"),_=De.get(n+"tls_certificate"),u=De.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:_l(l),ciphers:De.get("tls_ciphers"),cert:_l(_),ca:u&&_l(u),rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:jle(),maxHeaderSize:De.get(gt.CONFIG_PARAMS.HTTP_MAXHEADERSIZE)})}let c=Zle();Oo[e]=(t?Yle:$le)(s,async(l,_)=>{try{let d=performance.now(),f=new UF(l,_);r&&(f.isOperationsServer=!0);let E=await Jp[e](f);if(!E){if(f._nodeResponse.statusCode)return;E=xF(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 v of E.headers||[])_.setHeader(v[0],v[1]);return l.baseRequest=f,_.baseResponse=E,Oo[e].emit("unhandled",l,_)}let h=E.status||200,m=performance.now(),S=m-d,R=E.body,T;if(!E.handlesHeaders){let v=E.headers||new MF;R?R.length>=0&&(typeof R=="string"?v.set("Content-Length",Buffer.byteLength(R)):v.set("Content-Length",R.length),T=!0):(v.set("Content-Length","0"),T=!0);let U=`hdb;dur=${S.toFixed(2)}`;E.wasCacheMiss&&(U+=", miss"),Jle(v,"Server-Timing",U,!0),_.writeHead(h,v&&(v[Symbol.iterator]?Array.from(v):v)),T&&_.end(R)}let A=f.handlerPath,P=f.method;if(ad(S,"duration",A,P,E.wasCacheMiss==null?void 0:E.wasCacheMiss?"cache-miss":"cache-hit"),Xle(h<400,"success",A,P),!T)if(R?.pipe){R.pipe(_),R.destroy&&_.on("close",()=>{R.destroy()});let v=0;R.on("data",U=>{v+=U.length}),R.on("end",()=>{ad(performance.now()-m,"transfer",A,P),ad(v,"bytes-sent",A,P)})}else R?.then?R.then(v=>{_.end(v)},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&&(Oo[e].mtlsConfig=i),t&&(Oo[e].on("secureConnection",l=>{l._parent.startTime&&ad(performance.now()-l._parent.startTime,"tls-handshake",e),ad(l.isSessionReused(),"tls-reused",e)}),Oo[e].isSecure=!0),Bb(Oo[e],e)}return Oo[e]}a(qF,"getHTTPServer");function Ub(e,t){let r=xF;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(Ub,"makeCallbackChain");function xF(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new MF}}a(xF,"unhandled");function iue(e,t){Hb(e,{requestOnly:!0,...t})}a(iue,"onRequest");function oue(e,t){let r;if(t.securePort){let n=De.get("tls_privateKey"),s=De.get("tls_certificate"),i=t.mtls?.certificateAuthority||De.get("tls_certificateAuthority");r=Qle({ciphers:De.get("tls_ciphers"),key:_l(n),cert:_l(s),ca:i&&_l(i),rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls},e),$s[t.securePort]=r}return t.port&&(r=kle(e),$s[t.port]=r),r}a(oue,"onSocket");Object.defineProperty(Vle.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 aue(e,t){let r;for(let{port:n,secure:s}of GF(t)){jp[n]||(jp[n]=new Wle({server:r=qF(n,s)}),jp[n].on("connection",async(c,l)=>{try{let _=new UF(l);_.isWebSocket=!0;let u=Jp[n](_),d=l.headers["sec-websocket-protocol"]||"",f=Pb[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",_)}}),jp[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=Pb[n];o||(o=Pb[n]=[]),o.push({listener:e,protocol:i}),Jp[n]=Ub(Mb,n)}return r}a(aue,"onWebSocket");function LF(e,t){t.writeHead(404),t.end(`Not found
33
- `)}a(LF,"defaultNotFound")});async function VF({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await qb.get(e,{returnNonexistent:!0});s=new kb(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await qb.get(e);i&&i.delete()}s=new tm(e,t)}return n&&(n.id=e,n.user={username:t?.username},ld.put(n)),s}function xb(){return em++,em>65500&&(em=1),em}function Fb(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=ji.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 FF,bo,kF,$F,qb,ld,em,tm,kb,YF=Oe(()=>{ge();eu();FF=B(Or()),bo=B(x());Wo();kF=B(tt()),$F=B(Gb());Rr();qb=ht({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"}]}}]}),ld=ht({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,kF.getWorkerIndex)()===0&&(async()=>{await $F.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of ld.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await at.getUser(r.user.username)),Ze(r,()=>{try{Fb(r,t,r)}catch{(0,bo.warn)("Failed to publish will",t)}ld.delete(e.id,r)})}})();a(VF,"getSession");em=1;a(xb,"getNextMessageId");tm=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,bo.trace)("Resuming subscription from",s,"from",o);let E=ji.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 U=0;U<T.length;U++)if(T[U].indexOf("+")>-1)if(T[U]==="+")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;T[T.length-1]==="#"&&(T.length--,P=!1),A&&(n=a(U=>{let k=U.id;if(!Array.isArray(k)||P&&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 v=T.indexOf("+");f.url="/"+(v>-1?T.slice(0,v):T).concat("").join("/")}}let h=E.path,m=E.Resource,S=await Ze(f,async()=>{let R=await m.subscribe(f,this.createContext());if(!R)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let T of R)try{let A;if(T.type&&T.type!=="put"&&T.type!=="delete"&&T.type!=="message"&&T.type!=="patch"||n&&!n(T))continue;r?(T.topic=s,A=this.needsAcknowledge(T)):(T.acknowledge?.(),A=xb());let P=T.id;Array.isArray(P)&&(P=_c(P)),P==null&&(P=""),this.listener(h+"/"+P,T.value,A,t)}catch(A){(0,bo.warn)(A)}})(),R});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=xb();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 Fb(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 ld.get(this.sessionId,r);n?.doesExist()&&await Fb(n,n.data,r)}await ld.delete(this.sessionId,r)}).catch(n=>{(0,bo.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(Fb,"publish");kb=class extends tm{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=xb(),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,bo.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,FF.getNextMonotonicTime)()),(0,bo.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),qb.put(this.sessionRecord)}}});var Yb={};Fe(Yb,{bypassAuth:()=>cue,start:()=>lue});function cue(){jF=!0}function lue({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i,sessions:new Set},c,l=r?.mtls;return n&&(c=e.ws((_,u,d)=>{if(_.protocol==="mqtt"){Tn.debug("Received WSS connection for MQTT from",_._socket.remoteAddress);let{onMessage:f,onClose:E}=WF(_,(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=>{Tn.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let u;if(Tn.debug("Received connection for MQTT from",_.remoteAddress),l){if(_.authorized)try{let E=l.user;E!==null?((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),u=await e.getUser(E,null,null),(0,ud.get)(gn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&$b.notify({username:u.username,status:gn.AUTH_AUDIT_STATUS.SUCCESS,type:gn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})):Tn.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(E){Tn.error(E)}else if(l.required)return Tn.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!u&&jF&&_.remoteAddress.includes("127.0.0.1")&&(u=await(0,QF.getSuperUser)(),Tn.debug("Auto-authorizing local connection",u?.username));let{onMessage:d,onClose:f}=WF(_,E=>_.write(E),null,u,o);_.on("data",d),_.on("close",f),_.on("error",E=>{Tn.info("Socket error",E)})},{port:t,securePort:s,mtls:l})),c}function WF(e,t,r,n,s){KF||(KF=!0,Hu(d=>{rm>0&&d.push({metric:"mqtt-connections",connections:rm,byThread:!0})}));let i;rm++;let o,c={protocolVersion:4},l=(0,nm.parser)({protocolVersion:5});function _(d){l.parse(d)}a(_,"onMessage");function u(){rm--,i||(i=!0,o?.disconnect(),s.sessions.delete(o),Un(!1,"connection","mqtt","disconnect"))}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 at.getUser(d.username,d.password.toString(),r),(0,ud.get)(gn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&$b.notify({username:n.username,status:gn.AUTH_AUDIT_STATUS.SUCCESS,type:gn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,ud.get)(gn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&$b.error({username:n.username,status:gn.AUTH_AUDIT_STATUS.FAILURE,type:gn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return Un(!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=va(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?A(d.will.payload):void 0,delete d.will.payload}o=VF({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(A){return Tn.error(A),Un(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:A.code||5,returnCode:A.code||128})}Un(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((A,P,v,U)=>{try{let k=A.indexOf("/",1),H=k>0?A.slice(0,k):A;f({cmd:"publish",topic:A,payload:E(P),messageId:v||Math.floor(Math.random()*1e8),qos:U.qos},H)}catch(k){Tn.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(v){Tn.error(v),P=c.protocolVersion<5?128:v.statusCode===403?135:v.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=va(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){Tn.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.sessions.delete(o),Un(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){Tn.error(h),f({cmd:"disconnect"})}function f(h,m){let S=(0,nm.generate)(h,c);t(S),un(S.length,"bytes-sent",m,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return To(h,r)}a(E,"serialize")}),{onMessage:_,onClose:u}}var nm,QF,ud,gn,Vb,$b,Tn,jF,KF,rm,zF=Oe(()=>{nm=require("mqtt-packet");YF();QF=B(Pr());Jc();fi();Rr();ud=B(X()),gn=B(C()),Vb=B(x()),$b=(0,Vb.loggerWithTag)("auth-event"),Tn=(0,Vb.loggerWithTag)("mqtt"),jF=(0,ud.get)(gn.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(cue,"bypassAuth");a(lue,"start");rm=0;a(WF,"onSocket")});var op={};Fe(op,{component_errors:()=>fl,loadComponent:()=>sm,loadComponentDirectories:()=>ik,setErrorReporter:()=>fue});function ik(e,t){t&&(Wb=t),e&&(Qb=e);let r=[];if((0,ps.existsSync)(Kb)){let s=(0,ps.readdirSync)(Kb,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Ct.join)(Kb,o);r.push(sm(c,Wb,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(sm(n,Wb,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{sk=!0})}function fue(e){dd=e}async function sm(e,t,r,n,s,i){if(!XF.has(e)){XF.set(e,!0),s&&(Qb=s);try{let o;n&&(fl=new Map);let c=(0,Ct.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,ps.existsSync)(c)?o=n?(0,nk.getConfigObj)():(0,ZF.parseDocument)((0,ps.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=jb;let l=[],_=n;for(let u in o){let d=o[u];if(fl.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,rk.getHdbBasePath)().length){A=null;break}if(A)f=await sm(A,t,r,!1),_=!0;else throw new Error(`Unable to find package ${u}:${E}`)}else f=due[u];if(!f)continue;l.push(f);let h=a(T=>(T.origin=r,ht(T)),"ensureTable"),m=d.network||(d.port||d.securePort)&&d,S=m?.securePort||m?.https&&m.port,R=!m?.https&&m?.port;if(dl.isMainThread&&(f=await f.startOnMainThread?.({server:at,ensureTable:h,port:R,securePort:S,resources:t,...d})||f,n&&m))for(let T of[R,S])try{if(+T&&!JF.includes(T)){let A=zb.get(Jb.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);A&&_d.default.warn("Session affinity is not recommended and may cause memory leaks"),(A||!$p)&&(JF.push(T),Xb(T,A))}}catch(A){console.error("Error listening on socket",T,A,u)}if(t.isWorker&&(f=await f.start?.({server:at,ensureTable:h,port:R,securePort:S,resources:t,...d})||f),Qb.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,tk.handleHDBError)("Can not reference parent directories");let T=(0,Ct.join)(e,d.files).replace(/\\/g,"/"),A=T.indexOf("/*");if(A>-1&&d.files!==jb[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 P=(0,Ct.basename)(e),v=d.path||"/";v=v.startsWith("/")?v:v.startsWith("./")?"/"+P+v.slice(2):v==="."?"/"+P:"/"+P+"/"+v;let U,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),U=(0,Ct.relative)(e,k));let j=!1;if(dl.isMainThread&&f.setupDirectory&&(j=await f.setupDirectory?.(v,k,t)),t.isWorker&&f.handleDirectory&&(j=await f.handleDirectory?.(v,k,t)),j)continue;for(let z of await(0,ek.default)(T,{onlyFiles:!1,objectMode:!0})){let{path:J,dirent:Se}=z;_=!0;let ue=(0,Ct.relative)(e,J).replace(/\\/g,"/");if(U)if(ue.startsWith(U))ue=ue.slice(U.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=v+(v.endsWith("/")?"":"/")+ue;try{if(Se.isFile()){let Me=await _ue(J);dl.isMainThread&&await f.setupFile?.(Me,Ee,J,t),t.isWorker&&await f.handleFile?.(Me,Ee,J,t)}else dl.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}`,dd?.(Me),((0,El.getWorkerIndex)()===0?console:_d.default).error(Me),t.set(d.path||"/",new fd(Me)),fl.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}`,dd?.(h),((0,El.getWorkerIndex)()===0?console:_d.default).error(h),t.set(d.path||"/",new fd(h),null,!0),fl.set(n?u:(0,Ct.basename)(e),h.message)}}if(dl.isMainThread&&!sk&&i&&(0,El.watchDir)(e,async()=>ik()),o.extensionModule)return await $E((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?`;dd?.(new Error(u)),((0,El.getWorkerIndex)()===0?console:_d.default).error(u),fl.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}`,dd?.(o),t.set("",new fd(o))}}}var ps,Ct,dl,ZF,zb,Jb,ek,El,_d,tk,rk,uue,nk,_ue,Kb,Qb,sk,Wb,fl,due,jb,JF,XF,dd,fd,ap=Oe(()=>{ps=require("fs"),Ct=require("path"),dl=require("worker_threads"),ZF=require("yaml"),zb=B(X()),Jb=B(C());SU();AU();OU();gq();aF();fF();ek=B(require("fast-glob")),El=B(tt()),_d=B(x());uR();Rr();tk=B(oe());Jn();ge();im();rk=B(X()),uue=B(SF());Jh();yF();zF();nk=B(lt());Vp();({readFile:_ue}=ps.promises),Kb=zb.get(Jb.CONFIG_PARAMS.COMPONENTSROOT),Qb=new Map,fl=new Map;a(ik,"loadComponentDirectories");due={REST:Rp,rest:Rp,graphqlSchema:lR,jsResource:dR,fastifyRoutes:gb,login:ER,static:Rb,operationsApi:uue,customFunctions:{},http:{},clustering:Lb,authentication:B_,mqtt:Yb},jb={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(jb,"static",{value:{files:"web/**"}});JF=[],XF=new Map;a(fue,"setErrorReporter");a(sm,"loadComponent");fd=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 Zp=g((wye,ak)=>{var{isMainThread:ok}=require("worker_threads"),{getTables:Eue}=(ge(),se(ke)),{loadComponentDirectories:hue,loadComponent:pue}=(ap(),se(op)),{resetResources:mue}=(eu(),se(QI)),Sue=aO(),Tue=lt(),{dirname:gue}=require("path"),{getConnection:Rue}=mt(),Aue=X(),Oue=C(),Zb=new Map;async function bue(e=!1){!ok&&Aue.get(Oue.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Rue();try{ok&&await Sue()}catch(n){console.error(n)}let t=mue();Eue(),t.isWorker=e,await pue(gue(Tue.getConfigFilePath()),t,"hdb",!0,Zb),await hue(Zb,t);let r=[];for(let[n]of Zb)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(bue,"loadRootComponents");ak.exports.loadRootComponents=bue});var tt=g((Dye,yo)=>{"use strict";var{Worker:Nue,MessageChannel:yue,parentPort:Vs,isMainThread:sN,threadId:Iue,workerData:Di}=require("worker_threads"),{PACKAGE_ROOT:wue}=C(),{join:_k,isAbsolute:Cue,extname:Due}=require("path"),{server:dk}=(Rr(),se(ko)),{watch:Lue,readdir:Pue}=require("fs/promises"),{totalmem:ck}=require("os"),Ed=C(),fk=X(),Li=x(),{randomBytes:Mue}=require("crypto"),{_assignPackageExport:Uue}=require("../index"),vue=C(),lk=1024*1024,No=[],Vn=[],Bue=50,iN=1e4,Hue="restart",Ek="request_thread_info",hk="resource_report",pk="thread_info",mk="added-port",Gue="ack",eN;Uue("threads",Vn);yo.exports={startWorker:tN,restartWorkers:aN,shutdownWorkers:$ue,workers:No,setMonitorListener:Jue,onMessageFromWorkers:Vue,onMessageByType:bk,broadcast:Kue,broadcastWithAcknowledgement:Que,setChildListenerByType:kue,getWorkerIndex:Sk,getWorkerCount:Tk,getTicketKeys:Rk,setMainIsWorker:xue,setTerminateTimeout:que,restartNumber:Di?.restartNumber||1};Vn.onMessageByType=bk;Vn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Vn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var oN;function que(e){iN=e}a(que,"setTerminateTimeout");function Sk(){return Di?Di.workerIndex:oN?0:void 0}a(Sk,"getWorkerIndex");function Tk(){return Di?Di.workerCount:oN?1:void 0}a(Tk,"getWorkerCount");function xue(e){oN=e}a(xue,"setMainIsWorker");var gk=1,om;function Rk(){return om||(om=sN?Mue(48):Di.ticketKeys,om)}a(Rk,"getTicketKeys");Object.defineProperty(dk,"workerIndex",{get(){return Sk()}});Object.defineProperty(dk,"workerCount",{get(){return Tk()}});var Ak={[Ek](e,t){jue(t)},[hk](e,t){zue(t,e)}};function tN(e,t={}){let r=process.constrainedMemory?.()||ck();r=Math.min(r,ck(),2e4*lk);let n=fk.get(Ed.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/lk/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Vn){let _=new yue;_.existingPort=l,i.push(_),o.push(_.port2)}Due(e)||(e+=".js");let c=new Nue(Cue(e)?e:_k(wue,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:gk=t.threadCount,name:t.name,restartNumber:yo.exports.restartNumber,ticketKeys:Rk()},transferList:o},t));for(let{port1:l,existingPort:_}of i)_.postMessage({type:mk,port:l,threadId:c.threadId},[l]);return cm(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>tN(e,t),c.on("error",l=>{console.error("Worker error:",l),Li.error("Worker error:",l)}),c.on("exit",l=>{No.splice(No.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Bue?(t.unexpectedRestarts=c.unexpectedRestarts+1,tN(e,t)):Li.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{Ak[l.type]?.(l,c)}),No.push(c),Zue(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(tN,"startWorker");var Fue=[Ed.THREAD_TYPES.HTTP];async function aN(e=null,t=Math.max(gk>3,1),r=!0){if(sN){if(r){let{loadRootComponents:o}=Zp();await o()}yo.exports.restartNumber++,t<1&&(t=t*No.length);let n=[],s=[];for(let o of No.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Li.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:yo.exports.restartNumber,type:Ed.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Fue.indexOf(o.name)>-1,l=new Promise(_=>{let u=setTimeout(()=>o.terminate(),iN*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===vue.ITC_EVENT_TYPES.CHILD_STARTED&&(Li.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(u)),_.off("message",f))},"startListener");Li.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}=Ca();r&&(e==="http"||!e)&&fk.get(Ed.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Vs.postMessage({type:Hue,workerType:e})}a(aN,"restartWorkers");function kue(e,t){Ak[e]=t}a(kue,"setChildListenerByType");function $ue(e){return aN(e,1/0,!1)}a($ue,"shutdownWorkers");var Ok=[];function Vue(e){Ok.push(e)}a(Vue,"onMessageFromWorkers");var rN=new Map;function bk(e,t){let r=rN.get(e);r||rN.set(e,r=[]),r.push(t)}a(bk,"onMessageByType");var Yue=10;async function Kue(e){let t=0;for(let r of Vn)try{r.postMessage(e),t++>Yue&&(t=0,await new Promise(setImmediate))}catch(n){Li.error("Unable to send message to worker",n)}}a(Kue,"broadcast");var am=new Map,Wue=1;function Que(e){return new Promise(t=>{let r=0;for(let n of Vn)try{let s=Wue++,i=a(()=>{am.delete(s),--r===0&&t(),n!==Vs&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,am.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of am)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Li.error("Unable to send message to worker",s)}r===0&&t()})}a(Que,"broadcastWithAcknowledgement");function jue(e){e.postMessage({type:pk,workers:Nk()})}a(jue,"sendThreadInfo");function Nk(){let e=Date.now();return No.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(Nk,"getChildWorkerInfo");function zue(e,t){e.resources=t,e.resources.updated=Date.now()}a(zue,"recordResourceReport");var nN;function Jue(e){nN=e}a(Jue,"setMonitorListener");var Xue=1e3,uk=!1;function Zue(){uk||(uk=!0,setInterval(()=>{for(let e of No){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}nN&&nN()},Xue).unref())}a(Zue,"startMonitoring");var e_e=1e3;if(Vs){cm(Vs);for(let e=0,t=Di.addPorts.length;e<t;e++){let r=Di.addPorts[e];r.threadId=Di.addThreadIds[e],cm(r)}setInterval(()=>{let e=process.memoryUsage();Vs.postMessage({type:hk,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},e_e).unref(),eN=a(()=>new Promise((e,t)=>{Vs.on("message",r),Vs.postMessage({type:Ek});function r(n){n.type===pk&&(Vs.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else eN=Nk;yo.exports.getThreadInfo=eN;function cm(e,t){Vn.push(e),e.on("message",r=>{if(r.type===mk)r.port.threadId=r.threadId,cm(r.port);else if(r.type===Gue){let n=am.get(r.id);n&&n()}else{for(let s of Ok)s(r,e);let n=rN.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){Li.error(i)}}}).on("close",()=>{Vn.splice(Vn.indexOf(e),1)}).on("exit",()=>{Vn.splice(Vn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(cm,"addPort");if(sN){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await Pue(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(_k(n,i.name));try{for await(let{filename:i}of Lue(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await aN(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");yo.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Vs.on("message",async e=>{let{type:t}=e;t===Ed.ITC_EVENT_TYPES.SHUTDOWN&&(yo.exports.restartNumber=e.restartNumber,Vs.unref(),setTimeout(()=>{Li.warn("Thread did not voluntarily terminate",Iue),process.exit(0)},iN).unref())})});var dN={};Fe(dN,{startHTTPThreads:()=>r_e,startSocketServer:()=>Xb,updateWorkerIdleness:()=>Pk});async function r_e(e=2,t){if(t)lN(0,1,!0);else{let{loadRootComponents:n}=Zp();if(e===0)return(0,Io.setMainIsWorker)(!0),await Gb().startServers(),Promise.resolve([]);await n()}let r=(0,Ck.checkMemoryLimit)();r&&!process.env.DEV_MODE&&(console.error(r),setInterval(()=>{dm.notify(r)},t_e).unref());for(let n=0;n<e;n++)lN(n,e);return Promise.all(Lk)}function lN(e,t=1,r){if(cN++,(0,Io.startWorker)("server/threads/threadServer.js",{name:_m.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(_){_.type===_m.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});Lk.push(s),await s,hl.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=um.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=hl.indexOf(n);o>-1&&hl.splice(o,1)}if(a(i,"removeWorker"),pl){let o=pl;pl=[];for(let c of o)Dk[c.localPort](null,c)}}}),r){let n=setInterval(()=>{uN?uN=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Io.shutdownWorkers)(),cN=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function Xb(e=0,t){if(typeof e=="string")try{(0,fm.existsSync)(e)&&(0,fm.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=n_e:r=s_e(t):r=_N;let n=(0,ml.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=Dk[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),uN=!0,r(o,(c,l)=>{if(!c){if(yk){let u=o._socket||new ml.Socket({handle:o,writable:!0,readable:!0});yk.deliverSocket(u,e,l),u.resume()}else cN>0?(pl.length===0&&setTimeout(()=>{pl.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,pl.push(o)):(console.log("start up a dynamic thread to handle request"),lN(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 ml.Socket({handle:o,writable:!0,readable:!0});a_e(u,c,e)}un(!0,"socket-routed")})};let s=Fo();dm.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 _N(e,t){let r,n=0;for(let s of hl){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=lm)return lm=i,t(r);n=i}lm=0,t(r)}function n_e(e,t){let r={};e.getpeername(r);let n=r.address,s=Sl.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);_N(e,o=>{Sl.set(n,{worker:o,lastUsed:i}),t(o)})}function s_e(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new ml.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],_=Sl.get(l),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,s(_.worker);_N(n,d=>{Sl.set(l,{worker:d,lastUsed:u}),s(d,o)})})}a(r,"findByHeaderAffinity")}function Pk(){lm=0;for(let e of hl)e.expectedIdle=e.recentELU.idle+i_e,e.requests=1;hl.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function a_e(e,t,r){let n=o_e++;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(),um.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")),um.delete(n)),s.event=="destroy"&&(e.destroy(),um.delete(n))})}var Io,ml,_m,dm,fm,wk,Ck,hl,pl,Dk,yk,cN,Lk,t_e,uN,lm,Ik,Sl,i_e,um,o_e,im=Oe(()=>{Io=B(tt()),ml=require("net"),_m=B(C()),dm=B(x()),fm=require("fs");fi();wk=require("worker_threads"),Ck=B(la()),hl=[],pl=[],Dk=[],cN=0,Lk=[];wk.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});t_e=6e5;a(r_e,"startHTTPThreads");a(lN,"startHTTPWorker");a(Xb,"startSocketServer");lm=0;a(_N,"findMostIdleWorker");Ik=36e5,Sl=new Map;a(n_e,"findByRemoteAddressAffinity");a(s_e,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Sl)r.lastUsed+Ik<e&&Sl.delete(t)},Ik).unref();i_e=1e3;a(Pk,"updateWorkerIdleness");(0,Io.setMonitorListener)(Pk);um=new Map,o_e=1;a(a_e,"proxySocket")});var vk=g((Uye,Uk)=>{"use strict";var hm=X();hm.initSync();var Em=C(),{httpRequest:c_e}=K(),l_e=require("path"),Mk=require("fs-extra"),u_e=require("yaml"),__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};Uk.exports={cliOperations:f_e,buildRequest:d_e};function d_e(){let e={};for(let t of process.argv){if(__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(d_e,"buildRequest");async function f_e(e){await Mk.exists(l_e.join(hm.get(Em.CONFIG_PARAMS.ROOTPATH),Em.HDB_PID_FILE))||(console.error("HarperDB must be running to perform this operation"),process.exit()),await Mk.exists(hm.get(Em.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))||(console.error("No domain socket found, unable to perform this operation"),process.exit());try{let t=await c_e({method:"POST",protocol:"http:",socketPath:hm.get(Em.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(u_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(f_e,"cliOperations")});var EN=g((Bye,Bk)=>{"use strict";var hd=X();hd.initSync();var Tl=require("fs-extra"),fN=require("path"),gl=C(),E_e=require("crypto"),h_e=require("uuid").v4;Bk.exports=p_e;function p_e(){if(hd.getHdbBasePath()!==void 0){let e=fN.join(hd.getHdbBasePath(),gl.LICENSE_KEY_DIR_NAME,gl.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=fN.join(hd.getHdbBasePath(),gl.LICENSE_KEY_DIR_NAME,gl.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=fN.join(hd.getHdbBasePath(),gl.LICENSE_KEY_DIR_NAME,gl.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Tl.accessSync(r),Tl.accessSync(e),Tl.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=h_e(),i=E_e.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Tl.writeFileSync(r,s),Tl.writeFileSync(e,i.privateKey),Tl.writeFileSync(t,i.publicKey)}else throw n}}}a(p_e,"checkJWTTokenExist")});var Gk=g((Gye,Hk)=>{"use strict";var hN=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};Hk.exports={HdbInfoInsertObject:hN}});var Fk=g((xye,xk)=>{"use strict";var qk=C(),pN=class{static{a(this,"UpgradeObject")}constructor(t,r){this[qk.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[qk.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};xk.exports={UpgradeObject:pN}});var pm=g((kye,$k)=>{"use strict";var Yn=require("prompt"),Rl=require("chalk"),kk=x(),ms=require("os"),mN=qo(),SN=["yes","y"];async function m_e(e){let t=`${ms.EOL}`+Rl.bold.green("Your current HarperDB version requires that we complete an update process.")+`${ms.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${ms.EOL}${ms.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${ms.EOL}`;Yn.override=mN(["CONFIRM_UPGRADE"]),Yn.start(),Yn.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Rl.magenta(`${ms.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 Yn.get([r])}catch(s){return kk.error("There was an error when prompting user about an upgrade."),kk.error(s),!1}return SN.includes(n.CONFIRM_UPGRADE)}a(m_e,"forceUpdatePrompt");async function S_e(e){let t=`${ms.EOL}`+Rl.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.${ms.EOL}`);Yn.override=mN(["CONFIRM_DOWNGRADE"]),Yn.start(),Yn.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Rl.magenta(`${ms.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 Yn.get([r]);return SN.includes(n.CONFIRM_DOWNGRADE)}a(S_e,"forceDowngradePrompt");async function T_e(){let e=`${ms.EOL}`+Rl.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");Yn.override=mN(["GENERATE_CERTS"]),Yn.start(),Yn.message=e;let t={properties:{GENERATE_CERTS:{description:Rl.magenta(`${ms.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 Yn.get([t]);return SN.includes(r.GENERATE_CERTS)}a(T_e,"upgradeCertsPrompt");$k.exports={forceUpdatePrompt:m_e,forceDowngradePrompt:S_e,upgradeCertsPrompt:T_e}});var gN=g((Vye,Vk)=>{"use strict";var TN=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};Vk.exports=TN});var Kk=g((zye,Yk)=>{"use strict";var g_e=K(),R_e=lt(),Kye=x(),Wye=require("path"),Qye=require("fs"),jye=C();Yk.exports={getOldPropsValue:A_e};function A_e(e,t,r=!1){let n=t.getRaw(e);return g_e.isNotEmptyAndHasValue(n)?n:r?R_e.getDefaultConfig(e):""}a(A_e,"getOldPropsValue")});var zk=g((Xye,jk)=>{"use strict";var wo=require("path"),Co=require("fs-extra"),O_e=require("properties-reader"),b_e=gN(),Dt=x(),{getOldPropsValue:We}=Kk(),{HDB_SETTINGS_NAMES:ie,CONFIG_PARAMS:$a}=C(),Va=lt(),mm=X(),Wk=K(),Ys=C(),RN=new b_e("3.1.0"),Qk=[];function N_e(){let e=O_e(mm.get(ie.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.
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||fr.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){fr.info("Could not close debugger",i)}}}).ref();let e=[];if(px&&!_ce)for(let t in Vs){let r=Vs[t];if(isNaN(t)&&Sp()==0){rce(t)&&hx(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),fr.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(),fr.trace("Listening on port "+t,pp)}).on("error",i)}))}Promise.all(e).then(()=>{z_?.postMessage({type:Tt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(Nx,"startServers");gx||Nx();function ab(e,t,r){let n=e?.read?e:new Jae({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):(fr.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(ab,"deliverSocket");var Sx=new Map;function Ece(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=Sx.get(s),r){case"connection":i=ab(void 0,t),Sx.set(s,i),i.write=(c,l,_)=>(z_.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,l,_)=>(z_.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),z_.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(Ece,"proxyRequest");function cb(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(cb,"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 lb(e,t){for(let{port:r,secure:n}of yx(t))Ix(r,n,t?.isOperationsServer),typeof e=="function"?ib[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,cb(e,r,!1)),Tp[r]=ob(ib,r),dce=ob(fce,r)}a(lb,"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:ice(),maxHeaderSize:Le.get(Tt.CONFIG_PARAMS.HTTP_MAXHEADERSIZE)})}let c=lce();wo[e]=(t?tce:Zae)(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,g=E.body,R;if(!E.handlesHeaders){let U=E.headers||new Rx;g?g.length>=0&&(typeof g=="string"?U.set("Content-Length",Buffer.byteLength(g)):U.set("Content-Length",g.length),R=!0):(U.set("Content-Length","0"),R=!0);let v=`hdb;dur=${S.toFixed(2)}`;E.wasCacheMiss&&(v+=", miss"),ace(U,"Server-Timing",v,!0),_.writeHead(h,U&&(U[Symbol.iterator]?Array.from(U):U)),R&&_.end(g)}let A=f.handlerPath,P=f.method;if(j_(S,"duration",A,P,E.wasCacheMiss==null?void 0:E.wasCacheMiss?"cache-miss":"cache-hit"),cce(h<400,"success",A,P),!R)if(g?.pipe){g.pipe(_),g.destroy&&_.on("close",()=>{g.destroy()});let U=0;g.on("data",v=>{U+=v.length}),g.on("end",()=>{j_(performance.now()-m,"transfer",A,P),j_(U,"bytes-sent",A,P)})}else g?.then?g.then(U=>{_.end(U)},u):_.end(g)}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?fr.warn(d):fr.info(d):fr.error(d)}a(u,"onError")}),i&&(wo[e].mtlsConfig=i),t&&(wo[e].on("secureConnection",l=>{l._parent.startTime&&j_(performance.now()-l._parent.startTime,"tls-handshake",e),j_(l.isSessionReused(),"tls-reused",e)}),wo[e].isSecure=!0),cb(wo[e],e)}return wo[e]}a(Ix,"getHTTPServer");function ob(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(ob,"makeCallbackChain");function wx(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Rx}}a(wx,"unhandled");function hce(e,t){lb(e,{requestOnly:!0,...t})}a(hce,"onRequest");function pce(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=sce({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=Xae(e),Vs[t.port]=r),r}a(pce,"onSocket");Object.defineProperty(ece.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 mce(e,t){let r;for(let{port:n,secure:s}of yx(t)){mp[n]||(mp[n]=new nce({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=sb[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(_){fr.warn("Error handling WebSocket connection",_)}}),mp[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=sb[n];o||(o=sb[n]=[]),o.push({listener:e,protocol:i}),Tp[n]=ob(ib,n)}return r}a(mce,"onWebSocket");function Tx(e,t){t.writeHead(404),t.end(`Not found
33
+ `)}a(Tx,"defaultNotFound")});var Bx={};Fe(Bx,{startHTTPThreads:()=>Tce,startSocketServer:()=>Eb,updateWorkerIdleness:()=>vx});async function Tce(e=2,t){if(t)db(0,1,!0);else{let{loadRootComponents:n}=Rp();if(e===0)return(0,Co.setMainIsWorker)(!0),await ub().startServers(),Promise.resolve([]);await n()}let r=(0,Px.checkMemoryLimit)();r&&!process.env.DEV_MODE&&(console.error(r),setInterval(()=>{Np.notify(r)},Sce).unref());for(let n=0;n<e;n++)db(n,e);return Promise.all(Ux)}function db(e,t=1,r){if(_b++,(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(()=>{fb?fb=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Co.shutdownWorkers)(),_b=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function Eb(e=0,t){if(typeof e=="string")try{(0,yp.existsSync)(e)&&(0,yp.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=gce:r=Rce(t):r=hb;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()),fb=!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 _b>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"),db(0));cn(!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});bce(u,c,e)}cn(!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 hb(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 gce(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);hb(e,o=>{fl.set(n,{worker:o,lastUsed:i}),t(o)})}function Rce(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);hb(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+Ace,e.requests=1;ul.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function bce(e,t,r){let n=Oce++;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,_b,Ux,Sce,fb,Ap,Dx,fl,Ace,Op,Oce,pb=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=[],_b=0,Ux=[];Lx.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});Sce=6e5;a(Tce,"startHTTPThreads");a(db,"startHTTPWorker");a(Eb,"startSocketServer");Ap=0;a(hb,"findMostIdleWorker");Dx=36e5,fl=new Map;a(gce,"findByRemoteAddressAffinity");a(Rce,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of fl)r.lastUsed+Dx<e&&fl.delete(t)},Dx).unref();Ace=1e3;a(vx,"updateWorkerIdleness");(0,Co.setMonitorListener)(vx);Op=new Map,Oce=1;a(bce,"proxySocket")});var xx=T((TNe,qx)=>{"use strict";var Nce=require("cluster"),Fa=X();Fa.initSync();var Gx=D(),ENe=require("util"),Ui=x(),hNe=require("fs"),yce=require("fastify"),pNe=ha(),Ice=require("@fastify/cors"),wce=require("@fastify/compress"),Cce=require("@fastify/static"),Dce=SO(),Lce=require("path"),{PACKAGE_ROOT:Pce}=D(),Mce=Pn(),Uce=K(),vce=yr(),Bce=aa(),{server:Hce}=(Rr(),ie(Wo)),{node_request_key:mNe}=(hp(),ie(nb)),{authHandler:Gce,handlePostRequest:qce,serverErrorHandler:xce,reqBodyValidationHandler:Fce}=fp(),SNe=require("net"),{registerContentHandlers:kce}=(Wc(),ie(oG)),$ce=6e4,Vce=1024*1024*1024,Yce="TRUE",{CONFIG_PARAMS:J_}=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=Nce.isMaster,await Kce();let t=e.securePort>0;El=Wce(t),await El.ready(),e||(e={}),e.isOperationsServer=!0;try{Hce.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 Kce(){Ui.trace("Configuring HarperDB process."),Mce.setSchemaDataToGlobal(),await vce.setUsersToGlobal(),await Bce.getLicense()}a(Kce,"setUp");function Wce(e){Ui.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Qce(e),r=yce(t);r.server.headersTimeout=zce(),r.setErrorHandler(xce);let n=jce();n&&r.register(Ice,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,_){r.server.emit("unhandled",l.raw,_.raw)}),c()}),r.register(Dce),r.register(wce),r.register(Cce,{root:Lce.join(Pce,"studio/build-local")}),kce(r);let s=Fa.get(Gx.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Uce.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Fce,Gce],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),qce(i,o)}),r.get("/health",()=>"HarperDB is running."),Ui.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Wce,"buildServer");function Qce(e){let t=Fa.get(J_.OPERATIONSAPI_NETWORK_TIMEOUT),r=Fa.get(J_.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Vce,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Qce,"getServerOptions");function jce(){let e=Fa.get(J_.OPERATIONSAPI_NETWORK_CORS),t=Fa.get(J_.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Yce)&&(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(jce,"getCORSOpts");function zce(){return Fa.get(J_.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??$ce}a(zce,"getHeaderTimeoutConfig")});var Ab={};Fe(Ab,{disableNATS:()=>Xce,publishToStream:()=>Cp,setNATSReplicator:()=>mb,setPublishToStream:()=>Zce,setSubscription:()=>Rb,start:()=>Jce});function Jce(){X_.default.get(Z_.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&tle()}function Xce(e=!0){Yx=e}function Zce(e,t){Cp=e,Rb=t}function tle(){if(Yx||process.env._DISABLE_NATS)return;let e=wr(),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];mb(s,r,i)}}Ob((r,n)=>{mb(r.tableName,r.databaseName,r),n&&Wx(r)}),!Fx&&(Fx=!0)}function mb(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 Rb(t,e,i),i}static subscribeOnThisThread(i){return i<(X_.default.get(Z_.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??ele)}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=X_.default.get(Z_.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Cp(`${Tb.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,gb.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,Tb,gb,$x,Vx,X_,Z_,wp,Yx,Cp,Rb,ele,Kx,Fx,Ip,Sb,Qx=Oe(()=>{ge();es();kx=B(pt()),Tb=B(Xe()),gb=B(ui());jl();$x=B(Jg()),Vx=B(gr()),X_=B(X()),Z_=B(D()),wp=B(x());a(Jce,"start");a(Xce,"disableNATS");Cp=kx.publishToStream,Rb=$x.setSubscription;a(Zce,"setPublishToStream");ele=2;a(tle,"assignReplicationSource");a(mb,"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=X_.default.get(Z_.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(`${Tb.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,gb.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)}},Sb=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 Sb});async function Xx({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await bb.get(e,{returnNonexistent:!0});s=new Ib(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await bb.get(e);i&&i.delete()}s=new Lp(e,t)}return n&&(n.id=e,n.user={username:t?.username},ed.put(n)),s}function Nb(){return Dp++,Dp>65500&&(Dp=1),Dp}function yb(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,bb,ed,Dp,Lp,Ib,Zx=Oe(()=>{ge();A_();jx=B(gr()),Do=B(x());fa();zx=B(et()),Jx=B(ub());Rr();bb=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"}]}}]}),ed=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 ed.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await ct.getUser(r.user.username)),Ze(r,()=>{try{yb(r,t,r)}catch{(0,Do.warn)("Failed to publish will",t)}ed.delete(e.id,r)})}})();a(Xx,"getSession");Dp=1;a(Nb,"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(g=>g.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 g=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw g.statusCode=404,g}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let g=f.url.slice(1);if(g.indexOf("#")>-1&&g.indexOf("#")!==g.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,g.indexOf("+")===g.length-1)f.onlyChildren=!0,f.url="/"+g.slice(0,g.length-1);else{let R=g.split("/"),A;for(let v=0;v<R.length;v++)if(R[v].indexOf("+")>-1)if(R[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;R[R.length-1]==="#"&&(R.length--,P=!1),A&&(n=a(v=>{let k=v.id;if(!Array.isArray(k)||P&&k.length!==R.length)return!1;for(let H=0;H<R.length;H++)if(R[H]!=="+"&&R[H]!==k[H])return!1;return!0},"filter"));let U=R.indexOf("+");f.url="/"+(U>-1?R.slice(0,U):R).concat("").join("/")}}let h=E.path,m=E.Resource,S=await Ze(f,async()=>{let g=this.createContext();g.topic=s,g.retainHandling=i;let R=await m.subscribe(f,g);if(!R)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let A of R)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=Nb());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)}})(),R});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=Nb();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 yb(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 ed.get(this.sessionId);n?.doesExist()&&await yb(n,n.data,r)}await ed.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(yb,"publish");Ib=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=Nb(),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}}),bb.put(this.sessionRecord)}}});var Db={};Fe(Db,{bypassAuth:()=>rle,start:()=>nle});function rle(){nF=!0}function nle({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i,sessions:new Set},c,l=r?.mtls;return n&&(c=e.ws((_,u,d)=>{if(_.protocol==="mqtt"){En.debug("Received WSS 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=>{En.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let u;if(En.debug("Received connection for MQTT from",_.remoteAddress),l){if(_.authorized)try{let E=l.user;E!==null?((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),u=await e.getUser(E,null,null),(0,td.get)(hn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&wb.notify({username:u.username,status:hn.AUTH_AUDIT_STATUS.SUCCESS,type:hn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})):En.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(E){En.error(E)}else if(l.required)return En.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!u&&nF&&_.remoteAddress.includes("127.0.0.1")&&(u=await(0,rF.getSuperUser)(),En.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=>{En.info("Socket error",E)})},{port:t,securePort:s,mtls:l})),c}function tF(e,t,r,n,s){eF||(eF=!0,qu(d=>{Pp>0&&d.push({metric:"mqtt-connections",connections:Pp,byThread:!0})}));let i;Pp++;let o,c={protocolVersion:4},l=(0,Mp.parser)({protocolVersion:5});function _(d){l.parse(d)}a(_,"onMessage");function u(){Pp--,i||(i=!0,o?.disconnect(),s.sessions.delete(o),Un(!1,"connection","mqtt","disconnect"))}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,td.get)(hn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&wb.notify({username:n.username,status:hn.AUTH_AUDIT_STATUS.SUCCESS,type:hn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,td.get)(hn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&wb.error({username:n.username,status:hn.AUTH_AUDIT_STATUS.FAILURE,type:hn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return Un(!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 En.error(A),Un(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:A.code||5,returnCode:A.code||128})}Un(!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){En.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){En.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"))),g=d.payload?.length>0?S(d.payload):void 0,R;try{R=await o.publish(d,g)}catch(A){En.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:R===!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.sessions.delete(o),Un(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){En.error(h),f({cmd:"disconnect"})}function f(h,m){let S=(0,Mp.generate)(h,c);t(S),cn(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 Mp,rF,td,hn,Cb,wb,En,nF,eF,Pp,sF=Oe(()=>{Mp=require("mqtt-packet");Zx();rF=B(yr());Wc();pi();Rr();td=B(X()),hn=B(D()),Cb=B(x()),wb=(0,Cb.loggerWithTag)("auth-event"),En=(0,Cb.loggerWithTag)("mqtt"),nF=(0,td.get)(hn.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(rle,"bypassAuth");a(nle,"start");Pp=0;a(tF,"onSocket")});var Ih={};Fe(Ih,{component_errors:()=>pl,loadComponent:()=>Up,loadComponentDirectories:()=>fF,setErrorReporter:()=>ale});function fF(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(Up(c,Pb,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Up(n,Pb,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{dF=!0})}function ale(e){nd=e}async function Up(e,t,r,n,s,i){if(!oF.has(e)){oF.set(e,!0),s&&(Mb=s);try{let o;n&&(pl=new Map);let c=(0,wt.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,ps.existsSync)(c)?o=n?(0,_F.getConfigObj)():(0,aF.parseDocument)((0,ps.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=Ub;let l=[],_=n;for(let u in o){let d=o[u];if(pl.set(n?u:(0,wt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let R=e,A;for(;!(0,ps.existsSync)(A=(0,wt.join)(R,"node_modules",u));)if(R=(0,wt.dirname)(R),R.length<(0,uF.getHdbBasePath)().length){A=null;break}if(A)f=await Up(A,t,r,!1),_=!0;else throw new Error(`Unable to find package ${u}:${E}`)}else f=ole[u];if(!f)continue;l.push(f);let h=a(R=>(R.origin=r,Et(R)),"ensureTable"),m=d.network||(d.port||d.securePort)&&d,S=m?.securePort||m?.https&&m.port,g=!m?.https&&m?.port;if(hl.isMainThread&&(f=await f.startOnMainThread?.({server:ct,ensureTable:h,port:g,securePort:S,resources:t,...d})||f,n&&m))for(let R of[g,S])try{if(+R&&!iF.includes(R)){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)&&(iF.push(R),Eb(R,A))}}catch(A){console.error("Error listening on socket",R,A,u)}if(t.isWorker&&(f=await f.start?.({server:ct,ensureTable:h,port:g,securePort:S,resources:t,...d})||f),Mb.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,lF.handleHDBError)("Can not reference parent directories");let R=(0,wt.join)(e,d.files).replace(/\\/g,"/"),A=R.indexOf("/*");if(A>-1&&d.files!==Ub[u]?.files&&!(0,ps.existsSync)(R.slice(0,A)))throw new Error(`The path '${R.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=R.indexOf("/*"))>-1&&(k=R.slice(0,H+1),v=(0,wt.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,cF.default)(R,{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 ile(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,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,ml.getWorkerIndex)()===0?console:rd.default).error(h),t.set(d.path||"/",new sd(h),null,!0),pl.set(n?u:(0,wt.basename)(e),h.message)}}if(hl.isMainThread&&!dF&&i&&(0,ml.watchDir)(e,async()=>fF()),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,ml.getWorkerIndex)()===0?console:rd.default).error(u),pl.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,hl,aF,vb,Bb,cF,ml,rd,lF,uF,sle,_F,ile,Lb,Mb,dF,Pb,pl,ole,Ub,iF,oF,nd,sd,wh=Oe(()=>{ps=require("fs"),wt=require("path"),hl=require("worker_threads"),aF=require("yaml"),vb=B(X()),Bb=B(D());pI();gI();RI();gG();ax();fx();cF=B(require("fast-glob")),ml=B(et()),rd=B(x());fS();Rr();lF=B(oe());es();ge();pb();uF=B(X()),sle=B(xx());Th();Qx();sF();_F=B(ut());hp();({readFile:ile}=ps.promises),Lb=vb.get(Bb.CONFIG_PARAMS.COMPONENTSROOT),Mb=new Map,pl=new Map;a(fF,"loadComponentDirectories");ole={REST:Yh,rest:Yh,graphqlSchema:dS,jsResource:hS,fastifyRoutes:XO,login:mS,static:ZO,operationsApi:sle,customFunctions:{},http:{},clustering:Ab,authentication:b_,mqtt:Db},Ub={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(Ub,"static",{value:{files:"web/**"}});iF=[],oF=new Map;a(ale,"setErrorReporter");a(Up,"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((jNe,hF)=>{var{isMainThread:EF}=require("worker_threads"),{getTables:cle}=(ge(),ie(ke)),{loadComponentDirectories:lle,loadComponent:ule}=(wh(),ie(Ih)),{resetResources:_le}=(A_(),ie(CB)),dle=PA(),fle=ut(),{dirname:Ele}=require("path"),{getConnection:hle}=pt(),ple=X(),mle=D(),Hb=new Map;async function Sle(e=!1){!EF&&ple.get(mle.CONFIG_PARAMS.CLUSTERING_ENABLED)&&hle();try{EF&&await dle()}catch(n){console.error(n)}let t=_le();cle(),t.isWorker=e,await ule(Ele(fle.getConfigFilePath()),t,"hdb",!0,Hb),await lle(Hb,t);let r=[];for(let[n]of Hb)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(Sle,"loadRootComponents");hF.exports.loadRootComponents=Sle});var et=T((JNe,Po)=>{"use strict";var{Worker:Tle,MessageChannel:gle,parentPort:Ys,isMainThread:kb,threadId:Rle,workerData:vi}=require("worker_threads"),{PACKAGE_ROOT:Ale}=D(),{join:TF,isAbsolute:Ole,extname:ble}=require("path"),{server:gF}=(Rr(),ie(Wo)),{watch:Nle,readdir:yle}=require("fs/promises"),{totalmem:pF}=require("os"),id=D(),RF=X(),Bi=x(),{randomBytes:Ile}=require("crypto"),{_assignPackageExport:wle}=require("../index"),Cle=D(),mF=1024*1024,Lo=[],kn=[],Dle=50,$b=1e4,Lle="restart",AF="request_thread_info",OF="resource_report",bF="thread_info",NF="added-port",Ple="ack",Gb;wle("threads",kn);Po.exports={startWorker:qb,restartWorkers:Yb,shutdownWorkers:Hle,workers:Lo,setMonitorListener:Yle,onMessageFromWorkers:Gle,onMessageByType:PF,broadcast:xle,broadcastWithAcknowledgement:kle,setChildListenerByType:Ble,getWorkerIndex:yF,getWorkerCount:IF,getTicketKeys:CF,setMainIsWorker:Ule,setTerminateTimeout:Mle,restartNumber:vi?.restartNumber||1};kn.onMessageByType=PF;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 Mle(e){$b=e}a(Mle,"setTerminateTimeout");function yF(){return vi?vi.workerIndex:Vb?0:void 0}a(yF,"getWorkerIndex");function IF(){return vi?vi.workerCount:Vb?1:void 0}a(IF,"getWorkerCount");function Ule(e){Vb=e}a(Ule,"setMainIsWorker");var wF=1,vp;function CF(){return vp||(vp=kb?Ile(48):vi.ticketKeys,vp)}a(CF,"getTicketKeys");Object.defineProperty(gF,"workerIndex",{get(){return yF()}});Object.defineProperty(gF,"workerCount",{get(){return IF()}});var DF={[AF](e,t){$le(t)},[OF](e,t){Vle(t,e)}};function qb(e,t={}){let r=process.constrainedMemory?.()||pF();r=Math.min(r,pF(),2e4*mF);let n=RF.get(id.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/mF/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of kn){let _=new gle;_.existingPort=l,i.push(_),o.push(_.port2)}ble(e)||(e+=".js");let c=new Tle(Ole(e)?e:TF(Ale,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:wF=t.threadCount,name:t.name,restartNumber:Po.exports.restartNumber,ticketKeys:CF()},transferList:o},t));for(let{port1:l,existingPort:_}of i)_.postMessage({type:NF,port:l,threadId:c.threadId},[l]);return Hp(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<Dle?(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=>{DF[l.type]?.(l,c)}),Lo.push(c),Wle(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(qb,"startWorker");var vle=[id.THREAD_TYPES.HTTP];async function Yb(e=null,t=Math.max(wF>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=vle.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===Cle.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)&&RF.get(id.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Ys.postMessage({type:Lle,workerType:e})}a(Yb,"restartWorkers");function Ble(e,t){DF[e]=t}a(Ble,"setChildListenerByType");function Hle(e){return Yb(e,1/0,!1)}a(Hle,"shutdownWorkers");var LF=[];function Gle(e){LF.push(e)}a(Gle,"onMessageFromWorkers");var xb=new Map;function PF(e,t){let r=xb.get(e);r||xb.set(e,r=[]),r.push(t)}a(PF,"onMessageByType");var qle=10;async function xle(e){let t=0;for(let r of kn)try{r.postMessage(e),t++>qle&&(t=0,await new Promise(setImmediate))}catch(n){Bi.error("Unable to send message to worker",n)}}a(xle,"broadcast");var Bp=new Map,Fle=1;function kle(e){return new Promise(t=>{let r=0;for(let n of kn)try{let s=Fle++,i=a(()=>{Bp.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,Bp.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of Bp)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Bi.error("Unable to send message to worker",s)}r===0&&t()})}a(kle,"broadcastWithAcknowledgement");function $le(e){e.postMessage({type:bF,workers:MF()})}a($le,"sendThreadInfo");function MF(){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(MF,"getChildWorkerInfo");function Vle(e,t){e.resources=t,e.resources.updated=Date.now()}a(Vle,"recordResourceReport");var Fb;function Yle(e){Fb=e}a(Yle,"setMonitorListener");var Kle=1e3,SF=!1;function Wle(){SF||(SF=!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()},Kle).unref())}a(Wle,"startMonitoring");var Qle=1e3;if(Ys){Hp(Ys);for(let e=0,t=vi.addPorts.length;e<t;e++){let r=vi.addPorts[e];r.threadId=vi.addThreadIds[e],Hp(r)}setInterval(()=>{let e=process.memoryUsage();Ys.postMessage({type:OF,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Qle).unref(),Gb=a(()=>new Promise((e,t)=>{Ys.on("message",r),Ys.postMessage({type:AF});function r(n){n.type===bF&&(Ys.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else Gb=MF;Po.exports.getThreadInfo=Gb;function Hp(e,t){kn.push(e),e.on("message",r=>{if(r.type===NF)r.port.threadId=r.threadId,Hp(r.port);else if(r.type===Ple){let n=Bp.get(r.id);n&&n()}else{for(let s of LF)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(Hp,"addPort");if(kb){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await yle(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(TF(n,i.name));try{for await(let{filename:i}of Nle(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",Rle),process.exit(0)},$b).unref())})});var NP={};Fe(NP,{AUDIT_STORE_OPTIONS:()=>_h,createAuditEntry:()=>of,openAuditStore:()=>Fp,readAuditEntry:()=>kt,setAuditRetention:()=>zle,transactionKeyEncoder:()=>kF});function Fp(e){let t=e.auditStore=e.openDB(qF.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=Gp){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>=jle){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,xp.getWorkerIndex)()===(0,xp.getWorkerCount)()-1&&s(Gp),t}function zle(e,t=Gp){Kb=e,Gp=t}function of(e,t,r,n,s,i,o){let c=$F[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let l=1;n&&(n>1?Sl.setFloat64(0,n):$n.set(MS),l=9),f(0),f(t),d(r),Sl.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,Tl.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),Sl.setUint16(h,m|32768),l++):$n[h]=m}function f(E){E<128?$n[l++]=E:E<16384?(Sl.setUint16(l,E|32768),l+=2):E<1056964608?(Sl.setUint32(l,E|3221225472),l+=4):($n[l]=255,Sl.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:$F[n&7],tableId:i,get recordId(){return GF(e,c,l)},version:_,previousLocalTime:r,get user(){return d>u?GF(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 GF(e,t,r){let n=e.subarray(t,r);return(0,Tl.readKey)(n,0,r-t)}var Tl,qp,qF,xF,xp,FF,Jb,$n,Sl,kF,_h,Kb,jle,Gp,Wb,Qb,UF,jb,vF,BF,HF,$F,zb,Zi=Oe(()=>{Tl=require("ordered-binary"),qp=B(X()),qF=B(at()),xF=B(D()),xp=B(et()),FF=B(K());ru();Jb=B(x());kp();(0,qp.initSync)();$n=Buffer.alloc(1024),Sl=new DataView($n.buffer,$n.byteOffset,1024),kF={writeKey(e,t,r){return e===tu?(t.set(tu,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)}},_h={encoding:"binary",keyEncoder:kF},Kb=(0,FF.convertToMS)((0,qp.get)(xF.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,jle=1e3,Gp=1e4;a(Fp,"openAuditStore");a(zle,"setAuditRetention");Wb=16,Qb=32,UF=1,jb=2,vF=3,BF=4,HF=5,$F={put:UF|Wb,[UF]:"put",delete:jb,[jb]:"delete",message:vF|Wb,[vF]:"message",invalidate:BF,[BF]:"invalidate",patch:HF|Qb,[HF]:"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(GF,"readKeySafely")});var Zb={};Fe(Zb,{add:()=>$p,applyReverse:()=>VF,getRecordAtTime:()=>Xb,rebuildUpdateBefore:()=>Vp});function $p(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function Vp(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,$p(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function VF(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=Jle[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=YF}}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":VF(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let l in s)s[l]===YF&&(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 Jle,YF,kp=Oe(()=>{Zi();a($p,"add");$p.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};Jle={add:$p};a(Vp,"rebuildUpdateBefore");a(VF,"applyReverse");YF={};a(Xb,"getRecordAtTime")});function pn(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 Vn.ClientError(`${c} must be a string, attempt to assign ${u}`);pn(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}`);pn(this)[c]=u},"set");break;case"Float":case"Number":l=a(function(u){if(!(typeof u=="number"||u==null&&o.nullable!==!1))throw new Vn.ClientError(`${c} must be a number, attempt to assign ${u}`);pn(this)[c]=u},"set");break;case"Int":l=a(function(u){if(!(u>>0===u||u==null&&o.nullable!==!1))if(typeof u=="number"&&Math.abs((u>>0)-u)<=1)u=Math.round(u);else throw new Vn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${u}`);pn(this)[c]=u},"set");break;case"Long":l=a(function(u){if(!(Math.round(u)===u&&Math.abs(u)<=9007199254740992||u==null&&o.nullable!==!1))if(typeof u=="number"&&Math.abs(u)<=9007199254740992)u=Math.round(u);else throw new Vn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${u}`);pn(this)[c]=u},"set");break;case"BigInt":l=a(function(u){if(!(typeof u=="bigint"||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=BigInt(u);else throw new Vn.ClientError(`${c} must be a number, attempt to assign ${u}`);pn(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}`);pn(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}`);pn(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}`);pn(this)[c]=u},"set");break;case"Any":case void 0:l=a(function(u){pn(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}`);pn(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=WF(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");pn(this)[o]=c}),i("deleteProperty",function(o){pn(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 WF(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 Yp(e);case Array:let n=new Wp(e.length);n[fe]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=WF(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(KF.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):KF.call(e,fe)?e[fe]:e}function Kp(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(Kp(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(Kp(s))return!0}else return!0}else return!0}}return!1}var Vn,Gt,Yp,KF,ka,Wp,Qp,rE=Oe(()=>{es();Vn=B(oe());kp();Gt=Symbol("own-data");a(pn,"getChanges");a(jp,"assignTrackedAccessors");a(WF,"trackObject");Yp=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(Yp,{});a(tE,"collapseData");KF=Object.prototype.hasOwnProperty;a($a,"deepFreeze");a(Kp,"hasChanges");ka=Symbol.for("has-array-changes"),Wp=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()}};Wp.prototype.constructor=Array;Qp=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var ag={};Fe(ag,{CONTEXT:()=>Ie,ID_PROPERTY:()=>Ue,IS_COLLECTION:()=>Yn,RECORD_PROPERTY:()=>fe,Resource:()=>Jt,snake_case:()=>Zle,transformForSelect:()=>Jp});function Zle(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function QF(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 mn(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 zp(o.user);return typeof u?.then=="function"?u.then(S=>e(E,l,o,S)):e(E,l,o,u)});if(!h)throw new zp(o.user)}return typeof u?.then=="function"?u.then(h=>e(E,l,o,h)):e(E,l,o,u)}a(f,"authorizeActionOnResource")}}function Sn(e,t){let r=new JF.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 Jp(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]=Jp(c.select||c,u)}let _=o(c.name);return l(_)}else return o(c);else return c}}a(i,"handleProperty")}var jF,zF,JF,Ie,Ue,Yn,fe,Xle,Jt,zp,od,tN,es=Oe(()=>{jF=require("crypto");jl();zF=require("../index"),JF=B(oe());rE();fa();$h();Ie=Symbol.for("context"),Ue=Symbol.for("primary-key"),Yn=Symbol("is-collection"),fe=Symbol("stored-record"),Xle={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=mn(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 _=Jp(l,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=mn(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):Sn(t,"put")},{hasContent:!0,type:"update"});static patch=mn(function(t,r,n,s){return t.patch?t.patch(s,r):Sn(t,"patch")},{hasContent:!0,type:"update"});static delete=mn(function(t,r,n,s){return t.delete?t.delete(r):Sn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,jF.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):Sn(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=mn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Sn(t,"delete")},{hasContent:!1,type:"update"});static post=mn(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=mn(function(t,r,n,s){return t.connect?t.connect(s,r):Sn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=mn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Sn(t,"subscribe")},{type:"read"});static publish=mn(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.publish?t.publish(s,r):Sn(t,"publish")},{hasContent:!0,type:"create"});static search=mn(function(t,r,n,s){let i=t.search?t.search(r):Sn(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=Jp(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=mn(function(t,r,n,s){return t.search?t.search(s,r):Sn(t,"search")},{hasContent:!0,type:"read"});static copy=mn(function(t,r,n,s){return t.copy?t.copy(s,r):Sn(t,"copy")},{type:"create"});static move=mn(function(t,r,n,s){return t.move?t.move(s,r):Sn(t,"move")},{type:"delete"});post(t){if(this[Yn])return this.constructor.create(this[Ue],t,this[Ie]);Sn(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&&Xle[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:QF(t,this),isCollection:od}}let i=QF(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,zF._assignPackageExport)("Resource",Jt);a(Zle,"snake_case");zp=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(QF,"pathToId");tN=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(mn,"transactional");a(Sn,"missingMethod");a(eN,"selectFromObject");a(Jp,"transformForSelect")});function ZF(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;gl||((0,Xp.onMessageByType)(XF,u=>{ek(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=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 ek(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=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 tk(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,Xp.broadcast)({type:XF,path:s}),ek(s,!0)})}}var rN,Xp,XF,gl,Tye,nN,rk=Oe(()=>{rN=B(x()),Xp=B(et());jl();A_();Zi();XF="transaction",Tye=Buffer.alloc(4096);a(ZF,"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(ek,"notifyFromTransactionData");a(tk,"listenToCommits")});var vO={};Fe(vO,{coerceType:()=>Zp,makeTable:()=>rm,setServerUtilities:()=>cue,updateResource:()=>em});function rm(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=[]),tk(i,l);let g=BS(i,n,l),R=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,km,$m,kV=i.getRange({start:!1,end:!1}).constructor,$V=10,VV=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,$,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)});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){Ul(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 Vm(p,O,{transaction:y},b,M=>{if(M?em(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 $=Ym(p,M,O,N);if($)return L?.disregardReadTxn(),N[sN]=!0,oN($,C=>(em(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=Ym(this[Ue],this[Tn],this[Ie]);if(p)return this[sN]=!0,oN(p,O=>{this[Tn]=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,Wm()}static enableAuditing(p=!0){h=p,p&&cy(),Je.audit=p}static coerceId(p){return p===""?null:Zp(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")this[ad]===sk?this.set(p,(+this.getProperty(p)||0)+O):(this[ad]||this.update(),this.set(p,new Qp(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];Ul(I),Jn(this[Ie]).addWrite({key:I,store:i,invalidated:!0,entry:this[Tn],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);g(I,y,this[Tn],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 g(p,L,b,I,ld,null,null,0,null,!0)}return i.ifVersion(p,I,()=>{xd(p,O,null)}),h?g(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,uk.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];Ul(L);let y=this[Tn];this[ad]=O?sk:iue;let M={key:L,store:i,entry:y,nodeName:N?.nodeName,validate:$=>{p||(p=this[Gt]),O||p&&Kp(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[Tn]=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=Vp(ae,Ne)}else if(Z.type==="put"||Z.type==="delete")return}else if($e===$)return;le=Z.previousLocalTime}}else{if(O)return;ae=Vp(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";g(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];Ul(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),em(this,L)),!(L?.version>b)&&(xd(this[Ue],M),st.trace("Write delete entry",I,b),h||m?(g(I,null,this[Tn],b,0,h,this[Ie],0,"delete"),h||Wm()):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,wn=jt==null?U:Di(S,jt);if(wn){if(qe){let bs=ds(jt),zt=Os[bs];zt?(zt.push(Qe),Wi=!0):Os[bs]=[Qe]}(wn.type||aO[Qe.comparator])&&(Qe[1]===void 0?Qe.value=$(Qe.value,wn):Qe[1]=$(Qe[1],wn))}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],wn=jt.length;if(wn>1)for(let bs=0;bs<wn;bs++){let zt=jt[bs];if(zt.comparator==="ge"||zt.comparator==="greater_than_equal")for(let Qi=0;Qi<wn;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<wn;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,lk.sortBy)(Z,Fh(Je)):Z}a(M,"orderConditions");function $(Z,Ne){return Array.isArray(Z)?Z.map(qe=>Zp(qe,Ne)):Zp(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=cO(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 kV;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=Km(qe,ne.attribute,N),Qe=Km(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=Km(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=>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(C!=null){if(km=C,G=C.value||C.deref?.(),!G&&(C.key===void 0||C.deref)){if(C=Vm(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=Ym(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](),wn=a(zt=>{for(;!zt.done;){if(zt?.then)return zt.then(wn);Qe.push(zt.value),zt=jt.next()}Be(Qe,le)},"nextValue"),bs=wn(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=ZF(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||ak(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||ak(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[Tn]?.localTime;if(y===vS&&(i.cache?.delete(N),this[Tn]=i.getEntry(N),st.trace("re-retrieved record",y,this[Tn]?.localTime),y=this[Tn]?.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;Ul(N);let b=this[Ie];I.addWrite({key:N,store:i,entry:this[Tn],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&&Wm(),g(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(ck)):$.filter(ck):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`)}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 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 YV=Je.prototype;return YV[sue]=!0,f&&Je.setTTLExpiration(f/1e3),j&&KV(),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)&&nk){let ae=G.concat(C).map(Te=>({key:Te,value:W}));b.prefetch(ae,ok)}for(let ae=0,Te=G.length;ae<Te;ae++)b.remove(G[ae],W)}else C?.length>0&&nk&&b.prefetch(C.map(q=>({key:q,value:W})),ok);if(C)for(let q=0,ae=C.length;q<ae;q++)b.put(C[q],W)}return I}a(xd,"updateIndices");function Ul(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>ik)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,oue,0)>ik)throw new Error("Primary key size is too large: "+W.length);return!0}a(Ul,"checkValidId");function Vm(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>VV&&(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<$V&&Ee++}a(M,"prefetch");function $(){try{L(b())}catch(C){y(C)}}a($,"load")})}a(Vm,"loadLocalRecord");function Fd(W){if(!W?.role)return;let p=W.role.permission;if(p.super_user)return aue;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 Ym(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,Un(!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(Ym,"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 Km(W,p,O){if(!W)return;km=W;let I=W.value||W.deref?.()||(km=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(Km,"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 Vm(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)},nue)});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(cn(Z,"cache-resolution",s),$&&CA($,"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),g(W,te,Z,ne,0,h&&Be||null,M,M.expiresAt,"put",!!le)):(Ge.delete?.(M,W),h||m?g(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 Wm(){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+rue<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(Wm,"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 KV(){(0,Ya.getWorkerIndex)()===0&&setInterval(async()=>{if(!$m){$m=!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{$m=!1}}},tue).unref()}a(KV,"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 ok(){}function cue(e){uk=e}function Zp(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"?(typeof e!="number"&&!lue.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,tm.autoCast)(e):e}function ak(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 em(e,t){e[Tn]=t,e[fe]=t?.value??null,e[_d]=t?.version}function ck(e){return e!=null}function ms(e){try{return JSON.stringify(e)}catch{return e}}var Ss,Va,dd,lk,hd,Kn,fd,Ed,st,Ka,Ya,tm,eue,uk,tue,rue,nk,nue,_d,sue,Tn,ad,sk,iue,sN,Rl,cd,ld,oue,ik,aue,Hye,lue,ud,np=Oe(()=>{Ss=B(D()),Va=require("lmdb"),dd=B(gr()),lk=require("lodash");es();Cg();hd=B(X());rk();Kn=B(oe()),fd=B(di()),Ed=B(is());ge();$h();st=B(x());rE();fa();Ka=require("ordered-binary"),Ya=B(et());Zi();tm=B(K());ru();pi();kp();O_();eue=new Uint8Array(9);eue[8]=192;tue=6e4,rue=864e5;hd.initSync();nk=hd.get(Ss.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),nue=1e4,_d=Symbol.for("version"),sue=Symbol.for("incremental-update"),Tn=Symbol("entry"),ad=Symbol("is-saving"),sk=1,iue=2,sN=Symbol("loaded-from-source"),Rl={isNotification:!0,ensureLoaded:!1},cd=1,ld=8,oue=Buffer.allocUnsafeSlow(8192),ik=1978,aue={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},Hye=(0,tm.convertToMS)(hd.get(Ss.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(rm,"makeTable");a(iN,"attributesAsObject");a(ok,"noop");a(cue,"setServerUtilities");lue=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Zp,"coerceType");a(ak,"isDescendantId");ud=a(()=>new Promise(setImmediate),"rest");a(oN,"when");a(em,"updateResource");a(ck,"exists");a(ms,"stringify")});var ke={};Fe(ke,{database:()=>Pu,databases:()=>lt,dropDatabase:()=>Ug,dropTableMeta:()=>Eue,getDatabases:()=>wr,getDefaultCompression:()=>dh,getTables:()=>uue,onUpdatedTable:()=>Ob,readMetaDb:()=>pd,resetDatabases:()=>p_,table:()=>Et,tables:()=>Xr});function uue(){return am||wr(),Xr||{}}function wr(){if(am)return lt;am=!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,gn.existsSync)(e)?e:(0,it.join)((0,gt.getHdbBasePath)(),qt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,gn.existsSync)(e))for(let r of(0,gn.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,gn.existsSync)((0,Ol.getBaseSchemaPath)())){for(let r of(0,gn.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,gn.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,gn.existsSync)(s))for(let o of(0,gn.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,gn.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 Xr)delete Xr[s];delete Xr[lm]}}return bl=null,lt}}function p_(){am=!1;for(let[,e]of Mo)e.needsDeletion=!0;wr();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,sm.open)(i),Mo.set(e,o));let c=new Wa.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(nm.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,gn.existsSync)(n)&&(i.path=n,_=(0,sm.open)(i),_.isLegacy=!0):_=Fp(o));let u=Ek(r),d=u[lm],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 g=f.get(m);g||f.set(m,g={attributes:[]}),(S==null||h.is_hash_attribute)&&(g.primary=h),S!=null&&g.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 g=u[E],R={},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(g)R=g.indices,A=g.attributes,g.schemaVersion++;else{P=S.tableId,P?P>=(l.get(Al)||0)&&l.putSync(Al,P+1):(S.tableId=P=l.get(Al),P||(P=1),l.putSync(Al,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)||fk;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(!R[J.name]){let ue=new Wa.default(!J.is_hash_attribute,J.is_hash_attribute);R[J.name]=o.openDB(J.key,ue),R[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,R,Se)}}if(!g){g=hk(u,E,rm({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:R,attributes:m,schemaDefined:S.schemaDefined,dbisDB:l})),g.schemaVersion=1;for(let J of uN)J(g)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Ek(e){let t=lt[e];if(t||(e==="data"?t=lt[e]=Xr: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[lm]=r,bl.set(e,r)}return t}function hk(e,t,r){return e[t]=r,r}function Pu({database:e,table:t}){e||(e=lN),wr();let r=Ek(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,gn.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,sm.open)(l),Mo.set(o,c)}return c}async function Ug(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 cm.remove(s.path))}if(e==="data"){for(let r in Xr)delete Xr[r];delete Xr[lm]}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=Pu({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,g;_==null&&(_=!0);let R=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=Fp(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,g=d.dbisDb=d.openDB(nm.INTERNAL_DBIS_NAME,R),J.tableId=g.get(Al),J.tableId||(J.tableId=1),g.putSync(Al,J.tableId+1),m.tableId=J.tableId,E=hk(f,e,rm({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:g})),E.schemaVersion=1,A=!0,k(),g.put(z,m)}S=E.indices,g=g||(d.dbisDb=d.openDB(nm.INTERNAL_DBIS_NAME,R)),E.dbisDB=g;let U=[];for(let{key:H,value:j}of g.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,g.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=g.get(j);if(H.isPrimaryKey){if(z=z||g.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(),g.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=g.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))),g.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(),g.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=fue(E,v,U):A&&im.signalSchemaChange(new om.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 fue(e,t,r){try{let n=e.schemaVersion;await im.signalSchemaChange(new om.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,_k.getIndexedValues)(u[h]);if(m)for(let S=0,g=m.length;S<g;S++)E.dbi.put(m[S],_)}}),s.then(()=>l--,f=>{l--,Wn.error(f)}),md.workerData&&md.workerData.restartNumber!==dk.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}l>_ue?await s:l>due&&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 im.signalSchemaChange(new om.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){Wn.error("Error in indexing",n)}}function Eue({table:e,database:t}){let r=Pu({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 Ob(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)||fk,n={startingOffset:32};return t&&(n.dictionary=cm.readFileSync(t)),r&&(n.threshold=r),e&&n}var gt,nm,sm,it,gn,Ol,Wa,aN,qt,cm,cN,_k,im,om,md,Wn,dk,lN,lm,fk,Xr,lt,Al,uN,am,Mo,bl,_ue,due,ge=Oe(()=>{gt=B(X()),nm=B(at()),sm=require("lmdb"),it=require("path"),gn=require("fs"),Ol=B(je());np();Wa=B(nu()),aN=B(su()),qt=B(D()),cm=B(require("fs-extra")),cN=require("../index"),_k=B(gr()),im=B(di()),om=B(is()),md=require("worker_threads"),Wn=B(x()),dk=B(et());Zi();ru();lN="data",lm=Symbol("defined-tables"),fk=((0,gt.get)(qt.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,gt.initSync)();Xr=Object.create(null),lt=Object.create(null);(0,cN._assignPackageExport)("databases",lt);(0,cN._assignPackageExport)("tables",Xr);Al=Symbol.for("next-table-id"),uN=[],Mo=new Map;a(uue,"getTables");a(wr,"getDatabases");a(p_,"resetDatabases");a(pd,"readMetaDb");a(Ek,"ensureDB");a(hk,"setTable");a(Pu,"database");a(Ug,"dropDatabase");a(Et,"table");_ue=1e3,due=10;a(fue,"runIndexing");a(Eue,"dropTableMeta");a(Ob,"onUpdatedTable");a(dh,"getDefaultCompression")});var K=T((Kye,Ck)=>{"use strict";var Uo=require("path"),gk=require("fs-extra"),$r=x(),pk=require("fs-extra"),um=require("os"),hue=require("net"),pue=require("recursive-iterator"),ft=D(),mue=oS(),mk=require("papaparse"),_m=require("moment"),{inspect:Sue}=require("util"),Sk=require("is-number"),Yye=require("lodash"),Tue=require("minimist"),gue=require("https"),Rue=require("http"),{hdb_errors:dm}=oe(),Aue=/^((\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)))$/,Rk=require("util").promisify(setTimeout),Oue=100,bue=5,Nue="",yue=4,Tk={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Ck.exports={isEmpty:Rn,isEmptyOrZeroLength:Ks,arrayHasEmptyValues:Cue,arrayHasEmptyOrZeroLengthValues:Due,buildFolderPath:Lue,isBoolean:Ak,errorizeMessage:Iue,stripFileExtension:Mue,autoCast:Uue,autoCastJSON:Ok,autoCastJSONDeep:dN,removeDir:vue,compareVersions:Bue,isCompatibleDataVersion:Hue,escapeRawValue:Gue,unescapeValue:que,stringifyProps:xue,timeoutPromise:kue,isClusterOperation:Vue,getClusterUser:Kue,checkGlobalSchemaTable:Yue,getHomeDir:Nk,getPropsFilePath:Fue,promisifyPapaParse:Wue,removeBOM:yk,createEventPromise:Que,checkProcessRunning:jue,checkSchemaTableExist:zue,checkSchemaExists:Ik,checkTableExists:wk,getStartOfTomorrowInSeconds:Jue,getLimitKey:Xue,isObject:Pue,isNotEmptyAndHasValue:wue,autoCasterIsNumberCheck:bk,backtickASTSchemaItems:Zue,isPortTaken:$ue,createForkArgs:e_e,autoCastBoolean:t_e,async_set_timeout:Rk,getTableHashAttribute:r_e,doesSchemaExist:n_e,doesTableExist:s_e,stringifyObj:i_e,ms_to_time:o_e,changeExtension:a_e,getEnvCliRootPath:fN,noBootFile:c_e,httpRequest:l_e,transformReq:u_e,convertToMS:__e,PACKAGE_ROOT:ft.PACKAGE_ROOT};function Iue(e){return e instanceof Error?e:new Error(e)}a(Iue,"errorizeMessage");function Rn(e){return e==null}a(Rn,"isEmpty");function wue(e){return!Rn(e)&&(e||e===0||e===""||Ak(e))}a(wue,"isNotEmptyAndHasValue");function Ks(e){return Rn(e)||e.length===0||e.size===0}a(Ks,"isEmptyOrZeroLength");function Cue(e){if(Rn(e))return!0;for(let t=0;t<e.length;t++)if(Rn(e[t]))return!0;return!1}a(Cue,"arrayHasEmptyValues");function Due(e){if(Ks(e))return!0;for(let t=0;t<e.length;t++)if(Ks(e[t]))return!0;return!1}a(Due,"arrayHasEmptyOrZeroLengthValues");function Lue(...e){try{return e.join(Uo.sep)}catch{console.error(e)}}a(Lue,"buildFolderPath");function Ak(e){return Rn(e)?!1:e===!0||e===!1}a(Ak,"isBoolean");function Pue(e){return Rn(e)?!1:typeof e=="object"}a(Pue,"isObject");function Mue(e){return Ks(e)?Nue:e.slice(0,-yue)}a(Mue,"stripFileExtension");function Uue(e){return Rn(e)||e===""||typeof e!="string"?e:Tk[e]!==void 0?Tk[e]:bk(e)===!0?Number(e):Aue.test(e)?new Date(e):e}a(Uue,"autoCast");function Ok(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Ok,"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 Ok(e)}a(dN,"autoCastJSONDeep");function bk(e){if(e.startsWith("0.")&&Sk(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Sk(e))}a(bk,"autoCasterIsNumberCheck");async function vue(e){if(Ks(e))throw new Error(`Directory path: ${e} does not exist`);try{await pk.emptyDir(e),await pk.remove(e)}catch(t){throw $r.error(`Error removing files in ${e} -- ${t}`),t}}a(vue,"removeDir");function Bue(e,t){if(Ks(e)){$r.info("Invalid current version sent as parameter.");return}if(Ks(t)){$r.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(Bue,"compareVersions");function Hue(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(Hue,"isCompatibleDataVersion");function Gue(e){if(Rn(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(Gue,"escapeRawValue");function que(e){if(Rn(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(que,"unescapeValue");function xue(e,t){if(Rn(e))return $r.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+um.EOL}!Ks(n)&&n[0]===";"?r+=" "+n+s+um.EOL:Ks(n)||(r+=n+"="+s+um.EOL)}catch{$r.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(xue,"stringifyProps");function Nk(){let e;try{e=um.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Nk,"getHomeDir");function Fue(){let e=Uo.join(Nk(),ft.HDB_HOME_DIR_NAME,ft.BOOT_PROPS_FILE_NAME);return gk.existsSync(e)||(e=Uo.join(__dirname,"../","hdb_boot_properties.file")),e}a(Fue,"getPropsFilePath");function kue(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(kue,"timeoutPromise");async function $ue(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=hue.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a($ue,"isPortTaken");function Vue(e){try{return ft.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){$r.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Vue,"isClusterOperation");function Yue(e,t){let r=(ge(),ie(ke)).getDatabases();if(!r[e])return dm.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return dm.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Yue,"checkGlobalSchemaTable");function Kue(e,t){if(Rn(t)){$r.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Rn(e)||Ks(e)){$r.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){$r.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){$r.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Kue,"getClusterUser");function Wue(){mk.parsePromise=function(e,t,r){return new Promise(function(n,s){mk.parse(e,{header:!0,transformHeader:yk,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Wue,"promisifyPapaParse");function yk(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(yk,"removeBOM");function Que(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;$r.info(`Got cluster status event response: ${Sue(s)}`);try{i.cancel()}catch{$r.error("Error trying to cancel timeout.")}n(s)})})}a(Que,"createEventPromise");async function jue(e){let t=!0,r=0;do await Rk(Oue*r++),(await mue.findPs(e)).length>0&&(t=!1);while(t&&r<bue);if(t)throw new Error(`process ${e} was not started`)}a(jue,"checkProcessRunning");function zue(e,t){let r=Ik(e);if(r)return r;let n=wk(e,t);if(n)return n}a(zue,"checkSchemaTableExist");function Ik(e){let{getDatabases:t}=(ge(),ie(ke));if(!t()[e])return dm.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Ik,"checkSchemaExists");function wk(e,t){let{getDatabases:r}=(ge(),ie(ke));if(!r()[e][t])return dm.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(wk,"checkTableExists");function Jue(){let e=_m().utc().add(1,ft.MOMENT_DAYS_TAG).startOf(ft.MOMENT_DAYS_TAG).unix(),t=_m().utc().unix();return e-t}a(Jue,"getStartOfTomorrowInSeconds");function Xue(){return _m().utc().format("DD-MM-YYYY")}a(Xue,"getLimitKey");function Zue(e){try{let t=new pue(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){$r.error("Got an error back ticking items."),$r.error(t)}}a(Zue,"backtickASTSchemaItems");function e_e(e){return[e]}a(e_e,"createForkArgs");function t_e(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(t_e,"autoCastBoolean");function r_e(e,t){let{getDatabases:r}=(ge(),ie(ke)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(r_e,"getTableHashAttribute");function n_e(e){let{getDatabases:t}=(ge(),ie(ke));return t()[e]!==void 0}a(n_e,"doesSchemaExist");function s_e(e,t){let{getDatabases:r}=(ge(),ie(ke));return r()[e]?.[t]!==void 0}a(s_e,"doesTableExist");function i_e(e){try{return JSON.stringify(e)}catch{return e}}a(i_e,"stringifyObj");function o_e(e){let t=_m.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(o_e,"ms_to_time");function a_e(e,t){let r=Uo.basename(e,Uo.extname(e));return Uo.join(Uo.dirname(e),r+t)}a(a_e,"changeExtension");function fN(){if(process.env[ft.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[ft.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Tue(process.argv);if(e[ft.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[ft.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(fN,"getEnvCliRootPath");var _N;function c_e(){if(_N)return _N;let e=fN();fN()&&gk.pathExistsSync(Uo.join(e,ft.HDB_CONFIG_FILE))&&(_N=!0)}a(c_e,"noBootFile");function l_e(e,t){let r;return e.protocol==="http:"?r=Rue:r=gue,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(l_e,"httpRequest");function u_e(e){if(!e.schema&&!e.database){e.schema=ft.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(u_e,"transformReq");function __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,"convertToMS")});var X=T((Qye,Uk)=>{"use strict";var EN=require("fs-extra"),Qa=require("path"),Dk=require("os"),d_e=require("properties-reader"),Td=x(),Sd=K(),_e=D(),fm=ut(),f_e="Error initializing environment manager",Em="BOOT_PROPS_FILE_PATH",Lk=!1,E_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={};Uk.exports={BOOT_PROPS_FILE_PATH:Em,getHdbBasePath:h_e,setHdbBasePath:p_e,get:Pk,initSync:S_e,setProperty:ve,initTestEnvironment:g_e,setCloneVar:T_e};function h_e(){return Hi[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(h_e,"getHdbBasePath");function p_e(e){Hi[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(p_e,"setHdbBasePath");function Pk(e){let t=fm.getConfigValue(e);return t===void 0?Hi[e]:t}a(Pk,"get");function ve(e,t){E_e[e]&&(Hi[e]=t),fm.updateConfigObject(e,t)}a(ve,"setProperty");function m_e(){let e;try{e=Sd.getPropsFilePath(),EN.accessSync(e,EN.constants.F_OK|EN.constants.R_OK),Lk=!0;let t=d_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[Em]=e,!0}catch{return Td.trace(`Environment manager found no properties file at ${e}`),!1}}a(m_e,"doesPropFileExist");function S_e(e=!1){try{(Lk||m_e()||Sd.noBootFile())&&!Mk&&(fm.initConfig(e),Hi[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=fm.getConfigValue(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Td.error(f_e),Td.error(t),console.error(t),process.exit(1)}}a(S_e,"initSync");var Mk=!1;function T_e(e){Mk=e}a(T_e,"setCloneVar");function g_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[Em]=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,Dk.userInfo()?Dk.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,Pk(_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 ${Em}. Please check your boot props and settings files`;Td.fatal(r),Td.error(t)}}a(g_e,"initTestEnvironment")});var Hk=T((zye,Bk)=>{"use strict";var pm=X();pm.initSync();var hm=D(),{httpRequest:R_e}=K(),A_e=require("path"),vk=require("fs-extra"),O_e=require("yaml"),b_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};Bk.exports={cliOperations:y_e,buildRequest:N_e};function N_e(){let e={};for(let t of process.argv){if(b_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(N_e,"buildRequest");async function y_e(e){await vk.exists(A_e.join(pm.get(hm.CONFIG_PARAMS.ROOTPATH),hm.HDB_PID_FILE))||(console.error("HarperDB must be running to perform this operation"),process.exit()),await vk.exists(pm.get(hm.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))||(console.error("No domain socket found, unable to perform this operation"),process.exit());try{let t=await R_e({method:"POST",protocol:"http:",socketPath:pm.get(hm.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(O_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(y_e,"cliOperations")});var xk=T((Xye,qk)=>{"use strict";var Gk=require("semver/functions/major"),I_e=ha(),hN=process.versions&&process.versions.node?process.versions.node:void 0;qk.exports=w_e;function w_e(){let e=I_e.engines["minimum-node"];if(hN&&Gk(hN)<Gk(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(w_e,"checkNodeVersion")});var mN=T((eIe,Fk)=>{"use strict";var gd=X();gd.initSync();var Nl=require("fs-extra"),pN=require("path"),yl=D(),C_e=require("crypto"),D_e=require("uuid").v4;Fk.exports=L_e;function L_e(){if(gd.getHdbBasePath()!==void 0){let e=pN.join(gd.getHdbBasePath(),yl.LICENSE_KEY_DIR_NAME,yl.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=pN.join(gd.getHdbBasePath(),yl.LICENSE_KEY_DIR_NAME,yl.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=pN.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=D_e(),i=C_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(L_e,"checkJWTTokenExist")});var $k=T((rIe,kk)=>{"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}};kk.exports={HdbInfoInsertObject:SN}});var Kk=T((sIe,Yk)=>{"use strict";var Vk=D(),TN=class{static{a(this,"UpgradeObject")}constructor(t,r){this[Vk.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[Vk.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};Yk.exports={UpgradeObject:TN}});var mm=T((oIe,Qk)=>{"use strict";var Qn=require("prompt"),Il=require("chalk"),Wk=x(),Ts=require("os"),gN=Ji(),RN=["yes","y"];async function P_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=gN(["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 Wk.error("There was an error when prompting user about an upgrade."),Wk.error(s),!1}return RN.includes(n.CONFIRM_UPGRADE)}a(P_e,"forceUpdatePrompt");async function M_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=gN(["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 RN.includes(n.CONFIRM_DOWNGRADE)}a(M_e,"forceDowngradePrompt");async function U_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=gN(["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 RN.includes(r.GENERATE_CERTS)}a(U_e,"upgradeCertsPrompt");Qk.exports={forceUpdatePrompt:P_e,forceDowngradePrompt:M_e,upgradeCertsPrompt:U_e}});var ON=T((cIe,jk)=>{"use strict";var AN=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};jk.exports=AN});var Jk=T((EIe,zk)=>{"use strict";var v_e=K(),B_e=ut(),uIe=x(),_Ie=require("path"),dIe=require("fs"),fIe=D();zk.exports={getOldPropsValue:H_e};function H_e(e,t,r=!1){let n=t.getRaw(e);return v_e.isNotEmptyAndHasValue(n)?n:r?B_e.getDefaultConfig(e):""}a(H_e,"getOldPropsValue")});var t$=T((pIe,e$)=>{"use strict";var vo=require("path"),Bo=require("fs-extra"),G_e=require("properties-reader"),q_e=ON(),Ct=x(),{getOldPropsValue:We}=Jk(),{HDB_SETTINGS_NAMES:se,CONFIG_PARAMS:ja}=D(),za=ut(),Sm=X(),Xk=K(),Ws=D(),bN=new q_e("3.1.0"),Zk=[];function x_e(){let e=G_e(Sm.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.
34
34
 
35
35
  ;The directory selected during install where the database files reside.
36
- ${ie.HDB_ROOT_KEY} = ${We(ie.HDB_ROOT_KEY,e)}
36
+ ${se.HDB_ROOT_KEY} = ${We(se.HDB_ROOT_KEY,e)}
37
37
  ;The port the HarperDB REST interface will listen on.
38
- ${ie.SERVER_PORT_KEY} = ${We(ie.SERVER_PORT_KEY,e)}
38
+ ${se.SERVER_PORT_KEY} = ${We(se.SERVER_PORT_KEY,e)}
39
39
  ;Set to true to enable HTTPS on the HarperDB REST endpoint. Requires a valid certificate and key.
40
- ${ie.HTTP_SECURE_ENABLED_KEY} = ${We(ie.HTTP_SECURE_ENABLED_KEY,e)}
40
+ ${se.HTTP_SECURE_ENABLED_KEY} = ${We(se.HTTP_SECURE_ENABLED_KEY,e)}
41
41
  ;The path to the SSL certificate used when running with HTTPS enabled.
42
- ${ie.CERT_KEY} = ${We(ie.CERT_KEY,e)}
42
+ ${se.CERT_KEY} = ${We(se.CERT_KEY,e)}
43
43
  ;The path to the SSL private key used when running with HTTPS enabled.
44
- ${ie.PRIVATE_KEY_KEY} = ${We(ie.PRIVATE_KEY_KEY,e)}
44
+ ${se.PRIVATE_KEY_KEY} = ${We(se.PRIVATE_KEY_KEY,e)}
45
45
  ;Set to true to enable Cross Origin Resource Sharing, which allows requests across a domain.
46
- ${ie.CORS_ENABLED_KEY} = ${We(ie.CORS_ENABLED_KEY,e)}
46
+ ${se.CORS_ENABLED_KEY} = ${We(se.CORS_ENABLED_KEY,e)}
47
47
  ;Allows for setting allowable domains with CORS. Comma separated list.
48
- ${ie.CORS_WHITELIST_KEY} = ${We(ie.CORS_WHITELIST_KEY,e)}
48
+ ${se.CORS_WHITELIST_KEY} = ${We(se.CORS_WHITELIST_KEY,e)}
49
49
  ;Length of time in milliseconds after which a request will timeout. Defaults to 120,000 ms (2 minutes).
50
- ${ie.SERVER_TIMEOUT_KEY} = ${We(ie.SERVER_TIMEOUT_KEY,e,!0)}
50
+ ${se.SERVER_TIMEOUT_KEY} = ${We(se.SERVER_TIMEOUT_KEY,e,!0)}
51
51
  ;The number of milliseconds of inactivity a server needs to wait for additional incoming data, after it has finished writing the last response. Defaults to 5,000 ms (5 seconds).
52
- ${ie.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${We(ie.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
52
+ ${se.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${We(se.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
53
53
  ;Limit the amount of time the parser will wait to receive the complete HTTP headers.. Defaults to 60,000 ms (1 minute).
54
- ${ie.SERVER_HEADERS_TIMEOUT_KEY} = ${We(ie.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
54
+ ${se.SERVER_HEADERS_TIMEOUT_KEY} = ${We(se.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
55
55
  ;Define whether to log to file or not.
56
- ${ie.LOG_TO_FILE} = ${Va.getDefaultConfig($a.LOGGING_FILE)}
56
+ ${se.LOG_TO_FILE} = ${za.getDefaultConfig(ja.LOGGING_FILE)}
57
57
  ;Define whether to log to stdout/stderr or not. NOTE HarperDB must run in foreground in order to receive the std stream from HarperDB.
58
- ${ie.LOG_TO_STDSTREAMS} = ${Va.getDefaultConfig($a.LOGGING_STDSTREAMS)}
58
+ ${se.LOG_TO_STDSTREAMS} = ${za.getDefaultConfig(ja.LOGGING_STDSTREAMS)}
59
59
  ;Set to control amount of logging generated. Accepted levels are trace, debug, warn, error, fatal.
60
- ${ie.LOG_LEVEL_KEY} = ${We(ie.LOG_LEVEL_KEY,e)}
60
+ ${se.LOG_LEVEL_KEY} = ${We(se.LOG_LEVEL_KEY,e)}
61
61
  ;The path where log files will be written. If there is no file name included in the path, the log file will be created by default as 'hdb_log.log'
62
- ${ie.LOG_PATH_KEY} = ${We(ie.LOG_PATH_KEY,e)}
62
+ ${se.LOG_PATH_KEY} = ${We(se.LOG_PATH_KEY,e)}
63
63
  ;Set to true to enable daily log file rotations - each log file name will be prepended with YYYY-MM-DD.
64
- ${ie.LOG_DAILY_ROTATE_KEY} = ${We(ie.LOG_DAILY_ROTATE_KEY,e)}
64
+ ${se.LOG_DAILY_ROTATE_KEY} = ${We(se.LOG_DAILY_ROTATE_KEY,e)}
65
65
  ;Set the number of daily log files to maintain when LOG_DAILY_ROTATE is enabled. If no integer value is set, no limit will be set for
66
66
  ;daily log files which may consume a large amount of storage depending on your log settings.
67
- ${ie.LOG_MAX_DAILY_FILES_KEY} = ${We(ie.LOG_MAX_DAILY_FILES_KEY,e)}
67
+ ${se.LOG_MAX_DAILY_FILES_KEY} = ${We(se.LOG_MAX_DAILY_FILES_KEY,e)}
68
68
  ;The environment used by NodeJS. Setting to production will be the most performant, settings to development will generate more logging.
69
- ${ie.PROPS_ENV_KEY} = ${We(ie.PROPS_ENV_KEY,e)}
69
+ ${se.PROPS_ENV_KEY} = ${We(se.PROPS_ENV_KEY,e)}
70
70
  ;This allows self signed certificates to be used in clustering. This is a security risk
71
71
  ;as clustering will not validate the cert, so should only be used internally.
72
72
  ;The HDB install creates a self signed certificate, if you use that cert this must be set to true.
73
- ${ie.ALLOW_SELF_SIGNED_SSL_CERTS} = ${We(ie.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
73
+ ${se.ALLOW_SELF_SIGNED_SSL_CERTS} = ${We(se.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
74
74
  ;Set the max number of processes HarperDB will start. This can also be limited by number of cores and licenses.
75
- ${ie.MAX_HDB_PROCESSES} = ${We(ie.MAX_HDB_PROCESSES,e)}
75
+ ${se.MAX_HDB_PROCESSES} = ${We(se.MAX_HDB_PROCESSES,e)}
76
76
  ;Set to true to enable clustering. Requires a valid enterprise license.
77
- ${ie.CLUSTERING_ENABLED_KEY} = ${We(ie.CLUSTERING_ENABLED_KEY,e,!0)}
77
+ ${se.CLUSTERING_ENABLED_KEY} = ${We(se.CLUSTERING_ENABLED_KEY,e,!0)}
78
78
  ;The port that will be used for HarperDB clustering.
79
- ${ie.CLUSTERING_PORT_KEY} = ${We(ie.CLUSTERING_PORT_KEY,e)}
79
+ ${se.CLUSTERING_PORT_KEY} = ${We(se.CLUSTERING_PORT_KEY,e)}
80
80
  ;The name of this node in your HarperDB cluster topology. This must be a value unique from the rest of your cluster node names.
81
- ${ie.CLUSTERING_NODE_NAME_KEY} = ${We(ie.CLUSTERING_NODE_NAME_KEY,e)}
81
+ ${se.CLUSTERING_NODE_NAME_KEY} = ${We(se.CLUSTERING_NODE_NAME_KEY,e)}
82
82
  ;The user used to connect to other instances of HarperDB, this user must have a role of cluster_user.
83
- ${ie.CLUSTERING_USER_KEY} = ${We(ie.CLUSTERING_USER_KEY,e)}
83
+ ${se.CLUSTERING_USER_KEY} = ${We(se.CLUSTERING_USER_KEY,e)}
84
84
  ;Defines if this instance does not record transactions. Note, if Clustering is enabled and Transaction Log is disabled your nodes will not catch up.
85
- ${ie.DISABLE_TRANSACTION_LOG_KEY} = ${We(ie.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
85
+ ${se.DISABLE_TRANSACTION_LOG_KEY} = ${We(se.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
86
86
  ;Defines the length of time an operation token will be valid until it expires. Example values: https://github.com/vercel/ms
87
- ${ie.OPERATION_TOKEN_TIMEOUT_KEY} = ${We(ie.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
87
+ ${se.OPERATION_TOKEN_TIMEOUT_KEY} = ${We(se.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
88
88
  ;Defines the length of time a refresh token will be valid until it expires. Example values: https://github.com/vercel/ms
89
- ${ie.REFRESH_TOKEN_TIMEOUT_KEY} = ${We(ie.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
89
+ ${se.REFRESH_TOKEN_TIMEOUT_KEY} = ${We(se.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
90
90
  ;The port the IPC server will run on.
91
- ${ie.IPC_SERVER_PORT} = ${Va.getDefaultConfig($a.IPC_NETWORK_PORT)}
91
+ ${se.IPC_SERVER_PORT} = ${za.getDefaultConfig(ja.IPC_NETWORK_PORT)}
92
92
  ;Run HDB in the foreground.
93
- ${ie.RUN_IN_FOREGROUND} = ${Va.getDefaultConfig($a.OPERATIONSAPI_FOREGROUND)}
93
+ ${se.RUN_IN_FOREGROUND} = ${za.getDefaultConfig(ja.OPERATIONSAPI_FOREGROUND)}
94
94
  ;Set to true to enable custom API endpoints. Requires a valid enterprise license.
95
- ${ie.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${Va.getDefaultConfig($a.CUSTOMFUNCTIONS_ENABLED)}
95
+ ${se.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${za.getDefaultConfig(ja.CUSTOMFUNCTIONS_ENABLED)}
96
96
  ;The port used to access the custom functions server.
97
- ${ie.CUSTOM_FUNCTIONS_PORT_KEY} = ${Va.getDefaultConfig($a.HTTP_PORT)}
97
+ ${se.CUSTOM_FUNCTIONS_PORT_KEY} = ${za.getDefaultConfig(ja.HTTP_PORT)}
98
98
  ;The path to the folder containing HarperDB custom function files.
99
- ${ie.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${wo.join(We(ie.HDB_ROOT_KEY,e),"custom_functions")}
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
- ${ie.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Va.getDefaultConfig($a.HTTP_THREADS)}
102
- `,n=mm.get("settings_path"),s=wo.dirname(n),i=wo.join(s,"3_1_0_upgrade_settings.bak");try{Dt.info(`Backing up old settings file to: ${i}`),Co.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}'`),Co.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),Co.copySync(i,n),c}mm.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),Dt.info(o),o}a(N_e,"updateSettingsFile_3_1_0");function y_e(){let e=wo.join(Wk.getHomeDir(),Ys.HDB_HOME_DIR_NAME,Ys.LICENSE_KEY_DIR_NAME,Ys.LICENSE_FILE_NAME),t=wo.join(Wk.getHomeDir(),Ys.HDB_HOME_DIR_NAME,Ys.LICENSE_KEY_DIR_NAME,Ys.REG_KEY_FILE_NAME),r=wo.join(mm.getHdbBasePath(),Ys.LICENSE_KEY_DIR_NAME,Ys.LICENSE_FILE_NAME),n=wo.join(r,Ys.LICENSE_FILE_NAME),s=wo.join(r,Ys.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),Co.mkdirpSync(r);try{Co.accessSync(e);try{let c="Moving licence file";console.log(c),Dt.info(c),Co.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{Co.accessSync(t);try{let c="Moving registration file";console.log(c),Dt.info(c),Co.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(y_e,"moveLicenseFiles");RN.sync_functions.push(N_e);RN.sync_functions.push(y_e);Qk.push(RN);jk.exports=Qk});var t$=g((eIe,e$)=>{"use strict";var Rn=Ve(),{insertRecords:I_e}=jo(),w_e=Or(),Do=ct(),C_e=K(),Pi=x(),D_e=K(),Ks=require("fs-extra"),Mi=require("path"),L_e=require("cli-progress"),pd=require("assert"),P_e=require("pino"),M_e=X();e$.exports=U_e;var Sm,Jk,Tm,AN,hr,md=!1;async function U_e(e=!0){return Sm=M_e.getHdbBasePath(),Jk=Mi.join(Sm,"schema"),Tm=Mi.join(Sm,"4_0_0_upgrade_tmp"),AN=Mi.join(Sm,"transactions"),console.info("Reindexing upgrade started for schemas"),Pi.notify("Reindexing upgrade started for schemas"),await Xk(Jk,!1,e),await Ks.pathExists(AN)&&(console.info(`
101
+ ${se.MAX_CUSTOM_FUNCTION_PROCESSES} = ${za.getDefaultConfig(ja.HTTP_THREADS)}
102
+ `,n=Sm.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}Sm.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),Ct.info(o),o}a(x_e,"updateSettingsFile_3_1_0");function F_e(){let e=vo.join(Xk.getHomeDir(),Ws.HDB_HOME_DIR_NAME,Ws.LICENSE_KEY_DIR_NAME,Ws.LICENSE_FILE_NAME),t=vo.join(Xk.getHomeDir(),Ws.HDB_HOME_DIR_NAME,Ws.LICENSE_KEY_DIR_NAME,Ws.REG_KEY_FILE_NAME),r=vo.join(Sm.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(F_e,"moveLicenseFiles");bN.sync_functions.push(x_e);bN.sync_functions.push(F_e);Zk.push(bN);e$.exports=Zk});var o$=T((SIe,i$)=>{"use strict";var An=Ve(),{insertRecords:k_e}=Jo(),$_e=gr(),Ho=at(),V_e=K(),Gi=x(),Y_e=K(),Qs=require("fs-extra"),qi=require("path"),K_e=require("cli-progress"),Rd=require("assert"),W_e=require("pino"),Q_e=X();i$.exports=j_e;var Tm,r$,gm,NN,Er,Ad=!1;async function j_e(e=!0){return Tm=Q_e.getHdbBasePath(),r$=qi.join(Tm,"schema"),gm=qi.join(Tm,"4_0_0_upgrade_tmp"),NN=qi.join(Tm,"transactions"),console.info("Reindexing upgrade started for schemas"),Gi.notify("Reindexing upgrade started for schemas"),await n$(r$,!1,e),await Qs.pathExists(NN)&&(console.info(`
103
103
 
104
- Reindexing upgrade started for transaction logs`),Pi.notify("Reindexing upgrade started for transaction logs"),await Xk(AN,!0,e)),Pi.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(md?", but errors occurred":"")}a(U_e,"reindexUpgrade");async function Xk(e,t,r){let n=await Ks.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=Mi.join(e,o.toString());if(o===".DS_Store")continue;let l=await Ks.readdir(c),_=l.length;for(let u=0;u<_;u++){let d=l[u];if(d!==".DS_Store"&&Ks.statSync(Mi.join(c,d)).isDirectory())try{await v_e(o,d,t),hr.info(`Reindexing started for ${o}.${d}`),Pi.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await H_e(o,d,c,t,r),hr.info(`Reindexing completed for ${o}.${d}`),Pi.notify(`Reindexing completed for ${o}.${d}`)}catch(f){md=!0,f.schema_path=c,f.table_name=d,Pi.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Pi.error(f),hr.error(f),console.error(f)}}}if(!md)try{await Ks.rm(Tm,{recursive:!0})}catch{}}a(Xk,"processTables");async function v_e(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Mi.join(Tm,s);await Ks.ensureDir(Tm),await Ks.writeFile(i,""),hr=P_e({level:"debug",formatters:{bindings(){}}},i)}a(v_e,"initPinoLogger");var B_e=20;async function H_e(e,t,r,n,s){let i;try{i=await Rn.openEnvironment(r,t,n)}catch(T){if(T.message==="MDB_INVALID: File is not an LMDB file"){Pi.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`),hr.error(T);return}throw T}let o=x_e(i.dbis),c=Rn.openDBI(i,o),l=Object.keys(i.dbis),_=Rn.statDBI(i,o);hr.info(`Old environment stats: ${JSON.stringify(_)}`);let u=new L_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 Rn.createEnvironment(r,t,!1);Rn.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>B_e&&await E();await E()}catch(T){throw md=!0,hr.error(T),T}async function E(){let T,A=f.map(({value:v})=>v);n?T=await Promise.all(A.map(v=>G_e(d,v))):T=await I_e(d,o,l.filter(v=>v!=="__blob__"),A,!1);for(let v=0,U=f.length;v<U;v++){let{key:k,value:H}=f[v];hr.info(`Record hash value: ${k} hash: ${o}`);let j;n?j=T[v]:j=T.written_hashes.indexOf(k)>-1,pd(j,!0),q_e(d,o,H[o],n),hr.info(`Insert success, written hashes: ${T.written_hashes}`),u.increment()}f=[],u.value/u.total*100%10===0&&Pi.notify(`${e}.${t} ${u.value}/${u.total} records inserted`),hr.info(`${u.value}/${u.total} records inserted`)}a(E,"finishOutstanding"),u.stop();let h=Rn.statDBI(i,o),m=Rn.statDBI(d,o);if(hr.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${m.entryCount}`),pd.deepStrictEqual(h.entryCount,m.entryCount),await Rn.closeEnvironment(i),await Rn.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let T=Mi.join(r,t),A=Mi.join(T,"data.mdb"),P=Mi.join(T,"lock.mdb");await Ks.unlink(A),await Ks.unlink(P),await Ks.rmdir(T),hr.info(`Deleted old environment files from schema folder: ${A}, ${P}`)}let S=await Rn.openEnvironment(r,t),R=Rn.statDBI(S,o);hr.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify(R)}`),pd.deepStrictEqual(R.entryCount,m.entryCount),await Rn.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(H_e,"processTable");async function G_e(e,t){Rn.initializeDBIs(e,Do.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Do.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Do.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Do.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),D_e.isEmpty(t.user_name)||e.dbis[Do.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Do.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(G_e,"insertTransaction");function q_e(e,t,r,n){let i=e.dbis[t].get(r);pd.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Do.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Do.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&&!C_e.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let _=0,u=l.length;_<u;_++){let d=l[_];Zk(e,c,d,r)}else Zk(e,c,l,r)}a(q_e,"validateIndices");function Zk(e,t,r,n){try{let s=!1,i=w_e.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||hr.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),pd.deepStrictEqual(s,!0)}catch(s){md=!0,hr.error(s),console.error(s)}}a(Zk,"validateIndex");function x_e(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(x_e,"getHashDBI")});var Rm=g((rIe,n$)=>{"use strict";var F_e=require("mkcert"),gm=require("path"),ON=require("fs-extra"),bN=x(),k_e=X(),NN=C(),Al=Og(),$_e=qo(),V_e=lt();n$.exports={generateKeys:Y_e,updateConfigCert:r$};async function Y_e(){let e=k_e.getHdbBasePath(),t=gm.join(e,NN.LICENSE_KEY_DIR_NAME),r=await F_e.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:3650,caKey:Al.CERTIFICATE_VALUES.key,caCert:Al.CERTIFICATE_VALUES.cert}),n=gm.join(t,Al.CERTIFICATE_PEM_NAME),s=gm.join(t,Al.PRIVATEKEY_PEM_NAME),i=gm.join(t,Al.CA_PEM_NAME);try{await ON.writeFile(n,r.cert)}catch(o){throw bN.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await ON.writeFile(s,r.key)}catch(o){throw bN.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await ON.writeFile(i,Al.CERTIFICATE_VALUES.cert)}catch(o){throw bN.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}r$(n,s,i)}a(Y_e,"generateKeys");function r$(e,t,r){let n=$_e(Object.keys(NN.CONFIG_PARAM_MAP),!0),s=NN.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()]),V_e.updateConfigValue(void 0,void 0,i,!1,!0)}a(r$,"updateConfigCert")});var c$=g((iIe,a$)=>{"use strict";var Am=require("path"),Lo=require("fs-extra"),K_e=gN(),Ya=x(),s$=lt(),yN=X(),Ss=C(),Om=K(),W_e=require("properties-reader"),Q_e=rs(),j_e=uh(),z_e=or(),sIe=require("util"),J_e=z_e.searchByValue,X_e=Dr(),Z_e=Dh(),ede=et(),tde=t$(),i$=Rm(),rde=pm(),gd=new K_e("4.0.0"),o$=[],Sd,Td;async function nde(){try{if(await rde.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Sd){let t=Om.changeExtension(Sd,".bak");await Lo.move(Sd,t)}if(Td){let t=Om.changeExtension(Td,".bak");await Lo.move(Td,t)}await i$.generateKeys()}else console.log("Using existing certificates."),i$.updateConfigCert(Sd,Td,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(nde,"generateNewKeys");async function sde(){console.log("Updating HarperDB nodes."),Ya.info("Updating HarperDB nodes.");let e=[];try{let t=new Q_e(Ss.SYSTEM_SCHEMA_NAME,Ss.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await J_e(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!ede.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:Ss.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(Om.isEmptyOrZeroLength(n))return;let s=new j_e(Ss.SYSTEM_SCHEMA_NAME,Ss.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await X_e.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{Z_e.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(sde,"updateNodes");async function ide(){let e=yN.get(Ss.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(Am.join("config","settings.js"))){Ya.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),Ya.info(t);let r=Am.dirname(e),n=yN.get(Ss.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=Am.join(n,"backup","4_0_0_upgrade_settings.bak"),i=Am.join(n,Ss.HDB_CONFIG_FILE);try{Ya.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Lo.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{Ya.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),Ya.info("Updating env variables with new settings values");let d=s$.initOldConfig(e);Sd=d[Ss.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],Td=d[Ss.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],s$.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=Om.getPropsFilePath();Lo.accessSync(o,Lo.constants.F_OK|Lo.constants.R_OK);let l=W_e(o).get(Ss.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
105
- install_user = ${l}`;try{Lo.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{yN.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{Lo.removeSync(r),console.log(u),Ya.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(ide,"updateSettingsFile_4_0_0");gd.async_functions.push(ide);gd.async_functions.push(nde);gd.async_functions.push(tde);gd.async_functions.push(sde);o$.push(gd);a$.exports=o$});var IN=g((aIe,d$)=>{"use strict";var Ka=K(),ode=C(),l$=x(),{DATA_VERSION:ade,UPGRADE_VERSION:cde}=ode.UPGRADE_JSON_FIELD_NAMES_ENUM,u$=zk(),bm=c$(),Wa=new Map;u$&&u$.forEach(e=>{Wa.set(e.version,e)});bm&&bm.forEach(e=>{Wa.set(e.version,e)});bm&&bm.forEach(e=>{Wa.set(e.version,e)});function lde(){return[...Wa.keys()].sort(Ka.compareVersions)}a(lde,"getSortedVersions");function _$(e){let t=e[ade],r=e[cde];return Ka.isEmptyOrZeroLength(t)||Ka.isEmptyOrZeroLength(r)?(l$.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),l$.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."),[]):[...Wa.keys()].sort(Ka.compareVersions).filter(function(n){return Ka.compareVersions(n,t)>0&&Ka.compareVersions(n,r)<=0})}a(_$,"getVersionsForUpgrade");function ude(e){return _$(e).length>0}a(ude,"hasUpgradesRequired");function _de(e){return Ka.isEmptyOrZeroLength(e)?null:Wa.has(e)?Wa.get(e):null}a(_de,"getDirectiveByVersion");d$.exports={getSortedVersions:lde,getDirectiveByVersion:_de,getVersionsForUpgrade:_$,hasUpgradesRequired:ude}});var ym=g((lIe,m$)=>{"use strict";var dde=require("util"),wN=require("chalk"),fde=require("os"),E$=Dr(),Ede=or(),An=C(),h$=Gk(),DN=Sg(),{UpgradeObject:f$}=Fk(),{forceDowngradePrompt:hde}=pm(),pde=Vi(),Nm=x(),Ol=K(),LN=Mn(),mde=(ge(),se(ke)),Sde=IN(),Tde=dde.promisify(LN.setSchemaDataToGlobal),gde=Ede.searchByValue,Rde="info_id",Ade="2.9.9",Ode="3.0.0";async function bde(e){let t=new h$.HdbInfoInsertObject(1,e,e),r=new DN.InsertObject(An.OPERATIONS_ENUM.INSERT,An.SYSTEM_SCHEMA_NAME,An.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,An.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return LN.setSchemaDataToGlobal(),E$.insert(r)}a(bde,"insertHdbInstallInfo");async function CN(e){let t,r=await p$(),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 h$.HdbInfoInsertObject(i,e,e);let o=new DN.InsertObject(An.OPERATIONS_ENUM.INSERT,An.SYSTEM_SCHEMA_NAME,An.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,An.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Tde(),E$.insert(o)}a(CN,"insertHdbUpgradeInfo");async function p$(){let e=new DN.NoSQLSeachObject(An.SYSTEM_SCHEMA_NAME,An.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Rde,An.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await gde(e))}catch(r){console.error(r)}return t}a(p$,"getAllHdbInfoRecords");async function Nde(){let e=await p$();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(Nde,"getLatestHdbInfoRecord");async function yde(){Nm.info("Checking if HDB software has been updated");try{let e=pde.version(),t=await Nde(),r;if(Ol.isEmpty(t))r=Ade;else if(r=t.data_version_num,Ol.compareVersions(r.toString(),e.toString())>0){if(!Ol.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(wN.yellow(`This instance's data was last run on version ${r}`)),console.error(wN.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.${fde.EOL}${An.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Ol.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(wN.yellow(`This instance's data was last run on version ${r}`)),await hde(new f$(r,e))?await CN(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(LN.setSchemaDataToGlobal(),Ide(r),e.toString()===r.toString())return;let n=new f$(r,e);if(Sde.hasUpgradesRequired(n))return n;Ol.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await CN(n.upgrade_version),Nm.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw Nm.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Nm.fatal(e),e}}a(yde,"getVersionUpdateInfo");function Ide(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 ${An.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in mde.databases.system))throw console.log(t),new Error(t);if(!Ol.isEmpty(e)&&e<Ode)throw console.log(t),new Error(t)}a(Ide,"checkIfInstallIsSupported");m$.exports={insertHdbInstallInfo:bde,insertHdbUpgradeInfo:CN,getVersionUpdateInfo:yde}});var A$=g((_Ie,R$)=>{"use strict";var PN=require("joi"),{boolean:wde,string:S$,number:Cde}=PN.types(),T$=require("fs-extra"),Rd=C(),g$=require("path"),Dde=rt();R$.exports=Lde;function Lde(e){let t=S$.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=PN.object({[Rd.INSTALL_PROMPTS.ROOTPATH]:PN.custom(Pde),[Rd.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:Cde.min(0).allow("null",null),[Rd.INSTALL_PROMPTS.TC_AGREEMENT]:S$.valid("yes","YES","Yes"),[Rd.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Rd.INSTALL_PROMPTS.CLUSTERING_ENABLED]:wde});return Dde.validateBySchema(e,r)}a(Lde,"installValidator");function Pde(e,t){if(T$.existsSync(g$.join(e,"system/hdb_user/data.mdb"))||T$.existsSync(g$.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(Pde,"validateRootAvailable")});var b$=g((fIe,O$)=>{"use strict";var{mkdirpSync:Mde}=require("fs-extra"),Ws=require("path"),bl=C(),UN=x(),Ude=Pn(),MN=si(),vde=ze();O$.exports=Bde;async function Bde(e){UN.trace("Mounting HarperDB"),Ts(e),Ts(Ws.join(e,"backup")),Ts(Ws.join(e,"trash")),Ts(Ws.join(e,"keys")),Ts(Ws.join(e,"keys",bl.LICENSE_FILE_NAME)),Ts(Ws.join(e,"log")),Ts(Ws.join(e,"doc")),Ts(Ws.join(e,"database")),Ts(Ws.join(e,bl.TRANSACTIONS_DIR_NAME)),Ts(Ws.join(e,"clustering","leaf")),Ts(Ws.join(e,"components")),await Hde()}a(Bde,"mountHdb");async function Hde(){let e=gu(),t=Object.keys(MN);for(let r=0;r<t.length;r++){let n=t[r],s=MN[n].hash_attribute;try{vde.initSystemSchemaPaths(bl.SYSTEM_SCHEMA_NAME,n);let i=new e(bl.SYSTEM_SCHEMA_NAME,n,s);i.attributes=MN[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,await Ude.createTable(n,i)}catch(i){throw UN.error(`issue creating environment for ${bl.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(Hde,"createLMDBTables");function Ts(e){Mde(e,{mode:bl.HDB_FILE_PERMISSIONS}),UN.info(`Directory ${e} created`)}a(Ts,"makeDirectory")});var wm=g((hIe,v$)=>{"use strict";var BN=require("os"),w$=require("inquirer"),Kn=require("fs-extra"),Gde=require("properties-reader"),Qa=require("chalk"),zs=require("path"),qde=require("human-readable-ids").hri,xde=require("ora"),Fde=require("yaml"),Lt=x(),Uo=X(),Ad=K(),Im=qo(),C$=ym(),D$=Vi(),ne=C(),kde=A$(),$de=b$(),HN=lt(),Vde=Pr(),Yde=ah(),Kde=EN(),Wde=Mn(),Qde=require("util").promisify,jde=Qde(Wde.setSchemaDataToGlobal),zde=Rm(),Nl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),pr=a(e=>Qa.magenta.bold(e),"HDB_PROMPT_MSG"),Jde="https://harperdb.io/legal/end-user-license-agreement",vo=BN.EOL,Po="",Xde="yes",N$="Starting HarperDB install...",y$="HarperDB installation was successful.",I$="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Zde="An out of date version of HarperDB is already installed.",vN="It appears that HarperDB is already installed. Exiting install...",efe="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])$/),rfe=new RegExp(/^[^\s.,*>]+$/),nfe=BN.homedir(),sfe=zs.join(nfe,ne.HDB_ROOT_DIR_NAME),ife=9925,ofe="HDB_ADMIN",afe="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:"},yl=Im([ne.INSTALL_PROMPTS.HDB_CONFIG]),js,L$=!1;v$.exports=P$;P$.createSuperUser=U$;async function P$(){console.log(pr(vo+N$+vo)),Lt.notify(N$);let e;yl[ne.INSTALL_PROMPTS.HDB_CONFIG]&&(e=cfe());let t=ufe();Object.assign(t,e);let r=kde(t);if(r)throw r.message;await _fe(),await dfe(t);let n=await lfe(t);n[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT]&&(n[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]=null),js=n[ne.INSTALL_PROMPTS.ROOTPATH],yl[ne.INSTALL_PROMPTS.HDB_CONFIG]&&zs.dirname(yl[ne.INSTALL_PROMPTS.HDB_CONFIG])===js&&(L$=!0),!yl[ne.INSTALL_PROMPTS.HDB_CONFIG]&&await Kn.pathExists(zs.join(js,ne.HDB_CONFIG_FILE))&&(console.error(vN),process.exit());let s=xde({prefixText:pr("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),Ad.isEmpty(js))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Uo.setHdbBasePath(js),await $de(js),await ffe(),await Efe(n),Lt.initLogSettings(!0),await U$(n),await pfe(n),await zde.generateKeys(),await mfe(),Kde(),s.stop(),console.log(pr(vo+y$+vo)),Lt.notify(y$)}a(P$,"install");function cfe(){let e=Fde.parseDocument(Kn.readFileSync(yl[ne.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=HN.flattenConfig(e.toJSON());return t[ne.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[ne.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(cfe,"getConfigFromFile");async function lfe(e){Lt.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Nl,when:Mo(e[ne.INSTALL_PROMPTS.ROOTPATH],Kr.DESTINATION),name:ne.INSTALL_PROMPTS.ROOTPATH,prefix:Po,default:sfe,validate:async s=>Qs(s)?Qs(s):await Kn.pathExists(zs.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,message:pr(Kr.DESTINATION)},{type:"input",transformer:Nl,when:Mo(e[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]??e[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT],Kr.HDB_PORT),name:ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:Po,default:ife,validate:s=>tfe.test(s)?!0:"Invalid port.",message:pr(Kr.HDB_PORT)},{type:"input",transformer:Nl,when:Mo(e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Kr.HDB_USERNAME),name:ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Po,default:ofe,validate:s=>Qs(s)?Qs(s):(t=s,!0),message:pr(Kr.HDB_USERNAME)},{type:"password",when:Mo(e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Kr.HDB_PASS),name:ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Po,validate:s=>Qs(s)?Qs(s):!0,message:pr(Kr.HDB_PASS)}];if(Ad.autoCastBoolean(e[ne.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Nl,when:Mo(e[ne.INSTALL_PROMPTS.CLUSTERING_NODENAME],Kr.NODE_NAME),name:ne.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Po,default:qde.random(),validate:i=>rfe.test(i)?!0:"Invalid node name, must not contain ., * or >",message:pr(Kr.NODE_NAME)},{type:"input",transformer:Nl,when:Mo(e[ne.INSTALL_PROMPTS.CLUSTERING_USER],Kr.CLUSTER_USERNAME),name:ne.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Po,default:afe,validate:i=>Qs(i)?Qs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:pr(Kr.CLUSTER_USERNAME)},{type:"password",when:Mo(e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Kr.CLUSTER_PASS),name:ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Po,validate:i=>Qs(i)?Qs(i):!0,message:pr(Kr.CLUSTER_PASS)}];r.push(...s)}let n=await w$.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(lfe,"installPrompts");function Mo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${pr(t)} ${Qa.gray("[hidden]")}`),Lt.trace(`${pr(t)} [hidden]`)):(console.log(`${pr(t)} ${e}`),Lt.trace(`${pr(t)} ${e}`)),!1):!0}a(Mo,"displayCmdEnvVar");function Qs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Qs,"checkForEmptyValue");function ufe(){let e=Object.keys(ne.INSTALL_PROMPTS),t=Im(e),r=Im(Object.keys(ne.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=ne.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(ufe,"checkForPromptOverride");async function _fe(){Lt.trace("Checking for existing install.");let e=Ad.getPropsFilePath(),t=await Kn.pathExists(e),r;if(t){Lt.trace(`Install found an existing boot prop file at:${e}`);let n=Gde(e),s=HN.getConfigValue(ne.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(ne.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Kn.pathExists(s)}if(!t&&Ad.noBootFile()&&(r=!0),r){if(Lt.trace(`Install found existing HDB config at:${e}`),await C$.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${D$.version()}. Exiting install...`;console.log(vo+Qa.magenta.bold(Zde)),console.log(Qa.magenta.bold(s)),Lt.error(s)}else console.log(vo+Qa.magenta.bold(vN)),Lt.error(vN);process.exit(0)}}a(_fe,"checkForExistingInstall");async function dfe(e){Lt.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Jde}${vo}and can be viewed by typing or copying and pasting the URL into your web browser.${vo}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:Po,transformer:Nl,when:Mo(e[ne.INSTALL_PROMPTS.TC_AGREEMENT],t),name:ne.INSTALL_PROMPTS.TC_AGREEMENT,message:pr(t),validate:s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:Qa.yellow("Please enter 'yes' or 'no'")},n=await w$.prompt([r]);n[ne.INSTALL_PROMPTS.TC_AGREEMENT]&&n[ne.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Xde&&(console.log(Qa.yellow(I$)),Lt.error(I$),process.exit(0))}a(dfe,"termsAgreement");async function ffe(){let e=zs.join(js,ne.HDB_CONFIG_FILE),t;try{t=BN.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=Ad.getHomeDir(),s=zs.join(n,ne.HDB_HOME_DIR_NAME),i=zs.join(s,ne.LICENSE_KEY_DIR_NAME);try{Kn.mkdirpSync(s,{mode:ne.HDB_FILE_PERMISSIONS}),Kn.mkdirpSync(i,{mode:ne.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${ne.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=zs.join(s,ne.BOOT_PROPS_FILE_NAME);try{await Kn.writeFile(o,r)}catch(c){throw Lt.error(`There was an error creating the boot file at path: ${o}`),c}Uo.setProperty(ne.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Uo.setProperty(ne.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Uo.setProperty(Uo.BOOT_PROPS_FILE_PATH,o)}}a(ffe,"createBootPropertiesFile");async function Efe(e){Lt.trace("Creating HarperDB config file");let t=Im(Object.keys(ne.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{HN.createConfigFile(t),Uo.initSync()}catch(r){hfe(r)}}a(Efe,"createConfigFile");function hfe(e){Lt.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(efe);let t=zs.resolve(Uo.get(Uo.BOOT_PROPS_FILE_PATH),"../");t&&Kn.removeSync(t),js&&(L$?Kn.readdirSync(js,{withFileTypes:!0}).forEach(n=>{let s=zs.join(n.path,n.name);s!==yl[ne.INSTALL_PROMPTS.HDB_CONFIG]&&Kn.removeSync(s)}):Kn.removeSync(js)),process.exit(1)}a(hfe,"rollbackInstall");async function M$(e,t){Lt.trace("Creating admin user"),await jde();let r;try{r=await Yde.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 Vde.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(M$,"createAdminUser");async function U$(e){Lt.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await M$(t,r),delete e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(U$,"createSuperUser");async function pfe(e){Lt.trace("Creating Cluster user.");let t;e[ne.INSTALL_PROMPTS.CLUSTERING_USER]&&e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[ne.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await M$({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[ne.INSTALL_PROMPTS.CLUSTERING_USER],delete e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(pfe,"createClusterUser");async function mfe(){let e=D$.version();if(e)await C$.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(mfe,"insertHdbVersionInfo")});var G$=g((mIe,H$)=>{"use strict";var GN=K(),On=x(),B$=IN();H$.exports={processDirectives:Sfe};async function Sfe(e){console.log("Starting upgrade process...");let t=B$.getVersionsForUpgrade(e),r=Rfe(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;On.notify(c),console.log(c);let l=[],_=[];try{l=Tfe(o.sync_functions)}catch(u){throw On.error(`Error while running an upgrade script for ${o.version}`),u}try{_=await gfe(o.async_functions)}catch(u){throw On.error(`Error while running an upgrade script for ${o.version}`),u}n.push(...l,..._)}return n}a(Sfe,"processDirectives");function Tfe(e){if(GN.isEmptyOrZeroLength(e))return On.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return On.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(On.info(`Running function ${r.name}`),!(r instanceof Function)){On.info("Variable being processed is not a function");continue}let n=r();On.info(n),t.push(n)}return t}a(Tfe,"runSyncFunctions");async function gfe(e){if(GN.isEmptyOrZeroLength(e))return On.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return On.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(On.info(`Running function ${s.name}`),!(s instanceof Function)){On.info("Variable being processed is not a function");continue}let i=await s();On.info(i),t.push(i)}return t}a(gfe,"runAsyncFunctions");function Rfe(e){if(GN.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=B$.getDirectiveByVersion(r);n&&t.push(n)}return t}a(Rfe,"getUpgradeDirectivesToInstall")});var FN=g((TIe,V$)=>{"use strict";var Cm=X();Cm.initSync();var k$=require("chalk"),q$=require("fs-extra"),vi=x(),Ui=C(),x$=Vi(),Afe=G$(),qN=K(),$$=ym(),Ofe=pm(),F$=iS(),bfe=Mn(),Nfe=require("util").promisify,yfe=Nfe(bfe.setSchemaDataToGlobal),xN,{UPGRADE_VERSION:Dm}=Ui.UPGRADE_JSON_FIELD_NAMES_ENUM;V$.exports={upgrade:Ife};async function Ife(e){await yfe(),xN===void 0&&(xN=Qc()),q$.existsSync(Cm.get(Cm.BOOT_PROPS_FILE_PATH))||(Od("The hdb_boot_properties file was not found. Please install HDB.",Ui.LOG_LEVELS.ERROR),process.exit(1)),q$.existsSync(Cm.get(Ui.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(Od("The hdb settings file was not found. Please make sure HDB is installed.",Ui.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await $$.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),Od(`This version of HarperDB is ${x$.version()}`,Ui.LOG_LEVELS.INFO);let r=t[Dm]?t[Dm]:x$.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Ui.HDB_SUPPORT_ADDRESS}`),vi.notify("Missing new version field from upgrade info object"),process.exit(1)),await wfe();let n,s=0;try{n=await Ofe.forceUpdatePrompt(t)}catch(i){vi.error("There was an error when prompting user about upgrade."),vi.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),vi.info(`Starting upgrade to version ${r}`),await Cfe(t),Od(`HarperDB was successfully upgraded to version ${t[Dm]}`,Ui.LOG_LEVELS.INFO)}a(Ife,"upgrade");async function wfe(){let e=!1,t=await F$.findPs(Ui.HDB_PROC_NAME);if(qN.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await F$.findPs("hdb_express");qN.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await xN.list();qN.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(k$.red(r)),vi.error(r),process.exit(1)}}a(wfe,"checkIfRunning");async function Cfe(e){try{await Afe.processDirectives(e)}catch(t){throw Od("There was an error during the data upgrade. Please check the logs.",Ui.LOG_LEVELS.ERROR),t}try{await $$.insertHdbUpgradeInfo(e[Dm])}catch(t){vi.error("Error updating the 'hdb_info' system table."),vi.error(t)}}a(Cfe,"runUpgrade");function Od(e,t=void 0){t||(t=vi.info),vi[t](e),console.log(k$.magenta(e))}a(Od,"printToLogAndConsole")});var j$=g((RIe,Q$)=>{"use strict";var{promises:$N,createReadStream:Dfe,createWriteStream:Lfe}=require("fs"),{createGzip:Pfe}=require("zlib"),{promisify:Mfe}=require("util"),{pipeline:Ufe}=require("stream"),vfe=Mfe(Ufe),Bfe=require("path"),za=X();za.initSync();var ja=x(),{CONFIG_PARAMS:bd,ITC_EVENT_TYPES:Hfe}=C(),{onMessageFromWorkers:Gfe}=tt(),qfe=6e4,xfe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Ffe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",kN,K$;Q$.exports=W$;Gfe(e=>{e.type===Hfe.RESTART&&(za.initSync(!0),clearInterval(K$),za.get(bd.LOGGING_ROTATION_ENABLED)&&W$())});async function W$(){try{let e=ja.getLogFilePath(),t=za.get(bd.LOGGING_ROTATION_MAXSIZE),r=za.get(bd.LOGGING_ROTATION_INTERVAL);if(!t&&!r){ja.error(xfe);return}let n=za.get(bd.LOGGING_ROTATION_PATH);if(!n){ja.error(Ffe);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,ja.trace("Log rotate enabled, maxSize:",t,"interval:",r),K$=setInterval(async()=>{if(s){let o;o=await $N.stat(e),o.size>=s&&await Y$(e,n)}i&&Date.now()/6e4-kN>=i&&(await Y$(e,n),kN=Date.now()/6e4)},qfe).unref()}catch(e){ja.error(e)}}a(W$,"logRotator");async function Y$(e,t){let r=za.get(bd.LOGGING_ROTATION_COMPRESS),n=Bfe.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await vfe(Dfe(e),Pfe(),Lfe(n)),await $N.unlink(e)):await $N.rename(e,n),ja.closeLogFile(),ja.notify(`hdb.log rotated, old log moved to ${n}`)}a(Y$,"moveLogFile")});var Ja=g((LIe,nV)=>{"use strict";var Wr=X();Wr.initSync();var OIe=Ca(),Pt=C(),Xs=x(),Bi=require("fs-extra"),Bo=require("path"),kfe=require("systeminformation"),$fe=EN(),Vfe=wm(),VN=require("chalk"),Yfe=Fo(),Hi=K(),J$=lt(),X$=qo(),z$=Hh(),Kfe=FN(),Wfe=j$(),{compactOnStart:Qfe}=(Yh(),se(Vh)),jfe=require("minimist"),{PACKAGE_ROOT:zfe}=C(),{startHTTPThreads:Jfe,startSocketServer:bIe,mostIdleRouting:NIe,remoteAffinityRouting:yIe}=(im(),se(dN)),Xfe=ym(),{isMainThread:Zfe}=require("worker_threads"),IIe=si(),wIe=di(),CIe=qT(),DIe=gu(),Lm=C(),Js,Il,Z$=!1,eEe="Upgrade complete. Starting HarperDB.",tEe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",rEe="HarperDB not found, starting install process.",nEe="There was an error during install, check install_log.log for more details. Exiting.",sEe="HarperDB successfully started.";function iEe(){if(!Z$){let e=a(()=>{Bi.removeSync(Bo.join(Wr.get(Pt.CONFIG_PARAMS.ROOTPATH),Pt.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(iEe,"addExitListeners");async function eV(e=!1,t=!1){if(console.log(VN.magenta("Starting HarperDB...")),await rV()===!1){console.log(rEe);try{await Vfe()}catch(o){console.error(nEe,o),Xs.error(o),process.exit(1)}}if(!e){let o=X$(Object.keys(Pt.CONFIG_PARAM_MAP),!0);!Hi.isEmpty(o)&&!Hi.isEmptyOrZeroLength(Object.keys(o))&&J$.updateConfigValue(void 0,void 0,o,!0,!0)}let r,n=Il?.service==="clustering";Il?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Bi.readFile(Bo.join(Wr.get(Pt.CONFIG_PARAMS.ROOTPATH),Pt.HDB_PID_FILE),"utf8")),c=await kfe.processes();for(let l of c.list)if(l.pid===o){n?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}Js===void 0&&(Js=Qc()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Wr.get(Pt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await z$.generateNatsConfig(),await Js.startClusteringProcesses(!0),process.exit()),iEe(),await Bi.writeFile(Bo.join(Wr.get(Lm.CONFIG_PARAMS.ROOTPATH),Lm.HDB_PID_FILE),`${process.pid}`),Xs.info("HarperDB PID",process.pid);let s;try{let o=await Xfe.getVersionUpdateInfo();o!==void 0&&(s=o[Pt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await Kfe.upgrade(o),console.log(eEe))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`,o),Xs.error(o)):(console.error(tEe,o),Xs.error(o)),process.exit(1)}$fe(),cEe(),Hi.autoCastBoolean(Wr.get(Pt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&Zfe&&await z$.generateNatsConfig(t)}a(eV,"initialize");async function oEe(e=!1){try{Il=jfe(process.argv),Il.ROOTPATH&&J$.updateConfigObject("settings_path",Bo.join(Il.ROOTPATH,Pt.HDB_CONFIG_FILE)),await eV(e,!0),Wr.get(Pt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Qfe();let t=process.env.IS_SCRIPTED_SERVICE&&!Il.service;Hi.autoCastBoolean(Wr.get(Pt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await Js.startClusteringProcesses(),await Js.startClusteringThreads()),await Jfe(process.env.DEV_MODE?1:Wr.get(Lm.CONFIG_PARAMS.THREADS_COUNT)??Wr.get(Lm.CONFIG_PARAMS.THREADS)),Wr.get(Pt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await Wfe(),t||tV()}catch(t){console.error(t),Xs.error(t),process.exit(1)}}a(oEe,"main");function tV(){Xs.suppressLogging(()=>{console.log(VN.magenta(""+Bi.readFileSync(Bo.join(zfe,"utility/install/ascii_logo.txt")))),console.log(VN.magenta(`|------------- HarperDB ${Yfe.version} successfully started ------------|`))}),Xs.notify(sEe)}a(tV,"started");async function aEe(e=!0){Z$=!e;try{Js===void 0&&(Js=Qc()),Js.enterPM2Mode(),await eV(),Hi.autoCastBoolean(Wr.get(Pt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await Js.startClusteringProcesses(),await Js.startService(Pt.PROCESS_DESCRIPTORS.HDB),tV(),e&&process.exit(0)}catch(t){console.error(t),Xs.error(t),process.exit(1)}}a(aEe,"launch");function cEe(){let e=Bo.join(Wr.getHdbBasePath(),Pt.LICENSE_KEY_DIR_NAME,Pt.LICENSE_FILE_NAME),t=Bo.join(e,Pt.LICENSE_FILE_NAME),r=Bo.join(e,Pt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=X$(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Hi.isEmpty(n)||Hi.isEmpty(s))return;Bi.mkdirpSync(e),Bi.writeFileSync(r,n),Bi.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),Xs.error(s)}}a(cEe,"writeLicenseFromVars");nV.exports={launch:aEe,main:oEe,isHdbInstalled:rV};async function rV(){try{await Bi.stat(Hi.getPropsFilePath()),await Bi.stat(Wr.get(Pt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Hi.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw Xs.error(`Error checking for HDB install - ${e}`),e}return!0}a(rV,"isHdbInstalled")});var YN=g((MIe,oV)=>{"use strict";var lEe=x(),uEe=C(),_Ee=require("util"),dEe=require("child_process"),sV=_Ee.promisify(dEe.exec),fEe=hi(),Nd=Qc(),iV="Stopping HarperDB.";oV.exports=EEe;async function EEe(){if(console.log(iV),lEe.notify(iV),await Nd.isServiceRegistered(uEe.HDB_PROC_DESCRIPTOR)){Nd.enterPM2Mode();let r=await Nd.getUniqueServicesList();for(let n in r)await Nd.stop(n)}await Nd.kill();let t=await fEe.getHDBProcessInfo();t.clustering.forEach(r=>{sV(`kill ${r.pid}`)}),t.core.forEach(r=>{sV(`kill ${r.pid}`)})}a(EEe,"stop")});var JN=g((vIe,pV)=>{"use strict";var hEe=require("os"),Um=require("https"),aV=require("http"),Gi=require("fs-extra"),pEe=require("yaml"),mEe=require("human-readable-ids").hri,{pipeline:cV}=require("stream/promises"),{createWriteStream:vm,ensureDir:Bm}=require("fs-extra"),{join:Rs}=require("path"),jN=require("lodash"),SEe=require("minimist"),fV=X(),TEe=hi(),EV=x(),Id=lt(),{restart:gEe}=Ca(),REe=YN(),KN=K(),lV=mt(),AEe=Mn(),{isHdbInstalled:OEe,main:hV,launch:bEe}=Ja(),NEe=wm(),Hm=C(),{SYSTEM_TABLE_NAMES:uV,SYSTEM_SCHEMA_NAME:yEe,CONFIG_PARAMS:yd,OPERATIONS_ENUM:mr}=Hm,IEe=9925,wEe="info",CEe=1e4,DEe="clone-node-config.yaml",zN=[uV.ROLE_TABLE_NAME,uV.USER_TABLE_NAME],sr={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"},Go=SEe(process.argv),wd=Go[sr.HDB_LEADER_USERNAME]??process.env[sr.HDB_LEADER_USERNAME],Cd=Go[sr.HDB_LEADER_PASSWORD]??process.env[sr.HDB_LEADER_PASSWORD],wl=Go[sr.HDB_LEADER_URL]??process.env[sr.HDB_LEADER_URL],Mm=Go[sr.HDB_LEADER_CLUSTERING_HOST]??process.env[sr.HDB_LEADER_CLUSTERING_HOST],LEe=Go[sr.HDB_LEADER_CLUSTERING_PORT]??process.env[sr.HDB_LEADER_CLUSTERING_PORT],PEe=(Go[sr.HDB_FULLY_CONNECTED]??process.env[sr.HDB_FULLY_CONNECTED])==="true",Ho=(Go[sr.HDB_CLONE_OVERTOP]??process.env[sr.HDB_CLONE_OVERTOP])==="true",_V=Go[sr.CLUSTERING_NODENAME]??process.env[sr.CLUSTERING_NODENAME],WN,Qe,Rt,At,Za,Cl,bn,gs,QN;pV.exports=a(async function(t=!1){delete process.env.HDB_LEADER_URL;let r=await OEe();if(!Ho&&r)return console.info("HarperDB is already installed, clone will not be performed"),hV();if(Ho&&!r){console.info("No existing install of HarperDB found, cannot clone overtop");return}let n=Ho?`Cloning node ${wl} overtop of existing HarperDB install`:`Cloning node: ${wl}`;if(console.info(n),Ho)QN=Id.readConfigFile(),Cl=QN.rootPath,await REe();else try{Cl=process.env.ROOTPATH?process.env.ROOTPATH:Rs(hEe.homedir(),Hm.HDB_ROOT_DIR_NAME)}catch(i){throw console.error(i),new Error("There was an error setting default rootPath. Please set 'rootPath' in clone-node-config.yaml")}let s;try{s=Rs(Cl,DEe),Qe=pEe.parseDocument(Gi.readFileSync(s,"utf8"),{simpleKeys:!0}).toJSON()}catch{console.info(s+" not found, using default config values.")}_V?Za=_V:Za=Qe?.clustering?.nodeName??mEe.random(),Rt=await Dd({operation:mr.GET_CONFIGURATION}),Rt=await JSON.parse(Rt.body),process.env.HDB_FETCH==="true"?(await BEe(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await vEe(),Ho||await UEe(),await MEe(),await HEe(),await GEe(t),console.info("Successfully cloned node: "+wl),t&&process.exit()},"cloneNode");async function MEe(){console.info("Cloning configuration"),WN=Rt?.clustering?.enabled;let e={[yd.ROOTPATH]:Cl};if(Mm&&WN&&Qe?.clustering?.enabled!==!1){e[yd.CLUSTERING_ENABLED]=!0;let n=Rt?.clustering?.hubServer?.cluster?.network?.routes,s=parseInt(LEe)||Rt?.clustering?.hubServer?.cluster?.network?.port;e[yd.CLUSTERING_USER]=Rt?.clustering?.user;let i=fV.get(yd.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES);Array.isArray(i)?i.push({host:Mm,port:s}):i=[{host:Mm,port:s}],Array.isArray(n)&&(i=i.concat(n)),e[yd.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES]=i}let t=Qe?.componentConfig?.exclude;t=t?t.reduce((n,s)=>({...n,[s.name]:!0}),{}):[];for(let n in Rt)Rt[n]?.package&&!t[n]&&await Id.addConfig(n,Rt[n]);Qe?.databases&&await Id.addConfig("databases",Rt?.schemas);let r;Qe&&(r=Id.flattenConfig(Qe));for(let n in r){let s=Hm.CONFIG_PARAM_MAP[n.toLowerCase()];s&&(e[s]=r[n])}e.rootPath==null&&delete e.rootPath,e?.clustering_nodeName==null&&(Ho?e.clustering_nodeName=QN?.clustering?.nodeName??Za:e.clustering_nodeName=Za),EV.info("Cloning config:",e),jN.isEmpty(e)||Id.updateConfigValue(void 0,void 0,e,!1,!0)}a(MEe,"cloneConfig");async function UEe(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=Cl,!wd)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=wd,!Cd)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=Cd,process.env.OPERATIONSAPI_NETWORK_PORT=Qe?.operationsApi?.network?.port??IEe,process.env.CLUSTERING_NODENAME=Za,process.env.CLUSTERING_LOGLEVEL=Qe?.clustering?.logLevel??wEe,await NEe()}a(UEe,"installHDB");async function vEe(){console.info("Cloning system database");let e=Xa("system");await Bm(e);let t=Rs(e,"system.mdb"),r=vm(t,{overwrite:!0}),n={operation:mr.GET_BACKUP,database:"system"};Ho||(n.tables=zN);let s=await dV(n,r);if(await Gi.utimes(t,Date.now(),new Date(s.date)),At=await Dd({operation:mr.DESCRIBE_ALL}),At=await JSON.parse(At.body),bn=Qe?.databaseConfig?.excludeDatabases,bn=bn?bn.reduce((i,o)=>({...i,[o.database]:!0}),{}):{},Rt.schemas)for(let i in Rt.schemas)Object.keys(Rt.schemas[i]).includes("tables")&&(bn[i]=!0,console.info(`Excluding database '${i}' from clone because leader node has custom pathing configured for one or more of its tables`));gs=Qe?.databaseConfig?.excludeTables,gs=gs?gs.reduce((i,o)=>({...i,[o.database==null?null:o.database+o.table]:!0}),{}):{};for(let i in At){if(bn[i]){At[i]="excluded";continue}if(jN.isEmpty(At[i]))continue;let o=[],c=!1;for(let E in At[i])gs[i+E]?(c=!0,At[i][E]="excluded"):o.push(E);let l;c?(console.info(`Cloning database: ${i} tables: ${o}`),l={operation:mr.GET_BACKUP,database:i,tables:o}):(console.info(`Cloning database: ${i}`),l={operation:mr.GET_BACKUP,database:i});let _=Xa(i);await Bm(_);let u=Rs(_,i+".mdb"),d=vm(u,{overwrite:!0}),f=await dV(l,d);await Gi.utimes(u,Date.now(),new Date(f.date))}}a(vEe,"cloneTables");async function BEe(){console.info("Cloning system database using fetch");let e={operation:mr.GET_BACKUP,database:"system"};Ho||(e.tables=zN);let t=await Pm(e,!0),r=Xa("system");await Bm(r);let n=Rs(r,"system.mdb");if(await cV(t.body,vm(n,{overwrite:!0})),await Gi.utimes(n,Date.now(),new Date(t.headers.get("date"))),At=await Pm({operation:mr.DESCRIBE_ALL}),At=await At.json(),bn=Qe?.databaseConfig?.excludeDatabases,bn=bn?bn.reduce((s,i)=>({...s,[i.database]:!0}),{}):{},Rt.schemas)for(let s in Rt.schemas)Object.keys(Rt.schemas[s]).includes("tables")&&(bn[s]=!0,console.info(`Excluding database '${s}' from clone because leader node has custom pathing configured for one or more of its tables`));gs=Qe?.databaseConfig?.excludeTables,gs=gs?gs.reduce((s,i)=>({...s,[i.database==null?null:i.database+i.table]:!0}),{}):{};for(let s in At){if(bn[s]){At[s]="excluded";continue}if(jN.isEmpty(At[s]))continue;let i=[],o=!1;for(let f in At[s])gs[s+f]?(o=!0,At[s][f]="excluded"):i.push(f);if(i.length===0)return;let c;o?(console.info(`Cloning database: ${s} tables: ${i}`),c=await Pm({operation:mr.GET_BACKUP,database:s,tables:i},!0)):(console.info(`Cloning database: ${s}`),c=await Pm({operation:mr.GET_BACKUP,database:s},!0));let l=Xa(s);await Bm(l);let _=new Date(c.headers.get("date")),u=Rs(l,`${_.getTime()}-${s}.mdb`);await cV(c.body,vm(u,{overwrite:!0}));let d=Rs(l,s+".mdb");await Gi.rename(u,d),await Gi.utimes(d,Date.now(),_)}}a(BEe,"cloneTablesFetch");async function Pm(e,t=!1){let r=Qe?.httpsRejectUnauthorized??!1,n=new Um.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(wd+":"+Cd).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(wl,{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(Pm,"leaderHttpReqFetch");function Xa(e){return Qe?.databases&&Qe?.databases[e]?.path||Qe?.storage&&Qe?.storage?.path||Rs(Cl,"database")}a(Xa,"getDbFileDir");async function HEe(){let{deployComponent:e}=ip(),t=await Dd({operation:mr.GET_COMPONENTS});t=await JSON.parse(t.body);let r=[];if(t.entries.length){for(let s of t.entries){if(!s.entries)continue;let i=!1;if(Qe?.componentConfig?.exclude){for(let o of Qe.componentConfig.exclude)if(o?.name!=null&&o.name===s.name){i=!0;break}}i||r.push(s.name)}let n=Qe?.componentConfig?.skipNodeModules!==!1;for(let s of r){console.info("Cloning component: "+s);let i=await Dd({operation:mr.PACKAGE_COMPONENT,project:s,skip_node_modules:n}),{payload:o}=await JSON.parse(i.body);await e({payload:o,project:s})}}}a(HEe,"cloneComponents");async function GEe(e){if(!WN||!Mm)return;let t=await TEe.getHDBProcessInfo();t.clustering.length===0||t.core.length===0?e?await bEe(!1):await hV():(console.info(await gEe({operation:mr.RESTART})),await KN.async_set_timeout(CEe)),console.info("Clustering cloned tables"),e&&await KN.async_set_timeout(2e3);let r=Qe?.clusteringConfig?.subscribeToLeaderNode!==!1,n=Qe?.clusteringConfig?.publishToLeaderNode!==!1;await AEe.setSchemaDataToGlobalAsync();let s=S_(),i=await Dd({operation:mr.CLUSTER_STATUS});i=await JSON.parse(i.body);let o=[],c=await Gi.stat(Rs(Xa("system"),"system.mdb"));for(let _ of zN)o.push({schema:yEe,table:_,subscribe:r,publish:n,start_time:c.mtime.toISOString()});for(let _ in At){if(At[_]==="excluded")continue;let u=await Gi.stat(Rs(Xa(_),_+".mdb"));u.mtime.setSeconds(u.mtime.getSeconds()-10);for(let d in At[_])At[_][d]!=="excluded"&&o.push({schema:_,table:d,subscribe:r,publish:n,start_time:u.mtime.toISOString()})}await lV.createTableStreams(o),EV.info("Sending add_node request to node:",Rt?.clustering?.nodeName,"with subscriptions:",o);let l;if(PEe&&i.connections.length>0){let _=bh(),u=[{node_name:Rt?.clustering?.nodeName,subscriptions:o}],d=!1;Za=fV.get(Hm.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let f of i.connections){if(f.node_name===Za)continue;let E={node_name:f.node_name,subscriptions:[]};for(let h of f.subscriptions){if(bn[h.schema]||gs[h.schema+h.table])continue;d=!0;let m=await Gi.stat(Rs(Xa(h.schema),h.schema+".mdb"));m.mtime.setSeconds(m.mtime.getSeconds()-10),h.start_time=m.mtime.toISOString(),E.subscriptions.push(h)}u.push(E)}d&&(l=await _({operation:mr.CONFIGURE_CLUSTER,connections:u}),console.info(JSON.stringify(l)))}l||await s({operation:mr.ADD_NODE,node_name:Rt?.clustering?.nodeName,subscriptions:o},!0),await lV.closeConnection()}a(GEe,"clusterTables");async function Dd(e){let t=new Um.Agent({rejectUnauthorized:Qe?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(wd+":"+Cd).toString("base64"),"Content-Type":"application/json"},s=new URL(wl),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 KN.httpRequest(i,e)}a(Dd,"leaderHttpReq");async function dV(e,t){let r=new Um.Agent({rejectUnauthorized:Qe?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(wd+":"+Cd).toString("base64"),"Content-Type":"application/json"},i=new URL(wl),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:s};return i.protocol==="https:"&&(o.agent=r,aV=Um),i.port&&(o.port=i.port),new Promise((c,l)=>{let _=aV.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(dV,"leaderHttpStream")});var SV=g((HIe,mV)=>{var qEe=wm(),xEe=x();mV.exports=FEe;async function FEe(){try{await qEe()}catch(e){console.error("There was an error during the install."),console.error(e),xEe.error(e),process.exit(1)}}a(FEe,"install")});var RV=g((qIe,gV)=>{"use strict";var kEe=Ph(),$Ee=x(),TV="Registration failed.";async function VEe(){let e;try{e=await kEe.register()}catch(t){return $Ee.error(`Registration error ${t}`),TV}return e||TV}a(VEe,"register");gV.exports={register:VEe}});var NV=g((FIe,bV)=>{"use strict";var ZN=require("fs-extra"),ey=require("path"),XN=require("yaml"),Ld=mt(),Pd=C(),AV=et(),ty=x(),YEe=Pr(),KEe=wh(),WEe=yh(),QEe=hi(),OV=X(),{isHdbInstalled:jEe}=Ja();OV.initSync();var Wn={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},Qr={LEAF:"leaf server",HUB:"hub server"},Gm;bV.exports=zEe;async function zEe(){let e={harperdb:{status:Wn.STOPPED}};if(!await jEe()){e.harperdb.status=Wn.NOT_INSTALLED,console.log(XN.stringify(e));return}Gm=OV.get(Pd.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await ZN.readFile(ey.join(Gm,Pd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Pd.NODE_ERROR_CODES.ENOENT){ty.info("`harperdb status` did not find a hdb.pid file"),e.harperdb.status=Wn.STOPPED,console.log(XN.stringify(e));return}throw n}let r=await QEe.getHDBProcessInfo();for(let n of r.core)if(n.pid===t){e.harperdb.status=Wn.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await JEe(r),e.clustering[Qr.HUB].status===Wn.RUNNING&&e.clustering[Qr.LEAF].status===Wn.RUNNING){let n=[],s=await KEe({});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 WEe.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 Ld.closeConnection()}console.log(XN.stringify(e)),process.exit()}a(zEe,"status");async function JEe(e){let t={[Qr.HUB]:{},[Qr.LEAF]:{}};if(e.clustering.length===0)return t[Qr.HUB].status=Wn.STOPPED,t[Qr.LEAF].status=Wn.STOPPED,t;let{port:r}=Ld.getServerConfig(Pd.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:n,decrypt_hash:s}=await YEe.getClusterUser();try{(await Ld.createConnection(r,n,s,!1)).close(),t[Qr.HUB].status=Wn.RUNNING}catch{t[Qr.HUB].status=Wn.ERRORED}let{port:i}=Ld.getServerConfig(Pd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await Ld.createConnection(i,n,s,!1)).close(),t[Qr.LEAF].status=Wn.RUNNING}catch{t[Qr.LEAF].status=Wn.ERRORED}try{t[Qr.HUB].pid=Number.parseInt(await ZN.readFile(ey.join(Gm,"clustering",AV.PID_FILES.HUB),"utf8"))}catch(o){ty.error(o),t[Qr.HUB].pid=void 0}try{t[Qr.LEAF].pid=Number.parseInt(await ZN.readFile(ey.join(Gm,"clustering",AV.PID_FILES.LEAF),"utf8"))}catch(o){ty.error(o),t[Qr.LEAF].pid=void 0}return t}a(JEe,"getHubLeafStatus")});var ec=x(),XEe=Vi(),ry=C(),qm=require("fs"),yV=require("path"),$Ie=require("os"),{PACKAGE_ROOT:ZEe}=C(),ehe=Fy(),VIe=(im(),se(dN)),IV=vk(),{SERVICE_ACTIONS_ENUM:Sr}=ry;the();function the(){let e=ehe();if(e)if(e.error){console.error(e.error),ec.error(e.error);return}else e.warn&&(console.warn(e.warn),ec.warn(e.warn));let t;qm.readdir(yV.join(ZEe,"bin"),r=>{if(r)return ec.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let n=IV.buildRequest();n.operation&&(t=Sr.OPERATION);let s;switch(t){case Sr.OPERATION:ec.trace("calling cli operations with:",n),IV.cliOperations(n).then();break;case Sr.DEV:process.env.DEV_MODE=!0;case Sr.RUN:let i=process.argv[3];i&&i[0]!=="-"&&(qm.existsSync(i)||(console.error(`The folder ${i} does not exist`),process.exit(1)),qm.statSync(i).isDirectory()||(console.error(`The path ${i} is not a folder`),process.exit(1)),qm.existsSync(yV.join(i,ry.HDB_CONFIG_FILE))?process.env.ROOTPATH=i:process.env.RUN_HDB_APP=i),Ja().main();break;case Sr.START:process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL")?JN()(!0).catch(S=>{console.log(S)}):s=Ja().launch();break;case Sr.INSTALL:SV()().then(()=>Ja().main(!0)).catch(m=>{console.error(m)});break;case Sr.REGISTER:RV().register().then(m=>{console.log(m)}).catch(m=>{console.error(m)});break;case Sr.STOP:YN()().then(()=>{process.exit(0)}).catch(m=>{console.error(m)});break;case Sr.RESTART:Ca().restart({}).then().catch(m=>{ec.error(m),console.error(`There was an error restarting HarperDB. ${m}`),process.exit(1)});break;case Sr.VERSION:XEe.printVersion();break;case Sr.UPGRADE:ec.setLogLevel(ry.LOG_LEVELS.INFO),FN().upgrade(null).then(()=>{console.log("Your instance of HarperDB is up to date!")}).catch(m=>{ec.error(`Got an error during upgrade ${m}`)});break;case Sr.STATUS:NV()().then().catch(m=>{console.error(m)});break;case Sr.RENEWCERTS:let{generateKeys:f}=Rm();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];(Yh(),se(Vh)).copyDb(E,h);break;case void 0:process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL")?JN()().catch(S=>{console.log(S)}):Ja().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 n$(NN,!0,e)),Gi.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Ad?", but errors occurred":"")}a(j_e,"reindexUpgrade");async function n$(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 z_e(o,d,t),Er.info(`Reindexing started for ${o}.${d}`),Gi.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await X_e(o,d,c,t,r),Er.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),Er.error(f),console.error(f)}}}if(!Ad)try{await Qs.rm(gm,{recursive:!0})}catch{}}a(n$,"processTables");async function z_e(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=qi.join(gm,s);await Qs.ensureDir(gm),await Qs.writeFile(i,""),Er=W_e({level:"debug",formatters:{bindings(){}}},i)}a(z_e,"initPinoLogger");var J_e=20;async function X_e(e,t,r,n,s){let i;try{i=await An.openEnvironment(r,t,n)}catch(R){if(R.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`),Er.error(R);return}throw R}let o=tde(i.dbis),c=An.openDBI(i,o),l=Object.keys(i.dbis),_=An.statDBI(i,o);Er.info(`Old environment stats: ${JSON.stringify(_)}`);let u=new K_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 An.createEnvironment(r,t,!1);An.createDBI(d,o,!1,!0);let f=[];try{for(let R of c.getRange({start:!1}))R.value=Object.assign({},R.value),f.push(R),n||e==="system"&&(t==="hdb_schema"&&(R.key=R.key.toString(),R.value.name=R.value.name.toString()),t==="hdb_table"&&(R.key=R.key.toString(),R.value.schema=R.value.schema.toString(),R.value.name=R.value.name.toString()),t==="hdb_attribute"&&(R.key=R.key.toString(),R.value.schema=R.value.schema.toString(),R.value.table=R.value.table.toString(),R.value.attribute=R.value.attribute.toString())),f.length>J_e&&await E();await E()}catch(R){throw Ad=!0,Er.error(R),R}async function E(){let R,A=f.map(({value:U})=>U);n?R=await Promise.all(A.map(U=>Z_e(d,U))):R=await k_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];Er.info(`Record hash value: ${k} hash: ${o}`);let j;n?j=R[U]:j=R.written_hashes.indexOf(k)>-1,Rd(j,!0),ede(d,o,H[o],n),Er.info(`Insert success, written hashes: ${R.written_hashes}`),u.increment()}f=[],u.value/u.total*100%10===0&&Gi.notify(`${e}.${t} ${u.value}/${u.total} records inserted`),Er.info(`${u.value}/${u.total} records inserted`)}a(E,"finishOutstanding"),u.stop();let h=An.statDBI(i,o),m=An.statDBI(d,o);if(Er.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${m.entryCount}`),Rd.deepStrictEqual(h.entryCount,m.entryCount),await An.closeEnvironment(i),await An.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let R=qi.join(r,t),A=qi.join(R,"data.mdb"),P=qi.join(R,"lock.mdb");await Qs.unlink(A),await Qs.unlink(P),await Qs.rmdir(R),Er.info(`Deleted old environment files from schema folder: ${A}, ${P}`)}let S=await An.openEnvironment(r,t),g=An.statDBI(S,o);Er.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify(g)}`),Rd.deepStrictEqual(g.entryCount,m.entryCount),await An.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(X_e,"processTable");async function Z_e(e,t){An.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),Y_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(Z_e,"insertTransaction");function ede(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&&!V_e.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let _=0,u=l.length;_<u;_++){let d=l[_];s$(e,c,d,r)}else s$(e,c,l,r)}a(ede,"validateIndices");function s$(e,t,r,n){try{let s=!1,i=$_e.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||Er.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),Rd.deepStrictEqual(s,!0)}catch(s){Ad=!0,Er.error(s),console.error(s)}}a(s$,"validateIndex");function tde(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(tde,"getHashDBI")});var Am=T((gIe,c$)=>{"use strict";var rde=require("mkcert"),Rm=require("path"),yN=require("fs-extra"),IN=x(),nde=X(),wN=D(),wl=RT(),sde=Ji(),ide=ut();c$.exports={generateKeys:ode,updateConfigCert:a$};async function ode(){let e=nde.getHdbBasePath(),t=Rm.join(e,wN.LICENSE_KEY_DIR_NAME),r=await rde.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:3650,caKey:wl.CERTIFICATE_VALUES.key,caCert:wl.CERTIFICATE_VALUES.cert}),n=Rm.join(t,wl.CERTIFICATE_PEM_NAME),s=Rm.join(t,wl.PRIVATEKEY_PEM_NAME),i=Rm.join(t,wl.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,wl.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}a$(n,s,i)}a(ode,"generateKeys");function a$(e,t,r){let n=sde(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()]),ide.updateConfigValue(void 0,void 0,i,!1,!0)}a(a$,"updateConfigCert")});var f$=T((OIe,d$)=>{"use strict";var Om=require("path"),Go=require("fs-extra"),ade=ON(),Ja=x(),l$=ut(),CN=X(),gs=D(),bm=K(),cde=require("properties-reader"),lde=os(),ude=wE(),_de=sr(),AIe=require("util"),dde=_de.searchByValue,fde=br(),Ede=jE(),hde=Xe(),pde=o$(),u$=Am(),mde=mm(),Nd=new ade("4.0.0"),_$=[],Od,bd;async function Sde(){try{if(await mde.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Od){let t=bm.changeExtension(Od,".bak");await Go.move(Od,t)}if(bd){let t=bm.changeExtension(bd,".bak");await Go.move(bd,t)}await u$.generateKeys()}else console.log("Using existing certificates."),u$.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(Sde,"generateNewKeys");async function Tde(){console.log("Updating HarperDB nodes."),Ja.info("Updating HarperDB nodes.");let e=[];try{let t=new lde(gs.SYSTEM_SCHEMA_NAME,gs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await dde(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!hde.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(bm.isEmptyOrZeroLength(n))return;let s=new ude(gs.SYSTEM_SCHEMA_NAME,gs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await fde.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{Ede.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(Tde,"updateNodes");async function gde(){let e=CN.get(gs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(Om.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=Om.dirname(e),n=CN.get(gs.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=Om.join(n,"backup","4_0_0_upgrade_settings.bak"),i=Om.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=l$.initOldConfig(e);Od=d[gs.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],bd=d[gs.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],l$.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=bm.getPropsFilePath();Go.accessSync(o,Go.constants.F_OK|Go.constants.R_OK);let l=cde(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(gde,"updateSettingsFile_4_0_0");Nd.async_functions.push(gde);Nd.async_functions.push(Sde);Nd.async_functions.push(pde);Nd.async_functions.push(Tde);_$.push(Nd);d$.exports=_$});var DN=T((NIe,m$)=>{"use strict";var Xa=K(),Rde=D(),E$=x(),{DATA_VERSION:Ade,UPGRADE_VERSION:Ode}=Rde.UPGRADE_JSON_FIELD_NAMES_ENUM,h$=t$(),Nm=f$(),Za=new Map;h$&&h$.forEach(e=>{Za.set(e.version,e)});Nm&&Nm.forEach(e=>{Za.set(e.version,e)});Nm&&Nm.forEach(e=>{Za.set(e.version,e)});function bde(){return[...Za.keys()].sort(Xa.compareVersions)}a(bde,"getSortedVersions");function p$(e){let t=e[Ade],r=e[Ode];return Xa.isEmptyOrZeroLength(t)||Xa.isEmptyOrZeroLength(r)?(E$.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),E$.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(p$,"getVersionsForUpgrade");function Nde(e){return p$(e).length>0}a(Nde,"hasUpgradesRequired");function yde(e){return Xa.isEmptyOrZeroLength(e)?null:Za.has(e)?Za.get(e):null}a(yde,"getDirectiveByVersion");m$.exports={getSortedVersions:bde,getDirectiveByVersion:yde,getVersionsForUpgrade:p$,hasUpgradesRequired:Nde}});var yd=T((IIe,A$)=>{"use strict";var Ide=require("util"),LN=require("chalk"),wde=require("os"),T$=br(),Cde=sr(),On=D(),g$=$k(),MN=pT(),{UpgradeObject:S$}=Kk(),{forceDowngradePrompt:Dde}=mm(),Lde=Si(),ym=x(),Cl=K(),UN=Pn(),Pde=(ge(),ie(ke)),Mde=DN(),Ude=Ide.promisify(UN.setSchemaDataToGlobal),vde=Cde.searchByValue,Bde="info_id",Hde="2.9.9",Gde="3.0.0";async function qde(e){let t=new g$.HdbInfoInsertObject(1,e,e),r=new MN.InsertObject(On.OPERATIONS_ENUM.INSERT,On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,On.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return UN.setSchemaDataToGlobal(),T$.insert(r)}a(qde,"insertHdbInstallInfo");async function PN(e){let t,r=await R$(),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 g$.HdbInfoInsertObject(i,e,e);let o=new MN.InsertObject(On.OPERATIONS_ENUM.INSERT,On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,On.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Ude(),T$.insert(o)}a(PN,"insertHdbUpgradeInfo");async function R$(){let e=new MN.NoSQLSeachObject(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Bde,On.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await vde(e))}catch(r){console.error(r)}return t}a(R$,"getAllHdbInfoRecords");async function xde(){let e=await R$();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(xde,"getLatestHdbInfoRecord");async function Fde(){ym.info("Checking if HDB software has been updated");try{let e=Lde.version(),t=await xde(),r;if(Cl.isEmpty(t))r=Hde;else if(r=t.data_version_num,Cl.compareVersions(r.toString(),e.toString())>0){if(!Cl.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.${wde.EOL}${On.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Cl.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(LN.yellow(`This instance's data was last run on version ${r}`)),await Dde(new S$(r,e))?await PN(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(UN.setSchemaDataToGlobal(),kde(r),e.toString()===r.toString())return;let n=new S$(r,e);if(Mde.hasUpgradesRequired(n))return n;Cl.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await PN(n.upgrade_version),ym.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw ym.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),ym.fatal(e),e}}a(Fde,"getVersionUpdateInfo");function kde(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 ${On.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in Pde.databases.system))throw console.log(t),new Error(t);if(!Cl.isEmpty(e)&&e<Gde)throw console.log(t),new Error(t)}a(kde,"checkIfInstallIsSupported");A$.exports={insertHdbInstallInfo:qde,insertHdbUpgradeInfo:PN,getVersionUpdateInfo:Fde}});var I$=T((CIe,y$)=>{"use strict";var vN=require("joi"),{boolean:$de,string:O$,number:Vde}=vN.types(),b$=require("fs-extra"),Id=D(),N$=require("path"),Yde=tt();y$.exports=Kde;function Kde(e){let t=O$.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=vN.object({[Id.INSTALL_PROMPTS.ROOTPATH]:vN.custom(Wde),[Id.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:Vde.min(0).allow("null",null),[Id.INSTALL_PROMPTS.TC_AGREEMENT]:O$.valid("yes","YES","Yes"),[Id.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Id.INSTALL_PROMPTS.CLUSTERING_ENABLED]:$de});return Yde.validateBySchema(e,r)}a(Kde,"installValidator");function Wde(e,t){if(b$.existsSync(N$.join(e,"system/hdb_user/data.mdb"))||b$.existsSync(N$.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(Wde,"validateRootAvailable")});var GN=T((LIe,w$)=>{"use strict";var{mkdirpSync:Qde}=require("fs-extra"),js=require("path"),Dl=D(),HN=x(),jde=Mn(),BN=ci(),zde=je();w$.exports=Jde;async function Jde(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",Dl.LICENSE_FILE_NAME)),Rs(js.join(e,"log")),Rs(js.join(e,"doc")),Rs(js.join(e,"database")),Rs(js.join(e,Dl.TRANSACTIONS_DIR_NAME)),Rs(js.join(e,"clustering","leaf")),Rs(js.join(e,"components")),await Xde()}a(Jde,"mountHdb");async function Xde(){let e=Iu(),t=Object.keys(BN);for(let r=0;r<t.length;r++){let n=t[r],s=BN[n].hash_attribute;try{zde.initSystemSchemaPaths(Dl.SYSTEM_SCHEMA_NAME,n);let i=new e(Dl.SYSTEM_SCHEMA_NAME,n,s);i.attributes=BN[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,await jde.createTable(n,i)}catch(i){throw HN.error(`issue creating environment for ${Dl.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(Xde,"createLMDBTables");function Rs(e){Qde(e,{mode:Dl.HDB_FILE_PERMISSIONS}),HN.info(`Directory ${e} created`)}a(Rs,"makeDirectory")});var wm=T((MIe,x$)=>{"use strict";var xN=require("os"),P$=require("inquirer"),jn=require("fs-extra"),Zde=require("properties-reader"),ec=require("chalk"),Xs=require("path"),efe=require("human-readable-ids").hri,tfe=require("ora"),rfe=require("yaml"),Dt=x(),Fo=X(),wd=K(),Im=Ji(),M$=yd(),U$=Si(),re=D(),nfe=I$(),sfe=GN(),FN=ut(),ife=yr(),ofe=NE(),afe=mN(),cfe=Pn(),lfe=require("util").promisify,ufe=lfe(cfe.setSchemaDataToGlobal),_fe=Am(),Ll=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),hr=a(e=>ec.magenta.bold(e),"HDB_PROMPT_MSG"),dfe="https://harperdb.io/legal/end-user-license-agreement",ko=xN.EOL,qo="",ffe="yes",C$="Starting HarperDB install...",D$="HarperDB installation was successful.",L$="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Efe="An out of date version of HarperDB is already installed.",qN="It appears that HarperDB is already installed. Exiting install...",hfe="Aborting install",pfe=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])$/),mfe=new RegExp(/^[^\s.,*>]+$/),Sfe=xN.homedir(),Tfe=Xs.join(Sfe,re.HDB_ROOT_DIR_NAME),gfe=9925,Rfe="HDB_ADMIN",Afe="CLUSTER_USER",Vr={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=Im([re.INSTALL_PROMPTS.HDB_CONFIG]),Js,v$=!1,B$=!1;x$.exports={install:H$,updateConfigEnv:Mfe,setIgnoreExisting:Ufe};H$.createSuperUser=q$;async function H$(){console.log(hr(ko+C$+ko)),Dt.notify(C$);let e;$o[re.INSTALL_PROMPTS.HDB_CONFIG]&&(e=Ofe());let t=Nfe();Object.assign(t,e);let r=nfe(t);if(r)throw r.message;await yfe(),await Ife(t);let n=await bfe(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&&(v$=!0),!$o[re.INSTALL_PROMPTS.HDB_CONFIG]&&await jn.pathExists(Xs.join(Js,re.HDB_CONFIG_FILE))&&(console.error(qN),process.exit());let s=tfe({prefixText:hr("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 sfe(Js),await wfe(),await Cfe(n),Dt.initLogSettings(!0),await q$(n),await Lfe(n),await _fe.generateKeys(),await Pfe(),afe(),s.stop(),console.log(hr(ko+D$+ko)),Dt.notify(D$)}a(H$,"install");function Ofe(){let e=rfe.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(Ofe,"getConfigFromFile");async function bfe(e){Dt.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Ll,when:xo(e[re.INSTALL_PROMPTS.ROOTPATH],Vr.DESTINATION),name:re.INSTALL_PROMPTS.ROOTPATH,prefix:qo,default:Tfe,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:hr(Vr.DESTINATION)},{type:"input",transformer:Ll,when:xo(e[re.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]??e[re.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT],Vr.HDB_PORT),name:re.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:qo,default:gfe,validate:s=>pfe.test(s)?!0:"Invalid port.",message:hr(Vr.HDB_PORT)},{type:"input",transformer:Ll,when:xo(e[re.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Vr.HDB_USERNAME),name:re.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:qo,default:Rfe,validate:s=>zs(s)?zs(s):(t=s,!0),message:hr(Vr.HDB_USERNAME)},{type:"password",when:xo(e[re.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Vr.HDB_PASS),name:re.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:qo,validate:s=>zs(s)?zs(s):!0,message:hr(Vr.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],Vr.NODE_NAME),name:re.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:qo,default:efe.random(),validate:i=>mfe.test(i)?!0:"Invalid node name, must not contain ., * or >",message:hr(Vr.NODE_NAME)},{type:"input",transformer:Ll,when:xo(e[re.INSTALL_PROMPTS.CLUSTERING_USER],Vr.CLUSTER_USERNAME),name:re.INSTALL_PROMPTS.CLUSTERING_USER,prefix:qo,default:Afe,validate:i=>zs(i)?zs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:hr(Vr.CLUSTER_USERNAME)},{type:"password",when:xo(e[re.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Vr.CLUSTER_PASS),name:re.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:qo,validate:i=>zs(i)?zs(i):!0,message:hr(Vr.CLUSTER_PASS)}];r.push(...s)}let n=await P$.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(bfe,"installPrompts");function xo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${hr(t)} ${ec.gray("[hidden]")}`),Dt.trace(`${hr(t)} [hidden]`)):(console.log(`${hr(t)} ${e}`),Dt.trace(`${hr(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 Nfe(){let e=Object.keys(re.INSTALL_PROMPTS),t=Im(e),r=Im(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(Nfe,"checkForPromptOverride");async function yfe(){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=Zde(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&&!B$){if(Dt.trace(`Install found existing HDB config at:${e}`),await M$.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${U$.version()}. Exiting install...`;console.log(ko+ec.magenta.bold(Efe)),console.log(ec.magenta.bold(s)),Dt.error(s)}else console.log(ko+ec.magenta.bold(qN)),Dt.error(qN);process.exit(0)}}a(yfe,"checkForExistingInstall");async function Ife(e){Dt.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${dfe}${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:hr(t),validate:s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:ec.yellow("Please enter 'yes' or 'no'")},n=await P$.prompt([r]);n[re.INSTALL_PROMPTS.TC_AGREEMENT]&&n[re.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==ffe&&(console.log(ec.yellow(L$)),Dt.error(L$),process.exit(0))}a(Ife,"termsAgreement");async function wfe(){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(wfe,"createBootPropertiesFile");async function Cfe(e){Dt.trace("Creating HarperDB config file");let t=Im(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){Dfe(r)}}a(Cfe,"createConfigFile");function Dfe(e){Dt.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(hfe);let t=Xs.resolve(Fo.get(Fo.BOOT_PROPS_FILE_PATH),"../");t&&jn.removeSync(t),Js&&(v$?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(Dfe,"rollbackInstall");async function G$(e,t){Dt.trace("Creating admin user"),await ufe();let r;try{r=await ofe.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 ife.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(G$,"createAdminUser");async function q$(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 G$(t,r),delete e[re.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[re.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(q$,"createSuperUser");async function Lfe(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 G$({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[re.INSTALL_PROMPTS.CLUSTERING_USER],delete e[re.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(Lfe,"createClusterUser");async function Pfe(){let e=U$.version();if(e)await M$.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(Pfe,"insertHdbVersionInfo");function Mfe(e){$o[re.INSTALL_PROMPTS.HDB_CONFIG]=e}a(Mfe,"updateConfigEnv");function Ufe(e){B$=e}a(Ufe,"setIgnoreExisting")});var $$=T((vIe,k$)=>{"use strict";var kN=K(),bn=x(),F$=DN();k$.exports={processDirectives:vfe};async function vfe(e){console.log("Starting upgrade process...");let t=F$.getVersionsForUpgrade(e),r=Gfe(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;bn.notify(c),console.log(c);let l=[],_=[];try{l=Bfe(o.sync_functions)}catch(u){throw bn.error(`Error while running an upgrade script for ${o.version}`),u}try{_=await Hfe(o.async_functions)}catch(u){throw bn.error(`Error while running an upgrade script for ${o.version}`),u}n.push(...l,..._)}return n}a(vfe,"processDirectives");function Bfe(e){if(kN.isEmptyOrZeroLength(e))return bn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return bn.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(bn.info(`Running function ${r.name}`),!(r instanceof Function)){bn.info("Variable being processed is not a function");continue}let n=r();bn.info(n),t.push(n)}return t}a(Bfe,"runSyncFunctions");async function Hfe(e){if(kN.isEmptyOrZeroLength(e))return bn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return bn.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(bn.info(`Running function ${s.name}`),!(s instanceof Function)){bn.info("Variable being processed is not a function");continue}let i=await s();bn.info(i),t.push(i)}return t}a(Hfe,"runAsyncFunctions");function Gfe(e){if(kN.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=F$.getDirectiveByVersion(r);n&&t.push(n)}return t}a(Gfe,"getUpgradeDirectivesToInstall")});var YN=T((HIe,j$)=>{"use strict";var Cm=X();Cm.initSync();var W$=require("chalk"),V$=require("fs-extra"),Fi=x(),xi=D(),Y$=Si(),qfe=$$(),$N=K(),Q$=yd(),xfe=mm(),K$=oS(),Ffe=Pn(),kfe=require("util").promisify,$fe=kfe(Ffe.setSchemaDataToGlobal),VN,{UPGRADE_VERSION:Dm}=xi.UPGRADE_JSON_FIELD_NAMES_ENUM;j$.exports={upgrade:Vfe};async function Vfe(e){await $fe(),VN===void 0&&(VN=$c()),V$.existsSync(Cm.get(Cm.BOOT_PROPS_FILE_PATH))||(Cd("The hdb_boot_properties file was not found. Please install HDB.",xi.LOG_LEVELS.ERROR),process.exit(1)),V$.existsSync(Cm.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 Q$.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),Cd(`This version of HarperDB is ${Y$.version()}`,xi.LOG_LEVELS.INFO);let r=t[Dm]?t[Dm]:Y$.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 Yfe();let n,s=0;try{n=await xfe.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 Kfe(t),Cd(`HarperDB was successfully upgraded to version ${t[Dm]}`,xi.LOG_LEVELS.INFO)}a(Vfe,"upgrade");async function Yfe(){let e=!1,t=await K$.findPs(xi.HDB_PROC_NAME);if($N.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await K$.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(W$.red(r)),Fi.error(r),process.exit(1)}}a(Yfe,"checkIfRunning");async function Kfe(e){try{await qfe.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 Q$.insertHdbUpgradeInfo(e[Dm])}catch(t){Fi.error("Error updating the 'hdb_info' system table."),Fi.error(t)}}a(Kfe,"runUpgrade");function Cd(e,t=void 0){t||(t=Fi.info),Fi[t](e),console.log(W$.magenta(e))}a(Cd,"printToLogAndConsole")});var eV=T((qIe,Z$)=>{"use strict";var{promises:WN,createReadStream:Wfe,createWriteStream:Qfe}=require("fs"),{createGzip:jfe}=require("zlib"),{promisify:zfe}=require("util"),{pipeline:Jfe}=require("stream"),Xfe=zfe(Jfe),Zfe=require("path"),rc=X();rc.initSync();var tc=x(),{CONFIG_PARAMS:Dd,ITC_EVENT_TYPES:eEe}=D(),{onMessageFromWorkers:tEe}=et(),rEe=6e4,nEe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",sEe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",KN,J$;Z$.exports=X$;tEe(e=>{e.type===eEe.RESTART&&(rc.initSync(!0),clearInterval(J$),rc.get(Dd.LOGGING_ROTATION_ENABLED)&&X$())});async function X$(){try{let e=tc.getLogFilePath(),t=rc.get(Dd.LOGGING_ROTATION_MAXSIZE),r=rc.get(Dd.LOGGING_ROTATION_INTERVAL);if(!t&&!r){tc.error(nEe);return}let n=rc.get(Dd.LOGGING_ROTATION_PATH);if(!n){tc.error(sEe);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),J$=setInterval(async()=>{if(s){let o;o=await WN.stat(e),o.size>=s&&await z$(e,n)}i&&Date.now()/6e4-KN>=i&&(await z$(e,n),KN=Date.now()/6e4)},rEe).unref()}catch(e){tc.error(e)}}a(X$,"logRotator");async function z$(e,t){let r=rc.get(Dd.LOGGING_ROTATION_COMPRESS),n=Zfe.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await Xfe(Wfe(e),jfe(),Qfe(n)),await WN.unlink(e)):await WN.rename(e,n),tc.closeLogFile(),tc.notify(`hdb.log rotated, old log moved to ${n}`)}a(z$,"moveLogFile")});var nc=T((jIe,cV)=>{"use strict";var Yr=X();Yr.initSync();var FIe=wa(),Lt=D(),ei=x(),ki=require("fs-extra"),Vo=require("path"),iEe=require("systeminformation"),oEe=mN(),{install:aEe}=wm(),QN=require("chalk"),cEe=ha(),$i=K(),rV=ut(),nV=Ji(),tV=rh(),lEe=YN(),uEe=eV(),{compactOnStart:_Ee}=(uh(),ie(lh)),dEe=require("minimist"),{PACKAGE_ROOT:fEe}=D(),{startHTTPThreads:EEe,startSocketServer:kIe,mostIdleRouting:$Ie,remoteAffinityRouting:VIe}=(pb(),ie(Bx)),hEe=yd(),{isMainThread:pEe}=require("worker_threads"),YIe=ci(),KIe=_i(),WIe=dg(),QIe=Iu(),Lm=D(),Zs,Pl,sV=!1,mEe="Upgrade complete. Starting HarperDB.",SEe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",TEe="HarperDB not found, starting install process.",gEe="There was an error during install, check install_log.log for more details. Exiting.",REe="HarperDB successfully started.";function AEe(){if(!sV){let e=a(()=>{ki.removeSync(Vo.join(Yr.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(AEe,"addExitListeners");async function iV(e=!1,t=!1){if(console.log(QN.magenta("Starting HarperDB...")),await aV()===!1){console.log(TEe);try{await aEe()}catch(o){console.error(gEe,o),ei.error(o),process.exit(1)}}if(!e){let o=nV(Object.keys(Lt.CONFIG_PARAM_MAP),!0);!$i.isEmpty(o)&&!$i.isEmptyOrZeroLength(Object.keys(o))&&rV.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(Yr.get(Lt.CONFIG_PARAMS.ROOTPATH),Lt.HDB_PID_FILE),"utf8")),c=await iEe.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()),Yr.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 tV.generateNatsConfig(),await Zs.startClusteringProcesses(!0),process.exit()),AEe(),await ki.writeFile(Vo.join(Yr.get(Lm.CONFIG_PARAMS.ROOTPATH),Lm.HDB_PID_FILE),`${process.pid}`),ei.info("HarperDB PID",process.pid);let s;try{let o=await hEe.getVersionUpdateInfo();o!==void 0&&(s=o[Lt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await lEe.upgrade(o),console.log(mEe))}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(SEe,o),ei.error(o)),process.exit(1)}oEe(),NEe(),$i.autoCastBoolean(Yr.get(Lt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&pEe&&await tV.generateNatsConfig(t)}a(iV,"initialize");async function OEe(e=!1){try{Pl=dEe(process.argv),Pl.ROOTPATH&&rV.updateConfigObject("settings_path",Vo.join(Pl.ROOTPATH,Lt.HDB_CONFIG_FILE)),await iV(e,!0),Yr.get(Lt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await _Ee();let t=process.env.IS_SCRIPTED_SERVICE&&!Pl.service;$i.autoCastBoolean(Yr.get(Lt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await Zs.startClusteringProcesses(),await Zs.startClusteringThreads()),await EEe(process.env.DEV_MODE?1:Yr.get(Lm.CONFIG_PARAMS.THREADS_COUNT)??Yr.get(Lm.CONFIG_PARAMS.THREADS)),Yr.get(Lt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await uEe(),t||oV()}catch(t){console.error(t),ei.error(t),process.exit(1)}}a(OEe,"main");function oV(){ei.suppressLogging(()=>{console.log(QN.magenta(""+ki.readFileSync(Vo.join(fEe,"utility/install/ascii_logo.txt")))),console.log(QN.magenta(`|------------- HarperDB ${cEe.version} successfully started ------------|`))}),ei.notify(REe)}a(oV,"started");async function bEe(e=!0){sV=!e;try{Zs===void 0&&(Zs=$c()),Zs.enterPM2Mode(),await iV(),$i.autoCastBoolean(Yr.get(Lt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await Zs.startClusteringProcesses(),await Zs.startService(Lt.PROCESS_DESCRIPTORS.HDB),oV(),e&&process.exit(0)}catch(t){console.error(t),ei.error(t),process.exit(1)}}a(bEe,"launch");function NEe(){let e=Vo.join(Yr.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}=nV(["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(NEe,"writeLicenseFromVars");cV.exports={launch:bEe,main:OEe,isHdbInstalled:aV};async function aV(){try{await ki.stat($i.getPropsFilePath()),await ki.stat(Yr.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(aV,"isHdbInstalled")});var ZN=T((JIe,yV)=>{"use strict";var lV=require("os"),Mm=require("https"),uV=require("http"),xt=require("fs-extra"),_V=require("yaml"),yEe=require("human-readable-ids").hri,{pipeline:dV}=require("stream/promises"),{createWriteStream:Um,ensureDir:vm}=require("fs-extra"),{join:yn}=require("path"),SV=require("lodash"),IEe=require("minimist"),Ud=require("path"),wEe=require("properties-reader"),ri=X(),CEe=mi(),TV=x(),jN=ut(),{restart:DEe}=wa(),Bm=K(),LEe=Ji(),fV=pt(),PEe=Pn(),{main:gV,launch:MEe}=nc(),{install:UEe,updateConfigEnv:vEe,setIgnoreExisting:RV}=wm(),AV=GN(),Kr=D(),BEe=Si(),HEe=yd(),{SYSTEM_TABLE_NAMES:EV,SYSTEM_SCHEMA_NAME:GEe,CONFIG_PARAMS:Hm,OPERATIONS_ENUM:In}=Kr,qEe=1e4,xEe="clone-node-config.yaml",JN=[EV.ROLE_TABLE_NAME,EV.USER_TABLE_NAME],FEe={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},Qr={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=IEe(process.argv),Ld=Yo[Qr.HDB_LEADER_USERNAME]??process.env[Qr.HDB_LEADER_USERNAME],Pd=Yo[Qr.HDB_LEADER_PASSWORD]??process.env[Qr.HDB_LEADER_PASSWORD],Md=Yo[Qr.HDB_LEADER_URL]??process.env[Qr.HDB_LEADER_URL],zN=Yo[Qr.HDB_LEADER_CLUSTERING_HOST]??process.env[Qr.HDB_LEADER_CLUSTERING_HOST],kEe=(Yo[Qr.HDB_FULLY_CONNECTED]??process.env[Qr.HDB_FULLY_CONNECTED])==="true",OV=(Yo[Qr.HDB_CLONE_OVERTOP]??process.env[Qr.HDB_CLONE_OVERTOP])==="true",hV=Yo[Qr.CLUSTERING_NODENAME]??process.env[Qr.CLUSTERING_NODENAME],$Ee=Yo[Hm.CLONED.toUpperCase()]??process.env[Hm.CLONED.toUpperCase()],bV,Wr,Yi={},pV,Vi,ti={},ot,Ml,Pt,Nn,As,sc=!1,Gm=!1;yV.exports=a(async function(t=!1){if(console.info(`Starting clone node form leader node: ${Md}`),delete process.env.HDB_LEADER_URL,Pt=Bm.getEnvCliRootPath(),!Pt)try{let s=yn(lV.homedir(),Kr.HDB_HOME_DIR_NAME,Kr.BOOT_PROPS_FILE_NAME);if(await xt.pathExists(s)){let i=wEe(s);Pt=Ud.parse(i.get(Kr.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=yn(lV.homedir(),Kr.HDB_ROOT_DIR_NAME),console.log("Using default root path",Pt));let r;try{r=yn(Pt,xEe),Wr=_V.parseDocument(await xt.readFile(r,"utf8"),{simpleKeys:!0}).toJSON(),console.log("Clone config file found")}catch{}let n=yn(Pt,Kr.HDB_CONFIG_FILE);if(!sc&&await xt.pathExists(n))try{pV=_V.parseDocument(await xt.readFile(n,"utf8"),{simpleKeys:!0}).toJSON(),Yi=jN.flattenConfig(pV)}catch(s){console.error("Error reading existing harperdb-config.yaml on clone",s)}if(Yi?.cloned&&$Ee!=="false")return console.log("Instance marked as cloned, clone will not run"),ri.setCloneVar(!1),ri.initSync(),gV();hV?Ml=hV:Yi[Kr.CONFIG_PARAMS.CLUSTERING_NODENAME.toLowerCase()]?Ml=Yi[Kr.CONFIG_PARAMS.CLUSTERING_NODENAME.toLowerCase()]:Ml=Wr?.clustering?.nodeName??yEe.random(),await VEe(),ri.setCloneVar(!1),ri.setHdbBasePath(Pt),xt.ensureDir(ri.get(Kr.CONFIG_PARAMS.LOGGING_ROOT)),TV.initLogSettings(),await YEe(),Gm||await KEe(),await jEe(t),bV&&zN&&await zEe(),console.info(`
107
+ Successfully cloned node: `+Md),t&&process.exit()},"cloneNode");async function VEe(){console.info("Cloning configuration"),Vi=await XN({operation:In.GET_CONFIGURATION}),Vi=await JSON.parse(Vi.body),bV=Vi?.clustering?.enabled,ti=jN.flattenConfig(Vi);let e=Vi?.clustering?.hubServer?.cluster?.network?.port,t=Wr?.componentConfig?.exclude,r={cloned:!0,clustering_nodename:Ml,rootpath:Pt};for(let s in ti)if(!(ti[s]!==null&&typeof ti[s]=="object"&&!(ti[s]instanceof Array)||FEe[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=LEe(Object.keys(Kr.CONFIG_PARAM_MAP),!0);Object.assign(r,n),jN.createConfigFile(r,!0),ri.initSync(!0)}a(VEe,"cloneConfig");async function YEe(){process.env.HDB_FETCH==="true"?(await QEe(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await WEe()}a(YEe,"cloneDatabases");async function KEe(){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(Hm.OPERATIONSAPI_NETWORK_PORT),vEe(Ud.join(Pt,Kr.HDB_CONFIG_FILE)),await UEe()}a(KEe,"installHDB");function ni(e){return ri.get(Kr.CONFIG_PARAMS.DATABASES)?.[e]?.path||ri.get(Hm.STORAGE_PATH)||Ud.join(Pt,Kr.DATABASES_DIR_NAME)}a(ni,"getDBPath");async function WEe(){let e=ni("system"),t=yn(e,"system.mdb");if(sc||!await xt.exists(t)||OV){console.info("Cloning system database"),await vm(e);let r=Um(t,{overwrite:!0}),n={operation:In.GET_BACKUP,database:"system",tables:JN},s=await mV(n,r);await xt.utimes(t,Date.now(),new Date(s.date)),sc||(await AV(Pt),await NV(),RV(!0))}else Gm=!0,console.log("Not cloning system database due to it already existing on clone");ot=await XN({operation:In.DESCRIBE_ALL}),ot=await JSON.parse(ot.body),Nn=Wr?.databaseConfig?.excludeDatabases,Nn=Nn?Nn.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`),Nn[r]=!0);As=Wr?.databaseConfig?.excludeTables,As=As?As.reduce((r,n)=>({...r,[n.database==null?null:n.database+n.table]:!0}),{}):{};for(let r in ot){if(Nn[r]){ot[r]="excluded";continue}if(SV.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:In.GET_BACKUP,database:r,tables:n}):(console.info(`Cloning database: ${r}`),i={operation:In.GET_BACKUP,database:r});let o=ni(r);await vm(o);let c=yn(o,r+".mdb"),l=Um(c,{overwrite:!0}),_=await mV(i,l);await xt.utimes(c,Date.now(),new Date(_.date))}}a(WEe,"cloneTablesHttp");async function QEe(){let e=ni("system"),t=yn(e,"system.mdb");if(sc||!await xt.exists(t)||OV){console.info("Cloning system database using fetch");let r={operation:In.GET_BACKUP,database:"system",tables:JN},n=await Pm(r,!0),s=ni("system");await vm(s);let i=yn(s,"system.mdb");await dV(n.body,Um(i,{overwrite:!0})),await xt.utimes(i,Date.now(),new Date(n.headers.get("date"))),sc||(await AV(Pt),await NV(),RV(!0))}else Gm=!0,console.log("Not cloning system database due to it already existing on clone");ot=await Pm({operation:In.DESCRIBE_ALL}),ot=await ot.json(),Nn=Wr?.databaseConfig?.excludeDatabases,Nn=Nn?Nn.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`),Nn[r]=!0);As=Wr?.databaseConfig?.excludeTables,As=As?As.reduce((r,n)=>({...r,[n.database==null?null:n.database+n.table]:!0}),{}):{};for(let r in ot){if(Nn[r]){ot[r]="excluded";continue}if(SV.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 Pm({operation:In.GET_BACKUP,database:r,tables:n},!0)):(console.info(`Cloning database: ${r}`),i=await Pm({operation:In.GET_BACKUP,database:r},!0));let o=ni(r);await vm(o);let c=new Date(i.headers.get("date")),l=yn(o,`${c.getTime()}-${r}.mdb`);await dV(i.body,Um(l,{overwrite:!0}));let _=yn(o,r+".mdb");await xt.rename(l,_),await xt.utimes(_,Date.now(),c)}}a(QEe,"cloneTablesFetch");async function Pm(e,t=!1){let r=Wr?.httpsRejectUnauthorized??!1,n=new Mm.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(Pm,"leaderHttpReqFetch");async function jEe(e){let t=await CEe.getHDBProcessInfo();t.clustering.length===0||t.core.length===0?e?await MEe(!1):await gV():(console.info(await DEe({operation:In.RESTART})),await Bm.async_set_timeout(qEe)),e&&await Bm.async_set_timeout(2e3)}a(jEe,"startHDB");async function zEe(){console.info("Clustering cloned tables");let e=Wr?.clusteringConfig?.subscribeToLeaderNode!==!1,t=Wr?.clusteringConfig?.publishToLeaderNode!==!1;await PEe.setSchemaDataToGlobalAsync();let r=n_(),n=await XN({operation:In.CLUSTER_STATUS});n=await JSON.parse(n.body);let s=[];if(!Gm){let l=await xt.stat(yn(ni("system"),"system.mdb"));for(let _ of JN)s.push({schema:GEe,table:_,subscribe:e,publish:t,start_time:l.mtime.toISOString()})}let i=Wr?.clusteringConfig?.excludeDatabases;i=i?i.reduce((l,_)=>({...l,[_.database]:!0}),{}):{};let o=Wr?.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(yn(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 fV.createTableStreams(s),TV.info("Sending add_node request to node:",Vi?.clustering?.nodeName,"with subscriptions:",s);let c;if(kEe&&n.connections.length>0){let l=$E(),_=[{node_name:Vi?.clustering?.nodeName,subscriptions:s}],u=!1;Ml=ri.get(Kr.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(Nn[E.schema]||As[E.schema+E.table]||i[E.schema]||o[E.schema+E.table])continue;u=!0;let h=await xt.stat(yn(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:In.CONFIGURE_CLUSTER,connections:_}),console.info(JSON.stringify(c)))}!c&&s.length>0&&await r({operation:In.ADD_NODE,node_name:Vi?.clustering?.nodeName,subscriptions:s},!0),await fV.closeConnection()}a(zEe,"clusterTables");async function XN(e){let t=new Mm.Agent({rejectUnauthorized:Wr?.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 Bm.httpRequest(i,e)}a(XN,"leaderHttpReq");async function mV(e,t){let r=new Mm.Agent({rejectUnauthorized:Wr?.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,uV=Mm),i.port&&(o.port=i.port),new Promise((c,l)=>{let _=uV.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(mV,"leaderHttpStream");async function NV(){let e=BEe.version();if(e)await HEe.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(NV,"insertHdbVersionInfo")});var wV=T((ZIe,IV)=>{var JEe=wm(),XEe=x();IV.exports=ZEe;async function ZEe(){try{await JEe.install()}catch(e){console.error("There was an error during the install."),console.error(e),XEe.error(e),process.exit(1)}}a(ZEe,"install")});var LV=T((twe,DV)=>{"use strict";var ehe=JE(),the=x(),CV="Registration failed.";async function rhe(){let e;try{e=await ehe.register()}catch(t){return the.error(`Registration error ${t}`),CV}return e||CV}a(rhe,"register");DV.exports={register:rhe}});var vV=T((nwe,UV)=>{"use strict";var nhe=x(),she=D(),ihe=require("util"),ohe=require("child_process"),PV=ihe.promisify(ohe.exec),ahe=mi(),vd=$c(),MV="Stopping HarperDB.";UV.exports=che;async function che(){if(console.log(MV),nhe.notify(MV),await vd.isServiceRegistered(she.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 ahe.getHDBProcessInfo();t.clustering.forEach(r=>{PV(`kill ${r.pid}`)}),t.core.forEach(r=>{PV(`kill ${r.pid}`)})}a(che,"stop")});var qV=T((iwe,GV)=>{"use strict";var ty=require("fs-extra"),ry=require("path"),ey=require("yaml"),Bd=pt(),Hd=D(),BV=Xe(),ny=x(),lhe=yr(),uhe=WE(),_he=YE(),dhe=mi(),HV=X(),{isHdbInstalled:fhe}=nc();HV.initSync();var zn={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},jr={LEAF:"leaf server",HUB:"hub server"},qm;GV.exports=Ehe;async function Ehe(){let e={harperdb:{status:zn.STOPPED}};if(!await fhe()){e.harperdb.status=zn.NOT_INSTALLED,console.log(ey.stringify(e));return}qm=HV.get(Hd.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await ty.readFile(ry.join(qm,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 dhe.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 hhe(r),e.clustering[jr.HUB].status===zn.RUNNING&&e.clustering[jr.LEAF].status===zn.RUNNING){let n=[],s=await uhe({});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 _he.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(Ehe,"status");async function hhe(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 lhe.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(qm,"clustering",BV.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(qm,"clustering",BV.PID_FILES.LEAF),"utf8"))}catch(o){ny.error(o),t[jr.LEAF].pid=void 0}return t}a(hhe,"getHubLeafStatus")});var Fm=process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL");Fm&&X().setCloneVar(!0);var xm=require("fs"),xV=require("path"),ic=x(),FV=Hk(),phe=Si(),mhe=xk(),sy=D(),{SERVICE_ACTIONS_ENUM:pr,PACKAGE_ROOT:She}=sy;The();function The(){let e=mhe();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;xm.readdir(xV.join(She,"bin"),r=>{if(r)return ic.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let n;Fm||(n=FV.buildRequest(),n.operation&&(t=pr.OPERATION));let s;switch(t){case pr.OPERATION:ic.trace("calling cli operations with:",n),FV.cliOperations(n).then();break;case pr.DEV:process.env.DEV_MODE=!0;case pr.RUN:let i=process.argv[3];i&&i[0]!=="-"&&(xm.existsSync(i)||(console.error(`The folder ${i} does not exist`),process.exit(1)),xm.statSync(i).isDirectory()||(console.error(`The path ${i} is not a folder`),process.exit(1)),xm.existsSync(xV.join(i,sy.HDB_CONFIG_FILE))?process.env.ROOTPATH=i:process.env.RUN_HDB_APP=i),nc().main();break;case pr.START:Fm?ZN()(!0).catch(S=>{console.log(S)}):s=nc().launch();break;case pr.INSTALL:wV()().then(()=>nc().main(!0)).catch(m=>{console.error(m)});break;case pr.REGISTER:LV().register().then(m=>{console.log(m)}).catch(m=>{console.error(m)});break;case pr.STOP:vV()().then(()=>{process.exit(0)}).catch(m=>{console.error(m)});break;case pr.RESTART:wa().restart({}).then().catch(m=>{ic.error(m),console.error(`There was an error restarting HarperDB. ${m}`),process.exit(1)});break;case pr.VERSION:phe.printVersion();break;case pr.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 pr.STATUS:qV()().then().catch(m=>{console.error(m)});break;case pr.RENEWCERTS:let{generateKeys:f}=Am();f().then(()=>{console.log("Successfully renewed self-signed certificates")}).catch(()=>{console.error(r)});break;case pr.COPYDB:let E=process.argv[3],h=process.argv[4];(uh(),ie(lh)).copyDb(E,h);break;case void 0:Fm?ZN()().catch(S=>{console.log(S)}):nc().main();break;default:console.warn(`The "${t}" command is not understood.`);case pr.HELP:console.log(`
107
108
  Usage: harperdb [command]
108
109
 
109
110
  With no command, harperdb will simply run HarperDB (in the foreground)
@@ -120,4 +121,4 @@ Commands:
120
121
  upgrade - Upgrade harperdb
121
122
  renew-certs - Generate a new set of self-signed certificates
122
123
  status - Print the status of HarperDB and clustering
123
- <api-operation> <parameter>=<value> - Run an API operation and return result to the CLI, not all operations are supported`)}})}a(the,"harperDBService");
124
+ <api-operation> <parameter>=<value> - Run an API operation and return result to the CLI, not all operations are supported`)}})}a(The,"harperDBService");