harperdb 4.3.0-beta.10 → 4.3.0-beta.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,20 +1,20 @@
1
- "use strict";var Xq=Object.create;var rc=Object.defineProperty;var Zq=Object.getOwnPropertyDescriptor;var eG=Object.getOwnPropertyNames;var tG=Object.getPrototypeOf,rG=Object.prototype.hasOwnProperty;var a=(e,t)=>rc(e,"name",{value:t,configurable:!0});var Re=(e,t)=>()=>(e&&(t=e(e=0)),t);var g=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ye=(e,t)=>{for(var r in t)rc(e,r,{get:t[r],enumerable:!0})},eO=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of eG(t))!rG.call(e,n)&&n!==r&&rc(e,n,{get:()=>t[n],enumerable:!(s=Zq(t,n))||s.enumerable});return e};var x=(e,t,r)=>(r=e!=null?Xq(tG(e)):{},eO(t||!e||!e.__esModule?rc(r,"default",{value:e,enumerable:!0}):r,e)),ne=e=>eO(rc({},"__esModule",{value:!0}),e);var sO=g((Nae,rO)=>{var sG=require("fast-glob"),{statSync:Sh,existsSync:Th,readFileSync:nG,writeFileSync:iG}=require("fs"),{spawnSync:oG,spawn:aG,execFileSync:bae}=require("child_process"),{isMainThread:cG}=require("worker_threads"),{join:Qn,relative:tO}=require("path"),{PACKAGE_ROOT:Rs}=M(),{tmpdir:uG,platform:lG}=require("os");require("source-map-support").install();var _G=["resources","server","dataLayer","components"],sc="ts-build",gh,dG=__filename.endsWith("tsBuild.js");if(dG){if(cG){let r;try{Sh(Qn(Rs,sc)),r=!0}catch{}if(r)for(let s of sG.sync(_G.map(n=>n+"/**/*.ts"),{cwd:Rs})){let n=0,i=0;try{n=Sh(Qn(Rs,s)).mtimeMs-5e3,i=Sh(Qn(Rs,sc,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),gh=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),gh=!0;if(gh){let s=Qn(Rs,"node_modules/.bin/tsc");lG()==="win32"&&(s+=".cmd");let n=oG(s,{cwd:Rs});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=Qn(uG(),"harperdb-tsc.pid"),o;if(Th(i))try{process.kill(+nG(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=aG(s,["--watch"],{cwd:Rs,detached:!0,stdio:"ignore"});iG(i,c.pid.toString()),c.unref()}}}}let e=rO.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(Rs)&&!s[0].includes("node_modules")){let i=tO(Rs,s[0]),o;i.startsWith(sc)?o=Qn(Rs,tO(sc,i)):o=Qn(Rs,sc,i);let c=Qn(o,r),u=c+".js";if(Th(u))return u;if(c.includes(".")&&Th(c))return c}return t(r,s,n)}}});var M=g((Iae,pO)=>{"use strict";var ts=require("path"),fG=require("fs"),{relative:yae,join:wae}=ts,{existsSync:EG}=fG;function hG(){let e=__dirname;for(;!EG(ts.join(e,"package.json"));){let t=ts.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(hG,"getHDBPackageRoot");var zn=hG(),nO="js",$l=nO,mG="harperdb-config.yaml",pG="defaultConfig.yaml",SG="hdb",iO=`harperdb.${$l}`,oO=`customFunctionsServer.${$l}`,TG=`restartHdb.${$l}`,Ah="HarperDB",Vl="Custom Functions",Yl="Clustering Hub",Kl="Clustering Leaf",gG="Clustering Ingest Service",RG="Clustering Reply Service",AG="foreground.pid",OG="hdb.pid",bG="data",NG={HDB:Ah,CLUSTERING_HUB:Yl,CLUSTERING_LEAF:Kl,CLUSTERING_INGEST_SERVICE:gG,CLUSTERING_REPLY_SERVICE:RG,CUSTOM_FUNCTIONS:Vl,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"},yG={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},wG={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},IG={harperdb:Ah,"clustering hub":Yl,"clustering leaf":Kl,"custom functions":Vl,custom_functions:Vl,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},CG={CLUSTERING_HUB_PROC_DESCRIPTOR:Yl,CLUSTERING_LEAF_PROC_DESCRIPTOR:Kl},Rh={HDB:ts.join(zn,"server/harperdb"),CUSTOM_FUNCTIONS:ts.join(zn,"server/customFunctions"),CLUSTERING_HUB:ts.join(zn,"server/nats"),CLUSTERING_LEAF:ts.join(zn,"server/nats")},DG={HDB:ts.join(Rh.HDB,iO),CUSTOM_FUNCTIONS:ts.join(Rh.CUSTOM_FUNCTIONS,oO)},LG={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:ts.join(zn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:ts.join(zn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:ts.join(zn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},MG={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},aO="support@harperdb.io",UG="customer-success@harperdb.io",cO=1,PG=4141,uO="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",vG="https://www.harperdb.io/product",BG=`For support, please submit a request at ${uO} or contact ${aO}`,lO=`For license support, please contact ${UG}`,HG="None of the specified records were found.",xG="hash attribute not found",qG=`Your current license only supports ${cO} role. ${lO}`,GG="Your current license only supports 3 connections to a node.",FG="127.0.0.1",kG=1,VG=/^\.$/,$G=/^\.\.$/,YG="U+002E",KG=/\//g,WG="U+002F",QG=/U\+002F/g,zG=/^U\+002E$/,JG=/^U\+002EU\+002E$/,jG="d",XG=999999,ZG="*",eF="--max-old-space-size=",tF="system",rF="__hdb_hash",sF=".harperdb",nF=".hdb",iF="keys",oF="hdb_boot_properties.file",aF=".updateConfig.json",cF="SIGTSTP",uF=24,lF=6e4,_F=448,dF="blob",fF="trash",EF="database",hF="schema",mF="transactions",pF=".count",SF="id",TF="PROCESS_NAME",_O={SETTINGS_PATH_KEY:"settings_path"},dO=require("lodash"),gF={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"},RF={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},AF={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},OF={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"},bF={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"},Nr="hdb_internal:",NF={CREATE_SCHEMA:Nr+"create_schema",CREATE_TABLE:Nr+"create_table",CREATE_ATTRIBUTE:Nr+"create_attribute",ADD_USER:Nr+"add_user",ALTER_USER:Nr+"alter_user",DROP_USER:Nr+"drop_user",HDB_NODES:Nr+"hdb_nodes",HDB_USERS:Nr+"hdb_users",HDB_WORKERS:Nr+"hdb_workers",CATCHUP:Nr+"catchup",SCHEMA_CATCHUP:Nr+"schema_catchup",WORKER_ROOM:Nr+"cluster_workers"},yF={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"},wF="060493.ks",IF=".license",CF={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},Z={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"},DF={CSV:".csv",JSON:".json"},LF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},MF={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},nc={};nc[Z.INSERT]=Z.INSERT;nc[Z.UPDATE]=Z.UPDATE;nc[Z.UPSERT]=Z.UPSERT;nc[Z.DELETE]=Z.DELETE;var xe=Object.create(null);xe[Z.DESCRIBE_ALL]=Z.DESCRIBE_ALL;xe[Z.DESCRIBE_TABLE]=Z.DESCRIBE_TABLE;xe[Z.DESCRIBE_SCHEMA]=Z.DESCRIBE_SCHEMA;xe[Z.READ_LOG]=Z.READ_LOG;xe[Z.ADD_NODE]=Z.ADD_NODE;xe[Z.LIST_USERS]=Z.LIST_USERS;xe[Z.LIST_ROLES]=Z.LIST_ROLES;xe[Z.USER_INFO]=Z.USER_INFO;xe[Z.SQL]=Z.SQL;xe[Z.GET_JOB]=Z.GET_JOB;xe[Z.SEARCH_JOBS_BY_START_DATE]=Z.SEARCH_JOBS_BY_START_DATE;xe[Z.DELETE_FILES_BEFORE]=Z.DELETE_FILES_BEFORE;xe[Z.EXPORT_LOCAL]=Z.EXPORT_LOCAL;xe[Z.EXPORT_TO_S3]=Z.EXPORT_TO_S3;xe[Z.CLUSTER_STATUS]=Z.CLUSTER_STATUS;xe[Z.REMOVE_NODE]=Z.REMOVE_NODE;xe[Z.RESTART]=Z.RESTART;xe[Z.CUSTOM_FUNCTIONS_STATUS]=Z.CUSTOM_FUNCTIONS_STATUS;xe[Z.GET_CUSTOM_FUNCTIONS]=Z.GET_CUSTOM_FUNCTIONS;xe[Z.GET_CUSTOM_FUNCTION]=Z.GET_CUSTOM_FUNCTION;xe[Z.SET_CUSTOM_FUNCTION]=Z.SET_CUSTOM_FUNCTION;xe[Z.DROP_CUSTOM_FUNCTION]=Z.DROP_CUSTOM_FUNCTION;xe[Z.ADD_CUSTOM_FUNCTION_PROJECT]=Z.ADD_CUSTOM_FUNCTION_PROJECT;xe[Z.DROP_CUSTOM_FUNCTION_PROJECT]=Z.DROP_CUSTOM_FUNCTION_PROJECT;xe[Z.PACKAGE_CUSTOM_FUNCTION_PROJECT]=Z.PACKAGE_CUSTOM_FUNCTION_PROJECT;xe[Z.DEPLOY_CUSTOM_FUNCTION_PROJECT]=Z.DEPLOY_CUSTOM_FUNCTION_PROJECT;var UF={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"},PF={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},fO={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"},vF=dO.invert(fO),BF={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"},I={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",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",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"},EO={settings_path:_O.SETTINGS_PATH_KEY,hdb_root_key:I.ROOTPATH,hdb_root:I.ROOTPATH,rootpath:I.ROOTPATH,server_port_key:I.OPERATIONSAPI_NETWORK_PORT,server_port:I.OPERATIONSAPI_NETWORK_PORT,cert_key:I.TLS_CERTIFICATE,certificate:I.TLS_CERTIFICATE,private_key_key:I.TLS_PRIVATEKEY,private_key:I.TLS_PRIVATEKEY,http_secure_enabled_key:I.OPERATIONSAPI_NETWORK_HTTPS,https_on:I.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:I.OPERATIONSAPI_NETWORK_CORS,cors_on:I.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:I.LOGGING_LEVEL,log_level:I.LOGGING_LEVEL,log_path_key:I.LOGGING_ROOT,log_path:I.LOGGING_ROOT,clustering_node_name_key:I.CLUSTERING_NODENAME,node_name:I.CLUSTERING_NODENAME,clustering_enabled_key:I.CLUSTERING_ENABLED,clustering:I.CLUSTERING_ENABLED,max_http_threads:I.THREADS_COUNT,max_hdb_processes:I.THREADS_COUNT,server_timeout_key:I.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:I.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:I.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:I.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:I.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:I.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:I.LOGGING_AUDITLOG,disable_transaction_log:I.LOGGING_AUDITLOG,operation_token_timeout_key:I.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:I.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:I.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:I.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:I.HTTP_PORT,custom_functions_port:I.HTTP_PORT,custom_functions_directory_key:I.COMPONENTSROOT,custom_functions_directory:I.COMPONENTSROOT,max_custom_function_processes:I.THREADS_COUNT,log_to_file:I.LOGGING_FILE,log_to_stdstreams:I.LOGGING_STDSTREAMS,local_studio_on:I.LOCALSTUDIO_ENABLED,clustering_port:I.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:I.CLUSTERING_USER,clustering_enabled:I.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:I.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:I.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:I.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:I.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:I.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:I.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:I.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:I.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:I.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxconsumemsgs:I.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS,clustering_leafserver_streams_maxingestthreads:I.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS,clustering_leafserver_streams_maxmsgs:I.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:I.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:I.CLUSTERING_NODENAME,clustering_tls_certificate:I.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:I.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:I.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:I.CLUSTERING_TLS_INSECURE,clustering_tls_verify:I.CLUSTERING_TLS_VERIFY,clustering_loglevel:I.CLUSTERING_LOGLEVEL,clustering_republishmessages:I.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:I.CLUSTERING_DATABASELEVEL,customfunctions_network_port:I.HTTP_PORT,customfunctions_tls_certificate:I.TLS_CERTIFICATE,customfunctions_network_cors:I.HTTP_CORS,customfunctions_network_corsaccesslist:I.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:I.HTTP_HEADERSTIMEOUT,customfunctions_network_https:I.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:I.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:I.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:I.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:I.HTTP_TIMEOUT,http_threads:I.THREADS_COUNT,threads:I.THREADS_COUNT,threads_count:I.THREADS_COUNT,threads_debug:I.THREADS_DEBUG,threads_debug_startingport:I.THREADS_DEBUG_STARTINGPORT,threads_debug_port:I.THREADS_DEBUG_PORT,threads_debug_host:I.THREADS_DEBUG_HOST,threads_debug_waitfordebugger:I.THREADS_DEBUG_WAITFORDEBUGGER,threads_maxheapmemory:I.THREADS_MAXHEAPMEMORY,http_session_affinity:I.HTTP_SESSIONAFFINITY,http_compressionthreshold:I.HTTP_COMPRESSIONTHRESHOLD,http_cors:I.HTTP_CORS,http_corsaccesslist:I.HTTP_CORSACCESSLIST,http_headerstimeout:I.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:I.HTTP_KEEPALIVETIMEOUT,http_timeout:I.HTTP_TIMEOUT,http_port:I.HTTP_PORT,http_secureport:I.HTTP_SECUREPORT,http_mtls:I.HTTP_MTLS,http_mtls_user:I.HTTP_MTLS_USER,http_mtls_required:I.HTTP_MTLS_REQUIRED,customfunctions_processes:I.THREADS_COUNT,customfunctions_root:I.COMPONENTSROOT,localstudio_enabled:I.LOCALSTUDIO_ENABLED,logging_file:I.LOGGING_FILE,logging_level:I.LOGGING_LEVEL,logging_root:I.LOGGING_ROOT,logging_rotation_enabled:I.LOGGING_ROTATION_ENABLED,logging_rotation_compress:I.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:I.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:I.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:I.LOGGING_ROTATION_PATH,logging_stdstreams:I.LOGGING_STDSTREAMS,logging_auditlog:I.LOGGING_AUDITLOG,logging_auditretention:I.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:I.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:I.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:I.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:I.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:I.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:I.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:I.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:I.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:I.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:I.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:I.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:I.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:I.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:I.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:I.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:I.ROOTPATH,databases:I.DATABASES,storage_path:I.STORAGE_PATH,ignorescripts:I.IGNORE_SCRIPTS,mqtt_network_port:I.MQTT_NETWORK_PORT,mqtt_websocket:I.MQTT_WEBSOCKET,mqtt_network_secureport:I.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:I.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:I.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:I.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:I.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:I.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:I.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:I.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:I.AUTHENTICATION_CACHETTL,authentication_enablesessions:I.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:I.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:I.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:I.COMPONENTSROOT,tls_certificate:I.TLS_CERTIFICATE,tls_privatekey:I.TLS_PRIVATEKEY,tls_certificateauthority:I.TLS_CERTIFICATEAUTHORITY,tls_ciphers:I.TLS_CIPHERS};for(let e in I){let t=I[e];EO[t.toLowerCase()]=t}var HF={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},xF={csv_file_load:"csv_file_load",csv_data_load:Z.CSV_DATA_LOAD,csv_url_load:Z.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"},qF={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"},GF={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},FF={VERSION_DEFAULT:"2.2.0"},kF={DEVELOPMENT:8192,DEFAULT:512},VF={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"},$F={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"},YF={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},hO={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},KF=Symbol("metadata"),WF="__clustering__",QF=Object.values(hO),zF=15984864e5,mO={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},JF=dO.invert(mO),jF={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"},XF=111,ZF=`\r
2
- `,ek={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},tk=["*","%"],rk="unauthorized_access",sk="func_val",nk={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},ik={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},ok={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"},ak={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},ck={HTTP:"http"},uk={STOPPED:"stopped",ONLINE:"online"},lk="3.x.x",_k={SUCCESS:"success",FAILURE:"failure"},dk={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};pO.exports={LOCAL_HARPERDB_OPERATIONS:xe,HDB_SUPPORT_ADDRESS:aO,HDB_SUPPORT_URL:uO,HDB_PRICING_URL:vG,SUPPORT_HELP_MSG:BG,LICENSE_HELP_MSG:lO,HDB_PROC_NAME:iO,HDB_PROC_DESCRIPTOR:Ah,CLUSTERING_LEAF_PROC_DESCRIPTOR:Kl,CLUSTERING_HUB_PROC_DESCRIPTOR:Yl,SYSTEM_SCHEMA_NAME:tF,HASH_FOLDER_NAME:rF,HDB_HOME_DIR_NAME:sF,UPDATE_FILE_NAME:aF,LICENSE_KEY_DIR_NAME:iF,BOOT_PROPS_FILE_NAME:oF,JOB_TYPE_ENUM:xF,JOB_STATUS_ENUM:CF,SYSTEM_TABLE_NAMES:OF,SYSTEM_TABLE_HASH_ATTRIBUTES:bF,OPERATIONS_ENUM:Z,VALID_S3_FILE_TYPES:DF,S3_BUCKET_AUTH_KEYS:LF,VALID_SQL_OPS_ENUM:MF,GEO_CONVERSION_ENUM:PF,HDB_SETTINGS_NAMES:fO,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:vF,SERVICE_ACTIONS_ENUM:UF,CLUSTER_MESSAGE_TYPE_ENUM:qF,CLUSTER_CONNECTION_DIRECTION_ENUM:GF,CLUSTER_EVENTS_DEFS_ENUM:VF,PERIOD_REGEX:VG,DOUBLE_PERIOD_REGEX:$G,UNICODE_PERIOD:YG,FORWARD_SLASH_REGEX:KG,UNICODE_FORWARD_SLASH:WG,ESCAPED_FORWARD_SLASH_REGEX:QG,ESCAPED_PERIOD_REGEX:zG,ESCAPED_DOUBLE_PERIOD_REGEX:JG,REG_KEY_FILE_NAME:wF,RESTART_TIMEOUT_MS:lF,HDB_FILE_PERMISSIONS:_F,DATABASES_DIR_NAME:EF,LEGACY_DATABASES_DIR_NAME:hF,TRANSACTIONS_DIR_NAME:mF,LIMIT_COUNT_NAME:pF,ID_ATTRIBUTE_STRING:SF,INSERT_MODULE_ENUM:RF,UPGRADE_JSON_FIELD_NAMES_ENUM:AF,RESTART_CODE:cF,RESTART_CODE_NUM:uF,CLUSTER_OPERATIONS:nc,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:yF,HDB_INTERNAL_SC_CHANNEL_PREFIX:Nr,INTERNAL_SC_CHANNELS:NF,CLUSTERING_MESSAGE_TYPES:jF,HDB_FILE_SUFFIX:nF,BLOB_FOLDER_NAME:dF,HDB_TRASH_DIR:fF,ORIGINATOR_SET_VALUE:XF,LICENSE_VALUES:FF,RAM_ALLOCATION_ENUM:kF,TIME_STAMP_NAMES_ENUM:hO,TIME_STAMP_NAMES:QF,PERMS_UPDATE_RELEASE_TIMESTAMP:zF,SEARCH_NOT_FOUND_MESSAGE:HG,SEARCH_ATTRIBUTE_NOT_FOUND:xG,LICENSE_ROLE_DENIED_RESPONSE:qG,LICENSE_MAX_CONNS_REACHED:GG,BASIC_LICENSE_MAX_NON_CU_ROLES:cO,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:PG,VALUE_SEARCH_COMPARATORS:mO,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:JF,LICENSE_FILE_NAME:IF,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:$F,NEW_LINE:ZF,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:kG,MOMENT_DAYS_TAG:jG,API_TURNOVER_SEC:XG,LOOPBACK:FG,CODE_EXTENSION:$l,WILDCARD_SEARCH_VALUE:ZG,NODE_ERROR_CODES:YF,JAVASCRIPT_EXTENSION:nO,PERMS_CRUD_ENUM:ek,UNAUTHORIZED_PERMISSION_NAME:rk,SEARCH_WILDCARDS:tk,FUNC_VAL:sk,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:nk,JWT_ENUM:ik,CLUSTERING_FLAG:WF,ITC_EVENT_TYPES:ok,CUSTOM_FUNCTION_PROC_NAME:oO,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Vl,SERVICES:ak,THREAD_TYPES:ck,MEM_SETTING_KEY:eF,HDB_RESTART_SCRIPT:TG,PROCESS_DESCRIPTORS:NG,SERVICE_SERVERS:DG,SERVICE_SERVERS_CWD:Rh,PROCESS_DESCRIPTORS_VALIDATE:IG,LAUNCH_SERVICE_SCRIPTS:LG,LOG_LEVELS:wG,PROCESS_NAME_ENV_PROP:TF,LOG_NAMES:yG,PM2_PROCESS_STATUSES:uk,CONFIG_PARAM_MAP:EO,CONFIG_PARAMS:I,HDB_CONFIG_FILE:mG,HDB_DEFAULT_CONFIG_FILE:pG,ROLE_TYPES_ENUM:MG,BOOT_PROP_PARAMS:_O,INSTALL_PROMPTS:gF,HDB_ROOT_DIR_NAME:SG,CLUSTERING_PROCESSES:CG,FOREGROUND_PID_FILE:AG,PACKAGE_ROOT:zn,PRE_4_0_0_VERSION:lk,DATABASES_PARAM_CONFIG:HF,METADATA_PROPERTY:KF,AUTH_AUDIT_STATUS:_k,AUTH_AUDIT_TYPES:dk,HDB_PID_FILE:OG,DEFAULT_DATABASE_NAME:bG,LEGACY_CONFIG_PARAMS:BF};sO()});var Oh=g((Dae,gO)=>{"use strict";var SO=require("minimist");gO.exports=fk;function fk(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=TO(process.env),s=TO(SO(process.argv))):(r=process.env,s=SO(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(fk,"assignCMDENVVariables");function TO(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(TO,"objKeysToLowerCase")});var $=g((Mae,Dh)=>{"use strict";var Ui=require("fs-extra"),{workerData:Ek,threadId:hk}=require("worker_threads"),hn=require("path"),OO=require("yaml"),bO=require("properties-reader"),Rt=M(),RO=Oh(),mk=require("os"),{PACKAGE_ROOT:Nh}=M(),{_assignPackageExport:pk}=require("../index"),oc={};for(let e in console)oc[e]||(oc[e]=console[e]);var rr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},NO={STDOUT:"stdOut",STDERR:"stdErr"},Sk=hn.join(Nh,"logs"),Tk=hn.join(Nh,"config/yaml/",Rt.HDB_DEFAULT_CONFIG_FILE),gk=1e4,En,Ys,tr,Wl,Ql,ac,Ho,ic;ic===void 0&&yO();Dh.exports={notify:CO,fatal:DO,error:cc,warn:Ch,info:zl,debug:Ih,trace:wh,setLogLevel:wk,log_level:tr,loggerWithTag:Rk,suppressLogging:Ak,initLogSettings:yO,setupConsoleLogging:wO,logCustomLevel:Nk,closeLogFile:yh,getLogFilePath:()=>ac,OUTPUTS:NO,AuthAuditLog:Dk};pk("logger",Dh.exports);function yO(e=!1){try{if(ic===void 0||e){yh();let t=yk(),r=RO(["ROOTPATH"]);try{ic=bO(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Ui.pathExistsSync(hn.join(r.ROOTPATH,Rt.HDB_CONFIG_FILE)))throw s}({level:tr,config_log_path:Ql,to_file:En,to_stream:Ys}=Ik(r.ROOTPATH?hn.join(r.ROOTPATH,Rt.HDB_CONFIG_FILE):ic.get("settings_path"))),Wl=Rt.LOG_NAMES.HDB,ac=hn.join(Ql,Wl)}}catch(t){if(ic=void 0,t.code===Rt.NODE_ERROR_CODES.ENOENT){let r=RO(Object.keys(Rt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Rt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===Rt.CONFIG_PARAMS.LOGGING_LEVEL){tr=u;continue}if(c===Rt.CONFIG_PARAMS.LOGGING_STDSTREAMS){Ys=u;continue}c===Rt.CONFIG_PARAMS.LOGGING_FILE&&(En=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=Ck();En=En===void 0?n:En,En=AO(En),Ys=Ys===void 0?i:Ys,Ys=AO(Ys),tr=tr===void 0?s:tr,Ql=Sk,Wl=Rt.LOG_NAMES.INSTALL,ac=hn.join(Ql,Wl);return}throw cc("Error initializing log settings"),cc(t),t}process.env.DEV_MODE&&(Ys=!0),wO()}a(yO,"initLogSettings");var bh=!0;function wO(){Bo("error",cc),Bo("warn",Ch),Bo("log",zl),Bo("info",zl),Bo("debug",Ih),Bo("trace",wh)}a(wO,"setupConsoleLogging");function Bo(e,t){console[e]=function(...r){if(bh&&t(...r),!/PM2 log:|App \[/.test(r[0]))return oc[e](...r)}}a(Bo,"logConsole");function Rk(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(CO),fatal:r(DO),error:r(cc),warn:r(Ch),info:r(zl),debug:r(Ih),trace:r(wh)};function r(s){return function(...n){return s(t,...n)}}}a(Rk,"loggerWithTag");function Ak(e){try{bh=!1,e()}finally{bh=!0}}a(Ak,"suppressLogging");var Ok=Ek?.name?.replace(/ /g,"-")||"main";function mn(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||Ok+"/"+hk);c<n;c++){let _=t[c];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
3
- `}a(mn,"createLogRecord");function uc(e){En&&IO(e),Ys&&process.stdout.write(e)}a(uc,"logStdOut");function Jl(e){En&&IO(e),Ys&&process.stderr.write(e)}a(Jl,"logStdErr");function IO(e){bk(),Ho?Ui.appendFileSync(Ho,e):oc.log(e)}a(IO,"logToFile");function yh(){try{Ui.closeSync(Ho)}catch{}Ho=null}a(yh,"closeLogFile");function bk(){if(!Ho){try{if(!ac)debugger;Ho=Ui.openSync(ac,"a")}catch(e){oc.error(e)}setTimeout(()=>{yh()},gk).unref()}}a(bk,"openLogFile");function zl(...e){rr[tr]<=rr.info&&uc(mn("info",e))}a(zl,"info");function wh(...e){rr[tr]<=rr.trace&&uc(mn("trace",e))}a(wh,"trace");function cc(...e){rr[tr]<=rr.error&&Jl(mn("error",e))}a(cc,"error");function Ih(...e){rr[tr]<=rr.debug&&uc(mn("debug",e))}a(Ih,"debug");function CO(...e){rr[tr]<=rr.notify&&uc(mn("notify",e))}a(CO,"notify");function DO(...e){rr[tr]<=rr.fatal&&Jl(mn("fatal",e))}a(DO,"fatal");function Ch(...e){rr[tr]<=rr.warn&&Jl(mn("warn",e))}a(Ch,"warn");function Nk(e,t,...r){t===NO.STDERR?Jl(mn(e,r)):uc(mn(e,r))}a(Nk,"logCustomLevel");function yk(){let e;try{e=mk.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=hn.join(e,Rt.HDB_HOME_DIR_NAME,Rt.BOOT_PROPS_FILE_NAME);return Ui.existsSync(t)||(t=hn.join(Nh,"utility/hdb_boot_properties.file")),t}a(yk,"getPropsFilePath");function wk(e){tr=e}a(wk,"setLogLevel");function AO(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(AO,"autoCastBoolean");function Ik(e){try{if(e.includes("config/settings.js")){let o=bO(e);return{level:o.get(Rt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:hn.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=OO.parseDocument(Ui.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===Rt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(Ik,"getLogConfig");function Ck(){try{let e=OO.parseDocument(Ui.readFileSync(Tk,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(Ck,"getDefaultConfig");function Dk(e,t,r,s,n,i){this.username=e,this.status=t,this.type=r,this.originating_ip=s,this.request_method=n,this.path=i}a(Dk,"AuthAuditLog")});var MO=g((Pae,LO)=>{"use strict";var Lk=require("util"),Mk=require("path"),Uk=require("child_process"),Pk=Lk.promisify(Uk.execFile),vk=1e3*1e3*10;LO.exports={findPs:Bk};async function Bk(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await Pk("ps",["wwxo",`pid,${r}`],{maxBuffer:vk});for(let n of s.trim().split(`
4
- `).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:Mk.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(Bk,"findPs")});var dt=g((Bae,PO)=>{"use strict";var Hk="__dbis__",xk="__txns__",qk="__environment_name__",Gk="__dbi_defintion__",Fk={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"},kk=["__createdtime__","__updatedtime__"],Vk="\uFFFF",UO={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},$k=Object.values(UO);PO.exports={AUDIT_STORE_NAME:xk,INTERNAL_DBIS_NAME:Hk,DBI_DEFINITION_NAME:Gk,SEARCH_TYPES:Fk,TIMESTAMP_NAMES:kk,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:qk,TRANSACTIONS_DBI_NAMES_ENUM:UO,TRANSACTIONS_DBIS:$k,OVERFLOW_MARKER:Vk}});var yr=g((Hae,VO)=>{"use strict";var vO=M(),BO=dt(),HO={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},xO=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),qO={500:xO("There was an error processing your request."),400:"Invalid request"},Yk=qO[HO.INTERNAL_SERVER_ERROR],Kk={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},Wk={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},Qk={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"},zk={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 ${BO.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${BO.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"},Jk={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${vO.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 ${vO.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"},GO={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"},jk={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."},Xk={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},Zk={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},eV={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},tV={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`},FO={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.`},kO={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}`},rV={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."},sV={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},nV={...GO,...Qk,...Kk,...jk,...Xk,...Zk,...eV,...tV,...Jk,...FO,...kO,...rV,...sV,...Wk};VO.exports={CHECK_LOGS_WRAPPER:xO,HDB_ERROR_MSGS:nV,DEFAULT_ERROR_MSGS:qO,DEFAULT_ERROR_RESP:Yk,HTTP_STATUS_CODES:HO,LMDB_ERRORS_ENUM:zk,AUTHENTICATION_ERROR_MSGS:GO,VALIDATION_ERROR_MSGS:FO,ITC_ERRORS:kO}});var se=g((qae,KO)=>{"use strict";var xo=yr(),iV=$(),oV=M(),jl=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,$O),this.statusCode=s||xo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(xo.DEFAULT_ERROR_MSGS[s]?xo.DEFAULT_ERROR_MSGS[s]:xo.DEFAULT_ERROR_MSGS[xo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&iV[n](i)}},Lh=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}},Mh=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function $O(e,t,r,s=oV.LOG_LEVELS.ERROR,n=null,i=!1){if(YO(e))return e;let o=new jl(e,t,r,s,n);return i&&delete o.stack,o}a($O,"handleHDBError");function YO(e){return e.__proto__.constructor.name===jl.name}a(YO,"isHDBError");KO.exports={isHDBError:YO,handleHDBError:$O,ClientError:Lh,ServerError:Mh,hdb_errors:xo}});var Je=g((Fae,ZO)=>{"use strict";var Ec=M(),aV=Q(),sr=ee(),hc=require("path"),cV=require("minimist"),WO=require("fs-extra"),QO=require("lodash");sr.initSync();var{CONFIG_PARAMS:Jn,DATABASES_PARAM_CONFIG:lc,SYSTEM_SCHEMA_NAME:Xl}=Ec,_c,dc,fc;function zO(){if(_c!==void 0)return _c;if(sr.getHdbBasePath()!==void 0)return _c=sr.get(Jn.STORAGE_PATH)||hc.join(sr.getHdbBasePath(),Ec.DATABASES_DIR_NAME),_c}a(zO,"getBaseSchemaPath");function JO(){if(dc!==void 0)return dc;if(sr.getHdbBasePath()!==void 0)return dc=XO(Xl),dc}a(JO,"getSystemSchemaPath");function jO(){if(fc!==void 0)return fc;if(sr.getHdbBasePath()!==void 0)return fc=sr.get(Ec.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||hc.join(sr.getHdbBasePath(),Ec.TRANSACTIONS_DIR_NAME),fc}a(jO,"getTransactionAuditStoreBasePath");function uV(e,t){let r=sr.get(Jn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||hc.join(jO(),e.toString())}a(uV,"getTransactionAuditStorePath");function XO(e,t){e=e.toString(),t=t&&t.toString();let r=sr.get(Ec.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||hc.join(zO(),e)}a(XO,"getSchemaPath");function lV(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,cV(process.argv));let s=r[Jn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!aV.isObject(s))throw o;i=s}for(let o of i){let c=o[Xl];if(!c)continue;let u=sr.get(Jn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[lc.PATH];if(_)return QO.set(u,[Xl,lc.TABLES,t,lc.PATH],_),sr.setProperty(Jn.DATABASES,u),_;let l=c?.[lc.PATH];if(l)return QO.set(u,[Xl,lc.PATH],l),sr.setProperty(Jn.DATABASES,u),l}}let n=r[Jn.STORAGE_PATH.toUpperCase()];if(n){if(!WO.pathExistsSync(n))throw new Error(n+" does not exist");let i=hc.join(n,e);return WO.mkdirsSync(i),sr.setProperty(Jn.STORAGE_PATH,n),i}return JO()}a(lV,"initSystemSchemaPaths");function _V(){_c=void 0,dc=void 0,fc=void 0}a(_V,"resetPaths");ZO.exports={getBaseSchemaPath:zO,getSystemSchemaPath:JO,getTransactionAuditStorePath:uV,getTransactionAuditStoreBasePath:jO,getSchemaPath:XO,initSystemSchemaPaths:lV,resetPaths:_V}});var wr=g((Yae,nb)=>{"use strict";var dV=yr().LMDB_ERRORS_ENUM,Vae=require("lmdb"),fV=dt(),$ae=require("buffer").Buffer,{OVERFLOW_MARKER:eb,MAX_SEARCH_KEY_LENGTH:Zl}=fV,tb=["number","string","symbol","boolean","bigint"];function EV(e){if(e=e?.primaryStore||e,!e)throw new Error(dV.ENV_REQUIRED)}a(EV,"validateEnv");function hV(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(hV,"stringifyData");function mV(e){return e instanceof Date?e.valueOf():e}a(mV,"convertKeyValueToWrite");function pV(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(tb.includes(typeof e))return e.length>Zl?[e.slice(0,Zl)+eb]:[e];let r;if(Array.isArray(e)){r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s];if(tb.includes(typeof i))i.length>Zl?r.push(i.slice(0,Zl)+eb):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(pV,"getIndexedValues");var e_=0,rb=0;function sb(){rb=Date.now()-performance.now()}a(sb,"adjustStartTime");sb();var SV=6e4;setInterval(sb,SV).unref();function TV(){let e=performance.now()+rb;return e>e_?(e_=e,e):(e_+=488e-6,e_)}a(TV,"getNextMonotonicTime");nb.exports={validateEnv:EV,stringifyData:hV,convertKeyValueToWrite:mV,getNextMonotonicTime:TV,getIndexedValues:pV}});var ib,As,Uh,mc=Re(()=>{ib=require("events"),As=class extends ib.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new Uh;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)}},Uh=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 Pi={};Ye(Pi,{server:()=>tt});var ob,tt,nr=Re(()=>{ob=require("../index"),tt={};(0,ob._assignPackageExport)("server",tt)});var Bh={};Ye(Bh,{loadGQLSchema:()=>AV,start:()=>vh,startOnMainThread:()=>RV});function vh({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let H=function(P){if(P.kind==="NonNullType"){let J=H(P.type);return J.nullable=!1,J}if(P.kind==="ListType")return{type:"array",elements:H(P.type)};let B={type:P.name?.value};return Object.defineProperty(B,"location",{value:P.loc.startToken}),B};a(H,"getProperty");let T=S.name.value,b=[],R={table:null,database:null,properties:b};f.set(T,R);for(let P of S.directives){if(P.name.value==="table"){for(let k of P.arguments)R[k.name.value]=k.value.value;R.schema&&(R.database=R.schema),R.table||(R.table=T),R.audit&&(R.audit=R.audit!=="false"),R.attributes=R.properties,E.push(R)}if(P.name.value==="sealed"&&(R.sealed=!0),P.name.value==="export"){R.export=!0;for(let k of P.arguments)k.name.value==="name"&&(R.export={name:k.value.value})}}let L=!1;for(let P of S.fields){let k=H(P.type);k.name=P.name.value,b.push(k);for(let B of P.directives)if(B.name.value==="primaryKey")L?console.warn("Can not define two attributes as a primary key"):(k.isPrimaryKey=!0,L=!0);else if(B.name.value==="indexed")k.indexed=!0;else if(B.name.value==="relationship"){let J={};for(let z of B.arguments)J[z.name.value]=z.value.value;k.relationship=J}else if(B.name.value==="createdTime")k.assignCreatedTime=!0;else if(B.name.value==="updatedTime")k.assignUpdatedTime=!0;else if(B.name.value==="expiresAt")k.expiresAt=!0;else if(B.name.value==="allow"){let J=k.authorizedRoles=[];for(let z of B.arguments)z.name.value==="role"&&J.push(z.value.value)}}R.type=T,T==="Query"&&(h=R)}function p(S){let T=f.get(S.type);T?(Object.defineProperty(S,"properties",{value:T.properties}),Object.defineProperty(S,"definition",{value:T})):S.type==="array"?p(S.elements):gV.includes(S.type)||(0,ab.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}a(p,"connectPropertyType");for(let S of f.values())for(let T of S.properties)p(T);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Ph.dirname)(s),S.tableClass):i.set((0,Ph.dirname)(s)+"/"+(S.export.name||S.type),S.tableClass))}}var Ph,ab,gV,RV,AV,cb=Re(()=>{Ph=require("path");Ae();ab=x(Ke()),gV=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(vh,"start");RV=vh,AV=vh({ensureTable:ct}).handleFile});async function t_(e){return OV?(pc||(pc=bV(yV)),(await(await pc).import(e)).namespace):import(e)}async function bV(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),pc=new Compartment({console,Math,Date,fetch:NV,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,lb.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:qt,tables:Ir,databases:rt})}};let s=await(0,ub.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),pc}function NV(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 yV(){return{Resource:qt,tables:Ir}}var ub,lb,OV,pc,Hh=Re(()=>{Os();Ae();ub=require("fs/promises"),lb=require("path"),OV=!1;a(t_,"secureImport");a(bV,"getCompartment");a(NV,"secureOnlyFetch");a(yV,"getGlobalVars")});var qh={};Ye(qh,{handleFile:()=>wV});async function wV(e,t,r,s){let n=new Map,i=(0,_b.pathToFileURL)(r).toString(),o=await t_(i);u(o.default)&&s.set((0,xh.dirname)(t),o.default),c(o,(0,xh.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),n}var _b,xh,db=Re(()=>{_b=require("url");Hh();xh=require("path");a(wV,"handleFile")});var Fh={};Ye(Fh,{start:()=>IV});function IV({resources:e}){e.set("login",Gh),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Gh,fb=Re(()=>{Os();a(IV,"start");Gh=class extends qt{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var gb={};Ye(gb,{parse:()=>Vh,streamAsJSON:()=>Sc,stringify:()=>vi});function Sc(e){return new kh({value:e})}function Eb(e){return console.error(e),JSON.stringify(e.toString())}function hb(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function vi(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===Sb)return Tb(e);if(t.resolution)return t.resolution.then(()=>vi(e));throw t}}function Tb(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 s=0;s<e.length;s++)s>0&&(r+=","),r+=Tb(e[s]);return r+"]"}else{r="{";let s=!0;for(let n in e)s?s=!1:r+=",",r+=JSON.stringify(n)+":"+vi(e[n]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Vh(e){return LV.test(e)?CV.parse(e):JSON.parse(e)}var mb,pb,CV,DV,Sb,kh,LV,$h=Re(()=>{mb=require("stream"),pb=x(require("json-bigint-fixes")),CV=(0,pb.default)({useNativeBigInt:!0}),DV=1e4,Sb={};BigInt.prototype.toJSON=function(){throw Sb};a(Sc,"streamAsJSON");kh=class extends mb.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],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();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 n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),Eb)}catch(n){yield Eb(n)}else yield vi(t)}else yield vi(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);hb(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>DV?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 hb(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let s of this.activeIterators)t?s.throw(t):s.return();r()}};a(Eb,"handleError");a(hb,"when");a(vi,"stringify");a(Tb,"jsStringify");LV=/-?\d{16,}/;a(Vh,"parse")});var Ub=g((ace,Mb)=>{"use strict";var Yh=require("recursive-iterator"),MV=require("alasql"),Kh=require("clone"),Rb=Q(),{handleHDBError:Ab,hdb_errors:UV}=se(),{HDB_ERROR_MSGS:Ob,HTTP_STATUS_CODES:bb}=UV,{getDatabases:PV}=(Ae(),ne(Ge)),vV=["DISTINCT_ARRAY"],Nb=Symbol("validateTables"),Wh=Symbol("validateTable"),oce=Symbol("getAllColumns"),yb=Symbol("validateAllColumns"),r_=Symbol("findColumn"),wb=Symbol("validateOrderBy"),Tc=Symbol("validateSegment"),Qh=Symbol("validateColumn"),Ib=Symbol("setColumnsForTable"),Cb=Symbol("checkColumnsForAsterisk"),Db=Symbol("validateGroupBy"),Lb=Symbol("hasColumns"),zh=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Nb](),this[Cb](),this[yb]()}[Nb](){if(this[Lb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Wh](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Wh](t.table)})}}[Lb](){let t=!1,r=new Yh(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Wh](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=PV();if(!r[t.databaseid])throw Ab(new Error,Ob.SCHEMA_NOT_FOUND(t.databaseid),bb.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Ab(new Error,Ob.TABLE_NOT_FOUND(t.databaseid,t.tableid),bb.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=Kh(n);i.table=Kh(t),this.attributes.push(i)})}[r_](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)}[Cb](){let t=new Yh(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Ib](r.tableid)}[Ib](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new MV.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[yb](){this[Tc](this.statement.columns,!1),this[Tc](this.statement.joins,!1),this[Tc](this.statement.where,!1),this[Db](this.statement.group,!1),this[Tc](this.statement.order,!0)}[Tc](t,r){if(!t)return;let s=new Yh(t),n=[];for(let{node:i,path:o}of s)!Rb.isEmpty(i)&&!Rb.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[wb](i):n.push(this[Qh](i)));return n}[Db](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&vV.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Kh(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[r_](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[r_](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[wb](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[Qh](t)}[Qh](t){let r=this[r_](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};Mb.exports=zh});var vb=g((uce,Pb)=>{"use strict";var Jh=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")}};Pb.exports=Jh});var Hb=g((_ce,Bb)=>{"use strict";var jh=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};Bb.exports=jh});var Fb={};Ye(Fb,{HAS_EXPIRATION:()=>nm,LAST_TIMESTAMP_PLACEHOLDER:()=>Ac,LOCAL_TIMESTAMP:()=>BV,METADATA:()=>gc,NO_TIMESTAMP:()=>Zh,PENDING_LOCAL_TIME:()=>im,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>sm,RecordEncoder:()=>rm,TIMESTAMP_ASSIGN_LAST:()=>xV,TIMESTAMP_ASSIGN_NEW:()=>qb,TIMESTAMP_ASSIGN_PREVIOUS:()=>Gb,TIMESTAMP_PLACEHOLDER:()=>s_,TIMESTAMP_RECORD_PREVIOUS:()=>em,getUpdateRecord:()=>om,handleLocalTimeForGets:()=>a_});function GV(){return Rc[0]=Rc[0]^64,HV.getFloat64(0)}function a_(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),u=c?.value,_=u?.[gc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[gc]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[gc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})};let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Bi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Bi.length;u++){let _=Bi[u].deref();(!_||_.isDone||_.isCommitted)&&Bi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function om(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?qo=i?.localTime?em|Gb:Zh:qo=u?i?.localTime?em|16384:qb|16384:Zh,l>0&&(c|=nm),i_=c,tm=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:qo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(s,n,h);if(u){let T=_?.user?.username;if(E&&(n_=e.encoder.encode(E)),f&&i?.localTime){let b=i?.localTime,R=r.get(b);if(R){let L=Dt(R).previousLocalTime;return r.put(b,o_(o,t,s,L,T,d,n_),{ifVersion:p}),S}}r.put(Ac,o_(o,t,s,i?.localTime?1:0,T,d,n_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var xb,Xh,s_,Ac,sm,BV,gc,Rc,HV,Zh,qb,xV,Gb,em,nm,im,qV,n_,qo,i_,tm,rm,Bi,Oc=Re(()=>{xb=require("msgpackr");Hi();Xh=x($()),s_=new Uint8Array([1,1,1,1,4,64,0,0]),Ac=new Uint8Array([1,1,1,1,1,0,0,0]),sm=new Uint8Array([1,1,1,1,3,64,0,0]),BV=Symbol("local-timestamp"),gc=Symbol("metadata"),Rc=new Uint8Array(8),HV=new DataView(Rc.buffer,0,8),Zh=0,qb=0,xV=1,Gb=3,em=4,nm=16,im=1,qo=0,i_=-1,tm=0,rm=class extends xb.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,n){if(qo||i_>=0){let i=0,o=qo;o&&(i+=8,qo=0);let c=i_,u=tm;c>=0&&(i+=2,i_=-1,u&&(i+=8,tm=0));let _=qV=r.call(this,s,n|2048|i);n_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(s_[4]=o,s_[5]=o>>8,_.set(s_,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(Rc,0,c),c+=8;else for(let d=0;d<8;d++)Rc[d]=t[c++];u=GV(),i=t[c]}let _;i<32&&(o=i,c+=2,o&nm&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[gc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(GV,"getTimestamp");a(a_,"handleLocalTimeForGets");Bi=[];setInterval(()=>{for(let e=0;e<Bi.length;e++){let t=Bi[e].deref();!t||t.isDone||t.isCommitted?Bi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Xh.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Xh.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(om,"getUpdateRecord")});var c_=g((hce,kb)=>{"use strict";var cm=ee(),um=M(),{RecordEncoder:FV}=(Oc(),ne(Fb));cm.initSync();var kV=cm.get(um.CONFIG_PARAMS.STORAGE_COMPRESSION),VV=cm.get(um.CONFIG_PARAMS.STORAGE_CACHING)!==!1,$V=um.UPDATES_PROPERTY,am=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=kV&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=VV&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:FV},this.alwaysLazyProperty=s=>s===$V)}};kb.exports=am});var l_=g((pce,$b)=>{"use strict";var Go=ee(),bc=M();Go.initSync();var YV=Go.get(bc.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Go.get(bc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Go.get(bc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Vb=Go.get(bc.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),KV=Go.get(bc.CONFIG_PARAMS.STORAGE_NOREADAHEAD),u_=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=YV,this.noFSAccess=!0,Vb!==void 0&&(this.overlappingSync=Vb),this.noReadAhead=KV}};$b.exports=u_;u_.MAX_DBS=1e4});var We=g((Tce,eN)=>{"use strict";var _m=require("lmdb"),bs=require("fs-extra"),Cr=require("path"),__=wr(),Wb=$(),ir=yr().LMDB_ERRORS_ENUM,d_=Hb(),dm=c_(),Qb=l_(),jn=dt(),Yb=M(),{table:WV,resetDatabases:QV}=(Ae(),ne(Ge)),Kb=ee(),Ns=jn.INTERNAL_DBIS_NAME,zb=jn.DBI_DEFINITION_NAME,zV="data.mdb",JV="lock.mdb",Nc=".mdb",jV="-lock",lm=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=rs(t,r),this.key_type=this.dbi[jn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[jn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new _m.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(ir.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ir.ENV_NAME_REQUIRED)}a(f_,"pathEnvNameValidation");async function fm(e,t,r=!0){try{await bs.access(e)}catch(s){throw s.code==="ENOENT"?new Error(ir.INVALID_BASE_PATH):s}try{let s=Cr.join(e,t+Nc);return await bs.access(s,bs.constants.R_OK|bs.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await bs.access(Cr.join(e,t,zV),bs.constants.R_OK|bs.constants.F_OK),Cr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(ir.INVALID_ENVIRONMENT)}else throw new Error(ir.INVALID_ENVIRONMENT);throw s}}a(fm,"validateEnvironmentPath");function E_(e,t){if(__.validateEnv(e),t===void 0)throw new Error(ir.DBI_NAME_REQUIRED)}a(E_,"validateEnvDBIName");async function XV(e,t,r=!1,s=!1){f_(e,t);let n=Cr.basename(e);t=t.toString();let i=Kb.get(Yb.CONFIG_PARAMS.DATABASES);i||Kb.setProperty(Yb.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await fm(e,t,s),Jb(e,t,r)}catch(o){if(o.message===ir.INVALID_ENVIRONMENT){let c=Cr.join(e,t);await bs.mkdirp(s?c:e);let u=new Qb(s?c:c+Nc,!1),_=_m.open(u);_.dbis=Object.create(null);let l=new dm(!1);_.openDB(Ns,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Em(e,t,r);return _[jn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(XV,"createEnvironment");async function ZV(e,t,r,s=!0){f_(e,t),t=t.toString();let n=Cr.join(e,t);return WV({table:t,database:Cr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(ZV,"copyEnvironment");async function Jb(e,t,r=!1){f_(e,t),t=t.toString();let s=Em(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await fm(e,t),i=Cr.join(e,t+Nc),o=n!=i,c=new Qb(n,o),u=_m.open(c);u.dbis=Object.create(null);let _=Xb(u);for(let l=0;l<_.length;l++)rs(u,_[l]);return u[jn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(Jb,"openEnvironment");async function e$(e,t,r=!1){f_(e,t),t=t.toString();let s=Cr.join(e,t+Nc),n=await fm(e,t);if(global.lmdb_map!==void 0){let i=Em(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await jb(o),delete global.lmdb_map[i]}}await bs.remove(n),await bs.remove(n===s?n+jV:Cr.join(Cr.dirname(n),JV))}a(e$,"deleteEnvironment");async function jb(e){__.validateEnv(e);let t=e[jn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(jb,"closeEnvironment");function Em(e,t,r=!1){let n=`${Cr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Em,"getCachedEnvironmentName");function t$(e){__.validateEnv(e);let t=Object.create(null),r=rs(e,Ns);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ns)try{t[s]=Object.assign(new d_,n)}catch{Wb.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(t$,"listDBIDefinitions");function Xb(e){__.validateEnv(e);let t=[],r=rs(e,Ns);for(let{key:s}of r.getRange({start:!1}))s!==Ns&&t.push(s);return t}a(Xb,"listDBIs");function r$(e,t){let s=rs(e,Ns).getEntry(t),n=new d_;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Wb.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(r$,"getDBIDefinition");function Zb(e,t,r,s=!r){if(E_(e,t),t=t.toString(),t===Ns)throw new Error(ir.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return rs(e,t)}catch(n){if(n.message===ir.DBI_DOES_NOT_EXIST){let i=new dm(r,s===!0),o=e.openDB(t,i),c=new d_(r===!0,s);return o[zb]=c,rs(e,Ns).putSync(t,c),e.dbis[t]=o,o}throw n}}a(Zb,"createDBI");function rs(e,t){if(E_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ns?r=r$(e,t):r=new d_,r===void 0)throw new Error(ir.DBI_DOES_NOT_EXIST);let s;try{let n=new dm(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(ir.DBI_DOES_NOT_EXIST):n}return s[zb]=r,e.dbis[t]=s,s}a(rs,"openDBI");function s$(e,t){E_(e,t),t=t.toString();let r=rs(e,t),s=r.getStats();return r[jn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(s$,"statDBI");async function n$(e,t){try{let r=Cr.join(e,t+Nc);return(await bs.stat(r)).size}catch{throw new Error(ir.INVALID_ENVIRONMENT)}}a(n$,"environmentDataSize");function i$(e,t){if(E_(e,t),t=t.toString(),t===Ns)throw new Error(ir.CANNOT_DROP_INTERNAL_DBIS_NAME);rs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],rs(e,Ns).removeSync(t)}a(i$,"dropDBI");function o$(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{rs(e,i)}catch(o){if(o.message===ir.DBI_DOES_NOT_EXIST)Zb(e,i,i!==t,i===t),s=!0;else throw o}}s&&QV()}a(o$,"initializeDBIs");eN.exports={openDBI:rs,openEnvironment:Jb,createEnvironment:XV,listDBIs:Xb,listDBIDefinitions:t$,createDBI:Zb,dropDBI:i$,statDBI:s$,deleteEnvironment:e$,initializeDBIs:o$,TransactionCursor:lm,environmentDataSize:n$,copyEnvironment:ZV,closeEnvironment:jb}});var rN=g((Rce,tN)=>{"use strict";var hm=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};tN.exports=hm});var nN=g((Oce,sN)=>{"use strict";var mm=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};sN.exports=mm});var oN=g((Nce,iN)=>{"use strict";var pm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};iN.exports=pm});var Fo=g((Dce,uN)=>{"use strict";var a$=We(),c$=rN(),u$=nN(),l$=oN(),Ks=wr(),yc=yr().LMDB_ERRORS_ENUM,_$=dt(),pn=M(),d$=Q(),f$=require("uuid"),wce=require("lmdb"),{handleHDBError:E$,hdb_errors:h$}=se(),{OVERFLOW_MARKER:Ice,MAX_SEARCH_KEY_LENGTH:Cce}=_$,aN=ee();aN.initSync();var h_=aN.get(pn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Sm=pn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,xi=pn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function m$(e,t,r,s,n=Ks.getNextMonotonicTime()){Am(e,t,r,s),Tm(e,t,r);let i=new c$,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];cN(_,!0,n);let l=p$(e,t,r,_),d=_[t];o.push(l),c.push(d)}return gm(o,c,s,i,n)}a(m$,"insertRecords");function p$(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][pn.FUNC_VAL],s[o]=c)}let u=Ks.getIndexedValues(c),_=e.dbis[o];if(u){h_&&_.prefetch(u.map(l=>({key:l,value:n})),m_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}h_&&e.dbis[t].prefetch([n],m_),e.dbis[t].put(n,s,s[xi])})}a(p$,"insertRecord");function S$(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(S$,"removeSkippedRecords");function cN(e,t,r){let s=r>0;(s||!Number.isInteger(e[xi]))&&(e[xi]=r||(r=Ks.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Sm]))&&(e[Sm]=r||Ks.getNextMonotonicTime()):delete e[Sm]}a(cN,"setTimestamps");function Tm(e,t,r){r.indexOf(pn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(pn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(pn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(pn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),a$.initializeDBIs(e,t,r)}a(Tm,"initializeTransaction");async function T$(e,t,r,s,n=Ks.getNextMonotonicTime()){Am(e,t,r,s),Tm(e,t,r);let i=new u$,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Rm(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return gm(c,u,s,i,n,o)}a(T$,"updateRecords");async function g$(e,t,r,s,n=Ks.getNextMonotonicTime()){try{Am(e,t,r,s)}catch(u){throw E$(u,u.message,h$.HTTP_STATUS_CODES.BAD_REQUEST)}Tm(e,t,r);let i=new l$,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;d$.isEmpty(_[t])?(l=f$.v4(),_[t]=l):l=_[t];let d=Rm(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return gm(o,c,s,i,n)}a(g$,"upsertRecords");async function gm(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Ks.getNextMonotonicTime(),S$(r,i),s}a(gm,"finalizeWrite");function Rm(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(cN(r,!l,o),Number.isInteger(r[xi])&&_[xi]>r[xi])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let T=_[h];if(typeof p=="function"){let R=p([[_]]);Array.isArray(R)&&(p=R[0][pn.FUNC_VAL],r[h]=p)}if(p===T)continue;let b=Ks.getIndexedValues(T);if(b){h_&&S.prefetch(b.map(R=>({key:R,value:s})),m_);for(let R=0,L=b.length;R<L;R++)S.remove(b[R],s)}if(b=Ks.getIndexedValues(p),b){h_&&S.prefetch(b.map(R=>({key:R,value:s})),m_);for(let R=0,L=b.length;R<L;R++)S.put(b[R],s)}}let E=Object.assign({},_,r);c.put(s,E,E[xi])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:Rm(e,t,r,s,n,i,o))}a(Rm,"updateUpsertRecord");function R$(e,t,r){if(Ks.validateEnv(e),t===void 0)throw new Error(yc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(yc.WRITE_ATTRIBUTES_REQUIRED):new Error(yc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(R$,"validateBasic");function Am(e,t,r,s){if(R$(e,t,r),!Array.isArray(s))throw s===void 0?new Error(yc.RECORDS_REQUIRED):new Error(yc.RECORDS_MUST_BE_ARRAY)}a(Am,"validateWrite");function m_(){}a(m_,"noop");uN.exports={insertRecords:m$,updateRecords:T$,upsertRecords:g$}});var qi=g((Mce,A$)=>{A$.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 Qs=g((Uce,dN)=>{"use strict";var _N=Q(),lN=M(),ko=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ws=require("joi"),Xn={schema_format:{pattern:ko,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},O$=Ws.alternatives(Ws.string().min(1).max(Xn.schema_length.maximum).pattern(ko).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),Ws.number(),Ws.array()).required(),b$=Ws.alternatives(Ws.string().min(1).max(Xn.schema_length.maximum).pattern(ko).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),Ws.number()),N$=Ws.alternatives(Ws.string().min(1).max(Xn.schema_length.maximum).pattern(ko).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),Ws.number()).required();function y$(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Xn.schema_length.maximum?`'${e}' maximum of 250 characters`:ko.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(y$,"checkValidTable");function w$(e,t){return _N.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(w$,"validateSchemaExists");function I$(e,t){let r=t.state.ancestors[0].schema;return _N.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(I$,"validateTableExists");function C$(e,t){return e.toLowerCase()===lN.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${lN.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(C$,"validateSchemaName");dN.exports={common_validators:Xn,schema_regex:ko,hdb_schema_table:O$,validateSchemaExists:w$,validateTableExists:I$,validateSchemaName:C$,checkValidTable:y$,hdb_database:b$,hdb_table:N$}});var je=g((vce,fN)=>{"use strict";var or=require("validate.js");or.validators.type=function(e,t,r,s){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};fN.exports={validateObject:D$,validateObjectAsync:L$,validateBySchema:M$};function D$(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(D$,"validateObject");async function L$(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await or.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(L$,"validateObjectAsync");function M$(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(M$,"validateBySchema")});var p_=g((Hce,EN)=>{var{common_validators:zs}=Qs(),Ic=je(),wc="is required",ft={database:{presence:!1,format:zs.schema_format,length:zs.schema_length},schema:{presence:!1,format:zs.schema_format,length:zs.schema_length},table:{presence:!0,format:zs.schema_format,length:zs.schema_length},attribute:{presence:!0,format:zs.schema_format,length:zs.schema_length},hash_attribute:{presence:!0,format:zs.schema_format,length:zs.schema_length}};function Cc(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(Cc,"makeAttributesStrings");function U$(e){return e=Cc(e),ft.table.presence=!1,ft.attribute.presence=!1,ft.hash_attribute.presence=!1,Ic.validateObject(e,ft)}a(U$,"schema_object");function P$(e){return e=Cc(e),ft.table.presence={message:wc},ft.attribute.presence=!1,ft.hash_attribute.presence=!1,Ic.validateObject(e,ft)}a(P$,"table_object");function v$(e){return e=Cc(e),ft.table.presence={message:wc},ft.attribute.presence=!1,Ic.validateObject(e,ft)}a(v$,"create_table_object");function B$(e){return e=Cc(e),ft.table.presence={message:wc},ft.attribute.presence={message:wc},ft.hash_attribute.presence=!1,Ic.validateObject(e,ft)}a(B$,"attribute_object");function H$(e){return e=Cc(e),ft.table.presence={message:wc},ft.attribute.presence=!1,ft.hash_attribute.presence=!1,Ic.validateObject(e,ft)}a(H$,"describe_table");function x$(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(x$,"validateTableResidence");EN.exports={schema_object:U$,create_table_object:v$,table_object:P$,attribute_object:B$,describe_table:H$,validateTableResidence:x$}});var mN=g((qce,hN)=>{"use strict";var q$=require("uuid"),Om=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||q$.v4(),this.schema_table=`${this.schema}.${this.table}`}};hN.exports=Om});var S_=g((Fce,pN)=>{"use strict";var G$=mN(),bm=class extends G${static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};pN.exports=bm});var TN=g((Vce,SN)=>{"use strict";SN.exports=k$;var F$="inserted";function k$(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===F$?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(k$,"returnObject")});var T_=g((Yce,bN)=>{"use strict";var V$=M(),Nm=We(),$$=Fo(),{getSystemSchemaPath:Y$,getSchemaPath:K$}=Je(),W$=qi(),Q$=p_(),z$=S_(),J$=TN(),{handleHDBError:gN,hdb_errors:AN}=se(),RN=Q(),{HTTP_STATUS_CODES:j$}=AN,ym=W$.hdb_attribute,ON=[];for(let e=0;e<ym.attributes.length;e++)ON.push(ym.attributes[e].attribute);var X$="inserted";bN.exports=Z$;async function Z$(e){let t=Q$.attribute_object(e);if(t)throw gN(new Error,t.message,AN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&RN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw gN(new Error,r,j$.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=RN.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new z$(e.schema,e.table,e.attribute,e.id);try{let i=await Nm.openEnvironment(K$(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}`);Nm.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Nm.openEnvironment(Y$(),V$.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await $$.insertRecords(o,ym.hash_attribute,ON,[n]);return J$(X$,c,{records:[n]},u)}catch(i){throw i}}a(Z$,"lmdbCreateAttribute")});var Im=g((Wce,yN)=>{var{hdb_table:e1,hdb_database:NN}=Qs(),t1=je(),wm=require("joi"),r1={undefined:"undefined",null:"null"},s1=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||r1[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),n1=wm.object({database:NN,schema:NN,table:e1,records:wm.array().items(wm.object().custom(s1)).required()});yN.exports=function(e){return t1.validateBySchema(e,n1)}});var Dc=g((Jce,IN)=>{"use strict";var Sn=Q(),wN=$(),zce=Im(),{getDatabases:i1}=(Ae(),ne(Ge)),{ClientError:Gi}=se();IN.exports=o1;function o1(e){if(Sn.isEmpty(e))throw new Gi("invalid update parameters defined.");if(Sn.isEmptyOrZeroLength(e.schema))throw new Gi("invalid schema specified.");if(Sn.isEmptyOrZeroLength(e.table))throw new Gi("invalid table specified.");if(!Array.isArray(e.records))throw new Gi("records must be an array");let t=i1()[e.schema]?.[e.table];if(Sn.isEmpty(t))throw new Gi(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&Sn.isEmptyOrZeroLength(o[r]))throw wN.error("a valid hash attribute must be provided with update record:",o),new Gi("a valid hash attribute must be provided with update record, check log for more info");if(!Sn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw wN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Gi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Sn.isEmpty(o[r])&&o[r]!==""&&s.has(Sn.autoCast(o[r]))&&(o.skip=!0),s.add(Sn.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(o1,"insertUpdateValidate")});var Lc=g((Xce,CN)=>{"use strict";var a1=M().OPERATIONS_ENUM,Cm=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=a1.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};CN.exports=Cm});var Mc=g((tue,LN)=>{"use strict";var eue=Lc(),g_=M(),Dm=Q(),DN=$(),c1=require("uuid"),{handleHDBError:R_,hdb_errors:u1}=se(),{HDB_ERROR_MSGS:A_,HTTP_STATUS_CODES:O_}=u1;LN.exports=l1;function l1(e,t,r){for(let n=0;n<t.length;n++)_1(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];d1(i,r,e.operation)}}a(l1,"processRows");function _1(e){if(Buffer.byteLength(String(e))>g_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw R_(new Error,A_.ATTR_NAME_LENGTH_ERR(e),O_.BAD_REQUEST,void 0,void 0,!0);if(Dm.isEmptyOrZeroLength(e)||Dm.isEmpty(e.trim()))throw R_(new Error,A_.ATTR_NAME_NULLISH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}a(_1,"validateAttribute");function d1(e,t,r){if(!e.hasOwnProperty(t)||Dm.isEmptyOrZeroLength(e[t])){if(r===g_.OPERATIONS_ENUM.INSERT||r===g_.OPERATIONS_ENUM.UPSERT){e[t]=c1.v4();return}throw DN.error("Update transaction aborted due to record with no hash value:",e),R_(new Error,A_.RECORD_MISSING_HASH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>g_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw DN.error(e),R_(new Error,A_.HASH_VAL_LENGTH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}a(d1,"validateHash")});var UN=g((sue,MN)=>{"use strict";var Lm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};MN.exports=Lm});var BN=g((iue,vN)=>{"use strict";var Mm=We(),f1=$(),PN=yr().LMDB_ERRORS_ENUM;vN.exports=E1;async function E1(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 Mm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==PN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Mm.closeEnvironment(global.lmdb_map[s]),await Mm.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==PN.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){f1.error(t)}}a(E1,"cleanLMDBMap")});var Tn=g((aue,GN)=>{"use strict";var Uc=require("crypto"),h1=ee(),{CONFIG_PARAMS:m1}=M(),xN="aes-256-cbc",p1=32,S1=16,Um=64,qN=32,T1=Um+qN,HN=new Map;GN.exports={encrypt:g1,decrypt:R1,createNatsTableStreamName:A1};function g1(e){let t=Uc.randomBytes(p1),r=Uc.randomBytes(S1),s=Uc.createCipheriv(xN,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(g1,"encrypt");function R1(e){let t=e.substr(0,Um),r=e.substr(Um,qN),s=e.substr(T1,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Uc.createDecipheriv(xN,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(R1,"decrypt");function A1(e,t){let r=h1.get(m1.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=HN.get(r);return s||(s=Uc.createHash("md5").update(r).digest("hex"),HN.set(r,s)),s}a(A1,"createNatsTableStreamName")});var Zn=g((lue,kN)=>{"use strict";var uue=Dr(),b_=$(),FN=p_(),O1=Tn(),N_=Q(),{handleHDBError:y_,hdb_errors:b1}=se(),{HDB_ERROR_MSGS:w_,HTTP_STATUS_CODES:Pm}=b1,N1=ee();N1.initSync();var{getDatabases:vm}=(Ae(),ne(Ge));kN.exports={describeAll:y1,describeTable:I_,describeSchema:w1};async function y1(e){try{let t=N_.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=vm(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)E=await I_({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await I_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){b_.error(E)}}let _={};for(let l in c)t||s?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return b_.error("Got an error in describeAll"),b_.error(t),y_(new Error,w_.DESCRIBE_ALL_ERR)}}a(y1,"describeAll");async function I_(e,t){N_.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=FN.describe_table(e);if(i)throw i;let c=vm()[r];if(!c)throw y_(new Error,w_.SCHEMA_NOT_FOUND(e.schema),Pm.NOT_FOUND);let u=c[s];if(!u)throw y_(new Error,w_.TABLE_NOT_FOUND(e.schema,e.table),Pm.NOT_FOUND);function _(f){l.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 l=[];if(n){let f={};n.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=O1.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){b_.warn(`unable to stat table dbi due to ${f}`)}return d}a(I_,"descTable");async function w1(e){N_.transformReq(e);let t=FN.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),i=vm()[s];if(!i)throw y_(new Error,w_.SCHEMA_NOT_FOUND(e.schema),Pm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),N_.isEmpty(u)||u.describe){let _=await I_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(w1,"describeSchema")});var gn=g((Eue,WN)=>{var I1=qi(),{callbackify:$N,promisify:C1}=require("util"),{getDatabases:YN}=(Ae(),ne(Ge));WN.exports={setSchemaDataToGlobal:VN,getTableSchema:D1,getSystemSchema:L1,setSchemaDataToGlobalAsync:C1(VN)};var KN=Zn(),due=$N(KN.describeAll),fue=$N(KN.describeTable);function VN(e){global.hdb_schema=YN(),e&&e()}a(VN,"setSchemaDataToGlobal");function D1(e,t,r){let s=YN()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(D1,"getTableSchema");function L1(){return I1}a(L1,"getSystemSchema")});var Lr=g((mue,jN)=>{"use strict";var D_=Im(),Gt=Q(),M1=require("util"),L_=ys(),U1=gn(),QN=$(),{handleHDBError:Fi,hdb_errors:P1}=se(),{HTTP_STATUS_CODES:ki}=P1,v1=M1.promisify(U1.getTableSchema),B1="updated",zN="inserted",JN="upserted";jN.exports={insert:x1,update:q1,upsert:G1,validation:H1,flush:F1};async function H1(e){if(Gt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Gt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Gt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await v1(e.schema,e.table),r=D_(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Gt.isEmptyOrZeroLength(c[s]))throw QN.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(!Gt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw QN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Gt.isEmpty(c[s])&&c[s]!==""&&n.has(Gt.autoCast(c[s]))&&(c.skip=!0),n.add(Gt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(H1,"validation");async function x1(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=D_(e);if(t)throw Fi(new Error,t.message,ki.BAD_REQUEST);Gt.transformReq(e);let r=Gt.checkSchemaTableExist(e.schema,e.table);if(r)throw Fi(new Error,r,ki.BAD_REQUEST);let s=await L_.createRecords(e);return C_(zN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(x1,"insertData");async function q1(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=D_(e);if(t)throw Fi(new Error,t.message,ki.BAD_REQUEST);Gt.transformReq(e);let r=Gt.checkSchemaTableExist(e.schema,e.table);if(r)throw Fi(new Error,r,ki.BAD_REQUEST);let s=await L_.updateRecords(e);return Gt.isEmpty(s.existing_rows)?C_(B1,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):C_(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(q1,"updateData");async function G1(e){if(e.operation!=="upsert")throw Fi(new Error,"invalid operation, must be upsert",ki.INTERNAL_SERVER_ERROR);let t=D_(e);if(t)throw Fi(new Error,t.message,ki.BAD_REQUEST);Gt.transformReq(e);let r=Gt.checkSchemaTableExist(e.schema,e.table);if(r)throw Fi(new Error,r,ki.BAD_REQUEST);let s=await L_.upsertRecords(e);return C_(JN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(G1,"upsertData");function C_(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===zN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===JN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(C_,"returnObject");function F1(e){return Gt.transformReq(e),L_.flush(e.schema,e.table)}a(F1,"flush")});var Hm=g((Sue,ey)=>{var k1=je(),Bm=require("joi"),{hdb_table:V1,hdb_database:XN}=Qs(),ZN={schema:XN,database:XN,table:V1},$1={date:Bm.date().iso().required()},Y1={timestamp:Bm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};ey.exports=function(e,t){let r=t==="timestamp"?{...ZN,...Y1}:{...ZN,...$1},s=Bm.object(r);return k1.validateBySchema(e,s)}});var sy=g((Tue,ry)=>{var K1=je(),xm=require("joi"),{hdb_table:W1,hdb_database:ty}=Qs(),Q1=xm.object({schema:ty,database:ty,table:W1,hash_values:xm.array().required(),ids:xm.array()});ry.exports=function(e){return K1.validateBySchema(e,Q1)}});var iy=g((gue,ny)=>{"use strict";var qm=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},Gm=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},Fm=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};ny.exports={InsertObject:qm,NoSQLSeachObject:Gm,DeleteResponseObject:Fm}});var ri=g((Aue,ly)=>{"use strict";var ay=Hm(),z1=sy(),Vi=Q(),oy=require("moment"),cy=$(),{promisify:J1,callbackify:j1}=require("util"),$i=M(),X1=gn(),km=J1(X1.getTableSchema),Vm=ys(),{DeleteResponseObject:Z1}=iy(),{handleHDBError:ei,hdb_errors:eY}=se(),{HDB_ERROR_MSGS:M_,HTTP_STATUS_CODES:ti}=eY,tY="records successfully deleted",rY=j1(uy);ly.exports={delete:rY,deleteRecord:uy,deleteFilesBefore:sY,deleteAuditLogsBefore:nY};async function sY(e){let t=ay(e,"date");if(t)throw ei(t,t.message,ti.BAD_REQUEST,void 0,void 0,!0);if(Vi.transformReq(e),!oy(e.date,oy.ISO_8601).isValid())throw ei(new Error,M_.INVALID_DATE,ti.BAD_REQUEST,$i.LOG_LEVELS.ERROR,M_.INVALID_DATE,!0);let s=Vi.checkSchemaTableExist(e.schema,e.table);if(s)throw ei(new Error,s,ti.NOT_FOUND,$i.LOG_LEVELS.ERROR,s,!0);let n=await Vm.deleteRecordsBefore(e);if(await km(e.schema,e.table),cy.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(sY,"deleteFilesBefore");async function nY(e){let t=ay(e,"timestamp");if(t)throw ei(t,t.message,ti.BAD_REQUEST,void 0,void 0,!0);if(Vi.transformReq(e),isNaN(e.timestamp))throw ei(new Error,M_.INVALID_VALUE("Timestamp"),ti.BAD_REQUEST,$i.LOG_LEVELS.ERROR,M_.INVALID_VALUE("Timestamp"),!0);let r=Vi.checkSchemaTableExist(e.schema,e.table);if(r)throw ei(new Error,r,ti.NOT_FOUND,$i.LOG_LEVELS.ERROR,r,!0);let s=await Vm.deleteAuditLogsBefore(e);return await km(e.schema,e.table),cy.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(nY,"deleteAuditLogsBefore");async function uy(e){e.ids&&(e.hash_values=e.ids);let t=z1(e);if(t)throw ei(t,t.message,ti.BAD_REQUEST,void 0,void 0,!0);Vi.transformReq(e);let r=Vi.checkSchemaTableExist(e.schema,e.table);if(r)throw ei(new Error,r,ti.NOT_FOUND,$i.LOG_LEVELS.ERROR,r,!0);try{await km(e.schema,e.table);let s=await Vm.deleteRecords(e);return Vi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${tY}`),s}catch(s){if(s.message===$i.SEARCH_NOT_FOUND_MESSAGE){let n=new Z1;return n.message=$i.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(uy,"deleteRecord")});var U_=g((bue,fy)=>{var iY=require("crypto"),_y=9;function oY(e){let t=cY(_y),r=dy(e+t);return t+r}a(oY,"createHash");function aY(e,t){let r=e?.substr(0,_y),s=r+dy(t+r);return e===s}a(aY,"validateHash");function cY(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(cY,"generateSalt");function dy(e){return iY.createHash("md5").update(e).digest("hex")}a(dy,"md5");fy.exports={hash:oY,validate:aY}});var hy=g((yue,Ey)=>{var $m=je(),Kt={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 uY(e){return Kt.password.presence=!0,Kt.username.presence=!0,Kt.role.presence=!0,Kt.active.presence=!0,$m.validateObject(e,Kt)}a(uY,"addUserValidation");function lY(e){return Kt.password.presence=!1,Kt.username.presence=!0,Kt.role.presence=!1,Kt.active.presence=!1,$m.validateObject(e,Kt)}a(lY,"alterUserValidation");function _Y(e){return Kt.password.presence=!1,Kt.username.presence=!0,Kt.role.presence=!1,Kt.active.presence=!1,$m.validateObject(e,Kt)}a(_Y,"dropUserValidation");Ey.exports={addUserValidation:uY,alterUserValidation:lY,dropUserValidation:_Y}});var Fe=g((Cue,py)=>{"use strict";var{platform:Iue}=require("os"),dY="nats-server.zip",Ym="nats-server",fY=process.platform==="win32"?`${Ym}.exe`:Ym,EY=/^[^\s.,*>]+$/,my="__request__",hY=a(e=>`${e}.${my}`,"REQUEST_SUBJECT"),mY={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},pY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},SY={HUB:"hub.pid",LEAF:"leaf.pid"},TY={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},gY={SUCCESS:"success",ERROR:"error"},RY={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},AY={TXN:"txn",MSGID:"msgid"},Vo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},OY={[Vo.ERR]:1,[Vo.WRN]:2,[Vo.INF]:3,[Vo.DBG]:4,[Vo.TRC]:5},bY={debug:"-D",trace:"-DVV"};py.exports={NATS_SERVER_ZIP:dY,NATS_SERVER_NAME:Ym,NATS_BINARY_NAME:fY,PID_FILES:SY,NATS_CONFIG_FILES:pY,SERVER_SUFFIX:TY,NATS_TERM_CONSTRAINTS_RX:EY,REQUEST_SUFFIX:my,UPDATE_REMOTE_RESPONSE_STATUSES:gY,CLUSTER_STATUS_STATUSES:RY,REQUEST_SUBJECT:hY,SUBJECT_PREFIXES:AY,MSG_HEADERS:mY,LOG_LEVELS:Vo,LOG_LEVEL_FLAGS:bY,LOG_LEVEL_HIERARCHY:OY}});var Ty=g((Lue,Sy)=>{"use strict";var NY={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
1
+ "use strict";var Zq=Object.create;var sc=Object.defineProperty;var eG=Object.getOwnPropertyDescriptor;var tG=Object.getOwnPropertyNames;var rG=Object.getPrototypeOf,sG=Object.prototype.hasOwnProperty;var a=(e,t)=>sc(e,"name",{value:t,configurable:!0});var Re=(e,t)=>()=>(e&&(t=e(e=0)),t);var g=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ye=(e,t)=>{for(var r in t)sc(e,r,{get:t[r],enumerable:!0})},eO=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of tG(t))!sG.call(e,n)&&n!==r&&sc(e,n,{get:()=>t[n],enumerable:!(s=eG(t,n))||s.enumerable});return e};var x=(e,t,r)=>(r=e!=null?Zq(rG(e)):{},eO(t||!e||!e.__esModule?sc(r,"default",{value:e,enumerable:!0}):r,e)),ne=e=>eO(sc({},"__esModule",{value:!0}),e);var sO=g((yae,rO)=>{var nG=require("fast-glob"),{statSync:Sh,existsSync:Th,readFileSync:iG,writeFileSync:oG}=require("fs"),{spawnSync:aG,spawn:cG,execFileSync:Nae}=require("child_process"),{isMainThread:uG}=require("worker_threads"),{join:Qn,relative:tO}=require("path"),{PACKAGE_ROOT:Rs}=M(),{tmpdir:lG,platform:_G}=require("os");require("source-map-support").install();var dG=["resources","server","dataLayer","components"],nc="ts-build",gh,fG=__filename.endsWith("tsBuild.js");if(fG){if(uG){let r;try{Sh(Qn(Rs,nc)),r=!0}catch{}if(r)for(let s of nG.sync(dG.map(n=>n+"/**/*.ts"),{cwd:Rs})){let n=0,i=0;try{n=Sh(Qn(Rs,s)).mtimeMs-5e3,i=Sh(Qn(Rs,nc,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),gh=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),gh=!0;if(gh){let s=Qn(Rs,"node_modules/.bin/tsc");_G()==="win32"&&(s+=".cmd");let n=aG(s,{cwd:Rs});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=Qn(lG(),"harperdb-tsc.pid"),o;if(Th(i))try{process.kill(+iG(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=cG(s,["--watch"],{cwd:Rs,detached:!0,stdio:"ignore"});oG(i,c.pid.toString()),c.unref()}}}}let e=rO.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(Rs)&&!s[0].includes("node_modules")){let i=tO(Rs,s[0]),o;i.startsWith(nc)?o=Qn(Rs,tO(nc,i)):o=Qn(Rs,nc,i);let c=Qn(o,r),u=c+".js";if(Th(u))return u;if(c.includes(".")&&Th(c))return c}return t(r,s,n)}}});var M=g((Cae,pO)=>{"use strict";var ts=require("path"),EG=require("fs"),{relative:wae,join:Iae}=ts,{existsSync:hG}=EG;function mG(){let e=__dirname;for(;!hG(ts.join(e,"package.json"));){let t=ts.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(mG,"getHDBPackageRoot");var zn=mG(),nO="js",$l=nO,pG="harperdb-config.yaml",SG="defaultConfig.yaml",TG="hdb",iO=`harperdb.${$l}`,oO=`customFunctionsServer.${$l}`,gG=`restartHdb.${$l}`,Ah="HarperDB",Vl="Custom Functions",Yl="Clustering Hub",Kl="Clustering Leaf",RG="Clustering Ingest Service",AG="Clustering Reply Service",OG="foreground.pid",bG="hdb.pid",NG="data",yG={HDB:Ah,CLUSTERING_HUB:Yl,CLUSTERING_LEAF:Kl,CLUSTERING_INGEST_SERVICE:RG,CLUSTERING_REPLY_SERVICE:AG,CUSTOM_FUNCTIONS:Vl,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"},wG={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},IG={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},CG={harperdb:Ah,"clustering hub":Yl,"clustering leaf":Kl,"custom functions":Vl,custom_functions:Vl,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},DG={CLUSTERING_HUB_PROC_DESCRIPTOR:Yl,CLUSTERING_LEAF_PROC_DESCRIPTOR:Kl},Rh={HDB:ts.join(zn,"server/harperdb"),CUSTOM_FUNCTIONS:ts.join(zn,"server/customFunctions"),CLUSTERING_HUB:ts.join(zn,"server/nats"),CLUSTERING_LEAF:ts.join(zn,"server/nats")},LG={HDB:ts.join(Rh.HDB,iO),CUSTOM_FUNCTIONS:ts.join(Rh.CUSTOM_FUNCTIONS,oO)},MG={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:ts.join(zn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:ts.join(zn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:ts.join(zn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},UG={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},aO="support@harperdb.io",PG="customer-success@harperdb.io",cO=1,vG=4141,uO="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",BG="https://www.harperdb.io/product",HG=`For support, please submit a request at ${uO} or contact ${aO}`,lO=`For license support, please contact ${PG}`,xG="None of the specified records were found.",qG="hash attribute not found",GG=`Your current license only supports ${cO} role. ${lO}`,FG="Your current license only supports 3 connections to a node.",kG="127.0.0.1",VG=1,$G=/^\.$/,YG=/^\.\.$/,KG="U+002E",WG=/\//g,QG="U+002F",zG=/U\+002F/g,JG=/^U\+002E$/,XG=/^U\+002EU\+002E$/,jG="d",ZG=999999,eF="*",tF="--max-old-space-size=",rF="system",sF="__hdb_hash",nF=".harperdb",iF=".hdb",oF="keys",aF="hdb_boot_properties.file",cF=".updateConfig.json",uF="SIGTSTP",lF=24,_F=6e4,dF=448,fF="blob",EF="trash",hF="database",mF="schema",pF="transactions",SF=".count",TF="id",gF="PROCESS_NAME",_O={SETTINGS_PATH_KEY:"settings_path"},dO=require("lodash"),RF={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"},AF={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},OF={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},bF={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"},NF={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"},Nr="hdb_internal:",yF={CREATE_SCHEMA:Nr+"create_schema",CREATE_TABLE:Nr+"create_table",CREATE_ATTRIBUTE:Nr+"create_attribute",ADD_USER:Nr+"add_user",ALTER_USER:Nr+"alter_user",DROP_USER:Nr+"drop_user",HDB_NODES:Nr+"hdb_nodes",HDB_USERS:Nr+"hdb_users",HDB_WORKERS:Nr+"hdb_workers",CATCHUP:Nr+"catchup",SCHEMA_CATCHUP:Nr+"schema_catchup",WORKER_ROOM:Nr+"cluster_workers"},wF={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"},IF="060493.ks",CF=".license",DF={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},Z={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"},LF={CSV:".csv",JSON:".json"},MF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},UF={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},ic={};ic[Z.INSERT]=Z.INSERT;ic[Z.UPDATE]=Z.UPDATE;ic[Z.UPSERT]=Z.UPSERT;ic[Z.DELETE]=Z.DELETE;var xe=Object.create(null);xe[Z.DESCRIBE_ALL]=Z.DESCRIBE_ALL;xe[Z.DESCRIBE_TABLE]=Z.DESCRIBE_TABLE;xe[Z.DESCRIBE_SCHEMA]=Z.DESCRIBE_SCHEMA;xe[Z.READ_LOG]=Z.READ_LOG;xe[Z.ADD_NODE]=Z.ADD_NODE;xe[Z.LIST_USERS]=Z.LIST_USERS;xe[Z.LIST_ROLES]=Z.LIST_ROLES;xe[Z.USER_INFO]=Z.USER_INFO;xe[Z.SQL]=Z.SQL;xe[Z.GET_JOB]=Z.GET_JOB;xe[Z.SEARCH_JOBS_BY_START_DATE]=Z.SEARCH_JOBS_BY_START_DATE;xe[Z.DELETE_FILES_BEFORE]=Z.DELETE_FILES_BEFORE;xe[Z.EXPORT_LOCAL]=Z.EXPORT_LOCAL;xe[Z.EXPORT_TO_S3]=Z.EXPORT_TO_S3;xe[Z.CLUSTER_STATUS]=Z.CLUSTER_STATUS;xe[Z.REMOVE_NODE]=Z.REMOVE_NODE;xe[Z.RESTART]=Z.RESTART;xe[Z.CUSTOM_FUNCTIONS_STATUS]=Z.CUSTOM_FUNCTIONS_STATUS;xe[Z.GET_CUSTOM_FUNCTIONS]=Z.GET_CUSTOM_FUNCTIONS;xe[Z.GET_CUSTOM_FUNCTION]=Z.GET_CUSTOM_FUNCTION;xe[Z.SET_CUSTOM_FUNCTION]=Z.SET_CUSTOM_FUNCTION;xe[Z.DROP_CUSTOM_FUNCTION]=Z.DROP_CUSTOM_FUNCTION;xe[Z.ADD_CUSTOM_FUNCTION_PROJECT]=Z.ADD_CUSTOM_FUNCTION_PROJECT;xe[Z.DROP_CUSTOM_FUNCTION_PROJECT]=Z.DROP_CUSTOM_FUNCTION_PROJECT;xe[Z.PACKAGE_CUSTOM_FUNCTION_PROJECT]=Z.PACKAGE_CUSTOM_FUNCTION_PROJECT;xe[Z.DEPLOY_CUSTOM_FUNCTION_PROJECT]=Z.DEPLOY_CUSTOM_FUNCTION_PROJECT;var PF={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"},vF={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},fO={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"},BF=dO.invert(fO),HF={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"},I={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",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",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"},EO={settings_path:_O.SETTINGS_PATH_KEY,hdb_root_key:I.ROOTPATH,hdb_root:I.ROOTPATH,rootpath:I.ROOTPATH,server_port_key:I.OPERATIONSAPI_NETWORK_PORT,server_port:I.OPERATIONSAPI_NETWORK_PORT,cert_key:I.TLS_CERTIFICATE,certificate:I.TLS_CERTIFICATE,private_key_key:I.TLS_PRIVATEKEY,private_key:I.TLS_PRIVATEKEY,http_secure_enabled_key:I.OPERATIONSAPI_NETWORK_HTTPS,https_on:I.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:I.OPERATIONSAPI_NETWORK_CORS,cors_on:I.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:I.LOGGING_LEVEL,log_level:I.LOGGING_LEVEL,log_path_key:I.LOGGING_ROOT,log_path:I.LOGGING_ROOT,clustering_node_name_key:I.CLUSTERING_NODENAME,node_name:I.CLUSTERING_NODENAME,clustering_enabled_key:I.CLUSTERING_ENABLED,clustering:I.CLUSTERING_ENABLED,max_http_threads:I.THREADS_COUNT,max_hdb_processes:I.THREADS_COUNT,server_timeout_key:I.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:I.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:I.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:I.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:I.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:I.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:I.LOGGING_AUDITLOG,disable_transaction_log:I.LOGGING_AUDITLOG,operation_token_timeout_key:I.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:I.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:I.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:I.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:I.HTTP_PORT,custom_functions_port:I.HTTP_PORT,custom_functions_directory_key:I.COMPONENTSROOT,custom_functions_directory:I.COMPONENTSROOT,max_custom_function_processes:I.THREADS_COUNT,log_to_file:I.LOGGING_FILE,log_to_stdstreams:I.LOGGING_STDSTREAMS,local_studio_on:I.LOCALSTUDIO_ENABLED,clustering_port:I.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:I.CLUSTERING_USER,clustering_enabled:I.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:I.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:I.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:I.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:I.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:I.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:I.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:I.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:I.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:I.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxconsumemsgs:I.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS,clustering_leafserver_streams_maxingestthreads:I.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS,clustering_leafserver_streams_maxmsgs:I.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:I.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:I.CLUSTERING_NODENAME,clustering_tls_certificate:I.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:I.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:I.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:I.CLUSTERING_TLS_INSECURE,clustering_tls_verify:I.CLUSTERING_TLS_VERIFY,clustering_loglevel:I.CLUSTERING_LOGLEVEL,clustering_republishmessages:I.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:I.CLUSTERING_DATABASELEVEL,customfunctions_network_port:I.HTTP_PORT,customfunctions_tls_certificate:I.TLS_CERTIFICATE,customfunctions_network_cors:I.HTTP_CORS,customfunctions_network_corsaccesslist:I.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:I.HTTP_HEADERSTIMEOUT,customfunctions_network_https:I.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:I.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:I.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:I.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:I.HTTP_TIMEOUT,http_threads:I.THREADS_COUNT,threads:I.THREADS_COUNT,threads_count:I.THREADS_COUNT,threads_debug:I.THREADS_DEBUG,threads_debug_startingport:I.THREADS_DEBUG_STARTINGPORT,threads_debug_port:I.THREADS_DEBUG_PORT,threads_debug_host:I.THREADS_DEBUG_HOST,threads_debug_waitfordebugger:I.THREADS_DEBUG_WAITFORDEBUGGER,threads_maxheapmemory:I.THREADS_MAXHEAPMEMORY,http_session_affinity:I.HTTP_SESSIONAFFINITY,http_compressionthreshold:I.HTTP_COMPRESSIONTHRESHOLD,http_cors:I.HTTP_CORS,http_corsaccesslist:I.HTTP_CORSACCESSLIST,http_headerstimeout:I.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:I.HTTP_KEEPALIVETIMEOUT,http_timeout:I.HTTP_TIMEOUT,http_port:I.HTTP_PORT,http_secureport:I.HTTP_SECUREPORT,http_mtls:I.HTTP_MTLS,http_mtls_user:I.HTTP_MTLS_USER,http_mtls_required:I.HTTP_MTLS_REQUIRED,customfunctions_processes:I.THREADS_COUNT,customfunctions_root:I.COMPONENTSROOT,localstudio_enabled:I.LOCALSTUDIO_ENABLED,logging_file:I.LOGGING_FILE,logging_level:I.LOGGING_LEVEL,logging_root:I.LOGGING_ROOT,logging_rotation_enabled:I.LOGGING_ROTATION_ENABLED,logging_rotation_compress:I.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:I.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:I.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:I.LOGGING_ROTATION_PATH,logging_stdstreams:I.LOGGING_STDSTREAMS,logging_auditlog:I.LOGGING_AUDITLOG,logging_auditretention:I.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:I.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:I.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:I.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:I.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:I.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:I.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:I.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:I.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:I.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:I.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:I.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:I.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:I.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:I.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:I.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:I.ROOTPATH,databases:I.DATABASES,storage_path:I.STORAGE_PATH,ignorescripts:I.IGNORE_SCRIPTS,mqtt_network_port:I.MQTT_NETWORK_PORT,mqtt_websocket:I.MQTT_WEBSOCKET,mqtt_network_secureport:I.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:I.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:I.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:I.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:I.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:I.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:I.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:I.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:I.AUTHENTICATION_CACHETTL,authentication_enablesessions:I.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:I.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:I.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:I.COMPONENTSROOT,tls_certificate:I.TLS_CERTIFICATE,tls_privatekey:I.TLS_PRIVATEKEY,tls_certificateauthority:I.TLS_CERTIFICATEAUTHORITY,tls_ciphers:I.TLS_CIPHERS};for(let e in I){let t=I[e];EO[t.toLowerCase()]=t}var xF={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},qF={csv_file_load:"csv_file_load",csv_data_load:Z.CSV_DATA_LOAD,csv_url_load:Z.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"},GF={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"},FF={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},kF={VERSION_DEFAULT:"2.2.0"},VF={DEVELOPMENT:8192,DEFAULT:512},$F={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"},YF={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"},KF={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},hO={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},WF=Symbol("metadata"),QF="__clustering__",zF=Object.values(hO),JF=15984864e5,mO={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},XF=dO.invert(mO),jF={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"},ZF=111,ek=`\r
2
+ `,tk={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},rk=["*","%"],sk="unauthorized_access",nk="func_val",ik={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},ok={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},ak={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"},ck={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},uk={HTTP:"http"},lk={STOPPED:"stopped",ONLINE:"online"},_k="3.x.x",dk={SUCCESS:"success",FAILURE:"failure"},fk={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};pO.exports={LOCAL_HARPERDB_OPERATIONS:xe,HDB_SUPPORT_ADDRESS:aO,HDB_SUPPORT_URL:uO,HDB_PRICING_URL:BG,SUPPORT_HELP_MSG:HG,LICENSE_HELP_MSG:lO,HDB_PROC_NAME:iO,HDB_PROC_DESCRIPTOR:Ah,CLUSTERING_LEAF_PROC_DESCRIPTOR:Kl,CLUSTERING_HUB_PROC_DESCRIPTOR:Yl,SYSTEM_SCHEMA_NAME:rF,HASH_FOLDER_NAME:sF,HDB_HOME_DIR_NAME:nF,UPDATE_FILE_NAME:cF,LICENSE_KEY_DIR_NAME:oF,BOOT_PROPS_FILE_NAME:aF,JOB_TYPE_ENUM:qF,JOB_STATUS_ENUM:DF,SYSTEM_TABLE_NAMES:bF,SYSTEM_TABLE_HASH_ATTRIBUTES:NF,OPERATIONS_ENUM:Z,VALID_S3_FILE_TYPES:LF,S3_BUCKET_AUTH_KEYS:MF,VALID_SQL_OPS_ENUM:UF,GEO_CONVERSION_ENUM:vF,HDB_SETTINGS_NAMES:fO,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:BF,SERVICE_ACTIONS_ENUM:PF,CLUSTER_MESSAGE_TYPE_ENUM:GF,CLUSTER_CONNECTION_DIRECTION_ENUM:FF,CLUSTER_EVENTS_DEFS_ENUM:$F,PERIOD_REGEX:$G,DOUBLE_PERIOD_REGEX:YG,UNICODE_PERIOD:KG,FORWARD_SLASH_REGEX:WG,UNICODE_FORWARD_SLASH:QG,ESCAPED_FORWARD_SLASH_REGEX:zG,ESCAPED_PERIOD_REGEX:JG,ESCAPED_DOUBLE_PERIOD_REGEX:XG,REG_KEY_FILE_NAME:IF,RESTART_TIMEOUT_MS:_F,HDB_FILE_PERMISSIONS:dF,DATABASES_DIR_NAME:hF,LEGACY_DATABASES_DIR_NAME:mF,TRANSACTIONS_DIR_NAME:pF,LIMIT_COUNT_NAME:SF,ID_ATTRIBUTE_STRING:TF,INSERT_MODULE_ENUM:AF,UPGRADE_JSON_FIELD_NAMES_ENUM:OF,RESTART_CODE:uF,RESTART_CODE_NUM:lF,CLUSTER_OPERATIONS:ic,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:wF,HDB_INTERNAL_SC_CHANNEL_PREFIX:Nr,INTERNAL_SC_CHANNELS:yF,CLUSTERING_MESSAGE_TYPES:jF,HDB_FILE_SUFFIX:iF,BLOB_FOLDER_NAME:fF,HDB_TRASH_DIR:EF,ORIGINATOR_SET_VALUE:ZF,LICENSE_VALUES:kF,RAM_ALLOCATION_ENUM:VF,TIME_STAMP_NAMES_ENUM:hO,TIME_STAMP_NAMES:zF,PERMS_UPDATE_RELEASE_TIMESTAMP:JF,SEARCH_NOT_FOUND_MESSAGE:xG,SEARCH_ATTRIBUTE_NOT_FOUND:qG,LICENSE_ROLE_DENIED_RESPONSE:GG,LICENSE_MAX_CONNS_REACHED:FG,BASIC_LICENSE_MAX_NON_CU_ROLES:cO,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:vG,VALUE_SEARCH_COMPARATORS:mO,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:XF,LICENSE_FILE_NAME:CF,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:YF,NEW_LINE:ek,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:VG,MOMENT_DAYS_TAG:jG,API_TURNOVER_SEC:ZG,LOOPBACK:kG,CODE_EXTENSION:$l,WILDCARD_SEARCH_VALUE:eF,NODE_ERROR_CODES:KF,JAVASCRIPT_EXTENSION:nO,PERMS_CRUD_ENUM:tk,UNAUTHORIZED_PERMISSION_NAME:sk,SEARCH_WILDCARDS:rk,FUNC_VAL:nk,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:ik,JWT_ENUM:ok,CLUSTERING_FLAG:QF,ITC_EVENT_TYPES:ak,CUSTOM_FUNCTION_PROC_NAME:oO,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Vl,SERVICES:ck,THREAD_TYPES:uk,MEM_SETTING_KEY:tF,HDB_RESTART_SCRIPT:gG,PROCESS_DESCRIPTORS:yG,SERVICE_SERVERS:LG,SERVICE_SERVERS_CWD:Rh,PROCESS_DESCRIPTORS_VALIDATE:CG,LAUNCH_SERVICE_SCRIPTS:MG,LOG_LEVELS:IG,PROCESS_NAME_ENV_PROP:gF,LOG_NAMES:wG,PM2_PROCESS_STATUSES:lk,CONFIG_PARAM_MAP:EO,CONFIG_PARAMS:I,HDB_CONFIG_FILE:pG,HDB_DEFAULT_CONFIG_FILE:SG,ROLE_TYPES_ENUM:UG,BOOT_PROP_PARAMS:_O,INSTALL_PROMPTS:RF,HDB_ROOT_DIR_NAME:TG,CLUSTERING_PROCESSES:DG,FOREGROUND_PID_FILE:OG,PACKAGE_ROOT:zn,PRE_4_0_0_VERSION:_k,DATABASES_PARAM_CONFIG:xF,METADATA_PROPERTY:WF,AUTH_AUDIT_STATUS:dk,AUTH_AUDIT_TYPES:fk,HDB_PID_FILE:bG,DEFAULT_DATABASE_NAME:NG,LEGACY_CONFIG_PARAMS:HF};sO()});var Oh=g((Lae,gO)=>{"use strict";var SO=require("minimist");gO.exports=Ek;function Ek(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=TO(process.env),s=TO(SO(process.argv))):(r=process.env,s=SO(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(Ek,"assignCMDENVVariables");function TO(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(TO,"objKeysToLowerCase")});var $=g((Uae,Dh)=>{"use strict";var Pi=require("fs-extra"),{workerData:hk,threadId:mk}=require("worker_threads"),hn=require("path"),OO=require("yaml"),bO=require("properties-reader"),Rt=M(),RO=Oh(),pk=require("os"),{PACKAGE_ROOT:Nh}=M(),{_assignPackageExport:Sk}=require("../index"),ac={};for(let e in console)ac[e]||(ac[e]=console[e]);var rr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},NO={STDOUT:"stdOut",STDERR:"stdErr"},Tk=hn.join(Nh,"logs"),gk=hn.join(Nh,"config/yaml/",Rt.HDB_DEFAULT_CONFIG_FILE),Rk=1e4,En,Ys,tr,Wl,Ql,cc,qo,oc;oc===void 0&&yO();Dh.exports={notify:CO,fatal:DO,error:uc,warn:Ch,info:zl,debug:Ih,trace:wh,setLogLevel:Ik,log_level:tr,loggerWithTag:Ak,suppressLogging:Ok,initLogSettings:yO,setupConsoleLogging:wO,logCustomLevel:yk,closeLogFile:yh,getLogFilePath:()=>cc,OUTPUTS:NO,AuthAuditLog:Lk};Sk("logger",Dh.exports);function yO(e=!1){try{if(oc===void 0||e){yh();let t=wk(),r=RO(["ROOTPATH"]);try{oc=bO(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Pi.pathExistsSync(hn.join(r.ROOTPATH,Rt.HDB_CONFIG_FILE)))throw s}({level:tr,config_log_path:Ql,to_file:En,to_stream:Ys}=Ck(r.ROOTPATH?hn.join(r.ROOTPATH,Rt.HDB_CONFIG_FILE):oc.get("settings_path"))),Wl=Rt.LOG_NAMES.HDB,cc=hn.join(Ql,Wl)}}catch(t){if(oc=void 0,t.code===Rt.NODE_ERROR_CODES.ENOENT){let r=RO(Object.keys(Rt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Rt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===Rt.CONFIG_PARAMS.LOGGING_LEVEL){tr=u;continue}if(c===Rt.CONFIG_PARAMS.LOGGING_STDSTREAMS){Ys=u;continue}c===Rt.CONFIG_PARAMS.LOGGING_FILE&&(En=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=Dk();En=En===void 0?n:En,En=AO(En),Ys=Ys===void 0?i:Ys,Ys=AO(Ys),tr=tr===void 0?s:tr,Ql=Tk,Wl=Rt.LOG_NAMES.INSTALL,cc=hn.join(Ql,Wl);return}throw uc("Error initializing log settings"),uc(t),t}process.env.DEV_MODE&&(Ys=!0),wO()}a(yO,"initLogSettings");var bh=!0;function wO(){xo("error",uc),xo("warn",Ch),xo("log",zl),xo("info",zl),xo("debug",Ih),xo("trace",wh)}a(wO,"setupConsoleLogging");function xo(e,t){console[e]=function(...r){if(bh&&t(...r),!/PM2 log:|App \[/.test(r[0]))return ac[e](...r)}}a(xo,"logConsole");function Ak(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(CO),fatal:r(DO),error:r(uc),warn:r(Ch),info:r(zl),debug:r(Ih),trace:r(wh)};function r(s){return function(...n){return s(t,...n)}}}a(Ak,"loggerWithTag");function Ok(e){try{bh=!1,e()}finally{bh=!0}}a(Ok,"suppressLogging");var bk=hk?.name?.replace(/ /g,"-")||"main";function mn(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||bk+"/"+mk);c<n;c++){let _=t[c];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
3
+ `}a(mn,"createLogRecord");function lc(e){En&&IO(e),Ys&&process.stdout.write(e)}a(lc,"logStdOut");function Jl(e){En&&IO(e),Ys&&process.stderr.write(e)}a(Jl,"logStdErr");function IO(e){Nk(),qo?Pi.appendFileSync(qo,e):ac.log(e)}a(IO,"logToFile");function yh(){try{Pi.closeSync(qo)}catch{}qo=null}a(yh,"closeLogFile");function Nk(){if(!qo){try{if(!cc)debugger;qo=Pi.openSync(cc,"a")}catch(e){ac.error(e)}setTimeout(()=>{yh()},Rk).unref()}}a(Nk,"openLogFile");function zl(...e){rr[tr]<=rr.info&&lc(mn("info",e))}a(zl,"info");function wh(...e){rr[tr]<=rr.trace&&lc(mn("trace",e))}a(wh,"trace");function uc(...e){rr[tr]<=rr.error&&Jl(mn("error",e))}a(uc,"error");function Ih(...e){rr[tr]<=rr.debug&&lc(mn("debug",e))}a(Ih,"debug");function CO(...e){rr[tr]<=rr.notify&&lc(mn("notify",e))}a(CO,"notify");function DO(...e){rr[tr]<=rr.fatal&&Jl(mn("fatal",e))}a(DO,"fatal");function Ch(...e){rr[tr]<=rr.warn&&Jl(mn("warn",e))}a(Ch,"warn");function yk(e,t,...r){t===NO.STDERR?Jl(mn(e,r)):lc(mn(e,r))}a(yk,"logCustomLevel");function wk(){let e;try{e=pk.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=hn.join(e,Rt.HDB_HOME_DIR_NAME,Rt.BOOT_PROPS_FILE_NAME);return Pi.existsSync(t)||(t=hn.join(Nh,"utility/hdb_boot_properties.file")),t}a(wk,"getPropsFilePath");function Ik(e){tr=e}a(Ik,"setLogLevel");function AO(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(AO,"autoCastBoolean");function Ck(e){try{if(e.includes("config/settings.js")){let o=bO(e);return{level:o.get(Rt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:hn.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=OO.parseDocument(Pi.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===Rt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(Ck,"getLogConfig");function Dk(){try{let e=OO.parseDocument(Pi.readFileSync(gk,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(Dk,"getDefaultConfig");function Lk(e,t,r,s,n,i){this.username=e,this.status=t,this.type=r,this.originating_ip=s,this.request_method=n,this.path=i}a(Lk,"AuthAuditLog")});var MO=g((vae,LO)=>{"use strict";var Mk=require("util"),Uk=require("path"),Pk=require("child_process"),vk=Mk.promisify(Pk.execFile),Bk=1e3*1e3*10;LO.exports={findPs:Hk};async function Hk(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await vk("ps",["wwxo",`pid,${r}`],{maxBuffer:Bk});for(let n of s.trim().split(`
4
+ `).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:Uk.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(Hk,"findPs")});var dt=g((Hae,PO)=>{"use strict";var xk="__dbis__",qk="__txns__",Gk="__environment_name__",Fk="__dbi_defintion__",kk={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"},Vk=["__createdtime__","__updatedtime__"],$k="\uFFFF",UO={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Yk=Object.values(UO);PO.exports={AUDIT_STORE_NAME:qk,INTERNAL_DBIS_NAME:xk,DBI_DEFINITION_NAME:Fk,SEARCH_TYPES:kk,TIMESTAMP_NAMES:Vk,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Gk,TRANSACTIONS_DBI_NAMES_ENUM:UO,TRANSACTIONS_DBIS:Yk,OVERFLOW_MARKER:$k}});var yr=g((xae,VO)=>{"use strict";var vO=M(),BO=dt(),HO={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},xO=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),qO={500:xO("There was an error processing your request."),400:"Invalid request"},Kk=qO[HO.INTERNAL_SERVER_ERROR],Wk={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.`},Qk={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},zk={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"},Jk={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 ${BO.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${BO.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"},Xk={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${vO.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 ${vO.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"},GO={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"},jk={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."},Zk={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`},eV={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"},tV={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},rV={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`},FO={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.`},kO={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}`},sV={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."},nV={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},iV={...GO,...zk,...Wk,...jk,...Zk,...eV,...tV,...rV,...Xk,...FO,...kO,...sV,...nV,...Qk};VO.exports={CHECK_LOGS_WRAPPER:xO,HDB_ERROR_MSGS:iV,DEFAULT_ERROR_MSGS:qO,DEFAULT_ERROR_RESP:Kk,HTTP_STATUS_CODES:HO,LMDB_ERRORS_ENUM:Jk,AUTHENTICATION_ERROR_MSGS:GO,VALIDATION_ERROR_MSGS:FO,ITC_ERRORS:kO}});var se=g((Gae,KO)=>{"use strict";var Go=yr(),oV=$(),aV=M(),Xl=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,$O),this.statusCode=s||Go.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Go.DEFAULT_ERROR_MSGS[s]?Go.DEFAULT_ERROR_MSGS[s]:Go.DEFAULT_ERROR_MSGS[Go.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&oV[n](i)}},Lh=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}},Mh=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function $O(e,t,r,s=aV.LOG_LEVELS.ERROR,n=null,i=!1){if(YO(e))return e;let o=new Xl(e,t,r,s,n);return i&&delete o.stack,o}a($O,"handleHDBError");function YO(e){return e.__proto__.constructor.name===Xl.name}a(YO,"isHDBError");KO.exports={isHDBError:YO,handleHDBError:$O,ClientError:Lh,ServerError:Mh,hdb_errors:Go}});var Je=g((kae,ZO)=>{"use strict";var hc=M(),cV=Q(),sr=ee(),mc=require("path"),uV=require("minimist"),WO=require("fs-extra"),QO=require("lodash");sr.initSync();var{CONFIG_PARAMS:Jn,DATABASES_PARAM_CONFIG:_c,SYSTEM_SCHEMA_NAME:jl}=hc,dc,fc,Ec;function zO(){if(dc!==void 0)return dc;if(sr.getHdbBasePath()!==void 0)return dc=sr.get(Jn.STORAGE_PATH)||mc.join(sr.getHdbBasePath(),hc.DATABASES_DIR_NAME),dc}a(zO,"getBaseSchemaPath");function JO(){if(fc!==void 0)return fc;if(sr.getHdbBasePath()!==void 0)return fc=jO(jl),fc}a(JO,"getSystemSchemaPath");function XO(){if(Ec!==void 0)return Ec;if(sr.getHdbBasePath()!==void 0)return Ec=sr.get(hc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||mc.join(sr.getHdbBasePath(),hc.TRANSACTIONS_DIR_NAME),Ec}a(XO,"getTransactionAuditStoreBasePath");function lV(e,t){let r=sr.get(Jn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||mc.join(XO(),e.toString())}a(lV,"getTransactionAuditStorePath");function jO(e,t){e=e.toString(),t=t&&t.toString();let r=sr.get(hc.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||mc.join(zO(),e)}a(jO,"getSchemaPath");function _V(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,uV(process.argv));let s=r[Jn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!cV.isObject(s))throw o;i=s}for(let o of i){let c=o[jl];if(!c)continue;let u=sr.get(Jn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[_c.PATH];if(_)return QO.set(u,[jl,_c.TABLES,t,_c.PATH],_),sr.setProperty(Jn.DATABASES,u),_;let l=c?.[_c.PATH];if(l)return QO.set(u,[jl,_c.PATH],l),sr.setProperty(Jn.DATABASES,u),l}}let n=r[Jn.STORAGE_PATH.toUpperCase()];if(n){if(!WO.pathExistsSync(n))throw new Error(n+" does not exist");let i=mc.join(n,e);return WO.mkdirsSync(i),sr.setProperty(Jn.STORAGE_PATH,n),i}return JO()}a(_V,"initSystemSchemaPaths");function dV(){dc=void 0,fc=void 0,Ec=void 0}a(dV,"resetPaths");ZO.exports={getBaseSchemaPath:zO,getSystemSchemaPath:JO,getTransactionAuditStorePath:lV,getTransactionAuditStoreBasePath:XO,getSchemaPath:jO,initSystemSchemaPaths:_V,resetPaths:dV}});var wr=g((Kae,nb)=>{"use strict";var fV=yr().LMDB_ERRORS_ENUM,$ae=require("lmdb"),EV=dt(),Yae=require("buffer").Buffer,{OVERFLOW_MARKER:eb,MAX_SEARCH_KEY_LENGTH:Zl}=EV,tb=["number","string","symbol","boolean","bigint"];function hV(e){if(e=e?.primaryStore||e,!e)throw new Error(fV.ENV_REQUIRED)}a(hV,"validateEnv");function mV(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(mV,"stringifyData");function pV(e){return e instanceof Date?e.valueOf():e}a(pV,"convertKeyValueToWrite");function SV(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(tb.includes(typeof e))return e.length>Zl?[e.slice(0,Zl)+eb]:[e];let r;if(Array.isArray(e)){r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s];if(tb.includes(typeof i))i.length>Zl?r.push(i.slice(0,Zl)+eb):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(SV,"getIndexedValues");var e_=0,rb=0;function sb(){rb=Date.now()-performance.now()}a(sb,"adjustStartTime");sb();var TV=6e4;setInterval(sb,TV).unref();function gV(){let e=performance.now()+rb;return e>e_?(e_=e,e):(e_+=488e-6,e_)}a(gV,"getNextMonotonicTime");nb.exports={validateEnv:hV,stringifyData:mV,convertKeyValueToWrite:pV,getNextMonotonicTime:gV,getIndexedValues:SV}});var ib,As,Uh,pc=Re(()=>{ib=require("events"),As=class extends ib.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new Uh;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)}},Uh=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 vi={};Ye(vi,{server:()=>tt});var ob,tt,nr=Re(()=>{ob=require("../index"),tt={};(0,ob._assignPackageExport)("server",tt)});var Bh={};Ye(Bh,{loadGQLSchema:()=>OV,start:()=>vh,startOnMainThread:()=>AV});function vh({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let H=function(P){if(P.kind==="NonNullType"){let J=H(P.type);return J.nullable=!1,J}if(P.kind==="ListType")return{type:"array",elements:H(P.type)};let B={type:P.name?.value};return Object.defineProperty(B,"location",{value:P.loc.startToken}),B};a(H,"getProperty");let T=S.name.value,b=[],R={table:null,database:null,properties:b};f.set(T,R);for(let P of S.directives){if(P.name.value==="table"){for(let k of P.arguments)R[k.name.value]=k.value.value;R.schema&&(R.database=R.schema),R.table||(R.table=T),R.audit&&(R.audit=R.audit!=="false"),R.attributes=R.properties,E.push(R)}if(P.name.value==="sealed"&&(R.sealed=!0),P.name.value==="export"){R.export=!0;for(let k of P.arguments)k.name.value==="name"&&(R.export={name:k.value.value})}}let L=!1;for(let P of S.fields){let k=H(P.type);k.name=P.name.value,b.push(k);for(let B of P.directives)if(B.name.value==="primaryKey")L?console.warn("Can not define two attributes as a primary key"):(k.isPrimaryKey=!0,L=!0);else if(B.name.value==="indexed")k.indexed=!0;else if(B.name.value==="relationship"){let J={};for(let z of B.arguments)J[z.name.value]=z.value.value;k.relationship=J}else if(B.name.value==="createdTime")k.assignCreatedTime=!0;else if(B.name.value==="updatedTime")k.assignUpdatedTime=!0;else if(B.name.value==="expiresAt")k.expiresAt=!0;else if(B.name.value==="allow"){let J=k.authorizedRoles=[];for(let z of B.arguments)z.name.value==="role"&&J.push(z.value.value)}}R.type=T,T==="Query"&&(h=R)}function p(S){let T=f.get(S.type);T?(Object.defineProperty(S,"properties",{value:T.properties}),Object.defineProperty(S,"definition",{value:T})):S.type==="array"?p(S.elements):RV.includes(S.type)||(0,ab.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}a(p,"connectPropertyType");for(let S of f.values())for(let T of S.properties)p(T);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Ph.dirname)(s),S.tableClass):i.set((0,Ph.dirname)(s)+"/"+(S.export.name||S.type),S.tableClass))}}var Ph,ab,RV,AV,OV,cb=Re(()=>{Ph=require("path");Ae();ab=x(Ke()),RV=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(vh,"start");AV=vh,OV=vh({ensureTable:ct}).handleFile});async function t_(e){return bV?(Sc||(Sc=NV(wV)),(await(await Sc).import(e)).namespace):import(e)}async function NV(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Sc=new Compartment({console,Math,Date,fetch:yV,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,lb.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:qt,tables:Ir,databases:rt})}};let s=await(0,ub.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),Sc}function yV(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 wV(){return{Resource:qt,tables:Ir}}var ub,lb,bV,Sc,Hh=Re(()=>{Os();Ae();ub=require("fs/promises"),lb=require("path"),bV=!1;a(t_,"secureImport");a(NV,"getCompartment");a(yV,"secureOnlyFetch");a(wV,"getGlobalVars")});var qh={};Ye(qh,{handleFile:()=>IV});async function IV(e,t,r,s){let n=new Map,i=(0,_b.pathToFileURL)(r).toString(),o=await t_(i);u(o.default)&&s.set((0,xh.dirname)(t),o.default),c(o,(0,xh.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),n}var _b,xh,db=Re(()=>{_b=require("url");Hh();xh=require("path");a(IV,"handleFile")});var Fh={};Ye(Fh,{start:()=>CV});function CV({resources:e}){e.set("login",Gh),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Gh,fb=Re(()=>{Os();a(CV,"start");Gh=class extends qt{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var gb={};Ye(gb,{parse:()=>Vh,streamAsJSON:()=>Tc,stringify:()=>Bi});function Tc(e){return new kh({value:e})}function Eb(e){return console.error(e),JSON.stringify(e.toString())}function hb(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Bi(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===Sb)return Tb(e);if(t.resolution)return t.resolution.then(()=>Bi(e));throw t}}function Tb(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 s=0;s<e.length;s++)s>0&&(r+=","),r+=Tb(e[s]);return r+"]"}else{r="{";let s=!0;for(let n in e)s?s=!1:r+=",",r+=JSON.stringify(n)+":"+Bi(e[n]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Vh(e){return MV.test(e)?DV.parse(e):JSON.parse(e)}var mb,pb,DV,LV,Sb,kh,MV,$h=Re(()=>{mb=require("stream"),pb=x(require("json-bigint-fixes")),DV=(0,pb.default)({useNativeBigInt:!0}),LV=1e4,Sb={};BigInt.prototype.toJSON=function(){throw Sb};a(Tc,"streamAsJSON");kh=class extends mb.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],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();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 n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),Eb)}catch(n){yield Eb(n)}else yield Bi(t)}else yield Bi(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);hb(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>LV?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 hb(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let s of this.activeIterators)t?s.throw(t):s.return();r()}};a(Eb,"handleError");a(hb,"when");a(Bi,"stringify");a(Tb,"jsStringify");MV=/-?\d{16,}/;a(Vh,"parse")});var Ub=g((cce,Mb)=>{"use strict";var Yh=require("recursive-iterator"),UV=require("alasql"),Kh=require("clone"),Rb=Q(),{handleHDBError:Ab,hdb_errors:PV}=se(),{HDB_ERROR_MSGS:Ob,HTTP_STATUS_CODES:bb}=PV,{getDatabases:vV}=(Ae(),ne(Ge)),BV=["DISTINCT_ARRAY"],Nb=Symbol("validateTables"),Wh=Symbol("validateTable"),ace=Symbol("getAllColumns"),yb=Symbol("validateAllColumns"),r_=Symbol("findColumn"),wb=Symbol("validateOrderBy"),gc=Symbol("validateSegment"),Qh=Symbol("validateColumn"),Ib=Symbol("setColumnsForTable"),Cb=Symbol("checkColumnsForAsterisk"),Db=Symbol("validateGroupBy"),Lb=Symbol("hasColumns"),zh=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Nb](),this[Cb](),this[yb]()}[Nb](){if(this[Lb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Wh](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Wh](t.table)})}}[Lb](){let t=!1,r=new Yh(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Wh](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=vV();if(!r[t.databaseid])throw Ab(new Error,Ob.SCHEMA_NOT_FOUND(t.databaseid),bb.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Ab(new Error,Ob.TABLE_NOT_FOUND(t.databaseid,t.tableid),bb.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=Kh(n);i.table=Kh(t),this.attributes.push(i)})}[r_](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)}[Cb](){let t=new Yh(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Ib](r.tableid)}[Ib](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new UV.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[yb](){this[gc](this.statement.columns,!1),this[gc](this.statement.joins,!1),this[gc](this.statement.where,!1),this[Db](this.statement.group,!1),this[gc](this.statement.order,!0)}[gc](t,r){if(!t)return;let s=new Yh(t),n=[];for(let{node:i,path:o}of s)!Rb.isEmpty(i)&&!Rb.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[wb](i):n.push(this[Qh](i)));return n}[Db](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&BV.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Kh(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[r_](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[r_](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[wb](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[Qh](t)}[Qh](t){let r=this[r_](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};Mb.exports=zh});var vb=g((lce,Pb)=>{"use strict";var Jh=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")}};Pb.exports=Jh});var Hb=g((dce,Bb)=>{"use strict";var Xh=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};Bb.exports=Xh});var Fb={};Ye(Fb,{HAS_EXPIRATION:()=>nm,LAST_TIMESTAMP_PLACEHOLDER:()=>Oc,LOCAL_TIMESTAMP:()=>HV,METADATA:()=>Rc,NO_TIMESTAMP:()=>Zh,PENDING_LOCAL_TIME:()=>im,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>sm,RecordEncoder:()=>rm,TIMESTAMP_ASSIGN_LAST:()=>qV,TIMESTAMP_ASSIGN_NEW:()=>qb,TIMESTAMP_ASSIGN_PREVIOUS:()=>Gb,TIMESTAMP_PLACEHOLDER:()=>s_,TIMESTAMP_RECORD_PREVIOUS:()=>em,getUpdateRecord:()=>om,handleLocalTimeForGets:()=>a_});function FV(){return Ac[0]=Ac[0]^64,xV.getFloat64(0)}function a_(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),u=c?.value,_=u?.[Rc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[Rc]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[Rc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})};let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Hi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Hi.length;u++){let _=Hi[u].deref();(!_||_.isDone||_.isCommitted)&&Hi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function om(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?Fo=i?.localTime?em|Gb:Zh:Fo=u?i?.localTime?em|16384:qb|16384:Zh,l>0&&(c|=nm),i_=c,tm=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Fo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(s,n,h);if(u){let T=_?.user?.username;if(E&&(n_=e.encoder.encode(E)),f&&i?.localTime){let b=i?.localTime,R=r.get(b);if(R){let L=Dt(R).previousLocalTime;return r.put(b,o_(o,t,s,L,T,d,n_),{ifVersion:p}),S}}r.put(Oc,o_(o,t,s,i?.localTime?1:0,T,d,n_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var xb,jh,s_,Oc,sm,HV,Rc,Ac,xV,Zh,qb,qV,Gb,em,nm,im,GV,n_,Fo,i_,tm,rm,Hi,bc=Re(()=>{xb=require("msgpackr");xi();jh=x($()),s_=new Uint8Array([1,1,1,1,4,64,0,0]),Oc=new Uint8Array([1,1,1,1,1,0,0,0]),sm=new Uint8Array([1,1,1,1,3,64,0,0]),HV=Symbol("local-timestamp"),Rc=Symbol("metadata"),Ac=new Uint8Array(8),xV=new DataView(Ac.buffer,0,8),Zh=0,qb=0,qV=1,Gb=3,em=4,nm=16,im=1,Fo=0,i_=-1,tm=0,rm=class extends xb.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,n){if(Fo||i_>=0){let i=0,o=Fo;o&&(i+=8,Fo=0);let c=i_,u=tm;c>=0&&(i+=2,i_=-1,u&&(i+=8,tm=0));let _=GV=r.call(this,s,n|2048|i);n_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(s_[4]=o,s_[5]=o>>8,_.set(s_,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(Ac,0,c),c+=8;else for(let d=0;d<8;d++)Ac[d]=t[c++];u=FV(),i=t[c]}let _;i<32&&(o=i,c+=2,o&nm&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[Rc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(FV,"getTimestamp");a(a_,"handleLocalTimeForGets");Hi=[];setInterval(()=>{for(let e=0;e<Hi.length;e++){let t=Hi[e].deref();!t||t.isDone||t.isCommitted?Hi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(jh.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):jh.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(om,"getUpdateRecord")});var c_=g((mce,kb)=>{"use strict";var cm=ee(),um=M(),{RecordEncoder:kV}=(bc(),ne(Fb));cm.initSync();var VV=cm.get(um.CONFIG_PARAMS.STORAGE_COMPRESSION),$V=cm.get(um.CONFIG_PARAMS.STORAGE_CACHING)!==!1,YV=um.UPDATES_PROPERTY,am=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=VV&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=$V&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:kV},this.alwaysLazyProperty=s=>s===YV)}};kb.exports=am});var l_=g((Sce,Kb)=>{"use strict";var Xn=ee(),qi=M();Xn.initSync();var KV=Xn.get(qi.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Xn.get(qi.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Xn.get(qi.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Vb=Xn.get(qi.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),WV=Xn.get(qi.CONFIG_PARAMS.STORAGE_NOREADAHEAD),$b=Xn.get(qi.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD),Yb=Xn.get(qi.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN),u_=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=KV,this.noFSAccess=!0,Vb!==void 0&&(this.overlappingSync=Vb),$b&&(this.maxFreeSpaceToLoad=$b),Yb&&(this.maxFreeSpaceToRetain=Yb),this.noReadAhead=WV}};Kb.exports=u_;u_.MAX_DBS=1e4});var We=g((gce,rN)=>{"use strict";var _m=require("lmdb"),bs=require("fs-extra"),Cr=require("path"),__=wr(),zb=$(),ir=yr().LMDB_ERRORS_ENUM,d_=Hb(),dm=c_(),Jb=l_(),jn=dt(),Wb=M(),{table:QV,resetDatabases:zV}=(Ae(),ne(Ge)),Qb=ee(),Ns=jn.INTERNAL_DBIS_NAME,Xb=jn.DBI_DEFINITION_NAME,JV="data.mdb",XV="lock.mdb",Nc=".mdb",jV="-lock",lm=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=rs(t,r),this.key_type=this.dbi[jn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[jn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new _m.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(ir.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ir.ENV_NAME_REQUIRED)}a(f_,"pathEnvNameValidation");async function fm(e,t,r=!0){try{await bs.access(e)}catch(s){throw s.code==="ENOENT"?new Error(ir.INVALID_BASE_PATH):s}try{let s=Cr.join(e,t+Nc);return await bs.access(s,bs.constants.R_OK|bs.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await bs.access(Cr.join(e,t,JV),bs.constants.R_OK|bs.constants.F_OK),Cr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(ir.INVALID_ENVIRONMENT)}else throw new Error(ir.INVALID_ENVIRONMENT);throw s}}a(fm,"validateEnvironmentPath");function E_(e,t){if(__.validateEnv(e),t===void 0)throw new Error(ir.DBI_NAME_REQUIRED)}a(E_,"validateEnvDBIName");async function ZV(e,t,r=!1,s=!1){f_(e,t);let n=Cr.basename(e);t=t.toString();let i=Qb.get(Wb.CONFIG_PARAMS.DATABASES);i||Qb.setProperty(Wb.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await fm(e,t,s),jb(e,t,r)}catch(o){if(o.message===ir.INVALID_ENVIRONMENT){let c=Cr.join(e,t);await bs.mkdirp(s?c:e);let u=new Jb(s?c:c+Nc,!1),_=_m.open(u);_.dbis=Object.create(null);let l=new dm(!1);_.openDB(Ns,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Em(e,t,r);return _[jn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(ZV,"createEnvironment");async function e$(e,t,r,s=!0){f_(e,t),t=t.toString();let n=Cr.join(e,t);return QV({table:t,database:Cr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(e$,"copyEnvironment");async function jb(e,t,r=!1){f_(e,t),t=t.toString();let s=Em(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await fm(e,t),i=Cr.join(e,t+Nc),o=n!=i,c=new Jb(n,o),u=_m.open(c);u.dbis=Object.create(null);let _=eN(u);for(let l=0;l<_.length;l++)rs(u,_[l]);return u[jn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(jb,"openEnvironment");async function t$(e,t,r=!1){f_(e,t),t=t.toString();let s=Cr.join(e,t+Nc),n=await fm(e,t);if(global.lmdb_map!==void 0){let i=Em(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Zb(o),delete global.lmdb_map[i]}}await bs.remove(n),await bs.remove(n===s?n+jV:Cr.join(Cr.dirname(n),XV))}a(t$,"deleteEnvironment");async function Zb(e){__.validateEnv(e);let t=e[jn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Zb,"closeEnvironment");function Em(e,t,r=!1){let n=`${Cr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Em,"getCachedEnvironmentName");function r$(e){__.validateEnv(e);let t=Object.create(null),r=rs(e,Ns);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ns)try{t[s]=Object.assign(new d_,n)}catch{zb.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(r$,"listDBIDefinitions");function eN(e){__.validateEnv(e);let t=[],r=rs(e,Ns);for(let{key:s}of r.getRange({start:!1}))s!==Ns&&t.push(s);return t}a(eN,"listDBIs");function s$(e,t){let s=rs(e,Ns).getEntry(t),n=new d_;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{zb.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(s$,"getDBIDefinition");function tN(e,t,r,s=!r){if(E_(e,t),t=t.toString(),t===Ns)throw new Error(ir.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return rs(e,t)}catch(n){if(n.message===ir.DBI_DOES_NOT_EXIST){let i=new dm(r,s===!0),o=e.openDB(t,i),c=new d_(r===!0,s);return o[Xb]=c,rs(e,Ns).putSync(t,c),e.dbis[t]=o,o}throw n}}a(tN,"createDBI");function rs(e,t){if(E_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ns?r=s$(e,t):r=new d_,r===void 0)throw new Error(ir.DBI_DOES_NOT_EXIST);let s;try{let n=new dm(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(ir.DBI_DOES_NOT_EXIST):n}return s[Xb]=r,e.dbis[t]=s,s}a(rs,"openDBI");function n$(e,t){E_(e,t),t=t.toString();let r=rs(e,t),s=r.getStats();return r[jn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(n$,"statDBI");async function i$(e,t){try{let r=Cr.join(e,t+Nc);return(await bs.stat(r)).size}catch{throw new Error(ir.INVALID_ENVIRONMENT)}}a(i$,"environmentDataSize");function o$(e,t){if(E_(e,t),t=t.toString(),t===Ns)throw new Error(ir.CANNOT_DROP_INTERNAL_DBIS_NAME);rs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],rs(e,Ns).removeSync(t)}a(o$,"dropDBI");function a$(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{rs(e,i)}catch(o){if(o.message===ir.DBI_DOES_NOT_EXIST)tN(e,i,i!==t,i===t),s=!0;else throw o}}s&&zV()}a(a$,"initializeDBIs");rN.exports={openDBI:rs,openEnvironment:jb,createEnvironment:ZV,listDBIs:eN,listDBIDefinitions:r$,createDBI:tN,dropDBI:o$,statDBI:n$,deleteEnvironment:t$,initializeDBIs:a$,TransactionCursor:lm,environmentDataSize:i$,copyEnvironment:e$,closeEnvironment:Zb}});var nN=g((Ace,sN)=>{"use strict";var hm=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};sN.exports=hm});var oN=g((bce,iN)=>{"use strict";var mm=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};iN.exports=mm});var cN=g((yce,aN)=>{"use strict";var pm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};aN.exports=pm});var ko=g((Lce,_N)=>{"use strict";var c$=We(),u$=nN(),l$=oN(),_$=cN(),Ks=wr(),yc=yr().LMDB_ERRORS_ENUM,d$=dt(),pn=M(),f$=Q(),E$=require("uuid"),Ice=require("lmdb"),{handleHDBError:h$,hdb_errors:m$}=se(),{OVERFLOW_MARKER:Cce,MAX_SEARCH_KEY_LENGTH:Dce}=d$,uN=ee();uN.initSync();var h_=uN.get(pn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Sm=pn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Gi=pn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function p$(e,t,r,s,n=Ks.getNextMonotonicTime()){Am(e,t,r,s),Tm(e,t,r);let i=new u$,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];lN(_,!0,n);let l=S$(e,t,r,_),d=_[t];o.push(l),c.push(d)}return gm(o,c,s,i,n)}a(p$,"insertRecords");function S$(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][pn.FUNC_VAL],s[o]=c)}let u=Ks.getIndexedValues(c),_=e.dbis[o];if(u){h_&&_.prefetch(u.map(l=>({key:l,value:n})),m_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}h_&&e.dbis[t].prefetch([n],m_),e.dbis[t].put(n,s,s[Gi])})}a(S$,"insertRecord");function T$(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(T$,"removeSkippedRecords");function lN(e,t,r){let s=r>0;(s||!Number.isInteger(e[Gi]))&&(e[Gi]=r||(r=Ks.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Sm]))&&(e[Sm]=r||Ks.getNextMonotonicTime()):delete e[Sm]}a(lN,"setTimestamps");function Tm(e,t,r){r.indexOf(pn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(pn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(pn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(pn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),c$.initializeDBIs(e,t,r)}a(Tm,"initializeTransaction");async function g$(e,t,r,s,n=Ks.getNextMonotonicTime()){Am(e,t,r,s),Tm(e,t,r);let i=new l$,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Rm(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return gm(c,u,s,i,n,o)}a(g$,"updateRecords");async function R$(e,t,r,s,n=Ks.getNextMonotonicTime()){try{Am(e,t,r,s)}catch(u){throw h$(u,u.message,m$.HTTP_STATUS_CODES.BAD_REQUEST)}Tm(e,t,r);let i=new _$,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;f$.isEmpty(_[t])?(l=E$.v4(),_[t]=l):l=_[t];let d=Rm(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return gm(o,c,s,i,n)}a(R$,"upsertRecords");async function gm(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Ks.getNextMonotonicTime(),T$(r,i),s}a(gm,"finalizeWrite");function Rm(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(lN(r,!l,o),Number.isInteger(r[Gi])&&_[Gi]>r[Gi])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let T=_[h];if(typeof p=="function"){let R=p([[_]]);Array.isArray(R)&&(p=R[0][pn.FUNC_VAL],r[h]=p)}if(p===T)continue;let b=Ks.getIndexedValues(T);if(b){h_&&S.prefetch(b.map(R=>({key:R,value:s})),m_);for(let R=0,L=b.length;R<L;R++)S.remove(b[R],s)}if(b=Ks.getIndexedValues(p),b){h_&&S.prefetch(b.map(R=>({key:R,value:s})),m_);for(let R=0,L=b.length;R<L;R++)S.put(b[R],s)}}let E=Object.assign({},_,r);c.put(s,E,E[Gi])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:Rm(e,t,r,s,n,i,o))}a(Rm,"updateUpsertRecord");function A$(e,t,r){if(Ks.validateEnv(e),t===void 0)throw new Error(yc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(yc.WRITE_ATTRIBUTES_REQUIRED):new Error(yc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(A$,"validateBasic");function Am(e,t,r,s){if(A$(e,t,r),!Array.isArray(s))throw s===void 0?new Error(yc.RECORDS_REQUIRED):new Error(yc.RECORDS_MUST_BE_ARRAY)}a(Am,"validateWrite");function m_(){}a(m_,"noop");_N.exports={insertRecords:p$,updateRecords:g$,upsertRecords:R$}});var Fi=g((Uce,O$)=>{O$.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 Qs=g((Pce,EN)=>{"use strict";var fN=Q(),dN=M(),Vo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ws=require("joi"),Zn={schema_format:{pattern:Vo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},b$=Ws.alternatives(Ws.string().min(1).max(Zn.schema_length.maximum).pattern(Vo).messages({"string.pattern.base":"{:#label} "+Zn.schema_format.message}),Ws.number(),Ws.array()).required(),N$=Ws.alternatives(Ws.string().min(1).max(Zn.schema_length.maximum).pattern(Vo).messages({"string.pattern.base":"{:#label} "+Zn.schema_format.message}),Ws.number()),y$=Ws.alternatives(Ws.string().min(1).max(Zn.schema_length.maximum).pattern(Vo).messages({"string.pattern.base":"{:#label} "+Zn.schema_format.message}),Ws.number()).required();function w$(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Zn.schema_length.maximum?`'${e}' maximum of 250 characters`:Vo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(w$,"checkValidTable");function I$(e,t){return fN.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(I$,"validateSchemaExists");function C$(e,t){let r=t.state.ancestors[0].schema;return fN.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(C$,"validateTableExists");function D$(e,t){return e.toLowerCase()===dN.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${dN.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(D$,"validateSchemaName");EN.exports={common_validators:Zn,schema_regex:Vo,hdb_schema_table:b$,validateSchemaExists:I$,validateTableExists:C$,validateSchemaName:D$,checkValidTable:w$,hdb_database:N$,hdb_table:y$}});var Xe=g((Bce,hN)=>{"use strict";var or=require("validate.js");or.validators.type=function(e,t,r,s){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};hN.exports={validateObject:L$,validateObjectAsync:M$,validateBySchema:U$};function L$(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(L$,"validateObject");async function M$(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await or.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(M$,"validateObjectAsync");function U$(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(U$,"validateBySchema")});var p_=g((xce,mN)=>{var{common_validators:zs}=Qs(),Ic=Xe(),wc="is required",ft={database:{presence:!1,format:zs.schema_format,length:zs.schema_length},schema:{presence:!1,format:zs.schema_format,length:zs.schema_length},table:{presence:!0,format:zs.schema_format,length:zs.schema_length},attribute:{presence:!0,format:zs.schema_format,length:zs.schema_length},hash_attribute:{presence:!0,format:zs.schema_format,length:zs.schema_length}};function Cc(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(Cc,"makeAttributesStrings");function P$(e){return e=Cc(e),ft.table.presence=!1,ft.attribute.presence=!1,ft.hash_attribute.presence=!1,Ic.validateObject(e,ft)}a(P$,"schema_object");function v$(e){return e=Cc(e),ft.table.presence={message:wc},ft.attribute.presence=!1,ft.hash_attribute.presence=!1,Ic.validateObject(e,ft)}a(v$,"table_object");function B$(e){return e=Cc(e),ft.table.presence={message:wc},ft.attribute.presence=!1,Ic.validateObject(e,ft)}a(B$,"create_table_object");function H$(e){return e=Cc(e),ft.table.presence={message:wc},ft.attribute.presence={message:wc},ft.hash_attribute.presence=!1,Ic.validateObject(e,ft)}a(H$,"attribute_object");function x$(e){return e=Cc(e),ft.table.presence={message:wc},ft.attribute.presence=!1,ft.hash_attribute.presence=!1,Ic.validateObject(e,ft)}a(x$,"describe_table");function q$(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(q$,"validateTableResidence");mN.exports={schema_object:P$,create_table_object:B$,table_object:v$,attribute_object:H$,describe_table:x$,validateTableResidence:q$}});var SN=g((Gce,pN)=>{"use strict";var G$=require("uuid"),Om=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||G$.v4(),this.schema_table=`${this.schema}.${this.table}`}};pN.exports=Om});var S_=g((kce,TN)=>{"use strict";var F$=SN(),bm=class extends F${static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};TN.exports=bm});var RN=g(($ce,gN)=>{"use strict";gN.exports=V$;var k$="inserted";function V$(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===k$?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(V$,"returnObject")});var T_=g((Kce,yN)=>{"use strict";var $$=M(),Nm=We(),Y$=ko(),{getSystemSchemaPath:K$,getSchemaPath:W$}=Je(),Q$=Fi(),z$=p_(),J$=S_(),X$=RN(),{handleHDBError:AN,hdb_errors:bN}=se(),ON=Q(),{HTTP_STATUS_CODES:j$}=bN,ym=Q$.hdb_attribute,NN=[];for(let e=0;e<ym.attributes.length;e++)NN.push(ym.attributes[e].attribute);var Z$="inserted";yN.exports=e1;async function e1(e){let t=z$.attribute_object(e);if(t)throw AN(new Error,t.message,bN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&ON.checkGlobalSchemaTable(e.schema,e.table);if(r)throw AN(new Error,r,j$.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=ON.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new J$(e.schema,e.table,e.attribute,e.id);try{let i=await Nm.openEnvironment(W$(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}`);Nm.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Nm.openEnvironment(K$(),$$.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Y$.insertRecords(o,ym.hash_attribute,NN,[n]);return X$(Z$,c,{records:[n]},u)}catch(i){throw i}}a(e1,"lmdbCreateAttribute")});var Im=g((Qce,IN)=>{var{hdb_table:t1,hdb_database:wN}=Qs(),r1=Xe(),wm=require("joi"),s1={undefined:"undefined",null:"null"},n1=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||s1[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),i1=wm.object({database:wN,schema:wN,table:t1,records:wm.array().items(wm.object().custom(n1)).required()});IN.exports=function(e){return r1.validateBySchema(e,i1)}});var Dc=g((Xce,DN)=>{"use strict";var Sn=Q(),CN=$(),Jce=Im(),{getDatabases:o1}=(Ae(),ne(Ge)),{ClientError:ki}=se();DN.exports=a1;function a1(e){if(Sn.isEmpty(e))throw new ki("invalid update parameters defined.");if(Sn.isEmptyOrZeroLength(e.schema))throw new ki("invalid schema specified.");if(Sn.isEmptyOrZeroLength(e.table))throw new ki("invalid table specified.");if(!Array.isArray(e.records))throw new ki("records must be an array");let t=o1()[e.schema]?.[e.table];if(Sn.isEmpty(t))throw new ki(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&Sn.isEmptyOrZeroLength(o[r]))throw CN.error("a valid hash attribute must be provided with update record:",o),new ki("a valid hash attribute must be provided with update record, check log for more info");if(!Sn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw CN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new ki(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Sn.isEmpty(o[r])&&o[r]!==""&&s.has(Sn.autoCast(o[r]))&&(o.skip=!0),s.add(Sn.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(a1,"insertUpdateValidate")});var Lc=g((Zce,LN)=>{"use strict";var c1=M().OPERATIONS_ENUM,Cm=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=c1.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};LN.exports=Cm});var Mc=g((rue,UN)=>{"use strict";var tue=Lc(),g_=M(),Dm=Q(),MN=$(),u1=require("uuid"),{handleHDBError:R_,hdb_errors:l1}=se(),{HDB_ERROR_MSGS:A_,HTTP_STATUS_CODES:O_}=l1;UN.exports=_1;function _1(e,t,r){for(let n=0;n<t.length;n++)d1(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];f1(i,r,e.operation)}}a(_1,"processRows");function d1(e){if(Buffer.byteLength(String(e))>g_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw R_(new Error,A_.ATTR_NAME_LENGTH_ERR(e),O_.BAD_REQUEST,void 0,void 0,!0);if(Dm.isEmptyOrZeroLength(e)||Dm.isEmpty(e.trim()))throw R_(new Error,A_.ATTR_NAME_NULLISH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}a(d1,"validateAttribute");function f1(e,t,r){if(!e.hasOwnProperty(t)||Dm.isEmptyOrZeroLength(e[t])){if(r===g_.OPERATIONS_ENUM.INSERT||r===g_.OPERATIONS_ENUM.UPSERT){e[t]=u1.v4();return}throw MN.error("Update transaction aborted due to record with no hash value:",e),R_(new Error,A_.RECORD_MISSING_HASH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>g_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw MN.error(e),R_(new Error,A_.HASH_VAL_LENGTH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}a(f1,"validateHash")});var vN=g((nue,PN)=>{"use strict";var Lm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};PN.exports=Lm});var xN=g((oue,HN)=>{"use strict";var Mm=We(),E1=$(),BN=yr().LMDB_ERRORS_ENUM;HN.exports=h1;async function h1(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 Mm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==BN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Mm.closeEnvironment(global.lmdb_map[s]),await Mm.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==BN.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){E1.error(t)}}a(h1,"cleanLMDBMap")});var Tn=g((cue,kN)=>{"use strict";var Uc=require("crypto"),m1=ee(),{CONFIG_PARAMS:p1}=M(),GN="aes-256-cbc",S1=32,T1=16,Um=64,FN=32,g1=Um+FN,qN=new Map;kN.exports={encrypt:R1,decrypt:A1,createNatsTableStreamName:O1};function R1(e){let t=Uc.randomBytes(S1),r=Uc.randomBytes(T1),s=Uc.createCipheriv(GN,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(R1,"encrypt");function A1(e){let t=e.substr(0,Um),r=e.substr(Um,FN),s=e.substr(g1,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Uc.createDecipheriv(GN,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(A1,"decrypt");function O1(e,t){let r=m1.get(p1.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=qN.get(r);return s||(s=Uc.createHash("md5").update(r).digest("hex"),qN.set(r,s)),s}a(O1,"createNatsTableStreamName")});var ei=g((_ue,$N)=>{"use strict";var lue=Dr(),b_=$(),VN=p_(),b1=Tn(),N_=Q(),{handleHDBError:y_,hdb_errors:N1}=se(),{HDB_ERROR_MSGS:w_,HTTP_STATUS_CODES:Pm}=N1,y1=ee();y1.initSync();var{getDatabases:vm}=(Ae(),ne(Ge));$N.exports={describeAll:w1,describeTable:I_,describeSchema:I1};async function w1(e){try{let t=N_.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=vm(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)E=await I_({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await I_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){b_.error(E)}}let _={};for(let l in c)t||s?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return b_.error("Got an error in describeAll"),b_.error(t),y_(new Error,w_.DESCRIBE_ALL_ERR)}}a(w1,"describeAll");async function I_(e,t){N_.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=VN.describe_table(e);if(i)throw i;let c=vm()[r];if(!c)throw y_(new Error,w_.SCHEMA_NOT_FOUND(e.schema),Pm.NOT_FOUND);let u=c[s];if(!u)throw y_(new Error,w_.TABLE_NOT_FOUND(e.schema,e.table),Pm.NOT_FOUND);function _(f){l.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 l=[];if(n){let f={};n.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=b1.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){b_.warn(`unable to stat table dbi due to ${f}`)}return d}a(I_,"descTable");async function I1(e){N_.transformReq(e);let t=VN.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),i=vm()[s];if(!i)throw y_(new Error,w_.SCHEMA_NOT_FOUND(e.schema),Pm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),N_.isEmpty(u)||u.describe){let _=await I_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(I1,"describeSchema")});var gn=g((hue,zN)=>{var C1=Fi(),{callbackify:KN,promisify:D1}=require("util"),{getDatabases:WN}=(Ae(),ne(Ge));zN.exports={setSchemaDataToGlobal:YN,getTableSchema:L1,getSystemSchema:M1,setSchemaDataToGlobalAsync:D1(YN)};var QN=ei(),fue=KN(QN.describeAll),Eue=KN(QN.describeTable);function YN(e){global.hdb_schema=WN(),e&&e()}a(YN,"setSchemaDataToGlobal");function L1(e,t,r){let s=WN()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(L1,"getTableSchema");function M1(){return C1}a(M1,"getSystemSchema")});var Lr=g((pue,ZN)=>{"use strict";var D_=Im(),Gt=Q(),U1=require("util"),L_=ys(),P1=gn(),JN=$(),{handleHDBError:Vi,hdb_errors:v1}=se(),{HTTP_STATUS_CODES:$i}=v1,B1=U1.promisify(P1.getTableSchema),H1="updated",XN="inserted",jN="upserted";ZN.exports={insert:q1,update:G1,upsert:F1,validation:x1,flush:k1};async function x1(e){if(Gt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Gt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Gt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await B1(e.schema,e.table),r=D_(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Gt.isEmptyOrZeroLength(c[s]))throw JN.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(!Gt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw JN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Gt.isEmpty(c[s])&&c[s]!==""&&n.has(Gt.autoCast(c[s]))&&(c.skip=!0),n.add(Gt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(x1,"validation");async function q1(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=D_(e);if(t)throw Vi(new Error,t.message,$i.BAD_REQUEST);Gt.transformReq(e);let r=Gt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vi(new Error,r,$i.BAD_REQUEST);let s=await L_.createRecords(e);return C_(XN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(q1,"insertData");async function G1(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=D_(e);if(t)throw Vi(new Error,t.message,$i.BAD_REQUEST);Gt.transformReq(e);let r=Gt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vi(new Error,r,$i.BAD_REQUEST);let s=await L_.updateRecords(e);return Gt.isEmpty(s.existing_rows)?C_(H1,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):C_(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(G1,"updateData");async function F1(e){if(e.operation!=="upsert")throw Vi(new Error,"invalid operation, must be upsert",$i.INTERNAL_SERVER_ERROR);let t=D_(e);if(t)throw Vi(new Error,t.message,$i.BAD_REQUEST);Gt.transformReq(e);let r=Gt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vi(new Error,r,$i.BAD_REQUEST);let s=await L_.upsertRecords(e);return C_(jN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(F1,"upsertData");function C_(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===XN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===jN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(C_,"returnObject");function k1(e){return Gt.transformReq(e),L_.flush(e.schema,e.table)}a(k1,"flush")});var Hm=g((Tue,ry)=>{var V1=Xe(),Bm=require("joi"),{hdb_table:$1,hdb_database:ey}=Qs(),ty={schema:ey,database:ey,table:$1},Y1={date:Bm.date().iso().required()},K1={timestamp:Bm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};ry.exports=function(e,t){let r=t==="timestamp"?{...ty,...K1}:{...ty,...Y1},s=Bm.object(r);return V1.validateBySchema(e,s)}});var iy=g((gue,ny)=>{var W1=Xe(),xm=require("joi"),{hdb_table:Q1,hdb_database:sy}=Qs(),z1=xm.object({schema:sy,database:sy,table:Q1,hash_values:xm.array().required(),ids:xm.array()});ny.exports=function(e){return W1.validateBySchema(e,z1)}});var ay=g((Rue,oy)=>{"use strict";var qm=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},Gm=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},Fm=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};oy.exports={InsertObject:qm,NoSQLSeachObject:Gm,DeleteResponseObject:Fm}});var si=g((Oue,dy)=>{"use strict";var uy=Hm(),J1=iy(),Yi=Q(),cy=require("moment"),ly=$(),{promisify:X1,callbackify:j1}=require("util"),Ki=M(),Z1=gn(),km=X1(Z1.getTableSchema),Vm=ys(),{DeleteResponseObject:eY}=ay(),{handleHDBError:ti,hdb_errors:tY}=se(),{HDB_ERROR_MSGS:M_,HTTP_STATUS_CODES:ri}=tY,rY="records successfully deleted",sY=j1(_y);dy.exports={delete:sY,deleteRecord:_y,deleteFilesBefore:nY,deleteAuditLogsBefore:iY};async function nY(e){let t=uy(e,"date");if(t)throw ti(t,t.message,ri.BAD_REQUEST,void 0,void 0,!0);if(Yi.transformReq(e),!cy(e.date,cy.ISO_8601).isValid())throw ti(new Error,M_.INVALID_DATE,ri.BAD_REQUEST,Ki.LOG_LEVELS.ERROR,M_.INVALID_DATE,!0);let s=Yi.checkSchemaTableExist(e.schema,e.table);if(s)throw ti(new Error,s,ri.NOT_FOUND,Ki.LOG_LEVELS.ERROR,s,!0);let n=await Vm.deleteRecordsBefore(e);if(await km(e.schema,e.table),ly.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(nY,"deleteFilesBefore");async function iY(e){let t=uy(e,"timestamp");if(t)throw ti(t,t.message,ri.BAD_REQUEST,void 0,void 0,!0);if(Yi.transformReq(e),isNaN(e.timestamp))throw ti(new Error,M_.INVALID_VALUE("Timestamp"),ri.BAD_REQUEST,Ki.LOG_LEVELS.ERROR,M_.INVALID_VALUE("Timestamp"),!0);let r=Yi.checkSchemaTableExist(e.schema,e.table);if(r)throw ti(new Error,r,ri.NOT_FOUND,Ki.LOG_LEVELS.ERROR,r,!0);let s=await Vm.deleteAuditLogsBefore(e);return await km(e.schema,e.table),ly.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(iY,"deleteAuditLogsBefore");async function _y(e){e.ids&&(e.hash_values=e.ids);let t=J1(e);if(t)throw ti(t,t.message,ri.BAD_REQUEST,void 0,void 0,!0);Yi.transformReq(e);let r=Yi.checkSchemaTableExist(e.schema,e.table);if(r)throw ti(new Error,r,ri.NOT_FOUND,Ki.LOG_LEVELS.ERROR,r,!0);try{await km(e.schema,e.table);let s=await Vm.deleteRecords(e);return Yi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${rY}`),s}catch(s){if(s.message===Ki.SEARCH_NOT_FOUND_MESSAGE){let n=new eY;return n.message=Ki.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(_y,"deleteRecord")});var U_=g((Nue,hy)=>{var oY=require("crypto"),fy=9;function aY(e){let t=uY(fy),r=Ey(e+t);return t+r}a(aY,"createHash");function cY(e,t){let r=e?.substr(0,fy),s=r+Ey(t+r);return e===s}a(cY,"validateHash");function uY(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(uY,"generateSalt");function Ey(e){return oY.createHash("md5").update(e).digest("hex")}a(Ey,"md5");hy.exports={hash:aY,validate:cY}});var py=g((wue,my)=>{var $m=Xe(),Kt={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 lY(e){return Kt.password.presence=!0,Kt.username.presence=!0,Kt.role.presence=!0,Kt.active.presence=!0,$m.validateObject(e,Kt)}a(lY,"addUserValidation");function _Y(e){return Kt.password.presence=!1,Kt.username.presence=!0,Kt.role.presence=!1,Kt.active.presence=!1,$m.validateObject(e,Kt)}a(_Y,"alterUserValidation");function dY(e){return Kt.password.presence=!1,Kt.username.presence=!0,Kt.role.presence=!1,Kt.active.presence=!1,$m.validateObject(e,Kt)}a(dY,"dropUserValidation");my.exports={addUserValidation:lY,alterUserValidation:_Y,dropUserValidation:dY}});var Fe=g((Due,Ty)=>{"use strict";var{platform:Cue}=require("os"),fY="nats-server.zip",Ym="nats-server",EY=process.platform==="win32"?`${Ym}.exe`:Ym,hY=/^[^\s.,*>]+$/,Sy="__request__",mY=a(e=>`${e}.${Sy}`,"REQUEST_SUBJECT"),pY={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},SY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},TY={HUB:"hub.pid",LEAF:"leaf.pid"},gY={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},RY={SUCCESS:"success",ERROR:"error"},AY={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},OY={TXN:"txn",MSGID:"msgid"},$o={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},bY={[$o.ERR]:1,[$o.WRN]:2,[$o.INF]:3,[$o.DBG]:4,[$o.TRC]:5},NY={debug:"-D",trace:"-DVV"};Ty.exports={NATS_SERVER_ZIP:fY,NATS_SERVER_NAME:Ym,NATS_BINARY_NAME:EY,PID_FILES:TY,NATS_CONFIG_FILES:SY,SERVER_SUFFIX:gY,NATS_TERM_CONSTRAINTS_RX:hY,REQUEST_SUFFIX:Sy,UPDATE_REMOTE_RESPONSE_STATUSES:RY,CLUSTER_STATUS_STATUSES:AY,REQUEST_SUBJECT:mY,SUBJECT_PREFIXES:OY,MSG_HEADERS:pY,LOG_LEVELS:$o,LOG_LEVEL_FLAGS:NY,LOG_LEVEL_HIERARCHY:bY}});var Ry=g((Mue,gy)=>{"use strict";var yY={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
5
5
  `),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
6
- `)},yY="certificate.pem",wY="privateKey.pem",IY="ca.pem";Sy.exports={CERTIFICATE_VALUES:NY,CERTIFICATE_PEM_NAME:yY,PRIVATEKEY_PEM_NAME:wY,CA_PEM_NAME:IY}});var Wm=g((Uue,by)=>{"use strict";var Oy=require("fs-extra"),ie=require("joi"),CY=require("os"),{boolean:Ne,string:ar,number:At,array:Km}=ie.types(),{totalmem:gy}=require("os"),Yi=require("path"),DY=$(),P_=Q(),Mue=Ty(),Ry=M(),LY=je(),Ay="log",MY="components",UY="Invalid logging.rotation.maxSize unit. Available units are G, M or K",PY="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",vY="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",BY="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",HY="rootPath config parameter is undefined",xY="clustering.enabled config parameter is undefined",Ki=At.min(0).required(),v_=Km.items({host:ar.required(),port:Ki}).empty(null),Js;by.exports={configValidator:qY,routesValidator:YY,route_constraints:v_};function qY(e){if(Js=e.rootPath,P_.isEmpty(Js))throw HY;let t=Ne.required(),r=At.min(0).max(1e3).empty(null).default($Y),s=ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Pc),n=ar.optional().empty(null),i=ar.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ie.string().empty(null).default(Pc),c=ie.custom(FY).empty(null).default(Pc),u=e.clustering?.enabled;if(P_.isEmpty(u))throw xY;let _;return u===!0?_=ie.object({enabled:t,hubServer:ie.object({cluster:ie.object({name:ie.required().empty(null),network:ie.object({port:Ki,routes:v_}).required()}).required(),leafNodes:ie.object({network:ie.object({port:Ki}).required()}).required(),network:ie.object({port:Ki}).required()}).required(),leafServer:ie.object({network:ie.object({port:Ki,routes:v_}).required(),streams:ie.object({maxAge:At.min(120).allow(null).optional(),maxBytes:At.min(1).allow(null).optional(),maxMsgs:At.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ie.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Ne.optional(),databaseLevel:Ne.optional(),tls:ie.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ne.required(),verify:Ne.optional()}),user:ar.optional().empty(null)}).required():_=ie.object({enabled:t,tls:ie.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ne.required()})}).required(),ie.object({authentication:ie.object({authorizeLocal:Ne,cacheTTL:At.required(),enableSessions:Ne}),analytics:ie.object({aggregatePeriod:At}),componentsRoot:s.optional(),clustering:_,localStudio:ie.object({enabled:t}).required(),logging:ie.object({auditAuthEvents:ie.object({logFailed:Ne,logSuccessful:Ne}),file:Ne.required(),level:ie.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ie.object({enabled:Ne.optional(),compress:Ne.optional(),interval:ar.custom(VY).optional().empty(null),maxSize:ar.custom(kY).optional().empty(null),path:ar.optional().empty(null).default(Pc)}).required(),root:s,stdStreams:Ne.required(),auditLog:Ne.required()}).required(),operationsApi:ie.object({network:ie.object({cors:Ne.optional(),corsAccessList:Km.optional(),headersTimeout:At.min(1).optional(),keepAliveTimeout:At.min(1).optional(),port:At.optional().empty(null),domainSocket:ie.optional().empty("hdb/operations-server").default(Pc),securePort:At.optional().empty(null),timeout:At.min(1).optional()}).optional(),tls:ie.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ie.object({network:ie.object({port:Ki,securePort:Ki,mtls:ie.alternatives([Ne.optional(),ie.object({user:ar.optional(),certificateAuthority:n,required:Ne.optional()})])}).required(),webSocket:Ne.optional(),requireAuthentication:Ne.optional()}),http:ie.object({compressionThreshold:At.optional(),cors:Ne.optional(),corsAccessList:Km.optional(),headersTimeout:At.min(1).optional(),port:At.min(0).optional().empty(null),securePort:At.min(0).optional().empty(null),mtls:ie.alternatives([Ne.optional(),ie.object({user:ar.optional(),certificateAuthority:n,required:Ne.optional()})])}).required(),threads:ie.alternatives(r.optional(),ie.object({count:r.optional(),debug:ie.alternatives(Ne.optional(),ie.object({startingPort:At.min(1).optional(),host:ar.optional(),waitForDebugger:Ne.optional()})),maxHeapMemory:At.min(0).optional()})),storage:ie.object({writeAsync:Ne.required(),overlappingSync:Ne.optional(),caching:Ne.optional(),compression:Ne.optional(),noReadAhead:Ne.optional(),path:c,prefetchWrites:Ne.optional()}).required(),ignoreScripts:Ne.optional(),tls:ie.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional(),ciphers:ar.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(qY,"configValidator");function GY(e){return Oy.existsSync(e)?null:`Specified path ${e} does not exist.`}a(GY,"doesPathExist");function FY(e,t){ie.assert(e,ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=GY(e);if(r)return t.message(r)}a(FY,"validatePath");function kY(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(UY);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(vY):e}a(kY,"validateRotationMaxSize");function VY(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(PY);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(BY):e}a(VY,"validateRotationInterval");function $Y(e,t){let r=t.state.path.join("."),s=CY.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||gy();return i=Math.round(Math.min(i,gy())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),DY.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a($Y,"setDefaultThreads");function Pc(e,t){let r=t.state.path.join(".");if(!P_.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(P_.isEmpty(Js))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Yi.join(Js,MY);case"logging.root":return Yi.join(Js,Ay);case"clustering.leafServer.streams.path":return Yi.join(Js,"clustering","leaf");case"storage.path":let s=Yi.join(Js,Ry.LEGACY_DATABASES_DIR_NAME);return Oy.existsSync(s)?s:Yi.join(Js,Ry.DATABASES_DIR_NAME);case"logging.rotation.path":return Yi.join(Js,Ay);case"operationsApi.network.domainSocket":return r==null?null:Yi.join(Js,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Pc,"setDefaultRoot");function YY(e){let t=ie.object({routes:v_});return LY.validateBySchema({routes:e},t)}a(YY,"routesValidator")});var Pr=g((Bue,Uy)=>{"use strict";var Ur=M(),Lt=Q(),Ot=$(),{configValidator:KY,routesValidator:Ny}=Wm(),cr=require("fs-extra"),WY=require("yaml"),ws=require("path"),QY=require("is-number"),wy=require("properties-reader"),zY=require("lodash"),{handleHDBError:JY}=se(),{HTTP_STATUS_CODES:jY,HDB_ERROR_MSGS:B_}=yr(),vue=require("minimist"),{server:XY}=(nr(),ne(Pi)),{DATABASES_PARAM_CONFIG:vc,CONFIG_PARAMS:Mr,CONFIG_PARAM_MAP:Is}=Ur,ZY="Unable to get config value because config is uninitialized",eK="Config successfully initialized",tK="Error backing up config file",rK="Empty parameter sent to getConfigValue",Iy=ws.join(Ur.PACKAGE_ROOT,"config","yaml",Ur.HDB_DEFAULT_CONFIG_FILE),sK="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",yy={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"},H_,bt,x_;Uy.exports={createConfigFile:nK,getDefaultConfig:iK,getConfigValue:Dy,initConfig:zm,flattenConfig:$o,updateConfigValue:Ly,updateConfigObject:aK,getConfiguration:lK,setConfiguration:_K,readConfigFile:jm,getClusteringRoutes:dK,initOldConfig:My,getConfigFromFile:fK,getConfigFilePath:Wi,addConfig:EK,deleteConfigFromFile:hK,getConfigObj:mK};function nK(e){let t=si(Iy);H_=$o(t.toJSON());let r;for(let o in e){let c=Is[o.toLowerCase()];if(c===Mr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=Qm(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){Ot.error(l)}}}r&&Cy(t,r),Jm(t);let s=t.toJSON();bt=$o(s);let n=t.getIn(["rootPath"]),i=ws.join(n,Ur.HDB_CONFIG_FILE);cr.createFileSync(i),cr.writeFileSync(i,String(t)),Ot.trace(`Config file written to ${i}`)}a(nK,"createConfigFile");function Cy(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!Lt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(vc.TABLES))for(let i in s[n][vc.TABLES])for(let o in s[n][vc.TABLES][i]){let c=s[n][vc.TABLES][i][o],u=[Mr.DATABASES,n,vc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[Mr.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){Ot.error("Error parsing schemas CLI/env config arguments",s)}}a(Cy,"setSchemasConfig");function iK(e){if(H_===void 0){let r=si(Iy);H_=$o(r.toJSON())}let t=Is[e.toLowerCase()];if(t!==void 0)return H_[t.toLowerCase()]}a(iK,"getDefaultConfig");function Dy(e){if(e==null){Ot.error(rK);return}if(bt===void 0){Ot.trace(ZY);return}let t=Is[e.toLowerCase()];if(t!==void 0)return bt[t.toLowerCase()]}a(Dy,"getConfigValue");function Wi(e=Lt.getPropsFilePath()){let t=Lt.getEnvCliRootPath();return t?ws.join(t,Ur.HDB_CONFIG_FILE):wy(e).get(Ur.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Wi,"getConfigFilePath");function zm(e=!1){if(bt===void 0||e){let t;if(!Lt.noBootFile()){t=Lt.getPropsFilePath();try{cr.accessSync(t,cr.constants.F_OK|cr.constants.R_OK)}catch(i){throw Ot.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Wi(t),s;if(r.includes("config/settings.js"))try{My(r);return}catch(i){if(i.code!==Ur.NODE_ERROR_CODES.ENOENT)throw i}try{s=si(r)}catch(i){if(i.code===Ur.NODE_ERROR_CODES.ENOENT){Ot.trace(`HarperDB config file not found at ${r}.
7
- This can occur during early stages of install where the config file has not yet been created`);return}else throw Ot.error(i),new Error(`Error reading HarperDB config file at ${r}`)}oK(s,r),Jm(s);let n=s.toJSON();if(XY.config=n,bt=$o(n),bt.logging_rotation_rotate)for(let i in yy)bt[i]&&Ot.error(`Config ${yy[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Ot.trace(eK)}}a(zm,"initConfig");function oK(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ws.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ws.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ws.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(Ot.trace("Updating config file with missing config params"),cr.writeFileSync(t,String(e)))}a(oK,"checkForUpdatedConfig");function Jm(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t?.http?.threads&&(t.threads=t?.http?.threads);let r=KY(t);if(r.error)throw B_.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(Jm,"validateConfig");function aK(e,t){bt===void 0&&(bt={});let r=Is[e.toLowerCase()];if(r===void 0){Ot.trace(`Unable to update config object because config param '${e}' does not exist`);return}bt[r.toLowerCase()]=t}a(aK,"updateConfigObject");function Ly(e,t,r=void 0,s=!1,n=!1,i=!1){bt===void 0&&zm();let o=Dy(Is.hdb_root),c=ws.join(o,Ur.HDB_CONFIG_FILE),u=si(c),_;if(r===void 0&&e.toLowerCase()===Mr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=Is[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Qm(f,t);u.setIn([...E],h)}else for(let f in r){let E=Is[f.toLowerCase()];if(E===Mr.HTTP_SECUREPORT&&r[f]===bt[Mr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Mr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===bt[Mr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Mr.DATABASES){_=r[f];continue}if(E?.startsWith("threads_")){let h=u.getIn(["threads"]);h>=0&&(u.deleteIn(["threads"]),u.setIn(["threads","count"],h))}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Ur.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=Qm(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(T){Ot.error(T)}}}_&&Cy(u,_),Jm(u);let l=u.getIn(["rootPath"]),d=ws.join(l,Ur.HDB_CONFIG_FILE);s===!0&&cK(c,l),cr.writeFileSync(d,String(u)),n&&(bt=$o(u.toJSON())),Ot.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Ly,"updateConfigValue");function cK(e,t){try{let r=ws.join(t,"backup",`${Ur.HDB_CONFIG_FILE}.bak`);cr.copySync(e,r),Ot.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Ot.error(tK),Ot.error(r)}}a(cK,"backupConfigFile");var uK=["databases"];function $o(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)),x_=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i)){if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!uK.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Mr[u.toUpperCase()]&&Is[u]&&(n[Is[u].toLowerCase()]=o[c]),n[u]=o[c]}}s[i]!==void 0&&(n[i.toLowerCase()]=s[i])}return n}a(r,"squashObj")}a($o,"flattenConfig");function Qm(e,t){if(e===Mr.CLUSTERING_NODENAME||e===Mr.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(QY(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Lt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Lt.autoCast(t)}a(Qm,"castConfigValue");function lK(){let e=Lt.getPropsFilePath(),t=Wi(e);return si(t).toJSON()}a(lK,"getConfiguration");async function _K(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Ly(void 0,void 0,n,!0),sK}catch(i){throw typeof i=="string"||i instanceof String?JY(i,i,jY.BAD_REQUEST,void 0,void 0,!0):i}}a(_K,"setConfiguration");function jm(){let e=Lt.getPropsFilePath();try{cr.accessSync(e,cr.constants.F_OK|cr.constants.R_OK)}catch(s){if(!Lt.noBootFile())throw Ot.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Wi(e);return si(t).toJSON()}a(jm,"readConfigFile");function si(e){return WY.parseDocument(cr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(si,"parseYamlDoc");function dK(){let e=jm(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Lt.isEmptyOrZeroLength(t)?[]:t;let r=Ny(t);if(r)throw B_.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=Lt.isEmptyOrZeroLength(s)?[]:s;let n=Ny(s);if(n)throw B_.CONFIG_VALIDATION(n.message);if(!Lt.isEmptyOrZeroLength(s)&&!Lt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!Lt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw B_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(dK,"getClusteringRoutes");function My(e){let t=wy(e);bt={};for(let r in Is){let s=t.get(r.toUpperCase());if(Lt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Is[r].toLowerCase();n===Mr.LOGGING_ROOT?bt[n]=ws.dirname(s):bt[n]=s}return bt}a(My,"initOldConfig");function fK(e){let t=jm();return zY.get(t,e.replaceAll("_","."))}a(fK,"getConfigFromFile");async function EK(e,t){let r=si(Wi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await cr.writeFile(Wi(),String(r))}a(EK,"addConfig");function hK(e){let t=Wi(Lt.getPropsFilePath()),r=si(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=ws.join(s,Ur.HDB_CONFIG_FILE);cr.writeFileSync(n,String(r))}a(hK,"deleteConfigFromFile");function mK(){return x_||(zm(),x_)}a(mK,"getConfigObj")});var vy=g((xue,Py)=>{"use strict";var q_=M(),G_=class{static{a(this,"BaseLicense")}constructor(t=0,r=q_.RAM_ALLOCATION_ENUM.DEFAULT,s=q_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Xm=class extends G_{static{a(this,"ExtendedLicense")}constructor(t=0,r=q_.RAM_ALLOCATION_ENUM.DEFAULT,s=q_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};Py.exports={BaseLicense:G_,ExtendedLicense:Xm}});var Qi=g((Gue,Fy)=>{"use strict";var Ko=require("fs-extra"),Hy=U_(),xy=require("crypto"),pK=require("moment"),SK=require("uuid").v4,Wt=$(),ep=require("path"),TK=Q(),ni=M(),{totalmem:By}=require("os"),gK=vy().ExtendedLicense,Yo="invalid license key format",RK="061183",AK="mofi25",OK="aes-256-cbc",bK=16,NK=32,qy=ee();qy.initSync();var Zm;Fy.exports={validateLicense:Gy,generateFingerPrint:wK,licenseSearch:sp,getLicense:DK,checkMemoryLimit:LK};function tp(){return ep.join(qy.getHdbBasePath(),ni.LICENSE_KEY_DIR_NAME,ni.LICENSE_FILE_NAME)}a(tp,"getLicenseDirPath");function yK(){let e=tp();return ep.join(e,ni.LICENSE_FILE_NAME)}a(yK,"getLicenseFilePath");function rp(){let e=tp();return ep.join(e,ni.REG_KEY_FILE_NAME)}a(rp,"getFingerPrintFilePath");async function wK(){let e=rp();try{return await Ko.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await IK();throw Wt.error(`Error writing fingerprint file to ${e}`),Wt.error(t),new Error("There was an error generating the fingerprint")}}a(wK,"generateFingerPrint");async function IK(){let e=SK(),t=Hy.hash(e),r=rp();try{await Ko.mkdirp(tp()),await Ko.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Wt.error(`Error writing fingerprint file to ${r}`),Wt.error(s),new Error("There was an error generating the fingerprint")}return t}a(IK,"writeFingerprint");function Gy(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ni.RAM_ALLOCATION_ENUM.DEFAULT,version:ni.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Wt.error("empty license key passed to validate."),r;let s=rp(),n=!1;try{n=Ko.statSync(s)}catch(i){Wt.error(i)}if(n){let i;try{i=Ko.readFileSync(s,"utf8")}catch{Wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(AK),c=o[1];c=Buffer.concat([Buffer.from(c)],bK);let u=Buffer.concat([Buffer.from(i)],NK),_=xy.createDecipheriv(OK,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=CK(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Yo),Wt.error(Yo),new Error(Yo)}let d;if(isNaN(l))try{d=JSON.parse(l),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(Yo),Wt.error(Yo),new Error(Yo)}else r.exp_date=l;r.exp_date<pK().valueOf()&&(r.valid_date=!1),Hy.validate(o[1],`${RK}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Wt.error("Invalid licence"),r}a(Gy,"validateLicense");function CK(e,t){try{let r=xy.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Wt.warn("Check old license failed")}}a(CK,"checkOldLicense");function sp(){let e=new gK,t=[];try{t=Ko.readFileSync(yK(),"utf-8").split(ni.NEW_LINE)}catch(r){r.code==="ENOENT"?Wt.info("no license file found"):Wt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(TK.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=Gy(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){Wt.error("There was an error parsing the license string."),Wt.error(n),e.ram_allocation=ni.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Zm=e,e}a(sp,"licenseSearch");async function DK(){return Zm||await sp(),Zm}a(DK,"getLicense");function LK(){let e=sp().ram_allocation,t=process.constrainedMemory?.()||By();if(t=Math.round(Math.min(t,By())/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(LK,"checkMemoryLimit")});var ss=g((Yue,sw)=>{"use strict";var Yy="username is required",Ky="nothing to update, must supply active, role or password to update",Wy="password cannot be an empty string",Qy="If role is specified, it cannot be empty.",zy="active must be true or false";sw.exports={addUser:GK,alterUser:FK,dropUser:VK,getSuperUser:WK,userInfo:$K,listUsers:k_,listUsersExternal:YK,setUsersToGlobal:Qo,findAndValidateUser:tw,getClusterUser:QK,USERNAME_REQUIRED:Yy,ALTERUSER_NOTHING_TO_UPDATE:Ky,EMPTY_PASSWORD:Wy,EMPTY_ROLE:Qy,ACTIVE_BOOLEAN:zy};var Jy=Lr(),MK=ri(),op=U_(),jy=hy(),Xy=Dr(),ap=Rn(),vr=Q(),Zy=require("validate.js"),Se=$(),{promisify:UK}=require("util"),cp=Tn(),ky=M(),Vy=Fe(),PK=Pr(),kue=ee(),Vue=Qi(),vK=qi(),{table:$ue}=(Ae(),ne(Ge)),{handleHDBError:js,hdb_errors:BK}=se(),{HTTP_STATUS_CODES:Xs,AUTHENTICATION_ERROR_MSGS:np,HDB_ERROR_MSGS:Wo}=BK,{UserEventMsg:up}=Cs(),ip=require("lodash"),{server:lp}=(nr(),ne(Pi)),HK=$();lp.getUser=(e,t)=>tw(e,t,t!=null);var ew={username:!0,active:!0,role:!0,password:!0},$y=new Map,F_=Xy.searchByValue,xK=Xy.searchByHash,qK=UK(MK.delete);async function GK(e){let t=Zy.cleanAttributes(e,ew),r=jy.addUserValidation(t);if(r)throw js(new Error,r.message,Xs.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await F_(s),n=n&&Array.from(n)}catch(u){throw Se.error("There was an error searching for a role in add user"),Se.error(u),u}if(!n||n.length<1)throw js(new Error,Wo.ROLE_NAME_NOT_FOUND(t.role),Xs.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw js(new Error,Wo.DUP_ROLES_FOUND(t.role),Xs.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=cp.encrypt(t.password)),t.password=op.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Jy.insert(i)}catch(u){throw Se.error("There was an error searching for a user."),Se.error(u),u}Se.debug(o);try{await Qo()}catch(u){throw Se.error("Got an error setting users to global"),Se.error(u),u}if(o.skipped_hashes.length===1)throw js(new Error,Wo.USER_ALREADY_EXISTS(t.username),Xs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],ap.signalUserChange(new up(process.pid)),`${c.username} successfully added`}a(GK,"addUser");async function FK(e){let t=Zy.cleanAttributes(e,ew);if(vr.isEmptyOrZeroLength(t.username))throw new Error(Yy);if(vr.isEmptyOrZeroLength(t.password)&&vr.isEmptyOrZeroLength(t.role)&&vr.isEmptyOrZeroLength(t.active))throw new Error(Ky);if(!vr.isEmpty(t.password)&&vr.isEmptyOrZeroLength(t.password.trim()))throw new Error(Wy);if(!vr.isEmpty(t.active)&&!vr.isBoolean(t.active))throw new Error(zy);let r=kK(t.username);if(!vr.isEmpty(t.password)&&!vr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=cp.encrypt(t.password)),t.password=op.hash(t.password)),t.role==="")throw new Error(Qy);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 F_(i)||[])}catch(c){throw Se.error("Got an error searching for a role."),Se.error(c),c}if(!o||o.length===0){let c=Wo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Se.error(c),js(new Error,c,Xs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Wo.ALTER_USER_DUP_ROLES(t.role);throw Se.error(c),js(new Error,c,Xs.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await Jy.update(s)}catch(i){throw Se.error("Error during update."),Se.error(i),i}try{await Qo()}catch(i){throw Se.error("Got an error setting users to global"),Se.error(i),i}return ap.signalUserChange(new up(process.pid)),n}a(FK,"alterUser");function kK(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(kK,"isClusterUser");async function VK(e){try{let t=jy.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(vr.isEmpty(global.hdb_users.get(e.username)))throw js(new Error,Wo.USER_NOT_EXIST(e.username),Xs.NOT_FOUND,void 0,void 0,!0);let s;try{s=await qK(r)}catch(n){throw Se.error("Got an error deleting a user."),Se.error(n),n}Se.debug(s);try{await Qo()}catch(n){throw Se.error("Got an error setting users to global."),Se.error(n),n}return ap.signalUserChange(new up(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(VK,"dropUser");async function $K(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=ip.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await xK(r)}catch(n){throw Se.error("Got an error searching for a role."),Se.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Se.error(r),r}return t}a($K,"userInfo");async function YK(){let e;try{e=await k_()}catch(t){throw Se.error("Got an error listing users."),Se.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(YK,"listUsersExternal");async function k_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await F_(e)}catch(o){throw Se.error("Got an error searching for roles."),Se.error(o),o}let r={};for(let o of t)r[o.id]=ip.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await F_(s)}catch(o){throw Se.error("Got an error searching for users."),Se.error(o),o}let i=new Map;for(let o of n)o=ip.cloneDeep(o),o.role=r[o.role],KK(o.role),i.set(o.username,o);return i}catch(e){throw Se.error("got an error listing users"),Se.error(e),vr.errorizeMessage(e)}return null}a(k_,"listUsers");function KK(e){try{if(!e){Se.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(vK)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Se.error("Got an error trying to set system permissions."),Se.error(t)}}a(KK,"appendSystemTablesToRole");async function Qo(){try{let e=await k_();global.hdb_users=e}catch(e){throw Se.error(e),e}}a(Qo,"setUsersToGlobal");async function tw(e,t,r=!0){global.hdb_users||await Qo();let s=global.hdb_users.get(e);if(!s){if(!r)return{username:e};throw js(new Error,np.GENERIC_AUTH_FAIL,Xs.UNAUTHORIZED,void 0,void 0,!0)}if(s&&!s.active)throw js(new Error,np.USER_INACTIVE,Xs.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if($y.get(t)===s.password)return n;if(op.validate(s.password,t))$y.set(t,s.password);else throw js(new Error,np.GENERIC_AUTH_FAIL,Xs.UNAUTHORIZED,void 0,void 0,!0)}return n}a(tw,"findAndValidateUser");async function WK(){global.hdb_users||await Qo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(WK,"getSuperUser");async function QK(){let e=await k_(),t=PK.getConfigFromFile(ky.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!vr.isEmpty(r)&&r?.role?.role===ky.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=cp.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Vy.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Vy.SERVER_SUFFIX.ADMIN,r}a(QK,"getClusterUser");var rw=[];lp.invalidateUser=function(e){for(let t of rw)try{t(e)}catch(r){HK.error("Error invalidating user",r)}};lp.onInvalidatedUser=function(e){rw.push(e)}});var Hc=g((zue,aw)=>{"use strict";var zi=$(),Br=M(),zK=BN(),Wue=gn(),Que=Zn(),JK=ss(),{validateEvent:nw}=Cs(),Bc=ys(),jK=require("process"),{resetDatabases:XK}=(Ae(),ne(Ge)),ZK={[Br.ITC_EVENT_TYPES.SCHEMA]:eW,[Br.ITC_EVENT_TYPES.USER]:ow};async function eW(e){let t=nw(e);if(t){zi.error(t);return}zi.trace("ITC schemaHandler received schema event:",e),await zK(e.message),await tW(e.message)}a(eW,"schemaHandler");async function tW(e){try{Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=XK();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){zi.error(t)}}a(tW,"syncSchemaMetadata");var iw=[];async function ow(e){try{try{Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){zi.warn(r)}let t=nw(e);if(t){zi.error(t);return}zi.trace(`ITC userHandler ${Br.HDB_ITC_CLIENT_PREFIX}${jK.pid} received user event:`,e),await JK.setUsersToGlobal();for(let r of iw)r()}catch(t){zi.error(t)}}a(ow,"userHandler");ow.addListener=function(e){iw.push(e)};aw.exports=ZK});var Cs=g((tle,uw)=>{"use strict";var jue=$(),_p=Q(),rW=M(),{ITC_ERRORS:xc}=yr(),{parentPort:Xue,threadId:sW,isMainThread:nW,workerData:Zue}=require("worker_threads"),{onMessageFromWorkers:iW,broadcast:ele,broadcastWithAcknowledgement:oW}=Ke();uw.exports={sendItcEvent:aW,validateEvent:cw,SchemaEventMsg:cW,UserEventMsg:uW};var V_;iW(async(e,t)=>{V_=V_||Hc(),cw(e),V_[e.type]&&await V_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function aW(e){return!nW&&e.message&&(e.message.originator=sW),oW(e)}a(aW,"sendItcEvent");function cw(e){if(typeof e!="object")return xc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||_p.isEmpty(e.type))return xc.MISSING_TYPE;if(!e.hasOwnProperty("message")||_p.isEmpty(e.message))return xc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||_p.isEmpty(e.message.originator))return xc.MISSING_ORIGIN;if(rW.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return xc.INVALID_EVENT(e.type)}a(cw,"validateEvent");function cW(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(cW,"SchemaEventMsg");function uW(e){this.originator=e}a(uW,"UserEventMsg")});var Rn=g((nle,fw)=>{"use strict";var lw=M(),sle=Q(),$_=$(),_w=UN(),zo,{sendItcEvent:dw}=Cs();function lW(e){try{$_.trace("signalSchemaChange called with message:",e),zo=zo||Hc();let t=new _w(lw.ITC_EVENT_TYPES.SCHEMA,e);return zo.schema(t),dw(t)}catch(t){$_.error(t)}}a(lW,"signalSchemaChange");function _W(e){try{$_.trace("signalUserChange called with message:",e),zo=zo||Hc();let t=new _w(lw.ITC_EVENT_TYPES.USER,e);return zo.user(t),dw(t)}catch(t){$_.error(t)}}a(_W,"signalUserChange");fw.exports={signalSchemaChange:lW,signalUserChange:_W}});var Y_=g((ole,hw)=>{"use strict";var Ew=Q(),dW=M(),fW=$(),EW=T_(),hW=S_(),mW=Rn(),{SchemaEventMsg:pW}=Cs(),SW="already exists in";hw.exports=TW;async function TW(e,t,r){if(Ew.isEmptyOrZeroLength(r))return r;let s=[];Ew.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await gW(e,t.schema,t.name,i)})),n}a(TW,"lmdbCheckForNewAttributes");async function gW(e,t,r,s){let n=new hW(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await RW(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(SW))fW.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(gW,"createNewAttribute");async function RW(e){let t;return t=await EW(e),mW.signalSchemaChange(new pW(process.pid,dW.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(RW,"createAttribute")});var Jo=g((cle,mw)=>{"use strict";var dp=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};mw.exports=dp});var Sw=g((lle,pw)=>{"use strict";var AW=Jo(),OW=M().OPERATIONS_ENUM,fp=class extends AW{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(OW.INSERT,r,s,n,i),this.records=t}};pw.exports=fp});var gw=g((dle,Tw)=>{"use strict";var bW=Jo(),NW=M().OPERATIONS_ENUM,Ep=class extends bW{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(NW.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};Tw.exports=Ep});var Aw=g((Ele,Rw)=>{"use strict";var yW=Jo(),wW=M().OPERATIONS_ENUM,hp=class extends yW{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(wW.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};Rw.exports=hp});var bw=g((mle,Ow)=>{"use strict";var IW=Jo(),CW=M().OPERATIONS_ENUM,mp=class extends IW{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(CW.DELETE,s,n,t,i),this.original_records=r}};Ow.exports=mp});var qc=g((Tle,Iw)=>{"use strict";var Sle=require("path"),Nw=We(),DW=Sw(),LW=gw(),MW=Aw(),UW=bw(),jo=dt(),yw=Q(),{CONFIG_PARAMS:PW}=M(),ww=ee();ww.initSync();var K_=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:vW}=Je();Iw.exports=BW;async function BW(e,t){if(ww.get(PW.LOGGING_AUDITLOG)===!1)return;let r=vW(e.schema,e.table),s=await Nw.openEnvironment(r,e.table,!0),n=HW(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Nw.initializeDBIs(s,jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,jo.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),yw.isEmpty(n.user_name)||s.dbis[jo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[jo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(BW,"writeTransaction");function HW(e,t){let r=yw.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===K_.INSERT)return new DW(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===K_.UPDATE)return new LW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===K_.UPSERT)return new MW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===K_.DELETE)return new UW(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(HW,"createTransactionObject")});var pp=g((Ale,Cw)=>{"use strict";var xW=Dc(),Rle=Lc(),Gc=M(),qW=Mc(),GW=Fo().insertRecords,FW=We(),kW=$(),VW=Y_(),{getSchemaPath:$W}=Je(),YW=qc();Cw.exports=KW;async function KW(e){try{let{schema_table:t,attributes:r}=xW(e);qW(e,r,t.hash_attribute),e.schema!==Gc.SYSTEM_SCHEMA_NAME&&(r.includes(Gc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Gc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Gc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Gc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await VW(e.hdb_auth_header,t,r),n=$W(e.schema,e.table),i=await FW.openEnvironment(n,e.table),o=await GW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await YW(e,o)}catch(c){kW.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(KW,"lmdbCreateRecords")});var Mw=g((ble,Lw)=>{"use strict";var Dw=M(),WW=pp(),QW=Lc(),zW=require("fs-extra"),{getSchemaPath:JW}=Je();Lw.exports=jW;async function jW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new QW(Dw.SYSTEM_SCHEMA_NAME,Dw.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await WW(r),await zW.mkdirp(JW(e.schema))}a(jW,"lmdbCreateSchema")});var Pw=g((yle,Uw)=>{"use strict";var Sp=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};Uw.exports=Sp});var xw=g((Lle,Hw)=>{"use strict";var vw=We(),Tp=wr(),gp=yr().LMDB_ERRORS_ENUM,XW=dt(),Bw=$(),Ile=Q(),ZW=require("lmdb"),eQ=Pw(),tQ=M(),{OVERFLOW_MARKER:Cle,MAX_SEARCH_KEY_LENGTH:Dle}=XW,rQ=tQ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function sQ(e,t,r,s){if(Tp.validateEnv(e),t===void 0)throw new Error(gp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(gp.IDS_REQUIRED):new Error(gp.IDS_MUST_BE_ITERABLE);try{let n=vw.listDBIs(e);vw.initializeDBIs(e,t,n);let i=new eQ,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||s&&h[rQ]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,ZW.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let T=n[S];if(!h.hasOwnProperty(T)||T===t)continue;let b=e.dbis[T],R=h[T];if(R!=null)try{let L=Tp.getIndexedValues(R);if(L)for(let H=0,P=L.length;H<P;H++)b.remove(L[H],o)}catch{Bw.warn(`cannot delete from attribute: ${T}, ${R}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){Bw.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[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=Tp.getNextMonotonicTime(),i}catch(n){throw n}}a(sQ,"deleteRecords");Hw.exports={deleteRecords:sQ}});var Fc=g((Ule,Gw)=>{"use strict";var Xo=Q(),nQ=xw(),iQ=We(),{getSchemaPath:oQ}=Je(),aQ=qc(),cQ=$();Gw.exports=uQ;async function uQ(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Xo.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Xo.isEmptyOrZeroLength(e.hash_values)&&!Xo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Xo.isEmpty(u)||e.hash_values.push(u)}}if(Xo.isEmptyOrZeroLength(e.hash_values))return qw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Xo.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=oQ(e.schema,e.table),i=await iQ.openEnvironment(n,e.table),o=await nQ.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await aQ(e,o)}catch(c){cQ.error(`unable to write transaction due to ${c.message}`)}return qw(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(uQ,"lmdbDeleteRecords");function qw(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(qw,"createDeleteResponse")});var Ap=g((Ble,Fw)=>{"use strict";var lQ=M(),vle=wr();function Rp(e,t){let r=Object.create(null);if(t.length===1&&lQ.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Rp,"parseRow");function _Q(e,t,r,s){let n=Rp(r,e);s.push(n)}a(_Q,"searchAll");function dQ(e,t,r,s){let n=Rp(r,e);s[t]=n}a(dQ,"searchAllToMap");function fQ(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(fQ,"iterateDBI");function Ji(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(Ji,"pushResults");function EQ(e,t,r,s,n,i){t.toString().endsWith(e)&&Ji(t,r,s,n,i)}a(EQ,"endsWith");function hQ(e,t,r,s,n,i){t.toString().includes(e)&&Ji(t,r,s,n,i)}a(hQ,"contains");function mQ(e,t,r,s,n,i){t>e&&Ji(t,r,s,n,i)}a(mQ,"greaterThanCompare");function pQ(e,t,r,s,n,i){t>=e&&Ji(t,r,s,n,i)}a(pQ,"greaterThanEqualCompare");function SQ(e,t,r,s,n,i){t<e&&Ji(t,r,s,n,i)}a(SQ,"lessThanCompare");function TQ(e,t,r,s,n,i){t<=e&&Ji(t,r,s,n,i)}a(TQ,"lessThanEqualCompare");Fw.exports={parseRow:Rp,searchAll:_Q,searchAllToMap:dQ,iterateDBI:fQ,endsWith:EQ,contains:hQ,greaterThanCompare:mQ,greaterThanEqualCompare:pQ,lessThanCompare:SQ,lessThanEqualCompare:TQ,pushResults:Ji}});var Zo=g((Fle,Qw)=>{"use strict";var ii=We(),xle=$(),Hr=wr(),W_=dt(),ut=yr().LMDB_ERRORS_ENUM,qle=Q(),gQ=M(),Q_=Ap(),{parseRow:RQ}=Q_,Gle=require("lmdb"),{OVERFLOW_MARKER:kw,MAX_SEARCH_KEY_LENGTH:AQ}=W_;function Vw(e,t,r,s=!1,n=void 0,i=void 0){return ji(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(Vw,"iterateFullIndex");function kc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return ji(e,t,r,(l,d,f,E)=>{let b={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(b.values=!1,d.getRange(b).map(R=>({value:R}))):d.getRange(b)})}a(kc,"iterateRangeBetween");function ji(e,t,r,s){let n=e.database||e,i=ii.openDBI(n,r);i[W_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ii.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(ji,"setupTransaction");function $w(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(kw)){if(!n)if(r)n=ii.openDBI(e,r);else{let u=ii.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=ii.openDBI(e,u[_]),!n[W_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a($w,"getOverflowCheck");function OQ(e,t,r,s=!1,n=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);return ji(e,t,t,(o,c,u)=>(z_(r),r=Vc(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>RQ(_.value,r))))}a(OQ,"searchAll");function bQ(e,t,r,s=!1,n=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);z_(r),r=Vc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of Vw(e,t,t,s,n,i))o.set(c,Q_.parseRow(u,r));return o}a(bQ,"searchAllToMap");function NQ(e,t,r=!1,s=void 0,n=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=Vw(e,void 0,t,r,s,n),c=o.transaction,u=$w(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(NQ,"iterateDBI");function yQ(e,t){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);return ii.statDBI(e,t).entryCount}a(yQ,"countAll");function wQ(e,t,r,s,n=!1,i=void 0,o=void 0){return oi(e,r,s),ji(e,t,r,(c,u,_,l)=>(s=Hr.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(wQ,"equals");function IQ(e,t,r){return oi(e,t,r),ii.openDBI(e,t).getValuesCount(r)}a(IQ,"count");function CQ(e,t,r,s,n=!1,i=void 0,o=void 0){return oi(e,r,s),ji(e,null,r,(c,u)=>{s=Hr.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(CQ,"startsWith");function DQ(e,t,r,s,n=!1,i=void 0,o=void 0){return Yw(e,t,r,s,n,i,o,!0)}a(DQ,"endsWith");function Yw(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return oi(e,r,s),ji(e,null,r,(u,_,l,d)=>{let f=$w(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith(kw)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(s):S.includes(s))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?_[W_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(Yw,"contains");function LQ(e,t,r,s,n=!1,i=void 0,o=void 0){oi(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),kc(e,t,r,s,u,n,i,o,!0,!1)}a(LQ,"greaterThan");function MQ(e,t,r,s,n=!1,i=void 0,o=void 0){oi(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),kc(e,t,r,s,u,n,i,o,!1,!1)}a(MQ,"greaterThanEqual");function UQ(e,t,r,s,n=!1,i=void 0,o=void 0){oi(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),kc(e,t,r,u,s,n,i,o,!1,!0)}a(UQ,"lessThan");function PQ(e,t,r,s,n=!1,i=void 0,o=void 0){oi(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),kc(e,t,r,u,s,n,i,o,!1,!1)}a(PQ,"lessThanEqual");function vQ(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Hr.validateEnv(e),r===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ut.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ut.END_VALUE_REQUIRED);if(s=Hr.convertKeyValueToWrite(s),n=Hr.convertKeyValueToWrite(n),s>n)throw new Error(ut.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return kc(e,t,r,s,n,i,o,c)}a(vQ,"between");function BQ(e,t,r,s){Hr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(z_(r),r=Vc(n,r),s===void 0)throw new Error(ut.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Q_.parseRow(c,r)),o}a(BQ,"searchByHash");function HQ(e,t,r){Hr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ut.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(HQ,"checkHashExists");function xQ(e,t,r,s,n=[]){return Ww(e,t,r,s,n),Kw(e,t,r,s,n).map(i=>i[1])}a(xQ,"batchSearchByHash");function qQ(e,t,r,s,n=[]){Ww(e,t,r,s,n);let i=new Map;for(let[o,c]of Kw(e,t,r,s,n))i.set(o,c);return i}a(qQ,"batchSearchByHashToMap");function Kw(e,t,r,s,n=[]){return ji(e,t,t,(i,o,c)=>{r=Vc(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,Q_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(Kw,"batchHashSearch");function Ww(e,t,r,s,n){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(z_(r),s==null)throw new Error(ut.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ut.IDS_MUST_BE_ITERABLE)}a(Ww,"initializeBatchSearchByHash");function z_(e){if(!Array.isArray(e))throw e===void 0?new Error(ut.FETCH_ATTRIBUTES_REQUIRED):new Error(ut.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(z_,"validateFetchAttributes");function oi(e,t,r){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ut.SEARCH_VALUE_REQUIRED);if(r?.length>AQ)throw new Error(ut.SEARCH_VALUE_TOO_LARGE)}a(oi,"validateComparisonFunctions");function Vc(e,t){return t.length===1&&gQ.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ii.listDBIs(e)),t}a(Vc,"setGetWholeRowAttributes");Qw.exports={searchAll:OQ,searchAllToMap:bQ,count:IQ,countAll:yQ,equals:wQ,startsWith:CQ,endsWith:DQ,contains:Yw,searchByHash:BQ,setGetWholeRowAttributes:Vc,batchSearchByHash:xQ,batchSearchByHashToMap:qQ,checkHashExists:HQ,iterateDBI:NQ,greaterThan:LQ,greaterThanEqual:MQ,lessThan:UQ,lessThanEqual:PQ,between:vQ}});var ea=g((Vle,Zw)=>{var zw=require("lodash"),Jw=je(),fe=require("joi"),GQ=Q(),{hdb_schema_table:$c,checkValidTable:jw,hdb_table:Xw,hdb_database:J_}=Qs(),{handleHDBError:FQ,hdb_errors:kQ}=se(),{getDatabases:VQ}=(Ae(),ne(Ge)),{HTTP_STATUS_CODES:$Q}=kQ,YQ=fe.object({database:J_,schema:J_,table:Xw,search_attribute:$c,search_value:fe.any().required(),get_attributes:fe.array().min(1).items(fe.alternatives($c,fe.object())).optional(),desc:fe.bool(),limit:fe.number().integer().min(1),offset:fe.number().integer().min(0)}),KQ=fe.object({database:J_,schema:J_,table:Xw,operator:fe.string().valid("and","or").default("and").lowercase(),offset:fe.number().integer().min(0),limit:fe.number().integer().min(1),get_attributes:fe.array().min(1).items(fe.alternatives($c,fe.object())).optional(),sort:fe.object({attribute:fe.alternatives($c,fe.array().min(1)),descending:fe.bool().optional()}).optional(),conditions:fe.array().min(1).items(fe.alternatives(fe.object({operator:fe.string().valid("and","or").default("and").lowercase(),conditions:fe.array()}),fe.object({search_attribute:fe.alternatives($c,fe.array().min(1)),search_type:fe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:fe.when("search_type",{switch:[{is:"equals",then:fe.any()},{is:"between",then:fe.array().items(fe.alternatives([fe.string(),fe.number()])).length(2)}],otherwise:fe.alternatives(fe.string(),fe.number())}).required()}))).required()});Zw.exports=function(e,t){let r=null;switch(t){case"value":r=Jw.validateBySchema(e,YQ);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(jw("database",e.schema)),i(jw("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=Jw.validateBySchema(e,KQ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=GQ.checkGlobalSchemaTable(e.schema,e.table);if(n)return FQ(new Error,n,$Q.NOT_FOUND);let o=VQ()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,f=l.conditions.length;d<f;d++){let E=l.conditions[d];E.conditions?u(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=zw.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!l.name&&!zw.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var Op=g((Yle,eI)=>{"use strict";var WQ=We(),QQ=ea(),{getSchemaPath:zQ}=Je();eI.exports=JQ;function JQ(e){let t=QQ(e,"hashes");if(t)throw t;let r=zQ(e.schema,e.table);return WQ.openEnvironment(r,e.table)}a(JQ,"initialize")});var bp=g((Wle,tI)=>{"use strict";var jQ=Zo(),XQ=Op();tI.exports=ZQ;async function ZQ(e){let t=await XQ(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return jQ.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(ZQ,"lmdbGetDataByHash")});var ta=g((zle,rI)=>{"use strict";var Np=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};rI.exports=Np});var nI=g((Xle,sI)=>{"use strict";var jle=ta(),ez=Zo(),tz=Op();sI.exports=rz;async function rz(e){let t=await tz(e),r=global.hdb_schema[e.schema][e.table];return ez.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(rz,"lmdbSearchByHash")});var Zs=g((e_e,iI)=>{"use strict";var yp=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};iI.exports=yp});var j_=g((r_e,_I)=>{"use strict";var Qt=Zo(),sz=We(),nz=Q(),Ee=dt(),Xi=M(),iz=qi(),oI=yr().LMDB_ERRORS_ENUM,{getSchemaPath:oz}=Je(),An=Xi.SEARCH_WILDCARDS;async function az(e,t,r){let s;e.schema===Xi.SYSTEM_SCHEMA_NAME?s=iz[e.table]:s=global.hdb_schema[e.schema][e.table];let n=lI(e,s.hash_attribute,r,t);return cI(e,n,s.hash_attribute,r)}a(az,"prepSearch");async function cI(e,t,r,s){let n=oz(e.schema,e.table),i=await sz.openEnvironment(n,e.table),o=uI(i,e,t,r),c=o.transaction||i;if([Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ee.SEARCH_TYPES.SEARCH_ALL,Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(cz(e,r)===!1){let l=e.search_attribute;if(l===r)return s?aI(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?aI(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Qt.batchSearchByHashToMap(c,r,e.get_attributes,_):Qt.batchSearchByHash(c,r,e.get_attributes,_)}a(cI,"executeSearch");function uI(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case Ee.SEARCH_TYPES.EQUALS:n=Qt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.CONTAINS:n=Qt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.ENDS_WITH:case Ee.SEARCH_TYPES._ENDS_WITH:n=Qt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.STARTS_WITH:case Ee.SEARCH_TYPES._STARTS_WITH:n=Qt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Qt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Qt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.SEARCH_ALL:return Qt.searchAll(e,s,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Qt.searchAllToMap(e,s,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.BETWEEN:n=Qt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN:case Ee.SEARCH_TYPES._GREATER_THAN:n=Qt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ee.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Qt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN:case Ee.SEARCH_TYPES._LESS_THAN:n=Qt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN_EQUAL:case Ee.SEARCH_TYPES._LESS_THAN_EQUAL:n=Qt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(uI,"searchByType");function aI(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(aI,"createMapFromIterable");function cz(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(cz,"checkToFetchMore");function lI(e,t,r,s){if(nz.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),An.indexOf(n)>-1)return r===!0?Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ee.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(An[0])<0&&n.indexOf(An[1])<0)return c===!0?r===!0?Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ee.SEARCH_TYPES.EQUALS;if(An.indexOf(i)>=0&&An.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Ee.SEARCH_TYPES.CONTAINS;if(An.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ee.SEARCH_TYPES.ENDS_WITH;if(An.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Ee.SEARCH_TYPES.STARTS_WITH;if(n.includes(An[0])||n.includes(An[1]))return Ee.SEARCH_TYPES.EQUALS;throw new Error(oI.UNKNOWN_SEARCH_TYPE)}else switch(s){case Xi.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ee.SEARCH_TYPES.BETWEEN;case Xi.VALUE_SEARCH_COMPARATORS.GREATER:return Ee.SEARCH_TYPES.GREATER_THAN;case Xi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ee.SEARCH_TYPES.GREATER_THAN_EQUAL;case Xi.VALUE_SEARCH_COMPARATORS.LESS:return Ee.SEARCH_TYPES.LESS_THAN;case Xi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ee.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(oI.UNKNOWN_SEARCH_TYPE)}}a(lI,"createSearchTypeFromSearchObject");_I.exports={executeSearch:cI,createSearchTypeFromSearchObject:lI,prepSearch:az,searchByType:uI}});var fI=g((i_e,dI)=>{"use strict";var n_e=Zs(),uz=ea(),lz=Q(),_z=M(),dz=j_();dI.exports=fz;function fz(e,t){if(!lz.isEmpty(t)&&_z.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=uz(e,"value");if(s)throw s;return dz.prepSearch(e,t,!0)}a(fz,"lmdbGetDataByValue")});var Yc=g((c_e,EI)=>{"use strict";var a_e=Zs(),Ez=ea(),hz=Q(),mz=M(),pz=j_();EI.exports=Sz;async function Sz(e,t){if(!hz.isEmpty(t)&&mz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=Ez(e,"value");if(s)throw s;return pz.prepSearch(e,t,!1)}a(Sz,"lmdbSearchByValue")});var mI=g((__e,hI)=>{"use strict";var l_e=dt(),wp=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},Ip=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Cp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};hI.exports={SearchByConditionsObject:wp,SearchCondition:Ip,SortAttribute:Cp}});var RI=g((h_e,gI)=>{"use strict";var f_e=mI().SearchByConditionsObject,Tz=Zs(),gz=ea(),Dp=Zo(),X_=dt(),{Resource:E_e}=(Os(),ne(Lp)),TI=j_(),Rz=Ap(),Az=require("lodash"),{getSchemaPath:Oz}=Je(),pI=We(),{handleHDBError:bz,hdb_errors:Nz}=se(),{HTTP_STATUS_CODES:yz}=Nz,wz=1e8;gI.exports=Iz;async function Iz(e){let t=gz(e,"conditions");if(t)throw bz(t,t.message,yz.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=Oz(e.schema,e.table),s=await pI.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)pI.openDBI(s,_.search_attribute);let i=Az.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===X_.SEARCH_TYPES.EQUALS?_.estimated_count=Dp.count(s,_.search_attribute,_.search_value):l===X_.SEARCH_TYPES.CONTAINS||l===X_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=wz}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await SI(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(TI.filterByType),d=l.length,f=Dp.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>Rz.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await SI(o,e,f,n.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=Dp.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(Iz,"lmdbSearchByConditions");async function SI(e,t,r,s){let n=new Tz(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===X_.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,TI.searchByType(e,n,i,s).map(o=>o.value)}a(SI,"executeConditionSearch")});var ra=g((p_e,AI)=>{"use strict";var Cz=M().OPERATIONS_ENUM,Mp=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=Cz.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};AI.exports=Mp});var Up=g((T_e,DI)=>{"use strict";var yI=Zs(),wI=ra(),II=Yc(),CI=Fc(),ur=M(),OI=Q(),bI=We(),{getTransactionAuditStorePath:Dz,getSchemaPath:Lz}=Je(),NI=$();DI.exports=Mz;async function Mz(e){try{if(OI.isEmpty(global.hdb_schema[e.schema])||OI.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Uz(e),await Pz(e);let t=Lz(e.schema,e.table);try{await bI.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")NI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Dz(e.schema,e.table);await bI.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")NI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Mz,"lmdbDropTable");async function Uz(e){let t=new yI(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await II(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new wI(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await CI(n)}a(Uz,"deleteAttributesFromSystem");async function Pz(e){let t=new yI(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await II(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new wI(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await CI(n)}catch(i){throw i}}a(Pz,"dropTableFromSystem")});var MI=g((R_e,LI)=>{"use strict";var vz=require("fs-extra"),Bz=Zs(),Hz=ta(),xz=ra(),qz=Up(),Gz=Fc(),Fz=bp(),kz=Yc(),On=M(),{getSchemaPath:Vz}=Je(),{handleHDBError:$z,hdb_errors:Yz}=se(),{HDB_ERROR_MSGS:Kz,HTTP_STATUS_CODES:Wz}=Yz;LI.exports=Qz;async function Qz(e){let t;try{t=await zz(e.schema);let r=new Bz(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await kz(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await qz(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new xz(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Gz(n);let i=Vz(t);await vz.remove(i)}catch(r){throw r}}a(Qz,"lmdbDropSchema");async function zz(e){let t=new Hz(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await Fz(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw $z(new Error,Kz.SCHEMA_NOT_FOUND(e),Wz.NOT_FOUND,void 0,void 0,!0);return s}a(zz,"validateDropSchema")});var Z_=g((O_e,UI)=>{"use strict";var Pp=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};UI.exports=Pp});var vI=g((y_e,PI)=>{"use strict";var Jz=require("fs-extra"),ed=We(),{getTransactionAuditStorePath:jz}=Je(),vp=dt(),N_e=Z_();PI.exports=Xz;async function Xz(e){let t;try{let r=jz(e.schema,e.table);await Jz.mkdirp(r),t=await ed.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{ed.createDBI(t,vp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),ed.createDBI(t,vp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),ed.createDBI(t,vp.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(Xz,"createTransactionsAuditEnvironment")});var qI=g((I_e,xI)=>{"use strict";var Bp=M(),BI=We(),Zz=Fo(),{getSystemSchemaPath:e2,getSchemaPath:t2}=Je(),r2=qi(),s2=T_(),Hp=S_(),n2=$(),i2=vI(),qp=r2.hdb_table,HI=[];for(let e=0;e<qp.attributes.length;e++)HI.push(qp.attributes[e].attribute);xI.exports=o2;async function o2(e,t){let r=t2(t.schema,t.table),s=new Hp(t.schema,t.table,Bp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Hp(t.schema,t.table,Bp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Hp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await BI.createEnvironment(r,t.table),e!==void 0){let o=await BI.openEnvironment(e2(),Bp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Zz.insertRecords(o,qp.hash_attribute,HI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await xp(s),await xp(n),await xp(i)}await i2(t)}catch(o){throw o}}a(o2,"lmdbCreateTable");async function xp(e){try{await s2(e)}catch(t){n2.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(xp,"createAttribute")});var FI=g((D_e,GI)=>{"use strict";var a2=Dc(),c2=Mc(),u2=Y_(),Kc=M(),l2=Fo().updateRecords,_2=We(),{getSchemaPath:d2}=Je(),f2=qc(),E2=$();GI.exports=h2;async function h2(e){try{let{schema_table:t,attributes:r}=a2(e);c2(e,r,t.hash_attribute),e.schema!==Kc.SYSTEM_SCHEMA_NAME&&(r.includes(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await u2(e.hdb_auth_header,t,r),n=d2(e.schema,e.table),i=await _2.openEnvironment(n,e.table),o=await l2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await f2(e,o)}catch(c){E2.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(h2,"lmdbUpdateRecords")});var VI=g((M_e,kI)=>{"use strict";var m2=M().OPERATIONS_ENUM,Gp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=m2.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};kI.exports=Gp});var YI=g((v_e,$I)=>{"use strict";var P_e=VI(),p2=Dc(),S2=Mc(),T2=Y_(),Wc=M(),g2=Fo().upsertRecords,R2=We(),{getSchemaPath:A2}=Je(),O2=qc(),b2=$(),{handleHDBError:N2,hdb_errors:y2}=se();$I.exports=w2;async function w2(e){let t;try{t=p2(e)}catch(u){throw N2(u,u.message,y2.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;S2(e,s,r.hash_attribute),e.schema!==Wc.SYSTEM_SCHEMA_NAME&&(s.includes(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await T2(e.hdb_auth_header,r,s),i=A2(e.schema,e.table),o=await R2.openEnvironment(i,e.table),c=await g2(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await O2(e,c)}catch(u){b2.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(w2,"lmdbUpsertRecords")});var WI=g((H_e,KI)=>{"use strict";var Fp=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};KI.exports=Fp});var zI=g((q_e,QI)=>{"use strict";var kp=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};QI.exports=kp});var XI=g((k_e,jI)=>{"use strict";var Vp=We(),{getTransactionAuditStorePath:I2}=Je(),F_e=WI(),Qc=dt(),C2=Q(),JI=zI(),D2=require("util").promisify,L2=D2(setTimeout),M2=1e4,U2=100;jI.exports=P2;async function P2(e){let t=I2(e.schema,e.table),r=await Vp.openEnvironment(t,e.table,!0),s=Vp.listDBIs(r);Vp.initializeDBIs(r,Qc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new JI;do n=await v2(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await L2(U2);while(n.transactions_deleted>0);return i}a(P2,"deleteAuditLogsBefore");async function v2(e,t){let r=new JI;try{let s=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];C2.isEmpty(c)||(n=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>M2)break}return await n,r}catch(s){throw s}}a(v2,"deleteTransactions")});var eC=g(($_e,ZI)=>{"use strict";var $p=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};ZI.exports=$p});var rC=g((W_e,tC)=>{"use strict";var B2=Zs(),H2=ra(),K_e=eC(),en=M(),x2=Q(),Yp=We(),q2=qi(),G2=Yc(),F2=Fc(),{getSchemaPath:k2}=Je();tC.exports=V2;async function V2(e,t=!0){let r;e.schema===en.SYSTEM_SCHEMA_NAME?r=q2[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await Y2(e),n=k2(e.schema,e.table),i=await Yp.openEnvironment(n,e.table);return t===!0&&await $2(e,i,r.hash_attribute),Yp.dropDBI(i,e.attribute),s}a(V2,"lmdbDropAttribute");async function $2(e,t,r){let s=Yp.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a($2,"removeAttributeFromAllObjects");async function Y2(e){let t=new B2(en.SYSTEM_SCHEMA_NAME,en.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await G2(t)).filter(o=>o[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(x2.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new H2(en.SYSTEM_SCHEMA_NAME,en.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return F2(i)}a(Y2,"dropAttributeFromSystem")});var cC=g((J_e,aC)=>{"use strict";var Kp=We(),sa=dt(),z_e=wr(),Wp=M(),sC=Q(),{getTransactionAuditStorePath:K2}=Je(),W2=Zo(),td=Jo(),Q2=$();aC.exports=z2;async function z2(e){let t=K2(e.schema,e.table),r=await Kp.openEnvironment(t,e.table,!0),s=Kp.listDBIs(r);Kp.initializeDBIs(r,sa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return nC(r,e.search_values);case Wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,j2(r,e.search_values,n);case Wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return J2(r,e.search_values);default:return nC(r)}}a(z2,"readAuditLog");function nC(e,t=[0,Date.now()]){sC.isEmpty(t[0])&&(t[0]=0),sC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[sa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new td,n))}a(nC,"searchTransactionsByTimestamp");function J2(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[sa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,oC(e,i))}return Object.fromEntries(r)}a(J2,"searchTransactionsByUsername");function j2(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=W2.equals(e,sa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,sa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=oC(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);iC(u,"records",r,l,o),iC(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(j2,"searchTransactionsByHashValues");function iC(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new td(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new td(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(iC,"loopRecords");function oC(e,t){let r=[];try{let s=e.dbis[sa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new td,i);r.push(o)}}catch(i){Q2.warn(i)}return r}catch(s){throw s}}a(oC,"batchSearchTransactions")});var lC=g((ede,uC)=>{"use strict";var{getSchemaPath:X_e}=Je(),Z_e=We(),{database:X2}=(Ae(),ne(Ge));uC.exports={writeTransaction:Z2};async function Z2(e,t,r){return X2({database:e,table:t}).transaction(r)}a(Z2,"writeTransaction")});var EC=g((rde,fC)=>{"use strict";var{getSchemaPath:_C}=Je(),dC=We();fC.exports={flush:eJ,resetReadTxn:tJ};async function eJ(e,t){return(await dC.openEnvironment(_C(e,t),t.toString())).flushed}a(eJ,"flush");async function tJ(e,t){try{(await dC.openEnvironment(_C(e,t),t.toString())).resetReadTxn()}catch{}}a(tJ,"resetReadTxn")});var SC=g((nde,pC)=>{"use strict";var{Readable:rJ}=require("stream"),{getDatabases:sJ}=(Ae(),ne(Ge)),{readSync:nJ,openSync:iJ,createReadStream:hC}=require("fs"),{open:oJ}=require("lmdb"),mC=c_(),aJ=l_(),{AUDIT_STORE_OPTIONS:cJ}=(Hi(),ne(TC)),{INTERNAL_DBIS_NAME:uJ,AUDIT_STORE_NAME:lJ}=dt();pC.exports=dJ;var Qp=32768,_J=100;async function dJ(e){let t=e.database||e.schema||"data",r=sJ()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=oJ({noSync:!0,maxDbs:aJ.MAX_DBS}),f,E=d.openDB(uJ,new mC(!1)),h=l.useReadTransaction(),p=0,S=a(async function(b,R){R.encoding="binary",R.encoder=void 0;let L=d.openDB(b,R),H=l.openDB(b,R);for(let{key:P,version:k,value:B}of H.getRange({transaction:h,versions:H.useVersions}))f=L.put(P,B,k),p++%_J===0&&(await new Promise(J=>setTimeout(J,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:b,value:R}of l.getRange({transaction:h,start:!1}))if(n.some(L=>b.startsWith?.(L+"/"))){E.put(b,R);let[,L]=b.split("/"),H=!L,P=new mC(!H,H);await S(b,P)}e.include_audit&&await S(lJ,Object.assign({},cJ)),await f;let T=hC(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=iJ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Qp);nJ(c,_,0,Qp),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=hC(null,{fd:c,start:Qp}),f=new rJ.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",s),_}}a(dJ,"getBackup")});var AC=g((ode,RC)=>{"use strict";var fJ=$(),{handleHDBError:EJ}=se(),hJ=vb(),mJ=T_(),pJ=pp(),SJ=Mw(),TJ=Fc(),gJ=bp(),RJ=nI(),AJ=fI(),OJ=Yc(),bJ=RI(),NJ=MI(),yJ=qI(),wJ=FI(),IJ=YI(),CJ=XI(),DJ=Up(),LJ=rC(),MJ=cC(),UJ=lC(),gC=EC(),PJ=SC(),zp=class extends hJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return bJ(t)}async getDataByHash(t){return await gJ(t)}async searchByHash(t){return await RJ(t)}async getDataByValue(t,r){return await AJ(t,r)}async searchByValue(t){return await OJ(t)}async createSchema(t){return await SJ(t)}async dropSchema(t){return await NJ(t)}async createTable(t,r){return await yJ(t,r)}async dropTable(t){return await DJ(t)}async createAttribute(t){return await mJ(t)}async createRecords(t){return await pJ(t)}async updateRecords(t){return await wJ(t)}async upsertRecords(t){try{return await IJ(t)}catch(r){throw EJ(r,null,null,fJ.ERR,r)}}async deleteRecords(t){return await TJ(t)}async dropAttribute(t){return await LJ(t)}async deleteAuditLogsBefore(t){return await CJ(t)}async readAuditLog(t){return await MJ(t)}writeTransaction(t,r,s){return UJ.writeTransaction(t,r,s)}flush(t,r){return gC.flush(t,r)}resetReadTxn(t,r){return gC.resetReadTxn(t,r)}getBackup(t){return PJ(t)}};RC.exports=zp});function qJ(){xJ=setInterval(function(){for(let e of Jp)if(e.stale){let t=e[Oe]?.url;NC.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},HJ).unref()}var jp,bC,NC,vJ,Jp,BJ,zc,OC,Zi,rd,HJ,xJ,Xp=Re(()=>{jp=x(wr()),bC=x(se()),NC=x($());Os();vJ=100,Jp=new Set,BJ=25e3,Zi=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),Jp.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Jp.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(zc&&performance.now()-OC>BJ)throw new bC.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,jp.getNextMonotonicTime)());let s=t.retries||0;if(this.validated<this.writes.length)try{let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;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=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let T=S();E?E.push?E.push(T):E=[E,T]:E=T}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(l){throw this.abort(),l}s||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<vJ>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return zc||(zc=n,OC=performance.now(),zc.then(()=>{zc=null})),n.then(l=>l?(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=s+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},rd=class extends Zi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,jp.getNextMonotonicTime)())}getReadTxn(){}},HJ=3e4;a(qJ,"startMonitoringTxns");qJ()});function Xe(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 s=e.transaction=new Zi;e.timestamp&&(s.timestamp=e.timestamp),s[Oe]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit({letItLinger:r?.letItLinger});return u.then?u.then(()=>c):c}function o(c){throw s.abort({}),c}}var yC,eo=Re(()=>{yC=require("../index");Os();Xp();a(Xe,"transaction");(0,yC._assignPackageExport)("transaction",Xe);Xe.commit=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Xe.abort=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var vC={};Ye(vC,{ResourceBridge:()=>tS});function rS({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 IC(e,t){let r=tn(e),s=rS(e,r);if(!r)throw new Ds.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;Xe(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:n,select:s},i);return l=l&&nd(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function tn(e){let t=e.database||e.schema||FJ,r=Ls()[t];if(!r)throw(0,Ds.handleHDBError)(new Error,GJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function CC(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*DC(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var LC,sd,Ds,MC,UC,Ms,Zp,eS,PC,GJ,FJ,kJ,VJ,wC,tS,BC=Re(()=>{"use strict";LC=x(AC()),sd=x(ea()),Ds=x(se());Ae();MC=x(Dc()),UC=x(Mc()),Ms=x(M()),Zp=x(Rn()),eS=x(Cs()),PC=x(Q());eo();id();({HDB_ERROR_MSGS:GJ}=Ds.hdb_errors),FJ="data",kJ=1e4,VJ=10,tS=class extends LC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),wC=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,sd.default)(t,"conditions");if(r)throw(0,Ds.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=tn(t);if(!s)throw new Ds.ClientError(`Table ${t.table} not found`);let n=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"),s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:rS(t,s),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ds.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ct({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await tn(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=tn(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){tn(t).dropTable()}createSchema(t){return Jc({database:t.schema,table:null}),Zp.signalSchemaChange(new eS.SchemaEventMsg(process.pid,Ms.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await sS(t.schema),Zp.signalSchemaChange(new eS.SchemaEventMsg(process.pid,Ms.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,wC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,MC.default)(t);(0,UC.default)(t,s,r.primaryKey);let n,i=Ls()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Xe(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=nd(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:_}})}async deleteRecords(t){let r=Ls()[t.schema][t.table],s={user:t.hdb_user};return Xe(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return CC(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Ls()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ds.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:Ms.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,PC.async_set_timeout)(VJ),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%kJ===0&&await _();return u.length>0&&await _(),n?CC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,sd.default)(t,"hashes");if(r)throw r;return IC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of IC(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&Ms.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 s=(0,sd.default)(t,"value");if(s)throw s;let n=tn(t);if(!n)throw new Ds.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===Ms.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:rS(t,n)})}async getDataByValue(t,r){let s=new Map,n=tn(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){tn({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return tn(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=tn(t),s={};switch(t.search_type){case Ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case Ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of DC(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return DC(r,t.search_values?.[0],t.search_values?.[1])}}};a(rS,"getSelect");a(IC,"getRecords");a(tn,"getTable");a(CC,"createDeleteResponse");a(DC,"groupRecordsInHistory")});var ys=g((Rde,HC)=>{"use strict";var{ResourceBridge:$J}=(BC(),ne(vC)),YJ=ee();YJ.initSync();var od;function KJ(){return od||(od=new $J,od)}a(KJ,"getBridge");HC.exports=KJ()});var FC=g((Ode,GC)=>{"use strict";var xC=require("lodash"),jc=require("mathjs"),WJ=require("jsonata"),qC=Q();GC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?xC.uniqWith(e,xC.isEqual):e,searchJSON:QJ,mad:Xc.bind(null,jc.mad),mean:Xc.bind(null,jc.mean),mode:Xc.bind(null,jc.mode),prod:Xc.bind(null,jc.prod),median:Xc.bind(null,jc.median)};function Xc(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Xc,"aggregateFunction");function QJ(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(qC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),qC.isEmpty(this.__ala__.res[r])){let s=WJ(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(QJ,"searchJSON")});var VC=g((Nde,kC)=>{"use strict";var Et=require("moment"),nS="YYYY-MM-DDTHH:mm:ss.SSSZZ";Et.suppressDeprecationWarnings=!0;kC.exports={current_date:()=>Et().utc().format("YYYY-MM-DD"),current_time:()=>Et().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Et(e).utc().format("YYYY");case"month":return Et(e).utc().format("MM");case"day":return Et(e).utc().format("DD");case"hour":return Et(e).utc().format("HH");case"minute":return Et(e).utc().format("mm");case"second":return Et(e).utc().format("ss");case"millisecond":return Et(e).utc().format("SSS");default:break}},date:e=>Et(e).utc().format(nS),date_format:(e,t)=>Et(e).utc().format(t),date_add:(e,t,r)=>Et(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Et(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Et(e).utc(),n=Et(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Et().utc().valueOf(),get_server_time:()=>Et().format(nS),offset_utc:(e,t)=>Et(e).utc().utcOffset(t).format(nS)}});var WC=g((yde,KC)=>{"use strict";var zJ=require("@turf/area"),JJ=require("@turf/length"),jJ=require("@turf/circle"),XJ=require("@turf/difference"),ZJ=require("@turf/distance"),e4=require("@turf/boolean-contains"),t4=require("@turf/boolean-equal"),r4=require("@turf/boolean-disjoint"),s4=require("@turf/helpers"),$C=M(),me=Q(),bn=$();KC.exports={geoArea:n4,geoLength:i4,geoCircle:o4,geoDifference:a4,geoDistance:YC,geoNear:c4,geoContains:u4,geoEqual:l4,geoCrosses:_4,geoConvert:d4};function n4(e){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return zJ.default(e)}catch(t){return bn.trace(t,e),NaN}}a(n4,"geoArea");function i4(e,t){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return JJ.default(e,{units:t||"kilometers"})}catch(r){return bn.trace(r,e),NaN}}a(i4,"geoLength");function o4(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return jJ.default(e,t,{units:r||"kilometers"})}catch(s){return bn.trace(s,e,t),NaN}}a(o4,"geoCircle");function a4(e,t){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return XJ(e,t)}catch(r){return bn.trace(r,e,t),NaN}}a(a4,"geoDifference");function YC(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return ZJ.default(e,t,{units:r||"kilometers"})}catch(s){return bn.trace(s,e,t),NaN}}a(YC,"geoDistance");function c4(e,t,r,s){if(me.isEmpty(e)||me.isEmpty(t))return!1;if(me.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return YC(e,t,s)<=r}catch(n){return bn.trace(n,e,t),!1}}a(c4,"geoNear");function u4(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return e4.default(e,t)}catch(r){return bn.trace(r,e,t),!1}}a(u4,"geoContains");function l4(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return t4.default(e,t)}catch(r){return bn.trace(r,e,t),!1}}a(l4,"geoEqual");function _4(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return!r4.default(e,t)}catch(r){return bn.trace(r,e,t),!1}}a(_4,"geoCrosses");function d4(e,t,r){if(me.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(me.isEmpty(t))throw new Error("geo_type is required");if(me.isEmpty($C.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys($C.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=me.autoCastJSON(e)),s4[t](e,r)}a(d4,"geoConvert")});var ad=g((Ide,QC)=>{var to=FC(),xr=VC(),rn=WC();QC.exports=e=>{e.aggr.mad=e.aggr.MAD=to.mad,e.aggr.mean=e.aggr.MEAN=to.mean,e.aggr.mode=e.aggr.MODE=to.mode,e.aggr.prod=e.aggr.PROD=to.prod,e.aggr.median=e.aggr.MEDIAN=to.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=to.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=to.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=xr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=xr.current_time,e.fn.extract=e.fn.EXTRACT=xr.extract,e.fn.date=e.fn.DATE=xr.date,e.fn.date_format=e.fn.DATE_FORMAT=xr.date_format,e.fn.date_add=e.fn.DATE_ADD=xr.date_add,e.fn.date_sub=e.fn.DATE_SUB=xr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=xr.date_diff,e.fn.now=e.fn.NOW=xr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=xr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=xr.get_server_time,e.fn.getdate=e.fn.GETDATE=xr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=xr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=rn.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=rn.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=rn.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=rn.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=rn.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=rn.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=rn.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=rn.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=rn.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=rn.geoNear}});var XC=g((Cde,jC)=>{"use strict";var Zc=require("lodash"),lr=require("alasql");lr.options.cache=!1;var f4=ad(),zC=require("clone"),cd=require("recursive-iterator"),le=$(),Ie=Q(),na=ys(),E4=M(),{hdb_errors:h4}=se(),{getDatabases:JC}=(Ae(),ne(Ge)),m4="IS NULL",Us="There was a problem performing this search. Please check the logs and try again.";f4(lr);var iS=class{static{a(this,"SQLSearch")}constructor(t,r){if(Ie.isEmpty(t))throw le.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),Ie.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!Ie.isEmptyOrZeroLength(s))return le.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw le.error("Error thrown from checkEmptySQL in SQLSearch class method search."),le.error(s),new Error(Us)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw le.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),le.error(s),new Error(Us)}if(Object.keys(this.data).length===0)return le.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw le.error("Error thrown from processJoins in SQLSearch class method search."),le.error(s),new Error(Us)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw le.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),le.error(s),new Error(Us)}try{return t=await this._finalSQL(),t}catch(s){throw le.error("Error thrown from finalSQL in SQLSearch class method search."),le.error(s),new Error(Us)}}_getColumns(){let t=new cd(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(zC(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Zc.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=JC()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Ie.isEmpty(this.statement.where)){le.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new cd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Ie.isEmpty(r)&&r.right)if(Ie.isNotEmptyAndHasValue(r.right.value)){let s=Ie.autoCast(r.right.value);[!0,!1].indexOf(s)>=0&&(r.right=new lr.yy.LogicValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=Ie.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new lr.yy.LogicValue({value:i}):s instanceof lr.yy.StringValue&&Ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new lr.yy.NumValue({value:i}))});if(t){le.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new cd(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Ie.isEmpty(E4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Ie.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Ie.isEmptyOrZeroLength(r.left.columnid)||Ie.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Ie.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!Ie.isEmpty(r.right.value)||!Ie.isEmpty(r.left.value)?s.add(Ie.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)s.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&Ie.isEmptyOrZeroLength(this.statement.from)&&Ie.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Zc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(Ie.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);Ie.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&!Ie.isEmptyOrZeroLength(this.columns.columns))return t;if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&Ie.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await lr.promise(r)}catch(r){throw le.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),le.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(zC(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(Ie.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(m4)>-1&&this.tables.forEach(n=>{let i={columnid:JC()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Zc.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!Ie.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Ie.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await na.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw le.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),le.error(l),new Error(Us)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await na.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,E))}))}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),le.error(l),new Error(Us)}else if(!Ie.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Ie.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await na.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),le.error(l),new Error(Us)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await na.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),le.error(l),new Error(Us)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof lr.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new lr.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new lr.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new lr.yy.FuncValue:new lr.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.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={};n.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${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 "${p}.${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 u=this.statement.where?"WHERE "+this.statement.where:"";u=u.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 l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=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(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,n);f=await lr.promise(h,t),t=null}catch(E){throw le.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),le.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 p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=Zc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,T=p.length;S<T;S++){let b=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[b]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new cd(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Zc.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw le.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),le.error(i),new Error(Us)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await na.getDataByHash(c),_=n.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=n.columns[h],S=E[p]===void 0?null:E[p];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw le.error("Error thrown from getDataByHash function in SQLSearch class method getData."),le.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let s;try{let n=this._buildSQL();le.trace(`Final SQL: ${n}`),s=await lr.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),le.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw le.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),le.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return le.error(h4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),le.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(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await na.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw le.error("There was an error when processing this SQL operation. Check your logs"),le.error(o),new Error(Us)}}return Object.values(Object.values(this.data)[0].__merged_data)}};jC.exports=iS});var Dr=g((Lde,ZC)=>{"use strict";var p4=Ub();ZC.exports={searchByConditions:T4,searchByHash:g4,searchByValue:R4,search:A4};var oS=ys(),{transformReq:aS}=Q(),S4=XC();async function T4(e){return aS(e),oS.searchByConditions(e)}a(T4,"searchByConditions");async function g4(e){aS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of oS.searchByHash(e))r&&t.push(r);return t}a(g4,"searchByHash");async function R4(e){aS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of oS.searchByValue(e))t.push(r);return t}a(R4,"searchByValue");function A4(e,t){try{let r=new p4(e);r.validate(),new S4(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(A4,"search")});var ud=g((Ude,eD)=>{"use strict";var O4=ys();eD.exports={writeTransaction:b4};function b4(e,t,r){return O4.writeTransaction(e,t,r)}a(b4,"writeTransaction")});var nD=g((Bde,sD)=>{"use strict";var N4=Dr(),y4=gn(),tD=$(),w4=Lr(),vde=ud(),I4=require("clone"),uS=require("alasql"),C4=ad(),rD=require("util"),D4=rD.promisify(y4.getTableSchema),L4=rD.promisify(N4.search),M4=M(),cS=Q();C4(uS);sD.exports={update:P4};var U4="There was a problem performing this update. Please check the logs and try again.";async function P4({statement:e,hdb_user:t}){let r=await D4(e.table.databaseid,e.table.tableid),s=v4(e.columns);cS.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=I4(n),c=cS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=uS.parse(u).statements[0],l=await L4(_),d=B4(s,l);return H4(o,d,t)}a(P4,"update");function v4(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=uS.compile(`SELECT ${r.expression.toString()} AS [${M4.FUNC_VAL}] FROM ?`)}),t}catch(t){throw tD.error(t),new Error(U4)}}a(v4,"createUpdateRecord");function B4(e,t){return cS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(B4,"buildUpdateRecords");async function H4(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await w4.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){tD.error(`Error delete new_attributes from update response: ${i}`)}return n}a(H4,"updateRecords")});var oD=g((Gde,iD)=>{var x4=require("alasql"),q4=Dr(),G4=$(),F4=ys(),_S=require("util"),lS=Q(),k4=M(),V4=gn(),xde=ud(),qde=Lr(),$4="record",Y4="successfully deleted",K4=_S.callbackify(J4),W4=_S.promisify(q4.search),Q4=_S.promisify(V4.getTableSchema);iD.exports={convertDelete:K4};function z4(e){return`${e.deleted_hashes.length} ${$4}${e.deleted_hashes.length===1?"":"s"} ${Y4}`}a(z4,"generateReturnMessage");async function J4({statement:e,hdb_user:t}){let r=await Q4(e.table.databaseid,e.table.tableid);lS.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=lS.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=x4.parse(o).statements[0],u={operation:k4.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await W4(c);let _=await F4.deleteRecords(u);return lS.isEmptyOrZeroLength(_.message)&&(_.message=z4(_)),delete _.txn_time,_}catch(_){throw G4.error(_),_.hdb_code?_.message:_}}a(J4,"convertDelete")});var _D=g((kde,lD)=>{"use strict";var j4=Zn(),{hdb_errors:aD}=se(),{getDatabases:cD}=(Ae(),ne(Ge));lD.exports={checkSchemaExists:uD,checkSchemaTableExists:X4,schema_describe:j4};async function uD(e){if(!cD()[e])return aD.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(uD,"checkSchemaExists");async function X4(e,t){let r=await uD(e);if(r)return r;if(!cD()[e][t])return aD.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(X4,"checkSchemaTableExists")});var eu=g(($de,Z4)=>{Z4.exports={name:"harperdb",version:"4.3.0-beta.10",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"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/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.11.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.25.1","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.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"3.0.0-beta.6",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.2.0","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.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",yaml:"2.3.4"},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.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.3.3","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 iu={};Ye(iu,{addAnalyticsListener:()=>nu,recordAction:()=>qr,recordActionBinary:()=>ns,setAnalyticsEnabled:()=>e3});function e3(e){gD=e}function qr(e,t,r,s,n){if(!gD)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=dd.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=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:s,type:n},dd.set(i,o)}ld||t3()}function ns(e,t,r,s,n){qr(!!e,t,r,s,n)}function nu(e){OD.push(e)}function t3(){ld=performance.now(),setTimeout(async()=>{let e=performance.now()-ld;ld=0;let t=[],r={time:Date.now(),period:e,threadId:ro.threadId,metrics:t};for(let[n,i]of dd){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of bD){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=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 ND()}let s=process.memoryUsage();t.push({metric:"memory",threadId:ro.threadId,byThread:!0,...s});for(let n of OD)n(t);dd=new Map,ro.parentPort?ro.parentPort.postMessage({type:AD,report:r}):ID({report:r})},RD).unref()}async function r3(e,t=6e4){let r=ES(),s=yD(),n=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,tu.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),s.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,tu.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),p(T-S)})}),i;for(let p of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(p.value?.time){i=p.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,u=new Map,_=[],l;for(let{key:p,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(p>o+t)break}else o=p;l=p;let{metrics:T,threadId:b}=S;for(let R of T||[]){let{path:L,method:H,type:P,metric:k,count:B,total:J,distribution:z,threads:j,...Te}=R;B||(B=1);let ce=k+(L?"-"+L:"");H!==void 0&&(ce+="-"+H),P!==void 0&&(ce+="-"+P);let de=c.get(ce);if(de){if(de.threads){let Be=de.threads[b];if(Be)de=Be;else{de.threads[b]=Object.assign({},Te);continue}}de.count||(de.count=1);let Le=de.count;for(let Be in Te){let Ct=Te[Be];typeof Ct=="number"&&(de[Be]=(de[Be]*Le+Ct*B)/(Le+B))}de.count+=B,J>=0&&(de.total+=J,de.ratio=de.total/de.count)}else de=Object.assign({period:t},R),delete de.distribution,c.set(ce,de),de.byThread&&(de.threads=[],de.threads[b]=Object.assign({},Te),_.push(de));if(z){z=z.map(Be=>typeof Be=="number"?{value:Be,count:1}:Be);let Le=u.get(ce);Le?Le.push(...z):u.set(ce,z)}}await ND()}for(let p of _){let{path:S,method:T,type:b,metric:R,count:L,total:H,distribution:P,threads:k,...B}=p;k=k.filter(J=>J);for(let J in B){if(typeof p[J]!="number")continue;let z=0;for(let j of k){let Te=j[J];typeof Te=="number"&&(z+=Te)}p[J]=z}p.count=k.length,delete p.threads,delete p.byThread}for(let[p,S]of u){let T=c.get(p);S.sort((Be,Ct)=>Be.value>Ct.value?1:-1);let b=T.count-1,R=[],L=0,H=0,P;for(let Be of bD){let Ct=b*Be;for(;L<Ct;)P=S[H++],L+=P.count,H===1&&L--;let ql=S[H>1?H-2:0];P||(P=S[0]),R.push(P.value-(P.value-ql.value)*(L-Ct)/P.count)}let[k,B,J,z,j,Te,ce,de,Le]=R;Object.assign(T,{p1:k,p10:B,p25:J,median:z,p75:j,p90:Te,p95:ce,p99:de,p999:Le})}let d;for(let[p,S]of c)S.id=(0,_d.getNextMonotonicTime)(),S.time=l,s.primaryStore.put(S.id,S,{append:!0}).then(T=>{T||s.primaryStore.put(S.id,S)}),d=!0;let f=Date.now(),{idle:E,active:h}=performance.eventLoopUtilization();if(d||h*10>E){let p=(0,_d.getNextMonotonicTime)(),S={id:p,metric:"main-thread-utilization",idle:E-dD,active:h-fD,taskQueueLatency:await n,time:f,...process.memoryUsage()};s.primaryStore.put(p,S,{append:!0}).then(T=>{T||s.primaryStore.put(p,S)})}dD=E,fD=h}async function ED(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function ES(){return hD||(hD=ct({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function yD(){return mD||(mD=ct({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function i3(){wD=!0;let e=(0,su.get)(fS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await r3(RD,e),await ED(ES(),s3),await ED(yD(),n3)},Math.min(e/2,2147483647)).unref()}function ID(e,t){let r=e.report;r.threadId=t?.threadId||ro.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(pD+=s.mean*s.count);r.totalBytesProcessed=pD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(SD.get(t))}),SD.set(t,t.performance.eventLoopUtilization())),r.id=(0,_d.getNextMonotonicTime)(),ES().primaryStore.put(r.id,r),wD||i3(),o3&&(CD=c3(r))}async function c3(e){if(await CD,!ai){let r=(0,ru.dirname)((0,tu.getLogFilePath)());try{ai=await(0,dS.open)((0,ru.join)(r,"analytics.log"),"r+")}catch{ai=await(0,dS.open)((0,ru.join)(r,"analytics.log"),"w+")}}let t=(await ai.stat()).size;if(t>a3){let r=Buffer.alloc(t);await ai.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ai.write(r,{position:0}),await ai.truncate(r.length),t=r.length}await ai.write(JSON.stringify(e)+`
8
- `,t)}var ro,TD,tu,ru,dS,_d,su,fS,dd,gD,ld,RD,AD,OD,bD,dD,fD,ND,s3,n3,hD,mD,wD,pD,SD,o3,CD,ai,a3,Nn=Re(()=>{ro=require("worker_threads"),TD=x(Ke());Ae();tu=x($()),ru=require("path"),dS=require("fs/promises"),_d=x(wr()),su=x(ee()),fS=x(M());nr();(0,su.initSync)();dd=new Map,gD=(0,su.get)(fS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(e3,"setAnalyticsEnabled");a(qr,"recordAction");tt.recordAnalytics=qr;a(ns,"recordActionBinary");ld=0,RD=1e3,AD="analytics-report",OD=[];a(nu,"addAnalyticsListener");bD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(t3,"sendAnalytics");a(r3,"aggregation");dD=0,fD=0,ND=a(()=>new Promise(setImmediate),"rest");a(ED,"cleanup");s3=36e5,n3=31536e6;a(ES,"getRawAnalyticsTable");a(yD,"getAnalyticsTable");(0,TD.setChildListenerByType)(AD,ID);a(i3,"startScheduledTasks");pD=0,SD=new Map,o3=!1;a(ID,"recordAnalytics");a3=1e6;a(c3,"logAnalytics")});var gS=g((rfe,qD)=>{"use strict";var{decode:u3}=require("msgpackr"),{isMainThread:efe,parentPort:l3,threadId:tfe}=require("worker_threads"),ou=st(),ia=Fe(),pS=M(),zt=$(),mS=ee(),LD=M(),{onMessageByType:_3}=Ke(),MD=Tn(),{recordAction:d3,recordActionBinary:f3}=(Nn(),ne(iu)),{publishToStream:E3}=ou,{ConsumerEvents:h3}=require("nats"),m3=Dr(),{promisify:p3}=require("util"),UD=p3(setTimeout),hd=1e4,md,Ed,S3,T3,PD,au=new Map,oa=new Map;qD.exports={initialize:SS,ingestConsumer:TS,setSubscription:g3,setIgnoreOrigin:O3,getDatabaseSubscriptions:A3,updateConsumer:vD};async function SS(){_3(pS.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async s=>{await vD(s)}),PD=!0,zt.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await ou.getNATSReferences();md=e,Ed=e.info.server_name,S3=t,T3=r}a(SS,"initialize");async function vD(e){if(e.status==="start"){let{js:t,jsm:r}=await BD(e.node_domain_name);TS(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=au.get(e.stream_name+e.node_domain_name);t&&(zt.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),au.set(e.stream_name+e.node_domain_name,"close")),oa.get(e.node_domain_name)==="failed"&&oa.set(e.node_domain_name,"close")}}a(vD,"updateConsumer");var pd=new Map;function g3(e,t,r){let s=pd.get(e);s||pd.set(e,s=new Map),s.set(t,r),PD||SS().then(R3)}a(g3,"setSubscription");async function R3(){let e=await m3.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+ia.SERVER_SUFFIX.LEAF,{js:s,jsm:n}=await BD(r);if(n){for(let i of t.subscriptions)if(i.subscribe===!0){let{schema:o,table:c}=i,u=MD.createNatsTableStreamName(o,c);TS(u,s,n,r)}}}}a(R3,"accessConsumers");async function BD(e){let t,r,s=1;for(;!r;)try{t=await md.jetstream({domain:e,timeout:6e4}),r=await md.jetstreamManager({domain:e,timeout:6e4})}catch(n){if(oa.get(e)==="close")break;oa.set(e,"failed"),s%10===1&&zt.warn("Nats ingest attempting to connect to:",e,"Nats error:",n.message);let i=s++*100<hd?s++*100:hd;await UD(i)}return{js:t,jsm:r}}a(BD,"connectToRemoteJS");function A3(){return pd}a(A3,"getDatabaseSubscriptions");var HD;function O3(e){HD=e}a(O3,"setIgnoreOrigin");var xD=100,DD=new Array(xD),fd=0;async function TS(e,t,r,s){let{connection:n}=await ou.getNATSReferences();md=n,Ed=n.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,Ed),zt.notify("Initializing ingest consumer for node:",s,"stream:",e)}catch(_){if(oa.get(s)==="close")break;o%10===1&&zt.warn("Nats ingest error getting consumer:",s,"stream:",e,"Nats error:",_.message),_.code==="404"&&(zt.notify("Nats ingest creating consumer for node:",s,"stream:",e),i=await ou.createConsumer(r,e,Ed,new Date(Date.now()).toISOString()));let l=o++*100<hd?o++*100:hd;await UD(l)}let c=!1,u;for(l3?.on("message",async _=>{let{type:l}=_;l===LD.ITC_EVENT_TYPES.SHUTDOWN&&(c=!0,u&&u.close?.()&&u.close())});!c;){if(au.get(e+s)==="close"||oa.get(s)==="close"){au.delete(e+s),c=!0;continue}u=await i.consume({max_messages:mS.get(pS.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100}),au.set(e+s,u);let _=!1;(async()=>{for await(let l of await u.status())if(l.type===h3.HeartbeatsMissed){let d=l.data;zt.trace(`${d} clustering ingest consumer heartbeats missed, node: ${s} stream: ${u.consumer.stream}`),d===2&&(zt.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${s} stream: ${u.consumer.stream}`),u.stop(),_=!0)}})();try{for await(let l of u)await DD[fd],DD[fd]=b3(l).catch(d=>{zt.error(d)}),++fd>=xD&&(fd=0)}catch(l){l.message==="consumer deleted"?(zt.notify("Nats consumer deleted, closing messages for node:",s,"stream:",u.consumer.stream),await u.close(),c=!0):zt.error("Error consuming clustering ingest, restarting consumer",l)}ou.clearClientCache(),!c&&_&&await SS()}}a(TS,"ingestConsumer");async function b3(e){let t=u3(e.data);d3(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),zt.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,s=!1,n=mS.get(pS.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(ia.MSG_HEADERS.TRANSACTED_NODES)&&r.values(ia.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(ia.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!HD),f3(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(ia.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;zt.trace("processing message:",o,c,_,(l?"records: "+l.map(L=>L?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),zt.trace(`messageProcessor nats msg id: ${e.headers.get(ia.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let p=new Promise(L=>h=L),{timestamp:S,user:T,node_name:b}=f||{},R=pd.get(c)?.get(_);if(!R)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,t.onCommit=h,R.send(t);else if(l.length===1&&!u)R.send({type:hS(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:S,table:_,onCommit:h,user:T,nodeName:b});else{let L=l.map((H,P)=>({type:hS(o),value:H,expiresAt:E,id:d?.[P],table:_}));for(;u;)L.push({type:hS(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;R.send({type:"transaction",writes:L,table:_,timestamp:S,onCommit:h,user:T,nodeName:b})}mS.get(LD.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&E3(e.subject.split(".").slice(0,-1).join("."),MD.createNatsTableStreamName(c,_),e.headers,e.data),await p}catch(o){zt.error(o)}e.ack()}a(b3,"messageProcessor");function hS(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(hS,"convertOperation")});var st=g((ufe,rL)=>{"use strict";var Mt=ee();Mt.initSync();var N3=require("fs-extra"),y3=require("semver"),lu=require("path"),{monotonicFactory:w3}=require("ulidx"),FD=w3(),I3=require("util"),kD=require("child_process"),C3=I3.promisify(kD.exec),D3=kD.spawn,Ft=Fe(),Ce=M(),Sd=Q(),Ps=$(),Td=Tn(),L3=ud(),cu=Pr(),{broadcast:M3,onMessageByType:U3,getWorkerIndex:P3}=Ke(),{isMainThread:VD}=require("worker_threads"),{Encoder:v3,decode:bS}=require("msgpackr"),$D=new v3,{isEmpty:oo}=Sd,YD=ss(),nfe=48*36e11;VD&&U3(Ce.ITC_EVENT_TYPES.RESTART,()=>{_r=void 0,io=void 0});var{connect:B3,StorageType:H3,RetentionPolicy:x3,AckPolicy:NS,DeliverPolicy:yS,DiscardPolicy:q3,NatsConnection:ife,JetStreamManager:ofe,JetStreamClient:afe,StringCodec:cfe,JSONCodec:G3,createInbox:wS,headers:F3,ErrorCode:GD}=require("nats"),{PACKAGE_ROOT:k3}=M(),V3=eu(),{recordAction:$3}=(Nn(),ne(iu)),KD=G3(),Y3="clustering",K3=V3.engines[Ft.NATS_SERVER_NAME],W3=lu.join(k3,"dependencies"),OS=lu.join(W3,`${process.platform}-${process.arch}`,Ft.NATS_BINARY_NAME),RS,AS,uu,so,no;rL.exports={runCommand:WD,checkNATSServerInstalled:Q3,createConnection:IS,getConnection:gd,getJetStreamManager:_u,getJetStream:zD,getNATSReferences:vs,getServerList:J3,createLocalStream:CS,listStreams:JD,deleteLocalStream:j3,getServerConfig:du,listRemoteStreams:X3,viewStream:Z3,viewStreamIterator:ej,publishToStream:tj,request:nj,reloadNATS:DS,reloadNATSHub:ij,reloadNATSLeaf:oj,extractServerName:sj,requestErrorHandler:aj,createLocalTableStream:eL,createTableStreams:lj,purgeTableStream:tL,purgeSchemaTableStreams:_j,getStreamInfo:dj,updateLocalStreams:Ej,closeConnection:z3,getJsmServerName:Rd,addNatsMsgHeader:jD,clearClientCache:QD,updateRemoteConsumer:cj,createConsumer:XD,updateConsumerIterator:uj};async function WD(e,t=void 0){let{stdout:r,stderr:s}=await C3(e,{cwd:t});if(s)throw new Error(s.replace(`
6
+ `)},wY="certificate.pem",IY="privateKey.pem",CY="ca.pem";gy.exports={CERTIFICATE_VALUES:yY,CERTIFICATE_PEM_NAME:wY,PRIVATEKEY_PEM_NAME:IY,CA_PEM_NAME:CY}});var Wm=g((Pue,yy)=>{"use strict";var Ny=require("fs-extra"),ie=require("joi"),DY=require("os"),{boolean:Ne,string:ar,number:At,array:Km}=ie.types(),{totalmem:Ay}=require("os"),Wi=require("path"),LY=$(),P_=Q(),Uue=Ry(),Oy=M(),MY=Xe(),by="log",UY="components",PY="Invalid logging.rotation.maxSize unit. Available units are G, M or K",vY="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",BY="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",HY="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",xY="rootPath config parameter is undefined",qY="clustering.enabled config parameter is undefined",Qi=At.min(0).required(),v_=Km.items({host:ar.required(),port:Qi}).empty(null),Js;yy.exports={configValidator:GY,routesValidator:KY,route_constraints:v_};function GY(e){if(Js=e.rootPath,P_.isEmpty(Js))throw xY;let t=Ne.required(),r=At.min(0).max(1e3).empty(null).default(YY),s=ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Pc),n=ar.optional().empty(null),i=ar.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ie.string().empty(null).default(Pc),c=ie.custom(kY).empty(null).default(Pc),u=e.clustering?.enabled;if(P_.isEmpty(u))throw qY;let _;return u===!0?_=ie.object({enabled:t,hubServer:ie.object({cluster:ie.object({name:ie.required().empty(null),network:ie.object({port:Qi,routes:v_}).required()}).required(),leafNodes:ie.object({network:ie.object({port:Qi}).required()}).required(),network:ie.object({port:Qi}).required()}).required(),leafServer:ie.object({network:ie.object({port:Qi,routes:v_}).required(),streams:ie.object({maxAge:At.min(120).allow(null).optional(),maxBytes:At.min(1).allow(null).optional(),maxMsgs:At.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ie.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Ne.optional(),databaseLevel:Ne.optional(),tls:ie.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ne.required(),verify:Ne.optional()}),user:ar.optional().empty(null)}).required():_=ie.object({enabled:t,tls:ie.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ne.required()})}).required(),ie.object({authentication:ie.object({authorizeLocal:Ne,cacheTTL:At.required(),enableSessions:Ne}),analytics:ie.object({aggregatePeriod:At}),componentsRoot:s.optional(),clustering:_,localStudio:ie.object({enabled:t}).required(),logging:ie.object({auditAuthEvents:ie.object({logFailed:Ne,logSuccessful:Ne}),file:Ne.required(),level:ie.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ie.object({enabled:Ne.optional(),compress:Ne.optional(),interval:ar.custom($Y).optional().empty(null),maxSize:ar.custom(VY).optional().empty(null),path:ar.optional().empty(null).default(Pc)}).required(),root:s,stdStreams:Ne.required(),auditLog:Ne.required()}).required(),operationsApi:ie.object({network:ie.object({cors:Ne.optional(),corsAccessList:Km.optional(),headersTimeout:At.min(1).optional(),keepAliveTimeout:At.min(1).optional(),port:At.optional().empty(null),domainSocket:ie.optional().empty("hdb/operations-server").default(Pc),securePort:At.optional().empty(null),timeout:At.min(1).optional()}).optional(),tls:ie.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ie.object({network:ie.object({port:Qi,securePort:Qi,mtls:ie.alternatives([Ne.optional(),ie.object({user:ar.optional(),certificateAuthority:n,required:Ne.optional()})])}).required(),webSocket:Ne.optional(),requireAuthentication:Ne.optional()}),http:ie.object({compressionThreshold:At.optional(),cors:Ne.optional(),corsAccessList:Km.optional(),headersTimeout:At.min(1).optional(),port:At.min(0).optional().empty(null),securePort:At.min(0).optional().empty(null),mtls:ie.alternatives([Ne.optional(),ie.object({user:ar.optional(),certificateAuthority:n,required:Ne.optional()})])}).required(),threads:ie.alternatives(r.optional(),ie.object({count:r.optional(),debug:ie.alternatives(Ne.optional(),ie.object({startingPort:At.min(1).optional(),host:ar.optional(),waitForDebugger:Ne.optional()})),maxHeapMemory:At.min(0).optional()})),storage:ie.object({writeAsync:Ne.required(),overlappingSync:Ne.optional(),caching:Ne.optional(),compression:Ne.optional(),noReadAhead:Ne.optional(),path:c,prefetchWrites:Ne.optional()}).required(),ignoreScripts:Ne.optional(),tls:ie.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional(),ciphers:ar.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(GY,"configValidator");function FY(e){return Ny.existsSync(e)?null:`Specified path ${e} does not exist.`}a(FY,"doesPathExist");function kY(e,t){ie.assert(e,ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=FY(e);if(r)return t.message(r)}a(kY,"validatePath");function VY(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(PY);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(BY):e}a(VY,"validateRotationMaxSize");function $Y(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(vY);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(HY):e}a($Y,"validateRotationInterval");function YY(e,t){let r=t.state.path.join("."),s=DY.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Ay();return i=Math.round(Math.min(i,Ay())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),LY.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(YY,"setDefaultThreads");function Pc(e,t){let r=t.state.path.join(".");if(!P_.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(P_.isEmpty(Js))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Wi.join(Js,UY);case"logging.root":return Wi.join(Js,by);case"clustering.leafServer.streams.path":return Wi.join(Js,"clustering","leaf");case"storage.path":let s=Wi.join(Js,Oy.LEGACY_DATABASES_DIR_NAME);return Ny.existsSync(s)?s:Wi.join(Js,Oy.DATABASES_DIR_NAME);case"logging.rotation.path":return Wi.join(Js,by);case"operationsApi.network.domainSocket":return r==null?null:Wi.join(Js,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Pc,"setDefaultRoot");function KY(e){let t=ie.object({routes:v_});return MY.validateBySchema({routes:e},t)}a(KY,"routesValidator")});var Pr=g((Hue,vy)=>{"use strict";var Ur=M(),Lt=Q(),Ot=$(),{configValidator:WY,routesValidator:wy}=Wm(),cr=require("fs-extra"),QY=require("yaml"),ws=require("path"),zY=require("is-number"),Cy=require("properties-reader"),JY=require("lodash"),{handleHDBError:XY}=se(),{HTTP_STATUS_CODES:jY,HDB_ERROR_MSGS:B_}=yr(),Bue=require("minimist"),{server:ZY}=(nr(),ne(vi)),{DATABASES_PARAM_CONFIG:vc,CONFIG_PARAMS:Mr,CONFIG_PARAM_MAP:Is}=Ur,eK="Unable to get config value because config is uninitialized",tK="Config successfully initialized",rK="Error backing up config file",sK="Empty parameter sent to getConfigValue",Dy=ws.join(Ur.PACKAGE_ROOT,"config","yaml",Ur.HDB_DEFAULT_CONFIG_FILE),nK="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Iy={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"},H_,bt,x_;vy.exports={createConfigFile:iK,getDefaultConfig:oK,getConfigValue:My,initConfig:zm,flattenConfig:Yo,updateConfigValue:Uy,updateConfigObject:cK,getConfiguration:_K,setConfiguration:dK,readConfigFile:Xm,getClusteringRoutes:fK,initOldConfig:Py,getConfigFromFile:EK,getConfigFilePath:zi,addConfig:hK,deleteConfigFromFile:mK,getConfigObj:pK};function iK(e){let t=ni(Dy);H_=Yo(t.toJSON());let r;for(let o in e){let c=Is[o.toLowerCase()];if(c===Mr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=Qm(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){Ot.error(l)}}}r&&Ly(t,r),Jm(t);let s=t.toJSON();bt=Yo(s);let n=t.getIn(["rootPath"]),i=ws.join(n,Ur.HDB_CONFIG_FILE);cr.createFileSync(i),cr.writeFileSync(i,String(t)),Ot.trace(`Config file written to ${i}`)}a(iK,"createConfigFile");function Ly(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!Lt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(vc.TABLES))for(let i in s[n][vc.TABLES])for(let o in s[n][vc.TABLES][i]){let c=s[n][vc.TABLES][i][o],u=[Mr.DATABASES,n,vc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[Mr.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){Ot.error("Error parsing schemas CLI/env config arguments",s)}}a(Ly,"setSchemasConfig");function oK(e){if(H_===void 0){let r=ni(Dy);H_=Yo(r.toJSON())}let t=Is[e.toLowerCase()];if(t!==void 0)return H_[t.toLowerCase()]}a(oK,"getDefaultConfig");function My(e){if(e==null){Ot.error(sK);return}if(bt===void 0){Ot.trace(eK);return}let t=Is[e.toLowerCase()];if(t!==void 0)return bt[t.toLowerCase()]}a(My,"getConfigValue");function zi(e=Lt.getPropsFilePath()){let t=Lt.getEnvCliRootPath();return t?ws.join(t,Ur.HDB_CONFIG_FILE):Cy(e).get(Ur.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(zi,"getConfigFilePath");function zm(e=!1){if(bt===void 0||e){let t;if(!Lt.noBootFile()){t=Lt.getPropsFilePath();try{cr.accessSync(t,cr.constants.F_OK|cr.constants.R_OK)}catch(i){throw Ot.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=zi(t),s;if(r.includes("config/settings.js"))try{Py(r);return}catch(i){if(i.code!==Ur.NODE_ERROR_CODES.ENOENT)throw i}try{s=ni(r)}catch(i){if(i.code===Ur.NODE_ERROR_CODES.ENOENT){Ot.trace(`HarperDB config file not found at ${r}.
7
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw Ot.error(i),new Error(`Error reading HarperDB config file at ${r}`)}aK(s,r),Jm(s);let n=s.toJSON();if(ZY.config=n,bt=Yo(n),bt.logging_rotation_rotate)for(let i in Iy)bt[i]&&Ot.error(`Config ${Iy[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Ot.trace(tK)}}a(zm,"initConfig");function aK(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ws.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ws.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ws.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(Ot.trace("Updating config file with missing config params"),cr.writeFileSync(t,String(e)))}a(aK,"checkForUpdatedConfig");function Jm(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t?.http?.threads&&(t.threads=t?.http?.threads);let r=WY(t);if(r.error)throw B_.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(Jm,"validateConfig");function cK(e,t){bt===void 0&&(bt={});let r=Is[e.toLowerCase()];if(r===void 0){Ot.trace(`Unable to update config object because config param '${e}' does not exist`);return}bt[r.toLowerCase()]=t}a(cK,"updateConfigObject");function Uy(e,t,r=void 0,s=!1,n=!1,i=!1){bt===void 0&&zm();let o=My(Is.hdb_root),c=ws.join(o,Ur.HDB_CONFIG_FILE),u=ni(c),_;if(r===void 0&&e.toLowerCase()===Mr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=Is[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Qm(f,t);u.setIn([...E],h)}else for(let f in r){let E=Is[f.toLowerCase()];if(E===Mr.HTTP_SECUREPORT&&r[f]===bt[Mr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Mr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===bt[Mr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Mr.DATABASES){_=r[f];continue}if(E?.startsWith("threads_")){let h=u.getIn(["threads"]);h>=0&&(u.deleteIn(["threads"]),u.setIn(["threads","count"],h))}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Ur.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=Qm(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(T){Ot.error(T)}}}_&&Ly(u,_),Jm(u);let l=u.getIn(["rootPath"]),d=ws.join(l,Ur.HDB_CONFIG_FILE);s===!0&&uK(c,l),cr.writeFileSync(d,String(u)),n&&(bt=Yo(u.toJSON())),Ot.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Uy,"updateConfigValue");function uK(e,t){try{let r=ws.join(t,"backup",`${Ur.HDB_CONFIG_FILE}.bak`);cr.copySync(e,r),Ot.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Ot.error(rK),Ot.error(r)}}a(uK,"backupConfigFile");var lK=["databases"];function Yo(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)),x_=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i)){if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!lK.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Mr[u.toUpperCase()]&&Is[u]&&(n[Is[u].toLowerCase()]=o[c]),n[u]=o[c]}}s[i]!==void 0&&(n[i.toLowerCase()]=s[i])}return n}a(r,"squashObj")}a(Yo,"flattenConfig");function Qm(e,t){if(e===Mr.CLUSTERING_NODENAME||e===Mr.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(zY(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Lt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Lt.autoCast(t)}a(Qm,"castConfigValue");function _K(){let e=Lt.getPropsFilePath(),t=zi(e);return ni(t).toJSON()}a(_K,"getConfiguration");async function dK(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Uy(void 0,void 0,n,!0),nK}catch(i){throw typeof i=="string"||i instanceof String?XY(i,i,jY.BAD_REQUEST,void 0,void 0,!0):i}}a(dK,"setConfiguration");function Xm(){let e=Lt.getPropsFilePath();try{cr.accessSync(e,cr.constants.F_OK|cr.constants.R_OK)}catch(s){if(!Lt.noBootFile())throw Ot.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=zi(e);return ni(t).toJSON()}a(Xm,"readConfigFile");function ni(e){return QY.parseDocument(cr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ni,"parseYamlDoc");function fK(){let e=Xm(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Lt.isEmptyOrZeroLength(t)?[]:t;let r=wy(t);if(r)throw B_.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=Lt.isEmptyOrZeroLength(s)?[]:s;let n=wy(s);if(n)throw B_.CONFIG_VALIDATION(n.message);if(!Lt.isEmptyOrZeroLength(s)&&!Lt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!Lt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw B_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(fK,"getClusteringRoutes");function Py(e){let t=Cy(e);bt={};for(let r in Is){let s=t.get(r.toUpperCase());if(Lt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Is[r].toLowerCase();n===Mr.LOGGING_ROOT?bt[n]=ws.dirname(s):bt[n]=s}return bt}a(Py,"initOldConfig");function EK(e){let t=Xm();return JY.get(t,e.replaceAll("_","."))}a(EK,"getConfigFromFile");async function hK(e,t){let r=ni(zi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await cr.writeFile(zi(),String(r))}a(hK,"addConfig");function mK(e){let t=zi(Lt.getPropsFilePath()),r=ni(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=ws.join(s,Ur.HDB_CONFIG_FILE);cr.writeFileSync(n,String(r))}a(mK,"deleteConfigFromFile");function pK(){return x_||(zm(),x_)}a(pK,"getConfigObj")});var Hy=g((que,By)=>{"use strict";var q_=M(),G_=class{static{a(this,"BaseLicense")}constructor(t=0,r=q_.RAM_ALLOCATION_ENUM.DEFAULT,s=q_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},jm=class extends G_{static{a(this,"ExtendedLicense")}constructor(t=0,r=q_.RAM_ALLOCATION_ENUM.DEFAULT,s=q_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};By.exports={BaseLicense:G_,ExtendedLicense:jm}});var Ji=g((Fue,Vy)=>{"use strict";var Wo=require("fs-extra"),qy=U_(),Gy=require("crypto"),SK=require("moment"),TK=require("uuid").v4,Wt=$(),ep=require("path"),gK=Q(),ii=M(),{totalmem:xy}=require("os"),RK=Hy().ExtendedLicense,Ko="invalid license key format",AK="061183",OK="mofi25",bK="aes-256-cbc",NK=16,yK=32,Fy=ee();Fy.initSync();var Zm;Vy.exports={validateLicense:ky,generateFingerPrint:IK,licenseSearch:sp,getLicense:LK,checkMemoryLimit:MK};function tp(){return ep.join(Fy.getHdbBasePath(),ii.LICENSE_KEY_DIR_NAME,ii.LICENSE_FILE_NAME)}a(tp,"getLicenseDirPath");function wK(){let e=tp();return ep.join(e,ii.LICENSE_FILE_NAME)}a(wK,"getLicenseFilePath");function rp(){let e=tp();return ep.join(e,ii.REG_KEY_FILE_NAME)}a(rp,"getFingerPrintFilePath");async function IK(){let e=rp();try{return await Wo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await CK();throw Wt.error(`Error writing fingerprint file to ${e}`),Wt.error(t),new Error("There was an error generating the fingerprint")}}a(IK,"generateFingerPrint");async function CK(){let e=TK(),t=qy.hash(e),r=rp();try{await Wo.mkdirp(tp()),await Wo.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Wt.error(`Error writing fingerprint file to ${r}`),Wt.error(s),new Error("There was an error generating the fingerprint")}return t}a(CK,"writeFingerprint");function ky(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ii.RAM_ALLOCATION_ENUM.DEFAULT,version:ii.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Wt.error("empty license key passed to validate."),r;let s=rp(),n=!1;try{n=Wo.statSync(s)}catch(i){Wt.error(i)}if(n){let i;try{i=Wo.readFileSync(s,"utf8")}catch{Wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(OK),c=o[1];c=Buffer.concat([Buffer.from(c)],NK);let u=Buffer.concat([Buffer.from(i)],yK),_=Gy.createDecipheriv(bK,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=DK(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Ko),Wt.error(Ko),new Error(Ko)}let d;if(isNaN(l))try{d=JSON.parse(l),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(Ko),Wt.error(Ko),new Error(Ko)}else r.exp_date=l;r.exp_date<SK().valueOf()&&(r.valid_date=!1),qy.validate(o[1],`${AK}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Wt.error("Invalid licence"),r}a(ky,"validateLicense");function DK(e,t){try{let r=Gy.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Wt.warn("Check old license failed")}}a(DK,"checkOldLicense");function sp(){let e=new RK,t=[];try{t=Wo.readFileSync(wK(),"utf-8").split(ii.NEW_LINE)}catch(r){r.code==="ENOENT"?Wt.info("no license file found"):Wt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(gK.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=ky(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){Wt.error("There was an error parsing the license string."),Wt.error(n),e.ram_allocation=ii.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Zm=e,e}a(sp,"licenseSearch");async function LK(){return Zm||await sp(),Zm}a(LK,"getLicense");function MK(){let e=sp().ram_allocation,t=process.constrainedMemory?.()||xy();if(t=Math.round(Math.min(t,xy())/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(MK,"checkMemoryLimit")});var ss=g((Kue,iw)=>{"use strict";var Wy="username is required",Qy="nothing to update, must supply active, role or password to update",zy="password cannot be an empty string",Jy="If role is specified, it cannot be empty.",Xy="active must be true or false";iw.exports={addUser:FK,alterUser:kK,dropUser:$K,getSuperUser:QK,userInfo:YK,listUsers:k_,listUsersExternal:KK,setUsersToGlobal:zo,findAndValidateUser:sw,getClusterUser:zK,USERNAME_REQUIRED:Wy,ALTERUSER_NOTHING_TO_UPDATE:Qy,EMPTY_PASSWORD:zy,EMPTY_ROLE:Jy,ACTIVE_BOOLEAN:Xy};var jy=Lr(),UK=si(),op=U_(),Zy=py(),ew=Dr(),ap=Rn(),vr=Q(),tw=require("validate.js"),Se=$(),{promisify:PK}=require("util"),cp=Tn(),$y=M(),Yy=Fe(),vK=Pr(),Vue=ee(),$ue=Ji(),BK=Fi(),{table:Yue}=(Ae(),ne(Ge)),{handleHDBError:Xs,hdb_errors:HK}=se(),{HTTP_STATUS_CODES:js,AUTHENTICATION_ERROR_MSGS:np,HDB_ERROR_MSGS:Qo}=HK,{UserEventMsg:up}=Cs(),ip=require("lodash"),{server:lp}=(nr(),ne(vi)),xK=$();lp.getUser=(e,t)=>sw(e,t,t!=null);var rw={username:!0,active:!0,role:!0,password:!0},Ky=new Map,F_=ew.searchByValue,qK=ew.searchByHash,GK=PK(UK.delete);async function FK(e){let t=tw.cleanAttributes(e,rw),r=Zy.addUserValidation(t);if(r)throw Xs(new Error,r.message,js.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await F_(s),n=n&&Array.from(n)}catch(u){throw Se.error("There was an error searching for a role in add user"),Se.error(u),u}if(!n||n.length<1)throw Xs(new Error,Qo.ROLE_NAME_NOT_FOUND(t.role),js.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Xs(new Error,Qo.DUP_ROLES_FOUND(t.role),js.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=cp.encrypt(t.password)),t.password=op.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await jy.insert(i)}catch(u){throw Se.error("There was an error searching for a user."),Se.error(u),u}Se.debug(o);try{await zo()}catch(u){throw Se.error("Got an error setting users to global"),Se.error(u),u}if(o.skipped_hashes.length===1)throw Xs(new Error,Qo.USER_ALREADY_EXISTS(t.username),js.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],ap.signalUserChange(new up(process.pid)),`${c.username} successfully added`}a(FK,"addUser");async function kK(e){let t=tw.cleanAttributes(e,rw);if(vr.isEmptyOrZeroLength(t.username))throw new Error(Wy);if(vr.isEmptyOrZeroLength(t.password)&&vr.isEmptyOrZeroLength(t.role)&&vr.isEmptyOrZeroLength(t.active))throw new Error(Qy);if(!vr.isEmpty(t.password)&&vr.isEmptyOrZeroLength(t.password.trim()))throw new Error(zy);if(!vr.isEmpty(t.active)&&!vr.isBoolean(t.active))throw new Error(Xy);let r=VK(t.username);if(!vr.isEmpty(t.password)&&!vr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=cp.encrypt(t.password)),t.password=op.hash(t.password)),t.role==="")throw new Error(Jy);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 F_(i)||[])}catch(c){throw Se.error("Got an error searching for a role."),Se.error(c),c}if(!o||o.length===0){let c=Qo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Se.error(c),Xs(new Error,c,js.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Qo.ALTER_USER_DUP_ROLES(t.role);throw Se.error(c),Xs(new Error,c,js.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await jy.update(s)}catch(i){throw Se.error("Error during update."),Se.error(i),i}try{await zo()}catch(i){throw Se.error("Got an error setting users to global"),Se.error(i),i}return ap.signalUserChange(new up(process.pid)),n}a(kK,"alterUser");function VK(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(VK,"isClusterUser");async function $K(e){try{let t=Zy.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(vr.isEmpty(global.hdb_users.get(e.username)))throw Xs(new Error,Qo.USER_NOT_EXIST(e.username),js.NOT_FOUND,void 0,void 0,!0);let s;try{s=await GK(r)}catch(n){throw Se.error("Got an error deleting a user."),Se.error(n),n}Se.debug(s);try{await zo()}catch(n){throw Se.error("Got an error setting users to global."),Se.error(n),n}return ap.signalUserChange(new up(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a($K,"dropUser");async function YK(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=ip.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await qK(r)}catch(n){throw Se.error("Got an error searching for a role."),Se.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Se.error(r),r}return t}a(YK,"userInfo");async function KK(){let e;try{e=await k_()}catch(t){throw Se.error("Got an error listing users."),Se.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(KK,"listUsersExternal");async function k_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await F_(e)}catch(o){throw Se.error("Got an error searching for roles."),Se.error(o),o}let r={};for(let o of t)r[o.id]=ip.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await F_(s)}catch(o){throw Se.error("Got an error searching for users."),Se.error(o),o}let i=new Map;for(let o of n)o=ip.cloneDeep(o),o.role=r[o.role],WK(o.role),i.set(o.username,o);return i}catch(e){throw Se.error("got an error listing users"),Se.error(e),vr.errorizeMessage(e)}return null}a(k_,"listUsers");function WK(e){try{if(!e){Se.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(BK)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Se.error("Got an error trying to set system permissions."),Se.error(t)}}a(WK,"appendSystemTablesToRole");async function zo(){try{let e=await k_();global.hdb_users=e}catch(e){throw Se.error(e),e}}a(zo,"setUsersToGlobal");async function sw(e,t,r=!0){global.hdb_users||await zo();let s=global.hdb_users.get(e);if(!s){if(!r)return{username:e};throw Xs(new Error,np.GENERIC_AUTH_FAIL,js.UNAUTHORIZED,void 0,void 0,!0)}if(s&&!s.active)throw Xs(new Error,np.USER_INACTIVE,js.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(Ky.get(t)===s.password)return n;if(op.validate(s.password,t))Ky.set(t,s.password);else throw Xs(new Error,np.GENERIC_AUTH_FAIL,js.UNAUTHORIZED,void 0,void 0,!0)}return n}a(sw,"findAndValidateUser");async function QK(){global.hdb_users||await zo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(QK,"getSuperUser");async function zK(){let e=await k_(),t=vK.getConfigFromFile($y.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!vr.isEmpty(r)&&r?.role?.role===$y.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=cp.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Yy.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Yy.SERVER_SUFFIX.ADMIN,r}a(zK,"getClusterUser");var nw=[];lp.invalidateUser=function(e){for(let t of nw)try{t(e)}catch(r){xK.error("Error invalidating user",r)}};lp.onInvalidatedUser=function(e){nw.push(e)}});var Hc=g((Jue,uw)=>{"use strict";var Xi=$(),Br=M(),JK=xN(),Que=gn(),zue=ei(),XK=ss(),{validateEvent:ow}=Cs(),Bc=ys(),jK=require("process"),{resetDatabases:ZK}=(Ae(),ne(Ge)),eW={[Br.ITC_EVENT_TYPES.SCHEMA]:tW,[Br.ITC_EVENT_TYPES.USER]:cw};async function tW(e){let t=ow(e);if(t){Xi.error(t);return}Xi.trace("ITC schemaHandler received schema event:",e),await JK(e.message),await rW(e.message)}a(tW,"schemaHandler");async function rW(e){try{Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=ZK();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Xi.error(t)}}a(rW,"syncSchemaMetadata");var aw=[];async function cw(e){try{try{Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Bc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Xi.warn(r)}let t=ow(e);if(t){Xi.error(t);return}Xi.trace(`ITC userHandler ${Br.HDB_ITC_CLIENT_PREFIX}${jK.pid} received user event:`,e),await XK.setUsersToGlobal();for(let r of aw)r()}catch(t){Xi.error(t)}}a(cw,"userHandler");cw.addListener=function(e){aw.push(e)};uw.exports=eW});var Cs=g((rle,_w)=>{"use strict";var jue=$(),_p=Q(),sW=M(),{ITC_ERRORS:xc}=yr(),{parentPort:Zue,threadId:nW,isMainThread:iW,workerData:ele}=require("worker_threads"),{onMessageFromWorkers:oW,broadcast:tle,broadcastWithAcknowledgement:aW}=Ke();_w.exports={sendItcEvent:cW,validateEvent:lw,SchemaEventMsg:uW,UserEventMsg:lW};var V_;oW(async(e,t)=>{V_=V_||Hc(),lw(e),V_[e.type]&&await V_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function cW(e){return!iW&&e.message&&(e.message.originator=nW),aW(e)}a(cW,"sendItcEvent");function lw(e){if(typeof e!="object")return xc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||_p.isEmpty(e.type))return xc.MISSING_TYPE;if(!e.hasOwnProperty("message")||_p.isEmpty(e.message))return xc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||_p.isEmpty(e.message.originator))return xc.MISSING_ORIGIN;if(sW.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return xc.INVALID_EVENT(e.type)}a(lw,"validateEvent");function uW(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(uW,"SchemaEventMsg");function lW(e){this.originator=e}a(lW,"UserEventMsg")});var Rn=g((ile,hw)=>{"use strict";var dw=M(),nle=Q(),$_=$(),fw=vN(),Jo,{sendItcEvent:Ew}=Cs();function _W(e){try{$_.trace("signalSchemaChange called with message:",e),Jo=Jo||Hc();let t=new fw(dw.ITC_EVENT_TYPES.SCHEMA,e);return Jo.schema(t),Ew(t)}catch(t){$_.error(t)}}a(_W,"signalSchemaChange");function dW(e){try{$_.trace("signalUserChange called with message:",e),Jo=Jo||Hc();let t=new fw(dw.ITC_EVENT_TYPES.USER,e);return Jo.user(t),Ew(t)}catch(t){$_.error(t)}}a(dW,"signalUserChange");hw.exports={signalSchemaChange:_W,signalUserChange:dW}});var Y_=g((ale,pw)=>{"use strict";var mw=Q(),fW=M(),EW=$(),hW=T_(),mW=S_(),pW=Rn(),{SchemaEventMsg:SW}=Cs(),TW="already exists in";pw.exports=gW;async function gW(e,t,r){if(mw.isEmptyOrZeroLength(r))return r;let s=[];mw.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await RW(e,t.schema,t.name,i)})),n}a(gW,"lmdbCheckForNewAttributes");async function RW(e,t,r,s){let n=new mW(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await AW(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(TW))EW.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(RW,"createNewAttribute");async function AW(e){let t;return t=await hW(e),pW.signalSchemaChange(new SW(process.pid,fW.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(AW,"createAttribute")});var Xo=g((ule,Sw)=>{"use strict";var dp=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};Sw.exports=dp});var gw=g((_le,Tw)=>{"use strict";var OW=Xo(),bW=M().OPERATIONS_ENUM,fp=class extends OW{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(bW.INSERT,r,s,n,i),this.records=t}};Tw.exports=fp});var Aw=g((fle,Rw)=>{"use strict";var NW=Xo(),yW=M().OPERATIONS_ENUM,Ep=class extends NW{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(yW.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};Rw.exports=Ep});var bw=g((hle,Ow)=>{"use strict";var wW=Xo(),IW=M().OPERATIONS_ENUM,hp=class extends wW{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(IW.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};Ow.exports=hp});var yw=g((ple,Nw)=>{"use strict";var CW=Xo(),DW=M().OPERATIONS_ENUM,mp=class extends CW{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(DW.DELETE,s,n,t,i),this.original_records=r}};Nw.exports=mp});var qc=g((gle,Dw)=>{"use strict";var Tle=require("path"),ww=We(),LW=gw(),MW=Aw(),UW=bw(),PW=yw(),jo=dt(),Iw=Q(),{CONFIG_PARAMS:vW}=M(),Cw=ee();Cw.initSync();var K_=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:BW}=Je();Dw.exports=HW;async function HW(e,t){if(Cw.get(vW.LOGGING_AUDITLOG)===!1)return;let r=BW(e.schema,e.table),s=await ww.openEnvironment(r,e.table,!0),n=xW(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){ww.initializeDBIs(s,jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,jo.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Iw.isEmpty(n.user_name)||s.dbis[jo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[jo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(HW,"writeTransaction");function xW(e,t){let r=Iw.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===K_.INSERT)return new LW(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===K_.UPDATE)return new MW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===K_.UPSERT)return new UW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===K_.DELETE)return new PW(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(xW,"createTransactionObject")});var pp=g((Ole,Lw)=>{"use strict";var qW=Dc(),Ale=Lc(),Gc=M(),GW=Mc(),FW=ko().insertRecords,kW=We(),VW=$(),$W=Y_(),{getSchemaPath:YW}=Je(),KW=qc();Lw.exports=WW;async function WW(e){try{let{schema_table:t,attributes:r}=qW(e);GW(e,r,t.hash_attribute),e.schema!==Gc.SYSTEM_SCHEMA_NAME&&(r.includes(Gc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Gc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Gc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Gc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await $W(e.hdb_auth_header,t,r),n=YW(e.schema,e.table),i=await kW.openEnvironment(n,e.table),o=await FW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await KW(e,o)}catch(c){VW.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(WW,"lmdbCreateRecords")});var Pw=g((Nle,Uw)=>{"use strict";var Mw=M(),QW=pp(),zW=Lc(),JW=require("fs-extra"),{getSchemaPath:XW}=Je();Uw.exports=jW;async function jW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new zW(Mw.SYSTEM_SCHEMA_NAME,Mw.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await QW(r),await JW.mkdirp(XW(e.schema))}a(jW,"lmdbCreateSchema")});var Bw=g((wle,vw)=>{"use strict";var Sp=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};vw.exports=Sp});var Gw=g((Mle,qw)=>{"use strict";var Hw=We(),Tp=wr(),gp=yr().LMDB_ERRORS_ENUM,ZW=dt(),xw=$(),Cle=Q(),eQ=require("lmdb"),tQ=Bw(),rQ=M(),{OVERFLOW_MARKER:Dle,MAX_SEARCH_KEY_LENGTH:Lle}=ZW,sQ=rQ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function nQ(e,t,r,s){if(Tp.validateEnv(e),t===void 0)throw new Error(gp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(gp.IDS_REQUIRED):new Error(gp.IDS_MUST_BE_ITERABLE);try{let n=Hw.listDBIs(e);Hw.initializeDBIs(e,t,n);let i=new tQ,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||s&&h[sQ]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,eQ.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let T=n[S];if(!h.hasOwnProperty(T)||T===t)continue;let b=e.dbis[T],R=h[T];if(R!=null)try{let L=Tp.getIndexedValues(R);if(L)for(let H=0,P=L.length;H<P;H++)b.remove(L[H],o)}catch{xw.warn(`cannot delete from attribute: ${T}, ${R}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){xw.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[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=Tp.getNextMonotonicTime(),i}catch(n){throw n}}a(nQ,"deleteRecords");qw.exports={deleteRecords:nQ}});var Fc=g((Ple,kw)=>{"use strict";var Zo=Q(),iQ=Gw(),oQ=We(),{getSchemaPath:aQ}=Je(),cQ=qc(),uQ=$();kw.exports=lQ;async function lQ(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Zo.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Zo.isEmptyOrZeroLength(e.hash_values)&&!Zo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Zo.isEmpty(u)||e.hash_values.push(u)}}if(Zo.isEmptyOrZeroLength(e.hash_values))return Fw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Zo.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=aQ(e.schema,e.table),i=await oQ.openEnvironment(n,e.table),o=await iQ.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await cQ(e,o)}catch(c){uQ.error(`unable to write transaction due to ${c.message}`)}return Fw(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(lQ,"lmdbDeleteRecords");function Fw(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(Fw,"createDeleteResponse")});var Ap=g((Hle,Vw)=>{"use strict";var _Q=M(),Ble=wr();function Rp(e,t){let r=Object.create(null);if(t.length===1&&_Q.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Rp,"parseRow");function dQ(e,t,r,s){let n=Rp(r,e);s.push(n)}a(dQ,"searchAll");function fQ(e,t,r,s){let n=Rp(r,e);s[t]=n}a(fQ,"searchAllToMap");function EQ(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(EQ,"iterateDBI");function ji(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(ji,"pushResults");function hQ(e,t,r,s,n,i){t.toString().endsWith(e)&&ji(t,r,s,n,i)}a(hQ,"endsWith");function mQ(e,t,r,s,n,i){t.toString().includes(e)&&ji(t,r,s,n,i)}a(mQ,"contains");function pQ(e,t,r,s,n,i){t>e&&ji(t,r,s,n,i)}a(pQ,"greaterThanCompare");function SQ(e,t,r,s,n,i){t>=e&&ji(t,r,s,n,i)}a(SQ,"greaterThanEqualCompare");function TQ(e,t,r,s,n,i){t<e&&ji(t,r,s,n,i)}a(TQ,"lessThanCompare");function gQ(e,t,r,s,n,i){t<=e&&ji(t,r,s,n,i)}a(gQ,"lessThanEqualCompare");Vw.exports={parseRow:Rp,searchAll:dQ,searchAllToMap:fQ,iterateDBI:EQ,endsWith:hQ,contains:mQ,greaterThanCompare:pQ,greaterThanEqualCompare:SQ,lessThanCompare:TQ,lessThanEqualCompare:gQ,pushResults:ji}});var ea=g((kle,Jw)=>{"use strict";var oi=We(),qle=$(),Hr=wr(),W_=dt(),ut=yr().LMDB_ERRORS_ENUM,Gle=Q(),RQ=M(),Q_=Ap(),{parseRow:AQ}=Q_,Fle=require("lmdb"),{OVERFLOW_MARKER:$w,MAX_SEARCH_KEY_LENGTH:OQ}=W_;function Yw(e,t,r,s=!1,n=void 0,i=void 0){return Zi(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(Yw,"iterateFullIndex");function kc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Zi(e,t,r,(l,d,f,E)=>{let b={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(b.values=!1,d.getRange(b).map(R=>({value:R}))):d.getRange(b)})}a(kc,"iterateRangeBetween");function Zi(e,t,r,s){let n=e.database||e,i=oi.openDBI(n,r);i[W_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&oi.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Zi,"setupTransaction");function Kw(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith($w)){if(!n)if(r)n=oi.openDBI(e,r);else{let u=oi.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=oi.openDBI(e,u[_]),!n[W_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(Kw,"getOverflowCheck");function bQ(e,t,r,s=!1,n=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);return Zi(e,t,t,(o,c,u)=>(z_(r),r=Vc(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>AQ(_.value,r))))}a(bQ,"searchAll");function NQ(e,t,r,s=!1,n=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);z_(r),r=Vc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of Yw(e,t,t,s,n,i))o.set(c,Q_.parseRow(u,r));return o}a(NQ,"searchAllToMap");function yQ(e,t,r=!1,s=void 0,n=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=Yw(e,void 0,t,r,s,n),c=o.transaction,u=Kw(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(yQ,"iterateDBI");function wQ(e,t){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);return oi.statDBI(e,t).entryCount}a(wQ,"countAll");function IQ(e,t,r,s,n=!1,i=void 0,o=void 0){return ai(e,r,s),Zi(e,t,r,(c,u,_,l)=>(s=Hr.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(IQ,"equals");function CQ(e,t,r){return ai(e,t,r),oi.openDBI(e,t).getValuesCount(r)}a(CQ,"count");function DQ(e,t,r,s,n=!1,i=void 0,o=void 0){return ai(e,r,s),Zi(e,null,r,(c,u)=>{s=Hr.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(DQ,"startsWith");function LQ(e,t,r,s,n=!1,i=void 0,o=void 0){return Ww(e,t,r,s,n,i,o,!0)}a(LQ,"endsWith");function Ww(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return ai(e,r,s),Zi(e,null,r,(u,_,l,d)=>{let f=Kw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith($w)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(s):S.includes(s))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?_[W_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(Ww,"contains");function MQ(e,t,r,s,n=!1,i=void 0,o=void 0){ai(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),kc(e,t,r,s,u,n,i,o,!0,!1)}a(MQ,"greaterThan");function UQ(e,t,r,s,n=!1,i=void 0,o=void 0){ai(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),kc(e,t,r,s,u,n,i,o,!1,!1)}a(UQ,"greaterThanEqual");function PQ(e,t,r,s,n=!1,i=void 0,o=void 0){ai(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),kc(e,t,r,u,s,n,i,o,!1,!0)}a(PQ,"lessThan");function vQ(e,t,r,s,n=!1,i=void 0,o=void 0){ai(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),kc(e,t,r,u,s,n,i,o,!1,!1)}a(vQ,"lessThanEqual");function BQ(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Hr.validateEnv(e),r===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ut.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ut.END_VALUE_REQUIRED);if(s=Hr.convertKeyValueToWrite(s),n=Hr.convertKeyValueToWrite(n),s>n)throw new Error(ut.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return kc(e,t,r,s,n,i,o,c)}a(BQ,"between");function HQ(e,t,r,s){Hr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(z_(r),r=Vc(n,r),s===void 0)throw new Error(ut.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Q_.parseRow(c,r)),o}a(HQ,"searchByHash");function xQ(e,t,r){Hr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ut.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(xQ,"checkHashExists");function qQ(e,t,r,s,n=[]){return zw(e,t,r,s,n),Qw(e,t,r,s,n).map(i=>i[1])}a(qQ,"batchSearchByHash");function GQ(e,t,r,s,n=[]){zw(e,t,r,s,n);let i=new Map;for(let[o,c]of Qw(e,t,r,s,n))i.set(o,c);return i}a(GQ,"batchSearchByHashToMap");function Qw(e,t,r,s,n=[]){return Zi(e,t,t,(i,o,c)=>{r=Vc(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,Q_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(Qw,"batchHashSearch");function zw(e,t,r,s,n){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(z_(r),s==null)throw new Error(ut.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ut.IDS_MUST_BE_ITERABLE)}a(zw,"initializeBatchSearchByHash");function z_(e){if(!Array.isArray(e))throw e===void 0?new Error(ut.FETCH_ATTRIBUTES_REQUIRED):new Error(ut.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(z_,"validateFetchAttributes");function ai(e,t,r){if(Hr.validateEnv(e),t===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ut.SEARCH_VALUE_REQUIRED);if(r?.length>OQ)throw new Error(ut.SEARCH_VALUE_TOO_LARGE)}a(ai,"validateComparisonFunctions");function Vc(e,t){return t.length===1&&RQ.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=oi.listDBIs(e)),t}a(Vc,"setGetWholeRowAttributes");Jw.exports={searchAll:bQ,searchAllToMap:NQ,count:CQ,countAll:wQ,equals:IQ,startsWith:DQ,endsWith:LQ,contains:Ww,searchByHash:HQ,setGetWholeRowAttributes:Vc,batchSearchByHash:qQ,batchSearchByHashToMap:GQ,checkHashExists:xQ,iterateDBI:yQ,greaterThan:MQ,greaterThanEqual:UQ,lessThan:PQ,lessThanEqual:vQ,between:BQ}});var ta=g(($le,tI)=>{var Xw=require("lodash"),jw=Xe(),fe=require("joi"),FQ=Q(),{hdb_schema_table:$c,checkValidTable:Zw,hdb_table:eI,hdb_database:J_}=Qs(),{handleHDBError:kQ,hdb_errors:VQ}=se(),{getDatabases:$Q}=(Ae(),ne(Ge)),{HTTP_STATUS_CODES:YQ}=VQ,KQ=fe.object({database:J_,schema:J_,table:eI,search_attribute:$c,search_value:fe.any().required(),get_attributes:fe.array().min(1).items(fe.alternatives($c,fe.object())).optional(),desc:fe.bool(),limit:fe.number().integer().min(1),offset:fe.number().integer().min(0)}),WQ=fe.object({database:J_,schema:J_,table:eI,operator:fe.string().valid("and","or").default("and").lowercase(),offset:fe.number().integer().min(0),limit:fe.number().integer().min(1),get_attributes:fe.array().min(1).items(fe.alternatives($c,fe.object())).optional(),sort:fe.object({attribute:fe.alternatives($c,fe.array().min(1)),descending:fe.bool().optional()}).optional(),conditions:fe.array().min(1).items(fe.alternatives(fe.object({operator:fe.string().valid("and","or").default("and").lowercase(),conditions:fe.array()}),fe.object({search_attribute:fe.alternatives($c,fe.array().min(1)),search_type:fe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:fe.when("search_type",{switch:[{is:"equals",then:fe.any()},{is:"between",then:fe.array().items(fe.alternatives([fe.string(),fe.number()])).length(2)}],otherwise:fe.alternatives(fe.string(),fe.number())}).required()}))).required()});tI.exports=function(e,t){let r=null;switch(t){case"value":r=jw.validateBySchema(e,KQ);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Zw("database",e.schema)),i(Zw("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=jw.validateBySchema(e,WQ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=FQ.checkGlobalSchemaTable(e.schema,e.table);if(n)return kQ(new Error,n,YQ.NOT_FOUND);let o=$Q()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,f=l.conditions.length;d<f;d++){let E=l.conditions[d];E.conditions?u(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=Xw.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!l.name&&!Xw.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var Op=g((Kle,rI)=>{"use strict";var QQ=We(),zQ=ta(),{getSchemaPath:JQ}=Je();rI.exports=XQ;function XQ(e){let t=zQ(e,"hashes");if(t)throw t;let r=JQ(e.schema,e.table);return QQ.openEnvironment(r,e.table)}a(XQ,"initialize")});var bp=g((Qle,sI)=>{"use strict";var jQ=ea(),ZQ=Op();sI.exports=ez;async function ez(e){let t=await ZQ(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return jQ.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(ez,"lmdbGetDataByHash")});var ra=g((Jle,nI)=>{"use strict";var Np=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};nI.exports=Np});var oI=g((Zle,iI)=>{"use strict";var jle=ra(),tz=ea(),rz=Op();iI.exports=sz;async function sz(e){let t=await rz(e),r=global.hdb_schema[e.schema][e.table];return tz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(sz,"lmdbSearchByHash")});var Zs=g((t_e,aI)=>{"use strict";var yp=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};aI.exports=yp});var X_=g((s_e,fI)=>{"use strict";var Qt=ea(),nz=We(),iz=Q(),Ee=dt(),eo=M(),oz=Fi(),cI=yr().LMDB_ERRORS_ENUM,{getSchemaPath:az}=Je(),An=eo.SEARCH_WILDCARDS;async function cz(e,t,r){let s;e.schema===eo.SYSTEM_SCHEMA_NAME?s=oz[e.table]:s=global.hdb_schema[e.schema][e.table];let n=dI(e,s.hash_attribute,r,t);return lI(e,n,s.hash_attribute,r)}a(cz,"prepSearch");async function lI(e,t,r,s){let n=az(e.schema,e.table),i=await nz.openEnvironment(n,e.table),o=_I(i,e,t,r),c=o.transaction||i;if([Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ee.SEARCH_TYPES.SEARCH_ALL,Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(uz(e,r)===!1){let l=e.search_attribute;if(l===r)return s?uI(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?uI(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Qt.batchSearchByHashToMap(c,r,e.get_attributes,_):Qt.batchSearchByHash(c,r,e.get_attributes,_)}a(lI,"executeSearch");function _I(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case Ee.SEARCH_TYPES.EQUALS:n=Qt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.CONTAINS:n=Qt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.ENDS_WITH:case Ee.SEARCH_TYPES._ENDS_WITH:n=Qt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.STARTS_WITH:case Ee.SEARCH_TYPES._STARTS_WITH:n=Qt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Qt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Qt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.SEARCH_ALL:return Qt.searchAll(e,s,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Qt.searchAllToMap(e,s,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.BETWEEN:n=Qt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN:case Ee.SEARCH_TYPES._GREATER_THAN:n=Qt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ee.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Qt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN:case Ee.SEARCH_TYPES._LESS_THAN:n=Qt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN_EQUAL:case Ee.SEARCH_TYPES._LESS_THAN_EQUAL:n=Qt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(_I,"searchByType");function uI(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(uI,"createMapFromIterable");function uz(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(uz,"checkToFetchMore");function dI(e,t,r,s){if(iz.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),An.indexOf(n)>-1)return r===!0?Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ee.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(An[0])<0&&n.indexOf(An[1])<0)return c===!0?r===!0?Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ee.SEARCH_TYPES.EQUALS;if(An.indexOf(i)>=0&&An.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Ee.SEARCH_TYPES.CONTAINS;if(An.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ee.SEARCH_TYPES.ENDS_WITH;if(An.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Ee.SEARCH_TYPES.STARTS_WITH;if(n.includes(An[0])||n.includes(An[1]))return Ee.SEARCH_TYPES.EQUALS;throw new Error(cI.UNKNOWN_SEARCH_TYPE)}else switch(s){case eo.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ee.SEARCH_TYPES.BETWEEN;case eo.VALUE_SEARCH_COMPARATORS.GREATER:return Ee.SEARCH_TYPES.GREATER_THAN;case eo.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ee.SEARCH_TYPES.GREATER_THAN_EQUAL;case eo.VALUE_SEARCH_COMPARATORS.LESS:return Ee.SEARCH_TYPES.LESS_THAN;case eo.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ee.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(cI.UNKNOWN_SEARCH_TYPE)}}a(dI,"createSearchTypeFromSearchObject");fI.exports={executeSearch:lI,createSearchTypeFromSearchObject:dI,prepSearch:cz,searchByType:_I}});var hI=g((o_e,EI)=>{"use strict";var i_e=Zs(),lz=ta(),_z=Q(),dz=M(),fz=X_();EI.exports=Ez;function Ez(e,t){if(!_z.isEmpty(t)&&dz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=lz(e,"value");if(s)throw s;return fz.prepSearch(e,t,!0)}a(Ez,"lmdbGetDataByValue")});var Yc=g((u_e,mI)=>{"use strict";var c_e=Zs(),hz=ta(),mz=Q(),pz=M(),Sz=X_();mI.exports=Tz;async function Tz(e,t){if(!mz.isEmpty(t)&&pz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=hz(e,"value");if(s)throw s;return Sz.prepSearch(e,t,!1)}a(Tz,"lmdbSearchByValue")});var SI=g((d_e,pI)=>{"use strict";var __e=dt(),wp=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},Ip=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Cp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};pI.exports={SearchByConditionsObject:wp,SearchCondition:Ip,SortAttribute:Cp}});var OI=g((m_e,AI)=>{"use strict";var E_e=SI().SearchByConditionsObject,gz=Zs(),Rz=ta(),Dp=ea(),j_=dt(),{Resource:h_e}=(Os(),ne(Lp)),RI=X_(),Az=Ap(),Oz=require("lodash"),{getSchemaPath:bz}=Je(),TI=We(),{handleHDBError:Nz,hdb_errors:yz}=se(),{HTTP_STATUS_CODES:wz}=yz,Iz=1e8;AI.exports=Cz;async function Cz(e){let t=Rz(e,"conditions");if(t)throw Nz(t,t.message,wz.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=bz(e.schema,e.table),s=await TI.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)TI.openDBI(s,_.search_attribute);let i=Oz.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===j_.SEARCH_TYPES.EQUALS?_.estimated_count=Dp.count(s,_.search_attribute,_.search_value):l===j_.SEARCH_TYPES.CONTAINS||l===j_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=Iz}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await gI(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(RI.filterByType),d=l.length,f=Dp.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>Az.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await gI(o,e,f,n.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=Dp.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(Cz,"lmdbSearchByConditions");async function gI(e,t,r,s){let n=new gz(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===j_.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,RI.searchByType(e,n,i,s).map(o=>o.value)}a(gI,"executeConditionSearch")});var sa=g((S_e,bI)=>{"use strict";var Dz=M().OPERATIONS_ENUM,Mp=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=Dz.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};bI.exports=Mp});var Up=g((g_e,MI)=>{"use strict";var II=Zs(),CI=sa(),DI=Yc(),LI=Fc(),ur=M(),NI=Q(),yI=We(),{getTransactionAuditStorePath:Lz,getSchemaPath:Mz}=Je(),wI=$();MI.exports=Uz;async function Uz(e){try{if(NI.isEmpty(global.hdb_schema[e.schema])||NI.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Pz(e),await vz(e);let t=Mz(e.schema,e.table);try{await yI.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")wI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Lz(e.schema,e.table);await yI.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")wI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Uz,"lmdbDropTable");async function Pz(e){let t=new II(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await DI(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new CI(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await LI(n)}a(Pz,"deleteAttributesFromSystem");async function vz(e){let t=new II(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await DI(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new CI(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await LI(n)}catch(i){throw i}}a(vz,"dropTableFromSystem")});var PI=g((A_e,UI)=>{"use strict";var Bz=require("fs-extra"),Hz=Zs(),xz=ra(),qz=sa(),Gz=Up(),Fz=Fc(),kz=bp(),Vz=Yc(),On=M(),{getSchemaPath:$z}=Je(),{handleHDBError:Yz,hdb_errors:Kz}=se(),{HDB_ERROR_MSGS:Wz,HTTP_STATUS_CODES:Qz}=Kz;UI.exports=zz;async function zz(e){let t;try{t=await Jz(e.schema);let r=new Hz(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await Vz(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await Gz(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new qz(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Fz(n);let i=$z(t);await Bz.remove(i)}catch(r){throw r}}a(zz,"lmdbDropSchema");async function Jz(e){let t=new xz(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await kz(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw Yz(new Error,Wz.SCHEMA_NOT_FOUND(e),Qz.NOT_FOUND,void 0,void 0,!0);return s}a(Jz,"validateDropSchema")});var Z_=g((b_e,vI)=>{"use strict";var Pp=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};vI.exports=Pp});var HI=g((w_e,BI)=>{"use strict";var Xz=require("fs-extra"),ed=We(),{getTransactionAuditStorePath:jz}=Je(),vp=dt(),y_e=Z_();BI.exports=Zz;async function Zz(e){let t;try{let r=jz(e.schema,e.table);await Xz.mkdirp(r),t=await ed.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{ed.createDBI(t,vp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),ed.createDBI(t,vp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),ed.createDBI(t,vp.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(Zz,"createTransactionsAuditEnvironment")});var FI=g((C_e,GI)=>{"use strict";var Bp=M(),xI=We(),e2=ko(),{getSystemSchemaPath:t2,getSchemaPath:r2}=Je(),s2=Fi(),n2=T_(),Hp=S_(),i2=$(),o2=HI(),qp=s2.hdb_table,qI=[];for(let e=0;e<qp.attributes.length;e++)qI.push(qp.attributes[e].attribute);GI.exports=a2;async function a2(e,t){let r=r2(t.schema,t.table),s=new Hp(t.schema,t.table,Bp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Hp(t.schema,t.table,Bp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Hp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await xI.createEnvironment(r,t.table),e!==void 0){let o=await xI.openEnvironment(t2(),Bp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await e2.insertRecords(o,qp.hash_attribute,qI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await xp(s),await xp(n),await xp(i)}await o2(t)}catch(o){throw o}}a(a2,"lmdbCreateTable");async function xp(e){try{await n2(e)}catch(t){i2.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(xp,"createAttribute")});var VI=g((L_e,kI)=>{"use strict";var c2=Dc(),u2=Mc(),l2=Y_(),Kc=M(),_2=ko().updateRecords,d2=We(),{getSchemaPath:f2}=Je(),E2=qc(),h2=$();kI.exports=m2;async function m2(e){try{let{schema_table:t,attributes:r}=c2(e);u2(e,r,t.hash_attribute),e.schema!==Kc.SYSTEM_SCHEMA_NAME&&(r.includes(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await l2(e.hdb_auth_header,t,r),n=f2(e.schema,e.table),i=await d2.openEnvironment(n,e.table),o=await _2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await E2(e,o)}catch(c){h2.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(m2,"lmdbUpdateRecords")});var YI=g((U_e,$I)=>{"use strict";var p2=M().OPERATIONS_ENUM,Gp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=p2.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};$I.exports=Gp});var WI=g((B_e,KI)=>{"use strict";var v_e=YI(),S2=Dc(),T2=Mc(),g2=Y_(),Wc=M(),R2=ko().upsertRecords,A2=We(),{getSchemaPath:O2}=Je(),b2=qc(),N2=$(),{handleHDBError:y2,hdb_errors:w2}=se();KI.exports=I2;async function I2(e){let t;try{t=S2(e)}catch(u){throw y2(u,u.message,w2.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;T2(e,s,r.hash_attribute),e.schema!==Wc.SYSTEM_SCHEMA_NAME&&(s.includes(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await g2(e.hdb_auth_header,r,s),i=O2(e.schema,e.table),o=await A2.openEnvironment(i,e.table),c=await R2(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await b2(e,c)}catch(u){N2.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(I2,"lmdbUpsertRecords")});var zI=g((x_e,QI)=>{"use strict";var Fp=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};QI.exports=Fp});var XI=g((G_e,JI)=>{"use strict";var kp=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};JI.exports=kp});var eC=g((V_e,ZI)=>{"use strict";var Vp=We(),{getTransactionAuditStorePath:C2}=Je(),k_e=zI(),Qc=dt(),D2=Q(),jI=XI(),L2=require("util").promisify,M2=L2(setTimeout),U2=1e4,P2=100;ZI.exports=v2;async function v2(e){let t=C2(e.schema,e.table),r=await Vp.openEnvironment(t,e.table,!0),s=Vp.listDBIs(r);Vp.initializeDBIs(r,Qc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new jI;do n=await B2(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await M2(P2);while(n.transactions_deleted>0);return i}a(v2,"deleteAuditLogsBefore");async function B2(e,t){let r=new jI;try{let s=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];D2.isEmpty(c)||(n=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>U2)break}return await n,r}catch(s){throw s}}a(B2,"deleteTransactions")});var rC=g((Y_e,tC)=>{"use strict";var $p=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};tC.exports=$p});var nC=g((Q_e,sC)=>{"use strict";var H2=Zs(),x2=sa(),W_e=rC(),en=M(),q2=Q(),Yp=We(),G2=Fi(),F2=Yc(),k2=Fc(),{getSchemaPath:V2}=Je();sC.exports=$2;async function $2(e,t=!0){let r;e.schema===en.SYSTEM_SCHEMA_NAME?r=G2[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await K2(e),n=V2(e.schema,e.table),i=await Yp.openEnvironment(n,e.table);return t===!0&&await Y2(e,i,r.hash_attribute),Yp.dropDBI(i,e.attribute),s}a($2,"lmdbDropAttribute");async function Y2(e,t,r){let s=Yp.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(Y2,"removeAttributeFromAllObjects");async function K2(e){let t=new H2(en.SYSTEM_SCHEMA_NAME,en.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await F2(t)).filter(o=>o[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(q2.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[en.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new x2(en.SYSTEM_SCHEMA_NAME,en.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return k2(i)}a(K2,"dropAttributeFromSystem")});var lC=g((X_e,uC)=>{"use strict";var Kp=We(),na=dt(),J_e=wr(),Wp=M(),iC=Q(),{getTransactionAuditStorePath:W2}=Je(),Q2=ea(),td=Xo(),z2=$();uC.exports=J2;async function J2(e){let t=W2(e.schema,e.table),r=await Kp.openEnvironment(t,e.table,!0),s=Kp.listDBIs(r);Kp.initializeDBIs(r,na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return oC(r,e.search_values);case Wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,j2(r,e.search_values,n);case Wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return X2(r,e.search_values);default:return oC(r)}}a(J2,"readAuditLog");function oC(e,t=[0,Date.now()]){iC.isEmpty(t[0])&&(t[0]=0),iC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new td,n))}a(oC,"searchTransactionsByTimestamp");function X2(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,cC(e,i))}return Object.fromEntries(r)}a(X2,"searchTransactionsByUsername");function j2(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=Q2.equals(e,na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,na.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=cC(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);aC(u,"records",r,l,o),aC(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(j2,"searchTransactionsByHashValues");function aC(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new td(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new td(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(aC,"loopRecords");function cC(e,t){let r=[];try{let s=e.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new td,i);r.push(o)}}catch(i){z2.warn(i)}return r}catch(s){throw s}}a(cC,"batchSearchTransactions")});var dC=g((tde,_C)=>{"use strict";var{getSchemaPath:Z_e}=Je(),ede=We(),{database:Z2}=(Ae(),ne(Ge));_C.exports={writeTransaction:eJ};async function eJ(e,t,r){return Z2({database:e,table:t}).transaction(r)}a(eJ,"writeTransaction")});var mC=g((sde,hC)=>{"use strict";var{getSchemaPath:fC}=Je(),EC=We();hC.exports={flush:tJ,resetReadTxn:rJ};async function tJ(e,t){return(await EC.openEnvironment(fC(e,t),t.toString())).flushed}a(tJ,"flush");async function rJ(e,t){try{(await EC.openEnvironment(fC(e,t),t.toString())).resetReadTxn()}catch{}}a(rJ,"resetReadTxn")});var gC=g((ide,TC)=>{"use strict";var{Readable:sJ}=require("stream"),{getDatabases:nJ}=(Ae(),ne(Ge)),{readSync:iJ,openSync:oJ,createReadStream:pC}=require("fs"),{open:aJ}=require("lmdb"),SC=c_(),cJ=l_(),{AUDIT_STORE_OPTIONS:uJ}=(xi(),ne(RC)),{INTERNAL_DBIS_NAME:lJ,AUDIT_STORE_NAME:_J}=dt();TC.exports=fJ;var Qp=32768,dJ=100;async function fJ(e){let t=e.database||e.schema||"data",r=nJ()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=aJ({noSync:!0,maxDbs:cJ.MAX_DBS}),f,E=d.openDB(lJ,new SC(!1)),h=l.useReadTransaction(),p=0,S=a(async function(b,R){R.encoding="binary",R.encoder=void 0;let L=d.openDB(b,R),H=l.openDB(b,R);for(let{key:P,version:k,value:B}of H.getRange({transaction:h,versions:H.useVersions}))f=L.put(P,B,k),p++%dJ===0&&(await new Promise(J=>setTimeout(J,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:b,value:R}of l.getRange({transaction:h,start:!1}))if(n.some(L=>b.startsWith?.(L+"/"))){E.put(b,R);let[,L]=b.split("/"),H=!L,P=new SC(!H,H);await S(b,P)}e.include_audit&&await S(_J,Object.assign({},uJ)),await f;let T=pC(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=oJ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Qp);iJ(c,_,0,Qp),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=pC(null,{fd:c,start:Qp}),f=new sJ.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",s),_}}a(fJ,"getBackup")});var bC=g((ade,OC)=>{"use strict";var EJ=$(),{handleHDBError:hJ}=se(),mJ=vb(),pJ=T_(),SJ=pp(),TJ=Pw(),gJ=Fc(),RJ=bp(),AJ=oI(),OJ=hI(),bJ=Yc(),NJ=OI(),yJ=PI(),wJ=FI(),IJ=VI(),CJ=WI(),DJ=eC(),LJ=Up(),MJ=nC(),UJ=lC(),PJ=dC(),AC=mC(),vJ=gC(),zp=class extends mJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return NJ(t)}async getDataByHash(t){return await RJ(t)}async searchByHash(t){return await AJ(t)}async getDataByValue(t,r){return await OJ(t,r)}async searchByValue(t){return await bJ(t)}async createSchema(t){return await TJ(t)}async dropSchema(t){return await yJ(t)}async createTable(t,r){return await wJ(t,r)}async dropTable(t){return await LJ(t)}async createAttribute(t){return await pJ(t)}async createRecords(t){return await SJ(t)}async updateRecords(t){return await IJ(t)}async upsertRecords(t){try{return await CJ(t)}catch(r){throw hJ(r,null,null,EJ.ERR,r)}}async deleteRecords(t){return await gJ(t)}async dropAttribute(t){return await MJ(t)}async deleteAuditLogsBefore(t){return await DJ(t)}async readAuditLog(t){return await UJ(t)}writeTransaction(t,r,s){return PJ.writeTransaction(t,r,s)}flush(t,r){return AC.flush(t,r)}resetReadTxn(t,r){return AC.resetReadTxn(t,r)}getBackup(t){return vJ(t)}};OC.exports=zp});function GJ(){qJ=setInterval(function(){for(let e of Jp)if(e.stale){let t=e[Oe]?.url;wC.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},xJ).unref()}var Xp,yC,wC,BJ,Jp,HJ,zc,NC,to,rd,xJ,qJ,jp=Re(()=>{Xp=x(wr()),yC=x(se()),wC=x($());Os();BJ=100,Jp=new Set,HJ=25e3,to=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),Jp.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Jp.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(zc&&performance.now()-NC>HJ)throw new yC.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,Xp.getNextMonotonicTime)());let s=t.retries||0;if(this.validated<this.writes.length)try{let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;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=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let T=S();E?E.push?E.push(T):E=[E,T]:E=T}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(l){throw this.abort(),l}s||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<BJ>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return zc||(zc=n,NC=performance.now(),zc.then(()=>{zc=null})),n.then(l=>l?(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=s+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},rd=class extends to{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Xp.getNextMonotonicTime)())}getReadTxn(){}},xJ=3e4;a(GJ,"startMonitoringTxns");GJ()});function je(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 s=e.transaction=new to;e.timestamp&&(s.timestamp=e.timestamp),s[Oe]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit({letItLinger:r?.letItLinger});return u.then?u.then(()=>c):c}function o(c){throw s.abort({}),c}}var IC,ro=Re(()=>{IC=require("../index");Os();jp();a(je,"transaction");(0,IC._assignPackageExport)("transaction",je);je.commit=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};je.abort=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var HC={};Ye(HC,{ResourceBridge:()=>tS});function rS({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 DC(e,t){let r=tn(e),s=rS(e,r);if(!r)throw new Ds.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;je(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:n,select:s},i);return l=l&&nd(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function tn(e){let t=e.database||e.schema||kJ,r=Ls()[t];if(!r)throw(0,Ds.handleHDBError)(new Error,FJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function LC(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*MC(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var UC,sd,Ds,PC,vC,Ms,Zp,eS,BC,FJ,kJ,VJ,$J,CC,tS,xC=Re(()=>{"use strict";UC=x(bC()),sd=x(ta()),Ds=x(se());Ae();PC=x(Dc()),vC=x(Mc()),Ms=x(M()),Zp=x(Rn()),eS=x(Cs()),BC=x(Q());ro();id();({HDB_ERROR_MSGS:FJ}=Ds.hdb_errors),kJ="data",VJ=1e4,$J=10,tS=class extends UC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),CC=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,sd.default)(t,"conditions");if(r)throw(0,Ds.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=tn(t);if(!s)throw new Ds.ClientError(`Table ${t.table} not found`);let n=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"),s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:rS(t,s),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ds.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ct({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await tn(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=tn(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){tn(t).dropTable()}createSchema(t){return Jc({database:t.schema,table:null}),Zp.signalSchemaChange(new eS.SchemaEventMsg(process.pid,Ms.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await sS(t.schema),Zp.signalSchemaChange(new eS.SchemaEventMsg(process.pid,Ms.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,CC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,PC.default)(t);(0,vC.default)(t,s,r.primaryKey);let n,i=Ls()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return je(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=nd(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:_}})}async deleteRecords(t){let r=Ls()[t.schema][t.table],s={user:t.hdb_user};return je(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return LC(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Ls()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ds.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:Ms.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,BC.async_set_timeout)($J),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%VJ===0&&await _();return u.length>0&&await _(),n?LC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,sd.default)(t,"hashes");if(r)throw r;return DC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of DC(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&Ms.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 s=(0,sd.default)(t,"value");if(s)throw s;let n=tn(t);if(!n)throw new Ds.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===Ms.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:rS(t,n)})}async getDataByValue(t,r){let s=new Map,n=tn(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){tn({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return tn(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=tn(t),s={};switch(t.search_type){case Ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case Ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of MC(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return MC(r,t.search_values?.[0],t.search_values?.[1])}}};a(rS,"getSelect");a(DC,"getRecords");a(tn,"getTable");a(LC,"createDeleteResponse");a(MC,"groupRecordsInHistory")});var ys=g((Ade,qC)=>{"use strict";var{ResourceBridge:YJ}=(xC(),ne(HC)),KJ=ee();KJ.initSync();var od;function WJ(){return od||(od=new YJ,od)}a(WJ,"getBridge");qC.exports=WJ()});var VC=g((bde,kC)=>{"use strict";var GC=require("lodash"),Xc=require("mathjs"),QJ=require("jsonata"),FC=Q();kC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?GC.uniqWith(e,GC.isEqual):e,searchJSON:zJ,mad:jc.bind(null,Xc.mad),mean:jc.bind(null,Xc.mean),mode:jc.bind(null,Xc.mode),prod:jc.bind(null,Xc.prod),median:jc.bind(null,Xc.median)};function jc(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(jc,"aggregateFunction");function zJ(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(FC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),FC.isEmpty(this.__ala__.res[r])){let s=QJ(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(zJ,"searchJSON")});var YC=g((yde,$C)=>{"use strict";var Et=require("moment"),nS="YYYY-MM-DDTHH:mm:ss.SSSZZ";Et.suppressDeprecationWarnings=!0;$C.exports={current_date:()=>Et().utc().format("YYYY-MM-DD"),current_time:()=>Et().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Et(e).utc().format("YYYY");case"month":return Et(e).utc().format("MM");case"day":return Et(e).utc().format("DD");case"hour":return Et(e).utc().format("HH");case"minute":return Et(e).utc().format("mm");case"second":return Et(e).utc().format("ss");case"millisecond":return Et(e).utc().format("SSS");default:break}},date:e=>Et(e).utc().format(nS),date_format:(e,t)=>Et(e).utc().format(t),date_add:(e,t,r)=>Et(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Et(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Et(e).utc(),n=Et(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Et().utc().valueOf(),get_server_time:()=>Et().format(nS),offset_utc:(e,t)=>Et(e).utc().utcOffset(t).format(nS)}});var zC=g((wde,QC)=>{"use strict";var JJ=require("@turf/area"),XJ=require("@turf/length"),jJ=require("@turf/circle"),ZJ=require("@turf/difference"),e4=require("@turf/distance"),t4=require("@turf/boolean-contains"),r4=require("@turf/boolean-equal"),s4=require("@turf/boolean-disjoint"),n4=require("@turf/helpers"),KC=M(),me=Q(),bn=$();QC.exports={geoArea:i4,geoLength:o4,geoCircle:a4,geoDifference:c4,geoDistance:WC,geoNear:u4,geoContains:l4,geoEqual:_4,geoCrosses:d4,geoConvert:f4};function i4(e){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return JJ.default(e)}catch(t){return bn.trace(t,e),NaN}}a(i4,"geoArea");function o4(e,t){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return XJ.default(e,{units:t||"kilometers"})}catch(r){return bn.trace(r,e),NaN}}a(o4,"geoLength");function a4(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return jJ.default(e,t,{units:r||"kilometers"})}catch(s){return bn.trace(s,e,t),NaN}}a(a4,"geoCircle");function c4(e,t){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return ZJ(e,t)}catch(r){return bn.trace(r,e,t),NaN}}a(c4,"geoDifference");function WC(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return e4.default(e,t,{units:r||"kilometers"})}catch(s){return bn.trace(s,e,t),NaN}}a(WC,"geoDistance");function u4(e,t,r,s){if(me.isEmpty(e)||me.isEmpty(t))return!1;if(me.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return WC(e,t,s)<=r}catch(n){return bn.trace(n,e,t),!1}}a(u4,"geoNear");function l4(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return t4.default(e,t)}catch(r){return bn.trace(r,e,t),!1}}a(l4,"geoContains");function _4(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return r4.default(e,t)}catch(r){return bn.trace(r,e,t),!1}}a(_4,"geoEqual");function d4(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return!s4.default(e,t)}catch(r){return bn.trace(r,e,t),!1}}a(d4,"geoCrosses");function f4(e,t,r){if(me.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(me.isEmpty(t))throw new Error("geo_type is required");if(me.isEmpty(KC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(KC.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=me.autoCastJSON(e)),n4[t](e,r)}a(f4,"geoConvert")});var ad=g((Cde,JC)=>{var so=VC(),xr=YC(),rn=zC();JC.exports=e=>{e.aggr.mad=e.aggr.MAD=so.mad,e.aggr.mean=e.aggr.MEAN=so.mean,e.aggr.mode=e.aggr.MODE=so.mode,e.aggr.prod=e.aggr.PROD=so.prod,e.aggr.median=e.aggr.MEDIAN=so.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=so.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=so.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=xr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=xr.current_time,e.fn.extract=e.fn.EXTRACT=xr.extract,e.fn.date=e.fn.DATE=xr.date,e.fn.date_format=e.fn.DATE_FORMAT=xr.date_format,e.fn.date_add=e.fn.DATE_ADD=xr.date_add,e.fn.date_sub=e.fn.DATE_SUB=xr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=xr.date_diff,e.fn.now=e.fn.NOW=xr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=xr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=xr.get_server_time,e.fn.getdate=e.fn.GETDATE=xr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=xr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=rn.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=rn.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=rn.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=rn.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=rn.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=rn.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=rn.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=rn.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=rn.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=rn.geoNear}});var eD=g((Dde,ZC)=>{"use strict";var Zc=require("lodash"),lr=require("alasql");lr.options.cache=!1;var E4=ad(),XC=require("clone"),cd=require("recursive-iterator"),le=$(),Ie=Q(),ia=ys(),h4=M(),{hdb_errors:m4}=se(),{getDatabases:jC}=(Ae(),ne(Ge)),p4="IS NULL",Us="There was a problem performing this search. Please check the logs and try again.";E4(lr);var iS=class{static{a(this,"SQLSearch")}constructor(t,r){if(Ie.isEmpty(t))throw le.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),Ie.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!Ie.isEmptyOrZeroLength(s))return le.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw le.error("Error thrown from checkEmptySQL in SQLSearch class method search."),le.error(s),new Error(Us)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw le.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),le.error(s),new Error(Us)}if(Object.keys(this.data).length===0)return le.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw le.error("Error thrown from processJoins in SQLSearch class method search."),le.error(s),new Error(Us)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw le.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),le.error(s),new Error(Us)}try{return t=await this._finalSQL(),t}catch(s){throw le.error("Error thrown from finalSQL in SQLSearch class method search."),le.error(s),new Error(Us)}}_getColumns(){let t=new cd(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(XC(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Zc.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=jC()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Ie.isEmpty(this.statement.where)){le.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new cd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Ie.isEmpty(r)&&r.right)if(Ie.isNotEmptyAndHasValue(r.right.value)){let s=Ie.autoCast(r.right.value);[!0,!1].indexOf(s)>=0&&(r.right=new lr.yy.LogicValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=Ie.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new lr.yy.LogicValue({value:i}):s instanceof lr.yy.StringValue&&Ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new lr.yy.NumValue({value:i}))});if(t){le.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new cd(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Ie.isEmpty(h4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Ie.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Ie.isEmptyOrZeroLength(r.left.columnid)||Ie.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Ie.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!Ie.isEmpty(r.right.value)||!Ie.isEmpty(r.left.value)?s.add(Ie.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)s.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&Ie.isEmptyOrZeroLength(this.statement.from)&&Ie.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Zc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(Ie.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);Ie.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&!Ie.isEmptyOrZeroLength(this.columns.columns))return t;if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&Ie.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await lr.promise(r)}catch(r){throw le.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),le.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(XC(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(Ie.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(p4)>-1&&this.tables.forEach(n=>{let i={columnid:jC()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Zc.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!Ie.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Ie.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await ia.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw le.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),le.error(l),new Error(Us)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await ia.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,E))}))}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),le.error(l),new Error(Us)}else if(!Ie.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Ie.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await ia.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),le.error(l),new Error(Us)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await ia.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),le.error(l),new Error(Us)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof lr.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new lr.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new lr.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new lr.yy.FuncValue:new lr.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.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={};n.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${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 "${p}.${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 u=this.statement.where?"WHERE "+this.statement.where:"";u=u.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 l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=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(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,n);f=await lr.promise(h,t),t=null}catch(E){throw le.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),le.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 p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=Zc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,T=p.length;S<T;S++){let b=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[b]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new cd(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Zc.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw le.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),le.error(i),new Error(Us)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await ia.getDataByHash(c),_=n.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=n.columns[h],S=E[p]===void 0?null:E[p];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw le.error("Error thrown from getDataByHash function in SQLSearch class method getData."),le.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let s;try{let n=this._buildSQL();le.trace(`Final SQL: ${n}`),s=await lr.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),le.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw le.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),le.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return le.error(m4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),le.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(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await ia.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw le.error("There was an error when processing this SQL operation. Check your logs"),le.error(o),new Error(Us)}}return Object.values(Object.values(this.data)[0].__merged_data)}};ZC.exports=iS});var Dr=g((Mde,tD)=>{"use strict";var S4=Ub();tD.exports={searchByConditions:g4,searchByHash:R4,searchByValue:A4,search:O4};var oS=ys(),{transformReq:aS}=Q(),T4=eD();async function g4(e){return aS(e),oS.searchByConditions(e)}a(g4,"searchByConditions");async function R4(e){aS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of oS.searchByHash(e))r&&t.push(r);return t}a(R4,"searchByHash");async function A4(e){aS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of oS.searchByValue(e))t.push(r);return t}a(A4,"searchByValue");function O4(e,t){try{let r=new S4(e);r.validate(),new T4(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(O4,"search")});var ud=g((Pde,rD)=>{"use strict";var b4=ys();rD.exports={writeTransaction:N4};function N4(e,t,r){return b4.writeTransaction(e,t,r)}a(N4,"writeTransaction")});var oD=g((Hde,iD)=>{"use strict";var y4=Dr(),w4=gn(),sD=$(),I4=Lr(),Bde=ud(),C4=require("clone"),uS=require("alasql"),D4=ad(),nD=require("util"),L4=nD.promisify(w4.getTableSchema),M4=nD.promisify(y4.search),U4=M(),cS=Q();D4(uS);iD.exports={update:v4};var P4="There was a problem performing this update. Please check the logs and try again.";async function v4({statement:e,hdb_user:t}){let r=await L4(e.table.databaseid,e.table.tableid),s=B4(e.columns);cS.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=C4(n),c=cS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=uS.parse(u).statements[0],l=await M4(_),d=H4(s,l);return x4(o,d,t)}a(v4,"update");function B4(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=uS.compile(`SELECT ${r.expression.toString()} AS [${U4.FUNC_VAL}] FROM ?`)}),t}catch(t){throw sD.error(t),new Error(P4)}}a(B4,"createUpdateRecord");function H4(e,t){return cS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(H4,"buildUpdateRecords");async function x4(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await I4.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){sD.error(`Error delete new_attributes from update response: ${i}`)}return n}a(x4,"updateRecords")});var cD=g((Fde,aD)=>{var q4=require("alasql"),G4=Dr(),F4=$(),k4=ys(),_S=require("util"),lS=Q(),V4=M(),$4=gn(),qde=ud(),Gde=Lr(),Y4="record",K4="successfully deleted",W4=_S.callbackify(X4),Q4=_S.promisify(G4.search),z4=_S.promisify($4.getTableSchema);aD.exports={convertDelete:W4};function J4(e){return`${e.deleted_hashes.length} ${Y4}${e.deleted_hashes.length===1?"":"s"} ${K4}`}a(J4,"generateReturnMessage");async function X4({statement:e,hdb_user:t}){let r=await z4(e.table.databaseid,e.table.tableid);lS.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=lS.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=q4.parse(o).statements[0],u={operation:V4.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await Q4(c);let _=await k4.deleteRecords(u);return lS.isEmptyOrZeroLength(_.message)&&(_.message=J4(_)),delete _.txn_time,_}catch(_){throw F4.error(_),_.hdb_code?_.message:_}}a(X4,"convertDelete")});var fD=g((Vde,dD)=>{"use strict";var j4=ei(),{hdb_errors:uD}=se(),{getDatabases:lD}=(Ae(),ne(Ge));dD.exports={checkSchemaExists:_D,checkSchemaTableExists:Z4,schema_describe:j4};async function _D(e){if(!lD()[e])return uD.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(_D,"checkSchemaExists");async function Z4(e,t){let r=await _D(e);if(r)return r;if(!lD()[e][t])return uD.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Z4,"checkSchemaTableExists")});var eu=g((Yde,e3)=>{e3.exports={name:"harperdb",version:"4.3.0-beta.12",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"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/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.11.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.25.1","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.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"3.0.0-beta.9",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.2.0","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.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",yaml:"2.3.4"},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.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.3.3","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 iu={};Ye(iu,{addAnalyticsListener:()=>nu,recordAction:()=>qr,recordActionBinary:()=>ns,setAnalyticsEnabled:()=>t3});function t3(e){AD=e}function qr(e,t,r,s,n){if(!AD)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=dd.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=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:s,type:n},dd.set(i,o)}ld||r3()}function ns(e,t,r,s,n){qr(!!e,t,r,s,n)}function nu(e){ND.push(e)}function r3(){ld=performance.now(),setTimeout(async()=>{let e=performance.now()-ld;ld=0;let t=[],r={time:Date.now(),period:e,threadId:no.threadId,metrics:t};for(let[n,i]of dd){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of yD){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=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 wD()}let s=process.memoryUsage();t.push({metric:"memory",threadId:no.threadId,byThread:!0,...s});for(let n of ND)n(t);dd=new Map,no.parentPort?no.parentPort.postMessage({type:bD,report:r}):DD({report:r})},OD).unref()}async function s3(e,t=6e4){let r=ES(),s=ID(),n=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,tu.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),s.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,tu.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),p(T-S)})}),i;for(let p of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(p.value?.time){i=p.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,u=new Map,_=[],l;for(let{key:p,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(p>o+t)break}else o=p;l=p;let{metrics:T,threadId:b}=S;for(let R of T||[]){let{path:L,method:H,type:P,metric:k,count:B,total:J,distribution:z,threads:X,...Te}=R;B||(B=1);let ce=k+(L?"-"+L:"");H!==void 0&&(ce+="-"+H),P!==void 0&&(ce+="-"+P);let de=c.get(ce);if(de){if(de.threads){let Be=de.threads[b];if(Be)de=Be;else{de.threads[b]=Object.assign({},Te);continue}}de.count||(de.count=1);let Le=de.count;for(let Be in Te){let Ct=Te[Be];typeof Ct=="number"&&(de[Be]=(de[Be]*Le+Ct*B)/(Le+B))}de.count+=B,J>=0&&(de.total+=J,de.ratio=de.total/de.count)}else de=Object.assign({period:t},R),delete de.distribution,c.set(ce,de),de.byThread&&(de.threads=[],de.threads[b]=Object.assign({},Te),_.push(de));if(z){z=z.map(Be=>typeof Be=="number"?{value:Be,count:1}:Be);let Le=u.get(ce);Le?Le.push(...z):u.set(ce,z)}}await wD()}for(let p of _){let{path:S,method:T,type:b,metric:R,count:L,total:H,distribution:P,threads:k,...B}=p;k=k.filter(J=>J);for(let J in B){if(typeof p[J]!="number")continue;let z=0;for(let X of k){let Te=X[J];typeof Te=="number"&&(z+=Te)}p[J]=z}p.count=k.length,delete p.threads,delete p.byThread}for(let[p,S]of u){let T=c.get(p);S.sort((Be,Ct)=>Be.value>Ct.value?1:-1);let b=T.count-1,R=[],L=0,H=0,P;for(let Be of yD){let Ct=b*Be;for(;L<Ct;)P=S[H++],L+=P.count,H===1&&L--;let ql=S[H>1?H-2:0];P||(P=S[0]),R.push(P.value-(P.value-ql.value)*(L-Ct)/P.count)}let[k,B,J,z,X,Te,ce,de,Le]=R;Object.assign(T,{p1:k,p10:B,p25:J,median:z,p75:X,p90:Te,p95:ce,p99:de,p999:Le})}let d;for(let[p,S]of c)S.id=(0,_d.getNextMonotonicTime)(),S.time=l,s.primaryStore.put(S.id,S,{append:!0}).then(T=>{T||s.primaryStore.put(S.id,S)}),d=!0;let f=Date.now(),{idle:E,active:h}=performance.eventLoopUtilization();if(d||h*10>E){let p=(0,_d.getNextMonotonicTime)(),S={id:p,metric:"main-thread-utilization",idle:E-ED,active:h-hD,taskQueueLatency:await n,time:f,...process.memoryUsage()};s.primaryStore.put(p,S,{append:!0}).then(T=>{T||s.primaryStore.put(p,S)})}ED=E,hD=h}async function mD(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function ES(){return pD||(pD=ct({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function ID(){return SD||(SD=ct({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function o3(){CD=!0;let e=(0,su.get)(fS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await s3(OD,e),await mD(ES(),n3),await mD(ID(),i3)},Math.min(e/2,2147483647)).unref()}function DD(e,t){let r=e.report;r.threadId=t?.threadId||no.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(TD+=s.mean*s.count);r.totalBytesProcessed=TD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(gD.get(t))}),gD.set(t,t.performance.eventLoopUtilization())),r.id=(0,_d.getNextMonotonicTime)(),ES().primaryStore.put(r.id,r),CD||o3(),a3&&(LD=u3(r))}async function u3(e){if(await LD,!ci){let r=(0,ru.dirname)((0,tu.getLogFilePath)());try{ci=await(0,dS.open)((0,ru.join)(r,"analytics.log"),"r+")}catch{ci=await(0,dS.open)((0,ru.join)(r,"analytics.log"),"w+")}}let t=(await ci.stat()).size;if(t>c3){let r=Buffer.alloc(t);await ci.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ci.write(r,{position:0}),await ci.truncate(r.length),t=r.length}await ci.write(JSON.stringify(e)+`
8
+ `,t)}var no,RD,tu,ru,dS,_d,su,fS,dd,AD,ld,OD,bD,ND,yD,ED,hD,wD,n3,i3,pD,SD,CD,TD,gD,a3,LD,ci,c3,Nn=Re(()=>{no=require("worker_threads"),RD=x(Ke());Ae();tu=x($()),ru=require("path"),dS=require("fs/promises"),_d=x(wr()),su=x(ee()),fS=x(M());nr();(0,su.initSync)();dd=new Map,AD=(0,su.get)(fS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(t3,"setAnalyticsEnabled");a(qr,"recordAction");tt.recordAnalytics=qr;a(ns,"recordActionBinary");ld=0,OD=1e3,bD="analytics-report",ND=[];a(nu,"addAnalyticsListener");yD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(r3,"sendAnalytics");a(s3,"aggregation");ED=0,hD=0,wD=a(()=>new Promise(setImmediate),"rest");a(mD,"cleanup");n3=36e5,i3=31536e6;a(ES,"getRawAnalyticsTable");a(ID,"getAnalyticsTable");(0,RD.setChildListenerByType)(bD,DD);a(o3,"startScheduledTasks");TD=0,gD=new Map,a3=!1;a(DD,"recordAnalytics");c3=1e6;a(u3,"logAnalytics")});var gS=g((nfe,GD)=>{"use strict";var{decode:l3}=require("msgpackr"),{isMainThread:tfe,parentPort:rfe,threadId:sfe}=require("worker_threads"),ou=st(),oa=Fe(),pS=M(),zt=$(),mS=ee(),_3=M(),{onMessageByType:d3}=Ke(),UD=Tn(),{recordAction:f3,recordActionBinary:E3}=(Nn(),ne(iu)),{publishToStream:h3}=ou,{ConsumerEvents:m3}=require("nats"),p3=Dr(),{promisify:S3}=require("util"),PD=S3(setTimeout),hd=1e4,md,Ed,T3,g3,vD,au=new Map,aa=new Map;GD.exports={initialize:SS,ingestConsumer:TS,setSubscription:R3,setIgnoreOrigin:b3,getDatabaseSubscriptions:O3,updateConsumer:BD};async function SS(){d3(pS.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async s=>{await BD(s)}),vD=!0,zt.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await ou.getNATSReferences();md=e,Ed=e.info.server_name,T3=t,g3=r}a(SS,"initialize");async function BD(e){if(e.status==="start"){let{js:t,jsm:r}=await HD(e.node_domain_name);TS(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=au.get(e.stream_name+e.node_domain_name);t&&(zt.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),au.set(e.stream_name+e.node_domain_name,"close")),aa.get(e.node_domain_name)==="failed"&&aa.set(e.node_domain_name,"close")}}a(BD,"updateConsumer");var pd=new Map;function R3(e,t,r){let s=pd.get(e);s||pd.set(e,s=new Map),s.set(t,r),vD||SS().then(A3)}a(R3,"setSubscription");async function A3(){let e=await p3.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+oa.SERVER_SUFFIX.LEAF,s,n;for(let i of t.subscriptions)if(i.subscribe===!0){if(!s&&({js:s,jsm:n}=await HD(r),!s))break;let{schema:o,table:c}=i,u=UD.createNatsTableStreamName(o,c);TS(u,s,n,r)}}}a(A3,"accessConsumers");async function HD(e){let t,r,s=1;for(;!r;)try{t=await md.jetstream({domain:e}),r=await md.jetstreamManager({domain:e})}catch(n){if(aa.get(e)==="close")break;aa.set(e,"failed"),s%10===1&&zt.warn("Nats ingest attempting to connect to:",e,"Nats error:",n.message);let i=s++*100<hd?s++*100:hd;await PD(i)}return{js:t,jsm:r}}a(HD,"connectToRemoteJS");function O3(){return pd}a(O3,"getDatabaseSubscriptions");var xD;function b3(e){xD=e}a(b3,"setIgnoreOrigin");var qD=100,MD=new Array(qD),fd=0;async function TS(e,t,r,s){let{connection:n}=await ou.getNATSReferences();md=n,Ed=n.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,Ed),zt.notify("Initializing ingest consumer for node:",s,"stream:",e)}catch(_){if(aa.get(s)==="close")break;o%10===1&&zt.warn("Nats ingest error getting consumer:",s,"stream:",e,"Nats error:",_.message),_.code==="404"&&(zt.notify("Nats ingest creating consumer for node:",s,"stream:",e),i=await ou.createConsumer(r,e,Ed,new Date(Date.now()).toISOString()));let l=o++*100<hd?o++*100:hd;await PD(l)}let c=!1,u;for(;!c;){if(au.get(e+s)==="close"||aa.get(s)==="close"){au.delete(e+s),c=!0;continue}u=await i.consume({max_messages:mS.get(pS.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100}),au.set(e+s,u);let _=!1;(async()=>{for await(let l of await u.status())if(l.type===m3.HeartbeatsMissed){let d=l.data;zt.trace(`${d} clustering ingest consumer heartbeats missed, node: ${s} stream: ${u.consumer.stream}`),d===2&&(zt.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${s} stream: ${u.consumer.stream}`),u.stop(),_=!0)}})();try{for await(let l of u)await MD[fd],MD[fd]=N3(l).catch(d=>{zt.error(d)}),++fd>=qD&&(fd=0)}catch(l){l.message==="consumer deleted"?(zt.notify("Nats consumer deleted, closing messages for node:",s,"stream:",u.consumer.stream),await u.close(),c=!0):zt.error("Error consuming clustering ingest, restarting consumer",l)}ou.clearClientCache(),!c&&_&&await SS()}}a(TS,"ingestConsumer");async function N3(e){let t=l3(e.data);f3(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),zt.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,s=!1,n=mS.get(pS.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(oa.MSG_HEADERS.TRANSACTED_NODES)&&r.values(oa.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(oa.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!xD),E3(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(oa.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;zt.trace("processing message:",o,c,_,(l?"records: "+l.map(L=>L?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),zt.trace(`messageProcessor nats msg id: ${e.headers.get(oa.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let p=new Promise(L=>h=L),{timestamp:S,user:T,node_name:b}=f||{},R=pd.get(c)?.get(_);if(!R)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,t.onCommit=h,R.send(t);else if(l.length===1&&!u)R.send({type:hS(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:S,table:_,onCommit:h,user:T,nodeName:b});else{let L=l.map((H,P)=>({type:hS(o),value:H,expiresAt:E,id:d?.[P],table:_}));for(;u;)L.push({type:hS(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;R.send({type:"transaction",writes:L,table:_,timestamp:S,onCommit:h,user:T,nodeName:b})}mS.get(_3.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&h3(e.subject.split(".").slice(0,-1).join("."),UD.createNatsTableStreamName(c,_),e.headers,e.data),await p}catch(o){zt.error(o)}e.ack()}a(N3,"messageProcessor");function hS(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(hS,"convertOperation")});var st=g((_fe,sL)=>{"use strict";var Mt=ee();Mt.initSync();var y3=require("fs-extra"),w3=require("semver"),lu=require("path"),{monotonicFactory:I3}=require("ulidx"),kD=I3(),C3=require("util"),VD=require("child_process"),D3=C3.promisify(VD.exec),L3=VD.spawn,Ft=Fe(),Ce=M(),Sd=Q(),Ps=$(),Td=Tn(),M3=ud(),cu=Pr(),{broadcast:U3,onMessageByType:P3,getWorkerIndex:v3}=Ke(),{isMainThread:$D}=require("worker_threads"),{Encoder:B3,decode:bS}=require("msgpackr"),YD=new B3,{isEmpty:co}=Sd,KD=ss(),ofe=48*36e11;$D&&P3(Ce.ITC_EVENT_TYPES.RESTART,()=>{_r=void 0,ao=void 0});var{connect:H3,StorageType:x3,RetentionPolicy:q3,AckPolicy:NS,DeliverPolicy:yS,DiscardPolicy:G3,NatsConnection:afe,JetStreamManager:cfe,JetStreamClient:ufe,StringCodec:lfe,JSONCodec:F3,createInbox:wS,headers:k3,ErrorCode:FD}=require("nats"),{PACKAGE_ROOT:V3}=M(),$3=eu(),{recordAction:Y3}=(Nn(),ne(iu)),WD=F3(),K3="clustering",W3=$3.engines[Ft.NATS_SERVER_NAME],Q3=lu.join(V3,"dependencies"),OS=lu.join(Q3,`${process.platform}-${process.arch}`,Ft.NATS_BINARY_NAME),RS,AS,uu,io,oo;sL.exports={runCommand:QD,checkNATSServerInstalled:z3,createConnection:IS,getConnection:gd,getJetStreamManager:_u,getJetStream:JD,getNATSReferences:vs,getServerList:X3,createLocalStream:CS,listStreams:XD,deleteLocalStream:j3,getServerConfig:du,listRemoteStreams:Z3,viewStream:eX,viewStreamIterator:tX,publishToStream:rX,request:iX,reloadNATS:DS,reloadNATSHub:oX,reloadNATSLeaf:aX,extractServerName:nX,requestErrorHandler:cX,createLocalTableStream:tL,createTableStreams:_X,purgeTableStream:rL,purgeSchemaTableStreams:dX,getStreamInfo:fX,updateLocalStreams:hX,closeConnection:J3,getJsmServerName:Rd,addNatsMsgHeader:jD,clearClientCache:zD,updateRemoteConsumer:uX,createConsumer:ZD,updateConsumerIterator:lX};async function QD(e,t=void 0){let{stdout:r,stderr:s}=await D3(e,{cwd:t});if(s)throw new Error(s.replace(`
9
9
  `,""));return r.replace(`
10
- `,"")}a(WD,"runCommand");async function Q3(){try{await N3.access(OS)}catch{return!1}let e=await WD(`${OS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return y3.eq(t,K3)}a(Q3,"checkNATSServerInstalled");async function IS(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await YD.getClusterUser();if(oo(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Ps.trace("create nats connection called");let i=await B3({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Ps.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Ps.error("Error with Nats client connection, connection closed",o),QD()}),i}a(IS,"createConnection");function QD(){_r=void 0,so=void 0,no=void 0,io=void 0}a(QD,"clearClientCache");async function z3(){_r&&(await _r.drain(),_r=void 0,so=void 0,no=void 0,io=void 0)}a(z3,"closeConnection");var _r,io;async function gd(){return io||(io=IS(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),_r=await io),_r||io}a(gd,"getConnection");async function _u(){if(so)return so;oo(_r)&&await gd();let{domain:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(oo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return so=await _r.jetstreamManager({domain:e,timeout:6e4}),so}a(_u,"getJetStreamManager");async function zD(){if(no)return no;oo(_r)&&await gd();let{domain:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(oo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return no=_r.jetstream({domain:e,timeout:6e4}),no}a(zD,"getJetStream");async function vs(){let e=_r||await gd(),t=so||await _u(),r=no||await zD();return{connection:e,jsm:t,js:r}}a(vs,"getNATSReferences");async function J3(e){let t=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await YD.getClusterUser(),n=await IS(t,r,s),i=wS(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=KD.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await Sd.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(J3,"getServerList");async function CS(e,t){let{jsm:r}=await vs(),s=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:H3.File,retention:x3.Limits,subjects:t,discard:q3.Old,max_msgs:n,max_bytes:i,max_age:s})}a(CS,"createLocalStream");async function JD(){let{jsm:e}=await vs(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(JD,"listStreams");async function j3(e){let{jsm:t}=await vs();await t.streams.delete(e)}a(j3,"deleteLocalStream");async function X3(e){let{connection:t}=await vs(),r=[],s=wS(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(KD.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(X3,"listRemoteStreams");async function Z3(e,t=void 0,r=void 0){let{jsm:s,js:n}=await vs(),i=FD(),o={durable_name:i,ack_policy:NS.Explicit};t&&(o.deliver_policy=yS.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=bS(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Ft.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(Z3,"viewStream");async function*ej(e,t=void 0,r=void 0){let{jsm:s,js:n}=await vs(),i=FD(),o={durable_name:i,ack_policy:NS.Explicit};t&&(o.deliver_policy=yS.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=bS(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(Ft.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(ej,"viewStreamIterator");async function tj(e,t,r,s){Ps.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=jD(s,r);let{js:n}=await vs(),i=await Rd(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:$D.encode(s);try{Ps.trace(`publishToStream publishing to subject: ${o}`),$3(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return ZD(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Ps.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await CS(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(tj,"publishToStream");function jD(e,t){t===void 0&&(t=F3());let r=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Ft.MSG_HEADERS.ORIGIN)&&r&&t.append(Ft.MSG_HEADERS.ORIGIN,r),t}a(jD,"addNatsMsgHeader");function du(e){e=e.toLowerCase();let t=lu.join(Mt.get(Ce.CONFIG_PARAMS.ROOTPATH),Y3);if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return oo(AS)&&(AS={port:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ft.SERVER_SUFFIX.HUB,config_file:Ft.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:lu.join(t,Ft.PID_FILES.HUB),hdb_nats_path:t}),AS;if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return oo(RS)&&(RS={port:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ft.SERVER_SUFFIX.LEAF,config_file:Ft.NATS_CONFIG_FILES.LEAF_SERVER,domain:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ft.SERVER_SUFFIX.LEAF,pid_file_path:lu.join(t,Ft.PID_FILES.LEAF),hdb_nats_path:t}),RS;Ps.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(du,"getServerConfig");async function XD(e,t,r,s){try{await e.consumers.add(t,{ack_policy:NS.Explicit,durable_name:r,deliver_policy:yS.StartTime,opt_start_time:s})}catch(n){if(n.message!=="consumer already exists")throw n}}a(XD,"createConsumer");async function rj(e,t,r){await e.consumers.delete(t,r)}a(rj,"removeConsumer");function sj(e){return e.split(".")[1]}a(sj,"extractServerName");async function nj(e,t,r=6e4,s=wS()){if(!Sd.isObject(t))throw new Error("data param must be an object");let n=$D.encode(t),{connection:i}=await vs(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return bS(c.data)}a(nj,"request");function DS(e){return new Promise(async(t,r)=>{let s=D3(OS,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(DS,"reloadNATS");async function ij(){let{pid_file_path:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await DS(e)}a(ij,"reloadNATSHub");async function oj(){let{pid_file_path:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await DS(e)}a(oj,"reloadNATSLeaf");function aj(e,t,r){let s;switch(e.code){case GD.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case GD.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(aj,"requestErrorHandler");async function cj(e,t){let r=t+Ft.SERVER_SUFFIX.LEAF,{connection:s}=await vs(),{jsm:n}=await mj(r),{schema:i,table:o}=e,c=Td.createNatsTableStreamName(i,o),u=e.start_time?e.start_time:new Date(Date.now()).toISOString();await ZD(async()=>{if(e.subscribe===!0)await XD(n,c,s.info.server_name,u);else try{await rj(n,c,s.info.server_name)}catch(_){Ps.trace(_)}})}a(cj,"updateRemoteConsumer");async function uj(e,t,r,s){let n=Td.createNatsTableStreamName(e,t),i=r+Ft.SERVER_SUFFIX.LEAF,o={type:Ce.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:s,stream_name:n,node_domain_name:i};if(!VD&&P3()<Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=gS();await c(o)}await M3(o),s==="stop"&&await Sd.async_set_timeout(1e3)}a(uj,"updateConsumerIterator");function ZD(e){return L3.writeTransaction(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(ZD,"exclusiveLock");async function eL(e,t){let r=Td.createNatsTableStreamName(e,t),s=await Rd(),n=fj(e,t,s);await CS(r,[n])}a(eL,"createLocalTableStream");async function lj(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await eL(s,n)}}a(lj,"createTableStreams");async function tL(e,t){if(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Td.createNatsTableStreamName(e,t),{jsm:s}=await vs();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Ps.warn(r);else throw r}}a(tL,"purgeTableStream");async function _j(e,t){if(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await tL(e,t[r])}a(_j,"purgeSchemaTableStreams");async function dj(e){return(await _u()).streams.info(e)}a(dj,"getStreamInfo");function fj(e,t,r){return`${Ft.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(fj,"createSubjectName");async function Rd(){if(uu)return uu;if(uu=(await _u())?.nc?.info?.server_name,uu===void 0)throw new Error("Unable to get jetstream manager server name");return uu}a(Rd,"getJsmServerName");async function Ej(){let e=await _u(),t=await Rd(),r=await JD();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=hj(s),c=i.split(".");if(c[c.length-1]===t&&!o||n.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Ps.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l,await e.streams.update(n.name,n)}}a(Ej,"updateLocalStreams");function hj(e){let{config:t}=e,r=!1,s=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(hj,"updateStreamLimits");async function mj(e){let t,r;try{t=await _r.jetstream({domain:e,timeout:6e4}),r=await _r.jetstreamManager({domain:e,timeout:6e4})}catch(s){throw Ps.error("Unable to connect to:",e),s}return{js:t,jsm:r}}a(mj,"connectToRemoteJS")});var fu=g((dfe,oL)=>{"use strict";var aa=p_(),ca=_D(),pj=$(),Sj=require("uuid").v4,_fe=require("clone"),Od=Rn(),ua=M(),Tj=require("util"),ci=ys(),{handleHDBError:dr,hdb_errors:gj}=se(),{HDB_ERROR_MSGS:Ad,HTTP_STATUS_CODES:fr}=gj,{SchemaEventMsg:bd}=Cs(),sL=st(),{getDatabases:Rj}=(Ae(),ne(Ge)),{transformReq:la}=Q();oL.exports={createSchema:Aj,createSchemaStructure:nL,createTable:Oj,createTableStructure:iL,createAttribute:Ij,dropSchema:bj,dropTable:Nj,dropAttribute:yj,getBackup:Cj};async function Aj(e){let t=await nL(e);return Od.signalSchemaChange(new bd(process.pid,e.operation,e.schema)),t}a(Aj,"createSchema");async function nL(e){let t=aa.schema_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);if(la(e),!await ca.checkSchemaExists(e.schema))throw dr(new Error,Ad.SCHEMA_EXISTS_ERR(e.schema),fr.BAD_REQUEST,ua.LOG_LEVELS.ERROR,Ad.SCHEMA_EXISTS_ERR(e.schema),!0);return await ci.createSchema(e),`database '${e.schema}' successfully created`}a(nL,"createSchemaStructure");async function Oj(e){return la(e),e.hash_attribute=e.primary_key??e.hash_attribute,await iL(e)}a(Oj,"createTable");async function iL(e){let t=aa.create_table_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);if(aa.validateTableResidence(e.residence),!await ca.checkSchemaTableExists(e.schema,e.table))throw dr(new Error,Ad.TABLE_EXISTS_ERR(e.schema,e.table),fr.BAD_REQUEST,ua.LOG_LEVELS.ERROR,Ad.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:Sj(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await ci.createTable(s,e);else throw dr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",fr.BAD_REQUEST);else await ci.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(iL,"createTableStructure");async function bj(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=aa.schema_object(e),s=t??r;if(s)throw dr(s,s.message,fr.BAD_REQUEST,void 0,void 0,!0);la(e);let n=await ca.checkSchemaExists(e.schema);if(n)throw dr(new Error,n,fr.NOT_FOUND,ua.LOG_LEVELS.ERROR,n,!0);let i=await ca.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ci.dropSchema(e),Od.signalSchemaChange(new bd(process.pid,e.operation,e.schema)),await sL.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(bj,"dropSchema");async function Nj(e){let t=aa.table_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);la(e);let r=await ca.checkSchemaTableExists(e.schema,e.table);if(r)throw dr(new Error,r,fr.NOT_FOUND,ua.LOG_LEVELS.ERROR,r,!0);return await ci.dropTable(e),await sL.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(Nj,"dropTable");async function yj(e){let t=aa.attribute_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);la(e);let r=await ca.checkSchemaTableExists(e.schema,e.table);if(r)throw dr(new Error,r,fr.NOT_FOUND,ua.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw dr(new Error,"You cannot drop a hash attribute",fr.BAD_REQUEST,void 0,void 0,!0);if(ua.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw dr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,fr.BAD_REQUEST,void 0,void 0,!0);try{return await ci.dropAttribute(e),wj(e),Od.signalSchemaChange(new bd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw pj.error(`Got an error deleting attribute ${Tj.inspect(e)}.`),s}}a(yj,"dropAttribute");function wj(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(wj,"dropAttributeFromGlobal");async function Ij(e){la(e);let t=Rj()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw dr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,fr.BAD_REQUEST,void 0,void 0,!0);return await ci.createAttribute(e),Od.signalSchemaChange(new bd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Ij,"createAttribute");function Cj(e){return ci.getBackup(e)}a(Cj,"getBackup")});var cL=g((Efe,aL)=>{"use strict";var{OPERATIONS_ENUM:Dj}=M(),LS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=Dj.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};aL.exports=LS});var MS=g((pfe,fL)=>{"use strict";var Lj=ys(),mfe=cL(),Nd=Q(),yd=M(),Mj=ee(),{handleHDBError:uL,hdb_errors:Uj}=se(),{HDB_ERROR_MSGS:lL,HTTP_STATUS_CODES:_L}=Uj,Pj=Object.values(yd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),dL="To use this operation audit log must be enabled in harperdb-config.yaml";fL.exports=vj;async function vj(e){if(Nd.isEmpty(e.schema))throw new Error(lL.SCHEMA_REQUIRED_ERR);if(Nd.isEmpty(e.table))throw new Error(lL.TABLE_REQUIRED_ERR);if(!Mj.get(yd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw uL(new Error,dL,_L.BAD_REQUEST,yd.LOG_LEVELS.ERROR,dL,!0);let t=Nd.checkSchemaTableExist(e.schema,e.table);if(t)throw uL(new Error,t,_L.NOT_FOUND,yd.LOG_LEVELS.ERROR,t,!0);if(!Nd.isEmpty(e.search_type)&&Pj.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await Lj.readAuditLog(e)}a(vj,"readAuditLog")});var hL=g((Tfe,EL)=>{"use strict";var{OPERATIONS_ENUM:Bj}=M(),US=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=Bj.GET_BACKUP,this.schema=t,this.table=r}};EL.exports=US});var SL=g((Ofe,pL)=>{"use strict";var Hj=ys(),Rfe=hL(),PS=Q(),xj=M(),Afe=ee(),{handleHDBError:qj,hdb_errors:Gj}=se(),{HDB_ERROR_MSGS:mL,HTTP_STATUS_CODES:Fj}=Gj;pL.exports=kj;async function kj(e){if(PS.isEmpty(e.schema))throw new Error(mL.SCHEMA_REQUIRED_ERR);if(PS.isEmpty(e.table))throw new Error(mL.TABLE_REQUIRED_ERR);let t=PS.checkSchemaTableExist(e.schema,e.table);if(t)throw qj(new Error,t,Fj.NOT_FOUND,xj.LOG_LEVELS.ERROR,t,!0);return await Hj.getBackup(read_audit_log_object)}a(kj,"getBackup")});var bL=g((Nfe,OL)=>{var ui=require("validate.js"),gL=je(),_a=M(),{handleHDBError:Vj,hdb_errors:$j}=se(),{HDB_ERROR_MSGS:lt,HTTP_STATUS_CODES:Yj}=$j,vS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Kj={STRUCTURE_USER:"structure_user"},TL=Object.values(_a.ROLE_TYPES_ENUM),Wj="attribute_permissions",Qj="attribute_name",{PERMS_CRUD_ENUM:da}=_a,zj=[Wj,...Object.values(da)],RL=[da.READ,da.INSERT,da.UPDATE],Jj=[Qj,...RL];function jj(e){let t=vS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,AL(e,t)}a(jj,"addRoleValidation");function Xj(e){let t=vS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,AL(e,t)}a(Xj,"alterRoleValidation");function Zj(e){let t=vS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,gL.validateObject(e,t)}a(Zj,"dropRoleValidation");var eX=["operation","role","id","permission","hdb_user","hdb_auth_header"];function AL(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)eX.includes(s[o])||n.push(s[o]);n.length>0&&ht(lt.INVALID_ROLE_JSON_KEYS(n),r);let i=gL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{ht(o,r)}),e.permission){let o=tX(e);o&&ht(o,r),TL.forEach(c=>{e.permission[c]&&!ui.isBoolean(e.permission[c])&&ht(lt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(TL.indexOf(o)<0){if(o===Kj.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||ht(lt.SCHEMA_NOT_FOUND(d),r)}continue}ht(lt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){ht(lt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){ht(lt.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{zj.includes(l)||ht(lt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(da).forEach(l=>{ui.isDefined(_[l])?ui.isBoolean(_[l])||ht(lt.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):ht(lt.TABLE_PERM_MISSING(l),r,o,u)}),ui.isDefined(_.attribute_permissions)){if(!ui.isArray(_.attribute_permissions)){ht(lt.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{ht(lt.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].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(p=>{!Jj.includes(p)&&p!==da.DELETE&&ht(lt.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!ui.isDefined(E.attribute_name)){ht(lt.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){ht(lt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}RL.forEach(p=>{ui.isDefined(E[p])?ui.isBoolean(E[p])||ht(lt.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):ht(lt.ATTR_PERM_MISSING(p,h),r,o,u)}),!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}.${u}`;ht(lt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return rX(r)}a(AL,"customValidate");OL.exports={addRoleValidation:jj,alterRoleValidation:Xj,dropRoleValidation:Zj};function tX(e){let{operation:t,permission:r}=e;if(t===_a.OPERATIONS_ENUM.ADD_ROLE||t===_a.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return lt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?_a.ROLE_TYPES_ENUM.SUPER_USER:_a.ROLE_TYPES_ENUM.CLUSTER_USER;return lt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(tX,"validateNoSUPerms");function rX(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:lt.ROLE_PERMS_ERROR,...e};return Vj(new Error,s,Yj.BAD_REQUEST)}else return null}a(rX,"generateRolePermResponse");function ht(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(ht,"addPermError")});var FS=g((wfe,IL)=>{"use strict";var NL=Lr(),yL=Dr(),sX=ri(),HS=bL(),xS=Rn(),nX=require("uuid").v4,iX=require("util"),wd=M(),oX=Q(),qS=yL.searchByValue,aX=yL.searchByHash,cX=iX.promisify(sX.delete),uX=Zs(),lX=ta(),{hdb_errors:_X,handleHDBError:ao}=se(),{HDB_ERROR_MSGS:wL,HTTP_STATUS_CODES:Eu}=_X,{UserEventMsg:GS}=Cs();IL.exports={addRole:dX,alterRole:fX,dropRole:EX,listRoles:hX};function BS(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(BS,"scrubRoleDetails");async function dX(e){let t=HS.addRoleValidation(e);if(t)throw t;e=BS(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await qS(r)||[])}catch(i){throw ao(i)}if(s&&s.length>0)throw ao(new Error,wL.ROLE_ALREADY_EXISTS(e.role),Eu.CONFLICT,void 0,void 0,!0);e.id||(e.id=nX());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await NL.insert(n),xS.signalUserChange(new GS(process.pid)),e=BS(e),e}a(dX,"addRole");async function fX(e){let t=HS.alterRoleValidation(e);if(t)throw t;e=BS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await NL.update(r)}catch(n){throw ao(n)}if(s&&s?.message==="updated 0 of 1 records")throw ao(new Error,"Invalid role id",Eu.BAD_REQUEST,void 0,void 0,!0);return await xS.signalUserChange(new GS(process.pid)),e}a(fX,"alterRole");async function EX(e){let t=HS.dropRoleValidation(e);if(t)throw ao(new Error,t,Eu.BAD_REQUEST,void 0,void 0,!0);let r=new lX(wd.SYSTEM_SCHEMA_NAME,wd.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await aX(r));if(s.length===0)throw ao(new Error,wL.ROLE_NOT_FOUND,Eu.NOT_FOUND,void 0,void 0,!0);let n=new uX(wd.SYSTEM_SCHEMA_NAME,wd.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await qS(n)),o=!1;if(oX.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw ao(new Error,`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`,Eu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await cX(c),xS.signalUserChange(new GS(process.pid)),`${s[0].role} successfully deleted`}a(EX,"dropRole");async function hX(){return qS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(hX,"listRoles")});var ML=g((Cfe,LL)=>{"use strict";var mX=ee(),li=require("joi"),pX=je(),CL=require("moment"),SX=require("fs-extra"),kS=require("path"),TX=require("lodash"),hu=M(),{LOG_LEVELS:co}=M(),gX="YYYY-MM-DD hh:mm:ss",RX=kS.resolve(__dirname,"../logs");LL.exports=function(e){return pX.validateBySchema(e,AX)};var AX=li.object({from:li.custom(DL),until:li.custom(DL),level:li.valid(co.NOTIFY,co.FATAL,co.ERROR,co.WARN,co.INFO,co.DEBUG,co.TRACE),order:li.valid("asc","desc"),limit:li.number().min(1),start:li.number().min(0),log_name:li.custom(OX)});function DL(e,t){if(CL(e,CL.ISO_8601).format(gX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(DL,"validateDatetime");function OX(e,t){if(TX.invert(hu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=mX.get(hu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?hu.LOG_NAMES.HDB:e,i=n===hu.LOG_NAMES.INSTALL?kS.join(RX,hu.LOG_NAMES.INSTALL):kS.join(s,n);return SX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(OX,"validateReadLogPath")});var $S=g((Lfe,PL)=>{"use strict";var Id=M(),bX=$(),NX=ee(),yX=ML(),VS=require("path"),UL=require("fs-extra"),{once:wX}=require("events"),{handleHDBError:IX,hdb_errors:CX}=se(),{PACKAGE_ROOT:DX}=M(),LX=VS.join(DX,"logs"),MX=1e3,UX=200;PL.exports=PX;async function PX(e){let t=yX(e);if(t)throw IX(t,t.message,CX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=NX.get(Id.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Id.LOG_NAMES.HDB:e.log_name,n=s===Id.LOG_NAMES.INSTALL?VS.join(LX,Id.LOG_NAMES.INSTALL):VS.join(r,s),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?MX:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max(UL.statSync(n).size-(h+5)*UX,0));let S=UL.createReadStream(n,{start:p});S.on("error",P=>{bX.error(P)});let T=0,b=[],R="",L;S.on("data",P=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;P=R+P;let B=0,J;for(;(J=k.exec(P))&&!S.destroyed;){L&&(L.message=P.slice(B,J.index),H(L));let[z,j,Te]=J,ce=Te.split("] ["),de=ce[0],Le=ce[1];ce.splice(0,2),L={timestamp:j,thread:de,level:Le,tags:ce,message:""},B=J.index+z.length}R=P.slice(B)}),S.on("end",P=>{S.destroyed||L&&(L.message=R.trim(),H(L))}),S.resume();function H(P){let k,B,J;switch(!0){case(i&&c&&_):k=new Date(P.timestamp),B=new Date(u),J=new Date(l),P.level===o&&k>=B&&k<=J&&T<E?T++:P.level===o&&k>=B&&k<=J&&(_i(P,f,b),T++,T===h&&S.destroy());break;case(i&&c):k=new Date(P.timestamp),B=new Date(u),P.level===o&&k>=B&&T<E?T++:P.level===o&&k>=B&&(_i(P,f,b),T++,T===h&&S.destroy());break;case(i&&_):k=new Date(P.timestamp),J=new Date(l),P.level===o&&k<=J&&T<E?T++:P.level===o&&k<=J&&(_i(P,f,b),T++,T===h&&S.destroy());break;case(c&&_):k=new Date(P.timestamp),B=new Date(u),J=new Date(l),k>=B&&k<=J&&T<E?T++:k>=B&&k<=J&&(_i(P,f,b),T++,T===h&&S.destroy());break;case i:P.level===o&&T<E?T++:P.level===o&&(_i(P,f,b),T++,T===h&&S.destroy());break;case c:k=new Date(P.timestamp),B=new Date(u),k>=B&&T<E?T++:k>=B&&T>=E&&(_i(P,f,b),T++,T===h&&S.destroy());break;case _:k=new Date(P.timestamp),J=new Date(l),k<=J&&T<E?T++:k<=J&&T>=E&&(_i(P,f,b),T++,T===h&&S.destroy());break;default:T<E?T++:(_i(P,f,b),T++,T===h&&S.destroy())}}return a(H,"onLogMessage"),await wX(S,"close"),b}a(PX,"readLog");function _i(e,t,r){t==="desc"?vX(e,r):t==="asc"?BX(e,r):r.push(e)}a(_i,"pushLineToResult");function vX(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(vX,"insertDescending");function BX(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(BX,"insertAscending")});var Cd=g((Bfe,xL)=>{"use strict";var YS=require("joi"),{string:mu,boolean:vL,date:HX}=YS.types(),xX=je(),{validateSchemaExists:Ufe,validateTableExists:Pfe,validateSchemaName:vfe}=Qs(),qX=M(),GX=Fe(),BL=ee();BL.initSync();var FX=mu.invalid(BL.get(qX.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(GX.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(),HL={operation:mu.valid("add_node","update_node","set_node_replication"),node_name:FX,subscriptions:YS.array().items({table:mu.optional(),schema:mu.optional(),database:mu.optional(),subscribe:vL.required(),publish:vL.required().custom(VX),start_time:HX.iso()}).min(1).required()};function kX(e){return xX.validateBySchema(e,YS.object(HL))}a(kX,"addUpdateNodeValidator");function VX(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(VX,"checkForFalsy");xL.exports={addUpdateNodeValidator:kX,validation_schema:HL}});var GL=g((xfe,qL)=>{var $X=je(),YX={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};qL.exports=function(e){return $X.validateObject(e,YX)}});var Dd=g((qfe,FL)=>{"use strict";var KX=M().OPERATIONS_ENUM,KS=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=KX.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};FL.exports=KS});var VL=g((Ffe,kL)=>{"use strict";var WX={OPERATION:"operation",REFRESH:"refresh"},WS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},QS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};kL.exports={JWTTokens:WS,TOKEN_TYPE_ENUM:WX,JWTRSAKeys:QS}});var Tu=g((Vfe,WL)=>{"use strict";var Su=require("jsonwebtoken"),zS=require("fs-extra"),JS=Q(),is=M(),{handleHDBError:Er,hdb_errors:QX}=se(),{HTTP_STATUS_CODES:hr,AUTHENTICATION_ERROR_MSGS:mr}=QX,pu=$(),$L=U_(),ZS=ss(),zX=Lr().update,JX=Dd(),jX=Rn(),{UserEventMsg:XX}=Cs(),di=ee();di.initSync();var jS=require("path"),{JWTTokens:ZX,JWTRSAKeys:eZ,TOKEN_TYPE_ENUM:Ld}=VL(),tZ=di.get(is.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?di.get(is.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",rZ=di.get(is.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?di.get(is.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Md="RS256",XS;WL.exports={createTokens:sZ,validateOperationToken:iZ,refreshOperationToken:nZ,validateRefreshToken:KL};async function sZ(e){if(JS.isEmpty(e)||typeof e!="object")throw Er(new Error,mr.INVALID_AUTH_OBJECT,hr.BAD_REQUEST,void 0,void 0,!0);if(JS.isEmpty(e.username))throw Er(new Error,mr.USERNAME_REQUIRED,hr.BAD_REQUEST,void 0,void 0,!0);if(JS.isEmpty(e.password))throw Er(new Error,mr.PASSWORD_REQUIRED,hr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await ZS.findAndValidateUser(e.username,e.password),!t)throw Er(new Error,mr.INVALID_CREDENTIALS,hr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw pu.error(f),Er(new Error,mr.INVALID_CREDENTIALS,hr.UNAUTHORIZED,void 0,void 0,!0)}let r=await Ud(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await YL(i,r.private_key,r.passphrase),c=await Su.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:rZ,algorithm:Md,subject:Ld.REFRESH}),u=$L.hash(c),_=new JX(is.SYSTEM_SCHEMA_NAME,is.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await zX(_)}catch(f){pu.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw Er(new Error,mr.REFRESH_TOKEN_SAVE_FAILED,hr.INTERNAL_SERVER_ERROR);return jX.signalUserChange(new XX(process.pid)),new ZX(o,c)}a(sZ,"createTokens");async function YL(e,t,r){return await Su.sign(e,{key:t,passphrase:r},{expiresIn:tZ,algorithm:Md,subject:Ld.OPERATION})}a(YL,"signOperationToken");async function Ud(){if(XS===void 0)try{let e=jS.join(di.getHdbBasePath(),is.LICENSE_KEY_DIR_NAME,is.JWT_ENUM.JWT_PASSPHRASE_NAME),t=jS.join(di.getHdbBasePath(),is.LICENSE_KEY_DIR_NAME,is.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=jS.join(di.getHdbBasePath(),is.LICENSE_KEY_DIR_NAME,is.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await zS.readFile(e)).toString(),n=(await zS.readFile(t)).toString(),i=(await zS.readFile(r)).toString();XS=new eZ(i,n,s)}catch(e){throw pu.error(e),Er(new Error,mr.NO_ENCRYPTION_KEYS,hr.INTERNAL_SERVER_ERROR)}return XS}a(Ud,"getJWTRSAKeys");async function nZ(e){if(!e)throw Er(new Error,mr.INVALID_BODY,hr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Er(new Error,mr.REFRESH_TOKEN_REQUIRED,hr.BAD_REQUEST,void 0,void 0,!0);await KL(e.refresh_token);let t=await Ud(),r=await Su.decode(e.refresh_token);return{operation_token:await YL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(nZ,"refreshOperationToken");async function iZ(e){try{let t=await Ud(),r=await Su.verify(e,t.public_key,{algorithms:Md,subject:Ld.OPERATION});return await ZS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw pu.warn(t),t.name&&t.name==="TokenExpiredError"?Er(new Error,mr.TOKEN_EXPIRED,hr.FORBIDDEN):Er(new Error,mr.INVALID_TOKEN,hr.UNAUTHORIZED)}}a(iZ,"validateOperationToken");async function KL(e){let t;try{let r=await Ud(),s=await Su.verify(e,r.public_key,{algorithms:Md,subject:Ld.REFRESH});t=await ZS.findAndValidateUser(s.username,void 0,!1)}catch(r){throw pu.warn(r),r.name&&r.name==="TokenExpiredError"?Er(new Error,mr.TOKEN_EXPIRED,hr.FORBIDDEN):Er(new Error,mr.INVALID_TOKEN,hr.UNAUTHORIZED)}if(!$L.validate(t.refresh_token,e))throw Er(new Error,mr.INVALID_TOKEN,hr.UNAUTHORIZED);return t}a(KL,"validateRefreshToken")});var eT=g((Kfe,JL)=>{"use strict";var oZ=GL(),fa=require("passport"),aZ=require("passport-local").Strategy,cZ=require("passport-http").BasicStrategy,uZ=require("util"),lZ=ss(),zL=uZ.callbackify(lZ.findAndValidateUser),Yfe=yr(),_Z=M(),QL=Tu();fa.use(new aZ(function(e,t,r){zL(e,t,r)}));fa.use(new cZ(function(e,t,r){zL(e,t,r)}));fa.serializeUser(function(e,t){t(null,e)});fa.deserializeUser(function(e,t){t(null,e)});function dZ(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":fa.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===_Z.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?QL.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):QL.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:fa.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(dZ,"authorize");function fZ(e,t){let r=oZ(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(fZ,"checkPermissions");JL.exports={authorize:dZ,checkPermissions:fZ}});var fi=g((Qfe,jL)=>{"use strict";var tT=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},rT=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};jL.exports={Node:tT,NodeSubscription:rT}});var ZL=g((Jfe,XL)=>{"use strict";var EZ=M().OPERATIONS_ENUM,sT=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=EZ.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};XL.exports=sT});var gu=g((Xfe,eM)=>{"use strict";var nT=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},iT=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};eM.exports={RemotePayloadObject:nT,RemotePayloadSubscription:iT}});var rM=g((eEe,tM)=>{"use strict";var oT=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};tM.exports=oT});var iM=g((iEe,nM)=>{"use strict";var hZ=rM(),rEe=dt(),sM=We(),mZ=$(),{getSchemaPath:sEe,getTransactionAuditStorePath:nEe}=Je(),{getDatabases:pZ}=(Ae(),ne(Ge));nM.exports=SZ;async function SZ(e){let t=new hZ;try{let r=pZ()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await sM.environmentDataSize(schema_path,e.name),o=await sM.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){mZ.warn(`unable to stat table dbi due to ${r}`)}return t}a(SZ,"lmdbGetTableSize")});var aM=g((aEe,oM)=>{"use strict";var aT=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};oM.exports=aT});var Ea=g((dEe,dM)=>{"use strict";var TZ=require("fs-extra"),gZ=require("path"),Jt=require("systeminformation"),Ei=$(),cM=st(),uEe=Fe(),vd=M(),RZ=iM(),_M=Zn(),{getThreadInfo:uM}=Ke(),pT=ee();pT.initSync();var AZ=aM(),{openEnvironment:lEe}=We(),{getSchemaPath:_Ee}=Je(),{database:OZ}=(Ae(),ne(Ge)),Pd;dM.exports={getHDBProcessInfo:_T,getNetworkInfo:fT,getDiskInfo:dT,getMemoryInfo:lT,getCPUInfo:uT,getTimeInfo:cT,getSystemInformation:ET,systemInformation:bZ,getTableSize:hT,getMetrics:mT};function cT(){return Jt.time()}a(cT,"getTimeInfo");async function uT(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Jt.cpu();l.cpu_speed=await Jt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:T,...b}=await Jt.currentLoad();return b.cpus=[],T.forEach(R=>{let{raw_load:L,raw_load_idle:H,raw_load_irq:P,raw_load_nice:k,raw_load_system:B,raw_load_user:J,...z}=R;b.cpus.push(z)}),l.current_load=b,l}catch(e){return Ei.error(`error in getCPUInfo: ${e}`),{}}}a(uT,"getCPUInfo");async function lT(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Jt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Ei.error(`error in getMemoryInfo: ${e}`),{}}}a(lT,"getMemoryInfo");async function _T(){let e={core:[],clustering:[]};try{let t=await Jt.processes(),r;try{r=Number.parseInt(await TZ.readFile(gZ.join(pT.get(vd.CONFIG_PARAMS.ROOTPATH),vd.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===vd.NODE_ERROR_CODES.ENOENT)Ei.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return Ei.error(`error in getHDBProcessInfo: ${t}`),e}}a(_T,"getHDBProcessInfo");async function dT(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Jt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Jt.fsStats();return e.read_write=_,e.size=await Jt.fsSize(),e}catch(t){return Ei.error(`error in getDiskInfo: ${t}`),e}}a(dT,"getDiskInfo");async function fT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Jt.networkInterfaceDefault(),e.latency=await Jt.inetChecksite("google.com"),(await Jt.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await Jt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Ei.error(`error in getNetworkInfo: ${t}`),e}}a(fT,"getNetworkInfo");async function ET(){if(Pd!==void 0)return Pd;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Jt.osInfo();e=c;let u=await Jt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,Pd=e,Pd}catch(t){return Ei.error(`error in getSystemInformation: ${t}`),e}}a(ET,"getSystemInformation");async function hT(){let e=[],t=await _M.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await RZ(s));return e}a(hT,"getTableSize");async function mT(){let e=await _M.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=OZ({database:r,table:n}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),s[n]=o}catch(i){Ei.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(mT,"getMetrics");async function lM(){if(pT.get(vd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await cM.getNATSReferences(),t=await cM.listStreams(),r=[];for(let s of t){let n=[],i=await e.consumers.list(s.config.name);for await(let c of i)n.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:s.config.name,database:s.config.subjects[0].split(".")[1],table:s.config.subjects[0].split(".")[2],state:s.state,consumers:n};r.push(o)}return r}}a(lM,"getNatsStreamInfo");async function bZ(e){let t=new AZ;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await ET(),t.time=cT(),t.cpu=await uT(),t.memory=await lT(),t.disk=await dT(),t.network=await fT(),t.harperdb_processes=await _T(),t.table_size=await hT(),t.metrics=await mT(),t.threads=await uM(),t.replication=await lM(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await ET();break;case"time":t.time=cT();break;case"cpu":t.cpu=await uT();break;case"memory":t.memory=await lT();break;case"disk":t.disk=await dT();break;case"network":t.network=await fT();break;case"harperdb_processes":t.harperdb_processes=await _T();break;case"table_size":t.table_size=await hT();break;case"database_metrics":case"metrics":t.metrics=await mT();break;case"threads":t.threads=await uM();break;case"replication":t.replication=await lM();break;default:break}return t}a(bZ,"systemInformation")});var Hd=g((EEe,fM)=>{"use strict";fM.exports={version:NZ,printVersion:yZ};var Bd=eu();function NZ(){if(Bd)return Bd.version}a(NZ,"version");function yZ(){Bd&&console.log(`HarperDB Version ${Bd.version}`)}a(yZ,"printVersion")});var os=g((SEe,pM)=>{"use strict";var wZ=Lr(),ST=Q(),IZ=require("util"),uo=M(),EM=ee();EM.initSync();var CZ=eT(),hM=Dr(),{Node:mEe,NodeSubscription:pEe}=fi(),DZ=ta(),LZ=ZL(),{RemotePayloadObject:MZ,RemotePayloadSubscription:UZ}=gu(),{handleHDBError:PZ,hdb_errors:vZ}=se(),{HTTP_STATUS_CODES:BZ,HDB_ERROR_MSGS:HZ}=vZ,xZ=Zs(),qZ=Ea(),GZ=Hd(),{getDatabases:FZ}=(Ae(),ne(Ge)),kZ=IZ.promisify(CZ.authorize),VZ=hM.searchByHash,$Z=hM.searchByValue;pM.exports={authHeaderToUser:YZ,isEmpty:KZ,getNodeRecord:WZ,upsertNodeRecord:QZ,buildNodePayloads:zZ,checkClusteringEnabled:JZ,getAllNodeRecords:jZ,getSystemInfo:XZ,reverseSubscription:mM};async function YZ(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await kZ(t,null),e}a(YZ,"authHeaderToUser");function KZ(e){return e==null}a(KZ,"isEmpty");async function WZ(e){let t=new DZ(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return VZ(t)}a(WZ,"getNodeRecord");async function QZ(e){let t=new LZ(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return wZ.upsert(t)}a(QZ,"upsertNodeRecord");function mM(e){if(ST.isEmpty(e.subscribe)||ST.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(mM,"reverseSubscription");function zZ(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=ST.getTableHashAttribute(u,_),{subscribe:d,publish:f}=mM(c),E=FZ()[u]?.[_],h=new UZ(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new MZ(r,t,n,s)}a(zZ,"buildNodePayloads");function JZ(){if(!EM.get(uo.CONFIG_PARAMS.CLUSTERING_ENABLED))throw PZ(new Error,HZ.CLUSTERING_NOT_ENABLED,BZ.BAD_REQUEST,void 0,void 0,!0)}a(JZ,"checkClusteringEnabled");async function jZ(){let e=new xZ(uo.SYSTEM_SCHEMA_NAME,uo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await $Z(e))}a(jZ,"getAllNodeRecords");async function XZ(){let e=await qZ.getSystemInformation();return{hdb_version:GZ.version(),node_version:e.node_version,platform:e.platform}}a(XZ,"getSystemInfo")});var TT=g((gEe,NM)=>{"use strict";var xd=st(),SM=Q(),TM=Fe(),gM=M(),qd=$(),RM=fu(),ZZ=Z_(),{RemotePayloadObject:e5}=gu(),{handleHDBError:AM,hdb_errors:t5}=se(),{HTTP_STATUS_CODES:OM}=t5,{NodeSubscription:bM}=fi();NM.exports=r5;async function r5(e,t){let r;try{r=await xd.request(`${t}.${TM.REQUEST_SUFFIX}`,new e5(gM.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),qd.trace("Response from remote describe all request:",r)}catch(o){qd.error(`addNode received error from describe all request to remote node: ${o}`);let c=xd.requestErrorHandler(o,"add_node",t);throw AM(new Error,c,OM.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===TM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw AM(new Error,o,OM.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===gM.SYSTEM_SCHEMA_NAME){await xd.createLocalTableStream(u,c);let h=new bM(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=SM.doesSchemaExist(u),l=s[u]!==void 0,d=c?SM.doesTableExist(u,c):!0,f=c?s?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(qd.trace(`addNode creating schema: ${u}`),await RM.createSchema({operation:"create_schema",schema:u})),!d&&f){qd.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(s[u][c].attributes)}`);let h=new ZZ(u,c,s[u][c].hash_attribute);s[u][c].attributes&&(h.attributes=s[u][c].attributes),await RM.createTable(h)}await xd.createLocalTableStream(u,c);let E=new bM(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(r5,"reviewSubscriptions")});var Vd=g((AEe,IM)=>{"use strict";var{handleHDBError:Gd,hdb_errors:s5}=se(),{HTTP_STATUS_CODES:Fd}=s5,{addUpdateNodeValidator:n5}=Cd(),kd=$(),wM=M(),yM=Fe(),i5=Q(),Ru=st(),Au=os(),o5=ee(),a5=TT(),{Node:c5,NodeSubscription:u5}=fi(),{broadcast:l5}=Ke(),_5="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",d5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",f5=o5.get(wM.CONFIG_PARAMS.CLUSTERING_NODENAME);IM.exports=E5;async function E5(e,t=!1){kd.trace("addNode called with:",e),Au.checkClusteringEnabled();let r=n5(e);if(r)throw Gd(r,r.message,Fd.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Au.getNodeRecord(s);if(!i5.isEmptyOrZeroLength(d))throw Gd(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Fd.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await a5(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=_5,o;let c=Au.buildNodePayloads(n,f5,wM.OPERATIONS_ENUM.ADD_NODE,await Au.getSystemInfo()),u=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];n[d].start_time===void 0&&delete n[d].start_time,u.push(new u5(E.schema,E.table,E.publish,E.subscribe))}kd.trace("addNode sending remote payload:",c);let _;try{_=await Ru.request(`${s}.${yM.REQUEST_SUFFIX}`,c)}catch(d){kd.error(`addNode received error from request: ${d}`);for(let E=0,h=n.length;E<h;E++){let p=n[E];p.publish=!1,p.subscribe=!1,await Ru.updateRemoteConsumer(p,s)}let f=Ru.requestErrorHandler(d,"add_node",s);throw Gd(new Error,f,Fd.INTERNAL_SERVER_ERROR,"error",f)}if(_.status===yM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${_.message}`;throw Gd(new Error,d,Fd.INTERNAL_SERVER_ERROR,"error",d)}kd.trace(_);for(let d=0,f=n.length;d<f;d++){let E=n[d];await Ru.updateRemoteConsumer(E,s),E.subscribe===!0&&await Ru.updateConsumerIterator(E.schema,E.table,s,"start")}let l=new c5(s,u,_.system_info);return await Au.upsertNodeRecord(l),l5({type:"nats_update"}),i.length>0?o.message=d5:o.message=`Successfully added '${s}' to manifest`,o}a(E5,"addNode")});var AT=g((NEe,LM)=>{"use strict";var{handleHDBError:gT,hdb_errors:h5}=se(),{HTTP_STATUS_CODES:RT}=h5,{addUpdateNodeValidator:m5}=Cd(),Ou=$(),DM=M(),CM=Fe(),bEe=Q(),bu=st(),Nu=os(),p5=ee(),{cloneDeep:S5}=require("lodash"),T5=TT(),{Node:g5,NodeSubscription:R5}=fi(),{broadcast:A5}=Ke(),O5="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",b5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",N5=p5.get(DM.CONFIG_PARAMS.CLUSTERING_NODENAME);LM.exports=y5;async function y5(e){Ou.trace("updateNode called with:",e),Nu.checkClusteringEnabled();let t=m5(e);if(t)throw gT(t,t.message,RT.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s,n=await Nu.getNodeRecord(r);n.length>0&&(s=S5(n));let{added:i,skipped:o}=await T5(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=O5,c;let u=Nu.buildNodePayloads(i,N5,DM.OPERATIONS_ENUM.UPDATE_NODE,await Nu.getSystemInfo());for(let l=0,d=i.length;l<d;l++){let f=i[l];Ou.trace(`updateNode updating work stream for node: ${r} subscription:`,f),i[l].start_time===void 0&&delete i[l].start_time}Ou.trace("updateNode sending remote payload:",u);let _;try{_=await bu.request(`${r}.${CM.REQUEST_SUFFIX}`,u)}catch(l){Ou.error(`updateNode received error from request: ${l}`);let d=bu.requestErrorHandler(l,"update_node",r);throw gT(new Error,d,RT.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===CM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw gT(new Error,l,RT.INTERNAL_SERVER_ERROR,"error",l)}Ou.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];await bu.updateRemoteConsumer(f,r),f.subscribe===!0?await bu.updateConsumerIterator(f.schema,f.table,r,"start"):await bu.updateConsumerIterator(f.schema,f.table,r,"stop")}return s||(s=[new g5(r,[],_.system_info)]),await w5(s[0],i,_.system_info),o.length>0?c.message=b5:c.message=`Successfully updated '${r}'`,c}a(y5,"updateNode");async function w5(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new R5(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Nu.upsertNodeRecord(s),A5({type:"nats_update"})}a(w5,"updateNodeTable")});var BM=g((wEe,vM)=>{"use strict";var PM=require("joi"),{string:MM}=PM.types(),I5=je(),UM=M(),C5=ee(),D5=Fe();vM.exports=L5;function L5(e){let t=MM.invalid(C5.get(UM.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(D5.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=PM.object({operation:MM.valid(UM.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return I5.validateBySchema(e,r)}a(L5,"removeNodeValidator")});var Yd=g((CEe,FM)=>{"use strict";var{handleHDBError:HM,hdb_errors:M5}=se(),{HTTP_STATUS_CODES:xM}=M5,U5=BM(),yu=$(),qM=os(),P5=Q(),$d=M(),GM=Fe(),OT=st(),v5=ee(),{RemotePayloadObject:B5}=gu(),{NodeSubscription:H5}=fi(),x5=ra(),q5=ri(),{broadcast:G5}=Ke(),F5=v5.get($d.CONFIG_PARAMS.CLUSTERING_NODENAME);FM.exports=k5;async function k5(e){yu.trace("removeNode called with:",e),qM.checkClusteringEnabled();let t=U5(e);if(t)throw HM(t,t.message,xM.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await qM.getNodeRecord(r);if(P5.isEmptyOrZeroLength(s))throw HM(new Error,`Node '${r}' was not found.`,xM.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new B5($d.OPERATIONS_ENUM.REMOVE_NODE,F5,[]),i,o=!1;for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];l.subscribe===!0&&await OT.updateConsumerIterator(l.schema,l.table,r,"stop");try{await OT.updateRemoteConsumer(new H5(l.schema,l.table,!1,!1),r)}catch(d){yu.error(d)}}try{i=await OT.request(`${r}.${GM.REQUEST_SUFFIX}`,n),yu.trace("Remove node reply from remote node:",r,i)}catch(u){yu.error("removeNode received error from request:",u),o=!0}let c=new x5($d.SYSTEM_SCHEMA_NAME,$d.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await q5.deleteRecord(c),G5({type:"nats_update"}),i?.status===GM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(yu.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(k5,"removeNode")});var $M=g((LEe,VM)=>{"use strict";var kM=require("joi"),{string:V5,array:$5}=kM.types(),Y5=je(),K5=Cd();VM.exports=W5;function W5(e){let t=kM.object({operation:V5.valid("configure_cluster").required(),connections:$5.items(K5.validation_schema).required()});return Y5.validateBySchema(e,t)}a(W5,"configureClusterValidator")});var bT=g((UEe,zM)=>{"use strict";var Q5=M(),Kd=$(),z5=Q(),J5=Yd(),j5=Vd(),YM=os(),X5=$M(),{handleHDBError:KM,hdb_errors:Z5}=se(),{HTTP_STATUS_CODES:WM}=Z5,e8="Configure cluster complete.",t8="Failed to configure the cluster. Check the logs for more details.",r8="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";zM.exports=s8;async function s8(e){Kd.trace("configure cluster called with:",e),YM.checkClusteringEnabled();let t=X5(e);if(t)throw KM(t,t.message,WM.BAD_REQUEST,void 0,void 0,!0);let r=await YM.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(QM(J5,{operation:Q5.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);Kd.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(QM(j5,E,E.node_name))}let c=await Promise.allSettled(i);Kd.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(Kd.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(z5.isEmptyOrZeroLength(u))return{message:e8,connections:_};if(l)return{message:r8,failed_nodes:u,connections:_};throw KM(new Error,t8,WM.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(s8,"configureCluster");async function QM(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(QM,"functionWrapper")});var jM=g((vEe,JM)=>{"use strict";var Wd=require("joi"),n8=je(),{validateSchemaExists:i8,validateTableExists:o8,validateSchemaName:a8}=Qs(),c8=Wd.object({operation:Wd.string().valid("purge_stream"),schema:Wd.string().custom(i8).custom(a8).required(),table:Wd.string().custom(o8).required()});function u8(e){return n8.validateBySchema(e,c8)}a(u8,"purgeStreamValidator");JM.exports=u8});var NT=g((HEe,XM)=>{"use strict";var{handleHDBError:l8,hdb_errors:_8}=se(),{HTTP_STATUS_CODES:d8}=_8,f8=jM(),E8=st(),h8=os();XM.exports=m8;async function m8(e){if(e.purge_ingest!==!0){let n=f8(e);if(n)throw l8(n,n.message,d8.BAD_REQUEST,void 0,void 0,!0)}h8.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:s}=e;return await E8.purgeTableStream(t,r,s),s?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(m8,"purgeStream")});var IT=g((qEe,nU)=>{"use strict";var wT=os(),p8=st(),tU=ee(),Qd=M(),lo=Fe(),S8=Q(),yT=$(),{RemotePayloadObject:T8}=gu(),{ErrorCode:ZM}=require("nats"),eU=tU.get(Qd.CONFIG_PARAMS.CLUSTERING_ENABLED),rU=tU.get(Qd.CONFIG_PARAMS.CLUSTERING_NODENAME);nU.exports={clusterStatus:g8,buildNodeStatus:sU};async function g8(){let e={node_name:rU,is_enabled:eU,connections:[]};if(!eU)return e;let t=await wT.getAllNodeRecords();if(S8.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(sU(t[s],e.connections));return await Promise.allSettled(r),e}a(g8,"clusterStatus");async function sU(e,t){let r=e.name,s=new T8(Qd.OPERATIONS_ENUM.CLUSTER_STATUS,rU,void 0,await wT.getSystemInfo()),n,i,o=lo.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await p8.request(lo.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===lo.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=lo.CLUSTER_STATUS_STATUSES.CLOSED,yT.error(`Error getting node status from ${r} `,n))}catch(u){yT.warn(`Error getting node status from ${r}`,u),u.code===ZM.NoResponders?o=lo.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===ZM.Timeout?o=lo.CLUSTER_STATUS_STATUSES.TIMEOUT:o=lo.CLUSTER_STATUS_STATUSES.CLOSED}let c=new R8(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Qd.PRE_4_0_0_VERSION&&await wT.upsertNodeRecord(u)}catch(u){yT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(sU,"buildNodeStatus");function R8(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(R8,"NodeStatusObject")});var DT=g((FEe,iU)=>{"use strict";var{handleHDBError:A8,hdb_errors:O8}=se(),{HTTP_STATUS_CODES:b8}=O8,N8=st(),y8=os(),CT=Q(),zd=require("joi"),w8=je(),I8=2e3,C8=zd.object({timeout:zd.number().min(1),connected_nodes:zd.boolean(),routes:zd.boolean()});iU.exports=D8;async function D8(e){y8.checkClusteringEnabled();let t=w8.validateBySchema(e,C8);if(t)throw A8(t,t.message,b8.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||CT.autoCastBoolean(s),o=n===void 0||CT.autoCastBoolean(n),c={nodes:[]},u=await N8.getServerList(r??I8),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:CT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(D8,"clusterNetwork")});var uU=g((VEe,cU)=>{"use strict";var LT=require("joi"),oU=je(),{route_constraints:aU}=Wm();cU.exports={setRoutesValidator:L8,deleteRoutesValidator:M8};function L8(e){let t=LT.object({server:LT.valid("hub","leaf").required(),routes:aU.required()});return oU.validateBySchema(e,t)}a(L8,"setRoutesValidator");function M8(e){let t=LT.object({routes:aU.required()});return oU.validateBySchema(e,t)}a(M8,"deleteRoutesValidator")});var UT=g((YEe,fU)=>{"use strict";var _o=Pr(),MT=Q(),Jd=M(),lU=uU(),{handleHDBError:_U,hdb_errors:U8}=se(),{HTTP_STATUS_CODES:dU}=U8,P8="cluster routes successfully set",v8="cluster routes successfully deleted";fU.exports={setRoutes:B8,getRoutes:H8,deleteRoutes:x8};function B8(e){let t=lU.setRoutesValidator(e);if(t)throw _U(t,t.message,dU.BAD_REQUEST,void 0,void 0,!0);let r=_o.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=MT.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?_o.updateConfigValue(Jd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):_o.updateConfigValue(Jd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:P8,set:o,skipped:i}}a(B8,"setRoutes");function H8(){let e=_o.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(H8,"getRoutes");function x8(e){let t=lU.deleteRoutesValidator(e);if(t)throw _U(t,t.message,dU.BAD_REQUEST,void 0,void 0,!0);let r=_o.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=s.length;E<h;E++){let p=s[E];if(d.host===p.host&&d.port===p.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=n.length;h<p;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=MT.isEmptyOrZeroLength(s)?null:s,_o.updateConfigValue(Jd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=MT.isEmptyOrZeroLength(n)?null:n,_o.updateConfigValue(Jd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:v8,deleted:i,skipped:o}}a(x8,"deleteRoutes")});var hU=g((WEe,EU)=>{"use strict";var wu=require("alasql"),fo=require("recursive-iterator"),Bs=$(),q8=Q(),Iu=M(),PT=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,F8(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>Iu.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Iu.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Iu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=G8(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!Iu.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new wu.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function G8(e){return e.filter(t=>t[Iu.PERMS_CRUD_ENUM.READ])}a(G8,"filterReadRestrictedAttrs");function F8(e,t,r,s,n){k8(e,t,r,s,n)}a(F8,"interpretAST");function Cu(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Cu,"addSchemaTableToMap");function k8(e,t,r,s,n){if(!e){Bs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof wu.yy.Insert?K8(e,t,r):e instanceof wu.yy.Select?V8(e,t,r,s,n):e instanceof wu.yy.Update?$8(e,t,r):e instanceof wu.yy.Delete?Y8(e,t,r):Bs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(k8,"getRecordAttributesAST");function V8(e,t,r,s,n){if(!e){Bs.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(q8.isEmptyOrZeroLength(i)){Bs.error("No schema specified");return}e.from.forEach(c=>{Cu(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Cu(c.table,t,r,s,n)});let o=new fo(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Bs.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new fo(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Bs.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new fo(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Bs.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new fo(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Bs.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(V8,"getSelectAttributes");function $8(e,t,r){if(!e){Bs.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new fo(e.columns),n=e.table.databaseid;Cu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&vT(e.table.tableid,n,i.columnid,t,r)}a($8,"getUpdateAttributes");function Y8(e,t,r){if(!e){Bs.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new fo(e.where),n=e.table.databaseid;Cu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&vT(e.table.tableid,n,i.columnid,t,r)}a(Y8,"getDeleteAttributes");function K8(e,t,r){if(!e){Bs.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new fo(e.columns),n=e.into.databaseid;Cu(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&vT(e.into.tableid,n,i.columnid,t,r)}a(K8,"getInsertAttributes");function vT(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(vT,"pushAttribute");EU.exports=PT});var xT=g((zEe,TU)=>{var jd=Qi(),mU=require("chalk"),Gr=$(),pU=require("prompt"),{promisify:W8}=require("util"),BT=M(),Q8=require("fs-extra"),z8=require("path"),J8=Q(),j8=Hd(),SU=ee();SU.initSync();var X8=require("moment"),Z8=W8(pU.get),e6=z8.join(SU.getHdbBasePath(),BT.LICENSE_KEY_DIR_NAME,BT.LICENSE_FILE_NAME,BT.LICENSE_FILE_NAME);TU.exports={getFingerprint:r6,setLicense:t6,parseLicense:HT,register:s6,getRegistrationInfo:i6};async function t6(e){if(e&&e.key&&e.company){try{Gr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await HT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Gr.error(r),Gr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(t6,"setLicense");async function r6(){let e={};try{e=await jd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Gr.error(r),Gr.error(t),new Error(r)}return e}a(r6,"getFingerprint");async function HT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Gr.info("Validating license input...");let r=jd.validateLicense(e,t);if(Gr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Gr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Gr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Gr.info("writing license to disk"),await Q8.writeFile(e6,JSON.stringify({license_key:e,company:t}))}catch(s){throw Gr.error("Failed to write License"),s}return"Registration successful."}a(HT,"parseLicense");async function s6(){let e=await n6();return HT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(s6,"register");async function n6(){let e=await jd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:mU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:mU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{pU.start()}catch(s){Gr.error(s)}let r;try{r=await Z8(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(n6,"promptForRegistration");async function i6(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await jd.getLicense()}catch(r){throw Gr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(J8.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=j8.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=X8.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(i6,"getRegistrationInfo")});var RU=g((jEe,gU)=>{"use strict";var o6=Fe(),qT=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+o6.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};gU.exports=qT});var bU=g((ZEe,OU)=>{"use strict";var AU=Fe(),GT=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+AU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+AU.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};OU.exports=GT});var yU=g((the,NU)=>{"use strict";var FT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};NU.exports=FT});var IU=g((she,wU)=>{"use strict";var a6=Fe(),kT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+a6.SERVER_SUFFIX.ADMIN,this.password=r}};wU.exports=kT});var YT=g((ihe,LU)=>{"use strict";var ha=require("path"),ef=require("fs-extra"),c6=RU(),u6=bU(),l6=yU(),_6=IU(),VT=ss(),pa=Q(),pr=Pr(),Zd=M(),Du=Fe(),{CONFIG_PARAMS:_t}=Zd,Lu=$(),Mu=ee(),CU=Tn(),$T=st(),ma="clustering",d6=1e4,DU=5;LU.exports={generateNatsConfig:E6,removeNatsConfig:h6,getHubConfigPath:f6};function f6(){let e=Mu.get(_t.ROOTPATH);return ha.join(e,ma,Du.NATS_CONFIG_FILES.HUB_SERVER)}a(f6,"getHubConfigPath");async function E6(e=!1,t=void 0){Mu.initSync();let r=Mu.get(_t.ROOTPATH),s=ha.join(r,ma,Du.PID_FILES.HUB),n=ha.join(r,ma,Du.PID_FILES.LEAF),i=pr.getConfigFromFile(_t.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=ha.join(r,ma,Du.NATS_CONFIG_FILES.HUB_SERVER),c=ha.join(r,ma,Du.NATS_CONFIG_FILES.LEAF_SERVER),u=pr.getConfigFromFile(_t.CLUSTERING_TLS_CERTIFICATE),_=pr.getConfigFromFile(_t.CLUSTERING_TLS_PRIVATEKEY),l=pr.getConfigFromFile(_t.CLUSTERING_TLS_CERT_AUTH),d=pr.getConfigFromFile(_t.CLUSTERING_TLS_INSECURE),f=pr.getConfigFromFile(_t.CLUSTERING_TLS_VERIFY),E=pr.getConfigFromFile(_t.CLUSTERING_NODENAME),h=pr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await $T.checkNATSServerInstalled()||tf("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await VT.listUsers(),S=pr.getConfigFromFile(_t.CLUSTERING_USER),T=await VT.getClusterUser();(pa.isEmpty(T)||T.active!==!0)&&tf(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Xd(_t.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Xd(_t.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Xd(_t.CLUSTERING_HUBSERVER_NETWORK_PORT),await Xd(_t.CLUSTERING_LEAFSERVER_NETWORK_PORT));let b=[],R=[];for(let[z,j]of p.entries())j.role.role===Zd.ROLE_TYPES_ENUM.CLUSTER_USER&&j.active&&(b.push(new _6(j.username,CU.decrypt(j.hash))),R.push(new l6(j.username,CU.decrypt(j.hash))));let L=[],{hub_routes:H}=pr.getClusteringRoutes();if(!pa.isEmptyOrZeroLength(H))for(let z of H)L.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${z.host}:${z.port}`);let P=new c6(pr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,pr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_CLUSTER_NAME),pr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),L,b,R);l==null&&(delete P.tls.ca_file,delete P.leafnodes.tls.ca_file),t=pa.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Zd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await ef.writeJson(o,P),Lu.trace(`Hub server config written to ${o}`));let k=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,B=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,J=new u6(pr.getConfigFromFile(_t.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[k],[B],b,R,u,_,l,d);l==null&&delete J.tls.ca_file,(t===void 0||t===Zd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await ef.writeJson(c,J),Lu.trace(`Leaf server config written to ${c}`))}a(E6,"generateNatsConfig");async function Xd(e){let t=Mu.get(e);return pa.isEmpty(t)&&tf(`port undefined for '${e}'`),await pa.isPortTaken(t)&&tf(`'${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(Xd,"isPortAvailable");function tf(e){let t=`Error generating clustering config: ${e}`;Lu.error(t),console.error(t),process.exit(1)}a(tf,"generateNatsConfigError");async function h6(e){let{port:t,config_file:r}=$T.getServerConfig(e),{username:s,decrypt_hash:n}=await VT.getClusterUser(),i=0,o=2e3;for(;i<DU;){try{let _=await $T.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Lu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=DU)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.`);await pa.async_set_timeout(o*(i*2))}let c="0".repeat(d6),u=ha.join(Mu.get(_t.ROOTPATH),ma,r);await ef.writeFile(u,c),await ef.remove(u),Lu.notify(e,"started.")}a(h6,"removeNatsConfig")});var HU=g((ahe,BU)=>{"use strict";var Fr=ee(),m6=Qi(),he=M(),Uu=Fe(),yn=require("path"),{PACKAGE_ROOT:sf}=M(),MU=ee(),rf=Q(),Sa="/dev/null",p6=yn.join(sf,"launchServiceScripts"),UU=yn.join(sf,"utility/scripts"),S6=yn.join(UU,he.HDB_RESTART_SCRIPT),PU=yn.resolve(sf,"dependencies",`${process.platform}-${process.arch}`,Uu.NATS_BINARY_NAME);function vU(){let t=m6.licenseSearch().ram_allocation||he.RAM_ALLOCATION_ENUM.DEFAULT,r=he.MEM_SETTING_KEY+t,s={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return rf.noBootFile()&&(s[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=rf.getEnvCliRootPath()),{name:he.PROCESS_DESCRIPTORS.HDB,script:he.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:sf}}a(vU,"generateMainServerConfig");var T6=9930;function g6(){Fr.initSync(!0);let e=Fr.get(he.CONFIG_PARAMS.ROOTPATH),t=yn.join(e,"clustering",Uu.NATS_CONFIG_FILES.HUB_SERVER),r=yn.join(Fr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),s=MU.get(he.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Uu.LOG_LEVEL_FLAGS[Fr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==T6?"-"+s:""),script:PU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Fr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Sa,i.error_file=Sa),i}a(g6,"generateNatsHubServerConfig");var R6=9940;function A6(){Fr.initSync(!0);let e=Fr.get(he.CONFIG_PARAMS.ROOTPATH),t=yn.join(e,"clustering",Uu.NATS_CONFIG_FILES.LEAF_SERVER),r=yn.join(Fr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),s=MU.get(he.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Uu.LOG_LEVEL_FLAGS[Fr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==R6?"-"+s:""),script:PU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Fr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Sa,i.error_file=Sa),i}a(A6,"generateNatsLeafServerConfig");function O6(){Fr.initSync();let e=yn.join(Fr.get(he.CONFIG_PARAMS.LOGGING_ROOT),he.LOG_NAMES.HDB),t={name:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:he.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:p6,autorestart:!1};return Fr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Sa,t.error_file=Sa),t}a(O6,"generateClusteringUpgradeV4ServiceConfig");function b6(){let e={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.RESTART_HDB};return rf.noBootFile()&&(e[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=rf.getEnvCliRootPath()),{...{name:he.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:UU},script:S6}}a(b6,"generateRestart");function N6(){return{apps:[vU()]}}a(N6,"generateAllServiceConfigs");BU.exports={generateAllServiceConfigs:N6,generateMainServerConfig:vU,generateRestart:b6,generateNatsHubServerConfig:g6,generateNatsLeafServerConfig:A6,generateClusteringUpgradeV4ServiceConfig:O6}});var jU=g((lhe,JU)=>{"use strict";var ve=M(),y6=Q(),In=YT(),nf=st(),wn=Fe(),hi=HU(),of=ee(),mi=$(),w6=os(),{startWorker:xU,onMessageFromWorkers:I6}=Ke(),C6=Ea(),uhe=require("util"),D6=require("child_process"),L6=require("fs"),{execFile:M6}=D6,ye;JU.exports={enterPM2Mode:U6,start:pi,stop:KT,reload:GU,restart:FU,list:WT,describe:VU,connect:Cn,kill:x6,startAllServices:q6,startService:QT,getUniqueServicesList:$U,restartAllServices:G6,isServiceRegistered:YU,reloadStopStart:KU,restartHdb:kU,deleteProcess:B6,startClusteringProcesses:QU,startClusteringThreads:zU,isHdbRestartRunning:H6,isClusteringRunning:k6,stopClustering:F6,reloadClustering:V6};var Pu=!1;I6(e=>{e.type==="restart"&&of.initSync(!0)});function U6(){Pu=!0}a(U6,"enterPM2Mode");function Cn(){return ye||(ye=require("pm2")),new Promise((e,t)=>{ye.connect((r,s)=>{mi.setupConsoleLogging(),r&&t(r),e(s)})})}a(Cn,"connect");var Sr,P6=10,qU;function pi(e,t=!1){if(Pu)return v6(e);let r=M6(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Sr.indexOf(r);o>-1&&Sr.splice(o,1),!qU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<P6&&(L6.existsSync(In.getHubConfigPath())?pi(e):(await In.generateNatsConfig(!0),pi(e),await new Promise(c=>setTimeout(c,3e3)),await In.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await In.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=of.get(ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&wn.LOG_LEVEL_HIERARCHY[o]>=wn.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===wn.LOG_LEVELS.ERR||l===wn.LOG_LEVELS.WRN?mi.OUTPUTS.STDERR:mi.OUTPUTS.STDOUT;mi.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=wn.LOG_LEVELS[f]}if(wn.LOG_LEVEL_HIERARCHY[o]>=wn.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===wn.LOG_LEVELS.ERR||l===wn.LOG_LEVELS.WRN?mi.OUTPUTS.STDERR:mi.OUTPUTS.STDOUT;mi.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),Sr=[],!Sr&&!t){let i=a(()=>{qU=!0,Sr&&(Sr.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)}Sr.push(r)}a(pi,"start");function v6(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.start(e,(s,n)=>{s&&(ye.disconnect(),r(s)),ye.disconnect(),t(n)})})}a(v6,"startWithPM2");function KT(e){if(!Pu){for(let t of Sr||[])t.name===e&&(Sr.splice(Sr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.stop(e,async(s,n)=>{s&&(ye.disconnect(),r(s)),ye.delete(e,(i,o)=>{i&&(ye.disconnect(),r(s)),ye.disconnect(),t(o)})})})}a(KT,"stop");function GU(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.reload(e,(s,n)=>{s&&(ye.disconnect(),r(s)),ye.disconnect(),t(n)})})}a(GU,"reload");function FU(e){if(!Pu)for(let t of Sr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.restart(e,(s,n)=>{ye.disconnect(),t(n)})})}a(FU,"restart");function B6(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.delete(e,(s,n)=>{s&&(ye.disconnect(),r(s)),ye.disconnect(),t(n)})})}a(B6,"deleteProcess");async function kU(){await pi(hi.generateRestart())}a(kU,"restartHdb");async function H6(){let e=await WT();for(let t in e)if(e[t].name===ve.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(H6,"isHdbRestartRunning");function WT(){return new Promise(async(e,t)=>{try{await Cn()}catch(r){t(r)}ye.list((r,s)=>{r&&(ye.disconnect(),t(r)),ye.disconnect(),e(s)})})}a(WT,"list");function VU(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.describe(e,(s,n)=>{s&&(ye.disconnect(),r(s)),ye.disconnect(),t(n)})})}a(VU,"describe");function x6(){if(!Pu){for(let e of Sr||[])e.kill();Sr=[];return}return new Promise(async(e,t)=>{try{await Cn()}catch(r){t(r)}ye.killDaemon((r,s)=>{r&&(ye.disconnect(),t(r)),ye.disconnect(),e(s)})})}a(x6,"kill");async function q6(){try{await QU(),await zU(),await pi(hi.generateAllServiceConfigs())}catch(e){throw ye?.disconnect(),e}}a(q6,"startAllServices");async function QT(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ve.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=hi.generateMainServerConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=hi.generateNatsIngestServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=hi.generateNatsReplyServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=hi.generateNatsHubServerConfig(),await pi(r,t),await In.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=hi.generateNatsLeafServerConfig(),await pi(r,t),await In.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=hi.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await pi(r)}catch(r){throw ye?.disconnect(),r}}a(QT,"startService");async function $U(){try{let e=await WT(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw ye?.disconnect(),e}}a($U,"getUniqueServicesList");async function G6(e=[]){try{let t=!1,r=await $U();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===ve.PROCESS_DESCRIPTORS.HDB?t=!0:await FU(o))}t&&await KU(ve.PROCESS_DESCRIPTORS.HDB)}catch(t){throw ye?.disconnect(),t}}a(G6,"restartAllServices");async function YU(e){if(Sr?.find(r=>r.name===e))return!0;let t=await C6.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(YU,"isServiceRegistered");async function KU(e){let t=of.get(ve.CONFIG_PARAMS.THREADS_COUNT)??of.get(ve.CONFIG_PARAMS.THREADS),r=await VU(e),s=y6.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await KT(e),await QT(e)):e===ve.PROCESS_DESCRIPTORS.HDB?await kU():await GU(e)}a(KU,"reloadStopStart");var WU;async function QU(e=!1){for(let t in ve.CLUSTERING_PROCESSES){let r=ve.CLUSTERING_PROCESSES[t];await QT(r,e)}}a(QU,"startClusteringProcesses");async function zU(){WU=xU(ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await nf.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await nf.updateLocalStreams();let e=await w6.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ve.PRE_4_0_0_VERSION){mi.info("Starting clustering upgrade 4.0.0 process"),xU(ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(zU,"startClusteringThreads");async function F6(){for(let e in ve.CLUSTERING_PROCESSES)if(e!==ve.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ve.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await WU.terminate();else{let t=ve.CLUSTERING_PROCESSES[e];await KT(t)}}a(F6,"stopClustering");async function k6(){for(let e in ve.CLUSTERING_PROCESSES){let t=ve.CLUSTERING_PROCESSES[e];if(await YU(t)===!1)return!1}return!0}a(k6,"isClusteringRunning");async function V6(){await In.generateNatsConfig(!0),await nf.reloadNATSHub(),await nf.reloadNATSLeaf(),await In.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await In.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(V6,"reloadClustering")});var _f=g((fhe,nP)=>{"use strict";var $6=require("minimist"),{isMainThread:JT,parentPort:eP}=require("worker_threads"),nt=M(),{PROCESS_DESCRIPTORS_VALIDATE:vu}=nt,sn=$(),jT=Q(),cf=YT(),af=st(),dhe=Fe(),tP=Pr(),nn=jU(),XU=Ea(),Y6=Oh(),{restartWorkers:uf,onMessageByType:K6}=Ke(),{handleHDBError:W6,hdb_errors:Q6}=se(),{HTTP_STATUS_CODES:z6}=Q6,lf=ee();lf.initSync();var Bu=`Restarting HarperDB. This may take up to ${nt.RESTART_TIMEOUT_MS/1e3} seconds.`,J6="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",ZU="Clustering is not enabled so cannot be restarted",j6="Invalid service",Ta,as;nP.exports={restart:rP,restartService:XT};JT&&K6(nt.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?XT({service:e.workerType}):rP({operation:"restart"})});async function rP(e){as=Object.keys(e).length===0,Ta=await nn.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR);let t=$6(process.argv);if(t.service){await XT(t);return}if(as&&!Ta){console.error(J6);return}if(as&&console.log(Bu),Ta){nn.enterPM2Mode(),sn.notify(Bu);let r=Y6(Object.keys(nt.CONFIG_PARAM_MAP),!0);return jT.isEmptyOrZeroLength(Object.keys(r))||tP.updateConfigValue(void 0,void 0,r,!0,!0),X6(),Bu}return JT?(sn.notify(Bu),setTimeout(()=>{uf()},50)):eP.postMessage({type:nt.ITC_EVENT_TYPES.RESTART}),Bu}a(rP,"restart");async function XT(e){let{service:t}=e;if(nt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw W6(new Error,j6,z6.BAD_REQUEST,void 0,void 0,!0);if(Ta=await nn.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR),!JT)return eP.postMessage({type:nt.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case vu.clustering:if(!lf.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=ZU;break}as&&console.log("Restarting clustering"),sn.notify("Restarting clustering"),await sP();break;case vu.clustering_config:case vu["clustering config"]:if(!lf.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=ZU;break}as&&console.log("Restarting clustering_config"),sn.notify("Restarting clustering_config"),await nn.reloadClustering();break;case"custom_functions":case"custom functions":case vu.harperdb:case vu.http_workers:if(as&&!Ta){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}as&&console.log("Restarting http_workers"),sn.notify("Restarting http_workers"),as?await nn.restart(nt.HDB_PROC_DESCRIPTOR):setTimeout(()=>{uf("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(sn.error(r),as&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(XT,"restartService");async function X6(){await sP(),await nn.restart(nt.HDB_PROC_DESCRIPTOR),await jT.async_set_timeout(2e3),lf.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await zT(),as&&(await af.closeConnection(),process.exit(0))}a(X6,"restartPM2Mode");async function sP(){if(!tP.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await XU.getHDBProcessInfo()).clustering.length===0)sn.trace("Clustering not running, restart will start clustering services"),await cf.generateNatsConfig(!0),await nn.startClusteringProcesses(),await nn.startClusteringThreads(),await zT(),as&&await af.closeConnection();else{await cf.generateNatsConfig(!0),Ta?(sn.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await nn.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await nn.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await XU.getHDBProcessInfo()).clustering.forEach(n=>{sn.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await jT.async_set_timeout(3e3),await zT(),await af.updateLocalStreams(),as&&await af.closeConnection(),sn.trace("Restart clustering restarting ingest and reply service threads");let t=uf(nt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=uf(nt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(sP,"restartClustering");async function zT(){await cf.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await cf.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(zT,"removeNatsConfig")});var hP=g((mhe,EP)=>{"use strict";var hhe=require("lodash"),Tr=M(),{handleHDBError:iP,hdb_errors:Z6}=se(),{HDB_ERROR_MSGS:e9,HTTP_STATUS_CODES:t9}=Z6,ZT=$();EP.exports={getRolePermissions:s9};var Eo=Object.create(null),r9=a(e=>({key:e,perms:{}}),"perms_template_obj"),uP=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),lP=a((e=!1,t=!1,r=!1,s=!1)=>({[Tr.PERMS_CRUD_ENUM.READ]:e,[Tr.PERMS_CRUD_ENUM.INSERT]:t,[Tr.PERMS_CRUD_ENUM.UPDATE]:r,[Tr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),eg=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...lP(t,r,s,n)}),"table_perms_template"),oP=a((e,t=lP())=>({attribute_name:e,describe:fP(t),[Hu]:t[Hu],[tg]:t[tg],[rg]:t[rg]}),"attr_perms_template"),aP=a((e,t=!1)=>({attribute_name:e,describe:t,[Hu]:t}),"timestamp_attr_perms_template"),{READ:Hu,INSERT:tg,UPDATE:rg}=Tr.PERMS_CRUD_ENUM,_P=Object.values(Tr.PERMS_CRUD_ENUM),dP=[Hu,tg,rg];function s9(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[Tr.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Eo[t]&&Eo[t].key===s)return Eo[t].perms;let n=n9(e,r);return Eo[t]?Eo[t].key=s:Eo[t]=r9(s),Eo[t].perms=n,n}catch(r){if(!e[Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Tr.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw ZT.error(s),ZT.debug(r),iP(new Error,e9.OUTDATED_PERMS_TRANSLATION_ERROR,t9.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
11
- ${r.stack}`;throw ZT.error(s),iP(new Error)}}}a(s9,"getRolePermissions");function n9(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Tr.SYSTEM_SCHEMA_NAME]=s[Tr.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=i9(t[i]);return}r[i]=uP(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=o9(c,u);r[i].describe||_P.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=eg()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=eg()})}),r}a(n9,"translateRolePermissions");function i9(e){let t=uP(!0);return Object.keys(e).forEach(r=>{t.tables[r]=eg(!0,!0,!0,!0,!0)}),t}a(i9,"createStructureUserPermissions");function o9(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return Tr.TIME_STAMP_NAMES.includes(d)&&(f=aP(d,l[Hu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=oP(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=fP(l),n.attribute_permissions.push(l),c||a9(l,u)}else if(_!==o){let l;Tr.TIME_STAMP_NAMES.includes(_)?l=aP(_):l=oP(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=cP(n),n}else return e.describe=cP(e),e}a(o9,"getTableAttrPerms");function cP(e){return _P.filter(t=>e[t]).length>0}a(cP,"getSchemaTableDescribePerm");function fP(e){return dP.filter(t=>e[t]).length>0}a(fP,"getAttributeDescribePerm");function a9(e,t){dP.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(a9,"checkForHashPerms")});var mP={};Ye(mP,{Resources:()=>df,keyArrayToString:()=>ga,resetResources:()=>c9,resources:()=>Si});function c9(){return Si=new df}function ga(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var df,Si,xu=Re(()=>{eo();df=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Xe(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(c9,"resetResources");a(ga,"keyArrayToString")});var pP={};Ye(pP,{Headers:()=>Ti,appendHeader:()=>sg});function sg(e,t,r,s){if(e.append)e.append(t,r,s);else if(e.set){let n=e.get(t);if(n)if(s)r=(typeof n=="string"?n:n.join(", "))+", "+r;else if(typeof n=="string")r=[n,r];else{n.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var Ti,qu=Re(()=>{Ti=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 s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];if(s)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(sg,"appendHeader")});var Gu={};Ye(Gu,{authentication:()=>NP,bypassAuth:()=>h9,login:()=>p9,logout:()=>S9,start:()=>m9});function h9(){bP=!0}async function NP(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?d9?_9:[]:l9?u9:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Ti([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return ff&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),ff&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(ff){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let p=n.indexOf(";",h),S=n.indexOf("=",h);u=n.slice(S+1,p===-1?n.length:p),_=await TP.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new Ra.AuthAuditLog(E,h,Ut.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===Ut.AUTH_AUDIT_STATUS.SUCCESS?SP.notify(S):SP.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 tt.getUser(E,null,null),l(E,Ut.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Ra.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(s){if(d=ho.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await tt.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,Ef.validateOperationToken)(h)}catch(T){if(T.message==="invalid token")try{return await(0,Ef.validateRefreshToken)(h),c({status:-1})}catch{throw T}}break}}catch(T){return E9&&(ho.get(h)||(ho.set(h,h),l(p,Ut.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:gi({error:T.message},e)})}ho.set(s,d),f9&&l(d.username,Ut.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await tt.getUser(_.user,null,e):(bP&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,RP.getSuperUser)());ff&&(e.session.update=function(E){if(!u){u=(0,AP.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}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=u,TP.put(E)},e.login=async function(E,h){e.user=await tt.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")&&Si.loginPath?(f.status=302,f.headers.set("Location",Si.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new Ti);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function m9({server:e,port:t}){e.request(NP,{port:t||"all"}),gP||(gP=!0,setInterval(()=>{ho=new Map},cs.get(Ut.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),OP.user.addListener(()=>{ho=new Map}))}async function p9(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 S9(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var RP,Ef,AP,cs,Ut,Ra,OP,SP,u9,l9,_9,d9,TP,ff,bP,f9,E9,ho,gP,hf=Re(()=>{RP=x(ss());nr();xu();Ef=x(Tu());Ae();AP=require("uuid"),cs=x(ee()),Ut=x(M()),Ra=x($()),OP=x(Hc());qu();Aa();SP=(0,Ra.loggerWithTag)("auth-event");cs.initSync();u9=cs.get(Ut.CONFIG_PARAMS.HTTP_CORSACCESSLIST),l9=cs.get(Ut.CONFIG_PARAMS.HTTP_CORS),_9=cs.get(Ut.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),d9=cs.get(Ut.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),TP=ct({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),ff=cs.get(Ut.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,bP=cs.get(Ut.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,f9=cs.get(Ut.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,E9=cs.get(Ut.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,ho=new Map;tt.onInvalidatedUser(()=>{ho=new Map});a(h9,"bypassAuth");a(NP,"authentication");a(m9,"start");a(p9,"login");a(S9,"logout")});var MP=g((whe,LP)=>{"use strict";var we=require("joi"),yP=require("fs-extra"),wP=require("path"),Ln=je(),IP=ee(),CP=M(),DP=$(),{hdb_errors:T9}=se(),{HDB_ERROR_MSGS:jt}=T9,Dn=/^[a-zA-Z0-9-_]+$/;LP.exports={getDropCustomFunctionValidator:R9,setCustomFunctionValidator:A9,addComponentValidator:y9,dropCustomFunctionProjectValidator:w9,packageComponentValidator:I9,deployComponentValidator:C9,setComponentFileValidator:O9,getComponentFileValidator:N9,dropComponentFileValidator:b9};function mf(e,t,r){try{let s=IP.get(CP.CONFIG_PARAMS.COMPONENTSROOT),n=wP.join(s,t);return yP.existsSync(n)?e?t:r.message(jt.PROJECT_EXISTS):e?r.message(jt.NO_PROJECT):t}catch(s){return DP.error(s),r.message(jt.VALIDATION_ERR)}}a(mf,"checkProjectExists");function Fu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Fu,"checkFilePath");function g9(e,t,r,s){try{let n=IP.get(CP.CONFIG_PARAMS.COMPONENTSROOT),i=wP.join(n,e,t,r+".js");return yP.existsSync(i)?r:s.message(jt.NO_FILE)}catch(n){return DP.error(n),s.message(jt.VALIDATION_ERR)}}a(g9,"checkFileExists");function R9(e){let t=we.object({project:we.string().pattern(Dn).custom(mf.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().pattern(Dn).custom(g9.bind(null,e.project,e.type)).custom(Fu).required().messages({"string.pattern.base":jt.BAD_FILE_NAME})});return Ln.validateBySchema(e,t)}a(R9,"getDropCustomFunctionValidator");function A9(e){let t=we.object({project:we.string().pattern(Dn).custom(mf.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().custom(Fu).required(),function_content:we.string().required()});return Ln.validateBySchema(e,t)}a(A9,"setCustomFunctionValidator");function O9(e){let t=we.object({project:we.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:we.string().custom(Fu).required(),payload:we.string().allow("").optional(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ln.validateBySchema(e,t)}a(O9,"setComponentFileValidator");function b9(e){let t=we.object({project:we.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:we.string().custom(Fu).optional()});return Ln.validateBySchema(e,t)}a(b9,"dropComponentFileValidator");function N9(e){let t=we.object({project:we.string().required(),file:we.string().custom(Fu).required(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ln.validateBySchema(e,t)}a(N9,"getComponentFileValidator");function y9(e){let t=we.object({project:we.string().pattern(Dn).custom(mf.bind(null,!1)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(y9,"addComponentValidator");function w9(e){let t=we.object({project:we.string().pattern(Dn).custom(mf.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(w9,"dropCustomFunctionProjectValidator");function I9(e){let t=we.object({project:we.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),skip_node_modules:we.boolean()});return Ln.validateBySchema(e,t)}a(I9,"packageComponentValidator");function C9(e){let t=we.object({project:we.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),payload:we.string().optional().messages({"string.pattern.base":jt.BAD_PACKAGE}),package:we.string().optional()});return Ln.validateBySchema(e,t)}a(C9,"deployComponentValidator")});var gf=g((Che,qP)=>{"use strict";var pf=require("joi"),Sf=require("path"),UP=require("fs-extra"),{exec:D9}=require("child_process"),L9=require("util"),PP=L9.promisify(D9),ku=M(),{handleHDBError:Oa,hdb_errors:M9}=se(),{HTTP_STATUS_CODES:ba}=M9,Vu=ee(),U9=je(),Na=$();Vu.initSync();var ng=Vu.get(ku.CONFIG_PARAMS.COMPONENTSROOT),vP="npm install --omit=dev --json",P9=`${vP} --dry-run`;qP.exports={installModules:x9,auditModules:q9,installAllRootModules:v9,uninstallRootModule:B9,linkHarperdb:H9};async function v9(e=!1){await Tf(),await $u(e?"npm install --ignore-scripts":"npm install",Vu.get(ku.CONFIG_PARAMS.ROOTPATH))}a(v9,"installAllRootModules");async function B9(e){await $u(`npm uninstall ${e}`,Vu.get(ku.CONFIG_PARAMS.ROOTPATH))}a(B9,"uninstallRootModule");async function H9(){await Tf(),await $u(`npm link ${ku.PACKAGE_ROOT}`,Vu.get(ku.CONFIG_PARAMS.ROOTPATH))}a(H9,"linkHarperdb");async function $u(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await PP(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
12
- `,""))}return s&&!s.includes("Debugger listening")&&Na.error("Error running NPM command:",e,s),Na.trace(r,s),r?.replace(`
13
- `,"")}a($u,"runCommand");async function x9(e){Na.info(`starting installModules for request: ${e}`);let t=xP(e);if(t)throw Oa(t,t.message,ba.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?P9:vP;await Tf(),await HP(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let _=Sf.join(ng,u),l,d=null;try{let{stdout:f,stderr:E}=await PP(n,{cwd:_});l=f?f.replace(`
10
+ `,"")}a(QD,"runCommand");async function z3(){try{await y3.access(OS)}catch{return!1}let e=await QD(`${OS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return w3.eq(t,W3)}a(z3,"checkNATSServerInstalled");async function IS(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await KD.getClusterUser();if(co(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Ps.trace("create nats connection called");let i=await H3({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Ps.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Ps.error("Error with Nats client connection, connection closed",o),zD()}),i}a(IS,"createConnection");function zD(){_r=void 0,io=void 0,oo=void 0,ao=void 0}a(zD,"clearClientCache");async function J3(){_r&&(await _r.drain(),_r=void 0,io=void 0,oo=void 0,ao=void 0)}a(J3,"closeConnection");var _r,ao;async function gd(){return ao||(ao=IS(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),_r=await ao),_r||ao}a(gd,"getConnection");async function _u(){if(io)return io;co(_r)&&await gd();let{domain:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(co(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return io=await _r.jetstreamManager({domain:e,timeout:6e4}),io}a(_u,"getJetStreamManager");async function JD(){if(oo)return oo;co(_r)&&await gd();let{domain:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(co(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return oo=_r.jetstream({domain:e,timeout:6e4}),oo}a(JD,"getJetStream");async function vs(){let e=_r||await gd(),t=io||await _u(),r=oo||await JD();return{connection:e,jsm:t,js:r}}a(vs,"getNATSReferences");async function X3(e){let t=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await KD.getClusterUser(),n=await IS(t,r,s),i=wS(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=WD.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await Sd.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(X3,"getServerList");async function CS(e,t){let{jsm:r}=await vs(),s=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:x3.File,retention:q3.Limits,subjects:t,discard:G3.Old,max_msgs:n,max_bytes:i,max_age:s})}a(CS,"createLocalStream");async function XD(){let{jsm:e}=await vs(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(XD,"listStreams");async function j3(e){let{jsm:t}=await vs();await t.streams.delete(e)}a(j3,"deleteLocalStream");async function Z3(e){let{connection:t}=await vs(),r=[],s=wS(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(WD.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(Z3,"listRemoteStreams");async function eX(e,t=void 0,r=void 0){let{jsm:s,js:n}=await vs(),i=kD(),o={durable_name:i,ack_policy:NS.Explicit};t&&(o.deliver_policy=yS.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=bS(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Ft.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(eX,"viewStream");async function*tX(e,t=void 0,r=void 0){let{jsm:s,js:n}=await vs(),i=kD(),o={durable_name:i,ack_policy:NS.Explicit};t&&(o.deliver_policy=yS.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=bS(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(Ft.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(tX,"viewStreamIterator");async function rX(e,t,r,s){Ps.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=jD(s,r);let{js:n}=await vs(),i=await Rd(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:YD.encode(s);try{Ps.trace(`publishToStream publishing to subject: ${o}`),Y3(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return eL(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Ps.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await CS(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(rX,"publishToStream");function jD(e,t){t===void 0&&(t=k3());let r=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Ft.MSG_HEADERS.ORIGIN)&&r&&t.append(Ft.MSG_HEADERS.ORIGIN,r),t}a(jD,"addNatsMsgHeader");function du(e){e=e.toLowerCase();let t=lu.join(Mt.get(Ce.CONFIG_PARAMS.ROOTPATH),K3);if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return co(AS)&&(AS={port:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ft.SERVER_SUFFIX.HUB,config_file:Ft.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:lu.join(t,Ft.PID_FILES.HUB),hdb_nats_path:t}),AS;if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return co(RS)&&(RS={port:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ft.SERVER_SUFFIX.LEAF,config_file:Ft.NATS_CONFIG_FILES.LEAF_SERVER,domain:cu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ft.SERVER_SUFFIX.LEAF,pid_file_path:lu.join(t,Ft.PID_FILES.LEAF),hdb_nats_path:t}),RS;Ps.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(du,"getServerConfig");async function ZD(e,t,r,s){try{await e.consumers.add(t,{ack_policy:NS.Explicit,durable_name:r,deliver_policy:yS.StartTime,opt_start_time:s})}catch(n){if(n.message!=="consumer already exists")throw n}}a(ZD,"createConsumer");async function sX(e,t,r){await e.consumers.delete(t,r)}a(sX,"removeConsumer");function nX(e){return e.split(".")[1]}a(nX,"extractServerName");async function iX(e,t,r=6e4,s=wS()){if(!Sd.isObject(t))throw new Error("data param must be an object");let n=YD.encode(t),{connection:i}=await vs(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return bS(c.data)}a(iX,"request");function DS(e){return new Promise(async(t,r)=>{let s=L3(OS,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(DS,"reloadNATS");async function oX(){let{pid_file_path:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await DS(e)}a(oX,"reloadNATSHub");async function aX(){let{pid_file_path:e}=du(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await DS(e)}a(aX,"reloadNATSLeaf");function cX(e,t,r){let s;switch(e.code){case FD.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case FD.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(cX,"requestErrorHandler");async function uX(e,t){let r=t+Ft.SERVER_SUFFIX.LEAF,{connection:s}=await vs(),{jsm:n}=await pX(r),{schema:i,table:o}=e,c=Td.createNatsTableStreamName(i,o),u=e.start_time?e.start_time:new Date(Date.now()).toISOString();await eL(async()=>{if(e.subscribe===!0)await ZD(n,c,s.info.server_name,u);else try{await sX(n,c,s.info.server_name)}catch(_){Ps.trace(_)}})}a(uX,"updateRemoteConsumer");async function lX(e,t,r,s){let n=Td.createNatsTableStreamName(e,t),i=r+Ft.SERVER_SUFFIX.LEAF,o={type:Ce.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:s,stream_name:n,node_domain_name:i};if(!$D&&v3()<Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=gS();await c(o)}await U3(o),s==="stop"&&await Sd.async_set_timeout(1e3)}a(lX,"updateConsumerIterator");function eL(e){return M3.writeTransaction(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(eL,"exclusiveLock");async function tL(e,t){let r=Td.createNatsTableStreamName(e,t),s=await Rd(),n=EX(e,t,s);await CS(r,[n])}a(tL,"createLocalTableStream");async function _X(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await tL(s,n)}}a(_X,"createTableStreams");async function rL(e,t){if(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Td.createNatsTableStreamName(e,t),{jsm:s}=await vs();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Ps.warn(r);else throw r}}a(rL,"purgeTableStream");async function dX(e,t){if(Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await rL(e,t[r])}a(dX,"purgeSchemaTableStreams");async function fX(e){return(await _u()).streams.info(e)}a(fX,"getStreamInfo");function EX(e,t,r){return`${Ft.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(EX,"createSubjectName");async function Rd(){if(uu)return uu;if(uu=(await _u())?.nc?.info?.server_name,uu===void 0)throw new Error("Unable to get jetstream manager server name");return uu}a(Rd,"getJsmServerName");async function hX(){let e=await _u(),t=await Rd(),r=await XD();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=mX(s),c=i.split(".");if(c[c.length-1]===t&&!o||n.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Ps.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l,await e.streams.update(n.name,n)}}a(hX,"updateLocalStreams");function mX(e){let{config:t}=e,r=!1,s=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Mt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(mX,"updateStreamLimits");async function pX(e){let t,r;try{t=await _r.jetstream({domain:e}),r=await _r.jetstreamManager({domain:e})}catch(s){throw Ps.error("Unable to connect to:",e),s}return{js:t,jsm:r}}a(pX,"connectToRemoteJS")});var fu=g((Efe,aL)=>{"use strict";var ca=p_(),ua=fD(),SX=$(),TX=require("uuid").v4,ffe=require("clone"),Od=Rn(),la=M(),gX=require("util"),ui=ys(),{handleHDBError:dr,hdb_errors:RX}=se(),{HDB_ERROR_MSGS:Ad,HTTP_STATUS_CODES:fr}=RX,{SchemaEventMsg:bd}=Cs(),nL=st(),{getDatabases:AX}=(Ae(),ne(Ge)),{transformReq:_a}=Q();aL.exports={createSchema:OX,createSchemaStructure:iL,createTable:bX,createTableStructure:oL,createAttribute:CX,dropSchema:NX,dropTable:yX,dropAttribute:wX,getBackup:DX};async function OX(e){let t=await iL(e);return Od.signalSchemaChange(new bd(process.pid,e.operation,e.schema)),t}a(OX,"createSchema");async function iL(e){let t=ca.schema_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);if(_a(e),!await ua.checkSchemaExists(e.schema))throw dr(new Error,Ad.SCHEMA_EXISTS_ERR(e.schema),fr.BAD_REQUEST,la.LOG_LEVELS.ERROR,Ad.SCHEMA_EXISTS_ERR(e.schema),!0);return await ui.createSchema(e),`database '${e.schema}' successfully created`}a(iL,"createSchemaStructure");async function bX(e){return _a(e),e.hash_attribute=e.primary_key??e.hash_attribute,await oL(e)}a(bX,"createTable");async function oL(e){let t=ca.create_table_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);if(ca.validateTableResidence(e.residence),!await ua.checkSchemaTableExists(e.schema,e.table))throw dr(new Error,Ad.TABLE_EXISTS_ERR(e.schema,e.table),fr.BAD_REQUEST,la.LOG_LEVELS.ERROR,Ad.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:TX(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await ui.createTable(s,e);else throw dr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",fr.BAD_REQUEST);else await ui.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(oL,"createTableStructure");async function NX(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=ca.schema_object(e),s=t??r;if(s)throw dr(s,s.message,fr.BAD_REQUEST,void 0,void 0,!0);_a(e);let n=await ua.checkSchemaExists(e.schema);if(n)throw dr(new Error,n,fr.NOT_FOUND,la.LOG_LEVELS.ERROR,n,!0);let i=await ua.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ui.dropSchema(e),Od.signalSchemaChange(new bd(process.pid,e.operation,e.schema)),await nL.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(NX,"dropSchema");async function yX(e){let t=ca.table_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);_a(e);let r=await ua.checkSchemaTableExists(e.schema,e.table);if(r)throw dr(new Error,r,fr.NOT_FOUND,la.LOG_LEVELS.ERROR,r,!0);return await ui.dropTable(e),await nL.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(yX,"dropTable");async function wX(e){let t=ca.attribute_object(e);if(t)throw dr(t,t.message,fr.BAD_REQUEST,void 0,void 0,!0);_a(e);let r=await ua.checkSchemaTableExists(e.schema,e.table);if(r)throw dr(new Error,r,fr.NOT_FOUND,la.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw dr(new Error,"You cannot drop a hash attribute",fr.BAD_REQUEST,void 0,void 0,!0);if(la.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw dr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,fr.BAD_REQUEST,void 0,void 0,!0);try{return await ui.dropAttribute(e),IX(e),Od.signalSchemaChange(new bd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw SX.error(`Got an error deleting attribute ${gX.inspect(e)}.`),s}}a(wX,"dropAttribute");function IX(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(IX,"dropAttributeFromGlobal");async function CX(e){_a(e);let t=AX()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw dr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,fr.BAD_REQUEST,void 0,void 0,!0);return await ui.createAttribute(e),Od.signalSchemaChange(new bd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(CX,"createAttribute");function DX(e){return ui.getBackup(e)}a(DX,"getBackup")});var uL=g((mfe,cL)=>{"use strict";var{OPERATIONS_ENUM:LX}=M(),LS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=LX.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};cL.exports=LS});var MS=g((Tfe,EL)=>{"use strict";var MX=ys(),Sfe=uL(),Nd=Q(),yd=M(),UX=ee(),{handleHDBError:lL,hdb_errors:PX}=se(),{HDB_ERROR_MSGS:_L,HTTP_STATUS_CODES:dL}=PX,vX=Object.values(yd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),fL="To use this operation audit log must be enabled in harperdb-config.yaml";EL.exports=BX;async function BX(e){if(Nd.isEmpty(e.schema))throw new Error(_L.SCHEMA_REQUIRED_ERR);if(Nd.isEmpty(e.table))throw new Error(_L.TABLE_REQUIRED_ERR);if(!UX.get(yd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw lL(new Error,fL,dL.BAD_REQUEST,yd.LOG_LEVELS.ERROR,fL,!0);let t=Nd.checkSchemaTableExist(e.schema,e.table);if(t)throw lL(new Error,t,dL.NOT_FOUND,yd.LOG_LEVELS.ERROR,t,!0);if(!Nd.isEmpty(e.search_type)&&vX.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await MX.readAuditLog(e)}a(BX,"readAuditLog")});var mL=g((Rfe,hL)=>{"use strict";var{OPERATIONS_ENUM:HX}=M(),US=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=HX.GET_BACKUP,this.schema=t,this.table=r}};hL.exports=US});var TL=g((Nfe,SL)=>{"use strict";var xX=ys(),Ofe=mL(),PS=Q(),qX=M(),bfe=ee(),{handleHDBError:GX,hdb_errors:FX}=se(),{HDB_ERROR_MSGS:pL,HTTP_STATUS_CODES:kX}=FX;SL.exports=VX;async function VX(e){if(PS.isEmpty(e.schema))throw new Error(pL.SCHEMA_REQUIRED_ERR);if(PS.isEmpty(e.table))throw new Error(pL.TABLE_REQUIRED_ERR);let t=PS.checkSchemaTableExist(e.schema,e.table);if(t)throw GX(new Error,t,kX.NOT_FOUND,qX.LOG_LEVELS.ERROR,t,!0);return await xX.getBackup(read_audit_log_object)}a(VX,"getBackup")});var NL=g((wfe,bL)=>{var li=require("validate.js"),RL=Xe(),da=M(),{handleHDBError:$X,hdb_errors:YX}=se(),{HDB_ERROR_MSGS:lt,HTTP_STATUS_CODES:KX}=YX,vS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),WX={STRUCTURE_USER:"structure_user"},gL=Object.values(da.ROLE_TYPES_ENUM),QX="attribute_permissions",zX="attribute_name",{PERMS_CRUD_ENUM:fa}=da,JX=[QX,...Object.values(fa)],AL=[fa.READ,fa.INSERT,fa.UPDATE],XX=[zX,...AL];function jX(e){let t=vS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,OL(e,t)}a(jX,"addRoleValidation");function ZX(e){let t=vS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,OL(e,t)}a(ZX,"alterRoleValidation");function ej(e){let t=vS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,RL.validateObject(e,t)}a(ej,"dropRoleValidation");var tj=["operation","role","id","permission","hdb_user","hdb_auth_header"];function OL(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)tj.includes(s[o])||n.push(s[o]);n.length>0&&ht(lt.INVALID_ROLE_JSON_KEYS(n),r);let i=RL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{ht(o,r)}),e.permission){let o=rj(e);o&&ht(o,r),gL.forEach(c=>{e.permission[c]&&!li.isBoolean(e.permission[c])&&ht(lt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(gL.indexOf(o)<0){if(o===WX.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||ht(lt.SCHEMA_NOT_FOUND(d),r)}continue}ht(lt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){ht(lt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){ht(lt.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{JX.includes(l)||ht(lt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(fa).forEach(l=>{li.isDefined(_[l])?li.isBoolean(_[l])||ht(lt.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):ht(lt.TABLE_PERM_MISSING(l),r,o,u)}),li.isDefined(_.attribute_permissions)){if(!li.isArray(_.attribute_permissions)){ht(lt.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{ht(lt.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].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(p=>{!XX.includes(p)&&p!==fa.DELETE&&ht(lt.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!li.isDefined(E.attribute_name)){ht(lt.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){ht(lt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}AL.forEach(p=>{li.isDefined(E[p])?li.isBoolean(E[p])||ht(lt.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):ht(lt.ATTR_PERM_MISSING(p,h),r,o,u)}),!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}.${u}`;ht(lt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return sj(r)}a(OL,"customValidate");bL.exports={addRoleValidation:jX,alterRoleValidation:ZX,dropRoleValidation:ej};function rj(e){let{operation:t,permission:r}=e;if(t===da.OPERATIONS_ENUM.ADD_ROLE||t===da.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return lt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?da.ROLE_TYPES_ENUM.SUPER_USER:da.ROLE_TYPES_ENUM.CLUSTER_USER;return lt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(rj,"validateNoSUPerms");function sj(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:lt.ROLE_PERMS_ERROR,...e};return $X(new Error,s,KX.BAD_REQUEST)}else return null}a(sj,"generateRolePermResponse");function ht(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(ht,"addPermError")});var FS=g((Cfe,CL)=>{"use strict";var yL=Lr(),wL=Dr(),nj=si(),HS=NL(),xS=Rn(),ij=require("uuid").v4,oj=require("util"),wd=M(),aj=Q(),qS=wL.searchByValue,cj=wL.searchByHash,uj=oj.promisify(nj.delete),lj=Zs(),_j=ra(),{hdb_errors:dj,handleHDBError:uo}=se(),{HDB_ERROR_MSGS:IL,HTTP_STATUS_CODES:Eu}=dj,{UserEventMsg:GS}=Cs();CL.exports={addRole:fj,alterRole:Ej,dropRole:hj,listRoles:mj};function BS(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(BS,"scrubRoleDetails");async function fj(e){let t=HS.addRoleValidation(e);if(t)throw t;e=BS(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await qS(r)||[])}catch(i){throw uo(i)}if(s&&s.length>0)throw uo(new Error,IL.ROLE_ALREADY_EXISTS(e.role),Eu.CONFLICT,void 0,void 0,!0);e.id||(e.id=ij());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await yL.insert(n),xS.signalUserChange(new GS(process.pid)),e=BS(e),e}a(fj,"addRole");async function Ej(e){let t=HS.alterRoleValidation(e);if(t)throw t;e=BS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await yL.update(r)}catch(n){throw uo(n)}if(s&&s?.message==="updated 0 of 1 records")throw uo(new Error,"Invalid role id",Eu.BAD_REQUEST,void 0,void 0,!0);return await xS.signalUserChange(new GS(process.pid)),e}a(Ej,"alterRole");async function hj(e){let t=HS.dropRoleValidation(e);if(t)throw uo(new Error,t,Eu.BAD_REQUEST,void 0,void 0,!0);let r=new _j(wd.SYSTEM_SCHEMA_NAME,wd.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await cj(r));if(s.length===0)throw uo(new Error,IL.ROLE_NOT_FOUND,Eu.NOT_FOUND,void 0,void 0,!0);let n=new lj(wd.SYSTEM_SCHEMA_NAME,wd.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await qS(n)),o=!1;if(aj.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw uo(new Error,`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`,Eu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await uj(c),xS.signalUserChange(new GS(process.pid)),`${s[0].role} successfully deleted`}a(hj,"dropRole");async function mj(){return qS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(mj,"listRoles")});var UL=g((Lfe,ML)=>{"use strict";var pj=ee(),_i=require("joi"),Sj=Xe(),DL=require("moment"),Tj=require("fs-extra"),kS=require("path"),gj=require("lodash"),hu=M(),{LOG_LEVELS:lo}=M(),Rj="YYYY-MM-DD hh:mm:ss",Aj=kS.resolve(__dirname,"../logs");ML.exports=function(e){return Sj.validateBySchema(e,Oj)};var Oj=_i.object({from:_i.custom(LL),until:_i.custom(LL),level:_i.valid(lo.NOTIFY,lo.FATAL,lo.ERROR,lo.WARN,lo.INFO,lo.DEBUG,lo.TRACE),order:_i.valid("asc","desc"),limit:_i.number().min(1),start:_i.number().min(0),log_name:_i.custom(bj)});function LL(e,t){if(DL(e,DL.ISO_8601).format(Rj)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(LL,"validateDatetime");function bj(e,t){if(gj.invert(hu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=pj.get(hu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?hu.LOG_NAMES.HDB:e,i=n===hu.LOG_NAMES.INSTALL?kS.join(Aj,hu.LOG_NAMES.INSTALL):kS.join(s,n);return Tj.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(bj,"validateReadLogPath")});var $S=g((Ufe,vL)=>{"use strict";var Id=M(),Nj=$(),yj=ee(),wj=UL(),VS=require("path"),PL=require("fs-extra"),{once:Ij}=require("events"),{handleHDBError:Cj,hdb_errors:Dj}=se(),{PACKAGE_ROOT:Lj}=M(),Mj=VS.join(Lj,"logs"),Uj=1e3,Pj=200;vL.exports=vj;async function vj(e){let t=wj(e);if(t)throw Cj(t,t.message,Dj.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=yj.get(Id.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Id.LOG_NAMES.HDB:e.log_name,n=s===Id.LOG_NAMES.INSTALL?VS.join(Mj,Id.LOG_NAMES.INSTALL):VS.join(r,s),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?Uj:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max(PL.statSync(n).size-(h+5)*Pj,0));let S=PL.createReadStream(n,{start:p});S.on("error",P=>{Nj.error(P)});let T=0,b=[],R="",L;S.on("data",P=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;P=R+P;let B=0,J;for(;(J=k.exec(P))&&!S.destroyed;){L&&(L.message=P.slice(B,J.index),H(L));let[z,X,Te]=J,ce=Te.split("] ["),de=ce[0],Le=ce[1];ce.splice(0,2),L={timestamp:X,thread:de,level:Le,tags:ce,message:""},B=J.index+z.length}R=P.slice(B)}),S.on("end",P=>{S.destroyed||L&&(L.message=R.trim(),H(L))}),S.resume();function H(P){let k,B,J;switch(!0){case(i&&c&&_):k=new Date(P.timestamp),B=new Date(u),J=new Date(l),P.level===o&&k>=B&&k<=J&&T<E?T++:P.level===o&&k>=B&&k<=J&&(di(P,f,b),T++,T===h&&S.destroy());break;case(i&&c):k=new Date(P.timestamp),B=new Date(u),P.level===o&&k>=B&&T<E?T++:P.level===o&&k>=B&&(di(P,f,b),T++,T===h&&S.destroy());break;case(i&&_):k=new Date(P.timestamp),J=new Date(l),P.level===o&&k<=J&&T<E?T++:P.level===o&&k<=J&&(di(P,f,b),T++,T===h&&S.destroy());break;case(c&&_):k=new Date(P.timestamp),B=new Date(u),J=new Date(l),k>=B&&k<=J&&T<E?T++:k>=B&&k<=J&&(di(P,f,b),T++,T===h&&S.destroy());break;case i:P.level===o&&T<E?T++:P.level===o&&(di(P,f,b),T++,T===h&&S.destroy());break;case c:k=new Date(P.timestamp),B=new Date(u),k>=B&&T<E?T++:k>=B&&T>=E&&(di(P,f,b),T++,T===h&&S.destroy());break;case _:k=new Date(P.timestamp),J=new Date(l),k<=J&&T<E?T++:k<=J&&T>=E&&(di(P,f,b),T++,T===h&&S.destroy());break;default:T<E?T++:(di(P,f,b),T++,T===h&&S.destroy())}}return a(H,"onLogMessage"),await Ij(S,"close"),b}a(vj,"readLog");function di(e,t,r){t==="desc"?Bj(e,r):t==="asc"?Hj(e,r):r.push(e)}a(di,"pushLineToResult");function Bj(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(Bj,"insertDescending");function Hj(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(Hj,"insertAscending")});var Cd=g((xfe,qL)=>{"use strict";var YS=require("joi"),{string:mu,boolean:BL,date:xj}=YS.types(),qj=Xe(),{validateSchemaExists:vfe,validateTableExists:Bfe,validateSchemaName:Hfe}=Qs(),Gj=M(),Fj=Fe(),HL=ee();HL.initSync();var kj=mu.invalid(HL.get(Gj.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Fj.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(),xL={operation:mu.valid("add_node","update_node","set_node_replication"),node_name:kj,subscriptions:YS.array().items({table:mu.optional(),schema:mu.optional(),database:mu.optional(),subscribe:BL.required(),publish:BL.required().custom($j),start_time:xj.iso()}).min(1).required()};function Vj(e){return qj.validateBySchema(e,YS.object(xL))}a(Vj,"addUpdateNodeValidator");function $j(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($j,"checkForFalsy");qL.exports={addUpdateNodeValidator:Vj,validation_schema:xL}});var FL=g((Gfe,GL)=>{var Yj=Xe(),Kj={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};GL.exports=function(e){return Yj.validateObject(e,Kj)}});var Dd=g((Ffe,kL)=>{"use strict";var Wj=M().OPERATIONS_ENUM,KS=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=Wj.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};kL.exports=KS});var $L=g((Vfe,VL)=>{"use strict";var Qj={OPERATION:"operation",REFRESH:"refresh"},WS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},QS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};VL.exports={JWTTokens:WS,TOKEN_TYPE_ENUM:Qj,JWTRSAKeys:QS}});var Tu=g((Yfe,QL)=>{"use strict";var Su=require("jsonwebtoken"),zS=require("fs-extra"),JS=Q(),is=M(),{handleHDBError:Er,hdb_errors:zj}=se(),{HTTP_STATUS_CODES:hr,AUTHENTICATION_ERROR_MSGS:mr}=zj,pu=$(),YL=U_(),ZS=ss(),Jj=Lr().update,Xj=Dd(),jj=Rn(),{UserEventMsg:Zj}=Cs(),fi=ee();fi.initSync();var XS=require("path"),{JWTTokens:eZ,JWTRSAKeys:tZ,TOKEN_TYPE_ENUM:Ld}=$L(),rZ=fi.get(is.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?fi.get(is.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",sZ=fi.get(is.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?fi.get(is.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Md="RS256",jS;QL.exports={createTokens:nZ,validateOperationToken:oZ,refreshOperationToken:iZ,validateRefreshToken:WL};async function nZ(e){if(JS.isEmpty(e)||typeof e!="object")throw Er(new Error,mr.INVALID_AUTH_OBJECT,hr.BAD_REQUEST,void 0,void 0,!0);if(JS.isEmpty(e.username))throw Er(new Error,mr.USERNAME_REQUIRED,hr.BAD_REQUEST,void 0,void 0,!0);if(JS.isEmpty(e.password))throw Er(new Error,mr.PASSWORD_REQUIRED,hr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await ZS.findAndValidateUser(e.username,e.password),!t)throw Er(new Error,mr.INVALID_CREDENTIALS,hr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw pu.error(f),Er(new Error,mr.INVALID_CREDENTIALS,hr.UNAUTHORIZED,void 0,void 0,!0)}let r=await Ud(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await KL(i,r.private_key,r.passphrase),c=await Su.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:sZ,algorithm:Md,subject:Ld.REFRESH}),u=YL.hash(c),_=new Xj(is.SYSTEM_SCHEMA_NAME,is.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await Jj(_)}catch(f){pu.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw Er(new Error,mr.REFRESH_TOKEN_SAVE_FAILED,hr.INTERNAL_SERVER_ERROR);return jj.signalUserChange(new Zj(process.pid)),new eZ(o,c)}a(nZ,"createTokens");async function KL(e,t,r){return await Su.sign(e,{key:t,passphrase:r},{expiresIn:rZ,algorithm:Md,subject:Ld.OPERATION})}a(KL,"signOperationToken");async function Ud(){if(jS===void 0)try{let e=XS.join(fi.getHdbBasePath(),is.LICENSE_KEY_DIR_NAME,is.JWT_ENUM.JWT_PASSPHRASE_NAME),t=XS.join(fi.getHdbBasePath(),is.LICENSE_KEY_DIR_NAME,is.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=XS.join(fi.getHdbBasePath(),is.LICENSE_KEY_DIR_NAME,is.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await zS.readFile(e)).toString(),n=(await zS.readFile(t)).toString(),i=(await zS.readFile(r)).toString();jS=new tZ(i,n,s)}catch(e){throw pu.error(e),Er(new Error,mr.NO_ENCRYPTION_KEYS,hr.INTERNAL_SERVER_ERROR)}return jS}a(Ud,"getJWTRSAKeys");async function iZ(e){if(!e)throw Er(new Error,mr.INVALID_BODY,hr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Er(new Error,mr.REFRESH_TOKEN_REQUIRED,hr.BAD_REQUEST,void 0,void 0,!0);await WL(e.refresh_token);let t=await Ud(),r=await Su.decode(e.refresh_token);return{operation_token:await KL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(iZ,"refreshOperationToken");async function oZ(e){try{let t=await Ud(),r=await Su.verify(e,t.public_key,{algorithms:Md,subject:Ld.OPERATION});return await ZS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw pu.warn(t),t.name&&t.name==="TokenExpiredError"?Er(new Error,mr.TOKEN_EXPIRED,hr.FORBIDDEN):Er(new Error,mr.INVALID_TOKEN,hr.UNAUTHORIZED)}}a(oZ,"validateOperationToken");async function WL(e){let t;try{let r=await Ud(),s=await Su.verify(e,r.public_key,{algorithms:Md,subject:Ld.REFRESH});t=await ZS.findAndValidateUser(s.username,void 0,!1)}catch(r){throw pu.warn(r),r.name&&r.name==="TokenExpiredError"?Er(new Error,mr.TOKEN_EXPIRED,hr.FORBIDDEN):Er(new Error,mr.INVALID_TOKEN,hr.UNAUTHORIZED)}if(!YL.validate(t.refresh_token,e))throw Er(new Error,mr.INVALID_TOKEN,hr.UNAUTHORIZED);return t}a(WL,"validateRefreshToken")});var eT=g((Qfe,XL)=>{"use strict";var aZ=FL(),Ea=require("passport"),cZ=require("passport-local").Strategy,uZ=require("passport-http").BasicStrategy,lZ=require("util"),_Z=ss(),JL=lZ.callbackify(_Z.findAndValidateUser),Wfe=yr(),dZ=M(),zL=Tu();Ea.use(new cZ(function(e,t,r){JL(e,t,r)}));Ea.use(new uZ(function(e,t,r){JL(e,t,r)}));Ea.serializeUser(function(e,t){t(null,e)});Ea.deserializeUser(function(e,t){t(null,e)});function fZ(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":Ea.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===dZ.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?zL.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):zL.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Ea.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(fZ,"authorize");function EZ(e,t){let r=aZ(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(EZ,"checkPermissions");XL.exports={authorize:fZ,checkPermissions:EZ}});var Ei=g((Jfe,jL)=>{"use strict";var tT=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},rT=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};jL.exports={Node:tT,NodeSubscription:rT}});var eM=g((jfe,ZL)=>{"use strict";var hZ=M().OPERATIONS_ENUM,sT=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=hZ.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};ZL.exports=sT});var gu=g((eEe,tM)=>{"use strict";var nT=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},iT=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};tM.exports={RemotePayloadObject:nT,RemotePayloadSubscription:iT}});var sM=g((rEe,rM)=>{"use strict";var oT=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};rM.exports=oT});var oM=g((aEe,iM)=>{"use strict";var mZ=sM(),nEe=dt(),nM=We(),pZ=$(),{getSchemaPath:iEe,getTransactionAuditStorePath:oEe}=Je(),{getDatabases:SZ}=(Ae(),ne(Ge));iM.exports=TZ;async function TZ(e){let t=new mZ;try{let r=SZ()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await nM.environmentDataSize(schema_path,e.name),o=await nM.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){pZ.warn(`unable to stat table dbi due to ${r}`)}return t}a(TZ,"lmdbGetTableSize")});var cM=g((uEe,aM)=>{"use strict";var aT=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};aM.exports=aT});var ha=g((EEe,fM)=>{"use strict";var gZ=require("fs-extra"),RZ=require("path"),Jt=require("systeminformation"),hi=$(),uM=st(),_Ee=Fe(),vd=M(),AZ=oM(),dM=ei(),{getThreadInfo:lM}=Ke(),pT=ee();pT.initSync();var OZ=cM(),{openEnvironment:dEe}=We(),{getSchemaPath:fEe}=Je(),{database:bZ}=(Ae(),ne(Ge)),Pd;fM.exports={getHDBProcessInfo:_T,getNetworkInfo:fT,getDiskInfo:dT,getMemoryInfo:lT,getCPUInfo:uT,getTimeInfo:cT,getSystemInformation:ET,systemInformation:NZ,getTableSize:hT,getMetrics:mT};function cT(){return Jt.time()}a(cT,"getTimeInfo");async function uT(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Jt.cpu();l.cpu_speed=await Jt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:T,...b}=await Jt.currentLoad();return b.cpus=[],T.forEach(R=>{let{raw_load:L,raw_load_idle:H,raw_load_irq:P,raw_load_nice:k,raw_load_system:B,raw_load_user:J,...z}=R;b.cpus.push(z)}),l.current_load=b,l}catch(e){return hi.error(`error in getCPUInfo: ${e}`),{}}}a(uT,"getCPUInfo");async function lT(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Jt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return hi.error(`error in getMemoryInfo: ${e}`),{}}}a(lT,"getMemoryInfo");async function _T(){let e={core:[],clustering:[]};try{let t=await Jt.processes(),r;try{r=Number.parseInt(await gZ.readFile(RZ.join(pT.get(vd.CONFIG_PARAMS.ROOTPATH),vd.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===vd.NODE_ERROR_CODES.ENOENT)hi.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return hi.error(`error in getHDBProcessInfo: ${t}`),e}}a(_T,"getHDBProcessInfo");async function dT(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Jt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Jt.fsStats();return e.read_write=_,e.size=await Jt.fsSize(),e}catch(t){return hi.error(`error in getDiskInfo: ${t}`),e}}a(dT,"getDiskInfo");async function fT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Jt.networkInterfaceDefault(),e.latency=await Jt.inetChecksite("google.com"),(await Jt.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await Jt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return hi.error(`error in getNetworkInfo: ${t}`),e}}a(fT,"getNetworkInfo");async function ET(){if(Pd!==void 0)return Pd;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Jt.osInfo();e=c;let u=await Jt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,Pd=e,Pd}catch(t){return hi.error(`error in getSystemInformation: ${t}`),e}}a(ET,"getSystemInformation");async function hT(){let e=[],t=await dM.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await AZ(s));return e}a(hT,"getTableSize");async function mT(){let e=await dM.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=bZ({database:r,table:n}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),s[n]=o}catch(i){hi.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(mT,"getMetrics");async function _M(){if(pT.get(vd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await uM.getNATSReferences(),t=await uM.listStreams(),r=[];for(let s of t){let n=[],i=await e.consumers.list(s.config.name);for await(let c of i)n.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:s.config.name,database:s.config.subjects[0].split(".")[1],table:s.config.subjects[0].split(".")[2],state:s.state,consumers:n};r.push(o)}return r}}a(_M,"getNatsStreamInfo");async function NZ(e){let t=new OZ;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await ET(),t.time=cT(),t.cpu=await uT(),t.memory=await lT(),t.disk=await dT(),t.network=await fT(),t.harperdb_processes=await _T(),t.table_size=await hT(),t.metrics=await mT(),t.threads=await lM(),t.replication=await _M(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await ET();break;case"time":t.time=cT();break;case"cpu":t.cpu=await uT();break;case"memory":t.memory=await lT();break;case"disk":t.disk=await dT();break;case"network":t.network=await fT();break;case"harperdb_processes":t.harperdb_processes=await _T();break;case"table_size":t.table_size=await hT();break;case"database_metrics":case"metrics":t.metrics=await mT();break;case"threads":t.threads=await lM();break;case"replication":t.replication=await _M();break;default:break}return t}a(NZ,"systemInformation")});var Hd=g((mEe,EM)=>{"use strict";EM.exports={version:yZ,printVersion:wZ};var Bd=eu();function yZ(){if(Bd)return Bd.version}a(yZ,"version");function wZ(){Bd&&console.log(`HarperDB Version ${Bd.version}`)}a(wZ,"printVersion")});var os=g((gEe,SM)=>{"use strict";var IZ=Lr(),ST=Q(),CZ=require("util"),_o=M(),hM=ee();hM.initSync();var DZ=eT(),mM=Dr(),{Node:SEe,NodeSubscription:TEe}=Ei(),LZ=ra(),MZ=eM(),{RemotePayloadObject:UZ,RemotePayloadSubscription:PZ}=gu(),{handleHDBError:vZ,hdb_errors:BZ}=se(),{HTTP_STATUS_CODES:HZ,HDB_ERROR_MSGS:xZ}=BZ,qZ=Zs(),GZ=ha(),FZ=Hd(),{getDatabases:kZ}=(Ae(),ne(Ge)),VZ=CZ.promisify(DZ.authorize),$Z=mM.searchByHash,YZ=mM.searchByValue;SM.exports={authHeaderToUser:KZ,isEmpty:WZ,getNodeRecord:QZ,upsertNodeRecord:zZ,buildNodePayloads:JZ,checkClusteringEnabled:XZ,getAllNodeRecords:jZ,getSystemInfo:ZZ,reverseSubscription:pM};async function KZ(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await VZ(t,null),e}a(KZ,"authHeaderToUser");function WZ(e){return e==null}a(WZ,"isEmpty");async function QZ(e){let t=new LZ(_o.SYSTEM_SCHEMA_NAME,_o.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return $Z(t)}a(QZ,"getNodeRecord");async function zZ(e){let t=new MZ(_o.SYSTEM_SCHEMA_NAME,_o.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return IZ.upsert(t)}a(zZ,"upsertNodeRecord");function pM(e){if(ST.isEmpty(e.subscribe)||ST.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(pM,"reverseSubscription");function JZ(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=ST.getTableHashAttribute(u,_),{subscribe:d,publish:f}=pM(c),E=kZ()[u]?.[_],h=new PZ(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new UZ(r,t,n,s)}a(JZ,"buildNodePayloads");function XZ(){if(!hM.get(_o.CONFIG_PARAMS.CLUSTERING_ENABLED))throw vZ(new Error,xZ.CLUSTERING_NOT_ENABLED,HZ.BAD_REQUEST,void 0,void 0,!0)}a(XZ,"checkClusteringEnabled");async function jZ(){let e=new qZ(_o.SYSTEM_SCHEMA_NAME,_o.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await YZ(e))}a(jZ,"getAllNodeRecords");async function ZZ(){let e=await GZ.getSystemInformation();return{hdb_version:FZ.version(),node_version:e.node_version,platform:e.platform}}a(ZZ,"getSystemInfo")});var TT=g((AEe,yM)=>{"use strict";var xd=st(),TM=Q(),gM=Fe(),RM=M(),qd=$(),AM=fu(),e5=Z_(),{RemotePayloadObject:t5}=gu(),{handleHDBError:OM,hdb_errors:r5}=se(),{HTTP_STATUS_CODES:bM}=r5,{NodeSubscription:NM}=Ei();yM.exports=s5;async function s5(e,t){let r;try{r=await xd.request(`${t}.${gM.REQUEST_SUFFIX}`,new t5(RM.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),qd.trace("Response from remote describe all request:",r)}catch(o){qd.error(`addNode received error from describe all request to remote node: ${o}`);let c=xd.requestErrorHandler(o,"add_node",t);throw OM(new Error,c,bM.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===gM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw OM(new Error,o,bM.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===RM.SYSTEM_SCHEMA_NAME){await xd.createLocalTableStream(u,c);let h=new NM(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=TM.doesSchemaExist(u),l=s[u]!==void 0,d=c?TM.doesTableExist(u,c):!0,f=c?s?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(qd.trace(`addNode creating schema: ${u}`),await AM.createSchema({operation:"create_schema",schema:u})),!d&&f){qd.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(s[u][c].attributes)}`);let h=new e5(u,c,s[u][c].hash_attribute);s[u][c].attributes&&(h.attributes=s[u][c].attributes),await AM.createTable(h)}await xd.createLocalTableStream(u,c);let E=new NM(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(s5,"reviewSubscriptions")});var Vd=g((bEe,CM)=>{"use strict";var{handleHDBError:Gd,hdb_errors:n5}=se(),{HTTP_STATUS_CODES:Fd}=n5,{addUpdateNodeValidator:i5}=Cd(),kd=$(),IM=M(),wM=Fe(),o5=Q(),Ru=st(),Au=os(),a5=ee(),c5=TT(),{Node:u5,NodeSubscription:l5}=Ei(),{broadcast:_5}=Ke(),d5="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",f5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",E5=a5.get(IM.CONFIG_PARAMS.CLUSTERING_NODENAME);CM.exports=h5;async function h5(e,t=!1){kd.trace("addNode called with:",e),Au.checkClusteringEnabled();let r=i5(e);if(r)throw Gd(r,r.message,Fd.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Au.getNodeRecord(s);if(!o5.isEmptyOrZeroLength(d))throw Gd(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Fd.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await c5(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=d5,o;let c=Au.buildNodePayloads(n,E5,IM.OPERATIONS_ENUM.ADD_NODE,await Au.getSystemInfo()),u=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];n[d].start_time===void 0&&delete n[d].start_time,u.push(new l5(E.schema,E.table,E.publish,E.subscribe))}kd.trace("addNode sending remote payload:",c);let _;try{_=await Ru.request(`${s}.${wM.REQUEST_SUFFIX}`,c)}catch(d){kd.error(`addNode received error from request: ${d}`);for(let E=0,h=n.length;E<h;E++){let p=n[E];p.publish=!1,p.subscribe=!1,await Ru.updateRemoteConsumer(p,s)}let f=Ru.requestErrorHandler(d,"add_node",s);throw Gd(new Error,f,Fd.INTERNAL_SERVER_ERROR,"error",f)}if(_.status===wM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${_.message}`;throw Gd(new Error,d,Fd.INTERNAL_SERVER_ERROR,"error",d)}kd.trace(_);for(let d=0,f=n.length;d<f;d++){let E=n[d];await Ru.updateRemoteConsumer(E,s),E.subscribe===!0&&await Ru.updateConsumerIterator(E.schema,E.table,s,"start")}let l=new u5(s,u,_.system_info);return await Au.upsertNodeRecord(l),_5({type:"nats_update"}),i.length>0?o.message=f5:o.message=`Successfully added '${s}' to manifest`,o}a(h5,"addNode")});var AT=g((wEe,MM)=>{"use strict";var{handleHDBError:gT,hdb_errors:m5}=se(),{HTTP_STATUS_CODES:RT}=m5,{addUpdateNodeValidator:p5}=Cd(),Ou=$(),LM=M(),DM=Fe(),yEe=Q(),bu=st(),Nu=os(),S5=ee(),{cloneDeep:T5}=require("lodash"),g5=TT(),{Node:R5,NodeSubscription:A5}=Ei(),{broadcast:O5}=Ke(),b5="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",N5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",y5=S5.get(LM.CONFIG_PARAMS.CLUSTERING_NODENAME);MM.exports=w5;async function w5(e){Ou.trace("updateNode called with:",e),Nu.checkClusteringEnabled();let t=p5(e);if(t)throw gT(t,t.message,RT.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s,n=await Nu.getNodeRecord(r);n.length>0&&(s=T5(n));let{added:i,skipped:o}=await g5(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=b5,c;let u=Nu.buildNodePayloads(i,y5,LM.OPERATIONS_ENUM.UPDATE_NODE,await Nu.getSystemInfo());for(let l=0,d=i.length;l<d;l++){let f=i[l];Ou.trace(`updateNode updating work stream for node: ${r} subscription:`,f),i[l].start_time===void 0&&delete i[l].start_time}Ou.trace("updateNode sending remote payload:",u);let _;try{_=await bu.request(`${r}.${DM.REQUEST_SUFFIX}`,u)}catch(l){Ou.error(`updateNode received error from request: ${l}`);let d=bu.requestErrorHandler(l,"update_node",r);throw gT(new Error,d,RT.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===DM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw gT(new Error,l,RT.INTERNAL_SERVER_ERROR,"error",l)}Ou.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];await bu.updateRemoteConsumer(f,r),f.subscribe===!0?await bu.updateConsumerIterator(f.schema,f.table,r,"start"):await bu.updateConsumerIterator(f.schema,f.table,r,"stop")}return s||(s=[new R5(r,[],_.system_info)]),await I5(s[0],i,_.system_info),o.length>0?c.message=N5:c.message=`Successfully updated '${r}'`,c}a(w5,"updateNode");async function I5(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new A5(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Nu.upsertNodeRecord(s),O5({type:"nats_update"})}a(I5,"updateNodeTable")});var HM=g((CEe,BM)=>{"use strict";var vM=require("joi"),{string:UM}=vM.types(),C5=Xe(),PM=M(),D5=ee(),L5=Fe();BM.exports=M5;function M5(e){let t=UM.invalid(D5.get(PM.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(L5.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=vM.object({operation:UM.valid(PM.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return C5.validateBySchema(e,r)}a(M5,"removeNodeValidator")});var Yd=g((LEe,kM)=>{"use strict";var{handleHDBError:xM,hdb_errors:U5}=se(),{HTTP_STATUS_CODES:qM}=U5,P5=HM(),yu=$(),GM=os(),v5=Q(),$d=M(),FM=Fe(),OT=st(),B5=ee(),{RemotePayloadObject:H5}=gu(),{NodeSubscription:x5}=Ei(),q5=sa(),G5=si(),{broadcast:F5}=Ke(),k5=B5.get($d.CONFIG_PARAMS.CLUSTERING_NODENAME);kM.exports=V5;async function V5(e){yu.trace("removeNode called with:",e),GM.checkClusteringEnabled();let t=P5(e);if(t)throw xM(t,t.message,qM.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await GM.getNodeRecord(r);if(v5.isEmptyOrZeroLength(s))throw xM(new Error,`Node '${r}' was not found.`,qM.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new H5($d.OPERATIONS_ENUM.REMOVE_NODE,k5,[]),i,o=!1;for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];l.subscribe===!0&&await OT.updateConsumerIterator(l.schema,l.table,r,"stop");try{await OT.updateRemoteConsumer(new x5(l.schema,l.table,!1,!1),r)}catch(d){yu.error(d)}}try{i=await OT.request(`${r}.${FM.REQUEST_SUFFIX}`,n),yu.trace("Remove node reply from remote node:",r,i)}catch(u){yu.error("removeNode received error from request:",u),o=!0}let c=new q5($d.SYSTEM_SCHEMA_NAME,$d.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await G5.deleteRecord(c),F5({type:"nats_update"}),i?.status===FM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(yu.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(V5,"removeNode")});var YM=g((UEe,$M)=>{"use strict";var VM=require("joi"),{string:$5,array:Y5}=VM.types(),K5=Xe(),W5=Cd();$M.exports=Q5;function Q5(e){let t=VM.object({operation:$5.valid("configure_cluster").required(),connections:Y5.items(W5.validation_schema).required()});return K5.validateBySchema(e,t)}a(Q5,"configureClusterValidator")});var bT=g((vEe,JM)=>{"use strict";var z5=M(),Kd=$(),J5=Q(),X5=Yd(),j5=Vd(),KM=os(),Z5=YM(),{handleHDBError:WM,hdb_errors:e8}=se(),{HTTP_STATUS_CODES:QM}=e8,t8="Configure cluster complete.",r8="Failed to configure the cluster. Check the logs for more details.",s8="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";JM.exports=n8;async function n8(e){Kd.trace("configure cluster called with:",e),KM.checkClusteringEnabled();let t=Z5(e);if(t)throw WM(t,t.message,QM.BAD_REQUEST,void 0,void 0,!0);let r=await KM.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(zM(X5,{operation:z5.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);Kd.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(zM(j5,E,E.node_name))}let c=await Promise.allSettled(i);Kd.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(Kd.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(J5.isEmptyOrZeroLength(u))return{message:t8,connections:_};if(l)return{message:s8,failed_nodes:u,connections:_};throw WM(new Error,r8,QM.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(n8,"configureCluster");async function zM(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(zM,"functionWrapper")});var jM=g((HEe,XM)=>{"use strict";var Wd=require("joi"),i8=Xe(),{validateSchemaExists:o8,validateTableExists:a8,validateSchemaName:c8}=Qs(),u8=Wd.object({operation:Wd.string().valid("purge_stream"),schema:Wd.string().custom(o8).custom(c8).required(),table:Wd.string().custom(a8).required()});function l8(e){return i8.validateBySchema(e,u8)}a(l8,"purgeStreamValidator");XM.exports=l8});var NT=g((qEe,ZM)=>{"use strict";var{handleHDBError:_8,hdb_errors:d8}=se(),{HTTP_STATUS_CODES:f8}=d8,E8=jM(),h8=st(),m8=os();ZM.exports=p8;async function p8(e){if(e.purge_ingest!==!0){let n=E8(e);if(n)throw _8(n,n.message,f8.BAD_REQUEST,void 0,void 0,!0)}m8.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:s}=e;return await h8.purgeTableStream(t,r,s),s?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(p8,"purgeStream")});var IT=g((FEe,iU)=>{"use strict";var wT=os(),S8=st(),rU=ee(),Qd=M(),fo=Fe(),T8=Q(),yT=$(),{RemotePayloadObject:g8}=gu(),{ErrorCode:eU}=require("nats"),tU=rU.get(Qd.CONFIG_PARAMS.CLUSTERING_ENABLED),sU=rU.get(Qd.CONFIG_PARAMS.CLUSTERING_NODENAME);iU.exports={clusterStatus:R8,buildNodeStatus:nU};async function R8(){let e={node_name:sU,is_enabled:tU,connections:[]};if(!tU)return e;let t=await wT.getAllNodeRecords();if(T8.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(nU(t[s],e.connections));return await Promise.allSettled(r),e}a(R8,"clusterStatus");async function nU(e,t){let r=e.name,s=new g8(Qd.OPERATIONS_ENUM.CLUSTER_STATUS,sU,void 0,await wT.getSystemInfo()),n,i,o=fo.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await S8.request(fo.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===fo.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=fo.CLUSTER_STATUS_STATUSES.CLOSED,yT.error(`Error getting node status from ${r} `,n))}catch(u){yT.warn(`Error getting node status from ${r}`,u),u.code===eU.NoResponders?o=fo.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===eU.Timeout?o=fo.CLUSTER_STATUS_STATUSES.TIMEOUT:o=fo.CLUSTER_STATUS_STATUSES.CLOSED}let c=new A8(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Qd.PRE_4_0_0_VERSION&&await wT.upsertNodeRecord(u)}catch(u){yT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(nU,"buildNodeStatus");function A8(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(A8,"NodeStatusObject")});var DT=g((VEe,oU)=>{"use strict";var{handleHDBError:O8,hdb_errors:b8}=se(),{HTTP_STATUS_CODES:N8}=b8,y8=st(),w8=os(),CT=Q(),zd=require("joi"),I8=Xe(),C8=2e3,D8=zd.object({timeout:zd.number().min(1),connected_nodes:zd.boolean(),routes:zd.boolean()});oU.exports=L8;async function L8(e){w8.checkClusteringEnabled();let t=I8.validateBySchema(e,D8);if(t)throw O8(t,t.message,N8.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||CT.autoCastBoolean(s),o=n===void 0||CT.autoCastBoolean(n),c={nodes:[]},u=await y8.getServerList(r??C8),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:CT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(L8,"clusterNetwork")});var lU=g((YEe,uU)=>{"use strict";var LT=require("joi"),aU=Xe(),{route_constraints:cU}=Wm();uU.exports={setRoutesValidator:M8,deleteRoutesValidator:U8};function M8(e){let t=LT.object({server:LT.valid("hub","leaf").required(),routes:cU.required()});return aU.validateBySchema(e,t)}a(M8,"setRoutesValidator");function U8(e){let t=LT.object({routes:cU.required()});return aU.validateBySchema(e,t)}a(U8,"deleteRoutesValidator")});var UT=g((WEe,EU)=>{"use strict";var Eo=Pr(),MT=Q(),Jd=M(),_U=lU(),{handleHDBError:dU,hdb_errors:P8}=se(),{HTTP_STATUS_CODES:fU}=P8,v8="cluster routes successfully set",B8="cluster routes successfully deleted";EU.exports={setRoutes:H8,getRoutes:x8,deleteRoutes:q8};function H8(e){let t=_U.setRoutesValidator(e);if(t)throw dU(t,t.message,fU.BAD_REQUEST,void 0,void 0,!0);let r=Eo.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=MT.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?Eo.updateConfigValue(Jd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Eo.updateConfigValue(Jd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:v8,set:o,skipped:i}}a(H8,"setRoutes");function x8(){let e=Eo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(x8,"getRoutes");function q8(e){let t=_U.deleteRoutesValidator(e);if(t)throw dU(t,t.message,fU.BAD_REQUEST,void 0,void 0,!0);let r=Eo.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=s.length;E<h;E++){let p=s[E];if(d.host===p.host&&d.port===p.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=n.length;h<p;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=MT.isEmptyOrZeroLength(s)?null:s,Eo.updateConfigValue(Jd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=MT.isEmptyOrZeroLength(n)?null:n,Eo.updateConfigValue(Jd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:B8,deleted:i,skipped:o}}a(q8,"deleteRoutes")});var mU=g((zEe,hU)=>{"use strict";var wu=require("alasql"),ho=require("recursive-iterator"),Bs=$(),G8=Q(),Iu=M(),PT=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,k8(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>Iu.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Iu.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Iu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=F8(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!Iu.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new wu.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function F8(e){return e.filter(t=>t[Iu.PERMS_CRUD_ENUM.READ])}a(F8,"filterReadRestrictedAttrs");function k8(e,t,r,s,n){V8(e,t,r,s,n)}a(k8,"interpretAST");function Cu(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Cu,"addSchemaTableToMap");function V8(e,t,r,s,n){if(!e){Bs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof wu.yy.Insert?W8(e,t,r):e instanceof wu.yy.Select?$8(e,t,r,s,n):e instanceof wu.yy.Update?Y8(e,t,r):e instanceof wu.yy.Delete?K8(e,t,r):Bs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(V8,"getRecordAttributesAST");function $8(e,t,r,s,n){if(!e){Bs.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(G8.isEmptyOrZeroLength(i)){Bs.error("No schema specified");return}e.from.forEach(c=>{Cu(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Cu(c.table,t,r,s,n)});let o=new ho(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Bs.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new ho(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Bs.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new ho(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Bs.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new ho(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Bs.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a($8,"getSelectAttributes");function Y8(e,t,r){if(!e){Bs.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new ho(e.columns),n=e.table.databaseid;Cu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&vT(e.table.tableid,n,i.columnid,t,r)}a(Y8,"getUpdateAttributes");function K8(e,t,r){if(!e){Bs.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new ho(e.where),n=e.table.databaseid;Cu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&vT(e.table.tableid,n,i.columnid,t,r)}a(K8,"getDeleteAttributes");function W8(e,t,r){if(!e){Bs.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new ho(e.columns),n=e.into.databaseid;Cu(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&vT(e.into.tableid,n,i.columnid,t,r)}a(W8,"getInsertAttributes");function vT(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(vT,"pushAttribute");hU.exports=PT});var xT=g((XEe,gU)=>{var Xd=Ji(),pU=require("chalk"),Gr=$(),SU=require("prompt"),{promisify:Q8}=require("util"),BT=M(),z8=require("fs-extra"),J8=require("path"),X8=Q(),j8=Hd(),TU=ee();TU.initSync();var Z8=require("moment"),e6=Q8(SU.get),t6=J8.join(TU.getHdbBasePath(),BT.LICENSE_KEY_DIR_NAME,BT.LICENSE_FILE_NAME,BT.LICENSE_FILE_NAME);gU.exports={getFingerprint:s6,setLicense:r6,parseLicense:HT,register:n6,getRegistrationInfo:o6};async function r6(e){if(e&&e.key&&e.company){try{Gr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await HT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Gr.error(r),Gr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(r6,"setLicense");async function s6(){let e={};try{e=await Xd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Gr.error(r),Gr.error(t),new Error(r)}return e}a(s6,"getFingerprint");async function HT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Gr.info("Validating license input...");let r=Xd.validateLicense(e,t);if(Gr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Gr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Gr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Gr.info("writing license to disk"),await z8.writeFile(t6,JSON.stringify({license_key:e,company:t}))}catch(s){throw Gr.error("Failed to write License"),s}return"Registration successful."}a(HT,"parseLicense");async function n6(){let e=await i6();return HT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(n6,"register");async function i6(){let e=await Xd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:pU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:pU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{SU.start()}catch(s){Gr.error(s)}let r;try{r=await e6(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(i6,"promptForRegistration");async function o6(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Xd.getLicense()}catch(r){throw Gr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(X8.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=j8.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Z8.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(o6,"getRegistrationInfo")});var AU=g((ZEe,RU)=>{"use strict";var a6=Fe(),qT=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+a6.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};RU.exports=qT});var NU=g((the,bU)=>{"use strict";var OU=Fe(),GT=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+OU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+OU.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};bU.exports=GT});var wU=g((she,yU)=>{"use strict";var FT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};yU.exports=FT});var CU=g((ihe,IU)=>{"use strict";var c6=Fe(),kT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+c6.SERVER_SUFFIX.ADMIN,this.password=r}};IU.exports=kT});var YT=g((ahe,MU)=>{"use strict";var ma=require("path"),ef=require("fs-extra"),u6=AU(),l6=NU(),_6=wU(),d6=CU(),VT=ss(),Sa=Q(),pr=Pr(),Zd=M(),Du=Fe(),{CONFIG_PARAMS:_t}=Zd,Lu=$(),Mu=ee(),DU=Tn(),$T=st(),pa="clustering",f6=1e4,LU=5;MU.exports={generateNatsConfig:h6,removeNatsConfig:m6,getHubConfigPath:E6};function E6(){let e=Mu.get(_t.ROOTPATH);return ma.join(e,pa,Du.NATS_CONFIG_FILES.HUB_SERVER)}a(E6,"getHubConfigPath");async function h6(e=!1,t=void 0){Mu.initSync();let r=Mu.get(_t.ROOTPATH),s=ma.join(r,pa,Du.PID_FILES.HUB),n=ma.join(r,pa,Du.PID_FILES.LEAF),i=pr.getConfigFromFile(_t.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=ma.join(r,pa,Du.NATS_CONFIG_FILES.HUB_SERVER),c=ma.join(r,pa,Du.NATS_CONFIG_FILES.LEAF_SERVER),u=pr.getConfigFromFile(_t.CLUSTERING_TLS_CERTIFICATE),_=pr.getConfigFromFile(_t.CLUSTERING_TLS_PRIVATEKEY),l=pr.getConfigFromFile(_t.CLUSTERING_TLS_CERT_AUTH),d=pr.getConfigFromFile(_t.CLUSTERING_TLS_INSECURE),f=pr.getConfigFromFile(_t.CLUSTERING_TLS_VERIFY),E=pr.getConfigFromFile(_t.CLUSTERING_NODENAME),h=pr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await $T.checkNATSServerInstalled()||tf("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await VT.listUsers(),S=pr.getConfigFromFile(_t.CLUSTERING_USER),T=await VT.getClusterUser();(Sa.isEmpty(T)||T.active!==!0)&&tf(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await jd(_t.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await jd(_t.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await jd(_t.CLUSTERING_HUBSERVER_NETWORK_PORT),await jd(_t.CLUSTERING_LEAFSERVER_NETWORK_PORT));let b=[],R=[];for(let[z,X]of p.entries())X.role.role===Zd.ROLE_TYPES_ENUM.CLUSTER_USER&&X.active&&(b.push(new d6(X.username,DU.decrypt(X.hash))),R.push(new _6(X.username,DU.decrypt(X.hash))));let L=[],{hub_routes:H}=pr.getClusteringRoutes();if(!Sa.isEmptyOrZeroLength(H))for(let z of H)L.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${z.host}:${z.port}`);let P=new u6(pr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,pr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_CLUSTER_NAME),pr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),L,b,R);l==null&&(delete P.tls.ca_file,delete P.leafnodes.tls.ca_file),t=Sa.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Zd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await ef.writeJson(o,P),Lu.trace(`Hub server config written to ${o}`));let k=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,B=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,J=new l6(pr.getConfigFromFile(_t.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[k],[B],b,R,u,_,l,d);l==null&&delete J.tls.ca_file,(t===void 0||t===Zd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await ef.writeJson(c,J),Lu.trace(`Leaf server config written to ${c}`))}a(h6,"generateNatsConfig");async function jd(e){let t=Mu.get(e);return Sa.isEmpty(t)&&tf(`port undefined for '${e}'`),await Sa.isPortTaken(t)&&tf(`'${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(jd,"isPortAvailable");function tf(e){let t=`Error generating clustering config: ${e}`;Lu.error(t),console.error(t),process.exit(1)}a(tf,"generateNatsConfigError");async function m6(e){let{port:t,config_file:r}=$T.getServerConfig(e),{username:s,decrypt_hash:n}=await VT.getClusterUser(),i=0,o=2e3;for(;i<LU;){try{let _=await $T.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Lu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=LU)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.`);await Sa.async_set_timeout(o*(i*2))}let c="0".repeat(f6),u=ma.join(Mu.get(_t.ROOTPATH),pa,r);await ef.writeFile(u,c),await ef.remove(u),Lu.notify(e,"started.")}a(m6,"removeNatsConfig")});var xU=g((uhe,HU)=>{"use strict";var Fr=ee(),p6=Ji(),he=M(),Uu=Fe(),yn=require("path"),{PACKAGE_ROOT:sf}=M(),UU=ee(),rf=Q(),Ta="/dev/null",S6=yn.join(sf,"launchServiceScripts"),PU=yn.join(sf,"utility/scripts"),T6=yn.join(PU,he.HDB_RESTART_SCRIPT),vU=yn.resolve(sf,"dependencies",`${process.platform}-${process.arch}`,Uu.NATS_BINARY_NAME);function BU(){let t=p6.licenseSearch().ram_allocation||he.RAM_ALLOCATION_ENUM.DEFAULT,r=he.MEM_SETTING_KEY+t,s={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return rf.noBootFile()&&(s[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=rf.getEnvCliRootPath()),{name:he.PROCESS_DESCRIPTORS.HDB,script:he.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:sf}}a(BU,"generateMainServerConfig");var g6=9930;function R6(){Fr.initSync(!0);let e=Fr.get(he.CONFIG_PARAMS.ROOTPATH),t=yn.join(e,"clustering",Uu.NATS_CONFIG_FILES.HUB_SERVER),r=yn.join(Fr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),s=UU.get(he.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Uu.LOG_LEVEL_FLAGS[Fr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==g6?"-"+s:""),script:vU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Fr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ta,i.error_file=Ta),i}a(R6,"generateNatsHubServerConfig");var A6=9940;function O6(){Fr.initSync(!0);let e=Fr.get(he.CONFIG_PARAMS.ROOTPATH),t=yn.join(e,"clustering",Uu.NATS_CONFIG_FILES.LEAF_SERVER),r=yn.join(Fr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),s=UU.get(he.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Uu.LOG_LEVEL_FLAGS[Fr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==A6?"-"+s:""),script:vU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Fr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ta,i.error_file=Ta),i}a(O6,"generateNatsLeafServerConfig");function b6(){Fr.initSync();let e=yn.join(Fr.get(he.CONFIG_PARAMS.LOGGING_ROOT),he.LOG_NAMES.HDB),t={name:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:he.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:S6,autorestart:!1};return Fr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Ta,t.error_file=Ta),t}a(b6,"generateClusteringUpgradeV4ServiceConfig");function N6(){let e={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.RESTART_HDB};return rf.noBootFile()&&(e[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=rf.getEnvCliRootPath()),{...{name:he.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:PU},script:T6}}a(N6,"generateRestart");function y6(){return{apps:[BU()]}}a(y6,"generateAllServiceConfigs");HU.exports={generateAllServiceConfigs:y6,generateMainServerConfig:BU,generateRestart:N6,generateNatsHubServerConfig:R6,generateNatsLeafServerConfig:O6,generateClusteringUpgradeV4ServiceConfig:b6}});var jU=g((dhe,XU)=>{"use strict";var ve=M(),w6=Q(),In=YT(),nf=st(),wn=Fe(),mi=xU(),of=ee(),pi=$(),I6=os(),{startWorker:qU,onMessageFromWorkers:C6}=Ke(),D6=ha(),_he=require("util"),L6=require("child_process"),M6=require("fs"),{execFile:U6}=L6,ye;XU.exports={enterPM2Mode:P6,start:Si,stop:KT,reload:FU,restart:kU,list:WT,describe:$U,connect:Cn,kill:q6,startAllServices:G6,startService:QT,getUniqueServicesList:YU,restartAllServices:F6,isServiceRegistered:KU,reloadStopStart:WU,restartHdb:VU,deleteProcess:H6,startClusteringProcesses:zU,startClusteringThreads:JU,isHdbRestartRunning:x6,isClusteringRunning:V6,stopClustering:k6,reloadClustering:$6};var Pu=!1;C6(e=>{e.type==="restart"&&of.initSync(!0)});function P6(){Pu=!0}a(P6,"enterPM2Mode");function Cn(){return ye||(ye=require("pm2")),new Promise((e,t)=>{ye.connect((r,s)=>{pi.setupConsoleLogging(),r&&t(r),e(s)})})}a(Cn,"connect");var Sr,v6=10,GU;function Si(e,t=!1){if(Pu)return B6(e);let r=U6(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Sr.indexOf(r);o>-1&&Sr.splice(o,1),!GU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<v6&&(M6.existsSync(In.getHubConfigPath())?Si(e):(await In.generateNatsConfig(!0),Si(e),await new Promise(c=>setTimeout(c,3e3)),await In.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await In.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=of.get(ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&wn.LOG_LEVEL_HIERARCHY[o]>=wn.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===wn.LOG_LEVELS.ERR||l===wn.LOG_LEVELS.WRN?pi.OUTPUTS.STDERR:pi.OUTPUTS.STDOUT;pi.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=wn.LOG_LEVELS[f]}if(wn.LOG_LEVEL_HIERARCHY[o]>=wn.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===wn.LOG_LEVELS.ERR||l===wn.LOG_LEVELS.WRN?pi.OUTPUTS.STDERR:pi.OUTPUTS.STDOUT;pi.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),Sr=[],!Sr&&!t){let i=a(()=>{GU=!0,Sr&&(Sr.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)}Sr.push(r)}a(Si,"start");function B6(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.start(e,(s,n)=>{s&&(ye.disconnect(),r(s)),ye.disconnect(),t(n)})})}a(B6,"startWithPM2");function KT(e){if(!Pu){for(let t of Sr||[])t.name===e&&(Sr.splice(Sr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.stop(e,async(s,n)=>{s&&(ye.disconnect(),r(s)),ye.delete(e,(i,o)=>{i&&(ye.disconnect(),r(s)),ye.disconnect(),t(o)})})})}a(KT,"stop");function FU(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.reload(e,(s,n)=>{s&&(ye.disconnect(),r(s)),ye.disconnect(),t(n)})})}a(FU,"reload");function kU(e){if(!Pu)for(let t of Sr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.restart(e,(s,n)=>{ye.disconnect(),t(n)})})}a(kU,"restart");function H6(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.delete(e,(s,n)=>{s&&(ye.disconnect(),r(s)),ye.disconnect(),t(n)})})}a(H6,"deleteProcess");async function VU(){await Si(mi.generateRestart())}a(VU,"restartHdb");async function x6(){let e=await WT();for(let t in e)if(e[t].name===ve.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(x6,"isHdbRestartRunning");function WT(){return new Promise(async(e,t)=>{try{await Cn()}catch(r){t(r)}ye.list((r,s)=>{r&&(ye.disconnect(),t(r)),ye.disconnect(),e(s)})})}a(WT,"list");function $U(e){return new Promise(async(t,r)=>{try{await Cn()}catch(s){r(s)}ye.describe(e,(s,n)=>{s&&(ye.disconnect(),r(s)),ye.disconnect(),t(n)})})}a($U,"describe");function q6(){if(!Pu){for(let e of Sr||[])e.kill();Sr=[];return}return new Promise(async(e,t)=>{try{await Cn()}catch(r){t(r)}ye.killDaemon((r,s)=>{r&&(ye.disconnect(),t(r)),ye.disconnect(),e(s)})})}a(q6,"kill");async function G6(){try{await zU(),await JU(),await Si(mi.generateAllServiceConfigs())}catch(e){throw ye?.disconnect(),e}}a(G6,"startAllServices");async function QT(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ve.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=mi.generateMainServerConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=mi.generateNatsIngestServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=mi.generateNatsReplyServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=mi.generateNatsHubServerConfig(),await Si(r,t),await In.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=mi.generateNatsLeafServerConfig(),await Si(r,t),await In.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=mi.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Si(r)}catch(r){throw ye?.disconnect(),r}}a(QT,"startService");async function YU(){try{let e=await WT(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw ye?.disconnect(),e}}a(YU,"getUniqueServicesList");async function F6(e=[]){try{let t=!1,r=await YU();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===ve.PROCESS_DESCRIPTORS.HDB?t=!0:await kU(o))}t&&await WU(ve.PROCESS_DESCRIPTORS.HDB)}catch(t){throw ye?.disconnect(),t}}a(F6,"restartAllServices");async function KU(e){if(Sr?.find(r=>r.name===e))return!0;let t=await D6.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(KU,"isServiceRegistered");async function WU(e){let t=of.get(ve.CONFIG_PARAMS.THREADS_COUNT)??of.get(ve.CONFIG_PARAMS.THREADS),r=await $U(e),s=w6.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await KT(e),await QT(e)):e===ve.PROCESS_DESCRIPTORS.HDB?await VU():await FU(e)}a(WU,"reloadStopStart");var QU;async function zU(e=!1){for(let t in ve.CLUSTERING_PROCESSES){let r=ve.CLUSTERING_PROCESSES[t];await QT(r,e)}}a(zU,"startClusteringProcesses");async function JU(){QU=qU(ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await nf.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await nf.updateLocalStreams();let e=await I6.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ve.PRE_4_0_0_VERSION){pi.info("Starting clustering upgrade 4.0.0 process"),qU(ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(JU,"startClusteringThreads");async function k6(){for(let e in ve.CLUSTERING_PROCESSES)if(e!==ve.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ve.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await QU.terminate();else{let t=ve.CLUSTERING_PROCESSES[e];await KT(t)}}a(k6,"stopClustering");async function V6(){for(let e in ve.CLUSTERING_PROCESSES){let t=ve.CLUSTERING_PROCESSES[e];if(await KU(t)===!1)return!1}return!0}a(V6,"isClusteringRunning");async function $6(){await In.generateNatsConfig(!0),await nf.reloadNATSHub(),await nf.reloadNATSLeaf(),await In.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await In.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a($6,"reloadClustering")});var _f=g((hhe,iP)=>{"use strict";var Y6=require("minimist"),{isMainThread:JT,parentPort:tP}=require("worker_threads"),nt=M(),{PROCESS_DESCRIPTORS_VALIDATE:vu}=nt,sn=$(),XT=Q(),cf=YT(),af=st(),Ehe=Fe(),rP=Pr(),nn=jU(),ZU=ha(),K6=Oh(),{restartWorkers:uf,onMessageByType:W6}=Ke(),{handleHDBError:Q6,hdb_errors:z6}=se(),{HTTP_STATUS_CODES:J6}=z6,lf=ee();lf.initSync();var Bu=`Restarting HarperDB. This may take up to ${nt.RESTART_TIMEOUT_MS/1e3} seconds.`,X6="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",eP="Clustering is not enabled so cannot be restarted",j6="Invalid service",ga,as;iP.exports={restart:sP,restartService:jT};JT&&W6(nt.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?jT({service:e.workerType}):sP({operation:"restart"})});async function sP(e){as=Object.keys(e).length===0,ga=await nn.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR);let t=Y6(process.argv);if(t.service){await jT(t);return}if(as&&!ga){console.error(X6);return}if(as&&console.log(Bu),ga){nn.enterPM2Mode(),sn.notify(Bu);let r=K6(Object.keys(nt.CONFIG_PARAM_MAP),!0);return XT.isEmptyOrZeroLength(Object.keys(r))||rP.updateConfigValue(void 0,void 0,r,!0,!0),Z6(),Bu}return JT?(sn.notify(Bu),setTimeout(()=>{uf()},50)):tP.postMessage({type:nt.ITC_EVENT_TYPES.RESTART}),Bu}a(sP,"restart");async function jT(e){let{service:t}=e;if(nt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Q6(new Error,j6,J6.BAD_REQUEST,void 0,void 0,!0);if(ga=await nn.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR),!JT)return tP.postMessage({type:nt.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case vu.clustering:if(!lf.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=eP;break}as&&console.log("Restarting clustering"),sn.notify("Restarting clustering"),await nP();break;case vu.clustering_config:case vu["clustering config"]:if(!lf.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=eP;break}as&&console.log("Restarting clustering_config"),sn.notify("Restarting clustering_config"),await nn.reloadClustering();break;case"custom_functions":case"custom functions":case vu.harperdb:case vu.http_workers:if(as&&!ga){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}as&&console.log("Restarting http_workers"),sn.notify("Restarting http_workers"),as?await nn.restart(nt.HDB_PROC_DESCRIPTOR):setTimeout(()=>{uf("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(sn.error(r),as&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(jT,"restartService");async function Z6(){await nP(),await nn.restart(nt.HDB_PROC_DESCRIPTOR),await XT.async_set_timeout(2e3),lf.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await zT(),as&&(await af.closeConnection(),process.exit(0))}a(Z6,"restartPM2Mode");async function nP(){if(!rP.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await ZU.getHDBProcessInfo()).clustering.length===0)sn.trace("Clustering not running, restart will start clustering services"),await cf.generateNatsConfig(!0),await nn.startClusteringProcesses(),await nn.startClusteringThreads(),await zT(),as&&await af.closeConnection();else{await cf.generateNatsConfig(!0),ga?(sn.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await nn.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await nn.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await ZU.getHDBProcessInfo()).clustering.forEach(n=>{sn.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await XT.async_set_timeout(3e3),await zT(),await af.updateLocalStreams(),as&&await af.closeConnection(),sn.trace("Restart clustering restarting ingest and reply service threads");let t=uf(nt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=uf(nt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(nP,"restartClustering");async function zT(){await cf.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await cf.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(zT,"removeNatsConfig")});var mP=g((She,hP)=>{"use strict";var phe=require("lodash"),Tr=M(),{handleHDBError:oP,hdb_errors:e9}=se(),{HDB_ERROR_MSGS:t9,HTTP_STATUS_CODES:r9}=e9,ZT=$();hP.exports={getRolePermissions:n9};var mo=Object.create(null),s9=a(e=>({key:e,perms:{}}),"perms_template_obj"),lP=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),_P=a((e=!1,t=!1,r=!1,s=!1)=>({[Tr.PERMS_CRUD_ENUM.READ]:e,[Tr.PERMS_CRUD_ENUM.INSERT]:t,[Tr.PERMS_CRUD_ENUM.UPDATE]:r,[Tr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),eg=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,..._P(t,r,s,n)}),"table_perms_template"),aP=a((e,t=_P())=>({attribute_name:e,describe:EP(t),[Hu]:t[Hu],[tg]:t[tg],[rg]:t[rg]}),"attr_perms_template"),cP=a((e,t=!1)=>({attribute_name:e,describe:t,[Hu]:t}),"timestamp_attr_perms_template"),{READ:Hu,INSERT:tg,UPDATE:rg}=Tr.PERMS_CRUD_ENUM,dP=Object.values(Tr.PERMS_CRUD_ENUM),fP=[Hu,tg,rg];function n9(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[Tr.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(mo[t]&&mo[t].key===s)return mo[t].perms;let n=i9(e,r);return mo[t]?mo[t].key=s:mo[t]=s9(s),mo[t].perms=n,n}catch(r){if(!e[Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Tr.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw ZT.error(s),ZT.debug(r),oP(new Error,t9.OUTDATED_PERMS_TRANSLATION_ERROR,r9.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
11
+ ${r.stack}`;throw ZT.error(s),oP(new Error)}}}a(n9,"getRolePermissions");function i9(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Tr.SYSTEM_SCHEMA_NAME]=s[Tr.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=o9(t[i]);return}r[i]=lP(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=a9(c,u);r[i].describe||dP.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=eg()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=eg()})}),r}a(i9,"translateRolePermissions");function o9(e){let t=lP(!0);return Object.keys(e).forEach(r=>{t.tables[r]=eg(!0,!0,!0,!0,!0)}),t}a(o9,"createStructureUserPermissions");function a9(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return Tr.TIME_STAMP_NAMES.includes(d)&&(f=cP(d,l[Hu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=aP(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=EP(l),n.attribute_permissions.push(l),c||c9(l,u)}else if(_!==o){let l;Tr.TIME_STAMP_NAMES.includes(_)?l=cP(_):l=aP(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=uP(n),n}else return e.describe=uP(e),e}a(a9,"getTableAttrPerms");function uP(e){return dP.filter(t=>e[t]).length>0}a(uP,"getSchemaTableDescribePerm");function EP(e){return fP.filter(t=>e[t]).length>0}a(EP,"getAttributeDescribePerm");function c9(e,t){fP.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(c9,"checkForHashPerms")});var pP={};Ye(pP,{Resources:()=>df,keyArrayToString:()=>Ra,resetResources:()=>u9,resources:()=>Ti});function u9(){return Ti=new df}function Ra(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var df,Ti,xu=Re(()=>{ro();df=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return je(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(u9,"resetResources");a(Ra,"keyArrayToString")});var SP={};Ye(SP,{Headers:()=>gi,appendHeader:()=>sg});function sg(e,t,r,s){if(e.append)e.append(t,r,s);else if(e.set){let n=e.get(t);if(n)if(s)r=(typeof n=="string"?n:n.join(", "))+", "+r;else if(typeof n=="string")r=[n,r];else{n.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var gi,qu=Re(()=>{gi=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 s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];if(s)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(sg,"appendHeader")});var Gu={};Ye(Gu,{authentication:()=>yP,bypassAuth:()=>m9,login:()=>S9,logout:()=>T9,start:()=>p9});function m9(){NP=!0}async function yP(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?f9?d9:[]:_9?l9:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new gi([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return ff&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),ff&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(ff){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let p=n.indexOf(";",h),S=n.indexOf("=",h);u=n.slice(S+1,p===-1?n.length:p),_=await gP.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new Aa.AuthAuditLog(E,h,Ut.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===Ut.AUTH_AUDIT_STATUS.SUCCESS?TP.notify(S):TP.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 tt.getUser(E,null,null),l(E,Ut.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Aa.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(s){if(d=po.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await tt.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,Ef.validateOperationToken)(h)}catch(T){if(T.message==="invalid token")try{return await(0,Ef.validateRefreshToken)(h),c({status:-1})}catch{throw T}}break}}catch(T){return h9&&(po.get(h)||(po.set(h,h),l(p,Ut.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:Ri({error:T.message},e)})}po.set(s,d),E9&&l(d.username,Ut.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await tt.getUser(_.user,null,e):(NP&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,AP.getSuperUser)());ff&&(e.session.update=function(E){if(!u){u=(0,OP.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}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=u,gP.put(E)},e.login=async function(E,h){e.user=await tt.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")&&Ti.loginPath?(f.status=302,f.headers.set("Location",Ti.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new gi);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function p9({server:e,port:t}){e.request(yP,{port:t||"all"}),RP||(RP=!0,setInterval(()=>{po=new Map},cs.get(Ut.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),bP.user.addListener(()=>{po=new Map}))}async function S9(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 T9(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var AP,Ef,OP,cs,Ut,Aa,bP,TP,l9,_9,d9,f9,gP,ff,NP,E9,h9,po,RP,hf=Re(()=>{AP=x(ss());nr();xu();Ef=x(Tu());Ae();OP=require("uuid"),cs=x(ee()),Ut=x(M()),Aa=x($()),bP=x(Hc());qu();Oa();TP=(0,Aa.loggerWithTag)("auth-event");cs.initSync();l9=cs.get(Ut.CONFIG_PARAMS.HTTP_CORSACCESSLIST),_9=cs.get(Ut.CONFIG_PARAMS.HTTP_CORS),d9=cs.get(Ut.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),f9=cs.get(Ut.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),gP=ct({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),ff=cs.get(Ut.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,NP=cs.get(Ut.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,E9=cs.get(Ut.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,h9=cs.get(Ut.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,po=new Map;tt.onInvalidatedUser(()=>{po=new Map});a(m9,"bypassAuth");a(yP,"authentication");a(p9,"start");a(S9,"login");a(T9,"logout")});var UP=g((Che,MP)=>{"use strict";var we=require("joi"),wP=require("fs-extra"),IP=require("path"),Ln=Xe(),CP=ee(),DP=M(),LP=$(),{hdb_errors:g9}=se(),{HDB_ERROR_MSGS:Xt}=g9,Dn=/^[a-zA-Z0-9-_]+$/;MP.exports={getDropCustomFunctionValidator:A9,setCustomFunctionValidator:O9,addComponentValidator:w9,dropCustomFunctionProjectValidator:I9,packageComponentValidator:C9,deployComponentValidator:D9,setComponentFileValidator:b9,getComponentFileValidator:y9,dropComponentFileValidator:N9};function mf(e,t,r){try{let s=CP.get(DP.CONFIG_PARAMS.COMPONENTSROOT),n=IP.join(s,t);return wP.existsSync(n)?e?t:r.message(Xt.PROJECT_EXISTS):e?r.message(Xt.NO_PROJECT):t}catch(s){return LP.error(s),r.message(Xt.VALIDATION_ERR)}}a(mf,"checkProjectExists");function Fu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Fu,"checkFilePath");function R9(e,t,r,s){try{let n=CP.get(DP.CONFIG_PARAMS.COMPONENTSROOT),i=IP.join(n,e,t,r+".js");return wP.existsSync(i)?r:s.message(Xt.NO_FILE)}catch(n){return LP.error(n),s.message(Xt.VALIDATION_ERR)}}a(R9,"checkFileExists");function A9(e){let t=we.object({project:we.string().pattern(Dn).custom(mf.bind(null,!0)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().pattern(Dn).custom(R9.bind(null,e.project,e.type)).custom(Fu).required().messages({"string.pattern.base":Xt.BAD_FILE_NAME})});return Ln.validateBySchema(e,t)}a(A9,"getDropCustomFunctionValidator");function O9(e){let t=we.object({project:we.string().pattern(Dn).custom(mf.bind(null,!0)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().custom(Fu).required(),function_content:we.string().required()});return Ln.validateBySchema(e,t)}a(O9,"setCustomFunctionValidator");function b9(e){let t=we.object({project:we.string().pattern(Dn).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),file:we.string().custom(Fu).required(),payload:we.string().allow("").optional(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ln.validateBySchema(e,t)}a(b9,"setComponentFileValidator");function N9(e){let t=we.object({project:we.string().pattern(Dn).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),file:we.string().custom(Fu).optional()});return Ln.validateBySchema(e,t)}a(N9,"dropComponentFileValidator");function y9(e){let t=we.object({project:we.string().required(),file:we.string().custom(Fu).required(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ln.validateBySchema(e,t)}a(y9,"getComponentFileValidator");function w9(e){let t=we.object({project:we.string().pattern(Dn).custom(mf.bind(null,!1)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(w9,"addComponentValidator");function I9(e){let t=we.object({project:we.string().pattern(Dn).custom(mf.bind(null,!0)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(I9,"dropCustomFunctionProjectValidator");function C9(e){let t=we.object({project:we.string().pattern(Dn).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),skip_node_modules:we.boolean()});return Ln.validateBySchema(e,t)}a(C9,"packageComponentValidator");function D9(e){let t=we.object({project:we.string().pattern(Dn).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),payload:we.string().optional().messages({"string.pattern.base":Xt.BAD_PACKAGE}),package:we.string().optional()});return Ln.validateBySchema(e,t)}a(D9,"deployComponentValidator")});var gf=g((Lhe,GP)=>{"use strict";var pf=require("joi"),Sf=require("path"),PP=require("fs-extra"),{exec:L9}=require("child_process"),M9=require("util"),vP=M9.promisify(L9),ku=M(),{handleHDBError:ba,hdb_errors:U9}=se(),{HTTP_STATUS_CODES:Na}=U9,Vu=ee(),P9=Xe(),ya=$();Vu.initSync();var ng=Vu.get(ku.CONFIG_PARAMS.COMPONENTSROOT),BP="npm install --omit=dev --json",v9=`${BP} --dry-run`;GP.exports={installModules:q9,auditModules:G9,installAllRootModules:B9,uninstallRootModule:H9,linkHarperdb:x9};async function B9(e=!1){await Tf(),await $u(e?"npm install --ignore-scripts":"npm install",Vu.get(ku.CONFIG_PARAMS.ROOTPATH))}a(B9,"installAllRootModules");async function H9(e){await $u(`npm uninstall ${e}`,Vu.get(ku.CONFIG_PARAMS.ROOTPATH))}a(H9,"uninstallRootModule");async function x9(){await Tf(),await $u(`npm link ${ku.PACKAGE_ROOT}`,Vu.get(ku.CONFIG_PARAMS.ROOTPATH))}a(x9,"linkHarperdb");async function $u(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await vP(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
12
+ `,""))}return s&&!s.includes("Debugger listening")&&ya.error("Error running NPM command:",e,s),ya.trace(r,s),r?.replace(`
13
+ `,"")}a($u,"runCommand");async function q9(e){ya.info(`starting installModules for request: ${e}`);let t=qP(e);if(t)throw ba(t,t.message,Na.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?v9:BP;await Tf(),await xP(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let _=Sf.join(ng,u),l,d=null;try{let{stdout:f,stderr:E}=await vP(n,{cwd:_});l=f?f.replace(`
14
14
  `,""):null,d=E?E.replace(`
15
- `,""):null}catch(f){f.stderr?i[u].npm_error=BP(f.stderr):i[u].npm_error=f.message;continue}try{i[u].npm_output=JSON.parse(l)}catch{i[u].npm_output=l}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return Na.info(`finished installModules with response ${i}`),i}a(x9,"installModules");function BP(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
16
- `);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(BP,"parseNPMStdErr");async function q9(e){Na.info(`starting auditModules for request: ${e}`);let t=xP(e);if(t)throw Oa(t,t.message,ba.BAD_REQUEST);let{projects:r}=e;await Tf(),await HP(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=Sf.join(ng,o);s[o]={npm_output:null,npm_error:null};try{let u=await $u("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=BP(u.stderr)}}return Na.info(`finished auditModules with response ${s}`),s}a(q9,"auditModules");async function Tf(){try{return await $u("npm -v"),!0}catch{throw Oa(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",ba.BAD_REQUEST,void 0,void 0,!0)}}a(Tf,"checkNPMInstalled");async function HP(e){if(!Array.isArray(e)||e.length===0)throw Oa(new Error,"projects argument must be an array with at least 1 element",ba.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=Sf.join(ng,i.toString());if(!await UP.pathExists(o)){t.push(i);continue}let u=Sf.join(o,"package.json");await UP.pathExists(u)||r.push(i)}if(t.length>0)throw Oa(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,ba.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Oa(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,ba.BAD_REQUEST,void 0,void 0,!0)}a(HP,"checkProjectPaths");function xP(e){let t=pf.object({projects:pf.array().min(1).items(pf.string()).required(),dry_run:pf.boolean().default(!1)});return U9.validateBySchema(e,t)}a(xP,"modulesValidator")});var og=g((Lhe,$P)=>{"use strict";var ya=require("fs-extra"),ig=require("path"),Rf=$(),GP=Q(),Af=M(),VP=ee(),G9=Pr();$P.exports=F9;async function F9(){let e=k9(),t=VP.get(Af.CONFIG_PARAMS.ROOTPATH),r=ig.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Af.PACKAGE_ROOT}},n=ig.join(t,"node_modules");await ya.ensureDir(n);let i,o=!0,c=!1;try{i=await ya.readJson(r)}catch(u){if(GP.isEmptyOrZeroLength(e))return;if(u.code!==Af.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!GP.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await FP(_);s.dependencies[u]=l+_}if(!o){Rf.notify("Installing components"),await kP(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await FP(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Rf.notify("Removing component",u),c=!0);c&&(Rf.notify("Updating components."),await kP(r,s,i))}a(F9,"installComponents");function k9(){let e=G9.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(k9,"getComponentsConfig");async function FP(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":ig.extname(e)||await ya.pathExists(e)?"file:":"github:"}a(FP,"getPkgPrefix");async function kP(e,t,r){Rf.trace("npm installing components package.json",t),await ya.writeFile(e,JSON.stringify(t,null," "));try{await gf().installAllRootModules(VP.get(Af.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await ya.writeFile(e,JSON.stringify(r,null," ")):await ya.unlink(e),s}}a(kP,"installPackages")});var ug=g((Phe,QP)=>{"use strict";var ke=require("fs-extra"),ag=require("fast-glob"),pe=require("path"),KP=require("tar-fs"),Uhe=require("uuid").v4,cg=require("normalize-path"),on=MP(),Nt=$(),Qe=M(),mt=ee(),Yu=Pr(),V9=Q(),{PACKAGE_ROOT:$9}=M(),{handleHDBError:Pt,hdb_errors:Y9}=se(),{basename:K9}=require("path"),W9=og(),WP=ee(),Q9=M(),{Readable:z9}=require("stream"),{isMainThread:J9}=require("worker_threads"),{HDB_ERROR_MSGS:mo,HTTP_STATUS_CODES:vt}=Y9,j9=pe.join($9,"application-template"),YP=pe.join(mt.get(Qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function X9(){Nt.trace("getting custom api status");let e={};try{e={port:mt.get(Qe.CONFIG_PARAMS.HTTP_PORT),directory:mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Pt(new Error,mo.FUNCTION_STATUS,vt.INTERNAL_SERVER_ERROR,Nt.ERR,t)}return e}a(X9,"customFunctionsStatus");function Z9(){Nt.trace("getting custom api endpoints");let e={},t=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT);try{ag.sync(cg(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:ag.sync(cg(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:ag.sync(cg(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Pt(new Error,mo.GET_FUNCTIONS,vt.INTERNAL_SERVER_ERROR,Nt.ERR,r)}return e}a(Z9,"getCustomFunctions");function e7(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=on.getDropCustomFunctionValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);Nt.trace("getting custom api endpoint file content");let r=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=pe.join(r,s,n,i+".js");try{return ke.readFileSync(o,{encoding:"utf8"})}catch(c){throw Pt(new Error,mo.GET_FUNCTION,vt.INTERNAL_SERVER_ERROR,Nt.ERR,c)}}a(e7,"getCustomFunction");function t7(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=on.setCustomFunctionValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);Nt.trace("setting custom function file content");let r=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return ke.outputFileSync(pe.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Pt(new Error,mo.SET_FUNCTION,vt.INTERNAL_SERVER_ERROR,Nt.ERR,c)}}a(t7,"setCustomFunction");function r7(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=on.getDropCustomFunctionValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);Nt.trace("dropping custom function file");let r=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return ke.unlinkSync(pe.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Pt(new Error,mo.DROP_FUNCTION,vt.INTERNAL_SERVER_ERROR,Nt.ERR,o)}}a(r7,"dropCustomFunction");function s7(e){e.project&&(e.project=pe.parse(e.project).name);let t=on.addComponentValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);Nt.trace("adding component");let r=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=pe.join(r,s);return ke.mkdirSync(n,{recursive:!0}),ke.copySync(j9,n),`Successfully added project: ${s}`}catch(n){throw Pt(new Error,mo.ADD_FUNCTION,vt.INTERNAL_SERVER_ERROR,Nt.ERR,n)}}a(s7,"addComponent");function n7(e){e.project&&(e.project=pe.parse(e.project).name);let t=on.dropCustomFunctionProjectValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);Nt.trace("dropping custom function project");let r=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=mt.get(Qe.CONFIG_PARAMS.APPS);if(!V9.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return Yu.updateConfigValue(Qe.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=pe.join(r,s);return ke.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw Pt(new Error,mo.DROP_FUNCTION_PROJECT,vt.INTERNAL_SERVER_ERROR,Nt.ERR,i)}}a(n7,"dropCustomFunctionProject");async function i7(e){e.project&&(e.project=pe.parse(e.project).name);let t=on.packageComponentValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;Nt.trace("packaging component",s);let n;try{n=await ke.realpath(pe.join(r,s))}catch(u){if(u.code!==Qe.NODE_ERROR_CODES.ENOENT)throw u;try{n=await ke.realpath(pe.join(mt.get(Qe.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===Qe.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await ke.ensureDir(YP);let i=pe.join(YP,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(pe.join(n,"node_modules"))}),KP.pack(n,o).pipe(ke.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=ke.readFileSync(i,{encoding:"base64"});return await ke.remove(i),{project:s,payload:c}}a(i7,"packageComponent");async function o7(e){e.project&&(e.project=pe.parse(e.project).name);let t=on.deployComponentValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(Nt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=pe.join(r,s),i="file:"+o,await ke.ensureDir(o);let f=z9.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(KP.extract(o,{finish:h})).on("error",p)});let E=await ke.readdir(o);E.length===1&&E[0]==="package"&&(await ke.copy(pe.join(o,"package"),o),await ke.remove(pe.join(o,"package")))}if(await Yu.addConfig(s,{package:i}),!n){await W9();let f=WP.get(Q9.CONFIG_PARAMS.ROOTPATH);o=pe.join(f,"node_modules",s)}if(J9)return;let c=new Map;c.isWorker=!0;let u=(bf(),ne(Of)),_;u.setErrorReporter(f=>_=f);let l=K9(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return Nt.info("Installed component"),`Successfully deployed: ${s}`}a(o7,"deployComponent");async function a7(){let e=Yu.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 u=await ke.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=pe.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await ke.stat(d),E={name:pe.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(u){return Nt.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),s=await r(mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{name:mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT).split(pe.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(pe.join(mt.get(Qe.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(bf(),ne(Of)).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 s}a(a7,"getComponents");async function c7(e){let t=on.getComponentFileValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let s=Yu.getConfigObj()[e.project]||e.project==="harperdb"?pe.join(WP.get(Qe.CONFIG_PARAMS.ROOTPATH),"node_modules"):mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await ke.stat(pe.join(s,e.project,e.file));return{message:await ke.readFile(pe.join(s,e.project,e.file),n),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Qe.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${pe.join(e.project,e.file)}'`):i}}a(c7,"getComponentFile");async function u7(e){let t=on.setComponentFileValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=pe.join(mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await ke.ensureFile(s),await ke.outputFile(s,e.payload,r)):await ke.ensureDir(s),"Successfully set component: "+e.file}a(u7,"setComponentFile");async function l7(e){let t=on.dropComponentFileValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=e.file?pe.join(e.project,e.file):e.project,s=pe.join(mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),r);return await ke.pathExists(s)&&await ke.remove(s),Yu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(l7,"dropComponent");QP.exports={customFunctionsStatus:X9,getCustomFunctions:Z9,getCustomFunction:e7,setCustomFunction:t7,dropCustomFunction:r7,addComponent:s7,dropCustomFunctionProject:n7,packageComponent:i7,deployComponent:o7,getComponents:a7,getComponentFile:c7,setComponentFile:u7,dropComponent:l7}});var lg=g((Bhe,JP)=>{"use strict";var an=require("joi"),zP=je();JP.exports={readTransactionLogValidator:_7,deleteTransactionLogsBeforeValidator:d7};function _7(e){let t=an.object({schema:an.string().required(),table:an.string().required(),from:an.date().timestamp(),to:an.date().timestamp(),limit:an.number().min(1)});return zP.validateBySchema(e,t)}a(_7,"readTransactionLogValidator");function d7(e){let t=an.object({schema:an.string().required(),table:an.string().required(),timestamp:an.date().timestamp().required()});return zP.validateBySchema(e,t)}a(d7,"deleteTransactionLogsBeforeValidator")});var yf=g((xhe,tv)=>{"use strict";var _g=M(),Nf=st(),jP=Q(),XP=ee(),ZP=Tn(),{handleHDBError:wa,hdb_errors:f7}=se(),{HTTP_STATUS_CODES:Ia}=f7,{readTransactionLogValidator:E7,deleteTransactionLogsBeforeValidator:h7}=lg(),ev="This operation relies on clustering and cannot run with it disable.",m7="Logs successfully deleted from transaction log.",p7="All logs successfully deleted from transaction log.";tv.exports={readTransactionLog:S7,deleteTransactionLogsBefore:T7};async function*S7(e){let t=E7(e);if(t)throw wa(t,t.message,Ia.BAD_REQUEST,void 0,void 0,!0);if(!XP.get(_g.CONFIG_PARAMS.CLUSTERING_ENABLED))throw wa(new Error,ev,Ia.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=jP.checkSchemaTableExist(r,s);if(n)throw wa(new Error,n,Ia.NOT_FOUND,void 0,void 0,!0);let i=ZP.createNatsTableStreamName(r,s),o=await Nf.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===_g.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(S7,"readTransactionLog");async function T7(e){let t=h7(e);if(t)throw wa(t,t.message,Ia.BAD_REQUEST,void 0,void 0,!0);if(!XP.get(_g.CONFIG_PARAMS.CLUSTERING_ENABLED))throw wa(new Error,ev,Ia.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=jP.checkSchemaTableExist(r,s);if(i)throw wa(new Error,i,Ia.NOT_FOUND,void 0,void 0,!0);let o=ZP.createNatsTableStreamName(r,s),{jsm:c}=await Nf.getNATSReferences(),u=await Nf.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=m7,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=p7):d=(await Nf.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(T7,"deleteTransactionLogsBefore")});var sv=g((Ghe,rv)=>{"use strict";var dg=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};rv.exports=dg});var iv=g((khe,nv)=>{"use strict";var fg=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};nv.exports=fg});var hg=g(($he,av)=>{"use strict";var ov=sv(),g7=iv(),{HDB_ERROR_MSGS:R7}=yr(),Eg=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=R7.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new ov(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new g7(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new ov(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};av.exports=Eg});var Df=g((Khe,Ov)=>{"use strict";var mg=Lr(),wf=Dr(),ls=fu(),Qu=Zn(),pg=ri(),A7=MS(),O7=SL(),zu=ss(),If=FS(),yt=$(),b7=$S(),N7=Vd(),y7=AT(),w7=Yd(),I7=bT(),C7=NT(),D7=IT(),L7=DT(),Sg=UT(),Mn=Q(),M7=hU(),Tg=xT(),lv=_f(),us=M(),_v=hP(),U7=Ea(),dv=Tu(),fv=(hf(),ne(Gu)),Ev=Pr(),kr=ug(),P7=require("alasql"),hv=yf(),mv=gf(),pv=hg(),{handleHDBError:gr,hdb_errors:Sv}=se(),{HDB_ERROR_MSGS:kt,HTTP_STATUS_CODES:Ku}=Sv,V=new Map,Tv="delete",Ri="insert",Un="read",po="update",Wu="describe",cv=Qu.describeSchema.name,uv=Qu.describeTable.name,gv={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},v7="catchup",B7="handleGetJob",H7="handleGetJobsByStartDate",Cf={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},x7=[ls.createTable.name,ls.createAttribute.name,ls.dropTable.name,ls.dropAttribute.name],Rv={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},W=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};V.set(mg.insert.name,new W(!1,[Ri]));V.set(mg.update.name,new W(!1,[po]));V.set(mg.upsert.name,new W(!1,[Ri,po]));V.set(wf.searchByConditions.name,new W(!1,[Un]));V.set(wf.searchByHash.name,new W(!1,[Un]));V.set(wf.searchByValue.name,new W(!1,[Un]));V.set(wf.search.name,new W(!1,[Un]));V.set(ls.createSchema.name,new W(!0,[]));V.set(ls.createTable.name,new W(!0,[]));V.set(ls.createAttribute.name,new W(!1,[Ri]));V.set(ls.dropSchema.name,new W(!0,[]));V.set(ls.dropTable.name,new W(!0,[]));V.set(ls.dropAttribute.name,new W(!0,[]));V.set(Qu.describeSchema.name,new W(!1,[Un]));V.set(Qu.describeTable.name,new W(!1,[Un]));V.set(pg.deleteRecord.name,new W(!1,[Tv]));V.set(zu.addUser.name,new W(!0,[]));V.set(zu.alterUser.name,new W(!0,[]));V.set(zu.dropUser.name,new W(!0,[]));V.set(zu.listUsersExternal.name,new W(!0,[]));V.set(If.listRoles.name,new W(!0,[]));V.set(If.addRole.name,new W(!0,[]));V.set(If.alterRole.name,new W(!0,[]));V.set(If.dropRole.name,new W(!0,[]));V.set(b7.name,new W(!0,[]));V.set(N7.name,new W(!0,[]));V.set(y7.name,new W(!0,[]));V.set(w7.name,new W(!0,[]));V.set(I7.name,new W(!0,[]));V.set(C7.name,new W(!0,[]));V.set(Sg.setRoutes.name,new W(!0,[]));V.set(Sg.getRoutes.name,new W(!0,[]));V.set(Sg.deleteRoutes.name,new W(!0,[]));V.set(Ev.setConfiguration.name,new W(!0,[]));V.set(D7.clusterStatus.name,new W(!0,[]));V.set(L7.name,new W(!0,[]));V.set(Tg.getFingerprint.name,new W(!0,[]));V.set(Tg.setLicense.name,new W(!0,[]));V.set(pg.deleteFilesBefore.name,new W(!0,[]));V.set(pg.deleteAuditLogsBefore.name,new W(!0,[]));V.set(lv.restart.name,new W(!0,[]));V.set(lv.restartService.name,new W(!0,[]));V.set(A7.name,new W(!0,[]));V.set(O7.name,new W(!0,[Un]));V.set(U7.systemInformation.name,new W(!0,[]));V.set(Ev.getConfiguration.name,new W(!0,[]));V.set(hv.readTransactionLog.name,new W(!0,[]));V.set(hv.deleteTransactionLogsBefore.name,new W(!0,[]));V.set(mv.installModules.name,new W(!0,[]));V.set(mv.auditModules.name,new W(!0,[]));V.set(dv.createTokens.name,new W(!1,[]));V.set(dv.refreshOperationToken.name,new W(!1,[]));V.set(fv.login.name,new W(!1,[]));V.set(fv.logout.name,new W(!1,[]));V.set(kr.customFunctionsStatus.name,new W(!0,[]));V.set(kr.getCustomFunctions.name,new W(!0,[]));V.set(kr.getComponents.name,new W(!0,[]));V.set(kr.getComponentFile.name,new W(!0,[]));V.set(kr.setComponentFile.name,new W(!0,[]));V.set(kr.dropComponent.name,new W(!0,[]));V.set(kr.getCustomFunction.name,new W(!0,[]));V.set(kr.setCustomFunction.name,new W(!0,[]));V.set(kr.dropCustomFunction.name,new W(!0,[]));V.set(kr.addComponent.name,new W(!0,[]));V.set(kr.dropCustomFunctionProject.name,new W(!0,[]));V.set(kr.packageComponent.name,new W(!0,[]));V.set(kr.deployComponent.name,new W(!0,[]));V.set(Tg.getRegistrationInfo.name,new W(!1,[]));V.set(zu.userInfo.name,new W(!1,[]));V.set(Qu.describeAll.name,new W(!1,[]));V.set(B7,new W(!1,[]));V.set(H7,new W(!0,[]));V.set(v7,new W(!0,[]));V.set(Cf.CSV_DATA_LOAD,new W(!1,[Ri,po]));V.set(Cf.CSV_URL_LOAD,new W(!1,[Ri,po]));V.set(Cf.CSV_FILE_LOAD,new W(!1,[Ri,po]));V.set(Cf.IMPORT_FROM_S3,new W(!1,[Ri,po]));V.set(Rv.EXPORT_TO_S3,new W(!0,[]));V.set(Rv.EXPORT_LOCAL,new W(!0,[]));V.set(us.VALID_SQL_OPS_ENUM.DELETE,new W(!1,[Tv]));V.set(us.VALID_SQL_OPS_ENUM.SELECT,new W(!1,[Un]));V.set(us.VALID_SQL_OPS_ENUM.INSERT,new W(!1,[Ri]));V.set(us.VALID_SQL_OPS_ENUM.UPDATE,new W(!1,[po]));Ov.exports={verifyPerms:G7,verifyPermsAst:q7,verifyBulkLoadAttributePerms:k7};function q7(e,t,r){if(Mn.isEmptyOrZeroLength(e))throw yt.info("verify_perms_ast has an empty user parameter"),gr(new Error);if(Mn.isEmptyOrZeroLength(t))throw yt.info("verify_perms_ast has an empty user parameter"),gr(new Error);if(Mn.isEmptyOrZeroLength(r))throw yt.info("verify_perms_ast has a null operation parameter"),gr(new Error);try{let s=new pv,n=new M7(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw yt.info("No schemas defined in verifyPermsAst(), will not continue."),gr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&gv[r])throw gr(new Error,kt.DROP_SYSTEM,Ku.FORBIDDEN);if(c&&!u)return null;let _=_v.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof P7.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=Av(t,r,o,s);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),p=Rg(t.role.permission,f,d[E]);gg(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw gr(s)}}a(q7,"verifyPermsAst");function G7(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw yt.info("null required parameter in verifyPerms"),gr(new Error,kt.DEFAULT_INVALID_REQUEST,Ku.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema??e.database,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new pv;if(Mn.isEmptyOrZeroLength(e.hdb_user.role)||Mn.isEmptyOrZeroLength(e.hdb_user.role.permission))return yt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(kt.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(us.SYSTEM_SCHEMA_NAME)||n===us.SYSTEM_SCHEMA_NAME;if(l&&gv[r])throw gr(new Error,kt.DROP_SYSTEM,Ku.FORBIDDEN);if(u&&!l||_===!0&&(r===ls.createSchema.name||r===ls.dropSchema.name))return null;if(x7.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=_v.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===cv||r===uv){if(n===us.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(kt.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===cv&&(!d[n]||!d[n][Wu]))return c.handleInvalidItem(kt.SCHEMA_NOT_FOUND(n));if(r===uv&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Wu]))return c.handleInvalidItem(kt.TABLE_NOT_FOUND(n,i))}}let f=Av(e.hdb_user,r,o,c,s);if(f)return f;if(V.get(r)&&V.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&us.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[us.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(b=>b[us.PERMS_CRUD_ENUM.READ]).forEach(b=>{p.push(b.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(T=>T.attribute),e.get_attributes=p)}let E=F7(e),h=Rg(e.hdb_user.role.permission,n,i);return gg(E,h,r,i,n,c,s),c.getPermsResponse()}a(G7,"verifyPerms");function Av(e,t,r,s,n){if(Mn.arrayHasEmptyValues([e,t,r]))throw yt.info("hasPermissions has an invalid parameter"),gr(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 yt.info(`operation ${t} not found.`),gr(new Error,kt.OP_NOT_FOUND(t),Ku.BAD_REQUEST);if(V.get(t)&&V.get(t).requires_su)return yt.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(kt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Wu]===!1){s.addInvalidItem(kt.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(kt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[Wu]===!1)s.addInvalidItem(kt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=V.get(t).perms;!Mn.isEmpty(n)&&E.includes(n)&&(E=[n]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(yt.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=kt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw yt.error(E),yt.error(f),gr(Sv.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(Av,"hasPermissions");function gg(e,t,r,s,n,i,o){if(!e||!t)throw yt.info("no attributes specified in checkAttributePerms."),gr(new Error);let c=V.get(r).perms;if(!c||c==="")throw yt.info(`no permissions found for ${r} in checkAttributePerms().`),gr(new Error);if(Mn.isEmptyOrZeroLength(t))return yt.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[Wu]===!1){i.addInvalidItem(kt.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(us.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Un)throw gr(new Error,kt.SYSTEM_TIMESTAMP_PERMS_ERR,Ku.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(kt.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(gg,"checkAttributePerms");function F7(e){let t=new Set;try{if(e.action)return t;if(e.operation===us.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){yt.info(r)}return t}a(F7,"getRecordAttributes");function Rg(e,t,r){let s=new Map;if(Mn.isEmpty(e))return yt.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{yt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(Rg,"getAttributePermissions");function k7(e,t,r,s,n,i,o){let c=new Set(i),u=Rg(e,s,n);gg(c,u,t,n,s,o,r)}a(k7,"verifyBulkLoadAttributePerms")});var Mf=g((Qhe,Iv)=>{"use strict";Iv.exports={evaluateSQL:tee,processAST:wv,convertSQLToAST:yv,checkASTPermissions:Nv};var V7=Lr(),bv=require("util"),$7=bv.callbackify(V7.insert),Y7=Dr().search,K7=nD().update,W7=bv.callbackify(K7),Q7=oD().convertDelete,Ai=require("alasql"),z7=Df(),Lf=$(),J7=ad(),j7=Q(),Ju=M(),{hdb_errors:X7,handleHDBError:Ag}=se(),{HTTP_STATUS_CODES:Og}=X7;J7(Ai);var Z7=403,eee="There was a problem performing this insert. Please check the logs and try again.",bg=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function tee(e,t){let r=e.parsed_sql_object;if(!r){r=yv(e.sql);let s,n=r.ast.statements[0];if(n instanceof Ai.yy.Insert?s=n.into.databaseid:n instanceof Ai.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Ai.yy.Update||n instanceof Ai.yy.Delete?s=n.table.databaseid:Lf.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Ai.yy.Select)&&j7.isEmptyOrZeroLength(s))return t("No schema specified",null)}wv(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(tee,"evaluateSQL");function Nv(e,t){let r;try{r=z7.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(Nv,"checkASTPermissions");function yv(e){let t=new bg;if(!e)throw Ag(new Error,"The 'sql' parameter is missing from the request body",Og.BAD_REQUEST);try{let r=e.trim(),s=Ai.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
17
- `);throw s[1]?Ag(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,Og.BAD_REQUEST):Ag(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",Og.BAD_REQUEST)}return t}a(yv,"convertSQLToAST");function wv(e,t,r){try{let s=ree;if(!e.bypass_auth&&!t.permissions_checked){let i=Nv(e,t);if(i&&i.length>0)return r(Z7,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Ju.VALID_SQL_OPS_ENUM.SELECT:s=Y7,n=t.ast.statements[0];break;case Ju.VALID_SQL_OPS_ENUM.INSERT:s=see;break;case Ju.VALID_SQL_OPS_ENUM.UPDATE:s=W7;break;case Ju.VALID_SQL_OPS_ENUM.DELETE:s=Q7;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(wv,"processAST");function ree(e,t){Lf.info(e),t("unknown sql statement")}a(ree,"nullFunction");function see({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=nee(i,e.values)}catch(o){return r(o)}$7(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Lf.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(see,"convertInsert");function nee(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=Ai.compile(`SELECT ${n.toString()} AS [${Ju.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw Lf.error(r),new Error(eee)}}a(nee,"createDataObjects")});var Ng=g((Jhe,Dv)=>{"use strict";var{S3:iee,GetObjectCommand:oee}=require("@aws-sdk/client-s3");Dv.exports={getFileStreamFromS3:aee,getS3AuthObj:Cv};async function aee(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await Cv(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new oee(r))).Body}a(aee,"getFileStreamFromS3");function Cv(e,t,r){return new iee({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(Cv,"getS3AuthObj")});var Uf=g((Xhe,qv)=>{"use strict";var wg=Dr(),cee=Mf(),uee=Ng(),{AsyncParser:lee,Transform:_ee}=require("json2csv"),Xu=require("stream"),Vr=Q(),yg=require("fs-extra"),dee=require("path"),_s=$(),{promisify:Uv}=require("util"),ju=Q(),{handleHDBError:pt,hdb_errors:fee}=se(),{HDB_ERROR_MSGS:Rr,HTTP_STATUS_CODES:St}=fee,{streamAsJSON:Eee}=($h(),ne(gb)),{Upload:hee}=require("@aws-sdk/lib-storage"),Lv=["search_by_value","search_by_hash","sql","search_by_conditions"],Mv=["json","csv"],Pv="json",vv="csv",mee="Successfully exported JSON locally.",pee="Successfully exported CSV locally.",See=1e3,Tee=wg.searchByHash,gee=wg.searchByValue,Ree=Uv(cee.evaluateSQL),Aee=Uv(Xu.finished);qv.exports={export_to_s3:yee,export_local:Oee,toCsvStream:Bv};async function Oee(e){_s.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Hv(e);if(!Vr.isEmpty(t))throw _s.error(t),pt(new Error,t,St.BAD_REQUEST,void 0,void 0,!0);if(Vr.isEmpty(e.path))throw _s.error(Rr.MISSING_VALUE("path")),pt(new Error,Rr.MISSING_VALUE("path"),St.BAD_REQUEST,void 0,void 0,!0);let r=(Vr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(dee.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Vr.buildFolderPath(e.path,r);await bee(e.path);let n=await xv(e);return await Nee(s,e.format,n)}a(Oee,"export_local");async function bee(e){if(_s.trace("in confirmPath"),Vr.isEmptyOrZeroLength(e))throw pt(new Error,`Invalid path: ${e}`,St.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await yg.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,_s.error(s),pt(new Error,s,St.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 _s.error(r),pt(new Error,r,St.BAD_REQUEST,void 0,void 0,!0)}return!0}a(bee,"confirmPath");async function Nee(e,t,r){if(_s.trace("in saveToLocal"),ju.isEmptyOrZeroLength(e))throw pt(new Error,Rr.INVALID_VALUE("file_path"),St.BAD_REQUEST,void 0,void 0,!0);if(ju.isEmptyOrZeroLength(t))throw pt(new Error,Rr.INVALID_VALUE("Source format"),St.BAD_REQUEST,void 0,void 0,!0);if(ju.isEmpty(r))throw pt(new Error,Rr.NOT_FOUND("Data"),St.BAD_REQUEST,void 0,void 0,!0);if(t===Pv){let s=yg.createWriteStream(e);return Eee(r).pipe(s),await Aee(s),{message:mee,path:e}}else if(t===vv){let s=yg.createWriteStream(e),n=Xu.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(l=>({label:l,value:l})));let c={objectMode:!0};return await new lee(i,c).fromInput(n).toOutput(s).promise(!1),{message:pee,path:e}}throw pt(new Error,Rr.INVALID_VALUE("format"),St.BAD_REQUEST)}a(Nee,"saveToLocal");async function yee(e){if(!e.s3||Object.keys(e.s3).length===0)throw pt(new Error,Rr.MISSING_VALUE("S3 object"),St.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw pt(new Error,Rr.MISSING_VALUE("aws_access_key_id"),St.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw pt(new Error,Rr.MISSING_VALUE("aws_secret_access_key"),St.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.bucket))throw pt(new Error,Rr.MISSING_VALUE("bucket"),St.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.key))throw pt(new Error,Rr.MISSING_VALUE("key"),St.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.region))throw pt(new Error,Rr.MISSING_VALUE("region"),St.BAD_REQUEST);let t=Hv(e);if(!Vr.isEmpty(t))throw pt(new Error,t,St.BAD_REQUEST);_s.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await xv(e)}catch(u){throw _s.error(u),u}let s,n=await uee.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Xu.PassThrough;if(e.format===vv){i=e.s3.key+".csv";let u=Bv(r,r.getColumns?.());u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===Pv){i=e.s3.key+".json";let u=new Xu.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%See===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw pt(new Error,Rr.INVALID_VALUE("format"),St.BAD_REQUEST);return new hee({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(yee,"export_to_s3");function Bv(e,t){let r=Xu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),s={};t&&(s.fields=t.map(o=>({label:o,value:o})));let n={objectMode:!0},i=new _ee(s,n);return r.pipe(i)}a(Bv,"toCsvStream");function Hv(e){if(_s.trace("in exportCoreValidation"),Vr.isEmpty(e.format))return"format missing";if(Mv.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Mv.join(", ")}`;let t=e.search_operation.operation;if(Vr.isEmpty(t))return"search_operation.operation missing";if(Lv.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${Lv.join(", ")}`}a(Hv,"exportCoreValidation");async function xv(e){_s.trace("in getRecords");let t,r;if(ju.isEmpty(e.search_operation)||ju.isEmptyOrZeroLength(e.search_operation.operation))throw pt(new Error,Rr.INVALID_VALUE("Search operation"),St.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=gee;break;case"search_by_hash":t=Tee;break;case"search_by_conditions":t=wg.searchByConditions;break;case"sql":t=Ree;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,_s.error(r),pt(new Error,r,St.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(xv,"getRecords")});var Wv={};Ye(Wv,{contentTypes:()=>Mg,findBestSerializer:()=>vf,getDeserializer:()=>To,registerContentHandlers:()=>Ug,serialize:()=>Bf,serializeMessage:()=>gi});function wee(e){try{return e?.[0]===123?Lg(e):e}catch{return e}}function Ug(e){e.register(Cee,{serializers:[{regex:/^application\/json$/,serializer:Sc},{regex:/^application\/cbor$/,serializer:function(t){return new So.EncoderStream(el).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Pf.Readable.from((0,cn.encodeIter)(t,el)):(0,cn.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Ig.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,cn.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,So.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function vf(e){let r=(e.headers.asObject||e.headers).accept,s,n=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=Bt.get(_);if(E){let h=(E.q||1)*d;h>n&&(s=E,i=E.type||_,n=h,o=f)}}if(!s){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Bt.keys()).join(", "))}};s=Bt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function Bf(e,t,r){let s=Fv&&t.headers.asObject?.["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=vf(t);if(i.serializer.compressible===!1&&(s=!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 s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Pn.createBrotliCompress)({params:{[Pn.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Pn.constants.BROTLI_MODE_TEXT:Pn.constants.BROTLI_MODE_GENERIC,[Pn.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e,r)}return s&&n?.length>Fv?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Pn.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function gi(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return Zu(e);let r=t.serialize;if(r)return r(e);let s=vf(t);return r=t.serialize=s.serializer.serialize,r(e)}function Dee(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function To(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Bt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Bt.get(e)?.deserialize||kv(e,s);return o=>Dee(o).then(i)}return e&&Bt.get(e)?.deserialize||kv(e,s)}function kv(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return Lg(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function Lee(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var Ig,cn,So,Pn,Pf,Vv,Cg,Dg,$v,Yv,Zu,Lg,el,Bt,Mg,Gv,Kv,Iee,Cee,Fv,Aa=Re(()=>{$h();Ig=x(Uf()),cn=require("msgpackr"),So=require("cbor-x"),Pn=require("zlib"),Pf=require("stream");nr();Vv=require("../index"),Cg=x(ee()),Dg=x(M()),$v=x(require("yaml")),Yv=Cg.default.get(Dg.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,Zu=Yv?vi:JSON.stringify,Lg=Yv?Vh:JSON.parse,el={useRecords:!1,useToJSON:!0},Bt=new Map,Mg=Bt;tt.contentTypes=Mg;(0,Vv._assignPackageExport)("contentTypes",Mg);Bt.set("application/json",{serializeStream:Sc,serialize:Zu,deserialize:Lg,q:.8});Gv=new So.Encoder(el);Bt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new So.EncoderStream(el).end(e)},serialize:Gv.encode,deserialize:Gv.decode,q:1});Bt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Pf.Readable.from((0,cn.encodeIter)(e,el)):(0,cn.pack)(e)},serialize:cn.pack,deserialize:cn.unpack,q:.9});Bt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,Ig.toCsvStream)(e,e?.getColumns?.())},q:.1});Bt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Bt.set("text/yaml",{serialize(e){return $v.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Bt.set("text/event-stream",{serializeStream:function(e){return Pf.Readable.from(Lee(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+`
15
+ `,""):null}catch(f){f.stderr?i[u].npm_error=HP(f.stderr):i[u].npm_error=f.message;continue}try{i[u].npm_output=JSON.parse(l)}catch{i[u].npm_output=l}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return ya.info(`finished installModules with response ${i}`),i}a(q9,"installModules");function HP(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
16
+ `);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(HP,"parseNPMStdErr");async function G9(e){ya.info(`starting auditModules for request: ${e}`);let t=qP(e);if(t)throw ba(t,t.message,Na.BAD_REQUEST);let{projects:r}=e;await Tf(),await xP(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=Sf.join(ng,o);s[o]={npm_output:null,npm_error:null};try{let u=await $u("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=HP(u.stderr)}}return ya.info(`finished auditModules with response ${s}`),s}a(G9,"auditModules");async function Tf(){try{return await $u("npm -v"),!0}catch{throw ba(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Na.BAD_REQUEST,void 0,void 0,!0)}}a(Tf,"checkNPMInstalled");async function xP(e){if(!Array.isArray(e)||e.length===0)throw ba(new Error,"projects argument must be an array with at least 1 element",Na.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=Sf.join(ng,i.toString());if(!await PP.pathExists(o)){t.push(i);continue}let u=Sf.join(o,"package.json");await PP.pathExists(u)||r.push(i)}if(t.length>0)throw ba(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Na.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw ba(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Na.BAD_REQUEST,void 0,void 0,!0)}a(xP,"checkProjectPaths");function qP(e){let t=pf.object({projects:pf.array().min(1).items(pf.string()).required(),dry_run:pf.boolean().default(!1)});return P9.validateBySchema(e,t)}a(qP,"modulesValidator")});var og=g((Uhe,YP)=>{"use strict";var wa=require("fs-extra"),ig=require("path"),Rf=$(),FP=Q(),Af=M(),$P=ee(),F9=Pr();YP.exports=k9;async function k9(){let e=V9(),t=$P.get(Af.CONFIG_PARAMS.ROOTPATH),r=ig.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Af.PACKAGE_ROOT}},n=ig.join(t,"node_modules");await wa.ensureDir(n);let i,o=!0,c=!1;try{i=await wa.readJson(r)}catch(u){if(FP.isEmptyOrZeroLength(e))return;if(u.code!==Af.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!FP.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await kP(_);s.dependencies[u]=l+_}if(!o){Rf.notify("Installing components"),await VP(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await kP(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Rf.notify("Removing component",u),c=!0);c&&(Rf.notify("Updating components."),await VP(r,s,i))}a(k9,"installComponents");function V9(){let e=F9.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(V9,"getComponentsConfig");async function kP(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":ig.extname(e)||await wa.pathExists(e)?"file:":"github:"}a(kP,"getPkgPrefix");async function VP(e,t,r){Rf.trace("npm installing components package.json",t),await wa.writeFile(e,JSON.stringify(t,null," "));try{await gf().installAllRootModules($P.get(Af.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await wa.writeFile(e,JSON.stringify(r,null," ")):await wa.unlink(e),s}}a(VP,"installPackages")});var ug=g((Bhe,zP)=>{"use strict";var ke=require("fs-extra"),ag=require("fast-glob"),pe=require("path"),WP=require("tar-fs"),vhe=require("uuid").v4,cg=require("normalize-path"),on=UP(),Nt=$(),Qe=M(),mt=ee(),Yu=Pr(),$9=Q(),{PACKAGE_ROOT:Y9}=M(),{handleHDBError:Pt,hdb_errors:K9}=se(),{basename:W9}=require("path"),Q9=og(),QP=ee(),z9=M(),{Readable:J9}=require("stream"),{isMainThread:X9}=require("worker_threads"),{HDB_ERROR_MSGS:So,HTTP_STATUS_CODES:vt}=K9,j9=pe.join(Y9,"application-template"),KP=pe.join(mt.get(Qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Z9(){Nt.trace("getting custom api status");let e={};try{e={port:mt.get(Qe.CONFIG_PARAMS.HTTP_PORT),directory:mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Pt(new Error,So.FUNCTION_STATUS,vt.INTERNAL_SERVER_ERROR,Nt.ERR,t)}return e}a(Z9,"customFunctionsStatus");function e7(){Nt.trace("getting custom api endpoints");let e={},t=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT);try{ag.sync(cg(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:ag.sync(cg(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:ag.sync(cg(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Pt(new Error,So.GET_FUNCTIONS,vt.INTERNAL_SERVER_ERROR,Nt.ERR,r)}return e}a(e7,"getCustomFunctions");function t7(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=on.getDropCustomFunctionValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);Nt.trace("getting custom api endpoint file content");let r=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=pe.join(r,s,n,i+".js");try{return ke.readFileSync(o,{encoding:"utf8"})}catch(c){throw Pt(new Error,So.GET_FUNCTION,vt.INTERNAL_SERVER_ERROR,Nt.ERR,c)}}a(t7,"getCustomFunction");function r7(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=on.setCustomFunctionValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);Nt.trace("setting custom function file content");let r=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return ke.outputFileSync(pe.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Pt(new Error,So.SET_FUNCTION,vt.INTERNAL_SERVER_ERROR,Nt.ERR,c)}}a(r7,"setCustomFunction");function s7(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=on.getDropCustomFunctionValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);Nt.trace("dropping custom function file");let r=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return ke.unlinkSync(pe.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Pt(new Error,So.DROP_FUNCTION,vt.INTERNAL_SERVER_ERROR,Nt.ERR,o)}}a(s7,"dropCustomFunction");function n7(e){e.project&&(e.project=pe.parse(e.project).name);let t=on.addComponentValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);Nt.trace("adding component");let r=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=pe.join(r,s);return ke.mkdirSync(n,{recursive:!0}),ke.copySync(j9,n),`Successfully added project: ${s}`}catch(n){throw Pt(new Error,So.ADD_FUNCTION,vt.INTERNAL_SERVER_ERROR,Nt.ERR,n)}}a(n7,"addComponent");function i7(e){e.project&&(e.project=pe.parse(e.project).name);let t=on.dropCustomFunctionProjectValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);Nt.trace("dropping custom function project");let r=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=mt.get(Qe.CONFIG_PARAMS.APPS);if(!$9.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return Yu.updateConfigValue(Qe.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=pe.join(r,s);return ke.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw Pt(new Error,So.DROP_FUNCTION_PROJECT,vt.INTERNAL_SERVER_ERROR,Nt.ERR,i)}}a(i7,"dropCustomFunctionProject");async function o7(e){e.project&&(e.project=pe.parse(e.project).name);let t=on.packageComponentValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;Nt.trace("packaging component",s);let n;try{n=await ke.realpath(pe.join(r,s))}catch(u){if(u.code!==Qe.NODE_ERROR_CODES.ENOENT)throw u;try{n=await ke.realpath(pe.join(mt.get(Qe.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===Qe.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await ke.ensureDir(KP);let i=pe.join(KP,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(pe.join(n,"node_modules"))}),WP.pack(n,o).pipe(ke.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=ke.readFileSync(i,{encoding:"base64"});return await ke.remove(i),{project:s,payload:c}}a(o7,"packageComponent");async function a7(e){e.project&&(e.project=pe.parse(e.project).name);let t=on.deployComponentValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(Nt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=pe.join(r,s),i="file:"+o,await ke.ensureDir(o);let f=J9.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(WP.extract(o,{finish:h})).on("error",p)});let E=await ke.readdir(o);E.length===1&&E[0]==="package"&&(await ke.copy(pe.join(o,"package"),o),await ke.remove(pe.join(o,"package")))}if(await Yu.addConfig(s,{package:i}),!n){await Q9();let f=QP.get(z9.CONFIG_PARAMS.ROOTPATH);o=pe.join(f,"node_modules",s)}if(X9)return;let c=new Map;c.isWorker=!0;let u=(bf(),ne(Of)),_;u.setErrorReporter(f=>_=f);let l=W9(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return Nt.info("Installed component"),`Successfully deployed: ${s}`}a(a7,"deployComponent");async function c7(){let e=Yu.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 u=await ke.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=pe.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await ke.stat(d),E={name:pe.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(u){return Nt.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),s=await r(mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{name:mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT).split(pe.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(pe.join(mt.get(Qe.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(bf(),ne(Of)).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 s}a(c7,"getComponents");async function u7(e){let t=on.getComponentFileValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let s=Yu.getConfigObj()[e.project]||e.project==="harperdb"?pe.join(QP.get(Qe.CONFIG_PARAMS.ROOTPATH),"node_modules"):mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await ke.stat(pe.join(s,e.project,e.file));return{message:await ke.readFile(pe.join(s,e.project,e.file),n),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Qe.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${pe.join(e.project,e.file)}'`):i}}a(u7,"getComponentFile");async function l7(e){let t=on.setComponentFileValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=pe.join(mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await ke.ensureFile(s),await ke.outputFile(s,e.payload,r)):await ke.ensureDir(s),"Successfully set component: "+e.file}a(l7,"setComponentFile");async function _7(e){let t=on.dropComponentFileValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=e.file?pe.join(e.project,e.file):e.project,s=pe.join(mt.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),r);return await ke.pathExists(s)&&await ke.remove(s),Yu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(_7,"dropComponent");zP.exports={customFunctionsStatus:Z9,getCustomFunctions:e7,getCustomFunction:t7,setCustomFunction:r7,dropCustomFunction:s7,addComponent:n7,dropCustomFunctionProject:i7,packageComponent:o7,deployComponent:a7,getComponents:c7,getComponentFile:u7,setComponentFile:l7,dropComponent:_7}});var lg=g((xhe,XP)=>{"use strict";var an=require("joi"),JP=Xe();XP.exports={readTransactionLogValidator:d7,deleteTransactionLogsBeforeValidator:f7};function d7(e){let t=an.object({schema:an.string().required(),table:an.string().required(),from:an.date().timestamp(),to:an.date().timestamp(),limit:an.number().min(1)});return JP.validateBySchema(e,t)}a(d7,"readTransactionLogValidator");function f7(e){let t=an.object({schema:an.string().required(),table:an.string().required(),timestamp:an.date().timestamp().required()});return JP.validateBySchema(e,t)}a(f7,"deleteTransactionLogsBeforeValidator")});var yf=g((Ghe,rv)=>{"use strict";var _g=M(),Nf=st(),jP=Q(),ZP=ee(),ev=Tn(),{handleHDBError:Ia,hdb_errors:E7}=se(),{HTTP_STATUS_CODES:Ca}=E7,{readTransactionLogValidator:h7,deleteTransactionLogsBeforeValidator:m7}=lg(),tv="This operation relies on clustering and cannot run with it disable.",p7="Logs successfully deleted from transaction log.",S7="All logs successfully deleted from transaction log.";rv.exports={readTransactionLog:T7,deleteTransactionLogsBefore:g7};async function*T7(e){let t=h7(e);if(t)throw Ia(t,t.message,Ca.BAD_REQUEST,void 0,void 0,!0);if(!ZP.get(_g.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ia(new Error,tv,Ca.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=jP.checkSchemaTableExist(r,s);if(n)throw Ia(new Error,n,Ca.NOT_FOUND,void 0,void 0,!0);let i=ev.createNatsTableStreamName(r,s),o=await Nf.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===_g.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(T7,"readTransactionLog");async function g7(e){let t=m7(e);if(t)throw Ia(t,t.message,Ca.BAD_REQUEST,void 0,void 0,!0);if(!ZP.get(_g.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ia(new Error,tv,Ca.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=jP.checkSchemaTableExist(r,s);if(i)throw Ia(new Error,i,Ca.NOT_FOUND,void 0,void 0,!0);let o=ev.createNatsTableStreamName(r,s),{jsm:c}=await Nf.getNATSReferences(),u=await Nf.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=p7,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=S7):d=(await Nf.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(g7,"deleteTransactionLogsBefore")});var nv=g((khe,sv)=>{"use strict";var dg=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};sv.exports=dg});var ov=g(($he,iv)=>{"use strict";var fg=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};iv.exports=fg});var hg=g((Khe,cv)=>{"use strict";var av=nv(),R7=ov(),{HDB_ERROR_MSGS:A7}=yr(),Eg=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=A7.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new av(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new R7(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new av(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};cv.exports=Eg});var Df=g((Qhe,bv)=>{"use strict";var mg=Lr(),wf=Dr(),ls=fu(),Qu=ei(),pg=si(),O7=MS(),b7=TL(),zu=ss(),If=FS(),yt=$(),N7=$S(),y7=Vd(),w7=AT(),I7=Yd(),C7=bT(),D7=NT(),L7=IT(),M7=DT(),Sg=UT(),Mn=Q(),U7=mU(),Tg=xT(),_v=_f(),us=M(),dv=mP(),P7=ha(),fv=Tu(),Ev=(hf(),ne(Gu)),hv=Pr(),kr=ug(),v7=require("alasql"),mv=yf(),pv=gf(),Sv=hg(),{handleHDBError:gr,hdb_errors:Tv}=se(),{HDB_ERROR_MSGS:kt,HTTP_STATUS_CODES:Ku}=Tv,V=new Map,gv="delete",Ai="insert",Un="read",To="update",Wu="describe",uv=Qu.describeSchema.name,lv=Qu.describeTable.name,Rv={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},B7="catchup",H7="handleGetJob",x7="handleGetJobsByStartDate",Cf={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},q7=[ls.createTable.name,ls.createAttribute.name,ls.dropTable.name,ls.dropAttribute.name],Av={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},W=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};V.set(mg.insert.name,new W(!1,[Ai]));V.set(mg.update.name,new W(!1,[To]));V.set(mg.upsert.name,new W(!1,[Ai,To]));V.set(wf.searchByConditions.name,new W(!1,[Un]));V.set(wf.searchByHash.name,new W(!1,[Un]));V.set(wf.searchByValue.name,new W(!1,[Un]));V.set(wf.search.name,new W(!1,[Un]));V.set(ls.createSchema.name,new W(!0,[]));V.set(ls.createTable.name,new W(!0,[]));V.set(ls.createAttribute.name,new W(!1,[Ai]));V.set(ls.dropSchema.name,new W(!0,[]));V.set(ls.dropTable.name,new W(!0,[]));V.set(ls.dropAttribute.name,new W(!0,[]));V.set(Qu.describeSchema.name,new W(!1,[Un]));V.set(Qu.describeTable.name,new W(!1,[Un]));V.set(pg.deleteRecord.name,new W(!1,[gv]));V.set(zu.addUser.name,new W(!0,[]));V.set(zu.alterUser.name,new W(!0,[]));V.set(zu.dropUser.name,new W(!0,[]));V.set(zu.listUsersExternal.name,new W(!0,[]));V.set(If.listRoles.name,new W(!0,[]));V.set(If.addRole.name,new W(!0,[]));V.set(If.alterRole.name,new W(!0,[]));V.set(If.dropRole.name,new W(!0,[]));V.set(N7.name,new W(!0,[]));V.set(y7.name,new W(!0,[]));V.set(w7.name,new W(!0,[]));V.set(I7.name,new W(!0,[]));V.set(C7.name,new W(!0,[]));V.set(D7.name,new W(!0,[]));V.set(Sg.setRoutes.name,new W(!0,[]));V.set(Sg.getRoutes.name,new W(!0,[]));V.set(Sg.deleteRoutes.name,new W(!0,[]));V.set(hv.setConfiguration.name,new W(!0,[]));V.set(L7.clusterStatus.name,new W(!0,[]));V.set(M7.name,new W(!0,[]));V.set(Tg.getFingerprint.name,new W(!0,[]));V.set(Tg.setLicense.name,new W(!0,[]));V.set(pg.deleteFilesBefore.name,new W(!0,[]));V.set(pg.deleteAuditLogsBefore.name,new W(!0,[]));V.set(_v.restart.name,new W(!0,[]));V.set(_v.restartService.name,new W(!0,[]));V.set(O7.name,new W(!0,[]));V.set(b7.name,new W(!0,[Un]));V.set(P7.systemInformation.name,new W(!0,[]));V.set(hv.getConfiguration.name,new W(!0,[]));V.set(mv.readTransactionLog.name,new W(!0,[]));V.set(mv.deleteTransactionLogsBefore.name,new W(!0,[]));V.set(pv.installModules.name,new W(!0,[]));V.set(pv.auditModules.name,new W(!0,[]));V.set(fv.createTokens.name,new W(!1,[]));V.set(fv.refreshOperationToken.name,new W(!1,[]));V.set(Ev.login.name,new W(!1,[]));V.set(Ev.logout.name,new W(!1,[]));V.set(kr.customFunctionsStatus.name,new W(!0,[]));V.set(kr.getCustomFunctions.name,new W(!0,[]));V.set(kr.getComponents.name,new W(!0,[]));V.set(kr.getComponentFile.name,new W(!0,[]));V.set(kr.setComponentFile.name,new W(!0,[]));V.set(kr.dropComponent.name,new W(!0,[]));V.set(kr.getCustomFunction.name,new W(!0,[]));V.set(kr.setCustomFunction.name,new W(!0,[]));V.set(kr.dropCustomFunction.name,new W(!0,[]));V.set(kr.addComponent.name,new W(!0,[]));V.set(kr.dropCustomFunctionProject.name,new W(!0,[]));V.set(kr.packageComponent.name,new W(!0,[]));V.set(kr.deployComponent.name,new W(!0,[]));V.set(Tg.getRegistrationInfo.name,new W(!1,[]));V.set(zu.userInfo.name,new W(!1,[]));V.set(Qu.describeAll.name,new W(!1,[]));V.set(H7,new W(!1,[]));V.set(x7,new W(!0,[]));V.set(B7,new W(!0,[]));V.set(Cf.CSV_DATA_LOAD,new W(!1,[Ai,To]));V.set(Cf.CSV_URL_LOAD,new W(!1,[Ai,To]));V.set(Cf.CSV_FILE_LOAD,new W(!1,[Ai,To]));V.set(Cf.IMPORT_FROM_S3,new W(!1,[Ai,To]));V.set(Av.EXPORT_TO_S3,new W(!0,[]));V.set(Av.EXPORT_LOCAL,new W(!0,[]));V.set(us.VALID_SQL_OPS_ENUM.DELETE,new W(!1,[gv]));V.set(us.VALID_SQL_OPS_ENUM.SELECT,new W(!1,[Un]));V.set(us.VALID_SQL_OPS_ENUM.INSERT,new W(!1,[Ai]));V.set(us.VALID_SQL_OPS_ENUM.UPDATE,new W(!1,[To]));bv.exports={verifyPerms:F7,verifyPermsAst:G7,verifyBulkLoadAttributePerms:V7};function G7(e,t,r){if(Mn.isEmptyOrZeroLength(e))throw yt.info("verify_perms_ast has an empty user parameter"),gr(new Error);if(Mn.isEmptyOrZeroLength(t))throw yt.info("verify_perms_ast has an empty user parameter"),gr(new Error);if(Mn.isEmptyOrZeroLength(r))throw yt.info("verify_perms_ast has a null operation parameter"),gr(new Error);try{let s=new Sv,n=new U7(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw yt.info("No schemas defined in verifyPermsAst(), will not continue."),gr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&Rv[r])throw gr(new Error,kt.DROP_SYSTEM,Ku.FORBIDDEN);if(c&&!u)return null;let _=dv.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof v7.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=Ov(t,r,o,s);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),p=Rg(t.role.permission,f,d[E]);gg(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw gr(s)}}a(G7,"verifyPermsAst");function F7(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw yt.info("null required parameter in verifyPerms"),gr(new Error,kt.DEFAULT_INVALID_REQUEST,Ku.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema??e.database,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new Sv;if(Mn.isEmptyOrZeroLength(e.hdb_user.role)||Mn.isEmptyOrZeroLength(e.hdb_user.role.permission))return yt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(kt.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(us.SYSTEM_SCHEMA_NAME)||n===us.SYSTEM_SCHEMA_NAME;if(l&&Rv[r])throw gr(new Error,kt.DROP_SYSTEM,Ku.FORBIDDEN);if(u&&!l||_===!0&&(r===ls.createSchema.name||r===ls.dropSchema.name))return null;if(q7.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=dv.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===uv||r===lv){if(n===us.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(kt.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===uv&&(!d[n]||!d[n][Wu]))return c.handleInvalidItem(kt.SCHEMA_NOT_FOUND(n));if(r===lv&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Wu]))return c.handleInvalidItem(kt.TABLE_NOT_FOUND(n,i))}}let f=Ov(e.hdb_user,r,o,c,s);if(f)return f;if(V.get(r)&&V.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&us.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[us.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(b=>b[us.PERMS_CRUD_ENUM.READ]).forEach(b=>{p.push(b.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(T=>T.attribute),e.get_attributes=p)}let E=k7(e),h=Rg(e.hdb_user.role.permission,n,i);return gg(E,h,r,i,n,c,s),c.getPermsResponse()}a(F7,"verifyPerms");function Ov(e,t,r,s,n){if(Mn.arrayHasEmptyValues([e,t,r]))throw yt.info("hasPermissions has an invalid parameter"),gr(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 yt.info(`operation ${t} not found.`),gr(new Error,kt.OP_NOT_FOUND(t),Ku.BAD_REQUEST);if(V.get(t)&&V.get(t).requires_su)return yt.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(kt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Wu]===!1){s.addInvalidItem(kt.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(kt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[Wu]===!1)s.addInvalidItem(kt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=V.get(t).perms;!Mn.isEmpty(n)&&E.includes(n)&&(E=[n]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(yt.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=kt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw yt.error(E),yt.error(f),gr(Tv.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(Ov,"hasPermissions");function gg(e,t,r,s,n,i,o){if(!e||!t)throw yt.info("no attributes specified in checkAttributePerms."),gr(new Error);let c=V.get(r).perms;if(!c||c==="")throw yt.info(`no permissions found for ${r} in checkAttributePerms().`),gr(new Error);if(Mn.isEmptyOrZeroLength(t))return yt.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[Wu]===!1){i.addInvalidItem(kt.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(us.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Un)throw gr(new Error,kt.SYSTEM_TIMESTAMP_PERMS_ERR,Ku.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(kt.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(gg,"checkAttributePerms");function k7(e){let t=new Set;try{if(e.action)return t;if(e.operation===us.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){yt.info(r)}return t}a(k7,"getRecordAttributes");function Rg(e,t,r){let s=new Map;if(Mn.isEmpty(e))return yt.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{yt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(Rg,"getAttributePermissions");function V7(e,t,r,s,n,i,o){let c=new Set(i),u=Rg(e,s,n);gg(c,u,t,n,s,o,r)}a(V7,"verifyBulkLoadAttributePerms")});var Mf=g((Jhe,Cv)=>{"use strict";Cv.exports={evaluateSQL:ree,processAST:Iv,convertSQLToAST:wv,checkASTPermissions:yv};var $7=Lr(),Nv=require("util"),Y7=Nv.callbackify($7.insert),K7=Dr().search,W7=oD().update,Q7=Nv.callbackify(W7),z7=cD().convertDelete,Oi=require("alasql"),J7=Df(),Lf=$(),X7=ad(),j7=Q(),Ju=M(),{hdb_errors:Z7,handleHDBError:Ag}=se(),{HTTP_STATUS_CODES:Og}=Z7;X7(Oi);var eee=403,tee="There was a problem performing this insert. Please check the logs and try again.",bg=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function ree(e,t){let r=e.parsed_sql_object;if(!r){r=wv(e.sql);let s,n=r.ast.statements[0];if(n instanceof Oi.yy.Insert?s=n.into.databaseid:n instanceof Oi.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Oi.yy.Update||n instanceof Oi.yy.Delete?s=n.table.databaseid:Lf.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Oi.yy.Select)&&j7.isEmptyOrZeroLength(s))return t("No schema specified",null)}Iv(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(ree,"evaluateSQL");function yv(e,t){let r;try{r=J7.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(yv,"checkASTPermissions");function wv(e){let t=new bg;if(!e)throw Ag(new Error,"The 'sql' parameter is missing from the request body",Og.BAD_REQUEST);try{let r=e.trim(),s=Oi.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
17
+ `);throw s[1]?Ag(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,Og.BAD_REQUEST):Ag(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",Og.BAD_REQUEST)}return t}a(wv,"convertSQLToAST");function Iv(e,t,r){try{let s=see;if(!e.bypass_auth&&!t.permissions_checked){let i=yv(e,t);if(i&&i.length>0)return r(eee,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Ju.VALID_SQL_OPS_ENUM.SELECT:s=K7,n=t.ast.statements[0];break;case Ju.VALID_SQL_OPS_ENUM.INSERT:s=nee;break;case Ju.VALID_SQL_OPS_ENUM.UPDATE:s=Q7;break;case Ju.VALID_SQL_OPS_ENUM.DELETE:s=z7;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(Iv,"processAST");function see(e,t){Lf.info(e),t("unknown sql statement")}a(see,"nullFunction");function nee({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=iee(i,e.values)}catch(o){return r(o)}Y7(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Lf.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(nee,"convertInsert");function iee(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=Oi.compile(`SELECT ${n.toString()} AS [${Ju.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw Lf.error(r),new Error(tee)}}a(iee,"createDataObjects")});var Ng=g((jhe,Lv)=>{"use strict";var{S3:oee,GetObjectCommand:aee}=require("@aws-sdk/client-s3");Lv.exports={getFileStreamFromS3:cee,getS3AuthObj:Dv};async function cee(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await Dv(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new aee(r))).Body}a(cee,"getFileStreamFromS3");function Dv(e,t,r){return new oee({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(Dv,"getS3AuthObj")});var Uf=g((eme,Gv)=>{"use strict";var wg=Dr(),uee=Mf(),lee=Ng(),{AsyncParser:_ee,Transform:dee}=require("json2csv"),ju=require("stream"),Vr=Q(),yg=require("fs-extra"),fee=require("path"),_s=$(),{promisify:Pv}=require("util"),Xu=Q(),{handleHDBError:pt,hdb_errors:Eee}=se(),{HDB_ERROR_MSGS:Rr,HTTP_STATUS_CODES:St}=Eee,{streamAsJSON:hee}=($h(),ne(gb)),{Upload:mee}=require("@aws-sdk/lib-storage"),Mv=["search_by_value","search_by_hash","sql","search_by_conditions"],Uv=["json","csv"],vv="json",Bv="csv",pee="Successfully exported JSON locally.",See="Successfully exported CSV locally.",Tee=1e3,gee=wg.searchByHash,Ree=wg.searchByValue,Aee=Pv(uee.evaluateSQL),Oee=Pv(ju.finished);Gv.exports={export_to_s3:wee,export_local:bee,toCsvStream:Hv};async function bee(e){_s.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=xv(e);if(!Vr.isEmpty(t))throw _s.error(t),pt(new Error,t,St.BAD_REQUEST,void 0,void 0,!0);if(Vr.isEmpty(e.path))throw _s.error(Rr.MISSING_VALUE("path")),pt(new Error,Rr.MISSING_VALUE("path"),St.BAD_REQUEST,void 0,void 0,!0);let r=(Vr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(fee.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Vr.buildFolderPath(e.path,r);await Nee(e.path);let n=await qv(e);return await yee(s,e.format,n)}a(bee,"export_local");async function Nee(e){if(_s.trace("in confirmPath"),Vr.isEmptyOrZeroLength(e))throw pt(new Error,`Invalid path: ${e}`,St.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await yg.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,_s.error(s),pt(new Error,s,St.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 _s.error(r),pt(new Error,r,St.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Nee,"confirmPath");async function yee(e,t,r){if(_s.trace("in saveToLocal"),Xu.isEmptyOrZeroLength(e))throw pt(new Error,Rr.INVALID_VALUE("file_path"),St.BAD_REQUEST,void 0,void 0,!0);if(Xu.isEmptyOrZeroLength(t))throw pt(new Error,Rr.INVALID_VALUE("Source format"),St.BAD_REQUEST,void 0,void 0,!0);if(Xu.isEmpty(r))throw pt(new Error,Rr.NOT_FOUND("Data"),St.BAD_REQUEST,void 0,void 0,!0);if(t===vv){let s=yg.createWriteStream(e);return hee(r).pipe(s),await Oee(s),{message:pee,path:e}}else if(t===Bv){let s=yg.createWriteStream(e),n=ju.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(l=>({label:l,value:l})));let c={objectMode:!0};return await new _ee(i,c).fromInput(n).toOutput(s).promise(!1),{message:See,path:e}}throw pt(new Error,Rr.INVALID_VALUE("format"),St.BAD_REQUEST)}a(yee,"saveToLocal");async function wee(e){if(!e.s3||Object.keys(e.s3).length===0)throw pt(new Error,Rr.MISSING_VALUE("S3 object"),St.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw pt(new Error,Rr.MISSING_VALUE("aws_access_key_id"),St.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw pt(new Error,Rr.MISSING_VALUE("aws_secret_access_key"),St.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.bucket))throw pt(new Error,Rr.MISSING_VALUE("bucket"),St.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.key))throw pt(new Error,Rr.MISSING_VALUE("key"),St.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.region))throw pt(new Error,Rr.MISSING_VALUE("region"),St.BAD_REQUEST);let t=xv(e);if(!Vr.isEmpty(t))throw pt(new Error,t,St.BAD_REQUEST);_s.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await qv(e)}catch(u){throw _s.error(u),u}let s,n=await lee.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new ju.PassThrough;if(e.format===Bv){i=e.s3.key+".csv";let u=Hv(r,r.getColumns?.());u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===vv){i=e.s3.key+".json";let u=new ju.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%Tee===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw pt(new Error,Rr.INVALID_VALUE("format"),St.BAD_REQUEST);return new mee({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(wee,"export_to_s3");function Hv(e,t){let r=ju.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),s={};t&&(s.fields=t.map(o=>({label:o,value:o})));let n={objectMode:!0},i=new dee(s,n);return r.pipe(i)}a(Hv,"toCsvStream");function xv(e){if(_s.trace("in exportCoreValidation"),Vr.isEmpty(e.format))return"format missing";if(Uv.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Uv.join(", ")}`;let t=e.search_operation.operation;if(Vr.isEmpty(t))return"search_operation.operation missing";if(Mv.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${Mv.join(", ")}`}a(xv,"exportCoreValidation");async function qv(e){_s.trace("in getRecords");let t,r;if(Xu.isEmpty(e.search_operation)||Xu.isEmptyOrZeroLength(e.search_operation.operation))throw pt(new Error,Rr.INVALID_VALUE("Search operation"),St.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Ree;break;case"search_by_hash":t=gee;break;case"search_by_conditions":t=wg.searchByConditions;break;case"sql":t=Aee;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,_s.error(r),pt(new Error,r,St.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(qv,"getRecords")});var Qv={};Ye(Qv,{contentTypes:()=>Mg,findBestSerializer:()=>vf,getDeserializer:()=>Ro,registerContentHandlers:()=>Ug,serialize:()=>Bf,serializeMessage:()=>Ri});function Iee(e){try{return e?.[0]===123?Lg(e):e}catch{return e}}function Ug(e){e.register(Dee,{serializers:[{regex:/^application\/json$/,serializer:Tc},{regex:/^application\/cbor$/,serializer:function(t){return new go.EncoderStream(el).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Pf.Readable.from((0,cn.encodeIter)(t,el)):(0,cn.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Ig.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,cn.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,go.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function vf(e){let r=(e.headers.asObject||e.headers).accept,s,n=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=Bt.get(_);if(E){let h=(E.q||1)*d;h>n&&(s=E,i=E.type||_,n=h,o=f)}}if(!s){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Bt.keys()).join(", "))}};s=Bt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function Bf(e,t,r){let s=kv&&t.headers.asObject?.["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=vf(t);if(i.serializer.compressible===!1&&(s=!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 s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Pn.createBrotliCompress)({params:{[Pn.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Pn.constants.BROTLI_MODE_TEXT:Pn.constants.BROTLI_MODE_GENERIC,[Pn.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e,r)}return s&&n?.length>kv?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Pn.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Ri(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return Zu(e);let r=t.serialize;if(r)return r(e);let s=vf(t);return r=t.serialize=s.serializer.serialize,r(e)}function Lee(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function Ro(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Bt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Bt.get(e)?.deserialize||Vv(e,s);return o=>Lee(o).then(i)}return e&&Bt.get(e)?.deserialize||Vv(e,s)}function Vv(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return Lg(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function Mee(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var Ig,cn,go,Pn,Pf,$v,Cg,Dg,Yv,Kv,Zu,Lg,el,Bt,Mg,Fv,Wv,Cee,Dee,kv,Oa=Re(()=>{$h();Ig=x(Uf()),cn=require("msgpackr"),go=require("cbor-x"),Pn=require("zlib"),Pf=require("stream");nr();$v=require("../index"),Cg=x(ee()),Dg=x(M()),Yv=x(require("yaml")),Kv=Cg.default.get(Dg.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,Zu=Kv?Bi:JSON.stringify,Lg=Kv?Vh:JSON.parse,el={useRecords:!1,useToJSON:!0},Bt=new Map,Mg=Bt;tt.contentTypes=Mg;(0,$v._assignPackageExport)("contentTypes",Mg);Bt.set("application/json",{serializeStream:Tc,serialize:Zu,deserialize:Lg,q:.8});Fv=new go.Encoder(el);Bt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new go.EncoderStream(el).end(e)},serialize:Fv.encode,deserialize:Fv.decode,q:1});Bt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Pf.Readable.from((0,cn.encodeIter)(e,el)):(0,cn.pack)(e)},serialize:cn.pack,deserialize:cn.unpack,q:.9});Bt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,Ig.toCsvStream)(e,e?.getColumns?.())},q:.1});Bt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Bt.set("text/yaml",{serialize(e){return Yv.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Bt.set("text/event-stream",{serializeStream:function(e){return Pf.Readable.from(Mee(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
18
18
  `),e.data){let r=e.data;typeof r=="object"&&(r=Zu(r)),t+="data: "+r+`
19
19
  `}return e.id&&(t+="id: "+e.id+`
20
20
  `),e.retry&&(t+="retry: "+e.retry+`
@@ -23,8 +23,8 @@
23
23
 
24
24
  `:`data: ${e}
25
25
 
26
- `},compressible:!1,q:.8});Bt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});Kv={type:"application/json",serializeStream:Sc,serialize:Zu,deserialize:wee,q:.8};Bt.set("*/*",Kv);Bt.set("",Kv);a(wee,"tryJSONParse");a(Ug,"registerContentHandlers");Iee=require("fastify-plugin"),Cee=Iee(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=vf(s.raw);n.type(c),n.serializer(function(u){return(o.serializeStream||o.serialize)(u,{headers:{set:(_,l)=>{n.header(_,l)}}})})}),r()},{name:"content-type-negotiation"});a(vf,"findBestSerializer");Fv=Cg.default.get(Dg.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Bf,"serialize");a(gi,"serializeMessage");a(Dee,"streamToBuffer");a(To,"getDeserializer");a(kv,"deserializerUnknownType");a(Lee,"transformIterable")});function Bg(e,t,r,s,n,i,o,c){let u=e[0];if(t==="or"){let d=_(u);for(let E=1;E<e.length;E++){let h=e[E],p=_(h);d=d.concat(p)}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=_(u),f=l(e.slice(1),!0,u.estimated_count);return f.length>0?o(d,f):d}function _(d){return d.conditions?Bg(d.conditions,d.operator,r,s,n,i,o,c):La(d,s,d.descending||n.reverse===!0,r,n.allowFullScan,c)}a(_,"executeCondition");function l(d,f,E){return d.map((h,p)=>{if(h.conditions){let b=h.operator==="or",R=l(h.conditions,!b,E);return b?(L,H)=>R.some(P=>P(L,H)):(L,H)=>R.every(P=>P(L,H))}let S=(h.attribute||h[0])===r.primaryKey,T=xg(h,r,i,c,S,E);return f&&p<d.length-1&&E&&(E=Gee(r.primaryStore,h.estimated_count,E)),T}).filter(Boolean)}a(l,"mapConditionsToFilters")}function La(e,t,r,s,n,i){let o=e[0]??e.attribute,c=e[1]??e.value,u=e.comparator;if(Array.isArray(o)){let b=o[0],R=Bn(s.attributes,b);if(R.relationship){if(o.length<2)throw new $r.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let L=R.definition?.tableClass||R.elements?.definition?.tableClass,H=new Map,P=La({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,L,n,H);if(R.relationship.to){i[o[0]]=H;let k=!!Bn(L.attributes,R.relationship.to)?.elements;P=Bee(P,R,L.primaryStore,k,H)}if(R.relationship.from){let k=a(B=>La({attribute:R.relationship.from,value:B},t,r,s,n,H),"searchEntry");R.elements?(i[o[0]]=H,P=Hee(P,R,L.primaryStore,H,k)):P=P.flatMap(k)}return P}else if(o.length===1)o=o[0];else throw new $r.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,f;c instanceof Date&&(c=c.getTime());let E;switch(Hg[u]||u){case"lt":_=!0,l=c;break;case"le":_=!0,l=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,l=c.slice(0),l[l.length-1]=un.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),l=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),l=c[1],l instanceof Date&&(l=l.getTime()),d=!0;break;case"equals":case void 0:_=c,l=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 $r.ClientError(`Unknown query comparator "${u}"`)}if(r){let b=_;_=l,l=b,b=!f,f=!d,d=b}let h=o===s.primaryKey||o==null,p=h?s.primaryStore:s.indices[o],S;if(!p||p.isIndexing||E||c===null&&!p.indexNulls){if(n===!1&&!p)throw new $r.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(n===!1&&E)throw new $r.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(p?.isIndexing)throw new $r.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!p.indexNulls)throw new $r.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=xg(e),!S)throw new $r.ClientError(`Unknown search operator ${e.comparator}`)}let T={start:_,end:l,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let b=p.getRange(T).map(S?function({key:R,value:L}){return this.isSync?L&&S(L)?R:Oi.SKIP:new Promise((H,P)=>setImmediate(()=>{try{H(L&&S(L)?R:Oi.SKIP)}catch(k){P(k)}}))}:R=>R.value==null?Oi.SKIP:R);return b.hasEntries=!0,b}else return p?p.getRange(T).map(S?function({key:b,value:R}){return this.isSync?S({[o]:b})?R:Oi.SKIP:new Promise((L,H)=>setImmediate(()=>{try{L(S({[o]:b})?R:Oi.SKIP)}catch(P){H(P)}}))}:({value:b})=>b):s.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:b,value:R}){return this.isSync?R&&S(R)?b:Oi.SKIP:new Promise((L,H)=>setImmediate(()=>{try{L(R&&S(R)?b:Oi.SKIP)}catch(P){H(P)}}))})}function Bn(e,t){if(Array.isArray(t))if(t.length>1){let r=Bn(e,t[0]),s=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return s?Bn(s,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function Bee(e,t,r,s,n){return new e.constructor({[Symbol.iterator](){let i;n.hasMappings=!0;let o;return{next(){if(!i){let u=t.relationship.to,_=a((l,d)=>{let f=l;Array.isArray(l)&&(f=Hs(l),o=!0);let E=n.get(f);E?E.push(d):n.set(f,E=[d]),l!==f&&(E.key=l)},"add_entry");for(let l of e){let d=l.value??r.get(l.key??l),f=d?.[u];if(f!=null&&!n.filters?.some(E=>!E(d)))if(s)for(let E=0;E<f.length;E++)_(f[E],l);else _(f,l)}return i=(o?n:n.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 Hee(e,t,r,s,n){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let u;if(o)for(;u=o.next(),!u.done;){let _=Hs(u.value);if(!c.has(_))return c.add(_),u}if(!i){let _=new Map;s.fromRecord=l=>l[t.relationship.from]?.filter?.(d=>_.has(Hs(d)));for(let l of e){if(s.filters){let d=r.get(l);if(s.filters.some(f=>!f(d)))continue}_.set(Hs(l),l)}return i=_.values()[Symbol.iterator](),this.next()}do{let _=i.next();return _.done?_:(o=n(_.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function xg(e,t,r,s,n,i){let o=e.comparator,c=e[0]??e.attribute,u=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 l=c[0],d=Bn(t.attributes,l),f=d.definition?.tableClass||d.elements.definition?.tableClass,E=s?.[l],h=xg({attribute:c.length>2?c.slice(1):c[1],value:u,comparator:o},f,r,E?.[l]?.joined,c[1]===f.primaryKey,i);if(!h)return;if(E){E.filters||(E.filters=[]),E.filters.push(h);return}let p=t.propertyResolvers?.[l],S,T=a((b,R)=>{let L,H;if(p){if(p.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let k of h.idFilter.idSet)e={attribute:p.from,value:k};S=_(p.from,h.idFilter,!0,!0)}else S=_(p.from,h.idFilter,!1,!0);let P=S(b);return S.idFilter&&(T.idFilter=S.idFilter),P}H=p(b,r,R),L=H?.value}else L=b[l];return L?Array.isArray(L)?L.some(h):h(L,H):!1},"recordFilter");return T}}switch(u instanceof Date&&(u=u.getTime()),Hg[o]||o){case Pg.SEARCH_TYPES.EQUALS:case void 0:return _(c,l=>l===u,!0);case"contains":return _(c,l=>l?.toString().includes(u));case"ends_with":return _(c,l=>l?.toString().endsWith(u));case"starts_with":return _(c,l=>typeof l=="string"&&l.startsWith(u),!0);case"prefix":return Array.isArray(u)?u[u.length-1]==null&&(u=u.slice(0,-1)):u=[u],_(c,l=>{if(!Array.isArray(l))return!1;for(let d=0,f=u.length;d<f;d++)if(l[d]!==u[d])return!1;return!0},!0);case"between":return u[0]instanceof Date&&(u[0]=u[0].getTime()),u[1]instanceof Date&&(u[1]=u[1].getTime()),_(c,l=>(0,un.compareKeys)(l,u[0])>=0&&(0,un.compareKeys)(l,u[1])<=0,!0);case"gt":return _(c,l=>(0,un.compareKeys)(l,u)>0);case"ge":return _(c,l=>(0,un.compareKeys)(l,u)>=0);case"lt":return _(c,l=>(0,un.compareKeys)(l,u)<0);case"le":return _(c,l=>(0,un.compareKeys)(l,u)<=0);case"ne":return _(c,l=>(0,un.compareKeys)(l,u)!==0);case"sort":return()=>!0;default:throw new $r.ClientError(`Unknown query comparator "${o}"`)}function _(l,d,f,E){let h;f=f&&!n&&t?.indices[l]&&i>3,f&&(e.estimated_count==null&&xf(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(f=!1));let p=0,S=3;function T(b){let R=b[l],L;if(typeof R!="object"||!R||E?L=d(R):Array.isArray(R)?L=R.some(d):R instanceof Date&&(L=d(R.getTime())),f&&(S++,!L&&!T.idFilter&&++p/S*(i-S)>h)){let H=La(e,r.transaction.getReadTxn(),!1,t).map(Hs),P=new Set(H);T.idFilter=k=>P.has(Hs(k)),T.idFilter.idSet=P}return L}return a(T,"recordFilter"),n&&(T.idFilter=d),T}a(_,"attributeComparator")}function xf(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let n;if(r.operator==="or"){n=0;for(let i of r.conditions)t(i),n+=i.estimated_count}else{n=1/0;for(let i of r.conditions)t(i),n=isFinite(n)?n*i.estimated_count/vn(e.primaryStore):i.estimated_count}return r.estimated_count=n,r.estimated_count}let s=r.comparator||r.search_type;if(s=Hg[s]||s,s===Pg.SEARCH_TYPES.EQUALS||!s){let n=r[0]??r.attribute;if(n==null||n===e.primaryKey)r.estimated_count=1;else if(Array.isArray(n)&&n.length>1){let i=Bn(e.attributes,n[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=xf(o)({value:r.value,attribute:n.length>2?n.slice(1):n[1],comparator:"equals"}),u=e.indices[i.relationship.from];r.estimated_count=c+(u?c*vn(e.indices[i.relationship.from])/(vn(o.primaryStore)||1):c)}else{let i=e.indices[n];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(s==="contains"||s==="ends_with"||s==="ne"){let n=r[0]??r.attribute,i=e.indices[n];r.value===null&&s==="ne"?r.estimated_count=vn(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else s==="starts_with"||s==="prefix"?r.estimated_count=Pee*vn(e.primaryStore)+1:s==="between"?r.estimated_count=Uee*vn(e.primaryStore)+1:s==="sort"?r.estimated_count=vn(e.primaryStore)+1:r.estimated_count=Mee*vn(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function qf(e){if(e)if(bi=e,Ca.lastIndex=0,xee.test(e))try{let t=tl(new Da,"");if(Ar!==bi.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 ${Ar} in '${bi}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function tl(e,t){let r=Ca,s,n,i,o,c,u=decodeURIComponent,_;for(;s=r.exec(bi);){Ar=r.lastIndex;let[,l,d]=s;if(o){if(l)throw new SyntaxError(`expected operator, but encountered '${l}'`);o=!1,c=!1}else c=!0;let f;switch(d){case"=":if(n){if(l.length<=2)i=l;else throw new SyntaxError(`invalid FIQL operator ${l}`);u=Qv}else{if(u=decodeURIComponent,i="equals",!l)throw new SyntaxError("attribute must be specified before equality comparator");n=rl(l)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=vee[d],u=vg[i]?Qv:decodeURIComponent,!l)throw new SyntaxError(`attribute must be specified before comparator ${d}`);n=rl(l);break;case"|":case"&":case"":case void 0:if(n==null){if(n===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:n,value:u(l)};i==="eq"&&zv(h,l),Hf(e,_),e.conditions.push(h)}d==="&"&&(_="and"),d==="|"&&(_="or"),n=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(rl(l)),n=void 0;break;case"(":Ca.lastIndex=Ar;let E=tl(l?[]:new Da,")");switch(l){case"":Hf(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=Jv(E);break;default:throw new SyntaxError(`unknown query function call ${l}`)}bi[Ar]===","?r.lastIndex=++Ar:o=!0,n=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!l)throw new SyntaxError("property sets must have a defined parent property name");Ca.lastIndex=Ar,f=tl([],"}"),f.name=l,e.push(f),bi[Ar]===","?r.lastIndex=++Ar:o=!0;break;case"[":Ca.lastIndex=Ar,l?(f=tl(new Da,"]"),f.name=l):f=tl(e.conditions?new Da:[],"]"),e.conditions?(Hf(e,_),e.conditions.push(f),n=null):e.push(f),bi[Ar]===","?r.lastIndex=++Ar:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(n){let h={comparator:i||"equals",attribute:n,value:u(l)};i==="eq"&&zv(h,l),Hf(e,_),e.conditions.push(h)}else if(l)throw new SyntaxError("no attribute or comparison specified")}else(l||e.length>0&&c)&&e.push(rl(l));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=n?qee:Ca,r.lastIndex=Ar),Ar===bi.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Hf(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 rl(e){return e.indexOf(".")>-1?e.split(".").map(rl):decodeURIComponent(e)}function Qv(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 $r.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function zv(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new $r.ClientError("wildcard can only be used at the end of a string")}function Jv(e){let t=jv(e[0]);return e.length>1&&(t.next=Jv(e.slice(1))),t}function jv(e){if(Array.isArray(e)){let t=jv(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 Hs(e){return Array.isArray(e)?e.join("\0"):e}function vn(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function Gee(e,t,r){return t*r/vn(e)}var $r,Pg,un,Oi,Mee,Uee,Pee,vee,vg,Hg,xee,Ca,qee,Ar,bi,Da,Gf=Re(()=>{$r=x(se()),Pg=x(dt()),un=require("ordered-binary"),Oi=require("lmdb"),Mee=.3,Uee=.1,Pee=.05,vee={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},vg={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(Bg,"executeConditions");a(La,"searchByIndex");a(Bn,"findAttribute");a(Bee,"joinTo");a(Hee,"joinFrom");Hg={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(xg,"filterByType");a(xf,"estimateCondition");xee=/[()[\]|!<>.]|(=\w*=)/,Ca=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,qee=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(qf,"parseQuery");a(tl,"parseBlock");a(Hf,"assignOperator");a(rl,"decodeProperty");a(Qv,"typedDecoding");a(zv,"wildcardDecoding");a(Jv,"toSortObject");a(jv,"toSortEntry");Da=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let s=this.conditions[r];if(s.attribute===t)return s.value}}};a(Hs,"flattenKey");a(vn,"estimatedEntryCount");a(Gee,"intersectionEstimate")});function r0(e){let t={openapi:Fee,info:{title:"HarperDB HTTP REST interface",version:(0,t0.version)()},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,s]of e){if(!s.path)continue;let{path:n}=s,i=n.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:u}=s.Resource;if(c=c??"id",!c)continue;let _={},l=[];if(o)for(let{type:R,name:L,elements:H,relationship:P,definition:k}of o){if(P)R==="array"?_[L]={type:"array",items:{$ref:Ni+H.type}}:_[L]={$ref:Ni+R};else{let B=k??H?.definition;if(B){if(!t.components.schemas[B.type]){let J={};B.properties.forEach(z=>{J[z.name]=new kg(qg[z.type],z.type)}),t.components.schemas[B.type]=new e0(J)}R==="array"?_[L]={type:"array",items:{$ref:Ni+B.type}}:_[L]={$ref:Ni+B.type}}else R==="array"?H.type==="Any"||H.type=="ID"?_[L]={type:"array",items:{format:H.type}}:_[L]={type:"array",items:new kg(qg[H.type],H.type)}:R==="Any"||R=="ID"?_[L]={format:R}:_[L]=new kg(qg[R],R)}l.push(new Vg(L,"query",_[L]))}let d=Object.keys(_),f=new Vg(c,"path",{format:"ID"});f.required=!0,f.description="primary key of record";let E=new Vg("property","path",{enum:d});E.required=!0,t.components.schemas[i]=new e0(_);let h=u.post!==Resource.prototype.post||u.update,p=typeof u.put=="function",S=typeof u.get=="function",T=typeof u.delete=="function",b="/"+n+"/";h&&(t.paths[b]={},t.paths[b].post=new kee(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[b]||(t.paths[b]={}),t.paths[b].get=new Gg(l,r,{200:new Fg({$ref:Ni+i})},"search for records by the specified property name and value pairs")),T&&(t.paths[b]||(t.paths[b]={}),t.paths[b].delete=new Zv(l,r,"delete all the records that match the provided query",{204:new Xv})),b="/"+n+"/{"+c+"}",S&&(t.paths[b]={},t.paths[b].get=new Gg([f],r,{200:new Fg({$ref:Ni+i})},"retrieve a record by its primary key")),p&&(t.paths[b]||(t.paths[b]={}),t.paths[b].put=new Vee([f],r,i,"create or update the record with the URL path that maps to the record's primary key")),T&&(t.paths[b]||(t.paths[b]={}),t.paths[b].delete=new Zv([f],r,"delete a record with the given primary key",{204:new Xv})),S&&E.schema.enum.length>0&&(b="/"+n+"/{"+c+"}.{property}",t.paths[b]={},t.paths[b].get=new Gg([f,E],r,{200:new Fg({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function kee(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Ni+e}}}},this.security=t,this.responses={200:{description:$g,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function Gg(e,t,r,s){this.description=s,this.parameters=e,this.security=t,this.responses=r}function Fg(e){this.description=$g,this.content={"application/json":{schema:e}}}function Xv(){this.description="successfully processed request, no content returned to client"}function Vee(e,t,r,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Ni+r}}}},this.responses={200:{description:$g}}}function Zv(e,t,r,s){this.description=r,this.parameters=e,this.security=t,this.responses=s}function e0(e){this.type="object",this.properties=e}function kg(e,t){this.type=e,this.format=t}function Vg(e,t,r){this.name=e,this.in=t,this.schema=r}var t0,Fee,qg,Ni,$g,s0=Re(()=>{t0=x(Hd()),Fee="3.0.3",qg={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Ni="#/components/schemas/",$g="successful operation";a(r0,"generateJsonApi");a(kee,"Post");a(Gg,"Get");a(Fg,"Response200");a(Xv,"Response204");a(Vee,"Put");a(Zv,"Delete");a(e0,"ResourceSchema");a(kg,"Type");a(Vg,"Parameter")});var kf={};Ye(kf,{start:()=>Kee});async function Yee(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&qf(e);let n=new Ti;try{e.responseHeaders=n;let i=e.url.slice(1),o,c;if(i!==n0){let h=Ff.getMatch(i);if(!h)return t(e);e.handlerPath=h.path,o={url:h.relativeURL,async:!0},c=h.Resource}let u=r["cache-control"];if(u){u=u.toLowerCase();let h=u.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),u.includes("only-if-cached")&&(e.onlyIfCached=!0),u.includes("no-cache")&&(e.noCache=!0),u.includes("no-store")&&(e.noCacheStore=!0),u.includes("stale-if-error")&&(e.staleIfError=!0),u.includes("must-revalidate")&&(e.mustRevalidate=!0)}let _=await Xe(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=To(r["content-type"],!0)(e.body)}catch(h){throw new Ma.ClientError(h,400)}if(e.authorize=!0,i===n0&&s==="GET"){if(e?.user?.role?.permission?.super_user)return r0(Ff);throw new Ma.ServerError("Forbidden",403)}switch(s){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":n.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 Ma.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Ma.ServerError(`Method ${s} is not recognized`,501)}}),l=200,d;if(_==null)l=s==="GET"||s==="HEAD"?404:204,Yg.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){$ee[0]=d;let h=String.fromCharCode(34,(Vt[0]&63)+62,(Vt[0]>>6)+(Vt[1]<<2&63)+62,(Vt[1]>>4)+(Vt[2]<<4&63)+62,(Vt[2]>>2)+62,(Vt[3]&63)+62,(Vt[3]>>6)+(Vt[4]<<2&63)+62,(Vt[4]>>4)+(Vt[5]<<4&63)+62,(Vt[5]>>2)+62,(Vt[6]&63)+62,(Vt[6]>>6)+(Vt[7]<<2&63)+62,34),p=r["if-none-match"];p&&h==p?(_?.onDone&&_.onDone(),l=304,_=void 0):n.setIfNone("ETag",h),Yg.lastModified&&n.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(l=201),e.newLocation&&n.setIfNone("Location",e.newLocation);let f={status:l,headers:n,body:void 0},E=_?.wasLoadedFromSource?.();return E!==void 0&&(f.wasCacheMiss=E,!E&&d&&n.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||d))/1e3))),_!==void 0&&(f.body=Bf(_,e,f),s==="HEAD"&&(f.body=void 0)),f}catch(i){i.statusCode?i.statusCode===500?go.warn(i):go.info(i):go.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),n.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=Bf(i.contentType?i:i.toString(),e,o),o}}function Kee(e){Yg=e,!i0&&(i0=!0,Ff=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Yee(t,r)}),e.server.ws(async(t,r,s)=>{sl++;let n=new As;o0||(o0=!0,nu(l=>{sl>0&&l.push({metric:"ws-connections",connections:sl,byThread:!0})}));let i;t.on("error",l=>{i=!0,go.warn(l)});let o;t.on("message",a(function(d){o||(o=To(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{sl--,ns(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=Ff.getMatch(u);if(ns(!!_,"connection","ws","connect"),!_)t.send(gi(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,qr(h=>({count:h.count,total:sl}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await Xe(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=gi(E.value,r);t.send(h),qr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var go,Ma,Vt,$ee,Yg,n0,i0,Ff,o0,sl,a0=Re(()=>{Aa();Nn();go=x($()),Ma=x(se());Gf();mc();eo();qu();s0();Vt=new Uint8Array(8),$ee=new Float64Array(Vt.buffer,0,1),Yg={},n0="openapi";a(Yee,"http");sl=0;a(Kee,"start")});var Kg=g((mme,c0)=>{var{recordAction:Vf,recordActionBinary:Wee}=(Nn(),ne(iu)),Qee=require("fastify-plugin"),zee=200;c0.exports=Qee(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.request.routeOptions,_,l,d;u.config?.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),Vf(o,"duration",_,d,l),Wee(n.raw.statusCode<400,"success",_,d,l);let f=zee;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Vf(performance.now()-c,"transfer",_,d,l),Vf(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Vf(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var Xg=g((Tme,d0)=>{var Wf=require("clone"),Qf=je(),Jee=Q(),Yf=M(),pme=$(),Wg=require("fs"),zg=require("joi"),{string:Kf}=zg.types(),{hdb_errors:jee,handleHDBError:$f}=se(),{HDB_ERROR_MSGS:Sme,HTTP_STATUS_CODES:Qg}=jee,{common_validators:Ua}=Qs(),u0=" is required",Xee=["insert","update","upsert"],Jg={database:{presence:!1,format:Ua.schema_format,length:Ua.schema_length},schema:{presence:!1,format:Ua.schema_format,length:Ua.schema_length},table:{presence:!0,format:Ua.schema_format,length:Ua.schema_length},action:{inclusion:{within:Xee,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Zee={schema:Kf.required(),table:Kf.required(),action:Kf.valid("insert","update","upsert")},{AWS_ACCESS_KEY:ete,AWS_SECRET:tte,AWS_BUCKET:rte,AWS_FILE_KEY:ste,REGION:nte}=Yf.S3_BUCKET_AUTH_KEYS,ite={s3:{presence:!0},[`s3.${ete}`]:{presence:!0,type:"String"},[`s3.${tte}`]:{presence:!0,type:"String"},[`s3.${rte}`]:{presence:!0,type:"String"},[`s3.${ste}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${nte}`]:{presence:!0,type:"String"}},l0=Wf(Jg);l0.data.presence={message:u0};var _0=Wf(Jg);_0.file_path.presence={message:u0};var ote=Object.assign(Wf(Jg),ite),jg=Wf(Zee);jg.csv_url=Kf.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();jg.passthrough_headers=zg.object();function ate(e){let t=Qf.validateObject(e,l0);return zf(e,t)}a(ate,"dataObject");function cte(e){let t=Qf.validateBySchema(e,zg.object(jg));return zf(e,t)}a(cte,"urlObject");function ute(e){let t=Qf.validateObject(e,_0);return zf(e,t)}a(ute,"fileObject");function lte(e){let t=Qf.validateObject(e,ote);return zf(e,t)}a(lte,"s3FileObject");function zf(e,t){if(!t){let r=Jee.checkGlobalSchemaTable(e.schema,e.table);if(r)return $f(new Error,r,Qg.BAD_REQUEST);if(e.operation===Yf.OPERATIONS_ENUM.CSV_FILE_LOAD)try{Wg.accessSync(e.file_path,Wg.constants.R_OK|Wg.constants.F_OK)}catch(s){return s.code===Yf.NODE_ERROR_CODES.ENOENT?$f(s,`No such file or directory ${s.path}`,Qg.BAD_REQUEST):s.code===Yf.NODE_ERROR_CODES.EACCES?$f(s,`Permission denied ${s.path}`,Qg.BAD_REQUEST):$f(s)}}return t}a(zf,"postValidateChecks");d0.exports={dataObject:ate,urlObject:cte,fileObject:ute,s3FileObject:lte}});var Zg=g((Rme,f0)=>{"use strict";var nl=$(),Jf=M();async function _te(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===Jf.OPERATIONS_ENUM.INSERT||t.operation===Jf.OPERATIONS_ENUM.UPDATE||t.operation===Jf.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Jf.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(nl.info(i.message),i):i.http_resp_msg?(nl.error(`Error calling operation: ${e.name}`),nl.error(i.http_resp_msg),i):(nl.error(`Error calling operation: ${e.name}`),nl.error(i),i)}}a(_te,"callOperationFunctionAsAwait");f0.exports={callOperationFunctionAsAwait:_te}});var h0=g((Ome,E0)=>{"use strict";var eR=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},tR=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};E0.exports={BulkLoadFileObject:eR,BulkLoadDataObject:tR}});var p0=g((Nme,m0)=>{"use strict";var rR=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};m0.exports=rR});var cR=g((Lme,P0)=>{"use strict";var jf=Lr(),Zf=Xg(),dte=require("needle"),xs=M(),wme=Fe(),Pa=Q(),{handleHDBError:it,hdb_errors:y0}=se(),{HTTP_STATUS_CODES:$t,HDB_ERROR_MSGS:wt,CHECK_LOGS_WRAPPER:Ao}=y0,va=$(),sR=require("papaparse");Pa.promisifyPapaParse();var qs=require("fs-extra"),fte=require("path"),{chain:S0}=require("stream-chain"),T0=require("stream-json/streamers/StreamArray"),g0=require("stream-json/utils/Batch"),R0=require("stream-chain/utils/comp"),{finished:A0}=require("stream"),Ete=ee(),w0=Zg(),hte=Ng(),{BulkLoadFileObject:iR,BulkLoadDataObject:mte}=h0(),oR=hg(),{verifyBulkLoadAttributePerms:I0}=Df(),Ime=p0(),Cme=st(),Dme=Tn(),{databases:pte}=(Ae(),ne(Ge)),{coerceType:Ste}=(eE(),ne(uR)),O0="No records parsed from csv file.",Ro=`${Ete.get("HDB_ROOT")}/tmp`,{schema_regex:Tte}=Qs(),b0=1024*1024*2,N0=5e3,gte={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};P0.exports={csvDataLoad:Rte,csvURLLoad:Ate,csvFileLoad:Ote,importFromS3:bte};async function Rte(e,t){let r=Zf.dataObject(e);if(r)throw it(r,r.message,$t.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=L0(e.schema,e.table),i=sR.parse(e.data,{header:!0,skipEmptyLines:!0,transform:nR.bind(null,n),dynamicTyping:!1}),o=new oR;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&I0(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 it(new Error,c,$t.BAD_REQUEST,void 0,void 0,!0);let u=new mte(e.action,e.schema,e.table,i.data);return s=await w0.callOperationFunctionAsAwait(M0,u,null),s.message===O0?O0:U0(s.records,s.number_written)}catch(n){throw Oo(n)}}a(Rte,"csvDataLoad");async function Ate(e){let t=Zf.urlObject(e);if(t)throw it(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Ro}/${r}`;try{await Nte(e,r)}catch(n){throw va.error(wt.DOWNLOAD_FILE_ERR(r)+" - "+n),it(n,Ao(wt.DOWNLOAD_FILE_ERR(r)))}try{let n=new iR(this.job_operation_function.name,e.action,e.schema,e.table,s,xs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await aR(n);return await Xf(s),i}catch(n){throw await Xf(s),Oo(n)}}a(Ate,"csvURLLoad");async function Ote(e){let t=Zf.fileObject(e);if(t)throw it(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r=new iR(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,xs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await aR(r)}catch(s){throw Oo(s)}}a(Ote,"csvFileLoad");async function bte(e){let t=Zf.s3FileObject(e);if(t)throw it(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=fte.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Ro}/${n}`;let i=new iR(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await yte(n,e);let o=await aR(i);return await Xf(r),o}catch(s){throw await Xf(r),Oo(s)}}a(bte,"importFromS3");async function Nte(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await dte("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw it(s,n,s.statusCode,xs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}Ite(r,e.csv_url),await wte(t,r.raw)}a(Nte,"downloadCSVFile");async function yte(e,t){try{let r=`${Ro}/${e}`;await qs.mkdirp(Ro),await qs.writeFile(`${Ro}/${e}`,"",{flag:"a+"});let s=await qs.createWriteStream(r),n=await hte.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){va.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw va.error(wt.S3_DOWNLOAD_ERR+" - "+r),it(r,Ao(wt.S3_DOWNLOAD_ERR))}}a(yte,"downloadFileFromS3");async function wte(e,t){try{await qs.mkdirp(Ro),await qs.writeFile(`${Ro}/${e}`,t)}catch(r){throw va.error(wt.WRITE_TEMP_FILE_ERR),it(r,Ao(wt.DEFAULT_BULK_LOAD_ERR))}}a(wte,"writeFileToTempFolder");async function Xf(e){if(e)try{await qs.access(e),await qs.unlink(e)}catch{va.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Xf,"deleteTempFile");function Ite(e,t){if(e.statusCode!==y0.HTTP_STATUS_CODES.OK)throw it(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,$t.BAD_REQUEST);if(!gte[e.headers["content-type"]])throw it(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,$t.BAD_REQUEST);if(!e.raw)throw it(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,$t.BAD_REQUEST)}a(Ite,"validateURLResponse");async function aR(e){try{let t;switch(e.file_type){case xs.VALID_S3_FILE_TYPES.CSV:t=await Cte(e);break;case xs.VALID_S3_FILE_TYPES.JSON:t=await Dte(e);break;default:throw it(new Error,wt.DEFAULT_BULK_LOAD_ERR,$t.BAD_REQUEST,xs.LOG_LEVELS.ERROR,wt.INVALID_FILE_EXT_ERR(e))}return U0(t.records,t.number_written)}catch(t){throw Oo(t)}}a(aR,"fileLoad");async function C0(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await jf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&I0(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=it(c);r(u)}}a(C0,"validateChunk");async function D0(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;Pa.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!Pa.isEmpty(c)&&!Pa.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await w0.callOperationFunctionAsAwait(M0,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=it(c,Ao(wt.INSERT_CSV_ERR),$t.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,wt.INSERT_CSV_ERR+" - "+c);r(u)}}a(D0,"insertChunk");async function Cte(e){let t={records:0,number_written:0},r=L0(e.schema,e.table);try{let s=new oR,n=qs.createReadStream(e.file_path,{highWaterMark:b0});n.setEncoding("utf8"),await sR.parsePromise(n,C0.bind(null,e,s),nR.bind(null,r));let i=s.getPermsResponse();if(i)throw it(new Error,i,$t.BAD_REQUEST);return n=qs.createReadStream(e.file_path,{highWaterMark:b0}),n.setEncoding("utf8"),await sR.parsePromise(n,D0.bind(null,e,t),nR.bind(null,r)),n.destroy(),t}catch(s){throw it(s,Ao(wt.PAPA_PARSE_ERR),$t.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,wt.PAPA_PARSE_ERR+s)}}a(Cte,"callPapaParse");function L0(e,t){let r=pte[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>Ste(i,n));return s}a(L0,"createTransformMap");function nR(e,t,r){let s=e.get(r);return s?s(t):Pa.autoCast(t)}a(nR,"typeFunction");async function Dte(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new oR,n=S0([qs.createReadStream(e.file_path,{encoding:"utf-8"}),T0.withParser(),c=>c.value,new g0({batchSize:N0}),R0(async c=>{await C0(e,s,r,c)})]);await new Promise((c,u)=>{A0(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw it(new Error,i,$t.BAD_REQUEST);let o=S0([qs.createReadStream(e.file_path,{encoding:"utf-8"}),T0.withParser(),c=>c.value,new g0({batchSize:N0}),R0(async c=>{await D0(e,t,r,c)})]);return await new Promise((c,u)=>{A0(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw it(s,Ao(wt.INSERT_JSON_ERR),$t.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,wt.INSERT_JSON_ERR+s)}}a(Dte,"insertJson");async function M0(e){let t={};try{e.data&&e.data.length>0&&Lte(e.data[0])?t=await Mte(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",va.info(t.message))}catch(r){throw Oo(r)}return t}a(M0,"callBulkFileLoad");function Lte(e){let t=Object.keys(e);for(let r of t)if(!Tte.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Lte,"validateColumnNames");async function Mte(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=jf.insert;break;case"update":i=jf.update;break;case"upsert":i=jf.upsert;break;default:throw it(new Error,wt.INVALID_ACTION_PARAM_ERR(s),$t.BAD_REQUEST,xs.LOG_LEVELS.ERROR,wt.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=Pa.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Oo(o)}}a(Mte,"bulkFileLoad");function U0(e,t){return`successfully loaded ${t} of ${e} records`}a(U0,"buildResponseMsg");function Oo(e){return it(e,Ao(wt.DEFAULT_BULK_LOAD_ERR),$t.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,wt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Oo,"buildTopLevelErrMsg")});var B0=g((Ume,v0)=>{"use strict";var lR=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};v0.exports=lR});var q0=g((vme,x0)=>{"use strict";var Ute=M(),H0=require("moment"),Pte=require("uuid").v4,_R=class{static{a(this,"JobObject")}constructor(){this.id=Pte(),this.type=void 0,this.start_datetime=H0().valueOf(),this.created_datetime=H0().valueOf(),this.end_datetime=void 0,this.status=Ute.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};x0.exports=_R});var dR=g((Hme,Y0)=>{"use strict";var vte=require("uuid").v4,k0=Lr(),V0=Dr(),Bte=Zs(),Hte=ta(),xte=B0(),ot=M(),qte=q0(),Gte=Dd(),ds=$(),Fte=Lc(),Ba=Q(),{promisify:kte}=require("util"),bo=require("moment"),Vte=Mf(),tE=Xg(),G0=Hm(),{deleteTransactionLogsBeforeValidator:$te}=lg(),{handleHDBError:Yte,hdb_errors:Kte}=se(),{HTTP_STATUS_CODES:Wte}=Kte,F0=V0.searchByValue,Qte=V0.searchByHash,zte=k0.insert,Jte=kte(Vte.evaluateSQL),jte=k0.update;Y0.exports={addJob:ere,updateJob:rre,handleGetJob:Xte,handleGetJobsByStartDate:Zte,getJobById:$0};async function Xte(e){try{let t=await $0(e.id);return Ba.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw ds.error("There was an error getting job",t),new Error(r)}}a(Xte,"handleGetJob");async function Zte(e){try{let t=await tre(e);if(ds.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=bo(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=bo(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 ds.error(r),new Error(r)}}a(Zte,"handleGetJobsByStartDate");async function ere(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Ba.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return ds.info(l),t.error=l,t}if(!ot.JOB_TYPE_ENUM[e.operation])return ds.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case ot.OPERATIONS_ENUM.CSV_FILE_LOAD:s=tE.fileObject(e);break;case ot.OPERATIONS_ENUM.CSV_URL_LOAD:s=tE.urlObject(e);break;case ot.OPERATIONS_ENUM.CSV_DATA_LOAD:s=tE.dataObject(e);break;case ot.OPERATIONS_ENUM.IMPORT_FROM_S3:s=tE.s3FileObject(e);break;case ot.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case ot.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=G0(e,"date");break;case ot.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=G0(e,"timestamp");break;case ot.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=$te(e);break;default:break}if(s)throw Yte(s,s.message,Wte.BAD_REQUEST,void 0,void 0,!0);let n=new qte;n.type=e.operation===ot.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?ot.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new Bte(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await F0(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return ds.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=vte();try{o=await F0(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return ds.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return ds.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new Fte(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await zte(u)}catch(l){return ds.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,ds.trace(l)}return t}a(ere,"addJob");async function tre(e){let t=bo(e.from_date,bo.ISO_8601),r=bo(e.to_date,bo.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new xte(s,e.hdb_user);try{return await Jte(n)}catch(i){throw ds.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(tre,"getJobsInDateRange");async function $0(e){if(Ba.isEmptyOrZeroLength(e))return Ba.errorizeMessage("Invalid job ID specified.");let t=new Hte(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Qte(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return ds.error(s),Ba.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a($0,"getJobById");async function rre(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Ba.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===ot.JOB_STATUS_ENUM.COMPLETE||e.status===ot.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=bo().valueOf());let t=new Gte(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await jte(t),r}a(rre,"updateJob")});var j0=g((qme,J0)=>{"use strict";var K0=Q(),Or=M(),sre=require("moment"),rE=cR(),sE=$(),W0=dR(),Q0=Uf(),z0=ri(),nre=Ke(),ire=yf(),fR=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function ore(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(K0.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(K0.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Or.JOB_TYPE_ENUM.csv_file_load:await Hn(e,rE.csvFileLoad);break;case Or.JOB_TYPE_ENUM.csv_url_load:await Hn(e,rE.csvURLLoad);break;case Or.JOB_TYPE_ENUM.csv_data_load:await Hn(e,rE.csvDataLoad);break;case Or.JOB_TYPE_ENUM.import_from_s3:await Hn(e,rE.importFromS3);break;case Or.JOB_TYPE_ENUM.empty_trash:break;case Or.JOB_TYPE_ENUM.export_local:await Hn(e,Q0.export_local);break;case Or.JOB_TYPE_ENUM.export_to_s3:await Hn(e,Q0.export_to_s3);break;case Or.JOB_TYPE_ENUM.delete_files_before:case Or.JOB_TYPE_ENUM.delete_records_before:await Hn(e,z0.deleteFilesBefore);break;case Or.JOB_TYPE_ENUM.delete_audit_logs_before:await Hn(e,z0.deleteAuditLogsBefore);break;case Or.JOB_TYPE_ENUM.delete_transaction_logs_before:await Hn(e,ire.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(ore,"parseMessage");async function Hn(e,t){try{e.job.status=Or.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=sre().valueOf(),await W0.updateJob(e.job),await are(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):sE.error(`There was an error running ${t.name} job with id ${e.job.id}`),sE.error(s),e.job.message=s,e.job.status=Or.JOB_STATUS_ENUM.ERROR;try{await W0.updateJob(e.job)}catch(n){throw sE.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Hn,"runJob");async function are(e){sE.trace("launching job thread:",e),nre.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Or.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(are,"launchJobThread");J0.exports={parseMessage:ore,RunnerMessage:fR}});var Z0=g((Fme,X0)=>{"use strict";var ER=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};X0.exports=ER});var mB=g((Vme,gR)=>{"use strict";var cE=Dr(),pR=Mf(),nE=cR(),xn=fu(),iE=Zn(),ol=ri(),cre=MS(),il=ss(),oE=FS(),Yt=ug(),aE=$(),ure=$S(),lre=Vd(),eB=AT(),_re=Yd(),dre=bT(),fre=NT(),Ere=IT(),hre=DT(),hR=UT(),tB=Uf(),mre=Df(),SR=dR(),q=M(),{hdb_errors:cl,handleHDBError:al}=se(),{HTTP_STATUS_CODES:rB}=cl,mR=xT(),sB=_f(),dB=require("util"),Ha=Lr(),pre=gn(),Sre=Ea(),nB=j0(),iB=Tu(),oB=(hf(),ne(Gu)),aB=Pr(),cB=yf(),uB=gf(),{setServerUtilities:Tre}=(eE(),ne(uR)),{CONTEXT:gre}=(Os(),ne(Lp)),{_assignPackageExport:Rre}=require("../index"),{transformReq:Are}=Q(),{server:Ore}=(nr(),ne(Pi)),Xt=aE.loggerWithTag("operation"),bre=Zg(),lB=cE.searchByHash,Nre=cE.searchByValue,yre=dB.promisify(cE.search),wre=dB.promisify(pR.evaluateSQL),Ire={[q.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[q.OPERATIONS_ENUM.CREATE_TABLE]:!0,[q.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[q.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[q.OPERATIONS_ENUM.DROP_TABLE]:!0,[q.OPERATIONS_ENUM.DROP_SCHEMA]:!0},Y=Z0();async function fB(e,t){try{if(e.body.operation!=="read_log"&&(aE.log_level===q.LOG_LEVELS.INFO||aE.log_level===q.LOG_LEVELS.DEBUG||aE.log_level===q.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;Xt.info(o)}}catch(s){Xt.error(s)}let r=await bre.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Ire[e.body.operation]&&pre.setSchemaDataToGlobal(s=>{s&&Xt.error(s)}),r}a(fB,"processLocalTransaction");var _B=Dre();gR.exports={chooseOperation:EB,getOperationFunction:hB,operation:TR,processLocalTransaction:fB};Tre(gR.exports);Ore.operation=TR;function EB(e){let t;try{t=hB(e)}catch(n){throw Xt.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=pR.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=pR.checkASTPermissions(e,i);if(o)throw Xt.error(`${rB.FORBIDDEN} from operation ${e.operation}`),Xt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),al(new Error,o,cl.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==q.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==q.OPERATIONS_ENUM.LOGIN&&e.operation!==q.OPERATIONS_ENUM.LOGOUT){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=mre.verifyPerms(i,n);if(o)throw Xt.error(`${rB.FORBIDDEN} from operation ${e.operation}`),Xt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),al(new Error,o,cl.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw al(n,"There was an error when trying to choose an operation path")}return r}a(EB,"chooseOperation");function hB(e){if(Xt.trace(`getOperationFunction with operation: ${e.operation}`),_B.has(e.operation))return _B.get(e.operation);throw al(new Error,cl.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),cl.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(hB,"getOperationFunction");Rre("operation",TR);function TR(e,t){e.hdb_user=this[gre]?.user,e.bypass_auth=!t;let r=EB(e);return fB({body:e},r)}a(TR,"operation");async function Cre(e){Xt.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[q.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case q.OPERATIONS_ENUM.INSERT:o=await Ha.insert(i);break;case q.OPERATIONS_ENUM.UPDATE:o=await Ha.update(i);break;case q.OPERATIONS_ENUM.UPSERT:o=await Ha.upsert(i);break;case q.OPERATIONS_ENUM.DELETE:o=await ol.deleteRecord(i);break;default:Xt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Xt.info("Invalid operation in transaction"),Xt.error(o)}}a(Cre,"catchup");async function ln(e){Are(e);let t,r;try{r=await SR.addJob(e),t=r.createdJob,Xt.info("addJob result",r);let s=new nB.RunnerMessage(t,e);return await nB.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw Xt.error(n),al(s,n)}}a(ln,"executeJob");function Dre(){let e=new Map;return e.set(q.OPERATIONS_ENUM.INSERT,new Y(Ha.insert)),e.set(q.OPERATIONS_ENUM.UPDATE,new Y(Ha.update)),e.set(q.OPERATIONS_ENUM.UPSERT,new Y(Ha.upsert)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new Y(cE.searchByConditions)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_HASH,new Y(lB)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_ID,new Y(lB)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_VALUE,new Y(Nre)),e.set(q.OPERATIONS_ENUM.SEARCH,new Y(yre)),e.set(q.OPERATIONS_ENUM.SQL,new Y(wre)),e.set(q.OPERATIONS_ENUM.CSV_DATA_LOAD,new Y(ln,nE.csvDataLoad)),e.set(q.OPERATIONS_ENUM.CSV_FILE_LOAD,new Y(ln,nE.csvFileLoad)),e.set(q.OPERATIONS_ENUM.CSV_URL_LOAD,new Y(ln,nE.csvURLLoad)),e.set(q.OPERATIONS_ENUM.IMPORT_FROM_S3,new Y(ln,nE.importFromS3)),e.set(q.OPERATIONS_ENUM.CREATE_SCHEMA,new Y(xn.createSchema)),e.set(q.OPERATIONS_ENUM.CREATE_DATABASE,new Y(xn.createSchema)),e.set(q.OPERATIONS_ENUM.CREATE_TABLE,new Y(xn.createTable)),e.set(q.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new Y(xn.createAttribute)),e.set(q.OPERATIONS_ENUM.DROP_SCHEMA,new Y(xn.dropSchema)),e.set(q.OPERATIONS_ENUM.DROP_DATABASE,new Y(xn.dropSchema)),e.set(q.OPERATIONS_ENUM.DROP_TABLE,new Y(xn.dropTable)),e.set(q.OPERATIONS_ENUM.DROP_ATTRIBUTE,new Y(xn.dropAttribute)),e.set(q.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new Y(iE.describeSchema)),e.set(q.OPERATIONS_ENUM.DESCRIBE_DATABASE,new Y(iE.describeSchema)),e.set(q.OPERATIONS_ENUM.DESCRIBE_TABLE,new Y(iE.describeTable)),e.set(q.OPERATIONS_ENUM.DESCRIBE_ALL,new Y(iE.describeAll)),e.set(q.OPERATIONS_ENUM.DELETE,new Y(ol.deleteRecord)),e.set(q.OPERATIONS_ENUM.ADD_USER,new Y(il.addUser)),e.set(q.OPERATIONS_ENUM.ALTER_USER,new Y(il.alterUser)),e.set(q.OPERATIONS_ENUM.DROP_USER,new Y(il.dropUser)),e.set(q.OPERATIONS_ENUM.LIST_USERS,new Y(il.listUsersExternal)),e.set(q.OPERATIONS_ENUM.LIST_ROLES,new Y(oE.listRoles)),e.set(q.OPERATIONS_ENUM.ADD_ROLE,new Y(oE.addRole)),e.set(q.OPERATIONS_ENUM.ALTER_ROLE,new Y(oE.alterRole)),e.set(q.OPERATIONS_ENUM.DROP_ROLE,new Y(oE.dropRole)),e.set(q.OPERATIONS_ENUM.USER_INFO,new Y(il.userInfo)),e.set(q.OPERATIONS_ENUM.READ_LOG,new Y(ure)),e.set(q.OPERATIONS_ENUM.ADD_NODE,new Y(lre)),e.set(q.OPERATIONS_ENUM.UPDATE_NODE,new Y(eB)),e.set(q.OPERATIONS_ENUM.SET_NODE_REPLICATION,new Y(eB)),e.set(q.OPERATIONS_ENUM.REMOVE_NODE,new Y(_re)),e.set(q.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new Y(dre)),e.set(q.OPERATIONS_ENUM.PURGE_STREAM,new Y(fre)),e.set(q.OPERATIONS_ENUM.SET_CONFIGURATION,new Y(aB.setConfiguration)),e.set(q.OPERATIONS_ENUM.CLUSTER_STATUS,new Y(Ere.clusterStatus)),e.set(q.OPERATIONS_ENUM.CLUSTER_NETWORK,new Y(hre)),e.set(q.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new Y(hR.setRoutes)),e.set(q.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new Y(hR.getRoutes)),e.set(q.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new Y(hR.deleteRoutes)),e.set(q.OPERATIONS_ENUM.EXPORT_TO_S3,new Y(ln,tB.export_to_s3)),e.set(q.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new Y(ln,ol.deleteFilesBefore)),e.set(q.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new Y(ln,ol.deleteFilesBefore)),e.set(q.OPERATIONS_ENUM.EXPORT_LOCAL,new Y(ln,tB.export_local)),e.set(q.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new Y(SR.handleGetJobsByStartDate)),e.set(q.OPERATIONS_ENUM.GET_JOB,new Y(SR.handleGetJob)),e.set(q.OPERATIONS_ENUM.GET_FINGERPRINT,new Y(mR.getFingerprint)),e.set(q.OPERATIONS_ENUM.SET_LICENSE,new Y(mR.setLicense)),e.set(q.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new Y(mR.getRegistrationInfo)),e.set(q.OPERATIONS_ENUM.RESTART,new Y(sB.restart)),e.set(q.OPERATIONS_ENUM.RESTART_SERVICE,new Y(sB.restartService)),e.set(q.OPERATIONS_ENUM.CATCHUP,new Y(Cre)),e.set(q.OPERATIONS_ENUM.SYSTEM_INFORMATION,new Y(Sre.systemInformation)),e.set(q.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new Y(ln,ol.deleteAuditLogsBefore)),e.set(q.OPERATIONS_ENUM.READ_AUDIT_LOG,new Y(cre)),e.set(q.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new Y(iB.createTokens)),e.set(q.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new Y(iB.refreshOperationToken)),e.set(q.OPERATIONS_ENUM.LOGIN,new Y(oB.login)),e.set(q.OPERATIONS_ENUM.LOGOUT,new Y(oB.logout)),e.set(q.OPERATIONS_ENUM.GET_CONFIGURATION,new Y(aB.getConfiguration)),e.set(q.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new Y(Yt.customFunctionsStatus)),e.set(q.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new Y(Yt.getCustomFunctions)),e.set(q.OPERATIONS_ENUM.GET_COMPONENT_FILE,new Y(Yt.getComponentFile)),e.set(q.OPERATIONS_ENUM.GET_COMPONENTS,new Y(Yt.getComponents)),e.set(q.OPERATIONS_ENUM.SET_COMPONENT_FILE,new Y(Yt.setComponentFile)),e.set(q.OPERATIONS_ENUM.DROP_COMPONENT,new Y(Yt.dropComponent)),e.set(q.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new Y(Yt.getCustomFunction)),e.set(q.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new Y(Yt.setCustomFunction)),e.set(q.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new Y(Yt.dropCustomFunction)),e.set(q.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new Y(Yt.addComponent)),e.set(q.OPERATIONS_ENUM.ADD_COMPONENT,new Y(Yt.addComponent)),e.set(q.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new Y(Yt.dropCustomFunctionProject)),e.set(q.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Y(Yt.packageComponent)),e.set(q.OPERATIONS_ENUM.PACKAGE_COMPONENT,new Y(Yt.packageComponent)),e.set(q.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Y(Yt.deployComponent)),e.set(q.OPERATIONS_ENUM.DEPLOY_COMPONENT,new Y(Yt.deployComponent)),e.set(q.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new Y(cB.readTransactionLog)),e.set(q.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new Y(ln,cB.deleteTransactionLogsBefore)),e.set(q.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new Y(uB.installModules)),e.set(q.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new Y(uB.auditModules)),e.set(q.OPERATIONS_ENUM.GET_BACKUP,new Y(xn.getBackup)),e}a(Dre,"initializeOperationFunctionMap")});var lE=g((Yme,TB)=>{"use strict";var RR=M(),Lre=Q(),ul=$(),{handleHDBError:AR,hdb_errors:uE}=se(),{isMainThread:Mre}=require("worker_threads"),{Readable:Ure}=require("stream"),pB=require("os"),Pre=require("util"),vre=eT(),Bre=Pre.promisify(vre.authorize),SB=mB(),{createGzip:Hre,constants:xre}=require("zlib");function qre(e){let t=`Found an uncaught exception with message: ${e.message}. ${pB.EOL}Stack: ${e.stack} ${pB.EOL}Terminating ${Mre?"HDB":"thread"}.`;console.error(t),ul.fatal(t),process.exit(1)}a(qre,"handleServerUncaughtException");function Gre(e,t,r){if(ul[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let s=e.statusCode?e.statusCode:uE.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(Gre,"serverErrorHandler");function Fre(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=AR(new Error,"Invalid JSON.",uE.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(Lre.isEmpty(e.body.operation)){let s=AR(new Error,"Request body must include an 'operation' property.",uE.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(Fre,"reqBodyValidationHandler");function kre(e,t,r){let s;e.body.operation!==RR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==RR.OPERATIONS_ENUM.LOGIN&&e.body.operation!==RR.OPERATIONS_ENUM.LOGOUT?Bre(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{ul.warn(n),ul.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(AR(n,i,uE.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(kre,"authHandler");async function Vre(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=SB.chooseOperation(e.body);let n=await SB.processLocalTransaction(e,s);if(n instanceof Ure&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(Hre({level:xre.Z_BEST_SPEED})))}return n}catch(n){throw ul.error(n),n}}a(Vre,"handlePostRequest");TB.exports={authHandler:kre,handlePostRequest:Vre,handleServerUncaughtException:qre,serverErrorHandler:Gre,reqBodyValidationHandler:Fre}});var OB=g((Wme,AB)=>{"use strict";var $re=require("fastify-plugin"),{handlePostRequest:gB,authHandler:Yre,reqBodyValidationHandler:Kre}=lE();async function Wre(e){e.decorate("hdbCore",{preValidation:[Kre,Yre],request:t=>RB(gB(t,response)),requestWithoutAuthentication:(t,r)=>RB(gB(t,r,!0))})}a(Wre,"hdbCore");async function RB(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(RB,"convertAsyncIterators");AB.exports=$re(Wre)});var yB=g((Jme,NB)=>{"use strict";var zme=require("fs"),OR=ee();OR.initSync();var{CONFIG_PARAMS:bB}=M(),Qre=1024*1024*1024;function zre(e){let t=OR.get(bB.HTTP_TIMEOUT),r=OR.get(bB.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Qre,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(zre,"getServerOptions");NB.exports=zre});var CB=g((Xme,IB)=>{"use strict";var bR=ee();bR.initSync();var{CONFIG_PARAMS:wB}=M();function Jre(){let e=bR.get(wB.HTTP_CORSACCESSLIST),t=bR.get(wB.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=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(Jre,"getCORSOptions");IB.exports=Jre});var MB=g((epe,LB)=>{"use strict";var DB=ee();DB.initSync();var jre=M();function Xre(){return DB.get(jre.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Xre,"getHeaderTimeoutConfig");LB.exports=Xre});var yR={};Ye(yR,{customFunctionsServer:()=>tse,ready:()=>WB,start:()=>ese});function ese(e){let t=e.securePort>0;return{async handleFile(r,s,n,i){qn||(qn=KB(t),tt.http((await qn).server));let o=await qn,c=(0,NR.dirname)(n),u=(0,NR.dirname)(s);if(u.startsWith("/")&&(u=u.slice(1)),!UB.has(c)){UB.add(c);try{o.register(sse(c,u))}catch(_){if(_.message==="Root plugin has already booted")Ve.warn(`Could not load root fastify route for ${n}, this may require a restart to install properly`);else throw _}}},ready:WB}}async function tse(){try{Ve.info("In Custom Functions Fastify server"+process.cwd()),Ve.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ve.debug(`Custom Functions server process ${process.pid} starting up.`),await rse();let e=qB.get(GB.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=qn=await KB(e)}catch(r){throw Ve.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ve.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ve.error(`Custom Functions ${process.pid} Error: ${e}`),Ve.error(e),process.exit(1)}}async function rse(){try{Ve.info("Custom Functions starting configuration."),await FB.setUsersToGlobal(),Ve.info("Custom Functions completed configuration.")}catch(e){Ve.error(e)}}function sse(e,t){return async function(r){try{Ve.info("Custom Functions starting buildRoutes"),Ve.trace("Loading fastify routes folder "+e),(0,PB.existsSync)(e)&&r.register(xB.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:Ve.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?Ve.error(n.message):n&&Ve.error(n),o()})}catch(s){Ve.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function KB(e){Ve.info("Custom Functions starting buildServer.");let t=(0,kB.default)(e),r=(0,vB.default)(t);r.server.headersTimeout=(0,$B.default)(),r.setErrorHandler(YB.serverErrorHandler);let s=(0,VB.default)();return s&&r.register(BB.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(HB.default),await r.register(Zre),await r.after(),Ug(r),Ve.info("Custom Functions completed buildServer."),r}function WB(){if(qn)return qn.then?qn.then(e=>e.ready()):qn.ready()}var NR,PB,vB,BB,HB,xB,qB,GB,Ve,Zre,FB,kB,VB,$B,YB,qn,UB,QB=Re(()=>{NR=require("path"),PB=require("fs"),vB=x(require("fastify")),BB=x(require("@fastify/cors")),HB=x(Kg()),xB=x(require("@fastify/autoload")),qB=x(ee()),GB=x(M()),Ve=x($()),Zre=x(OB()),FB=x(ss()),kB=x(yB()),VB=x(CB()),$B=x(MB()),YB=x(lE());Aa();nr();UB=new Set;a(ese,"start");a(tse,"customFunctionsServer");a(rse,"setUp");a(sse,"buildRouteFolder");a(KB,"buildServer");a(WB,"ready")});var wR={};Ye(wR,{start:()=>nse});function nse(e){return{handleDirectory(t,r){if(t==="/"){let s=(0,ZB.default)(r,e);return e.server.http(async(n,i)=>{if(!n.isWebSocket)return new Promise(o=>s(n._nodeRequest,n._nodeResponse,()=>{o(i(n))}))}),!0}},handleFile(t,r,s){JB||(JB=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=zB.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,jB.default)(n,(0,XB.realpathSync)(o))}}return i(n)},{runFirst:!0})),zB.set(r,s)}}}var jB,XB,ZB,zB,JB,eH=Re(()=>{jB=x(require("send")),XB=require("fs"),ZB=x(require("serve-static")),zB=new Map;a(nse,"start")});function ase(e,t=1,r){if(IR++,(0,No.startWorker)("server/threads/threadServer.js",{name:fE.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===fE.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});ose.push(n),await n,xa.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=dE.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=xa.indexOf(s);o>-1&&xa.splice(o,1)}if(a(i,"removeWorker"),qa){let o=qa;qa=[];for(let c of o)nH[c.localPort](null,c)}}}),r){let s=setInterval(()=>{CR?CR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,No.shutdownWorkers)(),IR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function iH(e=0,t){if(typeof e=="string")try{(0,EE.existsSync)(e)&&(0,EE.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=cse:r=use(t):r=LR;let s=(0,Ga.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=nH[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),CR=!0,r(o,(c,u)=>{if(!c){if(tH){let l=o._socket||new Ga.Socket({handle:o,writable:!0,readable:!0});tH.deliverSocket(l,e,u),l.resume()}else IR>0?(qa.length===0&&setTimeout(()=>{qa.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,qa.push(o)):(console.log("start up a dynamic thread to handle request"),ase(0));qr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new Ga.Socket({handle:o,writable:!0,readable:!0});fse(l,c,e)}qr(!0,"socket-routed")})};let n=eu();DR.info(`HarperDB ${n.version} Server running on port ${e}`)}return s.on("error",n=>{console.error("Error in socket server",n)}),process.env._UNREF_SERVER&&s.unref(),s}function LR(e,t){let r,s=0;for(let n of xa){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=_E)return _E=i,t(r);s=i}_E=0,t(r)}function cse(e,t){let r={};e.getpeername(r);let s=r.address,n=Fa.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);LR(e,o=>{Fa.set(s,{worker:o,lastUsed:i}),t(o)})}function use(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new Ga.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=Fa.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);LR(s,d=>{Fa.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function _se(){_E=0;for(let e of xa)e.expectedIdle=e.recentELU.idle+lse,e.requests=1;xa.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function fse(e,t,r){let s=dse++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),dE.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),dE.delete(s)),n.event=="destroy"&&(e.destroy(),dE.delete(s))})}var No,Ga,fE,DR,EE,sH,ise,xa,qa,nH,tH,IR,ose,CR,_E,rH,Fa,lse,dE,dse,oH=Re(()=>{No=x(Ke()),Ga=require("net"),fE=x(M()),DR=x($()),EE=require("fs");Nn();sH=require("worker_threads"),ise=x(Qi()),xa=[],qa=[],nH=[],IR=0,ose=[];sH.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(ase,"startHTTPWorker");a(iH,"startSocketServer");_E=0;a(LR,"findMostIdleWorker");rH=36e5,Fa=new Map;a(cse,"findByRemoteAddressAffinity");a(use,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Fa)r.lastUsed+rH<e&&Fa.delete(t)},rH).unref();lse=1e3;a(_se,"updateWorkerIdleness");(0,No.setMonitorListener)(_se);dE=new Map,dse=1;a(fse,"proxySocket")});var vR={};Ye(vR,{Request:()=>MR,createReuseportFd:()=>hE});var aH,MR,UR,PR,hE,mE=Re(()=>{aH=require("os"),MR=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let s=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=s,this.headers=new PR(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 UR(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},UR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},PR=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,s]of this)t(s,r,this)}};(0,aH.platform)()!="win32"&&(hE=require("node-unix-socket").createReuseportFd)});var _H=g((hpe,lH)=>{"use strict";var Ese=require("cluster"),yo=ee();yo.initSync();var uH=M(),lpe=require("util"),Gn=$(),_pe=require("fs"),hse=require("fastify"),dpe=eu(),mse=require("@fastify/cors"),pse=require("@fastify/compress"),Sse=require("@fastify/static"),Tse=Kg(),gse=require("path"),{PACKAGE_ROOT:Rse}=M(),Ase=gn(),Ose=Q(),bse=ss(),Nse=Qi(),{server:yse}=(nr(),ne(Pi)),{node_request_key:fpe}=(mE(),ne(vR)),{authHandler:wse,handlePostRequest:Ise,serverErrorHandler:Cse,reqBodyValidationHandler:Dse}=lE(),Epe=require("net"),{registerContentHandlers:Lse}=(Aa(),ne(Wv)),Mse=6e4,Use=1024*1024*1024,Pse="TRUE",{CONFIG_PARAMS:ll}=uH,ka;lH.exports={hdbServer:cH,start:cH};async function cH(e){try{Gn.info("In Fastify server"+process.cwd()),Gn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Gn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Ese.isMaster,await vse();let t=e.securePort>0;ka=Bse(t),await ka.ready(),e||(e={}),e.isOperationsServer=!0;try{yse.http(ka.server,e),ka.server.closeIdleConnections||await ka.listen({port:0,host:"::"})}catch(r){throw ka.close(),Gn.error(r),Gn.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Gn.fatal(t),process.exit(1)}}a(cH,"operationsServer");async function vse(){Gn.trace("Configuring HarperDB process."),Ase.setSchemaDataToGlobal(),await bse.setUsersToGlobal(),await Nse.getLicense()}a(vse,"setUp");function Bse(e){Gn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Hse(e),r=hse(t);r.server.headersTimeout=qse(),r.setErrorHandler(Cse);let s=xse();s&&r.register(mse,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Tse),r.register(pse),r.register(Sse,{root:gse.join(Rse,"studio/build-local")}),Lse(r);let n=yo.get(uH.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Ose.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Dse,wse],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Ise(i,o)}),r.get("/health",()=>"HarperDB is running."),Gn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Bse,"buildServer");function Hse(e){let t=yo.get(ll.OPERATIONSAPI_NETWORK_TIMEOUT),r=yo.get(ll.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Use,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Hse,"getServerOptions");function xse(){let e=yo.get(ll.OPERATIONSAPI_NETWORK_CORS),t=yo.get(ll.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Pse)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(xse,"getCORSOpts");function qse(){return yo.get(ll.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Mse}a(qse,"getHeaderTimeoutConfig")});var FR={};Ye(FR,{disableNATS:()=>Fse,publishToStream:()=>TE,setNATSReplicator:()=>BR,setPublishToStream:()=>kse,setSubscription:()=>GR,start:()=>Gse});function Gse(){_l.default.get(dl.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&$se()}function Fse(e=!0){mH=e}function kse(e,t){TE=e,GR=t}function $se(){if(mH||process.env._DISABLE_NATS)return;let e=Ls(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];BR(n,r,i)}}kR((r,s)=>{BR(r.tableName,r.databaseName,r),s&&SH(r)}),!dH&&(dH=!0)}function BR(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(n=>n?.isNATSReplicator))return;r.sourcedFrom(class extends qt{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Me],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Me]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Me],record:i})}patch(i){return s(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Me],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Me]})}static defineSchema(i){SH(i)}static subscribe(){let i=new As;return GR(t,e,i),i}static subscribeOnThisThread(i){return i<(_l.default.get(dl.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Vse)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new pE(n.transaction,n);let o=n.transaction;for(;o.next;)o=o.next;o.next=n.transaction.nats,i.user=n.user,i.context=n}else i=pH;return i}a(s,"getNATSTransaction")}function SH(e){let t=_l.default.get(dl.default.CONFIG_PARAMS.CLUSTERING_NODENAME);TE(`${xR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,qR.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 fH,xR,qR,EH,hH,_l,dl,SE,mH,TE,GR,Vse,pH,dH,pE,HR,TH=Re(()=>{Ae();Os();fH=x(st()),xR=x(Fe()),qR=x(Tn());mc();EH=x(gS()),hH=x(wr()),_l=x(ee()),dl=x(M()),SE=x($());a(Gse,"start");a(Fse,"disableNATS");TE=fH.publishToStream,GR=EH.setSubscription;a(kse,"setPublishToStream");Vse=2;a($se,"assignReplicationSource");a(BR,"setNATSReplicator");a(SH,"publishSchema");pE=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 s=this.writes_by_db.get(t);s||this.writes_by_db.set(t,s=[]),s.push(r)}commit({timestamp:t}){let r=_l.default.get(dl.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,f=l.operation=="put"?"upsert":l.operation;u||(SE.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&s.push(TE(`${xR.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,qR.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw SE.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},HR=class extends pE{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,hH.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};pH=new HR});var PH=g(wo=>{"use strict";var{isMainThread:NH,parentPort:El,threadId:gE}=require("worker_threads"),{Socket:Yse,createServer:Kse}=require("net"),{createServer:Wse,IncomingMessage:Qse}=require("http"),{createServer:zse}=require("https"),{readFileSync:Va,unlinkSync:gH,existsSync:Jse}=require("fs"),Zt=$(),De=ee(),Tt=M(),{server:bE}=(nr(),ne(Pi)),{WebSocketServer:jse}=require("ws"),{createServer:Xse}=require("tls"),{getTicketKeys:Zse,restartNumber:ene,getWorkerIndex:AE}=Ke(),{Headers:yH,appendHeader:tne}=(qu(),ne(pP)),{recordAction:fl,recordActionBinary:rne}=(Nn(),ne(iu)),{Request:wH,createReuseportFd:RH}=(mE(),ne(vR)),{checkMemoryLimit:sne}=Qi(),IH=require("tls"),AH=IH.createSecureContext;IH.createSecureContext=function(e){if(!e.cert||!e.key)return AH(e);let t={...e};delete t.key,delete t.cert;let r=AH(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var CH=De.get(Tt.CONFIG_PARAMS.THREADS_DEBUG);if(CH){let e;if(NH)e=De.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Zt.info("Could not close debugger",t)}});else{let t=De.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&AE()>=0&&(e=t+AE())}if(e){let t=De.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=De.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(s){Zt.trace(`Could not start debugging on port ${e}, you may already be debugging:`,s.message)}}}else if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){ene<=1&&Zt.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:Ape,CONFIG_PARAMS:nne}=Tt;De.initSync();var ine=De.get(nne.HTTP_SESSIONAFFINITY),_n={};wo.registerServer=WR;wo.httpServer=QR;wo.deliverSocket=KR;wo.startServers=DH;wo.when_components_loaded=null;bE.http=QR;bE.request=une;bE.socket=lne;bE.ws=_ne;var VR={},RE={},one,yi={},OE={},ane=[],$R=[];function DH(){return wo.when_components_loaded=zR().loadRootComponents(!0).then(()=>{El?.on("message",t=>{let{port:r,fd:s,data:n}=t;if(s)KR(s,r,n);else if(t.requestId)cne(t);else if(t.type===Tt.ITC_EVENT_TYPES.SHUTDOWN){Zt.trace("received shutdown request",gE);for(let i in _n){let o=_n[i],c;if(o.closeIdleConnections){let _=Object.getOwnPropertySymbols(o).find(f=>f.description.includes("connections")),l=0,d=setInterval(()=>{l++;let f=l>=100,E=o[_][f?"all":"idle"]();if(E.length===0){f&&clearInterval(d);return}l===1?Zt.info(`Closing ${E.length} idle connections`):f&&Zt.warn(`Forcefully closing ${E.length} active connections`);for(let h=0,p=E.length;h<p;h++){let S=E[h].socket;S._httpMessage&&!S._httpMessage.finished&&!f||(f?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
26
+ `},compressible:!1,q:.8});Bt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});Wv={type:"application/json",serializeStream:Tc,serialize:Zu,deserialize:Iee,q:.8};Bt.set("*/*",Wv);Bt.set("",Wv);a(Iee,"tryJSONParse");a(Ug,"registerContentHandlers");Cee=require("fastify-plugin"),Dee=Cee(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=vf(s.raw);n.type(c),n.serializer(function(u){return(o.serializeStream||o.serialize)(u,{headers:{set:(_,l)=>{n.header(_,l)}}})})}),r()},{name:"content-type-negotiation"});a(vf,"findBestSerializer");kv=Cg.default.get(Dg.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Bf,"serialize");a(Ri,"serializeMessage");a(Lee,"streamToBuffer");a(Ro,"getDeserializer");a(Vv,"deserializerUnknownType");a(Mee,"transformIterable")});function Bg(e,t,r,s,n,i,o,c){let u=e[0];if(t==="or"){let d=_(u);for(let E=1;E<e.length;E++){let h=e[E],p=_(h);d=d.concat(p)}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=_(u),f=l(e.slice(1),!0,u.estimated_count);return f.length>0?o(d,f):d}function _(d){return d.conditions?Bg(d.conditions,d.operator,r,s,n,i,o,c):Ma(d,s,d.descending||n.reverse===!0,r,n.allowFullScan,c)}a(_,"executeCondition");function l(d,f,E){return d.map((h,p)=>{if(h.conditions){let b=h.operator==="or",R=l(h.conditions,!b,E);return b?(L,H)=>R.some(P=>P(L,H)):(L,H)=>R.every(P=>P(L,H))}let S=(h.attribute||h[0])===r.primaryKey,T=xg(h,r,i,c,S,E);return f&&p<d.length-1&&E&&(E=Fee(r.primaryStore,h.estimated_count,E)),T}).filter(Boolean)}a(l,"mapConditionsToFilters")}function Ma(e,t,r,s,n,i){let o=e[0]??e.attribute,c=e[1]??e.value,u=e.comparator;if(Array.isArray(o)){let b=o[0],R=Bn(s.attributes,b);if(R.relationship){if(o.length<2)throw new $r.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let L=R.definition?.tableClass||R.elements?.definition?.tableClass,H=new Map,P=Ma({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,L,n,H);if(R.relationship.to){i[o[0]]=H;let k=!!Bn(L.attributes,R.relationship.to)?.elements;P=Hee(P,R,L.primaryStore,k,H)}if(R.relationship.from){let k=a(B=>Ma({attribute:R.relationship.from,value:B},t,r,s,n,H),"searchEntry");R.elements?(i[o[0]]=H,P=xee(P,R,L.primaryStore,H,k)):P=P.flatMap(k)}return P}else if(o.length===1)o=o[0];else throw new $r.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,f;c instanceof Date&&(c=c.getTime());let E;switch(Hg[u]||u){case"lt":_=!0,l=c;break;case"le":_=!0,l=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,l=c.slice(0),l[l.length-1]=un.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),l=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),l=c[1],l instanceof Date&&(l=l.getTime()),d=!0;break;case"equals":case void 0:_=c,l=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 $r.ClientError(`Unknown query comparator "${u}"`)}if(r){let b=_;_=l,l=b,b=!f,f=!d,d=b}let h=o===s.primaryKey||o==null,p=h?s.primaryStore:s.indices[o],S;if(!p||p.isIndexing||E||c===null&&!p.indexNulls){if(n===!1&&!p)throw new $r.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(n===!1&&E)throw new $r.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(p?.isIndexing)throw new $r.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!p.indexNulls)throw new $r.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=xg(e),!S)throw new $r.ClientError(`Unknown search operator ${e.comparator}`)}let T={start:_,end:l,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let b=p.getRange(T).map(S?function({key:R,value:L}){return this.isSync?L&&S(L)?R:bi.SKIP:new Promise((H,P)=>setImmediate(()=>{try{H(L&&S(L)?R:bi.SKIP)}catch(k){P(k)}}))}:R=>R.value==null?bi.SKIP:R);return b.hasEntries=!0,b}else return p?p.getRange(T).map(S?function({key:b,value:R}){return this.isSync?S({[o]:b})?R:bi.SKIP:new Promise((L,H)=>setImmediate(()=>{try{L(S({[o]:b})?R:bi.SKIP)}catch(P){H(P)}}))}:({value:b})=>b):s.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:b,value:R}){return this.isSync?R&&S(R)?b:bi.SKIP:new Promise((L,H)=>setImmediate(()=>{try{L(R&&S(R)?b:bi.SKIP)}catch(P){H(P)}}))})}function Bn(e,t){if(Array.isArray(t))if(t.length>1){let r=Bn(e,t[0]),s=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return s?Bn(s,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function Hee(e,t,r,s,n){return new e.constructor({[Symbol.iterator](){let i;n.hasMappings=!0;let o;return{next(){if(!i){let u=t.relationship.to,_=a((l,d)=>{let f=l;Array.isArray(l)&&(f=Hs(l),o=!0);let E=n.get(f);E?E.push(d):n.set(f,E=[d]),l!==f&&(E.key=l)},"add_entry");for(let l of e){let d=l.value??r.get(l.key??l),f=d?.[u];if(f!=null&&!n.filters?.some(E=>!E(d)))if(s)for(let E=0;E<f.length;E++)_(f[E],l);else _(f,l)}return i=(o?n:n.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 xee(e,t,r,s,n){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let u;if(o)for(;u=o.next(),!u.done;){let _=Hs(u.value);if(!c.has(_))return c.add(_),u}if(!i){let _=new Map;s.fromRecord=l=>l[t.relationship.from]?.filter?.(d=>_.has(Hs(d)));for(let l of e){if(s.filters){let d=r.get(l);if(s.filters.some(f=>!f(d)))continue}_.set(Hs(l),l)}return i=_.values()[Symbol.iterator](),this.next()}do{let _=i.next();return _.done?_:(o=n(_.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function xg(e,t,r,s,n,i){let o=e.comparator,c=e[0]??e.attribute,u=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 l=c[0],d=Bn(t.attributes,l),f=d.definition?.tableClass||d.elements.definition?.tableClass,E=s?.[l],h=xg({attribute:c.length>2?c.slice(1):c[1],value:u,comparator:o},f,r,E?.[l]?.joined,c[1]===f.primaryKey,i);if(!h)return;if(E){E.filters||(E.filters=[]),E.filters.push(h);return}let p=t.propertyResolvers?.[l],S,T=a((b,R)=>{let L,H;if(p){if(p.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let k of h.idFilter.idSet)e={attribute:p.from,value:k};S=_(p.from,h.idFilter,!0,!0)}else S=_(p.from,h.idFilter,!1,!0);let P=S(b);return S.idFilter&&(T.idFilter=S.idFilter),P}H=p(b,r,R),L=H?.value}else L=b[l];return L?Array.isArray(L)?L.some(h):h(L,H):!1},"recordFilter");return T}}switch(u instanceof Date&&(u=u.getTime()),Hg[o]||o){case Pg.SEARCH_TYPES.EQUALS:case void 0:return _(c,l=>l===u,!0);case"contains":return _(c,l=>l?.toString().includes(u));case"ends_with":return _(c,l=>l?.toString().endsWith(u));case"starts_with":return _(c,l=>typeof l=="string"&&l.startsWith(u),!0);case"prefix":return Array.isArray(u)?u[u.length-1]==null&&(u=u.slice(0,-1)):u=[u],_(c,l=>{if(!Array.isArray(l))return!1;for(let d=0,f=u.length;d<f;d++)if(l[d]!==u[d])return!1;return!0},!0);case"between":return u[0]instanceof Date&&(u[0]=u[0].getTime()),u[1]instanceof Date&&(u[1]=u[1].getTime()),_(c,l=>(0,un.compareKeys)(l,u[0])>=0&&(0,un.compareKeys)(l,u[1])<=0,!0);case"gt":return _(c,l=>(0,un.compareKeys)(l,u)>0);case"ge":return _(c,l=>(0,un.compareKeys)(l,u)>=0);case"lt":return _(c,l=>(0,un.compareKeys)(l,u)<0);case"le":return _(c,l=>(0,un.compareKeys)(l,u)<=0);case"ne":return _(c,l=>(0,un.compareKeys)(l,u)!==0);case"sort":return()=>!0;default:throw new $r.ClientError(`Unknown query comparator "${o}"`)}function _(l,d,f,E){let h;f=f&&!n&&t?.indices[l]&&i>3,f&&(e.estimated_count==null&&xf(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(f=!1));let p=0,S=3;function T(b){let R=b[l],L;if(typeof R!="object"||!R||E?L=d(R):Array.isArray(R)?L=R.some(d):R instanceof Date&&(L=d(R.getTime())),f&&(S++,!L&&!T.idFilter&&++p/S*(i-S)>h)){let H=Ma(e,r.transaction.getReadTxn(),!1,t).map(Hs),P=new Set(H);T.idFilter=k=>P.has(Hs(k)),T.idFilter.idSet=P}return L}return a(T,"recordFilter"),n&&(T.idFilter=d),T}a(_,"attributeComparator")}function xf(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let n;if(r.operator==="or"){n=0;for(let i of r.conditions)t(i),n+=i.estimated_count}else{n=1/0;for(let i of r.conditions)t(i),n=isFinite(n)?n*i.estimated_count/vn(e.primaryStore):i.estimated_count}return r.estimated_count=n,r.estimated_count}let s=r.comparator||r.search_type;if(s=Hg[s]||s,s===Pg.SEARCH_TYPES.EQUALS||!s){let n=r[0]??r.attribute;if(n==null||n===e.primaryKey)r.estimated_count=1;else if(Array.isArray(n)&&n.length>1){let i=Bn(e.attributes,n[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=xf(o)({value:r.value,attribute:n.length>2?n.slice(1):n[1],comparator:"equals"}),u=e.indices[i.relationship.from];r.estimated_count=c+(u?c*vn(e.indices[i.relationship.from])/(vn(o.primaryStore)||1):c)}else{let i=e.indices[n];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(s==="contains"||s==="ends_with"||s==="ne"){let n=r[0]??r.attribute,i=e.indices[n];r.value===null&&s==="ne"?r.estimated_count=vn(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else s==="starts_with"||s==="prefix"?r.estimated_count=vee*vn(e.primaryStore)+1:s==="between"?r.estimated_count=Pee*vn(e.primaryStore)+1:s==="sort"?r.estimated_count=vn(e.primaryStore)+1:r.estimated_count=Uee*vn(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function qf(e){if(e)if(Ni=e,Da.lastIndex=0,qee.test(e))try{let t=tl(new La,"");if(Ar!==Ni.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 ${Ar} in '${Ni}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function tl(e,t){let r=Da,s,n,i,o,c,u=decodeURIComponent,_;for(;s=r.exec(Ni);){Ar=r.lastIndex;let[,l,d]=s;if(o){if(l)throw new SyntaxError(`expected operator, but encountered '${l}'`);o=!1,c=!1}else c=!0;let f;switch(d){case"=":if(n){if(l.length<=2)i=l;else throw new SyntaxError(`invalid FIQL operator ${l}`);u=zv}else{if(u=decodeURIComponent,i="equals",!l)throw new SyntaxError("attribute must be specified before equality comparator");n=rl(l)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=Bee[d],u=vg[i]?zv:decodeURIComponent,!l)throw new SyntaxError(`attribute must be specified before comparator ${d}`);n=rl(l);break;case"|":case"&":case"":case void 0:if(n==null){if(n===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:n,value:u(l)};i==="eq"&&Jv(h,l),Hf(e,_),e.conditions.push(h)}d==="&"&&(_="and"),d==="|"&&(_="or"),n=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(rl(l)),n=void 0;break;case"(":Da.lastIndex=Ar;let E=tl(l?[]:new La,")");switch(l){case"":Hf(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=Xv(E);break;default:throw new SyntaxError(`unknown query function call ${l}`)}Ni[Ar]===","?r.lastIndex=++Ar:o=!0,n=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!l)throw new SyntaxError("property sets must have a defined parent property name");Da.lastIndex=Ar,f=tl([],"}"),f.name=l,e.push(f),Ni[Ar]===","?r.lastIndex=++Ar:o=!0;break;case"[":Da.lastIndex=Ar,l?(f=tl(new La,"]"),f.name=l):f=tl(e.conditions?new La:[],"]"),e.conditions?(Hf(e,_),e.conditions.push(f),n=null):e.push(f),Ni[Ar]===","?r.lastIndex=++Ar:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(n){let h={comparator:i||"equals",attribute:n,value:u(l)};i==="eq"&&Jv(h,l),Hf(e,_),e.conditions.push(h)}else if(l)throw new SyntaxError("no attribute or comparison specified")}else(l||e.length>0&&c)&&e.push(rl(l));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=n?Gee:Da,r.lastIndex=Ar),Ar===Ni.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Hf(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 rl(e){return e.indexOf(".")>-1?e.split(".").map(rl):decodeURIComponent(e)}function zv(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 $r.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function Jv(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new $r.ClientError("wildcard can only be used at the end of a string")}function Xv(e){let t=jv(e[0]);return e.length>1&&(t.next=Xv(e.slice(1))),t}function jv(e){if(Array.isArray(e)){let t=jv(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 Hs(e){return Array.isArray(e)?e.join("\0"):e}function vn(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function Fee(e,t,r){return t*r/vn(e)}var $r,Pg,un,bi,Uee,Pee,vee,Bee,vg,Hg,qee,Da,Gee,Ar,Ni,La,Gf=Re(()=>{$r=x(se()),Pg=x(dt()),un=require("ordered-binary"),bi=require("lmdb"),Uee=.3,Pee=.1,vee=.05,Bee={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},vg={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(Bg,"executeConditions");a(Ma,"searchByIndex");a(Bn,"findAttribute");a(Hee,"joinTo");a(xee,"joinFrom");Hg={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(xg,"filterByType");a(xf,"estimateCondition");qee=/[()[\]|!<>.]|(=\w*=)/,Da=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,Gee=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(qf,"parseQuery");a(tl,"parseBlock");a(Hf,"assignOperator");a(rl,"decodeProperty");a(zv,"typedDecoding");a(Jv,"wildcardDecoding");a(Xv,"toSortObject");a(jv,"toSortEntry");La=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let s=this.conditions[r];if(s.attribute===t)return s.value}}};a(Hs,"flattenKey");a(vn,"estimatedEntryCount");a(Fee,"intersectionEstimate")});function s0(e){let t={openapi:kee,info:{title:"HarperDB HTTP REST interface",version:(0,r0.version)()},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,s]of e){if(!s.path)continue;let{path:n}=s,i=n.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:u}=s.Resource;if(c=c??"id",!c)continue;let _={},l=[];if(o)for(let{type:R,name:L,elements:H,relationship:P,definition:k}of o){if(P)R==="array"?_[L]={type:"array",items:{$ref:yi+H.type}}:_[L]={$ref:yi+R};else{let B=k??H?.definition;if(B){if(!t.components.schemas[B.type]){let J={};B.properties.forEach(z=>{J[z.name]=new kg(qg[z.type],z.type)}),t.components.schemas[B.type]=new t0(J)}R==="array"?_[L]={type:"array",items:{$ref:yi+B.type}}:_[L]={$ref:yi+B.type}}else R==="array"?H.type==="Any"||H.type=="ID"?_[L]={type:"array",items:{format:H.type}}:_[L]={type:"array",items:new kg(qg[H.type],H.type)}:R==="Any"||R=="ID"?_[L]={format:R}:_[L]=new kg(qg[R],R)}l.push(new Vg(L,"query",_[L]))}let d=Object.keys(_),f=new Vg(c,"path",{format:"ID"});f.required=!0,f.description="primary key of record";let E=new Vg("property","path",{enum:d});E.required=!0,t.components.schemas[i]=new t0(_);let h=u.post!==Resource.prototype.post||u.update,p=typeof u.put=="function",S=typeof u.get=="function",T=typeof u.delete=="function",b="/"+n+"/";h&&(t.paths[b]={},t.paths[b].post=new Vee(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[b]||(t.paths[b]={}),t.paths[b].get=new Gg(l,r,{200:new Fg({$ref:yi+i})},"search for records by the specified property name and value pairs")),T&&(t.paths[b]||(t.paths[b]={}),t.paths[b].delete=new e0(l,r,"delete all the records that match the provided query",{204:new Zv})),b="/"+n+"/{"+c+"}",S&&(t.paths[b]={},t.paths[b].get=new Gg([f],r,{200:new Fg({$ref:yi+i})},"retrieve a record by its primary key")),p&&(t.paths[b]||(t.paths[b]={}),t.paths[b].put=new $ee([f],r,i,"create or update the record with the URL path that maps to the record's primary key")),T&&(t.paths[b]||(t.paths[b]={}),t.paths[b].delete=new e0([f],r,"delete a record with the given primary key",{204:new Zv})),S&&E.schema.enum.length>0&&(b="/"+n+"/{"+c+"}.{property}",t.paths[b]={},t.paths[b].get=new Gg([f,E],r,{200:new Fg({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function Vee(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:yi+e}}}},this.security=t,this.responses={200:{description:$g,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function Gg(e,t,r,s){this.description=s,this.parameters=e,this.security=t,this.responses=r}function Fg(e){this.description=$g,this.content={"application/json":{schema:e}}}function Zv(){this.description="successfully processed request, no content returned to client"}function $ee(e,t,r,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:yi+r}}}},this.responses={200:{description:$g}}}function e0(e,t,r,s){this.description=r,this.parameters=e,this.security=t,this.responses=s}function t0(e){this.type="object",this.properties=e}function kg(e,t){this.type=e,this.format=t}function Vg(e,t,r){this.name=e,this.in=t,this.schema=r}var r0,kee,qg,yi,$g,n0=Re(()=>{r0=x(Hd()),kee="3.0.3",qg={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},yi="#/components/schemas/",$g="successful operation";a(s0,"generateJsonApi");a(Vee,"Post");a(Gg,"Get");a(Fg,"Response200");a(Zv,"Response204");a($ee,"Put");a(e0,"Delete");a(t0,"ResourceSchema");a(kg,"Type");a(Vg,"Parameter")});var kf={};Ye(kf,{start:()=>Wee});async function Kee(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&qf(e);let n=new gi;try{e.responseHeaders=n;let i=e.url.slice(1),o,c;if(i!==i0){let h=Ff.getMatch(i);if(!h)return t(e);e.handlerPath=h.path,o={url:h.relativeURL,async:!0},c=h.Resource}let u=r["cache-control"];if(u){u=u.toLowerCase();let h=u.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),u.includes("only-if-cached")&&(e.onlyIfCached=!0),u.includes("no-cache")&&(e.noCache=!0),u.includes("no-store")&&(e.noCacheStore=!0),u.includes("stale-if-error")&&(e.staleIfError=!0),u.includes("must-revalidate")&&(e.mustRevalidate=!0)}let _=await je(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=Ro(r["content-type"],!0)(e.body)}catch(h){throw new Ua.ClientError(h,400)}if(e.authorize=!0,i===i0&&s==="GET"){if(e?.user?.role?.permission?.super_user)return s0(Ff);throw new Ua.ServerError("Forbidden",403)}switch(s){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":n.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 Ua.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Ua.ServerError(`Method ${s} is not recognized`,501)}}),l=200,d;if(_==null)l=s==="GET"||s==="HEAD"?404:204,Yg.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){Yee[0]=d;let h=String.fromCharCode(34,(Vt[0]&63)+62,(Vt[0]>>6)+(Vt[1]<<2&63)+62,(Vt[1]>>4)+(Vt[2]<<4&63)+62,(Vt[2]>>2)+62,(Vt[3]&63)+62,(Vt[3]>>6)+(Vt[4]<<2&63)+62,(Vt[4]>>4)+(Vt[5]<<4&63)+62,(Vt[5]>>2)+62,(Vt[6]&63)+62,(Vt[6]>>6)+(Vt[7]<<2&63)+62,34),p=r["if-none-match"];p&&h==p?(_?.onDone&&_.onDone(),l=304,_=void 0):n.setIfNone("ETag",h),Yg.lastModified&&n.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(l=201),e.newLocation&&n.setIfNone("Location",e.newLocation);let f={status:l,headers:n,body:void 0},E=_?.wasLoadedFromSource?.();return E!==void 0&&(f.wasCacheMiss=E,!E&&d&&n.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||d))/1e3))),_!==void 0&&(f.body=Bf(_,e,f),s==="HEAD"&&(f.body=void 0)),f}catch(i){i.statusCode?i.statusCode===500?Ao.warn(i):Ao.info(i):Ao.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),n.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=Bf(i.contentType?i:i.toString(),e,o),o}}function Wee(e){Yg=e,!o0&&(o0=!0,Ff=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Kee(t,r)}),e.server.ws(async(t,r,s)=>{sl++;let n=new As;a0||(a0=!0,nu(l=>{sl>0&&l.push({metric:"ws-connections",connections:sl,byThread:!0})}));let i;t.on("error",l=>{i=!0,Ao.warn(l)});let o;t.on("message",a(function(d){o||(o=Ro(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{sl--,ns(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=Ff.getMatch(u);if(ns(!!_,"connection","ws","connect"),!_)t.send(Ri(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,qr(h=>({count:h.count,total:sl}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await je(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=Ri(E.value,r);t.send(h),qr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var Ao,Ua,Vt,Yee,Yg,i0,o0,Ff,a0,sl,c0=Re(()=>{Oa();Nn();Ao=x($()),Ua=x(se());Gf();pc();ro();qu();n0();Vt=new Uint8Array(8),Yee=new Float64Array(Vt.buffer,0,1),Yg={},i0="openapi";a(Kee,"http");sl=0;a(Wee,"start")});var Kg=g((Sme,u0)=>{var{recordAction:Vf,recordActionBinary:Qee}=(Nn(),ne(iu)),zee=require("fastify-plugin"),Jee=200;u0.exports=zee(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.request.routeOptions,_,l,d;u.config?.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),Vf(o,"duration",_,d,l),Qee(n.raw.statusCode<400,"success",_,d,l);let f=Jee;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Vf(performance.now()-c,"transfer",_,d,l),Vf(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Vf(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var jg=g((Rme,f0)=>{var Wf=require("clone"),Qf=Xe(),Xee=Q(),Yf=M(),Tme=$(),Wg=require("fs"),zg=require("joi"),{string:Kf}=zg.types(),{hdb_errors:jee,handleHDBError:$f}=se(),{HDB_ERROR_MSGS:gme,HTTP_STATUS_CODES:Qg}=jee,{common_validators:Pa}=Qs(),l0=" is required",Zee=["insert","update","upsert"],Jg={database:{presence:!1,format:Pa.schema_format,length:Pa.schema_length},schema:{presence:!1,format:Pa.schema_format,length:Pa.schema_length},table:{presence:!0,format:Pa.schema_format,length:Pa.schema_length},action:{inclusion:{within:Zee,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},ete={schema:Kf.required(),table:Kf.required(),action:Kf.valid("insert","update","upsert")},{AWS_ACCESS_KEY:tte,AWS_SECRET:rte,AWS_BUCKET:ste,AWS_FILE_KEY:nte,REGION:ite}=Yf.S3_BUCKET_AUTH_KEYS,ote={s3:{presence:!0},[`s3.${tte}`]:{presence:!0,type:"String"},[`s3.${rte}`]:{presence:!0,type:"String"},[`s3.${ste}`]:{presence:!0,type:"String"},[`s3.${nte}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${ite}`]:{presence:!0,type:"String"}},_0=Wf(Jg);_0.data.presence={message:l0};var d0=Wf(Jg);d0.file_path.presence={message:l0};var ate=Object.assign(Wf(Jg),ote),Xg=Wf(ete);Xg.csv_url=Kf.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Xg.passthrough_headers=zg.object();function cte(e){let t=Qf.validateObject(e,_0);return zf(e,t)}a(cte,"dataObject");function ute(e){let t=Qf.validateBySchema(e,zg.object(Xg));return zf(e,t)}a(ute,"urlObject");function lte(e){let t=Qf.validateObject(e,d0);return zf(e,t)}a(lte,"fileObject");function _te(e){let t=Qf.validateObject(e,ate);return zf(e,t)}a(_te,"s3FileObject");function zf(e,t){if(!t){let r=Xee.checkGlobalSchemaTable(e.schema,e.table);if(r)return $f(new Error,r,Qg.BAD_REQUEST);if(e.operation===Yf.OPERATIONS_ENUM.CSV_FILE_LOAD)try{Wg.accessSync(e.file_path,Wg.constants.R_OK|Wg.constants.F_OK)}catch(s){return s.code===Yf.NODE_ERROR_CODES.ENOENT?$f(s,`No such file or directory ${s.path}`,Qg.BAD_REQUEST):s.code===Yf.NODE_ERROR_CODES.EACCES?$f(s,`Permission denied ${s.path}`,Qg.BAD_REQUEST):$f(s)}}return t}a(zf,"postValidateChecks");f0.exports={dataObject:cte,urlObject:ute,fileObject:lte,s3FileObject:_te}});var Zg=g((Ome,E0)=>{"use strict";var nl=$(),Jf=M();async function dte(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===Jf.OPERATIONS_ENUM.INSERT||t.operation===Jf.OPERATIONS_ENUM.UPDATE||t.operation===Jf.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Jf.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(nl.info(i.message),i):i.http_resp_msg?(nl.error(`Error calling operation: ${e.name}`),nl.error(i.http_resp_msg),i):(nl.error(`Error calling operation: ${e.name}`),nl.error(i),i)}}a(dte,"callOperationFunctionAsAwait");E0.exports={callOperationFunctionAsAwait:dte}});var m0=g((Nme,h0)=>{"use strict";var eR=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},tR=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};h0.exports={BulkLoadFileObject:eR,BulkLoadDataObject:tR}});var S0=g((wme,p0)=>{"use strict";var rR=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};p0.exports=rR});var cR=g((Ume,v0)=>{"use strict";var Xf=Lr(),Zf=jg(),fte=require("needle"),xs=M(),Cme=Fe(),va=Q(),{handleHDBError:it,hdb_errors:w0}=se(),{HTTP_STATUS_CODES:$t,HDB_ERROR_MSGS:wt,CHECK_LOGS_WRAPPER:bo}=w0,Ba=$(),sR=require("papaparse");va.promisifyPapaParse();var qs=require("fs-extra"),Ete=require("path"),{chain:T0}=require("stream-chain"),g0=require("stream-json/streamers/StreamArray"),R0=require("stream-json/utils/Batch"),A0=require("stream-chain/utils/comp"),{finished:O0}=require("stream"),hte=ee(),I0=Zg(),mte=Ng(),{BulkLoadFileObject:iR,BulkLoadDataObject:pte}=m0(),oR=hg(),{verifyBulkLoadAttributePerms:C0}=Df(),Dme=S0(),Lme=st(),Mme=Tn(),{databases:Ste}=(Ae(),ne(Ge)),{coerceType:Tte}=(eE(),ne(uR)),b0="No records parsed from csv file.",Oo=`${hte.get("HDB_ROOT")}/tmp`,{schema_regex:gte}=Qs(),N0=1024*1024*2,y0=5e3,Rte={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};v0.exports={csvDataLoad:Ate,csvURLLoad:Ote,csvFileLoad:bte,importFromS3:Nte};async function Ate(e,t){let r=Zf.dataObject(e);if(r)throw it(r,r.message,$t.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=M0(e.schema,e.table),i=sR.parse(e.data,{header:!0,skipEmptyLines:!0,transform:nR.bind(null,n),dynamicTyping:!1}),o=new oR;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&C0(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 it(new Error,c,$t.BAD_REQUEST,void 0,void 0,!0);let u=new pte(e.action,e.schema,e.table,i.data);return s=await I0.callOperationFunctionAsAwait(U0,u,null),s.message===b0?b0:P0(s.records,s.number_written)}catch(n){throw No(n)}}a(Ate,"csvDataLoad");async function Ote(e){let t=Zf.urlObject(e);if(t)throw it(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Oo}/${r}`;try{await yte(e,r)}catch(n){throw Ba.error(wt.DOWNLOAD_FILE_ERR(r)+" - "+n),it(n,bo(wt.DOWNLOAD_FILE_ERR(r)))}try{let n=new iR(this.job_operation_function.name,e.action,e.schema,e.table,s,xs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await aR(n);return await jf(s),i}catch(n){throw await jf(s),No(n)}}a(Ote,"csvURLLoad");async function bte(e){let t=Zf.fileObject(e);if(t)throw it(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r=new iR(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,xs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await aR(r)}catch(s){throw No(s)}}a(bte,"csvFileLoad");async function Nte(e){let t=Zf.s3FileObject(e);if(t)throw it(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=Ete.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Oo}/${n}`;let i=new iR(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await wte(n,e);let o=await aR(i);return await jf(r),o}catch(s){throw await jf(r),No(s)}}a(Nte,"importFromS3");async function yte(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await fte("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw it(s,n,s.statusCode,xs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}Cte(r,e.csv_url),await Ite(t,r.raw)}a(yte,"downloadCSVFile");async function wte(e,t){try{let r=`${Oo}/${e}`;await qs.mkdirp(Oo),await qs.writeFile(`${Oo}/${e}`,"",{flag:"a+"});let s=await qs.createWriteStream(r),n=await mte.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){Ba.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Ba.error(wt.S3_DOWNLOAD_ERR+" - "+r),it(r,bo(wt.S3_DOWNLOAD_ERR))}}a(wte,"downloadFileFromS3");async function Ite(e,t){try{await qs.mkdirp(Oo),await qs.writeFile(`${Oo}/${e}`,t)}catch(r){throw Ba.error(wt.WRITE_TEMP_FILE_ERR),it(r,bo(wt.DEFAULT_BULK_LOAD_ERR))}}a(Ite,"writeFileToTempFolder");async function jf(e){if(e)try{await qs.access(e),await qs.unlink(e)}catch{Ba.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(jf,"deleteTempFile");function Cte(e,t){if(e.statusCode!==w0.HTTP_STATUS_CODES.OK)throw it(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,$t.BAD_REQUEST);if(!Rte[e.headers["content-type"]])throw it(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,$t.BAD_REQUEST);if(!e.raw)throw it(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,$t.BAD_REQUEST)}a(Cte,"validateURLResponse");async function aR(e){try{let t;switch(e.file_type){case xs.VALID_S3_FILE_TYPES.CSV:t=await Dte(e);break;case xs.VALID_S3_FILE_TYPES.JSON:t=await Lte(e);break;default:throw it(new Error,wt.DEFAULT_BULK_LOAD_ERR,$t.BAD_REQUEST,xs.LOG_LEVELS.ERROR,wt.INVALID_FILE_EXT_ERR(e))}return P0(t.records,t.number_written)}catch(t){throw No(t)}}a(aR,"fileLoad");async function D0(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await Xf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&C0(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=it(c);r(u)}}a(D0,"validateChunk");async function L0(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;va.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!va.isEmpty(c)&&!va.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await I0.callOperationFunctionAsAwait(U0,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=it(c,bo(wt.INSERT_CSV_ERR),$t.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,wt.INSERT_CSV_ERR+" - "+c);r(u)}}a(L0,"insertChunk");async function Dte(e){let t={records:0,number_written:0},r=M0(e.schema,e.table);try{let s=new oR,n=qs.createReadStream(e.file_path,{highWaterMark:N0});n.setEncoding("utf8"),await sR.parsePromise(n,D0.bind(null,e,s),nR.bind(null,r));let i=s.getPermsResponse();if(i)throw it(new Error,i,$t.BAD_REQUEST);return n=qs.createReadStream(e.file_path,{highWaterMark:N0}),n.setEncoding("utf8"),await sR.parsePromise(n,L0.bind(null,e,t),nR.bind(null,r)),n.destroy(),t}catch(s){throw it(s,bo(wt.PAPA_PARSE_ERR),$t.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,wt.PAPA_PARSE_ERR+s)}}a(Dte,"callPapaParse");function M0(e,t){let r=Ste[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>Tte(i,n));return s}a(M0,"createTransformMap");function nR(e,t,r){let s=e.get(r);return s?s(t):va.autoCast(t)}a(nR,"typeFunction");async function Lte(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new oR,n=T0([qs.createReadStream(e.file_path,{encoding:"utf-8"}),g0.withParser(),c=>c.value,new R0({batchSize:y0}),A0(async c=>{await D0(e,s,r,c)})]);await new Promise((c,u)=>{O0(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw it(new Error,i,$t.BAD_REQUEST);let o=T0([qs.createReadStream(e.file_path,{encoding:"utf-8"}),g0.withParser(),c=>c.value,new R0({batchSize:y0}),A0(async c=>{await L0(e,t,r,c)})]);return await new Promise((c,u)=>{O0(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw it(s,bo(wt.INSERT_JSON_ERR),$t.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,wt.INSERT_JSON_ERR+s)}}a(Lte,"insertJson");async function U0(e){let t={};try{e.data&&e.data.length>0&&Mte(e.data[0])?t=await Ute(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Ba.info(t.message))}catch(r){throw No(r)}return t}a(U0,"callBulkFileLoad");function Mte(e){let t=Object.keys(e);for(let r of t)if(!gte.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Mte,"validateColumnNames");async function Ute(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=Xf.insert;break;case"update":i=Xf.update;break;case"upsert":i=Xf.upsert;break;default:throw it(new Error,wt.INVALID_ACTION_PARAM_ERR(s),$t.BAD_REQUEST,xs.LOG_LEVELS.ERROR,wt.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=va.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw No(o)}}a(Ute,"bulkFileLoad");function P0(e,t){return`successfully loaded ${t} of ${e} records`}a(P0,"buildResponseMsg");function No(e){return it(e,bo(wt.DEFAULT_BULK_LOAD_ERR),$t.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,wt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(No,"buildTopLevelErrMsg")});var H0=g((vme,B0)=>{"use strict";var lR=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};B0.exports=lR});var G0=g((Hme,q0)=>{"use strict";var Pte=M(),x0=require("moment"),vte=require("uuid").v4,_R=class{static{a(this,"JobObject")}constructor(){this.id=vte(),this.type=void 0,this.start_datetime=x0().valueOf(),this.created_datetime=x0().valueOf(),this.end_datetime=void 0,this.status=Pte.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};q0.exports=_R});var dR=g((qme,K0)=>{"use strict";var Bte=require("uuid").v4,V0=Lr(),$0=Dr(),Hte=Zs(),xte=ra(),qte=H0(),ot=M(),Gte=G0(),Fte=Dd(),ds=$(),kte=Lc(),Ha=Q(),{promisify:Vte}=require("util"),yo=require("moment"),$te=Mf(),tE=jg(),F0=Hm(),{deleteTransactionLogsBeforeValidator:Yte}=lg(),{handleHDBError:Kte,hdb_errors:Wte}=se(),{HTTP_STATUS_CODES:Qte}=Wte,k0=$0.searchByValue,zte=$0.searchByHash,Jte=V0.insert,Xte=Vte($te.evaluateSQL),jte=V0.update;K0.exports={addJob:tre,updateJob:sre,handleGetJob:Zte,handleGetJobsByStartDate:ere,getJobById:Y0};async function Zte(e){try{let t=await Y0(e.id);return Ha.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 ds.error("There was an error getting job",t),new Error(r)}}a(Zte,"handleGetJob");async function ere(e){try{let t=await rre(e);if(ds.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=yo(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=yo(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 ds.error(r),new Error(r)}}a(ere,"handleGetJobsByStartDate");async function tre(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Ha.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return ds.info(l),t.error=l,t}if(!ot.JOB_TYPE_ENUM[e.operation])return ds.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case ot.OPERATIONS_ENUM.CSV_FILE_LOAD:s=tE.fileObject(e);break;case ot.OPERATIONS_ENUM.CSV_URL_LOAD:s=tE.urlObject(e);break;case ot.OPERATIONS_ENUM.CSV_DATA_LOAD:s=tE.dataObject(e);break;case ot.OPERATIONS_ENUM.IMPORT_FROM_S3:s=tE.s3FileObject(e);break;case ot.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case ot.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=F0(e,"date");break;case ot.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=F0(e,"timestamp");break;case ot.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=Yte(e);break;default:break}if(s)throw Kte(s,s.message,Qte.BAD_REQUEST,void 0,void 0,!0);let n=new Gte;n.type=e.operation===ot.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?ot.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new Hte(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await k0(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return ds.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=Bte();try{o=await k0(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return ds.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return ds.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new kte(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await Jte(u)}catch(l){return ds.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,ds.trace(l)}return t}a(tre,"addJob");async function rre(e){let t=yo(e.from_date,yo.ISO_8601),r=yo(e.to_date,yo.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new qte(s,e.hdb_user);try{return await Xte(n)}catch(i){throw ds.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(rre,"getJobsInDateRange");async function Y0(e){if(Ha.isEmptyOrZeroLength(e))return Ha.errorizeMessage("Invalid job ID specified.");let t=new xte(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await zte(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return ds.error(s),Ha.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Y0,"getJobById");async function sre(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Ha.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===ot.JOB_STATUS_ENUM.COMPLETE||e.status===ot.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=yo().valueOf());let t=new Fte(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await jte(t),r}a(sre,"updateJob")});var j0=g((Fme,X0)=>{"use strict";var W0=Q(),Or=M(),nre=require("moment"),rE=cR(),sE=$(),Q0=dR(),z0=Uf(),J0=si(),ire=Ke(),ore=yf(),fR=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function are(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(W0.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(W0.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Or.JOB_TYPE_ENUM.csv_file_load:await Hn(e,rE.csvFileLoad);break;case Or.JOB_TYPE_ENUM.csv_url_load:await Hn(e,rE.csvURLLoad);break;case Or.JOB_TYPE_ENUM.csv_data_load:await Hn(e,rE.csvDataLoad);break;case Or.JOB_TYPE_ENUM.import_from_s3:await Hn(e,rE.importFromS3);break;case Or.JOB_TYPE_ENUM.empty_trash:break;case Or.JOB_TYPE_ENUM.export_local:await Hn(e,z0.export_local);break;case Or.JOB_TYPE_ENUM.export_to_s3:await Hn(e,z0.export_to_s3);break;case Or.JOB_TYPE_ENUM.delete_files_before:case Or.JOB_TYPE_ENUM.delete_records_before:await Hn(e,J0.deleteFilesBefore);break;case Or.JOB_TYPE_ENUM.delete_audit_logs_before:await Hn(e,J0.deleteAuditLogsBefore);break;case Or.JOB_TYPE_ENUM.delete_transaction_logs_before:await Hn(e,ore.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(are,"parseMessage");async function Hn(e,t){try{e.job.status=Or.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=nre().valueOf(),await Q0.updateJob(e.job),await cre(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):sE.error(`There was an error running ${t.name} job with id ${e.job.id}`),sE.error(s),e.job.message=s,e.job.status=Or.JOB_STATUS_ENUM.ERROR;try{await Q0.updateJob(e.job)}catch(n){throw sE.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Hn,"runJob");async function cre(e){sE.trace("launching job thread:",e),ire.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Or.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(cre,"launchJobThread");X0.exports={parseMessage:are,RunnerMessage:fR}});var eB=g((Vme,Z0)=>{"use strict";var ER=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};Z0.exports=ER});var pB=g((Yme,gR)=>{"use strict";var cE=Dr(),pR=Mf(),nE=cR(),xn=fu(),iE=ei(),ol=si(),ure=MS(),il=ss(),oE=FS(),Yt=ug(),aE=$(),lre=$S(),_re=Vd(),tB=AT(),dre=Yd(),fre=bT(),Ere=NT(),hre=IT(),mre=DT(),hR=UT(),rB=Uf(),pre=Df(),SR=dR(),q=M(),{hdb_errors:cl,handleHDBError:al}=se(),{HTTP_STATUS_CODES:sB}=cl,mR=xT(),nB=_f(),fB=require("util"),xa=Lr(),Sre=gn(),Tre=ha(),iB=j0(),oB=Tu(),aB=(hf(),ne(Gu)),cB=Pr(),uB=yf(),lB=gf(),{setServerUtilities:gre}=(eE(),ne(uR)),{CONTEXT:Rre}=(Os(),ne(Lp)),{_assignPackageExport:Are}=require("../index"),{transformReq:Ore}=Q(),{server:bre}=(nr(),ne(vi)),jt=aE.loggerWithTag("operation"),Nre=Zg(),_B=cE.searchByHash,yre=cE.searchByValue,wre=fB.promisify(cE.search),Ire=fB.promisify(pR.evaluateSQL),Cre={[q.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[q.OPERATIONS_ENUM.CREATE_TABLE]:!0,[q.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[q.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[q.OPERATIONS_ENUM.DROP_TABLE]:!0,[q.OPERATIONS_ENUM.DROP_SCHEMA]:!0},Y=eB();async function EB(e,t){try{if(e.body.operation!=="read_log"&&(aE.log_level===q.LOG_LEVELS.INFO||aE.log_level===q.LOG_LEVELS.DEBUG||aE.log_level===q.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;jt.info(o)}}catch(s){jt.error(s)}let r=await Nre.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Cre[e.body.operation]&&Sre.setSchemaDataToGlobal(s=>{s&&jt.error(s)}),r}a(EB,"processLocalTransaction");var dB=Lre();gR.exports={chooseOperation:hB,getOperationFunction:mB,operation:TR,processLocalTransaction:EB};gre(gR.exports);bre.operation=TR;function hB(e){let t;try{t=mB(e)}catch(n){throw jt.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=pR.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=pR.checkASTPermissions(e,i);if(o)throw jt.error(`${sB.FORBIDDEN} from operation ${e.operation}`),jt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),al(new Error,o,cl.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==q.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==q.OPERATIONS_ENUM.LOGIN&&e.operation!==q.OPERATIONS_ENUM.LOGOUT){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=pre.verifyPerms(i,n);if(o)throw jt.error(`${sB.FORBIDDEN} from operation ${e.operation}`),jt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),al(new Error,o,cl.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw al(n,"There was an error when trying to choose an operation path")}return r}a(hB,"chooseOperation");function mB(e){if(jt.trace(`getOperationFunction with operation: ${e.operation}`),dB.has(e.operation))return dB.get(e.operation);throw al(new Error,cl.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),cl.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(mB,"getOperationFunction");Are("operation",TR);function TR(e,t){e.hdb_user=this[Rre]?.user,e.bypass_auth=!t;let r=hB(e);return EB({body:e},r)}a(TR,"operation");async function Dre(e){jt.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[q.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case q.OPERATIONS_ENUM.INSERT:o=await xa.insert(i);break;case q.OPERATIONS_ENUM.UPDATE:o=await xa.update(i);break;case q.OPERATIONS_ENUM.UPSERT:o=await xa.upsert(i);break;case q.OPERATIONS_ENUM.DELETE:o=await ol.deleteRecord(i);break;default:jt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){jt.info("Invalid operation in transaction"),jt.error(o)}}a(Dre,"catchup");async function ln(e){Ore(e);let t,r;try{r=await SR.addJob(e),t=r.createdJob,jt.info("addJob result",r);let s=new iB.RunnerMessage(t,e);return await iB.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw jt.error(n),al(s,n)}}a(ln,"executeJob");function Lre(){let e=new Map;return e.set(q.OPERATIONS_ENUM.INSERT,new Y(xa.insert)),e.set(q.OPERATIONS_ENUM.UPDATE,new Y(xa.update)),e.set(q.OPERATIONS_ENUM.UPSERT,new Y(xa.upsert)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new Y(cE.searchByConditions)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_HASH,new Y(_B)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_ID,new Y(_B)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_VALUE,new Y(yre)),e.set(q.OPERATIONS_ENUM.SEARCH,new Y(wre)),e.set(q.OPERATIONS_ENUM.SQL,new Y(Ire)),e.set(q.OPERATIONS_ENUM.CSV_DATA_LOAD,new Y(ln,nE.csvDataLoad)),e.set(q.OPERATIONS_ENUM.CSV_FILE_LOAD,new Y(ln,nE.csvFileLoad)),e.set(q.OPERATIONS_ENUM.CSV_URL_LOAD,new Y(ln,nE.csvURLLoad)),e.set(q.OPERATIONS_ENUM.IMPORT_FROM_S3,new Y(ln,nE.importFromS3)),e.set(q.OPERATIONS_ENUM.CREATE_SCHEMA,new Y(xn.createSchema)),e.set(q.OPERATIONS_ENUM.CREATE_DATABASE,new Y(xn.createSchema)),e.set(q.OPERATIONS_ENUM.CREATE_TABLE,new Y(xn.createTable)),e.set(q.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new Y(xn.createAttribute)),e.set(q.OPERATIONS_ENUM.DROP_SCHEMA,new Y(xn.dropSchema)),e.set(q.OPERATIONS_ENUM.DROP_DATABASE,new Y(xn.dropSchema)),e.set(q.OPERATIONS_ENUM.DROP_TABLE,new Y(xn.dropTable)),e.set(q.OPERATIONS_ENUM.DROP_ATTRIBUTE,new Y(xn.dropAttribute)),e.set(q.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new Y(iE.describeSchema)),e.set(q.OPERATIONS_ENUM.DESCRIBE_DATABASE,new Y(iE.describeSchema)),e.set(q.OPERATIONS_ENUM.DESCRIBE_TABLE,new Y(iE.describeTable)),e.set(q.OPERATIONS_ENUM.DESCRIBE_ALL,new Y(iE.describeAll)),e.set(q.OPERATIONS_ENUM.DELETE,new Y(ol.deleteRecord)),e.set(q.OPERATIONS_ENUM.ADD_USER,new Y(il.addUser)),e.set(q.OPERATIONS_ENUM.ALTER_USER,new Y(il.alterUser)),e.set(q.OPERATIONS_ENUM.DROP_USER,new Y(il.dropUser)),e.set(q.OPERATIONS_ENUM.LIST_USERS,new Y(il.listUsersExternal)),e.set(q.OPERATIONS_ENUM.LIST_ROLES,new Y(oE.listRoles)),e.set(q.OPERATIONS_ENUM.ADD_ROLE,new Y(oE.addRole)),e.set(q.OPERATIONS_ENUM.ALTER_ROLE,new Y(oE.alterRole)),e.set(q.OPERATIONS_ENUM.DROP_ROLE,new Y(oE.dropRole)),e.set(q.OPERATIONS_ENUM.USER_INFO,new Y(il.userInfo)),e.set(q.OPERATIONS_ENUM.READ_LOG,new Y(lre)),e.set(q.OPERATIONS_ENUM.ADD_NODE,new Y(_re)),e.set(q.OPERATIONS_ENUM.UPDATE_NODE,new Y(tB)),e.set(q.OPERATIONS_ENUM.SET_NODE_REPLICATION,new Y(tB)),e.set(q.OPERATIONS_ENUM.REMOVE_NODE,new Y(dre)),e.set(q.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new Y(fre)),e.set(q.OPERATIONS_ENUM.PURGE_STREAM,new Y(Ere)),e.set(q.OPERATIONS_ENUM.SET_CONFIGURATION,new Y(cB.setConfiguration)),e.set(q.OPERATIONS_ENUM.CLUSTER_STATUS,new Y(hre.clusterStatus)),e.set(q.OPERATIONS_ENUM.CLUSTER_NETWORK,new Y(mre)),e.set(q.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new Y(hR.setRoutes)),e.set(q.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new Y(hR.getRoutes)),e.set(q.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new Y(hR.deleteRoutes)),e.set(q.OPERATIONS_ENUM.EXPORT_TO_S3,new Y(ln,rB.export_to_s3)),e.set(q.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new Y(ln,ol.deleteFilesBefore)),e.set(q.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new Y(ln,ol.deleteFilesBefore)),e.set(q.OPERATIONS_ENUM.EXPORT_LOCAL,new Y(ln,rB.export_local)),e.set(q.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new Y(SR.handleGetJobsByStartDate)),e.set(q.OPERATIONS_ENUM.GET_JOB,new Y(SR.handleGetJob)),e.set(q.OPERATIONS_ENUM.GET_FINGERPRINT,new Y(mR.getFingerprint)),e.set(q.OPERATIONS_ENUM.SET_LICENSE,new Y(mR.setLicense)),e.set(q.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new Y(mR.getRegistrationInfo)),e.set(q.OPERATIONS_ENUM.RESTART,new Y(nB.restart)),e.set(q.OPERATIONS_ENUM.RESTART_SERVICE,new Y(nB.restartService)),e.set(q.OPERATIONS_ENUM.CATCHUP,new Y(Dre)),e.set(q.OPERATIONS_ENUM.SYSTEM_INFORMATION,new Y(Tre.systemInformation)),e.set(q.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new Y(ln,ol.deleteAuditLogsBefore)),e.set(q.OPERATIONS_ENUM.READ_AUDIT_LOG,new Y(ure)),e.set(q.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new Y(oB.createTokens)),e.set(q.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new Y(oB.refreshOperationToken)),e.set(q.OPERATIONS_ENUM.LOGIN,new Y(aB.login)),e.set(q.OPERATIONS_ENUM.LOGOUT,new Y(aB.logout)),e.set(q.OPERATIONS_ENUM.GET_CONFIGURATION,new Y(cB.getConfiguration)),e.set(q.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new Y(Yt.customFunctionsStatus)),e.set(q.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new Y(Yt.getCustomFunctions)),e.set(q.OPERATIONS_ENUM.GET_COMPONENT_FILE,new Y(Yt.getComponentFile)),e.set(q.OPERATIONS_ENUM.GET_COMPONENTS,new Y(Yt.getComponents)),e.set(q.OPERATIONS_ENUM.SET_COMPONENT_FILE,new Y(Yt.setComponentFile)),e.set(q.OPERATIONS_ENUM.DROP_COMPONENT,new Y(Yt.dropComponent)),e.set(q.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new Y(Yt.getCustomFunction)),e.set(q.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new Y(Yt.setCustomFunction)),e.set(q.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new Y(Yt.dropCustomFunction)),e.set(q.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new Y(Yt.addComponent)),e.set(q.OPERATIONS_ENUM.ADD_COMPONENT,new Y(Yt.addComponent)),e.set(q.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new Y(Yt.dropCustomFunctionProject)),e.set(q.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Y(Yt.packageComponent)),e.set(q.OPERATIONS_ENUM.PACKAGE_COMPONENT,new Y(Yt.packageComponent)),e.set(q.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Y(Yt.deployComponent)),e.set(q.OPERATIONS_ENUM.DEPLOY_COMPONENT,new Y(Yt.deployComponent)),e.set(q.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new Y(uB.readTransactionLog)),e.set(q.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new Y(ln,uB.deleteTransactionLogsBefore)),e.set(q.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new Y(lB.installModules)),e.set(q.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new Y(lB.auditModules)),e.set(q.OPERATIONS_ENUM.GET_BACKUP,new Y(xn.getBackup)),e}a(Lre,"initializeOperationFunctionMap")});var lE=g((Wme,gB)=>{"use strict";var RR=M(),Mre=Q(),ul=$(),{handleHDBError:AR,hdb_errors:uE}=se(),{isMainThread:Ure}=require("worker_threads"),{Readable:Pre}=require("stream"),SB=require("os"),vre=require("util"),Bre=eT(),Hre=vre.promisify(Bre.authorize),TB=pB(),{createGzip:xre,constants:qre}=require("zlib");function Gre(e){let t=`Found an uncaught exception with message: ${e.message}. ${SB.EOL}Stack: ${e.stack} ${SB.EOL}Terminating ${Ure?"HDB":"thread"}.`;console.error(t),ul.fatal(t),process.exit(1)}a(Gre,"handleServerUncaughtException");function Fre(e,t,r){if(ul[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let s=e.statusCode?e.statusCode:uE.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(Fre,"serverErrorHandler");function kre(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=AR(new Error,"Invalid JSON.",uE.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(Mre.isEmpty(e.body.operation)){let s=AR(new Error,"Request body must include an 'operation' property.",uE.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(kre,"reqBodyValidationHandler");function Vre(e,t,r){let s;e.body.operation!==RR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==RR.OPERATIONS_ENUM.LOGIN&&e.body.operation!==RR.OPERATIONS_ENUM.LOGOUT?Hre(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{ul.warn(n),ul.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(AR(n,i,uE.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(Vre,"authHandler");async function $re(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=TB.chooseOperation(e.body);let n=await TB.processLocalTransaction(e,s);if(n instanceof Pre&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(xre({level:qre.Z_BEST_SPEED})))}return n}catch(n){throw ul.error(n),n}}a($re,"handlePostRequest");gB.exports={authHandler:Vre,handlePostRequest:$re,handleServerUncaughtException:Gre,serverErrorHandler:Fre,reqBodyValidationHandler:kre}});var bB=g((zme,OB)=>{"use strict";var Yre=require("fastify-plugin"),{handlePostRequest:RB,authHandler:Kre,reqBodyValidationHandler:Wre}=lE();async function Qre(e){e.decorate("hdbCore",{preValidation:[Wre,Kre],request:t=>AB(RB(t,response)),requestWithoutAuthentication:(t,r)=>AB(RB(t,r,!0))})}a(Qre,"hdbCore");async function AB(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(AB,"convertAsyncIterators");OB.exports=Yre(Qre)});var wB=g((jme,yB)=>{"use strict";var Xme=require("fs"),OR=ee();OR.initSync();var{CONFIG_PARAMS:NB}=M(),zre=1024*1024*1024;function Jre(e){let t=OR.get(NB.HTTP_TIMEOUT),r=OR.get(NB.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:zre,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(Jre,"getServerOptions");yB.exports=Jre});var DB=g((epe,CB)=>{"use strict";var bR=ee();bR.initSync();var{CONFIG_PARAMS:IB}=M();function Xre(){let e=bR.get(IB.HTTP_CORSACCESSLIST),t=bR.get(IB.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=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(Xre,"getCORSOptions");CB.exports=Xre});var UB=g((rpe,MB)=>{"use strict";var LB=ee();LB.initSync();var jre=M();function Zre(){return LB.get(jre.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Zre,"getHeaderTimeoutConfig");MB.exports=Zre});var yR={};Ye(yR,{customFunctionsServer:()=>rse,ready:()=>QB,start:()=>tse});function tse(e){let t=e.securePort>0;return{async handleFile(r,s,n,i){qn||(qn=WB(t),tt.http((await qn).server));let o=await qn,c=(0,NR.dirname)(n),u=(0,NR.dirname)(s);if(u.startsWith("/")&&(u=u.slice(1)),!PB.has(c)){PB.add(c);try{o.register(nse(c,u))}catch(_){if(_.message==="Root plugin has already booted")Ve.warn(`Could not load root fastify route for ${n}, this may require a restart to install properly`);else throw _}}},ready:QB}}async function rse(){try{Ve.info("In Custom Functions Fastify server"+process.cwd()),Ve.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ve.debug(`Custom Functions server process ${process.pid} starting up.`),await sse();let e=GB.get(FB.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=qn=await WB(e)}catch(r){throw Ve.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ve.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ve.error(`Custom Functions ${process.pid} Error: ${e}`),Ve.error(e),process.exit(1)}}async function sse(){try{Ve.info("Custom Functions starting configuration."),await kB.setUsersToGlobal(),Ve.info("Custom Functions completed configuration.")}catch(e){Ve.error(e)}}function nse(e,t){return async function(r){try{Ve.info("Custom Functions starting buildRoutes"),Ve.trace("Loading fastify routes folder "+e),(0,vB.existsSync)(e)&&r.register(qB.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:Ve.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?Ve.error(n.message):n&&Ve.error(n),o()})}catch(s){Ve.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function WB(e){Ve.info("Custom Functions starting buildServer.");let t=(0,VB.default)(e),r=(0,BB.default)(t);r.server.headersTimeout=(0,YB.default)(),r.setErrorHandler(KB.serverErrorHandler);let s=(0,$B.default)();return s&&r.register(HB.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(xB.default),await r.register(ese),await r.after(),Ug(r),Ve.info("Custom Functions completed buildServer."),r}function QB(){if(qn)return qn.then?qn.then(e=>e.ready()):qn.ready()}var NR,vB,BB,HB,xB,qB,GB,FB,Ve,ese,kB,VB,$B,YB,KB,qn,PB,zB=Re(()=>{NR=require("path"),vB=require("fs"),BB=x(require("fastify")),HB=x(require("@fastify/cors")),xB=x(Kg()),qB=x(require("@fastify/autoload")),GB=x(ee()),FB=x(M()),Ve=x($()),ese=x(bB()),kB=x(ss()),VB=x(wB()),$B=x(DB()),YB=x(UB()),KB=x(lE());Oa();nr();PB=new Set;a(tse,"start");a(rse,"customFunctionsServer");a(sse,"setUp");a(nse,"buildRouteFolder");a(WB,"buildServer");a(QB,"ready")});var wR={};Ye(wR,{start:()=>ise});function ise(e){return{handleDirectory(t,r){if(t==="/"){let s=(0,eH.default)(r,e);return e.server.http(async(n,i)=>{if(!n.isWebSocket)return new Promise(o=>s(n._nodeRequest,n._nodeResponse,()=>{o(i(n))}))}),!0}},handleFile(t,r,s){XB||(XB=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=JB.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,jB.default)(n,(0,ZB.realpathSync)(o))}}return i(n)},{runFirst:!0})),JB.set(r,s)}}}var jB,ZB,eH,JB,XB,tH=Re(()=>{jB=x(require("send")),ZB=require("fs"),eH=x(require("serve-static")),JB=new Map;a(ise,"start")});function cse(e,t=1,r){if(IR++,(0,wo.startWorker)("server/threads/threadServer.js",{name:fE.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===fE.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});ase.push(n),await n,qa.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=dE.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=qa.indexOf(s);o>-1&&qa.splice(o,1)}if(a(i,"removeWorker"),Ga){let o=Ga;Ga=[];for(let c of o)iH[c.localPort](null,c)}}}),r){let s=setInterval(()=>{CR?CR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,wo.shutdownWorkers)(),IR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function oH(e=0,t){if(typeof e=="string")try{(0,EE.existsSync)(e)&&(0,EE.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=use:r=lse(t):r=LR;let s=(0,Fa.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=iH[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),CR=!0,r(o,(c,u)=>{if(!c){if(rH){let l=o._socket||new Fa.Socket({handle:o,writable:!0,readable:!0});rH.deliverSocket(l,e,u),l.resume()}else IR>0?(Ga.length===0&&setTimeout(()=>{Ga.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,Ga.push(o)):(console.log("start up a dynamic thread to handle request"),cse(0));qr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new Fa.Socket({handle:o,writable:!0,readable:!0});Ese(l,c,e)}qr(!0,"socket-routed")})};let n=eu();DR.info(`HarperDB ${n.version} Server running on port ${e}`)}return s.on("error",n=>{console.error("Error in socket server",n)}),process.env._UNREF_SERVER&&s.unref(),s}function LR(e,t){let r,s=0;for(let n of qa){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=_E)return _E=i,t(r);s=i}_E=0,t(r)}function use(e,t){let r={};e.getpeername(r);let s=r.address,n=ka.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);LR(e,o=>{ka.set(s,{worker:o,lastUsed:i}),t(o)})}function lse(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new Fa.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=ka.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);LR(s,d=>{ka.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function dse(){_E=0;for(let e of qa)e.expectedIdle=e.recentELU.idle+_se,e.requests=1;qa.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Ese(e,t,r){let s=fse++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),dE.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),dE.delete(s)),n.event=="destroy"&&(e.destroy(),dE.delete(s))})}var wo,Fa,fE,DR,EE,nH,ose,qa,Ga,iH,rH,IR,ase,CR,_E,sH,ka,_se,dE,fse,aH=Re(()=>{wo=x(Ke()),Fa=require("net"),fE=x(M()),DR=x($()),EE=require("fs");Nn();nH=require("worker_threads"),ose=x(Ji()),qa=[],Ga=[],iH=[],IR=0,ase=[];nH.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(cse,"startHTTPWorker");a(oH,"startSocketServer");_E=0;a(LR,"findMostIdleWorker");sH=36e5,ka=new Map;a(use,"findByRemoteAddressAffinity");a(lse,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of ka)r.lastUsed+sH<e&&ka.delete(t)},sH).unref();_se=1e3;a(dse,"updateWorkerIdleness");(0,wo.setMonitorListener)(dse);dE=new Map,fse=1;a(Ese,"proxySocket")});var vR={};Ye(vR,{Request:()=>MR,createReuseportFd:()=>hE});var cH,MR,UR,PR,hE,mE=Re(()=>{cH=require("os"),MR=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let s=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=s,this.headers=new PR(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 UR(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},UR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},PR=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,s]of this)t(s,r,this)}};(0,cH.platform)()!="win32"&&(hE=require("node-unix-socket").createReuseportFd)});var dH=g((ppe,_H)=>{"use strict";var hse=require("cluster"),Io=ee();Io.initSync();var lH=M(),dpe=require("util"),Gn=$(),fpe=require("fs"),mse=require("fastify"),Epe=eu(),pse=require("@fastify/cors"),Sse=require("@fastify/compress"),Tse=require("@fastify/static"),gse=Kg(),Rse=require("path"),{PACKAGE_ROOT:Ase}=M(),Ose=gn(),bse=Q(),Nse=ss(),yse=Ji(),{server:wse}=(nr(),ne(vi)),{node_request_key:hpe}=(mE(),ne(vR)),{authHandler:Ise,handlePostRequest:Cse,serverErrorHandler:Dse,reqBodyValidationHandler:Lse}=lE(),mpe=require("net"),{registerContentHandlers:Mse}=(Oa(),ne(Qv)),Use=6e4,Pse=1024*1024*1024,vse="TRUE",{CONFIG_PARAMS:ll}=lH,Va;_H.exports={hdbServer:uH,start:uH};async function uH(e){try{Gn.info("In Fastify server"+process.cwd()),Gn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Gn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=hse.isMaster,await Bse();let t=e.securePort>0;Va=Hse(t),await Va.ready(),e||(e={}),e.isOperationsServer=!0;try{wse.http(Va.server,e),Va.server.closeIdleConnections||await Va.listen({port:0,host:"::"})}catch(r){throw Va.close(),Gn.error(r),Gn.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Gn.fatal(t),process.exit(1)}}a(uH,"operationsServer");async function Bse(){Gn.trace("Configuring HarperDB process."),Ose.setSchemaDataToGlobal(),await Nse.setUsersToGlobal(),await yse.getLicense()}a(Bse,"setUp");function Hse(e){Gn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=xse(e),r=mse(t);r.server.headersTimeout=Gse(),r.setErrorHandler(Dse);let s=qse();s&&r.register(pse,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(gse),r.register(Sse),r.register(Tse,{root:Rse.join(Ase,"studio/build-local")}),Mse(r);let n=Io.get(lH.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!bse.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Lse,Ise],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Cse(i,o)}),r.get("/health",()=>"HarperDB is running."),Gn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Hse,"buildServer");function xse(e){let t=Io.get(ll.OPERATIONSAPI_NETWORK_TIMEOUT),r=Io.get(ll.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Pse,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(xse,"getServerOptions");function qse(){let e=Io.get(ll.OPERATIONSAPI_NETWORK_CORS),t=Io.get(ll.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===vse)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(qse,"getCORSOpts");function Gse(){return Io.get(ll.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Use}a(Gse,"getHeaderTimeoutConfig")});var FR={};Ye(FR,{disableNATS:()=>kse,publishToStream:()=>TE,setNATSReplicator:()=>BR,setPublishToStream:()=>Vse,setSubscription:()=>GR,start:()=>Fse});function Fse(){_l.default.get(dl.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Yse()}function kse(e=!0){pH=e}function Vse(e,t){TE=e,GR=t}function Yse(){if(pH||process.env._DISABLE_NATS)return;let e=Ls(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];BR(n,r,i)}}kR((r,s)=>{BR(r.tableName,r.databaseName,r),s&&TH(r)}),!fH&&(fH=!0)}function BR(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(n=>n?.isNATSReplicator))return;r.sourcedFrom(class extends qt{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Me],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Me]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Me],record:i})}patch(i){return s(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Me],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Me]})}static defineSchema(i){TH(i)}static subscribe(){let i=new As;return GR(t,e,i),i}static subscribeOnThisThread(i){return i<(_l.default.get(dl.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??$se)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new pE(n.transaction,n);let o=n.transaction;for(;o.next;)o=o.next;o.next=n.transaction.nats,i.user=n.user,i.context=n}else i=SH;return i}a(s,"getNATSTransaction")}function TH(e){let t=_l.default.get(dl.default.CONFIG_PARAMS.CLUSTERING_NODENAME);TE(`${xR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,qR.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 EH,xR,qR,hH,mH,_l,dl,SE,pH,TE,GR,$se,SH,fH,pE,HR,gH=Re(()=>{Ae();Os();EH=x(st()),xR=x(Fe()),qR=x(Tn());pc();hH=x(gS()),mH=x(wr()),_l=x(ee()),dl=x(M()),SE=x($());a(Fse,"start");a(kse,"disableNATS");TE=EH.publishToStream,GR=hH.setSubscription;a(Vse,"setPublishToStream");$se=2;a(Yse,"assignReplicationSource");a(BR,"setNATSReplicator");a(TH,"publishSchema");pE=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 s=this.writes_by_db.get(t);s||this.writes_by_db.set(t,s=[]),s.push(r)}commit({timestamp:t}){let r=_l.default.get(dl.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,f=l.operation=="put"?"upsert":l.operation;u||(SE.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&s.push(TE(`${xR.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,qR.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw SE.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},HR=class extends pE{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,mH.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};SH=new HR});var vH=g(Co=>{"use strict";var{isMainThread:yH,parentPort:El,threadId:gE}=require("worker_threads"),{Socket:Kse,createServer:Wse}=require("net"),{createServer:Qse,IncomingMessage:zse}=require("http"),{createServer:Jse}=require("https"),{readFileSync:$a,unlinkSync:RH,existsSync:Xse}=require("fs"),Zt=$(),De=ee(),Tt=M(),{server:bE}=(nr(),ne(vi)),{WebSocketServer:jse}=require("ws"),{createServer:Zse}=require("tls"),{getTicketKeys:ene,restartNumber:tne,getWorkerIndex:AE}=Ke(),{Headers:wH,appendHeader:rne}=(qu(),ne(SP)),{recordAction:fl,recordActionBinary:sne}=(Nn(),ne(iu)),{Request:IH,createReuseportFd:AH}=(mE(),ne(vR)),{checkMemoryLimit:nne}=Ji(),CH=require("tls"),OH=CH.createSecureContext;CH.createSecureContext=function(e){if(!e.cert||!e.key)return OH(e);let t={...e};delete t.key,delete t.cert;let r=OH(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var DH=De.get(Tt.CONFIG_PARAMS.THREADS_DEBUG);if(DH){let e;if(yH)e=De.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Zt.info("Could not close debugger",t)}});else{let t=De.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&AE()>=0&&(e=t+AE())}if(e){let t=De.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=De.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(s){Zt.trace(`Could not start debugging on port ${e}, you may already be debugging:`,s.message)}}}else if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){tne<=1&&Zt.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:bpe,CONFIG_PARAMS:ine}=Tt;De.initSync();var one=De.get(ine.HTTP_SESSIONAFFINITY),_n={};Co.registerServer=WR;Co.httpServer=QR;Co.deliverSocket=KR;Co.startServers=LH;Co.when_components_loaded=null;bE.http=QR;bE.request=lne;bE.socket=_ne;bE.ws=dne;var VR={},RE={},ane,wi={},OE={},cne=[],$R=[];function LH(){return Co.when_components_loaded=zR().loadRootComponents(!0).then(()=>{El?.on("message",t=>{let{port:r,fd:s,data:n}=t;if(s)KR(s,r,n);else if(t.requestId)une(t);else if(t.type===Tt.ITC_EVENT_TYPES.SHUTDOWN){Zt.trace("received shutdown request",gE);for(let i in _n){let o=_n[i],c;if(o.closeIdleConnections){let _=Object.getOwnPropertySymbols(o).find(f=>f.description.includes("connections")),l=0,d=setInterval(()=>{l++;let f=l>=100,E=o[_][f?"all":"idle"]();if(E.length===0){f&&clearInterval(d);return}l===1?Zt.info(`Closing ${E.length} idle connections`):f&&Zt.warn(`Forcefully closing ${E.length} active connections`);for(let h=0,p=E.length;h<p;h++){let S=E[h].socket;S._httpMessage&&!S._httpMessage.finished&&!f||(f?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
27
27
  Connection: close\r
28
28
  \r
29
- `))}},25).unref()}o.close?.(()=>{if(De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&AE()==0)try{gH(De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,gE),o.cantCleanupProperly||Zt.warn("Had to forcefully exit the thread",gE),process.exit(0)},5e3).unref()})}if(CH||process.env.DEV_MODE)try{require("inspector").close()}catch(i){Zt.info("Could not close debugger",i)}}}).ref();let e=[];if(RH&&!ine)for(let t in _n){let r=_n[t];if(isNaN(t)&&AE()==0){Jse(t)&&gH(t),e.push(new Promise((n,i)=>{r.listen({path:t},()=>{n(),Zt.info("Domain socket listening on "+t)}).on("error",i)}));continue}let s;try{s=RH(+t,"::")}catch(n){console.error(`Unable to bind to port ${t}`,n);continue}e.push(new Promise((n,i)=>{r.listen({fd:s},()=>{n(),Zt.trace("Listening on port "+t,gE)}).on("error",i)}))}Promise.all(e).then(()=>{El?.postMessage({type:Tt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(DH,"startServers");NH||DH();function KR(e,t,r){let s=e?.read?e:new Yse({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=_n[t];if(n.isSecure&&(s.startTime=performance.now()),n)typeof n=="function"?n(s):n.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=_n[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(Zt.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(KR,"deliverSocket");var OH=new Map;function cne(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=OH.get(n),r){case"connection":i=KR(void 0,t),OH.set(n,i),i.write=(c,u,_)=>(El.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(El.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),El.postMessage({requestId:n,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(s,"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(cne,"proxyRequest");function WR(e,t,r=!0){!+t&&t!==De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(De.get(Tt.CONFIG_PARAMS.HTTP_PORT),10));let s=_n[t];if(s){let n=s.lastServer||s;if(n===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!n.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);n.off("unhandled",bH),n.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(s.cantCleanupProperly=!0),e.emit("request",i,o)}),s.lastServer=e}else _n[t]=e;e.on("unhandled",bH)}a(WR,"registerServer");function LH(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(Tt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:De.get(Tt.CONFIG_PARAMS.HTTP_PORT),secure:De.get(Tt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),De.get(Tt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:De.get(Tt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(LH,"getPorts");function QR(e,t){for(let{port:r,secure:s}of LH(t))MH(r,s,t?.isOperationsServer),typeof e=="function"?$R[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=s,WR(e,r,!1)),OE[r]=YR($R,r),one=YR(ane,r)}a(QR,"httpServer");function MH(e,t,r){if(!yi[e]){let s=r?"operationsApi_network":"http",n={keepAliveTimeout:De.get(s+"_keepAliveTimeout"),headersTimeout:De.get(s+"_headersTimeout"),requestTimeout:De.get(s+"_timeout")},i=De.get(s+"_mtls"),o=De.get(s+"_mtls_required");if(t){s=r?"operationsApi_":"";let u=De.get(s+"tls_privateKey"),_=De.get(s+"tls_certificate"),l=De.get(s+"tls_certificateAuthority");Object.assign(n,{allowHTTP1:!0,key:Va(u),ciphers:De.get("tls_ciphers"),cert:Va(_),ca:l&&Va(l),rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:Zse()})}let c=sne();yi[e]=(t?zse:Wse)(n,async(u,_)=>{try{let d=performance.now(),f=new wH(u,_);r&&(f.isOperationsServer=!0);let E=await OE[e](f);if(!E){if(f._nodeResponse.statusCode)return;E=UH(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 H of E.headers||[])_.setHeader(H[0],H[1]);return u.baseRequest=f,_.baseResponse=E,yi[e].emit("unhandled",u,_)}let h=E.status||200,p=performance.now(),S=p-d,T=E.body,b;if(!E.handlesHeaders){let H=E.headers||new yH;T?T.length>=0&&(typeof T=="string"?H.set("Content-Length",Buffer.byteLength(T)):H.set("Content-Length",T.length),b=!0):(H.set("Content-Length","0"),b=!0);let P=`hdb;dur=${S.toFixed(2)}`;E.wasCacheMiss&&(P+=", miss"),tne(H,"Server-Timing",P,!0),_.writeHead(h,H&&(H[Symbol.iterator]?Array.from(H):H)),b&&_.end(T)}let R=f.handlerPath,L=f.method;if(fl(S,"duration",R,L,E.wasCacheMiss==null?void 0:E.wasCacheMiss?"cache-miss":"cache-hit"),rne(h<400,"success",R,L),!b)if(T?.pipe){T.pipe(_),T.destroy&&_.on("close",()=>{T.destroy()});let H=0;T.on("data",P=>{H+=P.length}),T.on("end",()=>{fl(performance.now()-p,"transfer",R,L),fl(H,"bytes-sent",R,L)})}else T?.then?T.then(H=>{_.end(H)},l):_.end(T)}catch(d){l(d)}function l(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?Zt.warn(d):Zt.info(d):Zt.error(d)}a(l,"onError")}),i&&(yi[e].mtlsConfig=i),t&&(yi[e].on("secureConnection",u=>{u._parent.startTime&&fl(performance.now()-u._parent.startTime,"tls-handshake",e),fl(u.isSessionReused(),"tls-reused",e)}),yi[e].isSecure=!0),WR(yi[e],e)}return yi[e]}a(MH,"getHTTPServer");function YR(e,t){let r=UH;for(let s=e.length;s>0;){let{listener:n,port:i}=e[--s];if(i===t||i==="all"){let o=r;r=a(c=>n(c,o),"next_callback")}}return r}a(YR,"makeCallbackChain");function UH(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new yH}}a(UH,"unhandled");function une(e,t){QR(e,{requestOnly:!0,...t})}a(une,"onRequest");function lne(e,t){let r;if(t.securePort){let s=De.get("tls_privateKey"),n=De.get("tls_certificate"),i=t.mtls?.certificateAuthority||De.get("tls_certificateAuthority");r=Xse({ciphers:De.get("tls_ciphers"),key:Va(s),cert:Va(n),ca:i&&Va(i),rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls},e),_n[t.securePort]=r}return t.port&&(r=Kse(e),_n[t.port]=r),r}a(lne,"onSocket");Object.defineProperty(Qse.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 _ne(e,t){let r;for(let{port:s,secure:n}of LH(t)){RE[s]||(RE[s]=new jse({server:r=MH(s,n)}),RE[s].on("connection",async(c,u)=>{try{let _=new wH(u);_.isWebSocket=!0;let l=OE[s](_),d=u.headers["sec-websocket-protocol"]||"",f=VR[s];if(d){let E;for(let h=0;h<f.length;h++){let p=f[h];p.protocol===d&&(E=!0,p.listener(c,_,l))}if(E)return}for(let E=0;E<f.length;E++){let h=f[E];h.protocol||h.listener(c,_,l)}}catch(_){Zt.warn("Error handling WebSocket connection",_)}}),RE[s].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=VR[s];o||(o=VR[s]=[]),o.push({listener:e,protocol:i}),OE[s]=YR($R,s)}return r}a(_ne,"onWebSocket");function bH(e,t){t.writeHead(404),t.end(`Not found
30
- `)}a(bH,"defaultNotFound")});async function xH({clientId:e,user:t,clean:r,will:s}){let n;if(e&&!r){let i=await JR.get(e,{returnNonexistent:!0});n=new ZR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await JR.get(e);i&&i.delete()}n=new yE(e,t)}return s&&(s.id=e,s.user={username:t?.username},hl.put(s)),n}function jR(){return NE++,NE>65500&&(NE=1),NE}function XR(e,t,r=e){let{topic:s,retain:n}=e;e.data=t,e.async=!0,e.authorize=!0;let i=Si.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return Xe(r,()=>n?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var vH,wi,BH,HH,JR,hl,NE,yE,ZR,qH=Re(()=>{Ae();xu();vH=x(wr()),wi=x($());eo();BH=x(Ke()),HH=x(PH());nr();JR=ct({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"}]}}]}),hl=ct({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,BH.getWorkerIndex)()===0&&(async()=>{await HH.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of hl.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await tt.getUser(r.user.username)),Xe(r,()=>{try{XR(r,t)}catch{(0,wi.warn)("Failed to publish will",t)}hl.delete(e.id,r)})}})();a(xH,"getSession");NE=1;a(jR,"getNextMessageId");yE=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,rh:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let l=this.subscriptions.find(T=>T.topic===n),d;l?(d=i>0,l.end(),this.subscriptions.splice(this.subscriptions.indexOf(l),1)):d=i===2;let f={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,wi.trace)("Resuming subscription from",n,"from",o);let E=Si.getMatch(_);if(!E){let T=new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);throw T.statusCode=404,T}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let T=f.url.slice(1);if(T.indexOf("#")>-1&&T.indexOf("#")!==T.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,T.indexOf("+")===T.length-1)f.onlyChildren=!0,f.url="/"+T.slice(0,T.length-1);else{let b=T.split("/"),R;for(let P=0;P<b.length;P++)if(b[P].indexOf("+")>-1)if(b[P]==="+")R=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(s&&R)throw new Error("Filters can not be combined");let L=!0;b[b.length-1]==="#"&&(b.length--,L=!1),R&&(s=a(P=>{let k=P.id;if(!Array.isArray(k)||L&&k.length!==b.length)return!1;for(let B=0;B<b.length;B++)if(b[B]!=="+"&&b[B]!==k[B])return!1;return!0},"filter"));let H=b.indexOf("+");f.url="/"+(H>-1?b.slice(0,H):b).concat("").join("/")}}let h=E.path,p=E.Resource,S=await Xe(f,async()=>{let T=await p.subscribe(f);if(!T)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!T[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let b of T)try{let R;if(b.type&&b.type!=="put"&&b.type!=="delete"&&b.type!=="message"&&b.type!=="patch"||s&&!s(b))continue;r?(b.topic=n,R=this.needsAcknowledge(b)):(b.acknowledge?.(),R=jR());let L=b.id;Array.isArray(L)&&(L=ga(L)),L==null&&(L=""),this.listener(h+"/"+L,b.value,R,t)}catch(R){(0,wi.warn)(R)}})(),T});return S.topic=n,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=jR();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(s=>s.topic===t);if(r)return r.end(),!0}async publish(t,r){return t.user=this.user,XR(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};Xe(r,async()=>{if(!t){let s=await hl.get(this.sessionId,r);s?.doesExist()&&await XR(s,s.data,r)}await hl.delete(this.sessionId,r)}).catch(s=>{(0,wi.warn)(`Error publishing MQTT will for ${this.sessionId}`,s)});for(let s of this.subscriptions)s.end();this.subscriptions=[]}};a(XR,"publish");ZR=class extends yE{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=jR(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,wi.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,vH.getNextMonotonicTime)()),(0,wi.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),JR.put(this.sessionRecord)),t.qos}}});var rA={};Ye(rA,{bypassAuth:()=>dne,start:()=>fne});function dne(){VH=!0}function fne({server:e,port:t,network:r,webSocket:s,securePort:n,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i,sessions:new Set},c,u=r?.mtls;return s&&(c=e.ws((_,l,d)=>{if(_.protocol==="mqtt"){Yr.debug("Received WSS connection for MQTT from",_._socket.remoteAddress);let{onMessage:f,onClose:E}=FH(_,(h,p)=>{if(_.send(h),p&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},l,Promise.resolve(d).then(()=>l?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{Yr.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},s))),(t||n)&&(c=e.socket(async _=>{let l;if(Yr.debug("Received connection for MQTT from",_.remoteAddress),u){if(_.authorized)try{let E=u.user;E!==null?((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),l=await e.getUser(E,null,null),(0,ml.get)(Kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&eA.notify({username:l.username,status:Kr.AUTH_AUDIT_STATUS.SUCCESS,type:Kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})):Yr.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(E){Yr.error(E)}else if(u.required)return Yr.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!l&&VH&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,kH.getSuperUser)(),Yr.debug("Auto-authorizing local connection",l?.username));let{onMessage:d,onClose:f}=FH(_,E=>_.write(E),null,l,o);_.on("data",d),_.on("close",f),_.on("error",E=>{Yr.info("Socket error",E)})},{port:t,securePort:n,mtls:u})),c}function FH(e,t,r,s,n){GH||(GH=!0,nu(d=>{wE>0&&d.push({metric:"mqtt-connections",connections:wE,byThread:!0})}));let i;wE++;let o,c={protocolVersion:4},u=(0,IE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){wE--,i||(i=!0,o?.disconnect(),n.sessions.delete(o),ns(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await tt.getUser(d.username,d.password.toString(),r),(0,ml.get)(Kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&eA.notify({username:s.username,status:Kr.AUTH_AUDIT_STATUS.SUCCESS,type:Kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,ml.get)(Kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&eA.error({username:s.username,status:Kr.AUTH_AUDIT_STATUS.FAILURE,type:Kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return ns(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(n.authorizeClient?.(d,s),d.will){let R=e.deserialize||(e.deserialize=To(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?R(d.will.payload):void 0,delete d.will.payload}o=xH({user:s,...d}),o=await o,n.sessions.add(o)}catch(R){return Yr.error(R),ns(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:R.code||5,returnCode:R.code||128})}ns(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((R,L,H,P)=>{try{let k=R.indexOf("/",1),B=k>0?R.slice(0,k):R;f({cmd:"publish",topic:R,payload:E(L),messageId:H||Math.floor(Math.random()*1e8),qos:P.qos},B)}catch(k){Yr.error(k),o?.disconnect(),n.sessions.delete(o)}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let R of d.subscriptions){let L;try{L=(await o.addSubscription(R,R.qos>=1)).qos||0}catch(H){Yr.error(H),L=c.protocolVersion<5?128:H.statusCode===403?135:H.statusCode===404?143:128}h.push(L)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let R=[];for(let L of d.unsubscriptions)R.push(o.removeSubscription(L)?0:17);f({cmd:"unsuback",granted:R,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let p=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=To(r?.headers.get?.("content-type"))),T=d.payload?.length>0?S(d.payload):void 0,b;try{b=await o.publish(d,T)}catch(R){Yr.warn(R),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:b===!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),n.sessions.delete(o),ns(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){Yr.error(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,IE.generate)(h,c);t(S),qr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return gi(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var IE,kH,ml,Kr,tA,eA,Yr,VH,GH,wE,$H=Re(()=>{IE=require("mqtt-packet");qH();kH=x(ss());Aa();Nn();nr();ml=x(ee()),Kr=x(M()),tA=x($()),eA=(0,tA.loggerWithTag)("auth-event"),Yr=(0,tA.loggerWithTag)("mqtt"),VH=(0,ml.get)(Kr.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(dne,"bypassAuth");a(fne,"start");wE=0;a(FH,"onSocket")});var Of={};Ye(Of,{component_errors:()=>Ya,loadComponent:()=>CE,loadComponentDirectories:()=>ZH,setErrorReporter:()=>pne});function ZH(e,t){t&&(nA=t),e&&(iA=e);let r=[];if((0,Gs.existsSync)(sA)){let n=(0,Gs.readdirSync)(sA,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,gt.join)(sA,o);r.push(CE(c,nA,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(CE(s,nA,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{XH=!0})}function pne(e){Sl=e}async function CE(e,t,r,s,n,i){if(!KH.has(e)){KH.set(e,!0),n&&(iA=n);try{let o;s&&(Ya=new Map);let c=(0,gt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Gs.existsSync)(c)?o=s?(0,jH.getConfigObj)():(0,WH.parseDocument)((0,Gs.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=oA;let u=[],_=s;for(let l in o){let d=o[l];if(Ya.set(s?l:(0,gt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let b=e,R;for(;!(0,Gs.existsSync)(R=(0,gt.join)(b,"node_modules",l));)if(b=(0,gt.dirname)(b),b.length<(0,JH.getHdbBasePath)().length){R=null;break}if(R)f=await CE(R,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=mne[l];if(!f)continue;u.push(f);let h=a(b=>(b.origin=r,ct(b)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,T=!p?.https&&p?.port;if($a.isMainThread&&(f=await f.startOnMainThread?.({server:tt,ensureTable:h,port:T,securePort:S,resources:t,...d})||f,s&&p))for(let b of[T,S])try{if(+b&&!YH.includes(b)){let R=aA.get(cA.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);R&&pl.default.warn("Session affinity is not recommended and may cause memory leaks"),(R||!hE)&&(YH.push(b),iH(b,R))}}catch(R){console.error("Error listening on socket",b,R,l)}if(t.isWorker&&(f=await f.start?.({server:tt,ensureTable:h,port:T,securePort:S,resources:t,...d})||f),iA.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,zH.handleHDBError)("Can not reference parent directories");let b=(0,gt.join)(e,d.files).replace(/\\/g,"/"),R=b.indexOf("/*");if(R>-1&&d.files!==oA[l]?.files&&!(0,Gs.existsSync)(b.slice(0,R)))throw new Error(`The path '${b.slice(0,R)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let L=(0,gt.basename)(e),H=d.path||"/";H=H.startsWith("/")?H:H.startsWith("./")?"/"+L+H.slice(2):H==="."?"/"+L:"/"+L+"/"+H;let P,k,B;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",k=(0,gt.join)(e,z)}else(B=b.indexOf("/*"))>-1&&(k=b.slice(0,B+1),P=(0,gt.relative)(e,k));let J=!1;if($a.isMainThread&&f.setupDirectory&&(J=await f.setupDirectory?.(H,k,t)),t.isWorker&&f.handleDirectory&&(J=await f.handleDirectory?.(H,k,t)),J)continue;for(let z of await(0,QH.default)(b,{onlyFiles:!1,objectMode:!0})){let{path:j,dirent:Te}=z;_=!0;let ce=(0,gt.relative)(e,j).replace(/\\/g,"/");if(P)if(ce.startsWith(P))ce=ce.slice(P.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${ce}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let de=H+(H.endsWith("/")?"":"/")+ce;try{if(Te.isFile()){let Le=await hne(j);$a.isMainThread&&await f.setupFile?.(Le,de,j,t),t.isWorker&&await f.handleFile?.(Le,de,j,t)}else $a.isMainThread&&await f.setupDirectory?.(de,j,t),t.isWorker&&await f.handleDirectory?.(de,j,t)}catch(Le){Le.message=`Could not load ${Te.isFile()?"file":"directory"} '${j}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${Le.message}`,Sl?.(Le),((0,Ka.getWorkerIndex)()===0?console:pl.default).error(Le),t.set(d.path||"/",new Tl(Le)),Ya.set(s?l:(0,gt.basename)(e),Le.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,gt.basename)(e)}' due to: ${h.message}`,Sl?.(h),((0,Ka.getWorkerIndex)()===0?console:pl.default).error(h),t.set(d.path||"/",new Tl(h),null,!0),Ya.set(s?l:(0,gt.basename)(e),h.message)}}if($a.isMainThread&&!XH&&i&&(0,Ka.watchDir)(e,async()=>ZH()),o.extensionModule)return await t_((0,gt.join)(e,o.extensionModule));if(!_&&t.isWorker){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;Sl?.(new Error(l)),((0,Ka.getWorkerIndex)()===0?console:pl.default).error(l),Ya.set((0,gt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,Sl?.(o),t.set("",new Tl(o))}}}var Gs,gt,$a,WH,aA,cA,QH,Ka,pl,zH,JH,Ene,jH,hne,sA,iA,XH,nA,Ya,mne,oA,YH,KH,Sl,Tl,bf=Re(()=>{Gs=require("fs"),gt=require("path"),$a=require("worker_threads"),WH=require("yaml"),aA=x(ee()),cA=x(M());cb();db();fb();a0();QB();eH();QH=x(require("fast-glob")),Ka=x(Ke()),pl=x($());Hh();nr();zH=x(se());Os();Ae();oH();JH=x(ee()),Ene=x(_H());hf();TH();$H();jH=x(Pr());mE();({readFile:hne}=Gs.promises),sA=aA.get(cA.CONFIG_PARAMS.COMPONENTSROOT),iA=new Map,Ya=new Map;a(ZH,"loadComponentDirectories");mne={REST:kf,rest:kf,graphqlSchema:Bh,jsResource:qh,fastifyRoutes:yR,login:Fh,static:wR,operationsApi:Ene,customFunctions:{},http:{},clustering:FR,authentication:Gu,mqtt:rA},oA={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(oA,"static",{value:{files:"web/**"}});YH=[],KH=new Map;a(pne,"setErrorReporter");a(CE,"loadComponent");Tl=class extends qt{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 zR=g((Qpe,tx)=>{var{isMainThread:ex}=require("worker_threads"),{getTables:Sne}=(Ae(),ne(Ge)),{loadComponentDirectories:Tne,loadComponent:gne}=(bf(),ne(Of)),{resetResources:Rne}=(xu(),ne(mP)),Ane=og(),One=Pr(),{dirname:bne}=require("path"),{getConnection:Nne}=st(),yne=ee(),wne=M(),uA=new Map;async function Ine(e=!1){!ex&&yne.get(wne.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Nne();try{ex&&await Ane()}catch(s){console.error(s)}let t=Rne();Sne(),t.isWorker=e,await gne(bne(One.getConfigFilePath()),t,"hdb",!0,uA),await Tne(uA,t);let r=[];for(let[s]of uA)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Ine,"loadRootComponents");tx.exports.loadRootComponents=Ine});var Ke=g((Jpe,Ci)=>{"use strict";var{Worker:Cne,MessageChannel:Dne,parentPort:dn,isMainThread:EA,threadId:Lne,workerData:Fn}=require("worker_threads"),{PACKAGE_ROOT:Mne}=M(),{join:ix,isAbsolute:Une,extname:Pne}=require("path"),{server:ox}=(nr(),ne(Pi)),{watch:vne,readdir:Bne}=require("fs/promises"),{totalmem:rx}=require("os"),gl=M(),ax=ee(),kn=$(),{randomBytes:Hne}=require("crypto"),{_assignPackageExport:xne}=require("../index"),qne=M(),sx=1024*1024,Ii=[],Es=[],Gne=50,hA=1e4,Fne="restart",cx="request_thread_info",ux="resource_report",lx="thread_info",_x="added-port",kne="ack",lA;xne("threads",Es);Ci.exports={startWorker:_A,restartWorkers:pA,shutdownWorkers:Wne,workers:Ii,setMonitorListener:tie,onMessageFromWorkers:Qne,onMessageByType:Sx,broadcast:Jne,broadcastWithAcknowledgement:Xne,setChildListenerByType:Kne,getWorkerIndex:dx,getWorkerCount:fx,getTicketKeys:hx,setMainIsWorker:$ne,setTerminateTimeout:Vne,restartNumber:Fn?.restartNumber||1};Es.onMessageByType=Sx;Es.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Es.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var mA;function Vne(e){hA=e}a(Vne,"setTerminateTimeout");function dx(){return Fn?Fn.workerIndex:mA?0:void 0}a(dx,"getWorkerIndex");function fx(){return Fn?Fn.workerCount:mA?1:void 0}a(fx,"getWorkerCount");function $ne(e){mA=e}a($ne,"setMainIsWorker");var Ex=1,DE;function hx(){return DE||(DE=EA?Hne(48):Fn.ticketKeys,DE)}a(hx,"getTicketKeys");Object.defineProperty(ox,"workerIndex",{get(){return dx()}});Object.defineProperty(ox,"workerCount",{get(){return fx()}});var mx={[cx](e,t){Zne(t)},[ux](e,t){eie(t,e)}};function _A(e,t={}){let r=process.constrainedMemory?.()||rx();r=Math.min(r,rx(),2e4*sx);let s=ax.get(gl.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/sx/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of Es){let _=new Dne;_.existingPort=u,i.push(_),o.push(_.port2)}Pne(e)||(e+=".js");let c=new Cne(Une(e)?e:ix(Mne,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:Ex=t.threadCount,name:t.name,restartNumber:Ci.exports.restartNumber,ticketKeys:hx()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:_x,port:u,threadId:c.threadId},[u]);return ME(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>_A(e,t),c.on("error",u=>{console.error("Worker error:",u),kn.error("Worker error:",u)}),c.on("exit",u=>{Ii.splice(Ii.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Gne?(t.unexpectedRestarts=c.unexpectedRestarts+1,_A(e,t)):kn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{mx[u.type]?.(u,c)}),Ii.push(c),sie(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(_A,"startWorker");var Yne=[gl.THREAD_TYPES.HTTP];async function pA(e=null,t=Math.max(Ex>3,1),r=!0){if(EA){if(r){let{loadRootComponents:o}=zR();await o()}Ci.exports.restartNumber++,t<1&&(t=t*Ii.length);let s=[],n=[];for(let o of Ii.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;kn.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Ci.exports.restartNumber,type:gl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Yne.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),hA*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===qne.ITC_EVENT_TYPES.CHILD_STARTED&&(kn.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");kn.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=_f();r&&(e==="http"||!e)&&ax.get(gl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else dn.postMessage({type:Fne,workerType:e})}a(pA,"restartWorkers");function Kne(e,t){mx[e]=t}a(Kne,"setChildListenerByType");function Wne(e){return pA(e,1/0,!1)}a(Wne,"shutdownWorkers");var px=[];function Qne(e){px.push(e)}a(Qne,"onMessageFromWorkers");var dA=new Map;function Sx(e,t){let r=dA.get(e);r||dA.set(e,r=[]),r.push(t)}a(Sx,"onMessageByType");var zne=10;async function Jne(e){let t=0;for(let r of Es)try{r.postMessage(e),t++>zne&&(t=0,await new Promise(setImmediate))}catch(s){kn.error("Unable to send message to worker",s)}}a(Jne,"broadcast");var LE=new Map,jne=1;function Xne(e){return new Promise(t=>{let r=0;for(let s of Es)try{let n=jne++,i=a(()=>{LE.delete(n),--r===0&&t(),s!==dn&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,LE.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of LE)o.port===s&&o()})),s.postMessage(e),r++}catch(n){kn.error("Unable to send message to worker",n)}r===0&&t()})}a(Xne,"broadcastWithAcknowledgement");function Zne(e){e.postMessage({type:lx,workers:Tx()})}a(Zne,"sendThreadInfo");function Tx(){let e=Date.now();return Ii.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(Tx,"getChildWorkerInfo");function eie(e,t){e.resources=t,e.resources.updated=Date.now()}a(eie,"recordResourceReport");var fA;function tie(e){fA=e}a(tie,"setMonitorListener");var rie=1e3,nx=!1;function sie(){nx||(nx=!0,setInterval(()=>{for(let e of Ii){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}fA&&fA()},rie).unref())}a(sie,"startMonitoring");var nie=1e3;if(dn){ME(dn);for(let e=0,t=Fn.addPorts.length;e<t;e++){let r=Fn.addPorts[e];r.threadId=Fn.addThreadIds[e],ME(r)}setInterval(()=>{let e=process.memoryUsage();dn.postMessage({type:ux,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},nie).unref(),lA=a(()=>new Promise((e,t)=>{dn.on("message",r),dn.postMessage({type:cx});function r(s){s.type===lx&&(dn.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else lA=Tx;Ci.exports.getThreadInfo=lA;function ME(e,t){Es.push(e),e.on("message",r=>{if(r.type===_x)r.port.threadId=r.threadId,ME(r.port);else if(r.type===kne){let s=LE.get(r.id);s&&s()}else{for(let n of px)n(r,e);let s=dA.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){kn.error(i)}}}).on("close",()=>{Es.splice(Es.indexOf(e),1)}).on("exit",()=>{Es.splice(Es.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(ME,"addPort");if(EA){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Bne(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(ix(s,i.name));try{for await(let{filename:i}of vne(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await pA(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");Ci.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else dn.on("message",async e=>{let{type:t}=e;t===gl.ITC_EVENT_TYPES.SHUTDOWN&&(Ci.exports.restartNumber=e.restartNumber,dn.unref(),setTimeout(()=>{kn.warn("Thread did not voluntarily terminate",Lne),process.exit(0)},hA).unref())})});var TC={};Ye(TC,{AUDIT_STORE_OPTIONS:()=>Cx,createAuditEntry:()=>o_,openAuditStore:()=>BE,readAuditEntry:()=>Dt,setAuditRetention:()=>oie,transactionKeyEncoder:()=>Ix});function BE(e){let t=e.auditStore=e.openDB(Nx.AUDIT_STORE_NAME,Cx);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let s=null;function n(i=UE){clearTimeout(s),s=setTimeout(async()=>{if(t.rootStore.status==="closed")return;let o=0,c;try{for(let{key:u,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-SA})){if((_[0]&15)===RA){let l=Dt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=iie){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,SA/10)),n(i)}},i).unref()}return a(n,"scheduleAuditCleanup"),t.scheduleAuditCleanup=n,(0,vE.getWorkerIndex)()===(0,vE.getWorkerCount)()-1&&n(UE),t}function oie(e,t=UE){SA=e,UE=t}function o_(e,t,r,s,n,i,o){let c=Dx[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let u=1;s&&(s>1?Wa.setFloat64(0,s):hs.set(sm),u=9),f(0),f(t),d(r),Wa.setFloat64(u,e),u+=8,n?d(n):hs[u++]=0,hs[s?8:0]=c;let l=hs.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,Qa.writeKey)(E,hs,u);let p=u-h-1;p>127?p>16383?(OA.error("Key or username was too large for audit entry",E),u=h+1,hs[h]=0):(hs.copyWithin(h+2,h+1,u),Wa.setUint16(h,p|32768),u++):hs[h]=p}function f(E){E<128?hs[u++]=E:E<16384?(Wa.setUint16(u,E|32768),u+=2):E<1056964608?(Wa.setUint32(u,E|3221225472),u+=4):(hs[u]=255,Wa.setUint32(u+1,E),u+=5)}}function Dt(e){try{let t=e.dataView||(e.dataView=new AA(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:Dx[s&7],tableId:i,get recordId(){return bx(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?bx(e,l,d):void 0},getValue(f,E,h){if(s&TA||s&gA&&!E)return f.decoder.decode(e.subarray(t.position));if(s&gA&&h)return bA(f.getEntry(this.recordId),h,f)}}}catch(t){return OA.error("Reading audit entry error",t,e),{}}}function bx(e,t,r){let s=e.subarray(t,r);return(0,Qa.readKey)(s,0,r-t)}var Qa,PE,Nx,yx,vE,wx,OA,hs,Wa,Ix,Cx,SA,iie,UE,TA,gA,gx,RA,Rx,Ax,Ox,Dx,AA,Hi=Re(()=>{Qa=require("ordered-binary"),PE=x(ee()),Nx=x(dt()),yx=x(M()),vE=x(Ke()),wx=x(Q());Oc();OA=x($());HE();(0,PE.initSync)();hs=Buffer.alloc(1024),Wa=new DataView(hs.buffer,hs.byteOffset,1024),Ix={writeKey(e,t,r){return e===Ac?(t.set(Ac,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Qa.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,Qa.readKey)(e,t,r)}},Cx={encoding:"binary",keyEncoder:Ix},SA=(0,wx.convertToMS)((0,PE.get)(yx.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,iie=1e3,UE=1e4;a(BE,"openAuditStore");a(oie,"setAuditRetention");TA=16,gA=32,gx=1,RA=2,Rx=3,Ax=4,Ox=5,Dx={put:gx|TA,[gx]:"put",delete:RA,[RA]:"delete",message:Rx|TA,[Rx]:"message",invalidate:Ax,[Ax]:"invalidate",patch:Ox|gA,[Ox]:"patch"};a(o_,"createAuditEntry");a(Dt,"readAuditEntry");AA=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(bx,"readKeySafely")});var NA={};Ye(NA,{add:()=>xE,applyReverse:()=>Lx,getRecordAtTime:()=>bA,rebuildUpdateBefore:()=>qE});function xE(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function qE(e,t){let r=null;for(let s in e)if(s in t){let n=t[s];if(n?.__op__){let i=e[s];if(i?.__op__)if(i.__op__===n.__op__)r||(r={}),r[s]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[s]=i,xE(r,s,n)}}else r||(r={}),r[s]=e[s];return r}function Lx(e,t){for(let r in t){let s=t[r];if(s?.__op__){let n=aie[s.__op__]?.reverse;if(n)n(e,r,{value:s.value});else throw new Error(`Unsupported operation ${s.__op__}`)}else e[r]=Mx}}function bA(e,t,r){let s=r.rootStore.auditStore,n=Object.assign({},e.value),i=e.localTime;for(;i>t;){let u=s.get(i),_=Dt(u);switch(_.type){case"put":n=_.getValue(r);break;case"patch":Lx(n,_.getValue(r));break;case"delete":n=null}i=_.previousLocalTime}let o={},c=0;for(let u in n)n[u]===Mx&&(o[u]=!0,c++);for(;c>0&&i>0;){let u=s.get(i),_=Dt(u),l;switch(_.type){case"put":l=_.getValue(r);break;case"patch":l=_.getValue(r);break}for(let d in l)o[d]&&(n[d]=l[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let u in o)n[u]=null;return n}var aie,Mx,HE=Re(()=>{Hi();a(xE,"add");xE.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};aie={add:xE};a(qE,"rebuildUpdateBefore");a(Lx,"applyReverse");Mx={};a(bA,"getRecordAtTime")});function Wr(e){return e[It]||(e[It]=Object.create(null))}function $E(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u,_;if(o.resolve)_={get(){return o.resolve(this,this[Oe])},set(l){return o.set(this,l)},configurable:!0};else{switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a string, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a string, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a number, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new ms.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new ms.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"BigInt":u=a(function(l){if(!(typeof l=="bigint"||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=BigInt(l);else throw new ms.ClientError(`${c} must be a number, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new ms.ClientError(`${c} must be a Date, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Wr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be an object, attempt to assign ${l}`);Wr(this)[c]=l},"set")}_={get(){let l=this[It];if(l&&c in l){let f=l[c];if(f?.__op__){let E=this[_e]?.[c];return f.update(E)}return f}let d=this[_e]?.[c];if(d&&typeof d=="object"){let f=Px(d,o);if(f)return l||(l=this[It]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,s[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[It];return u?.[o]!==void 0?u[o]:this[_e]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new ms.ClientError("Can not add a property to a sealed table schema");Wr(this)[o]=c}),i("deleteProperty",function(o){Wr(this)[o]=void 0}),i("toJSON",function(){let o=this[It],c;for(let _ in o){c||(c=Object.assign({},this[_e]));let l=o[_];if(l?.__op__){let d=c[_];l=l.update(d)}c[_]=l}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[_e])),Object.assign(c,this)),c||this[_e]}),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 Px(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){if(n?.[_e])throw new Error("Can not track an already tracked object, check for circular references");this[_e]=n}},$E(r,t)),new r(e)):new GE(e);case Array:let s=new kE(e.length);s[_e]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=Px(o,t?.elements)),s[n]=o}return s;default:return e}}function nd(e){let t=e[It],r;for(let n in t){r||(r=Object.assign({},e[_e]));let i=t[n];if(i&&typeof i=="object")if(i.__op__){let o=r[n];i=i.update(o)}else i=nd(i);r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[_e])),Object.assign(r,e)),r||e[_e]}function Co(e,t=e[It]){let r;if(Ux.call(e,_e)&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=Co(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[s]=i}return Object.freeze(r)}for(let s in t){r||(r=Object.assign({},e[_e]));let n=t[s];if(n&&typeof n=="object")if(n.__op__){let i=NA[n?.__op__];if(i)i(r,s,n);else throw new Error("Invalid CRDT operation "+n.__op__);continue}else n=Co(n);r[s]=n}return r?Object.freeze(r):Ux.call(e,_e)?e[_e]:e}function FE(e){let t=e[_e];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Io]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[_e]===n){if(FE(i))return!0}else return!0}}else{let r=e[It];if(r&&!t)return!0;for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[_e]===i){if(FE(n))return!0}else return!0}else return!0}}return!1}var ms,It,GE,Ux,Io,kE,VE,id=Re(()=>{Os();ms=x(se());HE();It=Symbol("own-data");a(Wr,"getChanges");a($E,"assignTrackedAccessors");a(Px,"trackObject");GE=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[_e])throw new Error("Can not track an already tracked object, check for circular references");this[_e]=t}};$E(GE,{});a(nd,"collapseData");Ux=Object.prototype.hasOwnProperty;a(Co,"deepFreeze");a(FE,"hasChanges");Io=Symbol.for("has-array-changes"),kE=class extends Array{static{a(this,"TrackedArray")}[Io];constructor(t){super(t)}splice(...t){return this[Io]=!0,super.splice(...t)}push(...t){return this[Io]=!0,super.push(...t)}pop(){return this[Io]=!0,super.pop()}unshift(...t){return this[Io]=!0,super.unshift(...t)}shift(){return this[Io]=!0,super.shift()}};kE.prototype.constructor=Array;VE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var Lp={};Ye(Lp,{CONTEXT:()=>Oe,ID_PROPERTY:()=>Me,IS_COLLECTION:()=>ps,RECORD_PROPERTY:()=>_e,Resource:()=>qt,snake_case:()=>uie,transformForSelect:()=>KE});function uie(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function vx(e,t){if(Rl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(Rl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),s=new wA;for(let n=0;n<r.length;n++){let i=r[n];if(!i&&n===r.length-1){Rl=!0;break}s[n]=t.coerceId(decodeURIComponent(i))}return s}function Qr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_,l;if(r?(o?(l=i,o=o[Oe]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[Oe]||i):l=i:(l=n,c=l[Me]??l[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[Oe]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[],_=!0;for(let E of n){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null,_=!1)))}else{if(typeof(c=n.url)=="string"){let E=c.indexOf("?");if(E>-1){let p=this.parseQuery(c.slice(E+1));u?u=Object.assign(p,u):u=p,c=c.slice(0,E)}let h=this.parsePath(c,o,u);h?.id!==void 0?(h.query&&(u?u=Object.assign(h.query,u):u=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=n.id??null,c==null&&(_=!0))}else c=n??null,c==null&&(_=!0);o||(o={});let d;if(u?.ensureLoaded!=null||u?.async||_?(d=Object.assign({},t),u?.ensureLoaded!=null&&(d.ensureLoaded=u.ensureLoaded),u?.async&&(d.async=u.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 Xe(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,u,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,l,o):E.allowUpdate(o.user,l,o):t.type==="create"?E.allowCreate(o.user,l,o):E.allowDelete(o.user,u,o);if(h?.then)return h.then(p=>{if(!p)throw new YE(o.user);return typeof l?.then=="function"?l.then(S=>e(E,u,o,S)):e(E,u,o,l)});if(!h)throw new YE(o.user)}return typeof l?.then=="function"?l.then(h=>e(E,u,o,h)):e(E,u,o,l)}a(f,"authorizeActionOnResource")}}function zr(e,t){let r=new xx.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function yA(e,t,r){let s=e[_e];if(s){let n=e[It];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:n&&i in n?n[i]:(c=t?.[i])?c(e,r):s[i]}}else return t?n=>{let i=t[n];return i?i(e,r):e[n]}:n=>e[n]}function KE(e,t){let r=t?.propertyResolvers,s=t[Oe],n;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):yA(c,r,s)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(c);let _=[],l=i(yA(u,r,s));for(let d of e)_.push(l(d));return _},"transform");let o=e.forceNulls;return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(f=>f&&typeof f=="object"?c(f):f);let _={},l=i(yA(u,r,s)),d;for(let f of e){let E=l(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){n||(n={});let u=n[c.name];if(!u){let l=r[c.name]?.definition?.tableClass;u=n[c.name]=KE(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var Bx,Hx,xx,Oe,Me,ps,_e,cie,qt,YE,Rl,wA,Os=Re(()=>{Bx=require("crypto");mc();Hx=require("../index"),xx=x(se());id();eo();Gf();Oe=Symbol.for("context"),Me=Symbol.for("primary-key"),ps=Symbol("is-collection"),_e=Symbol("stored-record"),cie={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},qt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Me]=t;let s=r?.[Oe];this[Oe]=s!==void 0?s:r||null}static get=Qr(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null&&!c.selectApplied){let _=KE(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Qr(function(t,r,s,n){if(Array.isArray(n)&&t[ps]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):zr(t,"put")},{hasContent:!0,type:"update"});static patch=Qr(function(t,r,s,n){return t.patch?t.patch(n,r):zr(t,"patch")},{hasContent:!0,type:"update"});static delete=Qr(function(t,r,s,n){return t.delete?t.delete(r):zr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,Bx.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),Xe(s,()=>{let i=new this(n,s),o=i.update?i.update(r):zr(i,"update");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Qr(function(t,r,s,n){return t.invalidate?t.invalidate(r):zr(t,"delete")},{hasContent:!1,type:"update"});static post=Qr(function(t,r,s,n){return t[Me]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Qr(function(t,r,s,n){return t.connect?t.connect(n,r):zr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Qr(function(t,r,s,n){return t.subscribe?t.subscribe(r):zr(t,"subscribe")},{type:"read"});static publish=Qr(function(t,r,s,n){return t[Me]!=null&&t.update?.(),t.publish?t.publish(n,r):zr(t,"publish")},{hasContent:!0,type:"create"});static search=Qr(function(t,r,s,n){let i=t.search?t.search(r):zr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=KE(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Qr(function(t,r,s,n){return t.search?t.search(n,r):zr(t,"search")},{hasContent:!0,type:"read"});static copy=Qr(function(t,r,s,n){return t.copy?t.copy(n,r):zr(t,"copy")},{type:"create"});static move=Qr(function(t,r,s,n){return t.move?t.move(n,r):zr(t,"move")},{type:"delete"});post(t){if(this[ps])return this.constructor.create(this[Me],t,this[Oe]);zr(this,"post")}static isCollection(t){return t?.[ps]}static coerceId(t){return t}static parseQuery(t){return qf(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let o=t.slice(n+1);t=t.slice(0,n);let c=r?.headers&&cie[o];if(c)r.headers.set("accept",c);else if(s)s.property=o;else return{query:{property:o},id:vx(t,this),isCollection:Rl}}let i=vx(t,this);return Rl?{id:i,isCollection:!0}:i}static getResource(t,r,s){let n,i=r[Oe],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=s?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[Me]===t&&_.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Me],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else n=new c(t,i);return o&&(n[ps]=!0),n}subscribe(t){return new As}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new As}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[Me]}getContext(){return this[Oe]}};qt.prototype[Oe]=null;(0,Hx._assignPackageExport)("Resource",qt);a(uie,"snake_case");YE=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(vx,"pathToId");wA=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Qr,"transactional");a(zr,"missingMethod");a(yA,"selectFromObject");a(KE,"transformForSelect")});function Gx(e,t,r,s){let n=e.primaryStore.env.path,i=e.primaryStore.tableId;za||((0,WE.onMessageByType)(qx,l=>{Fx(l.path)}),za=Object.create(null));let o=za[n]||(za[n]=[]);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=ga(t);let u=new CA(r);u.startTime=s;let _=c.get(t);return _?_.push(u):(c.set(t,_=[u]),_.tables=c,_.key=t),u.subscriptions=_,u}function Fx(e,t){if(!za)return;let r=za[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:r.lastTxnTime,exclusiveStart:!0})){r.lastTxnTime=n;let o=Dt(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=ga(o.recordId),d=0;do{let f=c.get(l);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=n){(0,IA.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,p)}catch(p){console.error(p),(0,IA.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E):l=null,d++}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function kx(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,WE.broadcast)({type:qx,path:n}),Fx(n,!0)})}}var IA,WE,qx,za,SSe,CA,Vx=Re(()=>{IA=x($()),WE=x(Ke());mc();xu();Hi();qx="transaction",SSe=Buffer.alloc(4096);a(Gx,"addSubscription");CA=class extends As{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(Fx,"notifyFromTransactionData");a(kx,"listenToCommits")});var uR={};Ye(uR,{coerceType:()=>QE,makeTable:()=>jE,setServerUtilities:()=>Sie,updateResource:()=>zE});function jE(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l,sealed:d}=e,{expirationMS:f,evictionMS:E,audit:h,trackDeletes:p}=e,{attributes:S}=e;S||(S=[]),kx(i,u);let T=om(i,s,u),b=0,R,L,H={},P=Promise.resolve(),k,B,J;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(k=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(B=K),K.expiresAt&&(J=K),K.isPrimaryKey&&(H=K);let z,j=[],Te=[],ce=1,de=2,Le={},Be={},Ct=864e5,ql,Gl,Yn,JA=!1,fh,Wq=i.getRange({start:!1,end:!1}).constructor,Qq=10,zq=6;h&&ZA();class ze extends qt{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=k;static updatedTimeProperty=B;static propertyResolvers;static sources=[];static get expirationMS(){return f}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,O){O&&(this.sourceOptions=O,(O.expiration||O.eviction||O.scanInterval)&&this.setTTLExpiration(O)),O?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),L=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let w=a(D=>{let y=this.sources.slice(0,-1);if(y=y.filter(U=>U[D]&&(!U[D].reliesOnPrototype||U.prototype[D])),y.length>0)if(y.length===1){let U=y[0];return(G,C,v)=>{if(G?.source!==U)return U[D](C,v,G)}}else return(U,G,C)=>{let v=[];for(let F of y){if(U?.source===F)break;v.push(F[D](G,C,U))}return Promise.all(v)}},"getApplyToIntermediateSource"),N=this.sources[this.sources.length-1],A=a(D=>{if(N[D]&&(!N[D].reliesOnPrototype||N.prototype[D]))return(y,U,G)=>{if(!y?.source)return N[D](U,G,y)}},"getApplyToCanonicalSource");return Le={put:A("put"),patch:A("patch"),delete:A("delete"),publish:A("publish")},Be={put:w("put"),patch:w("patch"),delete:w("delete"),publish:w("publish"),invalidate:w("invalidate")},(async()=>{let D=!1,y=a(async(U,G)=>{let C=U.value,v=U.table?rt[c][U.table]:ze;if(c===ks.SYSTEM_SCHEMA_NAME&&(U.table===ks.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||U.table===ks.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),U.id===void 0&&(U.id=C[v.primaryKey],U.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(U));U.source=m;let F=await v.getResource(U.id,G,Ja);switch(U.type){case"put":return F._writeUpdate(C,!0,Ja);case"patch":return F._writeUpdate(C,!1,Ja);case"delete":return F._writeDelete(Ja);case"publish":return F._writePublish(C,Ja);case"invalidate":return F.invalidate(Ja);default:Ze.error("Unknown operation",U.type,U.id)}},"writeUpdate");try{let U=m.subscribe;U&&p==null&&(p=!0);let G=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Lo.getWorkerIndex)()):(0,Lo.getWorkerIndex)()===0,C=U&&G&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let v;for await(let F of C)try{if(!(F.type==="transaction"?F.writes[0]:F)){Ze.error("Bad subscription event",F);continue}if(F.source=m,v)if(F.beginTxn)v.resolve();else{y(F,v);continue}if(F.type==="end_txn")continue;let be=Xe(F,()=>{if(F.type==="transaction"){let te=[];for(let Pe of F.writes)try{te.push(y(Pe,F))}catch(ae){throw ae.message+=" writing "+JSON.stringify(Pe)+" of event "+JSON.stringify(F),ae}return Promise.all(te)}else if(F.type==="define_schema"){let te=this.attributes.slice(0),Pe;for(let ae of F.attributes)te.find(qe=>qe.name===ae.name)||(te.push(ae),Pe=!0);Pe&&(ct({table:n,database:c,attributes:te,origin:"cluster"}),Il.signalSchemaChange(new Cl.SchemaEventMsg(process.pid,ks.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return F.beginTxn?(v=F,y(F,F),new Promise(te=>{v.resolve=te})):y(F,F)});D&&(await be,Il.signalUserChange(new Cl.UserEventMsg(process.pid))),F.onCommit&&(be?.then?be.then(F.onCommit):F.onCommit())}catch(oe){Ze.error("error in subscription handler",oe)}}}catch(U){Ze.error(U)}})(),this}static getResource(m,O,w){let N=super.getResource(m,O,w);if(m!=null){tc(m);try{if(N.hasOwnProperty(_e))return N;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let A=!w?.async||i.cache?.get(m),D=gs(O),y=D.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Eh(m,O,{transaction:y},A,U=>{if(U?zE(N,U):N[_e]=null,O.onlyIfCached&&O.noCacheStore){if(!N.doesExist())throw new Ss.ServerError("Entry is not cached",504)}else if(w?.ensureLoaded){let G=hh(m,U,O,N);if(G)return D?.disregardReadTxn(),N[DA]=!0,MA(G,C=>(zE(N,C),N))}return N})}catch(A){throw A.message.includes("Unable to serialize object")&&(A.message+=": "+JSON.stringify(m)),A}}return N}ensureLoaded(){let m=hh(this[Me],this[Jr],this[Oe]);if(m)return this[DA]=!0,MA(m,O=>{this[Jr]=O,this[_e]=O.value,this[yl]=O.version})}static setTTLExpiration(m){if(typeof m=="number")f=m*1e3,E||(E=0);else if(m&&typeof m=="object")f=m.expiration*1e3,E=(m.eviction||0)*1e3,Ct=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(f<0)throw new Error("Expiration can not be negative");Ct=Ct||(f+E)/4,ph()}static enableAuditing(m=!0){h=m,m&&ZA(),ze.audit=m}static coerceId(m){return m===""?null:QE(m,H)}static async dropTable(){if(delete rt[c][n],c===o){for(let m of S)l.remove(ze.tableName+"/"+m.name),r[m.name]?.drop();l.remove(ze.tableName+"/"),i.drop(),await l.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));Il.signalSchemaChange(new Cl.SchemaEventMsg(process.pid,ks.OPERATIONS_ENUM.DROP_TABLE,c,n))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[ps])return this.search(m);if(this[Me]===null){if(m?.conditions)return this.search(m);let O=ze.getRecordCount();return{recordCount:O.recordCount,estimatedRecordRange:O.estimatedRange,records:"./",name:n,database:c,attributes:S}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[Oe]?.returnNonexistent)return this}allowRead(m,O){let w=kl(m);if(w?.read){if(w.isSuperUser)return!0;let N=w.attribute_permissions,A=O?.select;if(N?.length>0||JA&&A){if(O||(O={}),A){let D=N?.length>0&&LA(N,"read");O.select=A.map(y=>{let U=y.name||y;if(!D||D[U]){let G=Yn[U]?.definition?.tableClass;if(G){if(y.name||(y={name:y}),!G.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else O.select=N.filter(D=>D.read&&!Yn[D.attribute_name]).map(D=>D.attribute_name);return O}else return!0}}allowUpdate(m,O){let w=kl(m);if(w?.update){let N=w.attribute_permissions;if(N?.length>0){let A=LA(N,"update");for(let D in O)if(!A[D])return!1;for(let D of N){let y=D.attribute_name;!D.update&&!(y in O)&&(O[y]=this.getProperty(y))}}return!0}}allowCreate(m,O){if(this[ps]){let w=kl(m);if(w?.insert){let N=w.attribute_permissions;if(N?.length>0){let A=LA(N,"insert");for(let D in O)if(!A[D])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return kl(m)?.delete}update(m,O){if(!gs(this[Oe]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let N;return typeof m=="object"&&m&&(O?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[_e]={},this[It]=m):(N=this[It],N&&(m=Object.assign(N,m)),this[It]=N=m)),this._writeUpdate(this[It],O),this}addTo(m,O){if(typeof O=="number")this[Al]===Yx?this.set(m,(+this.getProperty(m)||0)+O):(this[Al]||this.update(),this.set(m,new VE(O)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,O){if(typeof O=="number")return this.addTo(m,-O);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let O=this[Oe],w=this[Me];tc(w),gs(this[Oe]).addWrite({key:w,store:i,invalidated:!0,entry:this[Jr],nodeName:this[Oe]?.nodeName,before:Le.invalidate?.bind(this,O,w),beforeIntermediate:Be.invalidate?.bind(this,O,w),commit:(A,D)=>{if(D?.version>A)return;let y=null;for(let U in r)y||(y={}),y[U]=this.getProperty(U);T(w,y,this[Jr],A,Ol,h,this[Oe],0,"invalidate")}})}static evict(m,O,w){let N=this.Source,A;if(!((L||h)&&(!O||(A=i.getEntry(m),!A||!O)||A.version!==w))){if(L){if(i.hasLock(m,A.version))return;let D;for(let y in r)D||(D={}),D[y]=O[y];if(D)return T(m,D,A,w,bl,null,null,0,null,!0)}return i.ifVersion(m,w,()=>{Fl(m,O,null)}),h?T(m,null,A,w,bl,null,null,0,null,!0):i.remove(m,w)}}lock(){throw new Error("Not yet implemented")}static operation(m,O){return m.table||=n,m.schema||=c,jx.operation(m,O)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,O,w){let N=this[Oe],A=gs(N),D=this[Me];tc(D);let y=this[Jr];this[Al]=O?Yx:hie;let U={key:D,store:i,entry:y,nodeName:N?.nodeName,validate:G=>{m||(m=this[It]),O||m&&FE(m)?N?.source||(A.checkOverloaded(),this.validate(m,!O),B&&(m[B.name]=B.type==="Date"?new Date(G):B.type==="String"?new Date(G).toISOString():G),O&&(t&&m[t]!==D&&(m[t]=D),k&&(y?.value?m[k.name]=y?.value[k.name]:m[k.name]=k.type==="Date"?new Date(G):k.type==="String"?new Date(G).toISOString():G),m=Co(m))):A.removeWrite(U)},before:O?Le.put?()=>Le.put(N,D,m):null:Le.patch?()=>Le.patch(N,D,m):Le.put?()=>Le.put(N,D,Co(this)):null,beforeIntermediate:O?Be.put?()=>Be.put(N,D,m):null:Be.patch?()=>Be.patch(N,D,m):Be.put?()=>Be.put(N,D,Co(this)):null,commit:(G,C,v)=>{if(v){if(N&&C?.version>(N.lastModified||0)&&(N.lastModified=C.version),this[Jr]=C,C?.value?.[_e])throw new Error("Can not assign a record to a record, check for circular references");O||(this[_e]=C?.value??null)}this[It]=m,this[yl]=G;let F=C?.value,oe=m;if(this[Al]=0,C?.version>=G)if(h){let ae=C.localTime,qe=C.version;for(;oe&&(ae>G||qe>=G&&ae>0);){let re=u.get(ae),X=Dt(re);if(qe=X.version,qe>G){if(X.type==="patch"){let ge=X.getValue(i);oe=qE(oe,ge)}else if(X.type==="put"||X.type==="delete")return}else if(qe===G)return;ae=X.previousLocalTime}}else{if(O)return;oe=qE(oe,F)}let be;if(O?be=oe:(this[_e]=F,be=O?oe:Co(this,oe)),this[_e]=be,be?.[_e])throw new Error("Can not assign a record to a record, check for circular references");let te;O||(te=m),Fl(D,F,be);let Pe=O?"put":"patch";T(D,be,C,G,0,h,N,N.expiresAt||(f?f+Date.now():0),Pe,!1,te)}};A.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[ps]){for await(let O of this.search(m))(await ze.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[_e]?this._writeDelete(m):!1}_writeDelete(m){let O=gs(this[Oe]),w=this[Me];tc(w);let N=this[Oe];return O.addWrite({key:w,store:i,resource:this,nodeName:N?.nodeName,before:Le.delete?.bind(this,N,w),beforeIntermediate:Be.delete?.bind(this,N,w),commit:(A,D,y)=>{let U=D?.value;y&&(N&&D?.version>(N.lastModified||0)&&(N.lastModified=D.version),zE(this,D)),!(D?.version>A)&&(Fl(this[Me],U),Ze.trace("Write delete entry",w,A),h||p?(T(w,null,this[Jr],A,0,h,this[Oe],0,"delete"),h||ph()):i.remove(this[Me]))}}),!0}search(m){let O=this[Oe],w=gs(O);if(!m)throw new Error("No query provided");let N=m.conditions;N?N.length===void 0&&(N=N[Symbol.iterator]?Array.from(N):[N]):N=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Me]&&(N=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(N));let A,D={};function y(X,ge){let He;switch(ge){case"and":case void 0:if(X.length<1)throw new Error('An "and" operator requires at least one condition');He=!0;break;case"or":if(X.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ge)}let Vs=He&&{},Kn;for(let $e of X){if($e.conditions){$e.conditions=y($e.conditions,$e.operator);continue}let Ht=$e[0]??$e.attribute,es=Ht==null?H:Bn(S,Ht);if(es){if(He){let $s=Hs(Ht),xt=Vs[$s];xt?(xt.push($e),Kn=!0):Vs[$s]=[$e]}(es.type||vg[$e.comparator])&&($e[1]===void 0?$e.value=G($e.value,es):$e[1]=G($e[1],es))}else if(Ht!=null)throw(0,Ss.handleHDBError)(new Error,`${Ht} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return X;if(Kn)for(let $e in Vs){let Ht=Vs[$e],es=Ht.length;if(es>1)for(let $s=0;$s<es;$s++){let xt=Ht[$s];if(xt.comparator==="ge"||xt.comparator==="greater_than_equal")for(let Wn=0;Wn<es;Wn++){let vo=Ht[Wn];(vo.comparator==="le"||vo.comparator==="less_than_equal")&&(xt.comparator="between",xt.value=[xt.value,vo.value],X.splice(X.indexOf(vo),1))}if(xt.comparator==="equals"||!xt.comparator){for(let Wn=0;Wn<es;Wn++)if(Wn!==$s){let vo=Ht[Wn];X.splice(X.indexOf(vo),1)}break}}}return X}a(y,"prepareConditions");function U(X,ge){if(m.enforceExecutionOrder)return X;for(let He of X)He.conditions&&(He.conditions=U(He.conditions,He.operator));return X.length>1&&ge!=="or"?(0,Jx.sortBy)(X,xf(ze)):X}a(U,"orderConditions");function G(X,ge){return Array.isArray(X)?X.map(He=>QE(He,ge)):QE(X,ge)}a(G,"coerceTypedValues");let C=m.operator;(N.length>0||C)&&(N=y(N,C));let v=typeof m.sort=="object"&&m.sort,F;if(v&&C!=="or"){let X=v.attribute;if(A=N.find(ge=>Hs(ge.attribute)===Hs(X)),!A){if(!Bn(S,X))throw(0,Ss.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not a defined attribute`,404);A={attribute:X,comparator:"sort"},N.push(A)}A.descending=!!v.descending}N=U(N,C),v&&(N[0]===A?v.next&&(F={dbOrderedAttribute:v.attribute,attribute:v.next.attribute,descending:v.next.descending,next:v.next.next}):(A&&N.splice(N.indexOf(A),1),F=v));let oe=m.select;if(N.length===0&&(N=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:N,operator:C,postOrdering:F,selectApplied:!!oe};let be=w.useReadTxn(),te=Bg(N,C,ze,be,m,O,(X,ge)=>jA(X,oe,O,be,ge),D),Pe=m.ensureLoaded!==!1;F||(te=re(te));let ae=ze.transformEntryForSelect(oe,O,be,D,Pe,!0),qe=ze.transformToOrderedSelect(te,oe,F,be,O,ae);function re(X){return m.offset||m.limit!==void 0?X.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):X}return a(re,"applyOffset"),F&&(qe=re(qe)),qe.onDone=()=>{qe.onDone=null,w.doneReadTxn()},qe.selectApplied=!0,qe.getColumns=()=>{if(oe){let X=[];for(let ge of oe)ge==="*"?X.push(...S.map(He=>He.name)):X.push(ge.name||ge);return X}return S.map(X=>X.name)},qe}static transformToOrderedSelect(m,O,w,N,A,D){let y=new Wq;if(w){m=jA(m,O,N,A,null);let U;y.iterate=function(){let C,v=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),F,oe=w.dbOrderedAttribute,be,te,Pe=!0;function ae(re){let X=re.next&&ae(re.next),ge=re.descending;return(He,Vs)=>{let Kn=mh(He,re.attribute,N),$e=mh(Vs,re.attribute,N),Ht=ge?(0,Mo.compareKeys)($e,Kn):(0,Mo.compareKeys)(Kn,$e);return Ht===0?X?.(He,Vs)||0:Ht}}a(ae,"createComparator");let qe=ae(w);return{async next(){let re;if(C)if(re=C.next(),re.done){if(F)return y.onDone&&y.onDone(),re}else return{value:await D.call(this,re.value)};U=[],be&&U.push(be);do if(re=await v.next(),re.done){if(F=!0,U.length)break;return y.onDone&&y.onDone(),re}else{let X=re.value;if(X?.then&&(X=await X),oe){let ge=mh(X,oe,N);if(Pe)Pe=!1,te=ge;else if(ge!==te){te=ge,be=X;break}}U.push(X)}while(!0);return w.isGrouped,U.sort(qe),C=U[Symbol.iterator](),re=C.next(),re.done?(y.onDone&&y.onDone(),re):{value:await D.call(this,re.value)}},return(){y.onDone&&y.onDone(),v.return()},throw(){y.onDone&&y.onDone(),v.throw()}}};let G=a(C=>{if(typeof O=="object"&&Array.isArray(C.attribute))for(let v=0;v<O.length;v++){let F=O[v],oe;if(F.name===C.attribute[0]){for(oe=F.sort||(F.sort={});oe.next;)oe=oe.next;oe.attribute=C.attribute.slice(1),oe.descending=C.descending}else F===C.attribute[0]&&(O[v]=oe={name:F,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&G(C.next)},"applySortingOnSelect");G(w)}else y.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),y=y.map(D);return y}static transformEntryForSelect(m,O,w,N,A,D){if(m&&(m===t||m?.length===1&&m[0]===t)){let C=a(v=>v?.key??v,"transform");return m===t?C:m.asArray?v=>[C(v)]:v=>({[t]:C(v)})}let y;A&&L&&!m?.every(C=>{let v;return typeof C=="object"?v=C.name:v=C,r[v]||v===t})&&(y=!0);let U,G=a(function(C){let v;if(C!=null){if(fh=C,v=C.value||C.deref?.(),!v&&(C.key===void 0||C.deref)){if(C=Eh(C.key??C,O,{transaction:w,lazy:m?.length<4},this.isSync,F=>F),C?.then)return C.then(G.bind(this));v=C?.value}if(y&&(C.metadataFlags&(Ol|bl)||C.expiresAt&&C.expiresAt<Date.now())){let F=hh(C.key??C,C,O);if(F?.then)return F.then(G)}}if(v==null)return D?Do.SKIP:v;if(m&&!(m[0]==="*"&&m.length===1)){let F,oe=a((te,Pe)=>{let ae;typeof te=="object"?ae=te.name:ae=te;let qe=Yn?.[ae],re;if(qe){let X=N?.[ae];if(X)if(X.hasMappings){let He=qe.from?v[qe.from]:Hs(C.key);re=X.get(He),re||(re=[])}else re=X.fromRecord?.(v);else re=qe(v,O,C);let ge=a(He=>{if(He&&typeof He=="object"){let Vs=qe.definition?.tableClass||ze;U||(U={});let Kn=U[ae]||(U[ae]=Vs.transformEntryForSelect(ae===te?null:te.select||(Array.isArray(te)?te:null),O,w,X,A));if(Array.isArray(He)){let $e=[],Ht=Vs.transformToOrderedSelect(He,te.select,typeof te.sort=="object"&&te.sort,O,w,Kn)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),es=a(xt=>{for(;!xt.done;){if(xt?.then)return xt.then(es);$e.push(xt.value),xt=Ht.next()}Pe($e,ae)},"nextValue"),$s=es(Ht.next());$s&&(F||(F=[]),F.push($s));return}else if(He=Kn.call(this,He),He?.then){F||(F=[]),F.push(He.then($e=>Pe($e,ae)));return}}Pe(He,ae)},"handleResolvedValue");re?.then?(F||(F=[]),F.push(re.then(ge))):ge(re);return}else re=v[ae],re&&typeof re=="object"&&ae!==te&&(re=ze.transformEntryForSelect(te.select||te,O,w,null)({value:re}));Pe(re,ae)},"selectAttribute"),be;if(typeof m=="string")oe(m,te=>{be=te});else if(Array.isArray(m))if(m.asArray)be=[],m.forEach((te,Pe)=>{te==="*"?m[Pe]=v:oe(te,ae=>be[Pe]=ae)});else{be={};let te=m.forceNulls;for(let Pe of m)if(Pe==="*")for(let ae in v)be[ae]=v[ae];else oe(Pe,(ae,qe)=>{ae===void 0&&te&&(ae=null),be[qe]=ae})}else throw new Ss.ClientError("Invalid select"+m);return F?Promise.all(F).then(()=>be):be}return v},"transform");return G}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");h||ct({table:n,database:c,schemaDefined:_,attributes:S,audit:!0}),m||(m={});let O=!m.rawEvents,w=Gx(ze,this[Me]??null,function(y,U,G,C){try{let v=U.getValue?.(i,O);if(!v&&U.type==="patch"&&O){let F=i.getEntry(y);F?.version===U.version?v=F.value:v=U.getValue?.(i,!0,G),U.type="put"}this.send({id:y,timestamp:G,value:v,version:U.version,type:U.type,beginTxn:C})}catch(v){Ze.error(v)}},m.startTime||0,this[ps]);this[ps]&&(w.includeDescendants=!0,m.onlyChildren&&(w.onlyChildren=!0)),m.crossThreads===!1&&(w.crossThreads=!1),m.supportsTransactions&&(w.supportsTransactions=!0);let N=this[Me],A=m.previousCount;A>1e3&&(A=1e3);let D=m.startTime;if(this[ps]){if(D){if(A)throw new Ss.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:U}of u.getRange({start:D,exclusiveStart:!0})){let G=Dt(U);if(G.tableId!==s)continue;let C=G.recordId;if(N==null||Qx(N,C)){let v=G.getValue(i,O,y);w.send({id:C,timestamp:y,value:v,version:G.version,type:G.type})}w.startTime=y}}else if(A){let y=[];for(let{key:U,value:G}of u.getRange({start:"z",end:!1,reverse:!0}))try{let C=Dt(G);if(C.tableId!==s)continue;let v=C.recordId;if(N==null||Qx(N,v)){let F=C.getValue(i,O,U);if(y.push({id:v,timestamp:U,value:F,version:C.version,type:C.type}),--A<=0)break}}catch(C){Ze.error("Error getting history entry",U,C)}for(let U=y.length;U>0;)w.send(y[--U]);y[0]&&(w.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:U,version:G,localTime:C}of i.getRange({start:N??!1,end:N==null?void 0:[N,Mo.MAXIMUM_KEY],versions:!0}))U&&w.send({id:y,timestamp:C,value:U,version:G,type:"put"})}else{A&&!D&&(D=0);let y=this[Jr]?.localTime;if(y===im&&(i.cache?.delete(N),this[Jr]=i.getEntry(N),Ze.trace("re-retrieved record",y,this[Jr]?.localTime),y=this[Jr]?.localTime),Ze.trace("Subscription from",D,"from",N,y),D<y){let U=[],G=y;do{let C=u.get(G);if(C){m.omitCurrent=!0;let v=Dt(C),F=v.getValue(i,O,G);O&&(v.type="put"),U.push({id:N,value:F,timestamp:G,...v}),G=v.previousLocalTime}else break;A&&A--}while(G>D&&A!==0);for(let C=U.length;C>0;)w.send(U[--C]);w.startTime=y}!m.omitCurrent&&this.doesExist()&&w.send({id:N,timestamp:y,value:this,version:this[yl],type:"put"})}return m.listener&&w.on("data",m.listener),w}doesExist(){return!!(this[_e]||this[Al])}publish(m,O){this._writePublish(m,O)}_writePublish(m,O){let w=gs(this[Oe]),N=this[Me]||null;tc(N);let A=this[Oe];w.addWrite({key:N,store:i,entry:this[Jr],nodeName:A?.nodeName,validate:()=>{A?.source||(w.checkOverloaded(),this.validate(m))},before:Le.publish?.bind(this,A,N,m),beforeIntermediate:Be.publish?.bind(this,A,N,m),commit:(D,y,U)=>{y===void 0&&p&&!h&&ph(),T(N,y?.value??null,y,y?.version||D,0,!0,A,y?.expiresAt,"message",!1,m)}})}validate(m,O){let w,N=a((A,D,y)=>{if(D.type&&A!=null)if(O&&A.__op__&&(A=A.value),D.properties){typeof A!="object"&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be an object${D.type?" ("+D.type+")":""}`);let U=D.properties;for(let G=0,C=U.length;G<C;G++){let v=U[G],F=N(A[v.name],v,y+"."+v.name);F&&(A[v.name]=F)}if(D.sealed&&A!=null&&typeof A=="object")for(let G in A)U.find(C=>C.name===G)||(w||(w=[])).push(`Property ${G} is not allowed within object in property ${y}`)}else switch(D.type){case"Int":(typeof A!="number"||A>>0!==A)&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof A!="number"||!(Math.floor(A)===A&&Math.abs(A)<=9007199254740992))&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof A!="number"&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a number`);break;case"ID":typeof A=="string"||A?.length>0&&A.every?.(U=>typeof U=="string")||(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof A!="string"&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a string`);break;case"Boolean":typeof A!="boolean"&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a boolean`);break;case"Date":if(!(A instanceof Date)){if(typeof A=="string"||typeof A=="number")return new Date(A);(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof A!="bigint"){if(typeof A=="string"||typeof A=="number")return BigInt(A);(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a bigint`)}break;case"Bytes":A instanceof Uint8Array||(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(A)){if(D.elements)for(let U=0,G=A.length;U<G;U++){let C=A[U],v=N(C,D.elements,y+"[*]");v&&(A[U]=v)}}else(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a Buffer or Uint8Array`);break}D.nullable===!1&&A==null&&(w||(w=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let A=0,D=S.length;A<D;A++){let y=S[A];if(!y.relationship&&(!O||y.name in m)){let U=N(m[y.name],y,y.name);U&&(m[y.name]=U)}}if(d)for(let A in m)S.find(D=>D.name===A)||(w||(w=[])).push(`Property ${A} is not allowed`);if(w)throw new Ss.ClientError(w.join(". "))}getUpdatedTime(){return this[yl]}wasLoadedFromSource(){return L?!!this[DA]:void 0}static async addAttributes(m){let O=S.slice(0);for(let w of m){if(!w.name)throw new Ss.ClientError("Attribute name is required");if(w.name.match(/[`/]/))throw new Ss.ClientError("Attribute names cannot include backticks or forward slashes");O.push(w)}return ct({table:n,database:c,schemaDefined:_,attributes:O}),ze.indexingOperation}static async removeAttributes(m){let O=S.filter(w=>!m.includes(w.name));return ct({table:n,database:c,schemaDefined:_,attributes:O}),ze.indexingOperation}static getRecordCount(m){let O=i.getStats().entryCount,w=5e3,N=1e3,A;O>w&&!m?.exactCount&&(A=N);let D=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:A}))y!=null&&D++;if(A){let y=D;D=0;for(let{value:Pe}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:A}))Pe!=null&&D++;let U=A*2,G=(D+y)/U,C=Math.pow((D-y+1)/A/2,2)+G*(1-G)/U,v=Math.max(Math.sqrt(C)*O,1),F=Math.round(G*O),oe=Math.max(F-1.96*v,0),be=Math.min(F+1.96*v,O),te=Math.pow(10,Math.round(Math.log10(v)));return te>F&&(te=te/10),D=Math.round(F/te)*te,{recordCount:D,estimatedRange:[Math.round(oe),Math.round(be)]}}return{recordCount:D}}static updatedAttributes(){Yn=this.propertyResolvers={$id:(m,O,w)=>({value:w.key}),$updatedtime:(m,O,w)=>w.version,$record:(m,O,w)=>w?{value:m}:m};for(let m of this.attributes){m.resolve=null;let O=m.relationship;if(O)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),JA=!0,O.to)m.elements?.definition?(Yn[m.name]=m.resolve=(w,N,A)=>{let D=w[O.from?O.from:t],y=m.elements.definition.tableClass;return A?La({attribute:O.to,value:D},gs(N).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:O.to,value:D}],N).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,O.from&&(m.resolve.from=O.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${n}" must have an array type referencing a table as the elements`);else if(O.from){let w=m.definition||m.elements?.definition;w?(Yn[m.name]=m.resolve=(N,A,D)=>{let y=N[O.from];if(y!==void 0){if(m.elements){let U,G=y.map(C=>{let v=D?w.tableClass.primaryStore.getEntry(C,{transaction:gs(A).getReadTxn()}):w.tableClass.get(C,A);return v?.then&&(U=!0),v});return O.filterMissing?U?Promise.all(G).then(C=>C.filter(zx)):G.filter(zx):U?Promise.all(G):G}return D?w.tableClass.primaryStore.getEntry(y,{transaction:gs(A).getReadTxn()}):w.tableClass.get(y,A)}},m.set=(N,A)=>{if(Array.isArray(A)){let D=A.map(y=>y[Me]||y[w.tableClass.primaryKey]);N[O.from]=D}else{let D=A[Me]||A[w.tableClass.primaryKey];N[O.from]=D}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=O.from):console.error(`The relationship property "${m.name}" in table "${n}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${n}" must use either "from" or "to" arguments`)}$E(this,this)}static async deleteHistory(m=0){let O;for(let{key:w,value:N}of u.getRange({start:0,end:m}))await Nl(),Dt(N).tableId===s&&(O=u.remove(w));await O}static async*getHistory(m=0,O=1/0){for(let{key:w,value:N}of u.getRange({start:m,end:O})){await Nl();let A=Dt(N);A.tableId===s&&(yield{id:A.recordId,localTime:w,version:A.version,type:A.type,value:A.getValue(i,!0,w),user:A.user})}}static async getHistoryOfRecord(m){let O=[];if(m==null)throw new Error("An id is required");let w=i.getEntry(m);if(!w)return O;let N=w.localTime;if(!N)throw new Error("The entry does not have a local audit time");let A=0;do{await Nl();let D=u.get(N);if(D){let y=Dt(D);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(A<1e3&&N);return O.reverse()}static cleanup(){z?.remove()}}ze.updatedAttributes();let Jq=ze.prototype;return Jq[Eie]=!0,f&&ze.setTTLExpiration(f/1e3),J&&jq(),ze;function Fl(K,m,O){let w;for(let N in r){let A=r[N],D=A.isIndexing,y=O?.[N],U=m?.[N];if(y===U&&!D)continue;w=!0;let G=A.indexNulls,C=(0,wl.getIndexedValues)(U,G);if(C){$x&&A.prefetch(C.map(v=>({key:v,value:K})),Wx);for(let v=0,F=C.length;v<F;v++)A.remove(C[v],K)}if(C=(0,wl.getIndexedValues)(y,G),C){$x&&A.prefetch(C.map(v=>({key:v,value:K})),Wx);for(let v=0,F=C.length;v<F;v++)A.put(C[v],K)}}return w}a(Fl,"updateIndices");function tc(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>Kx)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)return!0;break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,Mo.writeKey)(K,mie,0)>Kx)throw new Error("Primary key size is too large: "+K.length);return!0}a(tc,"checkValidId");function Eh(K,m,O,w,N){let A=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),O.transaction?.isDone)return N(null,K);let D=i.getEntry(K,O);return D&&m&&(D?.version>(m.lastModified||0)&&(m.lastModified=D.version),D?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=D.localTime)),N(D,K)},"whenPrefetched");return w?A():ce>0?(ce--,A()):new Promise((D,y)=>{ce===0?(ce--,i.prefetch([K],()=>{U(),G()})):(j.push(K),Te.push(G),j.length>zq&&(ce--,U()));function U(){if(j.length>0){let C=Te;i.prefetch(j,()=>{ce===-1?U():ce++;for(let v of C)v()}),j=[],Te=[],de>2&&de--}else ce=de,de<Qq&&de++}a(U,"prefetch");function G(){try{D(A())}catch(C){y(C)}}a(G,"load")})}a(Eh,"loadLocalRecord");function kl(K){if(!K?.role)return;let m=K.role.permission;if(m.super_user)return pie;let O=m[c],w,N=O?.tables;if(N)return N[n];if(c==="data"&&(w=m[n])&&!w.tables)return w}a(kl,"getTablePermissions");function hh(K,m,O,w){if(L){let N;if(O.noCache?N=!0:(m?(!m.value||m.metadataFlags&(Ol|bl)||m.expiresAt&&m.expiresAt<Date.now())&&(N=!0):N=!0,ns(!N,"cache-hit",n)),N){let A=XA(K,m,O).then(D=>(D?.value?.[_e]&&Ze.error("Can not assign a record with a record property"),O&&(D?.version>(O.lastModified||0)&&(O.lastModified=D.version),O.lastRefreshed=Date.now()),D));if(O?.onlyIfCached||m?.value&&w?.allowStaleWhileRevalidate?.(m,K)){if(A.catch(D=>Ze.warn(D)),O?.onlyIfCached&&!w.doesExist())throw new Ss.ServerError("Entry is not cached",504);return}else return A}}}a(hh,"ensureLoadedFromSource");function gs(K){let m=K?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let O=m.next;if(!O)return m=m.next=new Zi,m.lmdbDb=i,m;m=O}while(!0)}else return new rd}a(gs,"txnForContext");function mh(K,m,O){if(!K)return;fh=K;let w=K.value||K.deref?.()||(fh=i.getEntry(K.key))?.value;if(typeof m=="object"){let A=Yn,D=w;for(let y=0,U=m.length;y<U;y++){let G=m[y],C=A?.[G];D=C&&D?C(D,O,!0)?.value:D?.[G],A=C?.definition?.tableClass?.propertyResolvers}return D}let N=Yn[m];return N?N(w,O):w[m]}a(mh,"getAttributeValue");function jA(K,m,O,w,N){let A=N?.length,D={transaction:w,lazy:A>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},y;function U(G,C){let v=G?.value;if(!v)return Do.SKIP;for(let F=0;F<A;F++)if(!y?.includes(F)&&!N[F](v,G))return Do.SKIP;return C!==void 0&&(G.key=C),G}if(a(U,"processEntry"),A>0||!K.hasEntries){let G=K.map(C=>{if(y=null,typeof C=="object"&&C.key!==void 0)return A>0?U(C):C;if(C==null)return Do.SKIP;for(let v=0;v<A;v++){let oe=N[v].idFilter;if(oe){if(!oe(C))return Do.SKIP;y||(y=[]),y.push(v)}}return Eh(C,O,D,!1,U)});return Array.isArray(K)&&(G=G.filter(C=>C!==Do.SKIP)),G.hasEntries=!0,G}return K}a(jA,"transformToEntries");async function XA(K,m,O){let w=m?.metadataFlags,N=m?.version,A,D;if(!i.attemptLock(K,N,()=>{clearTimeout(D);let C=i.getEntry(K);!C||!C.value||C.metadataFlags&(Ol|bl)?A(XA(K,i.getEntry(K),O)):A(C)}))return new Promise(C=>{A=C,D=setTimeout(()=>{i.unlock(K,N)},fie)});let y=m?.value,U={requestContext:O,replacingRecord:y,replacingVersion:N,source:null,resourceCache:O?.resourceCache},G=O?.responseHeaders;return new Promise((C,v)=>{let F;MA(Xe(U,async oe=>{let be=performance.now(),te,Pe,ae;try{for(let ge of ze.sources)if(ge.get&&(!ge.get.reliesOnPrototype||ge.prototype.get)&&(U.source=ge,te=await ge.get(K,U),te))break;ae=w&Ol;let re=U.lastModified||ae&&N;Pe=ae||re>N||!y,re||(re=(0,wl.getNextMonotonicTime)());let X=performance.now()-be;if(qr(X,"cache-resolution",n),G&&sg(G,"Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`,!0),oe.timestamp=re,f&&!U.expiresAt&&(U.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]!==K&&(te[t]=K)}F=!0,C({version:re,value:te})}catch(re){re.message+=` while resolving record ${K} for ${n}`,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))?(C({version:N,value:y}),Ze.trace(re.message,"(returned stale record)")):v(re),U.transaction.abort();return}if(O?.noCacheStore){U.transaction.abort();return}gs(U).addWrite({key:K,store:i,entry:m,nodeName:"source",commit:(re,X)=>{if(X?.version!==N)return;let ge=Fl(K,y,te);te?(Be.put?.(U,K,te),T(K,te,X,re,0,h&&Pe||null,U,U.expiresAt,"put",!!ae)):(Be.delete?.(U,K),h||p?T(K,null,X,re,0,h&&Pe||null,U,0,"delete",!!ae):i.remove(K,N))}})}),()=>{i.unlock(K,N)},oe=>{i.unlock(K,N),F&&Ze.error("Error committing cache update",oe)})})}a(XA,"getFromSource");function ph(){if(Ct!==ql&&(ql=Ct,(0,Lo.getWorkerIndex)()===(0,Lo.getWorkerCount)()-1)){if(Gl&&clearTimeout(Gl),!Ct)return;let K=new Date;K.setMonth(0),K.setDate(1),K.setHours(0),K.setMinutes(0),K.setSeconds(0);let m=Math.ceil((Date.now()-K.getTime())/Ct)*Ct+K.getTime(),O=a(w=>{Ze.trace(`Scheduled next cleanup scan at ${new Date(w)}ms`),Gl=setTimeout(()=>P=P.then(async()=>{if(O(Math.max(w+Ct,Date.now())),i.rootStore.status!=="open"){clearTimeout(Gl);return}let N=50,A=new Array(N),D=0;Ze.trace(`Starting cleanup scan for ${n}`);try{let y=0;for(let{key:U,value:G,version:C,expiresAt:v}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let F;G===null&&!h&&C+die<Date.now()?F=i.remove(U,C):v&&v+E<Date.now()&&(F=ze.evict(U,G,C),y++),F&&(await A[D],A[D]=F.catch(oe=>{Ze.error("Cleanup error",oe)}),++D>=N&&(D=0)),await Nl()}Ze.trace(`Finished cleanup scan for ${n}, evicted ${y} entries`)}catch(y){Ze.trace(`Error in cleanup scan for ${n}:`,y)}}),Math.min(w-Date.now(),2147483647)).unref()},"startNextTimer");O(m)}}a(ph,"scheduleCleanup");function ZA(){z=u?.addDeleteRemovalCallback(s,K=>{let m=i.getEntry(K);m?.value===null&&i.remove(K,m.version)})}a(ZA,"addDeleteRemoval");function jq(){(0,Lo.getWorkerIndex)()===0&&setInterval(async()=>{try{let K=J.name,m=r[K];if(!m)throw new Error(`expiresAt attribute ${J} must be indexed`);for(let{key:O,value:w}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let N=i.getEntry(w);N?.value?N.value[K]<Date.now()&&ze.evict(w,N.value,N.version):i.ifVersion(w,N?.version,()=>m.remove(O,w)),await Nl()}}catch(K){Ze.error("Error in evicting old records",K)}},_ie).unref()}a(jq,"runRecordExpirationEviction")}function LA(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function Wx(){}function Sie(e){jx=e}function QE(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"&&!Tie.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,JE.autoCast)(e):e}function Qx(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function MA(e,t,r){return e?.then?e.then(t,r):t(e)}function zE(e,t){e[Jr]=t,e[_e]=t?.value??null,e[yl]=t?.version}function zx(e){return e!=null}function Fs(e){try{return JSON.stringify(e)}catch{return e}}var ks,Do,wl,Jx,Dl,Ss,Il,Cl,Ze,Mo,Lo,JE,lie,jx,_ie,die,$x,fie,yl,Eie,Jr,Al,Yx,hie,DA,Ja,Ol,bl,mie,Kx,pie,BSe,Tie,Nl,eE=Re(()=>{ks=x(M()),Do=require("lmdb"),wl=x(wr()),Jx=require("lodash");Os();Xp();Dl=x(ee());Vx();Ss=x(se()),Il=x(Rn()),Cl=x(Cs());Ae();Gf();Ze=x($());id();eo();Mo=require("ordered-binary"),Lo=x(Ke());Hi();JE=x(Q());Oc();Nn();HE();qu();lie=new Uint8Array(9);lie[8]=192;_ie=6e4,die=864e5;Dl.initSync();$x=Dl.get(ks.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),fie=1e4,yl=Symbol.for("version"),Eie=Symbol.for("incremental-update"),Jr=Symbol("entry"),Al=Symbol("is-saving"),Yx=1,hie=2,DA=Symbol("loaded-from-source"),Ja={isNotification:!0,ensureLoaded:!1},Ol=1,bl=8,mie=Buffer.allocUnsafeSlow(8192),Kx=1978,pie={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},BSe=(0,JE.convertToMS)(Dl.get(ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(jE,"makeTable");a(LA,"attributesAsObject");a(Wx,"noop");a(Sie,"setServerUtilities");Tie=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(QE,"coerceType");a(Qx,"isDescendantId");Nl=a(()=>new Promise(setImmediate),"rest");a(MA,"when");a(zE,"updateResource");a(zx,"exists");a(Fs,"stringify")});var Ge={};Ye(Ge,{database:()=>Jc,databases:()=>rt,dropDatabase:()=>sS,dropTableMeta:()=>Nie,getDatabases:()=>Ls,getTables:()=>gie,onUpdatedTable:()=>kR,readMetaDb:()=>Ll,resetDatabases:()=>Rie,table:()=>ct,tables:()=>Ir});function gie(){return rh||Ls(),Ir||{}}function Ls(){if(rh)return rt;rh=!0,Za=new Map;let e=(0,er.getHdbBasePath)()&&(0,et.join)((0,er.getHdbBasePath)(),Xr.DATABASES_DIR_NAME),t=(0,er.get)(Xr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,er.get)(Xr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,jr.existsSync)(e)?e:(0,et.join)((0,er.getHdbBasePath)(),Xr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,jr.existsSync)(e))for(let r of(0,jr.readdirSync)(e,{withFileTypes:!0})){let s=(0,et.basename)(r.name,".mdb");r.isFile()&&(0,et.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Ll((0,et.join)(e,r.name),null,s)}if((0,jr.existsSync)((0,Xa.getBaseSchemaPath)())){for(let r of(0,jr.readdirSync)((0,Xa.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,et.join)((0,Xa.getBaseSchemaPath)(),r.name),n=(0,et.join)((0,Xa.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,jr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,et.extname)(i.name).toLowerCase()===".mdb"){let o=(0,et.join)(n,i.name);Ll((0,et.join)(s,i.name),(0,et.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,jr.existsSync)(n))for(let o of(0,jr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,et.extname)(o.name).toLowerCase()===".mdb"&&Ll((0,et.join)(n,o.name),(0,et.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,et.join)(c.path,(0,et.basename)(o+".mdb"));(0,jr.existsSync)(u)&&Ll(u,o,r,null,!0)}}for(let r in rt){let s=Za.get(r);if(s){let n=rt[r];r.includes("delete")&&Ts.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Ts.trace(`delete table class ${i}`),delete n[i])}else if(delete rt[r],r==="data"){for(let n in Ir)delete Ir[n];delete Ir[sh]}}return Za=null,rt}}function Rie(){rh=!1;for(let[,e]of Di)e.needsDeletion=!0;Ls();for(let[e,t]of Di)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Di.delete(e));return rt}function Ll(e,t,r=vA,s,n){let i=new UA.default(e,!1);try{let o=Di.get(e);o?o.needsDeletion=!1:(o=(0,ZE.open)(i),Di.set(e,o));let c=new Uo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(XE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,jr.existsSync)(s)&&(i.path=s,_=(0,ZE.open)(i),_.isLegacy=!0):_=BE(o));let l=tq(r),d=l[sh],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let T=f.get(p);T||f.set(p,T={attributes:[]}),(S==null||h.is_hash_attribute)&&(T.primary=h),S!=null&&T.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let j of p)if(j.is_hash_attribute||j.isPrimaryKey){S=j;break}if(!S){Ts.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let T=l[E],b={},R=[],L,H,P=typeof S.audit=="boolean"?S.audit:(0,er.get)(Xr.CONFIG_PARAMS.LOGGING_AUDITLOG),k=S.trackDeletes,B=S.expiration,J=S.eviction,z=S.sealed;if(T)b=T.indices,R=T.attributes,T.schemaVersion++;else{L=S.tableId,L?L>=(u.get(ja)||0)&&u.putSync(ja,L+1):(S.tableId=L=u.get(ja),L||(L=1),u.putSync(ja,L+1),u.putSync(S.key,S));let j=new Uo.default(!S.is_hash_attribute,S.is_hash_attribute);H=a_(o.openDB(S.key,j)),H.rootStore=o,H.tableId=L}for(let j of p){j.attribute=j.name;try{if(!j.is_hash_attribute&&(j.indexed||j.attribute&&!j.name)){if(!b[j.name]){let ce=new Uo.default(!j.is_hash_attribute,j.is_hash_attribute);b[j.name]=o.openDB(j.key,ce),b[j.name].indexNulls=j.indexNulls}let Te=R.find(ce=>ce.name===j.name);Te?R.splice(R.indexOf(Te),1,j):R.push(j)}}catch(Te){Ts.error("Error trying to update attribute",j,R,b,Te)}}if(!T){T=rq(l,E,jE({primaryStore:H,auditStore:_,audit:P,sealed:z,expirationMS:B&&B*1e3,evictionMS:J&&J*1e3,trackDeletes:k,tableName:E,tableId:L,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:b,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),T.schemaVersion=1;for(let j of BA)j(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function tq(e){let t=rt[e];if(t||(e==="data"?t=rt[e]=Ir:e==="system"?Object.defineProperty(rt,"system",{value:t=Object.create(null),configurable:!0}):t=rt[e]=Object.create(null)),Za&&!Za.has(e)){let r=new Set;t[sh]=r,Za.set(e,r)}return t}function rq(e,t,r){return e[t]=r,r}function Jc({database:e,table:t}){e||(e=vA),Ls();let r=tq(e),s=(0,et.join)((0,er.getHdbBasePath)(),Xr.DATABASES_DIR_NAME),n=(0,er.get)(Xr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,er.get)(Xr.CONFIG_PARAMS.STORAGE_PATH)||((0,jr.existsSync)(s)?s:(0,et.join)((0,er.getHdbBasePath)(),Xr.LEGACY_DATABASES_DIR_NAME));let o=(0,et.join)(s,(i?t:e)+".mdb"),c=Di.get(o);if(!c){let u=new UA.default(o,!1);c=(0,ZE.open)(u),Di.set(o,c)}return c}async function sS(e){if(!rt[e])throw new Error("Schema does not exist");let t=rt[e];for(let r in t){let n=t[r].primaryStore.rootStore;Di.delete(n.path),n.status==="open"&&(await n.close(),await Xx.remove(n.path))}if(e==="data"){for(let r in Ir)delete Ir[r];delete Ir[sh]}delete rt[e]}function ct({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,sealed:c,trackDeletes:u,schemaDefined:_,origin:l}){t||(t=vA);let d=Jc({database:t,table:e}),f=rt[t],E=f?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,p,S,T;_==null&&(_=!0);let b=new Uo.default(!1);for(let B of i)B.attribute?(B.name=B.attribute,B.indexed=!0):B.attribute=B.name,B.expiresAt&&(B.indexed=!0);let R,L;if(E){if(h=E.primaryKey,E.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);E.attributes.splice(0,E.attributes.length,...i)}else{let B=d.auditStore;B||(B=BE(d)),p=i.find(Te=>Te.isPrimaryKey)||{},h=p.name,p.is_hash_attribute=!0,p.schemaDefined=_,u&&(p.trackDeletes=!0),o=p.audit=typeof o=="boolean"?o:(0,er.get)(Xr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(p.expiration=r),s&&(p.eviction=s),typeof c=="boolean"&&(p.sealed=c),l&&(p.origins?p.origins.includes(l)||p.origins.push(l):p.origins=[l]),Ts.trace(`${e} table loading, opening primary store`);let J=new Uo.default(!1,!0),z=e+"/",j=a_(d.openDB(z,J));j.rootStore=d,T=d.dbisDb=d.openDB(XE.INTERNAL_DBIS_NAME,b),j.tableId=T.get(ja),j.tableId||(j.tableId=1),T.putSync(ja,j.tableId+1),p.tableId=j.tableId,E=rq(f,e,jE({primaryStore:j,auditStore:B,audit:o,sealed:c,trackDeletes:u,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:h,tableName:e,tableId:j.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:T})),E.schemaVersion=1,R=!0,k(),T.put(z,p)}S=E.indices,T=T||(d.dbisDb=d.openDB(XE.INTERNAL_DBIS_NAME,b)),E.dbisDB=T;let H=[];for(let{key:B,value:J}of T.getRange({start:!0})){let[z,j]=B.toString().split("/");if(j===""&&(j=J.name),j){if(z!==e)continue}else j=z;if(!i.find(ce=>ce.name===j)?.indexed&&J.indexed&&!J.isPrimaryKey){k(),R=!0,T.remove(B);let ce=E.indices[z];ce&&H.push(ce)}}let P=[];try{for(let B of i||[]){if(B.relationship)continue;let J=e+"/"+(B.name||"");Object.defineProperty(B,"key",{value:J,configurable:!0});let z=T.get(J);if(B.isPrimaryKey){if(z=z||T.get(J=e+"/")||{},o!==E.audit||c!==c||(+r||void 0)!==(+z.expiration||void 0)||(+s||void 0)!==(+z.eviction||void 0)){let Te=Object.assign({},z);typeof o=="boolean"&&(o&&E.enableAuditing(o),Te.audit=o),r&&(Te.expiration=+r),s&&(Te.eviction=+s),c!==void 0&&(Te.sealed=c),R=!0,k(),T.put(J,Te)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let j=!z||z.type!==B.type||z.indexed!==B.indexed||z.nullable!==B.nullable||JSON.stringify(z.attributes)!==JSON.stringify(B.attributes)||JSON.stringify(z.elements)!==JSON.stringify(B.elements);if(B.indexed){let Te=new Uo.default(!0,!1),ce=d.openDB(J,Te);(j||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Ml.workerData?.restartNumber)&&(R=!0,k(),z=T.get(J),(j||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Ml.workerData?.restartNumber)&&(R=!0,B.lastIndexedKey=z?.lastIndexedKey||!1,B.indexingPID=process.pid,ce.isIndexing=!0,Object.defineProperty(B,"dbi",{value:ce}),B.indexNulls===void 0&&(B.indexNulls=!0),P.push(B)),T.put(J,B)),z?.indexNulls&&B.indexNulls===void 0&&(B.indexNulls=!0),ce.indexNulls=B.indexNulls,S[B.name]=ce}else j&&(R=!0,k(),T.put(J,B))}}finally{L&&L()}if(R&&(E.schemaVersion++,E.updatedAttributes()),Ts.trace(`${e} table loading, running index`),P.length>0||H.length>0?E.indexingOperation=bie(E,P,H):R&&eh.signalSchemaChange(new th.SchemaEventMsg(process.pid,"schema-change",E.databaseName,E.tableName)),E.origin=l,R)for(let B of BA)B(E,l!=="cluster");return(r||s||n)&&E.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),Ts.trace(`${e} table loaded`),E;function k(){L||d.transactionSync(()=>({then(B){L=B}}))}a(k,"startTxn")}async function bie(e,t,r){try{let s=e.schemaVersion;await eh.signalSchemaChange(new th.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,Zx.getIndexedValues)(l[h]);if(p)for(let S=0,T=p.length;S<T;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,Ts.error(f)}),Ml.workerData&&Ml.workerData.restartNumber!==eq.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>Aie?await n:u>Oie&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await eh.signalSchemaChange(new th.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Ts.error("Error in indexing",s)}}function Nie({table:e,database:t}){let r=Jc({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function kR(e){BA.push(e)}var er,XE,ZE,et,jr,Xa,Uo,UA,Xr,Xx,PA,Zx,eh,th,Ml,Ts,eq,vA,sh,Ir,rt,ja,BA,rh,Di,Za,Aie,Oie,Ae=Re(()=>{er=x(ee()),XE=x(dt()),ZE=require("lmdb"),et=require("path"),jr=require("fs"),Xa=x(Je());eE();Uo=x(c_()),UA=x(l_()),Xr=x(M()),Xx=x(require("fs-extra")),PA=require("../index"),Zx=x(wr()),eh=x(Rn()),th=x(Cs()),Ml=require("worker_threads"),Ts=x($()),eq=x(Ke());Hi();Oc();vA="data",sh=Symbol("defined-tables");(0,er.initSync)();Ir=Object.create(null),rt=Object.create(null);(0,PA._assignPackageExport)("databases",rt);(0,PA._assignPackageExport)("tables",Ir);ja=Symbol.for("next-table-id"),BA=[],Di=new Map;a(gie,"getTables");a(Ls,"getDatabases");a(Rie,"resetDatabases");a(Ll,"readMetaDb");a(tq,"ensureDB");a(rq,"setTable");a(Jc,"database");a(sS,"dropDatabase");a(ct,"table");Aie=1e3,Oie=10;a(bie,"runIndexing");a(Nie,"dropTableMeta");a(kR,"onUpdatedTable")});var Q=g((YSe,mq)=>{"use strict";var Li=require("path"),aq=require("fs-extra"),br=$(),sq=require("fs-extra"),nh=require("os"),yie=require("net"),wie=require("recursive-iterator"),at=M(),Iie=MO(),nq=require("papaparse"),ih=require("moment"),{inspect:Cie}=require("util"),iq=require("is-number"),$Se=require("lodash"),Die=require("minimist"),Lie=require("https"),Mie=require("http"),{hdb_errors:oh}=se(),Uie=/^((\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)))$/,cq=require("util").promisify(setTimeout),Pie=100,vie=5,Bie="",Hie=4,oq={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};mq.exports={isEmpty:Zr,isEmptyOrZeroLength:fn,arrayHasEmptyValues:Gie,arrayHasEmptyOrZeroLengthValues:Fie,buildFolderPath:kie,isBoolean:uq,errorizeMessage:xie,stripFileExtension:$ie,autoCast:Yie,autoCastJSON:lq,autoCastJSONDeep:xA,removeDir:Kie,compareVersions:Wie,isCompatibleDataVersion:Qie,escapeRawValue:zie,unescapeValue:Jie,stringifyProps:jie,timeoutPromise:Zie,isClusterOperation:toe,getClusterUser:soe,checkGlobalSchemaTable:roe,getHomeDir:dq,getPropsFilePath:Xie,promisifyPapaParse:noe,removeBOM:fq,createEventPromise:ioe,checkProcessRunning:ooe,checkSchemaTableExist:aoe,checkSchemaExists:Eq,checkTableExists:hq,getStartOfTomorrowInSeconds:coe,getLimitKey:uoe,isObject:Vie,isNotEmptyAndHasValue:qie,autoCasterIsNumberCheck:_q,backtickASTSchemaItems:loe,isPortTaken:eoe,createForkArgs:_oe,autoCastBoolean:doe,async_set_timeout:cq,getTableHashAttribute:foe,doesSchemaExist:Eoe,doesTableExist:hoe,stringifyObj:moe,ms_to_time:poe,changeExtension:Soe,getEnvCliRootPath:qA,noBootFile:Toe,httpRequest:goe,transformReq:Roe,convertToMS:Aoe,PACKAGE_ROOT:at.PACKAGE_ROOT};function xie(e){return e instanceof Error?e:new Error(e)}a(xie,"errorizeMessage");function Zr(e){return e==null}a(Zr,"isEmpty");function qie(e){return!Zr(e)&&(e||e===0||e===""||uq(e))}a(qie,"isNotEmptyAndHasValue");function fn(e){return Zr(e)||e.length===0||e.size===0}a(fn,"isEmptyOrZeroLength");function Gie(e){if(Zr(e))return!0;for(let t=0;t<e.length;t++)if(Zr(e[t]))return!0;return!1}a(Gie,"arrayHasEmptyValues");function Fie(e){if(fn(e))return!0;for(let t=0;t<e.length;t++)if(fn(e[t]))return!0;return!1}a(Fie,"arrayHasEmptyOrZeroLengthValues");function kie(...e){try{return e.join(Li.sep)}catch{console.error(e)}}a(kie,"buildFolderPath");function uq(e){return Zr(e)?!1:e===!0||e===!1}a(uq,"isBoolean");function Vie(e){return Zr(e)?!1:typeof e=="object"}a(Vie,"isObject");function $ie(e){return fn(e)?Bie:e.slice(0,-Hie)}a($ie,"stripFileExtension");function Yie(e){return Zr(e)||e===""||typeof e!="string"?e:oq[e]!==void 0?oq[e]:_q(e)===!0?Number(e):Uie.test(e)?new Date(e):e}a(Yie,"autoCast");function lq(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(lq,"autoCastJSON");function xA(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=xA(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=xA(r);s!==r&&(e[t]=s)}return e}else return lq(e)}a(xA,"autoCastJSONDeep");function _q(e){if(e.startsWith("0.")&&iq(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&iq(e))}a(_q,"autoCasterIsNumberCheck");async function Kie(e){if(fn(e))throw new Error(`Directory path: ${e} does not exist`);try{await sq.emptyDir(e),await sq.remove(e)}catch(t){throw br.error(`Error removing files in ${e} -- ${t}`),t}}a(Kie,"removeDir");function Wie(e,t){if(fn(e)){br.info("Invalid current version sent as parameter.");return}if(fn(t)){br.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(Wie,"compareVersions");function Qie(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Qie,"isCompatibleDataVersion");function zie(e){if(Zr(e))return e;let t=String(e);return t==="."?at.UNICODE_PERIOD:t===".."?at.UNICODE_PERIOD+at.UNICODE_PERIOD:t.replace(at.FORWARD_SLASH_REGEX,at.UNICODE_FORWARD_SLASH)}a(zie,"escapeRawValue");function Jie(e){if(Zr(e))return e;let t=String(e);return t===at.UNICODE_PERIOD?".":t===at.UNICODE_PERIOD+at.UNICODE_PERIOD?"..":String(e).replace(at.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Jie,"unescapeValue");function jie(e,t){if(Zr(e))return br.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+nh.EOL}!fn(s)&&s[0]===";"?r+=" "+s+n+nh.EOL:fn(s)||(r+=s+"="+n+nh.EOL)}catch{br.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(jie,"stringifyProps");function dq(){let e;try{e=nh.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(dq,"getHomeDir");function Xie(){let e=Li.join(dq(),at.HDB_HOME_DIR_NAME,at.BOOT_PROPS_FILE_NAME);return aq.existsSync(e)||(e=Li.join(__dirname,"../","hdb_boot_properties.file")),e}a(Xie,"getPropsFilePath");function Zie(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Zie,"timeoutPromise");async function eoe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=yie.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(eoe,"isPortTaken");function toe(e){try{return at.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){br.error(`Error checking operation against cluster ops ${t}`)}return!1}a(toe,"isClusterOperation");function roe(e,t){let r=(Ae(),ne(Ge)).getDatabases();if(!r[e])return oh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return oh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(roe,"checkGlobalSchemaTable");function soe(e,t){if(Zr(t)){br.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Zr(e)||fn(e)){br.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){br.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){br.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(soe,"getClusterUser");function noe(){nq.parsePromise=function(e,t,r){return new Promise(function(s,n){nq.parse(e,{header:!0,transformHeader:fq,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(noe,"promisifyPapaParse");function fq(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(fq,"removeBOM");function ioe(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;br.info(`Got cluster status event response: ${Cie(n)}`);try{i.cancel()}catch{br.error("Error trying to cancel timeout.")}s(n)})})}a(ioe,"createEventPromise");async function ooe(e){let t=!0,r=0;do await cq(Pie*r++),(await Iie.findPs(e)).length>0&&(t=!1);while(t&&r<vie);if(t)throw new Error(`process ${e} was not started`)}a(ooe,"checkProcessRunning");function aoe(e,t){let r=Eq(e);if(r)return r;let s=hq(e,t);if(s)return s}a(aoe,"checkSchemaTableExist");function Eq(e){let{getDatabases:t}=(Ae(),ne(Ge));if(!t()[e])return oh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Eq,"checkSchemaExists");function hq(e,t){let{getDatabases:r}=(Ae(),ne(Ge));if(!r()[e][t])return oh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(hq,"checkTableExists");function coe(){let e=ih().utc().add(1,at.MOMENT_DAYS_TAG).startOf(at.MOMENT_DAYS_TAG).unix(),t=ih().utc().unix();return e-t}a(coe,"getStartOfTomorrowInSeconds");function uoe(){return ih().utc().format("DD-MM-YYYY")}a(uoe,"getLimitKey");function loe(e){try{let t=new wie(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){br.error("Got an error back ticking items."),br.error(t)}}a(loe,"backtickASTSchemaItems");function _oe(e){return[e]}a(_oe,"createForkArgs");function doe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(doe,"autoCastBoolean");function foe(e,t){let{getDatabases:r}=(Ae(),ne(Ge)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(foe,"getTableHashAttribute");function Eoe(e){let{getDatabases:t}=(Ae(),ne(Ge));return t()[e]!==void 0}a(Eoe,"doesSchemaExist");function hoe(e,t){let{getDatabases:r}=(Ae(),ne(Ge));return r()[e]?.[t]!==void 0}a(hoe,"doesTableExist");function moe(e){try{return JSON.stringify(e)}catch{return e}}a(moe,"stringifyObj");function poe(e){let t=ih.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(poe,"ms_to_time");function Soe(e,t){let r=Li.basename(e,Li.extname(e));return Li.join(Li.dirname(e),r+t)}a(Soe,"changeExtension");function qA(){if(process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Die(process.argv);if(e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(qA,"getEnvCliRootPath");var HA;function Toe(){if(HA)return HA;let e=qA();qA()&&aq.pathExistsSync(Li.join(e,at.HDB_CONFIG_FILE))&&(HA=!0)}a(Toe,"noBootFile");function goe(e,t){let r;return e.protocol==="http:"?r=Mie:r=Lie,new Promise((s,n)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(goe,"httpRequest");function Roe(e){if(!e.schema&&!e.database){e.schema=at.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Roe,"transformReq");function Aoe(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(Aoe,"convertToMS")});var ee=g((WSe,gq)=>{"use strict";var GA=require("fs-extra"),Po=require("path"),pq=require("os"),Ooe=require("properties-reader"),Pl=$(),Ul=Q(),ue=M(),ah=Pr(),boe="Error initializing environment manager",ch="BOOT_PROPS_FILE_PATH",Sq=!1,Noe={[ue.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Vn={};gq.exports={BOOT_PROPS_FILE_PATH:ch,getHdbBasePath:yoe,setHdbBasePath:woe,get:Tq,initSync:Coe,setProperty:Ue,initTestEnvironment:Doe};function yoe(){return Vn[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(yoe,"getHdbBasePath");function woe(e){Vn[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(woe,"setHdbBasePath");function Tq(e){let t=ah.getConfigValue(e);return t===void 0?Vn[e]:t}a(Tq,"get");function Ue(e,t){Noe[e]&&(Vn[e]=t),ah.updateConfigObject(e,t)}a(Ue,"setProperty");function Ioe(){let e;try{e=Ul.getPropsFilePath(),GA.accessSync(e,GA.constants.F_OK|GA.constants.R_OK),Sq=!0;let t=Ooe(e);return Vn[ue.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ue.HDB_SETTINGS_NAMES.INSTALL_USER),Vn[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Vn[ch]=e,!0}catch{return Pl.trace(`Environment manager found no properties file at ${e}`),!1}}a(Ioe,"doesPropFileExist");function Coe(e=!1){try{(Sq||Ioe()||Ul.noBootFile())&&(ah.initConfig(e),Vn[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=ah.getConfigValue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Pl.error(boe),Pl.error(t),console.error(t),process.exit(1)}}a(Coe,"initSync");function Doe(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Po.join(__dirname,"../../","unitTests");Vn[ch]=Po.join(u,"hdb_boot_properties.file"),Ue(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Po.join(u,"settings.test")),Ue(ue.HDB_SETTINGS_NAMES.INSTALL_USER,pq.userInfo()?pq.userInfo().username:void 0),Ue(ue.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ue(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Po.join(u,"envDir","log")),Ue(ue.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ue(ue.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ue(ue.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Po.join(u,"envDir")),Ue(ue.CONFIG_PARAMS.STORAGE_PATH,Po.join(u,"envDir")),n&&(Ue(ue.CONFIG_PARAMS.HTTP_SECUREPORT,Tq(ue.CONFIG_PARAMS.HTTP_PORT)),Ue(ue.CONFIG_PARAMS.HTTP_PORT,null)),Ue(ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!n),Ue(ue.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ue(ue.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Ul.isEmpty(i)?!1:i),Ue(ue.CONFIG_PARAMS.HTTP_CORS,Ul.isEmpty(i)?!1:i),Ue(ue.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ue(ue.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Po.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ue(ue.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Ul.isEmpty(c)?!1:c),o&&(Ue("CORS_ACCESSLIST",o),Ue(ue.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Ue(ue.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ue(ue.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ue(ue.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${ch}. Please check your boot props and settings files`;Pl.fatal(r),Pl.error(t)}}a(Doe,"initTestEnvironment")});var Nq=g((zSe,bq)=>{"use strict";var Oq=require("joi"),{string:vl,boolean:Rq,array:Loe}=Oq.types(),Aq=M(),Moe=je();bq.exports=Uoe;function Uoe(e){let t=Oq.object({operation:vl.valid(Aq.OPERATIONS_ENUM.ADD_NODE,Aq.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:vl.required(),subscriptions:Loe.items({schema:vl.required(),table:vl.optional(),hash_attribute:vl.optional(),subscribe:Rq.required(),publish:Rq.required()}).min(1).required()});return Moe.validateBySchema(e,t)}a(Uoe,"updateRemoteSourceValidator")});var Bl=g((jSe,yq)=>{"use strict";var FA=class{static{a(this,"UpdateRemoteResponseObject")}constructor(t,r,s=void 0){this.status=t,this.message=r,this.system_info=s}};yq.exports=FA});var Lq=g((ZSe,Dq)=>{"use strict";var Poe=Nq(),$n=$(),kA=Fe(),wq=M(),VA=os(),Mi=st(),Iq=fu(),voe=Z_(),{Node:Boe,NodeSubscription:Cq}=fi(),$A=Bl(),YA=Q(),Hoe=ee(),{cloneDeep:xoe}=require("lodash"),{broadcast:qoe}=Ke();Dq.exports=Goe;async function Goe(e){try{let t=Poe(e);if(t)return $n.error(`Validation error in updateRemoteSource: ${t.message}`),new $A(kA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:s,system_info:n}=e,i=[],o=xoe(await VA.getNodeRecord(s)),c=!YA.isEmptyOrZeroLength(o);o=c?o[0]:o,c&&$n.trace(`Existing record found for ${s}, updating records subscriptions`);for(let _=0,l=r.length;_<l;_++){let d=r[_],f=d.schema,E=d.table;if(!YA.doesSchemaExist(f)){$n.trace(`updateRemoteSource creating schema: ${f}`);try{await Iq.createSchema({operation:"create_schema",schema:f})}catch(h){$n.error(h)}}if(E&&!YA.doesTableExist(f,E)){let h=new voe(f,E,d.hash_attribute);d.attributes&&(h.attributes=d.attributes),$n.trace(`updateRemoteSource creating table: ${E} in schema: ${f} with attributes: ${JSON.stringify(d.attributes)}`);try{await Iq.createTable(h)}catch(p){$n.error(p)}$n.trace(`Creating local stream for ${f}.${E}`),await Mi.createLocalTableStream(f,E)}if(f===wq.SYSTEM_SCHEMA_NAME&&await Mi.createLocalTableStream(f,E),c?(await Mi.updateConsumerIterator(f,E,s,"stop"),await Mi.updateRemoteConsumer(d,s),d.subscribe===!0&&await Mi.updateConsumerIterator(f,E,s,"start")):(await Mi.updateRemoteConsumer(d,s),d.subscribe===!0?await Mi.updateConsumerIterator(f,E,s,"start"):await Mi.updateConsumerIterator(f,E,s,"stop")),c){let h=!1;for(let p=0,S=o.subscriptions.length;p<S;p++){let T=o.subscriptions[p];if(T.schema===f&&T.table===E){T.publish=d.publish,T.subscribe=d.subscribe,h=!0;break}}h||o.subscriptions.push(new Cq(f,E,d.publish,d.subscribe))}else i.push(new Cq(f,E,d.publish,d.subscribe))}c||(o=new Boe(s,i,void 0),$n.trace(`No record found for ${s}, creating a new one`));let u=Object.create({});return Object.assign(u,o),u.system_info=n,await VA.upsertNodeRecord(u),qoe({type:"nats_update"}),new $A(kA.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${Hoe.get(wq.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await VA.getSystemInfo())}catch(t){$n.error(t);let r=t.message?t.message:t;return new $A(kA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Goe,"updateRemoteSource")});var vq=g((tTe,Pq)=>{"use strict";var Uq=require("joi"),{string:Mq}=Uq.types(),Foe=M(),koe=je();Pq.exports=Voe;function Voe(e){let t=Uq.object({operation:Mq.valid(Foe.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:Mq.required()});return koe.validateBySchema(e,t)}a(Voe,"removeRemoteSourceValidator")});var xq=g((sTe,Hq)=>{"use strict";var $oe=vq(),uh=$(),lh=Fe(),KA=M(),Yoe=os(),Koe=Q(),Bq=st(),Woe=ee(),_h=Bl(),{NodeSubscription:Qoe}=fi(),zoe=ra(),Joe=ri(),{broadcast:joe}=Ke(),Xoe=Woe.get(KA.CONFIG_PARAMS.CLUSTERING_NODENAME);Hq.exports=Zoe;async function Zoe(e){try{let t=$oe(e);if(t)return uh.error(`Validation error in removeRemoteSource: ${t.message}`),new _h(lh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,s=await Yoe.getNodeRecord(r);if(Koe.isEmptyOrZeroLength(s)){let i=`No record found for node '${r}'`;return uh.error(i),new _h(lh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}s=s[0];for(let i=0,o=s.subscriptions.length;i<o;i++){let c=s.subscriptions[i];uh.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let u=new Qoe(c.schema,c.table,!1,!1);await Bq.updateConsumerIterator(c.schema,c.table,r,"stop"),await Bq.updateRemoteConsumer(u,r)}let n=new zoe(KA.SYSTEM_SCHEMA_NAME,KA.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Joe.deleteRecord(n),joe({type:"nats_update"}),new _h(lh.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${Xoe} successfully removed node '${r}'.`)}catch(t){uh.error(t);let r=t.message?t.message:t;return new _h(lh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Zoe,"removeRemoteSource")});var kq=g((iTe,Fq)=>{"use strict";var dh=$(),Hl=M(),qq=Fe(),WA=ee(),eae=Q(),Gq=Bl(),tae=os(),rae=Dd(),sae=Lr();Fq.exports=nae;async function nae(e){try{dh.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=eae.ms_to_time(t),s=new iae(WA.get(Hl.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),WA.get(Hl.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)??WA.get(Hl.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT),r,await tae.getSystemInfo());try{let n={name:e.node_name,system_info:e.system_info},i=new rae(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[n]);await sae.update(i)}catch(n){dh.error("Get remote config encountered an error updating system info for node:",e.node_name,n)}return dh.trace("getRemoteSourceConfig response:",s),new Gq(qq.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,s)}catch(t){dh.error(t);let r=t.message?t.message:t;return new Gq(qq.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(nae,"getRemoteSourceConfig");function iae(e,t,r,s){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=s}a(iae,"ConfigResponseObject")});var Kq=g((aTe,Yq)=>{"use strict";var Vq=ee();Vq.initSync();var $q=st(),xl=$(),ec=M(),QA=Fe(),oae=Lq(),aae=xq(),cae=kq(),uae=Bl(),{encode:lae,decode:_ae}=require("msgpackr"),dae=gn(),fae=Zn(),Eae=require("util"),hae=M(),{isMainThread:mae,parentPort:pae}=require("worker_threads");Ke();var Sae=Eae.promisify(dae.setSchemaDataToGlobal),zA=Vq.get(ec.CONFIG_PARAMS.CLUSTERING_NODENAME);Yq.exports=Tae;async function Tae(){try{xl.notify("Starting reply service."),await Sae();let e=await $q.getConnection(),t=`${zA}.__request__`,r=e.subscribe(t,{queue:zA});await gae(r)}catch(e){xl.error(e)}}a(Tae,"initialize");async function gae(e){for await(let t of e){let r=_ae(t.data),s;switch(r.operation){case ec.OPERATIONS_ENUM.ADD_NODE:case ec.OPERATIONS_ENUM.UPDATE_NODE:s=await oae(r);break;case ec.OPERATIONS_ENUM.REMOVE_NODE:s=await aae(r);break;case ec.OPERATIONS_ENUM.CLUSTER_STATUS:s=await cae(r);break;case ec.OPERATIONS_ENUM.DESCRIBE_ALL:s=await Rae();break;default:let n=`node '${zA}' reply service received unrecognized request operation`;xl.error(n),s=new uae(QA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,n)}xl.trace(s),t.respond(lae(s))}}a(gae,"handleRequest");async function Rae(){try{return{status:QA.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await fae.describeAll()}}catch(e){return xl.error(e),{status:QA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(Rae,"getRemoteDescribeAll");mae||pae.on("message",async e=>{let{type:t}=e;t===hae.ITC_EVENT_TYPES.SHUTDOWN&&$q.closeConnection()})});var Aae=Kq();(async()=>{try{await Aae()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
29
+ `))}},25).unref()}o.close?.(()=>{if(De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&AE()==0)try{RH(De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,gE),o.cantCleanupProperly||Zt.warn("Had to forcefully exit the thread",gE),process.exit(0)},5e3).unref()})}if(DH||process.env.DEV_MODE)try{require("inspector").close()}catch(i){Zt.info("Could not close debugger",i)}}}).ref();let e=[];if(AH&&!one)for(let t in _n){let r=_n[t];if(isNaN(t)&&AE()==0){Xse(t)&&RH(t),e.push(new Promise((n,i)=>{r.listen({path:t},()=>{n(),Zt.info("Domain socket listening on "+t)}).on("error",i)}));continue}let s;try{s=AH(+t,"::")}catch(n){console.error(`Unable to bind to port ${t}`,n);continue}e.push(new Promise((n,i)=>{r.listen({fd:s},()=>{n(),Zt.trace("Listening on port "+t,gE)}).on("error",i)}))}Promise.all(e).then(()=>{El?.postMessage({type:Tt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(LH,"startServers");yH||LH();function KR(e,t,r){let s=e?.read?e:new Kse({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=_n[t];if(n.isSecure&&(s.startTime=performance.now()),n)typeof n=="function"?n(s):n.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=_n[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(Zt.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(KR,"deliverSocket");var bH=new Map;function une(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=bH.get(n),r){case"connection":i=KR(void 0,t),bH.set(n,i),i.write=(c,u,_)=>(El.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(El.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),El.postMessage({requestId:n,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(s,"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(une,"proxyRequest");function WR(e,t,r=!0){!+t&&t!==De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(De.get(Tt.CONFIG_PARAMS.HTTP_PORT),10));let s=_n[t];if(s){let n=s.lastServer||s;if(n===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!n.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);n.off("unhandled",NH),n.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(s.cantCleanupProperly=!0),e.emit("request",i,o)}),s.lastServer=e}else _n[t]=e;e.on("unhandled",NH)}a(WR,"registerServer");function MH(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(Tt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:De.get(Tt.CONFIG_PARAMS.HTTP_PORT),secure:De.get(Tt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),De.get(Tt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:De.get(Tt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:De.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(MH,"getPorts");function QR(e,t){for(let{port:r,secure:s}of MH(t))UH(r,s,t?.isOperationsServer),typeof e=="function"?$R[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=s,WR(e,r,!1)),OE[r]=YR($R,r),ane=YR(cne,r)}a(QR,"httpServer");function UH(e,t,r){if(!wi[e]){let s=r?"operationsApi_network":"http",n={keepAliveTimeout:De.get(s+"_keepAliveTimeout"),headersTimeout:De.get(s+"_headersTimeout"),requestTimeout:De.get(s+"_timeout")},i=De.get(s+"_mtls"),o=De.get(s+"_mtls_required");if(t){s=r?"operationsApi_":"";let u=De.get(s+"tls_privateKey"),_=De.get(s+"tls_certificate"),l=De.get(s+"tls_certificateAuthority");Object.assign(n,{allowHTTP1:!0,key:$a(u),ciphers:De.get("tls_ciphers"),cert:$a(_),ca:l&&$a(l),rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:ene()})}let c=nne();wi[e]=(t?Jse:Qse)(n,async(u,_)=>{try{let d=performance.now(),f=new IH(u,_);r&&(f.isOperationsServer=!0);let E=await OE[e](f);if(!E){if(f._nodeResponse.statusCode)return;E=PH(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 H of E.headers||[])_.setHeader(H[0],H[1]);return u.baseRequest=f,_.baseResponse=E,wi[e].emit("unhandled",u,_)}let h=E.status||200,p=performance.now(),S=p-d,T=E.body,b;if(!E.handlesHeaders){let H=E.headers||new wH;T?T.length>=0&&(typeof T=="string"?H.set("Content-Length",Buffer.byteLength(T)):H.set("Content-Length",T.length),b=!0):(H.set("Content-Length","0"),b=!0);let P=`hdb;dur=${S.toFixed(2)}`;E.wasCacheMiss&&(P+=", miss"),rne(H,"Server-Timing",P,!0),_.writeHead(h,H&&(H[Symbol.iterator]?Array.from(H):H)),b&&_.end(T)}let R=f.handlerPath,L=f.method;if(fl(S,"duration",R,L,E.wasCacheMiss==null?void 0:E.wasCacheMiss?"cache-miss":"cache-hit"),sne(h<400,"success",R,L),!b)if(T?.pipe){T.pipe(_),T.destroy&&_.on("close",()=>{T.destroy()});let H=0;T.on("data",P=>{H+=P.length}),T.on("end",()=>{fl(performance.now()-p,"transfer",R,L),fl(H,"bytes-sent",R,L)})}else T?.then?T.then(H=>{_.end(H)},l):_.end(T)}catch(d){l(d)}function l(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?Zt.warn(d):Zt.info(d):Zt.error(d)}a(l,"onError")}),i&&(wi[e].mtlsConfig=i),t&&(wi[e].on("secureConnection",u=>{u._parent.startTime&&fl(performance.now()-u._parent.startTime,"tls-handshake",e),fl(u.isSessionReused(),"tls-reused",e)}),wi[e].isSecure=!0),WR(wi[e],e)}return wi[e]}a(UH,"getHTTPServer");function YR(e,t){let r=PH;for(let s=e.length;s>0;){let{listener:n,port:i}=e[--s];if(i===t||i==="all"){let o=r;r=a(c=>n(c,o),"next_callback")}}return r}a(YR,"makeCallbackChain");function PH(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new wH}}a(PH,"unhandled");function lne(e,t){QR(e,{requestOnly:!0,...t})}a(lne,"onRequest");function _ne(e,t){let r;if(t.securePort){let s=De.get("tls_privateKey"),n=De.get("tls_certificate"),i=t.mtls?.certificateAuthority||De.get("tls_certificateAuthority");r=Zse({ciphers:De.get("tls_ciphers"),key:$a(s),cert:$a(n),ca:i&&$a(i),rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls},e),_n[t.securePort]=r}return t.port&&(r=Wse(e),_n[t.port]=r),r}a(_ne,"onSocket");Object.defineProperty(zse.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 dne(e,t){let r;for(let{port:s,secure:n}of MH(t)){RE[s]||(RE[s]=new jse({server:r=UH(s,n)}),RE[s].on("connection",async(c,u)=>{try{let _=new IH(u);_.isWebSocket=!0;let l=OE[s](_),d=u.headers["sec-websocket-protocol"]||"",f=VR[s];if(d){let E;for(let h=0;h<f.length;h++){let p=f[h];p.protocol===d&&(E=!0,p.listener(c,_,l))}if(E)return}for(let E=0;E<f.length;E++){let h=f[E];h.protocol||h.listener(c,_,l)}}catch(_){Zt.warn("Error handling WebSocket connection",_)}}),RE[s].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=VR[s];o||(o=VR[s]=[]),o.push({listener:e,protocol:i}),OE[s]=YR($R,s)}return r}a(dne,"onWebSocket");function NH(e,t){t.writeHead(404),t.end(`Not found
30
+ `)}a(NH,"defaultNotFound")});async function qH({clientId:e,user:t,clean:r,will:s}){let n;if(e&&!r){let i=await JR.get(e,{returnNonexistent:!0});n=new ZR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await JR.get(e);i&&i.delete()}n=new yE(e,t)}return s&&(s.id=e,s.user={username:t?.username},hl.put(s)),n}function XR(){return NE++,NE>65500&&(NE=1),NE}function jR(e,t,r=e){let{topic:s,retain:n}=e;e.data=t,e.async=!0,e.authorize=!0;let i=Ti.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return je(r,()=>n?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var BH,Ii,HH,xH,JR,hl,NE,yE,ZR,GH=Re(()=>{Ae();xu();BH=x(wr()),Ii=x($());ro();HH=x(Ke()),xH=x(vH());nr();JR=ct({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"}]}}]}),hl=ct({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,HH.getWorkerIndex)()===0&&(async()=>{await xH.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of hl.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await tt.getUser(r.user.username)),je(r,()=>{try{jR(r,t)}catch{(0,Ii.warn)("Failed to publish will",t)}hl.delete(e.id,r)})}})();a(qH,"getSession");NE=1;a(XR,"getNextMessageId");yE=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,rh:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let l=this.subscriptions.find(T=>T.topic===n),d;l?(d=i>0,l.end(),this.subscriptions.splice(this.subscriptions.indexOf(l),1)):d=i===2;let f={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Ii.trace)("Resuming subscription from",n,"from",o);let E=Ti.getMatch(_);if(!E){let T=new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);throw T.statusCode=404,T}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let T=f.url.slice(1);if(T.indexOf("#")>-1&&T.indexOf("#")!==T.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,T.indexOf("+")===T.length-1)f.onlyChildren=!0,f.url="/"+T.slice(0,T.length-1);else{let b=T.split("/"),R;for(let P=0;P<b.length;P++)if(b[P].indexOf("+")>-1)if(b[P]==="+")R=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(s&&R)throw new Error("Filters can not be combined");let L=!0;b[b.length-1]==="#"&&(b.length--,L=!1),R&&(s=a(P=>{let k=P.id;if(!Array.isArray(k)||L&&k.length!==b.length)return!1;for(let B=0;B<b.length;B++)if(b[B]!=="+"&&b[B]!==k[B])return!1;return!0},"filter"));let H=b.indexOf("+");f.url="/"+(H>-1?b.slice(0,H):b).concat("").join("/")}}let h=E.path,p=E.Resource,S=await je(f,async()=>{let T=await p.subscribe(f);if(!T)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!T[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let b of T)try{let R;if(b.type&&b.type!=="put"&&b.type!=="delete"&&b.type!=="message"&&b.type!=="patch"||s&&!s(b))continue;r?(b.topic=n,R=this.needsAcknowledge(b)):(b.acknowledge?.(),R=XR());let L=b.id;Array.isArray(L)&&(L=Ra(L)),L==null&&(L=""),this.listener(h+"/"+L,b.value,R,t)}catch(R){(0,Ii.warn)(R)}})(),T});return S.topic=n,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=XR();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(s=>s.topic===t);if(r)return r.end(),!0}async publish(t,r){return t.user=this.user,jR(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};je(r,async()=>{if(!t){let s=await hl.get(this.sessionId,r);s?.doesExist()&&await jR(s,s.data,r)}await hl.delete(this.sessionId,r)}).catch(s=>{(0,Ii.warn)(`Error publishing MQTT will for ${this.sessionId}`,s)});for(let s of this.subscriptions)s.end();this.subscriptions=[]}};a(jR,"publish");ZR=class extends yE{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=XR(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Ii.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,BH.getNextMonotonicTime)()),(0,Ii.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),JR.put(this.sessionRecord)),t.qos}}});var rA={};Ye(rA,{bypassAuth:()=>fne,start:()=>Ene});function fne(){$H=!0}function Ene({server:e,port:t,network:r,webSocket:s,securePort:n,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i,sessions:new Set},c,u=r?.mtls;return s&&(c=e.ws((_,l,d)=>{if(_.protocol==="mqtt"){Yr.debug("Received WSS connection for MQTT from",_._socket.remoteAddress);let{onMessage:f,onClose:E}=kH(_,(h,p)=>{if(_.send(h),p&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},l,Promise.resolve(d).then(()=>l?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{Yr.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},s))),(t||n)&&(c=e.socket(async _=>{let l;if(Yr.debug("Received connection for MQTT from",_.remoteAddress),u){if(_.authorized)try{let E=u.user;E!==null?((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),l=await e.getUser(E,null,null),(0,ml.get)(Kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&eA.notify({username:l.username,status:Kr.AUTH_AUDIT_STATUS.SUCCESS,type:Kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})):Yr.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(E){Yr.error(E)}else if(u.required)return Yr.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!l&&$H&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,VH.getSuperUser)(),Yr.debug("Auto-authorizing local connection",l?.username));let{onMessage:d,onClose:f}=kH(_,E=>_.write(E),null,l,o);_.on("data",d),_.on("close",f),_.on("error",E=>{Yr.info("Socket error",E)})},{port:t,securePort:n,mtls:u})),c}function kH(e,t,r,s,n){FH||(FH=!0,nu(d=>{wE>0&&d.push({metric:"mqtt-connections",connections:wE,byThread:!0})}));let i;wE++;let o,c={protocolVersion:4},u=(0,IE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){wE--,i||(i=!0,o?.disconnect(),n.sessions.delete(o),ns(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await tt.getUser(d.username,d.password.toString(),r),(0,ml.get)(Kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&eA.notify({username:s.username,status:Kr.AUTH_AUDIT_STATUS.SUCCESS,type:Kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,ml.get)(Kr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&eA.error({username:s.username,status:Kr.AUTH_AUDIT_STATUS.FAILURE,type:Kr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return ns(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(n.authorizeClient?.(d,s),d.will){let R=e.deserialize||(e.deserialize=Ro(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?R(d.will.payload):void 0,delete d.will.payload}o=qH({user:s,...d}),o=await o,n.sessions.add(o)}catch(R){return Yr.error(R),ns(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:R.code||5,returnCode:R.code||128})}ns(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((R,L,H,P)=>{try{let k=R.indexOf("/",1),B=k>0?R.slice(0,k):R;f({cmd:"publish",topic:R,payload:E(L),messageId:H||Math.floor(Math.random()*1e8),qos:P.qos},B)}catch(k){Yr.error(k),o?.disconnect(),n.sessions.delete(o)}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let R of d.subscriptions){let L;try{L=(await o.addSubscription(R,R.qos>=1)).qos||0}catch(H){Yr.error(H),L=c.protocolVersion<5?128:H.statusCode===403?135:H.statusCode===404?143:128}h.push(L)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let R=[];for(let L of d.unsubscriptions)R.push(o.removeSubscription(L)?0:17);f({cmd:"unsuback",granted:R,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let p=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=Ro(r?.headers.get?.("content-type"))),T=d.payload?.length>0?S(d.payload):void 0,b;try{b=await o.publish(d,T)}catch(R){Yr.warn(R),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:b===!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),n.sessions.delete(o),ns(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){Yr.error(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,IE.generate)(h,c);t(S),qr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Ri(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var IE,VH,ml,Kr,tA,eA,Yr,$H,FH,wE,YH=Re(()=>{IE=require("mqtt-packet");GH();VH=x(ss());Oa();Nn();nr();ml=x(ee()),Kr=x(M()),tA=x($()),eA=(0,tA.loggerWithTag)("auth-event"),Yr=(0,tA.loggerWithTag)("mqtt"),$H=(0,ml.get)(Kr.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(fne,"bypassAuth");a(Ene,"start");wE=0;a(kH,"onSocket")});var Of={};Ye(Of,{component_errors:()=>Ka,loadComponent:()=>CE,loadComponentDirectories:()=>ex,setErrorReporter:()=>Sne});function ex(e,t){t&&(nA=t),e&&(iA=e);let r=[];if((0,Gs.existsSync)(sA)){let n=(0,Gs.readdirSync)(sA,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,gt.join)(sA,o);r.push(CE(c,nA,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(CE(s,nA,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{ZH=!0})}function Sne(e){Sl=e}async function CE(e,t,r,s,n,i){if(!WH.has(e)){WH.set(e,!0),n&&(iA=n);try{let o;s&&(Ka=new Map);let c=(0,gt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Gs.existsSync)(c)?o=s?(0,jH.getConfigObj)():(0,QH.parseDocument)((0,Gs.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=oA;let u=[],_=s;for(let l in o){let d=o[l];if(Ka.set(s?l:(0,gt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let b=e,R;for(;!(0,Gs.existsSync)(R=(0,gt.join)(b,"node_modules",l));)if(b=(0,gt.dirname)(b),b.length<(0,XH.getHdbBasePath)().length){R=null;break}if(R)f=await CE(R,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=pne[l];if(!f)continue;u.push(f);let h=a(b=>(b.origin=r,ct(b)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,T=!p?.https&&p?.port;if(Ya.isMainThread&&(f=await f.startOnMainThread?.({server:tt,ensureTable:h,port:T,securePort:S,resources:t,...d})||f,s&&p))for(let b of[T,S])try{if(+b&&!KH.includes(b)){let R=aA.get(cA.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);R&&pl.default.warn("Session affinity is not recommended and may cause memory leaks"),(R||!hE)&&(KH.push(b),oH(b,R))}}catch(R){console.error("Error listening on socket",b,R,l)}if(t.isWorker&&(f=await f.start?.({server:tt,ensureTable:h,port:T,securePort:S,resources:t,...d})||f),iA.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,JH.handleHDBError)("Can not reference parent directories");let b=(0,gt.join)(e,d.files).replace(/\\/g,"/"),R=b.indexOf("/*");if(R>-1&&d.files!==oA[l]?.files&&!(0,Gs.existsSync)(b.slice(0,R)))throw new Error(`The path '${b.slice(0,R)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let L=(0,gt.basename)(e),H=d.path||"/";H=H.startsWith("/")?H:H.startsWith("./")?"/"+L+H.slice(2):H==="."?"/"+L:"/"+L+"/"+H;let P,k,B;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",k=(0,gt.join)(e,z)}else(B=b.indexOf("/*"))>-1&&(k=b.slice(0,B+1),P=(0,gt.relative)(e,k));let J=!1;if(Ya.isMainThread&&f.setupDirectory&&(J=await f.setupDirectory?.(H,k,t)),t.isWorker&&f.handleDirectory&&(J=await f.handleDirectory?.(H,k,t)),J)continue;for(let z of await(0,zH.default)(b,{onlyFiles:!1,objectMode:!0})){let{path:X,dirent:Te}=z;_=!0;let ce=(0,gt.relative)(e,X).replace(/\\/g,"/");if(P)if(ce.startsWith(P))ce=ce.slice(P.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${ce}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let de=H+(H.endsWith("/")?"":"/")+ce;try{if(Te.isFile()){let Le=await mne(X);Ya.isMainThread&&await f.setupFile?.(Le,de,X,t),t.isWorker&&await f.handleFile?.(Le,de,X,t)}else Ya.isMainThread&&await f.setupDirectory?.(de,X,t),t.isWorker&&await f.handleDirectory?.(de,X,t)}catch(Le){Le.message=`Could not load ${Te.isFile()?"file":"directory"} '${X}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${Le.message}`,Sl?.(Le),((0,Wa.getWorkerIndex)()===0?console:pl.default).error(Le),t.set(d.path||"/",new Tl(Le)),Ka.set(s?l:(0,gt.basename)(e),Le.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,gt.basename)(e)}' due to: ${h.message}`,Sl?.(h),((0,Wa.getWorkerIndex)()===0?console:pl.default).error(h),t.set(d.path||"/",new Tl(h),null,!0),Ka.set(s?l:(0,gt.basename)(e),h.message)}}if(Ya.isMainThread&&!ZH&&i&&(0,Wa.watchDir)(e,async()=>ex()),o.extensionModule)return await t_((0,gt.join)(e,o.extensionModule));if(!_&&t.isWorker){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;Sl?.(new Error(l)),((0,Wa.getWorkerIndex)()===0?console:pl.default).error(l),Ka.set((0,gt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,Sl?.(o),t.set("",new Tl(o))}}}var Gs,gt,Ya,QH,aA,cA,zH,Wa,pl,JH,XH,hne,jH,mne,sA,iA,ZH,nA,Ka,pne,oA,KH,WH,Sl,Tl,bf=Re(()=>{Gs=require("fs"),gt=require("path"),Ya=require("worker_threads"),QH=require("yaml"),aA=x(ee()),cA=x(M());cb();db();fb();c0();zB();tH();zH=x(require("fast-glob")),Wa=x(Ke()),pl=x($());Hh();nr();JH=x(se());Os();Ae();aH();XH=x(ee()),hne=x(dH());hf();gH();YH();jH=x(Pr());mE();({readFile:mne}=Gs.promises),sA=aA.get(cA.CONFIG_PARAMS.COMPONENTSROOT),iA=new Map,Ka=new Map;a(ex,"loadComponentDirectories");pne={REST:kf,rest:kf,graphqlSchema:Bh,jsResource:qh,fastifyRoutes:yR,login:Fh,static:wR,operationsApi:hne,customFunctions:{},http:{},clustering:FR,authentication:Gu,mqtt:rA},oA={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(oA,"static",{value:{files:"web/**"}});KH=[],WH=new Map;a(Sne,"setErrorReporter");a(CE,"loadComponent");Tl=class extends qt{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 zR=g((Jpe,rx)=>{var{isMainThread:tx}=require("worker_threads"),{getTables:Tne}=(Ae(),ne(Ge)),{loadComponentDirectories:gne,loadComponent:Rne}=(bf(),ne(Of)),{resetResources:Ane}=(xu(),ne(pP)),One=og(),bne=Pr(),{dirname:Nne}=require("path"),{getConnection:yne}=st(),wne=ee(),Ine=M(),uA=new Map;async function Cne(e=!1){!tx&&wne.get(Ine.CONFIG_PARAMS.CLUSTERING_ENABLED)&&yne();try{tx&&await One()}catch(s){console.error(s)}let t=Ane();Tne(),t.isWorker=e,await Rne(Nne(bne.getConfigFilePath()),t,"hdb",!0,uA),await gne(uA,t);let r=[];for(let[s]of uA)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Cne,"loadRootComponents");rx.exports.loadRootComponents=Cne});var Ke=g((jpe,Di)=>{"use strict";var{Worker:Dne,MessageChannel:Lne,parentPort:dn,isMainThread:EA,threadId:Mne,workerData:Fn}=require("worker_threads"),{PACKAGE_ROOT:Une}=M(),{join:ox,isAbsolute:Pne,extname:vne}=require("path"),{server:ax}=(nr(),ne(vi)),{watch:Bne,readdir:Hne}=require("fs/promises"),{totalmem:sx}=require("os"),gl=M(),cx=ee(),kn=$(),{randomBytes:xne}=require("crypto"),{_assignPackageExport:qne}=require("../index"),Gne=M(),nx=1024*1024,Ci=[],Es=[],Fne=50,hA=1e4,kne="restart",ux="request_thread_info",lx="resource_report",_x="thread_info",dx="added-port",Vne="ack",lA;qne("threads",Es);Di.exports={startWorker:_A,restartWorkers:pA,shutdownWorkers:Qne,workers:Ci,setMonitorListener:rie,onMessageFromWorkers:zne,onMessageByType:Tx,broadcast:Xne,broadcastWithAcknowledgement:Zne,setChildListenerByType:Wne,getWorkerIndex:fx,getWorkerCount:Ex,getTicketKeys:mx,setMainIsWorker:Yne,setTerminateTimeout:$ne,restartNumber:Fn?.restartNumber||1};Es.onMessageByType=Tx;Es.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Es.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var mA;function $ne(e){hA=e}a($ne,"setTerminateTimeout");function fx(){return Fn?Fn.workerIndex:mA?0:void 0}a(fx,"getWorkerIndex");function Ex(){return Fn?Fn.workerCount:mA?1:void 0}a(Ex,"getWorkerCount");function Yne(e){mA=e}a(Yne,"setMainIsWorker");var hx=1,DE;function mx(){return DE||(DE=EA?xne(48):Fn.ticketKeys,DE)}a(mx,"getTicketKeys");Object.defineProperty(ax,"workerIndex",{get(){return fx()}});Object.defineProperty(ax,"workerCount",{get(){return Ex()}});var px={[ux](e,t){eie(t)},[lx](e,t){tie(t,e)}};function _A(e,t={}){let r=process.constrainedMemory?.()||sx();r=Math.min(r,sx(),2e4*nx);let s=cx.get(gl.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/nx/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of Es){let _=new Lne;_.existingPort=u,i.push(_),o.push(_.port2)}vne(e)||(e+=".js");let c=new Dne(Pne(e)?e:ox(Une,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:hx=t.threadCount,name:t.name,restartNumber:Di.exports.restartNumber,ticketKeys:mx()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:dx,port:u,threadId:c.threadId},[u]);return ME(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>_A(e,t),c.on("error",u=>{console.error("Worker error:",u),kn.error("Worker error:",u)}),c.on("exit",u=>{Ci.splice(Ci.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Fne?(t.unexpectedRestarts=c.unexpectedRestarts+1,_A(e,t)):kn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{px[u.type]?.(u,c)}),Ci.push(c),nie(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(_A,"startWorker");var Kne=[gl.THREAD_TYPES.HTTP];async function pA(e=null,t=Math.max(hx>3,1),r=!0){if(EA){if(r){let{loadRootComponents:o}=zR();await o()}Di.exports.restartNumber++,t<1&&(t=t*Ci.length);let s=[],n=[];for(let o of Ci.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;kn.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Di.exports.restartNumber,type:gl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Kne.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),hA*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===Gne.ITC_EVENT_TYPES.CHILD_STARTED&&(kn.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");kn.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=_f();r&&(e==="http"||!e)&&cx.get(gl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else dn.postMessage({type:kne,workerType:e})}a(pA,"restartWorkers");function Wne(e,t){px[e]=t}a(Wne,"setChildListenerByType");function Qne(e){return pA(e,1/0,!1)}a(Qne,"shutdownWorkers");var Sx=[];function zne(e){Sx.push(e)}a(zne,"onMessageFromWorkers");var dA=new Map;function Tx(e,t){let r=dA.get(e);r||dA.set(e,r=[]),r.push(t)}a(Tx,"onMessageByType");var Jne=10;async function Xne(e){let t=0;for(let r of Es)try{r.postMessage(e),t++>Jne&&(t=0,await new Promise(setImmediate))}catch(s){kn.error("Unable to send message to worker",s)}}a(Xne,"broadcast");var LE=new Map,jne=1;function Zne(e){return new Promise(t=>{let r=0;for(let s of Es)try{let n=jne++,i=a(()=>{LE.delete(n),--r===0&&t(),s!==dn&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,LE.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of LE)o.port===s&&o()})),s.postMessage(e),r++}catch(n){kn.error("Unable to send message to worker",n)}r===0&&t()})}a(Zne,"broadcastWithAcknowledgement");function eie(e){e.postMessage({type:_x,workers:gx()})}a(eie,"sendThreadInfo");function gx(){let e=Date.now();return Ci.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(gx,"getChildWorkerInfo");function tie(e,t){e.resources=t,e.resources.updated=Date.now()}a(tie,"recordResourceReport");var fA;function rie(e){fA=e}a(rie,"setMonitorListener");var sie=1e3,ix=!1;function nie(){ix||(ix=!0,setInterval(()=>{for(let e of Ci){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}fA&&fA()},sie).unref())}a(nie,"startMonitoring");var iie=1e3;if(dn){ME(dn);for(let e=0,t=Fn.addPorts.length;e<t;e++){let r=Fn.addPorts[e];r.threadId=Fn.addThreadIds[e],ME(r)}setInterval(()=>{let e=process.memoryUsage();dn.postMessage({type:lx,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},iie).unref(),lA=a(()=>new Promise((e,t)=>{dn.on("message",r),dn.postMessage({type:ux});function r(s){s.type===_x&&(dn.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else lA=gx;Di.exports.getThreadInfo=lA;function ME(e,t){Es.push(e),e.on("message",r=>{if(r.type===dx)r.port.threadId=r.threadId,ME(r.port);else if(r.type===Vne){let s=LE.get(r.id);s&&s()}else{for(let n of Sx)n(r,e);let s=dA.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){kn.error(i)}}}).on("close",()=>{Es.splice(Es.indexOf(e),1)}).on("exit",()=>{Es.splice(Es.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(ME,"addPort");if(EA){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Hne(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(ox(s,i.name));try{for await(let{filename:i}of Bne(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await pA(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");Di.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else dn.on("message",async e=>{let{type:t}=e;t===gl.ITC_EVENT_TYPES.SHUTDOWN&&(Di.exports.restartNumber=e.restartNumber,dn.unref(),setTimeout(()=>{kn.warn("Thread did not voluntarily terminate",Mne),process.exit(0)},hA).unref())})});var RC={};Ye(RC,{AUDIT_STORE_OPTIONS:()=>Dx,createAuditEntry:()=>o_,openAuditStore:()=>BE,readAuditEntry:()=>Dt,setAuditRetention:()=>aie,transactionKeyEncoder:()=>Cx});function BE(e){let t=e.auditStore=e.openDB(yx.AUDIT_STORE_NAME,Dx);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let s=null;function n(i=UE){clearTimeout(s),s=setTimeout(async()=>{if(t.rootStore.status==="closed")return;let o=0,c;try{for(let{key:u,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-SA})){if((_[0]&15)===RA){let l=Dt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=oie){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,SA/10)),n(i)}},i).unref()}return a(n,"scheduleAuditCleanup"),t.scheduleAuditCleanup=n,(0,vE.getWorkerIndex)()===(0,vE.getWorkerCount)()-1&&n(UE),t}function aie(e,t=UE){SA=e,UE=t}function o_(e,t,r,s,n,i,o){let c=Lx[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let u=1;s&&(s>1?Qa.setFloat64(0,s):hs.set(sm),u=9),f(0),f(t),d(r),Qa.setFloat64(u,e),u+=8,n?d(n):hs[u++]=0,hs[s?8:0]=c;let l=hs.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,za.writeKey)(E,hs,u);let p=u-h-1;p>127?p>16383?(OA.error("Key or username was too large for audit entry",E),u=h+1,hs[h]=0):(hs.copyWithin(h+2,h+1,u),Qa.setUint16(h,p|32768),u++):hs[h]=p}function f(E){E<128?hs[u++]=E:E<16384?(Qa.setUint16(u,E|32768),u+=2):E<1056964608?(Qa.setUint32(u,E|3221225472),u+=4):(hs[u]=255,Qa.setUint32(u+1,E),u+=5)}}function Dt(e){try{let t=e.dataView||(e.dataView=new AA(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:Lx[s&7],tableId:i,get recordId(){return Nx(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?Nx(e,l,d):void 0},getValue(f,E,h){if(s&TA||s&gA&&!E)return f.decoder.decode(e.subarray(t.position));if(s&gA&&h)return bA(f.getEntry(this.recordId),h,f)}}}catch(t){return OA.error("Reading audit entry error",t,e),{}}}function Nx(e,t,r){let s=e.subarray(t,r);return(0,za.readKey)(s,0,r-t)}var za,PE,yx,wx,vE,Ix,OA,hs,Qa,Cx,Dx,SA,oie,UE,TA,gA,Rx,RA,Ax,Ox,bx,Lx,AA,xi=Re(()=>{za=require("ordered-binary"),PE=x(ee()),yx=x(dt()),wx=x(M()),vE=x(Ke()),Ix=x(Q());bc();OA=x($());HE();(0,PE.initSync)();hs=Buffer.alloc(1024),Qa=new DataView(hs.buffer,hs.byteOffset,1024),Cx={writeKey(e,t,r){return e===Oc?(t.set(Oc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,za.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,za.readKey)(e,t,r)}},Dx={encoding:"binary",keyEncoder:Cx},SA=(0,Ix.convertToMS)((0,PE.get)(wx.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,oie=1e3,UE=1e4;a(BE,"openAuditStore");a(aie,"setAuditRetention");TA=16,gA=32,Rx=1,RA=2,Ax=3,Ox=4,bx=5,Lx={put:Rx|TA,[Rx]:"put",delete:RA,[RA]:"delete",message:Ax|TA,[Ax]:"message",invalidate:Ox,[Ox]:"invalidate",patch:bx|gA,[bx]:"patch"};a(o_,"createAuditEntry");a(Dt,"readAuditEntry");AA=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(Nx,"readKeySafely")});var NA={};Ye(NA,{add:()=>xE,applyReverse:()=>Mx,getRecordAtTime:()=>bA,rebuildUpdateBefore:()=>qE});function xE(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function qE(e,t){let r=null;for(let s in e)if(s in t){let n=t[s];if(n?.__op__){let i=e[s];if(i?.__op__)if(i.__op__===n.__op__)r||(r={}),r[s]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[s]=i,xE(r,s,n)}}else r||(r={}),r[s]=e[s];return r}function Mx(e,t){for(let r in t){let s=t[r];if(s?.__op__){let n=cie[s.__op__]?.reverse;if(n)n(e,r,{value:s.value});else throw new Error(`Unsupported operation ${s.__op__}`)}else e[r]=Ux}}function bA(e,t,r){let s=r.rootStore.auditStore,n=Object.assign({},e.value),i=e.localTime;for(;i>t;){let u=s.get(i),_=Dt(u);switch(_.type){case"put":n=_.getValue(r);break;case"patch":Mx(n,_.getValue(r));break;case"delete":n=null}i=_.previousLocalTime}let o={},c=0;for(let u in n)n[u]===Ux&&(o[u]=!0,c++);for(;c>0&&i>0;){let u=s.get(i),_=Dt(u),l;switch(_.type){case"put":l=_.getValue(r);break;case"patch":l=_.getValue(r);break}for(let d in l)o[d]&&(n[d]=l[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let u in o)n[u]=null;return n}var cie,Ux,HE=Re(()=>{xi();a(xE,"add");xE.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};cie={add:xE};a(qE,"rebuildUpdateBefore");a(Mx,"applyReverse");Ux={};a(bA,"getRecordAtTime")});function Wr(e){return e[It]||(e[It]=Object.create(null))}function $E(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u,_;if(o.resolve)_={get(){return o.resolve(this,this[Oe])},set(l){return o.set(this,l)},configurable:!0};else{switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a string, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a string, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a number, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new ms.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new ms.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"BigInt":u=a(function(l){if(!(typeof l=="bigint"||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=BigInt(l);else throw new ms.ClientError(`${c} must be a number, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new ms.ClientError(`${c} must be a Date, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Wr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Wr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new ms.ClientError(`${c} must be an object, attempt to assign ${l}`);Wr(this)[c]=l},"set")}_={get(){let l=this[It];if(l&&c in l){let f=l[c];if(f?.__op__){let E=this[_e]?.[c];return f.update(E)}return f}let d=this[_e]?.[c];if(d&&typeof d=="object"){let f=vx(d,o);if(f)return l||(l=this[It]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,s[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[It];return u?.[o]!==void 0?u[o]:this[_e]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new ms.ClientError("Can not add a property to a sealed table schema");Wr(this)[o]=c}),i("deleteProperty",function(o){Wr(this)[o]=void 0}),i("toJSON",function(){let o=this[It],c;for(let _ in o){c||(c=Object.assign({},this[_e]));let l=o[_];if(l?.__op__){let d=c[_];l=l.update(d)}c[_]=l}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[_e])),Object.assign(c,this)),c||this[_e]}),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 vx(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){if(n?.[_e])throw new Error("Can not track an already tracked object, check for circular references");this[_e]=n}},$E(r,t)),new r(e)):new GE(e);case Array:let s=new kE(e.length);s[_e]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=vx(o,t?.elements)),s[n]=o}return s;default:return e}}function nd(e){let t=e[It],r;for(let n in t){r||(r=Object.assign({},e[_e]));let i=t[n];if(i&&typeof i=="object")if(i.__op__){let o=r[n];i=i.update(o)}else i=nd(i);r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[_e])),Object.assign(r,e)),r||e[_e]}function Lo(e,t=e[It]){let r;if(Px.call(e,_e)&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=Lo(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[s]=i}return Object.freeze(r)}for(let s in t){r||(r=Object.assign({},e[_e]));let n=t[s];if(n&&typeof n=="object")if(n.__op__){let i=NA[n?.__op__];if(i)i(r,s,n);else throw new Error("Invalid CRDT operation "+n.__op__);continue}else n=Lo(n);r[s]=n}return r?Object.freeze(r):Px.call(e,_e)?e[_e]:e}function FE(e){let t=e[_e];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Do]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[_e]===n){if(FE(i))return!0}else return!0}}else{let r=e[It];if(r&&!t)return!0;for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[_e]===i){if(FE(n))return!0}else return!0}else return!0}}return!1}var ms,It,GE,Px,Do,kE,VE,id=Re(()=>{Os();ms=x(se());HE();It=Symbol("own-data");a(Wr,"getChanges");a($E,"assignTrackedAccessors");a(vx,"trackObject");GE=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[_e])throw new Error("Can not track an already tracked object, check for circular references");this[_e]=t}};$E(GE,{});a(nd,"collapseData");Px=Object.prototype.hasOwnProperty;a(Lo,"deepFreeze");a(FE,"hasChanges");Do=Symbol.for("has-array-changes"),kE=class extends Array{static{a(this,"TrackedArray")}[Do];constructor(t){super(t)}splice(...t){return this[Do]=!0,super.splice(...t)}push(...t){return this[Do]=!0,super.push(...t)}pop(){return this[Do]=!0,super.pop()}unshift(...t){return this[Do]=!0,super.unshift(...t)}shift(){return this[Do]=!0,super.shift()}};kE.prototype.constructor=Array;VE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var Lp={};Ye(Lp,{CONTEXT:()=>Oe,ID_PROPERTY:()=>Me,IS_COLLECTION:()=>ps,RECORD_PROPERTY:()=>_e,Resource:()=>qt,snake_case:()=>lie,transformForSelect:()=>KE});function lie(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Bx(e,t){if(Rl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(Rl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),s=new wA;for(let n=0;n<r.length;n++){let i=r[n];if(!i&&n===r.length-1){Rl=!0;break}s[n]=t.coerceId(decodeURIComponent(i))}return s}function Qr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_,l;if(r?(o?(l=i,o=o[Oe]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[Oe]||i):l=i:(l=n,c=l[Me]??l[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[Oe]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[],_=!0;for(let E of n){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null,_=!1)))}else{if(typeof(c=n.url)=="string"){let E=c.indexOf("?");if(E>-1){let p=this.parseQuery(c.slice(E+1));u?u=Object.assign(p,u):u=p,c=c.slice(0,E)}let h=this.parsePath(c,o,u);h?.id!==void 0?(h.query&&(u?u=Object.assign(h.query,u):u=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=n.id??null,c==null&&(_=!0))}else c=n??null,c==null&&(_=!0);o||(o={});let d;if(u?.ensureLoaded!=null||u?.async||_?(d=Object.assign({},t),u?.ensureLoaded!=null&&(d.ensureLoaded=u.ensureLoaded),u?.async&&(d.async=u.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 je(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,u,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,l,o):E.allowUpdate(o.user,l,o):t.type==="create"?E.allowCreate(o.user,l,o):E.allowDelete(o.user,u,o);if(h?.then)return h.then(p=>{if(!p)throw new YE(o.user);return typeof l?.then=="function"?l.then(S=>e(E,u,o,S)):e(E,u,o,l)});if(!h)throw new YE(o.user)}return typeof l?.then=="function"?l.then(h=>e(E,u,o,h)):e(E,u,o,l)}a(f,"authorizeActionOnResource")}}function zr(e,t){let r=new qx.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function yA(e,t,r){let s=e[_e];if(s){let n=e[It];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:n&&i in n?n[i]:(c=t?.[i])?c(e,r):s[i]}}else return t?n=>{let i=t[n];return i?i(e,r):e[n]}:n=>e[n]}function KE(e,t){let r=t?.propertyResolvers,s=t[Oe],n;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):yA(c,r,s)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(c);let _=[],l=i(yA(u,r,s));for(let d of e)_.push(l(d));return _},"transform");let o=e.forceNulls;return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(f=>f&&typeof f=="object"?c(f):f);let _={},l=i(yA(u,r,s)),d;for(let f of e){let E=l(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){n||(n={});let u=n[c.name];if(!u){let l=r[c.name]?.definition?.tableClass;u=n[c.name]=KE(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var Hx,xx,qx,Oe,Me,ps,_e,uie,qt,YE,Rl,wA,Os=Re(()=>{Hx=require("crypto");pc();xx=require("../index"),qx=x(se());id();ro();Gf();Oe=Symbol.for("context"),Me=Symbol.for("primary-key"),ps=Symbol("is-collection"),_e=Symbol("stored-record"),uie={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},qt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Me]=t;let s=r?.[Oe];this[Oe]=s!==void 0?s:r||null}static get=Qr(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null&&!c.selectApplied){let _=KE(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Qr(function(t,r,s,n){if(Array.isArray(n)&&t[ps]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):zr(t,"put")},{hasContent:!0,type:"update"});static patch=Qr(function(t,r,s,n){return t.patch?t.patch(n,r):zr(t,"patch")},{hasContent:!0,type:"update"});static delete=Qr(function(t,r,s,n){return t.delete?t.delete(r):zr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,Hx.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),je(s,()=>{let i=new this(n,s),o=i.update?i.update(r):zr(i,"update");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Qr(function(t,r,s,n){return t.invalidate?t.invalidate(r):zr(t,"delete")},{hasContent:!1,type:"update"});static post=Qr(function(t,r,s,n){return t[Me]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Qr(function(t,r,s,n){return t.connect?t.connect(n,r):zr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Qr(function(t,r,s,n){return t.subscribe?t.subscribe(r):zr(t,"subscribe")},{type:"read"});static publish=Qr(function(t,r,s,n){return t[Me]!=null&&t.update?.(),t.publish?t.publish(n,r):zr(t,"publish")},{hasContent:!0,type:"create"});static search=Qr(function(t,r,s,n){let i=t.search?t.search(r):zr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=KE(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Qr(function(t,r,s,n){return t.search?t.search(n,r):zr(t,"search")},{hasContent:!0,type:"read"});static copy=Qr(function(t,r,s,n){return t.copy?t.copy(n,r):zr(t,"copy")},{type:"create"});static move=Qr(function(t,r,s,n){return t.move?t.move(n,r):zr(t,"move")},{type:"delete"});post(t){if(this[ps])return this.constructor.create(this[Me],t,this[Oe]);zr(this,"post")}static isCollection(t){return t?.[ps]}static coerceId(t){return t}static parseQuery(t){return qf(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let o=t.slice(n+1);t=t.slice(0,n);let c=r?.headers&&uie[o];if(c)r.headers.set("accept",c);else if(s)s.property=o;else return{query:{property:o},id:Bx(t,this),isCollection:Rl}}let i=Bx(t,this);return Rl?{id:i,isCollection:!0}:i}static getResource(t,r,s){let n,i=r[Oe],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=s?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[Me]===t&&_.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Me],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else n=new c(t,i);return o&&(n[ps]=!0),n}subscribe(t){return new As}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new As}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[Me]}getContext(){return this[Oe]}};qt.prototype[Oe]=null;(0,xx._assignPackageExport)("Resource",qt);a(lie,"snake_case");YE=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(Bx,"pathToId");wA=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Qr,"transactional");a(zr,"missingMethod");a(yA,"selectFromObject");a(KE,"transformForSelect")});function Fx(e,t,r,s){let n=e.primaryStore.env.path,i=e.primaryStore.tableId;Ja||((0,WE.onMessageByType)(Gx,l=>{kx(l.path)}),Ja=Object.create(null));let o=Ja[n]||(Ja[n]=[]);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=Ra(t);let u=new CA(r);u.startTime=s;let _=c.get(t);return _?_.push(u):(c.set(t,_=[u]),_.tables=c,_.key=t),u.subscriptions=_,u}function kx(e,t){if(!Ja)return;let r=Ja[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:r.lastTxnTime,exclusiveStart:!0})){r.lastTxnTime=n;let o=Dt(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=Ra(o.recordId),d=0;do{let f=c.get(l);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=n){(0,IA.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,p)}catch(p){console.error(p),(0,IA.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E):l=null,d++}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function Vx(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,WE.broadcast)({type:Gx,path:n}),kx(n,!0)})}}var IA,WE,Gx,Ja,gSe,CA,$x=Re(()=>{IA=x($()),WE=x(Ke());pc();xu();xi();Gx="transaction",gSe=Buffer.alloc(4096);a(Fx,"addSubscription");CA=class extends As{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(kx,"notifyFromTransactionData");a(Vx,"listenToCommits")});var uR={};Ye(uR,{coerceType:()=>QE,makeTable:()=>XE,setServerUtilities:()=>Tie,updateResource:()=>zE});function XE(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l,sealed:d}=e,{expirationMS:f,evictionMS:E,audit:h,trackDeletes:p}=e,{attributes:S}=e;S||(S=[]),Vx(i,u);let T=om(i,s,u),b=0,R,L,H={},P=Promise.resolve(),k,B,J;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(k=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(B=K),K.expiresAt&&(J=K),K.isPrimaryKey&&(H=K);let z,X=[],Te=[],ce=1,de=2,Le={},Be={},Ct=864e5,ql,Gl,Yn,JA=!1,fh,Qq=i.getRange({start:!1,end:!1}).constructor,zq=10,Jq=6;h&&ZA();class ze extends qt{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=k;static updatedTimeProperty=B;static propertyResolvers;static sources=[];static get expirationMS(){return f}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,O){O&&(this.sourceOptions=O,(O.expiration||O.eviction||O.scanInterval)&&this.setTTLExpiration(O)),O?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),L=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let w=a(D=>{let y=this.sources.slice(0,-1);if(y=y.filter(U=>U[D]&&(!U[D].reliesOnPrototype||U.prototype[D])),y.length>0)if(y.length===1){let U=y[0];return(G,C,v)=>{if(G?.source!==U)return U[D](C,v,G)}}else return(U,G,C)=>{let v=[];for(let F of y){if(U?.source===F)break;v.push(F[D](G,C,U))}return Promise.all(v)}},"getApplyToIntermediateSource"),N=this.sources[this.sources.length-1],A=a(D=>{if(N[D]&&(!N[D].reliesOnPrototype||N.prototype[D]))return(y,U,G)=>{if(!y?.source)return N[D](U,G,y)}},"getApplyToCanonicalSource");return Le={put:A("put"),patch:A("patch"),delete:A("delete"),publish:A("publish")},Be={put:w("put"),patch:w("patch"),delete:w("delete"),publish:w("publish"),invalidate:w("invalidate")},(async()=>{let D=!1,y=a(async(U,G)=>{let C=U.value,v=U.table?rt[c][U.table]:ze;if(c===ks.SYSTEM_SCHEMA_NAME&&(U.table===ks.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||U.table===ks.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),U.id===void 0&&(U.id=C[v.primaryKey],U.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(U));U.source=m;let F=await v.getResource(U.id,G,Xa);switch(U.type){case"put":return F._writeUpdate(C,!0,Xa);case"patch":return F._writeUpdate(C,!1,Xa);case"delete":return F._writeDelete(Xa);case"publish":return F._writePublish(C,Xa);case"invalidate":return F.invalidate(Xa);default:Ze.error("Unknown operation",U.type,U.id)}},"writeUpdate");try{let U=m.subscribe;U&&p==null&&(p=!0);let G=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Uo.getWorkerIndex)()):(0,Uo.getWorkerIndex)()===0,C=U&&G&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let v;for await(let F of C)try{if(!(F.type==="transaction"?F.writes[0]:F)){Ze.error("Bad subscription event",F);continue}if(F.source=m,v)if(F.beginTxn)v.resolve();else{y(F,v);continue}if(F.type==="end_txn")continue;let be=je(F,()=>{if(F.type==="transaction"){let te=[];for(let Pe of F.writes)try{te.push(y(Pe,F))}catch(ae){throw ae.message+=" writing "+JSON.stringify(Pe)+" of event "+JSON.stringify(F),ae}return Promise.all(te)}else if(F.type==="define_schema"){let te=this.attributes.slice(0),Pe;for(let ae of F.attributes)te.find(qe=>qe.name===ae.name)||(te.push(ae),Pe=!0);Pe&&(ct({table:n,database:c,attributes:te,origin:"cluster"}),Il.signalSchemaChange(new Cl.SchemaEventMsg(process.pid,ks.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return F.beginTxn?(v=F,y(F,F),new Promise(te=>{v.resolve=te})):y(F,F)});D&&(await be,Il.signalUserChange(new Cl.UserEventMsg(process.pid))),F.onCommit&&(be?.then?be.then(F.onCommit):F.onCommit())}catch(oe){Ze.error("error in subscription handler",oe)}}}catch(U){Ze.error(U)}})(),this}static getResource(m,O,w){let N=super.getResource(m,O,w);if(m!=null){rc(m);try{if(N.hasOwnProperty(_e))return N;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let A=!w?.async||i.cache?.get(m),D=gs(O),y=D.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Eh(m,O,{transaction:y},A,U=>{if(U?zE(N,U):N[_e]=null,O.onlyIfCached&&O.noCacheStore){if(!N.doesExist())throw new Ss.ServerError("Entry is not cached",504)}else if(w?.ensureLoaded){let G=hh(m,U,O,N);if(G)return D?.disregardReadTxn(),N[DA]=!0,MA(G,C=>(zE(N,C),N))}return N})}catch(A){throw A.message.includes("Unable to serialize object")&&(A.message+=": "+JSON.stringify(m)),A}}return N}ensureLoaded(){let m=hh(this[Me],this[Jr],this[Oe]);if(m)return this[DA]=!0,MA(m,O=>{this[Jr]=O,this[_e]=O.value,this[yl]=O.version})}static setTTLExpiration(m){if(typeof m=="number")f=m*1e3,E||(E=0);else if(m&&typeof m=="object")f=m.expiration*1e3,E=(m.eviction||0)*1e3,Ct=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(f<0)throw new Error("Expiration can not be negative");Ct=Ct||(f+E)/4,ph()}static enableAuditing(m=!0){h=m,m&&ZA(),ze.audit=m}static coerceId(m){return m===""?null:QE(m,H)}static async dropTable(){if(delete rt[c][n],c===o){for(let m of S)l.remove(ze.tableName+"/"+m.name),r[m.name]?.drop();l.remove(ze.tableName+"/"),i.drop(),await l.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));Il.signalSchemaChange(new Cl.SchemaEventMsg(process.pid,ks.OPERATIONS_ENUM.DROP_TABLE,c,n))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[ps])return this.search(m);if(this[Me]===null){if(m?.conditions)return this.search(m);let O=ze.getRecordCount();return{recordCount:O.recordCount,estimatedRecordRange:O.estimatedRange,records:"./",name:n,database:c,attributes:S}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[Oe]?.returnNonexistent)return this}allowRead(m,O){let w=kl(m);if(w?.read){if(w.isSuperUser)return!0;let N=w.attribute_permissions,A=O?.select;if(N?.length>0||JA&&A){if(O||(O={}),A){let D=N?.length>0&&LA(N,"read");O.select=A.map(y=>{let U=y.name||y;if(!D||D[U]){let G=Yn[U]?.definition?.tableClass;if(G){if(y.name||(y={name:y}),!G.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else O.select=N.filter(D=>D.read&&!Yn[D.attribute_name]).map(D=>D.attribute_name);return O}else return!0}}allowUpdate(m,O){let w=kl(m);if(w?.update){let N=w.attribute_permissions;if(N?.length>0){let A=LA(N,"update");for(let D in O)if(!A[D])return!1;for(let D of N){let y=D.attribute_name;!D.update&&!(y in O)&&(O[y]=this.getProperty(y))}}return!0}}allowCreate(m,O){if(this[ps]){let w=kl(m);if(w?.insert){let N=w.attribute_permissions;if(N?.length>0){let A=LA(N,"insert");for(let D in O)if(!A[D])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return kl(m)?.delete}update(m,O){if(!gs(this[Oe]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let N;return typeof m=="object"&&m&&(O?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[_e]={},this[It]=m):(N=this[It],N&&(m=Object.assign(N,m)),this[It]=N=m)),this._writeUpdate(this[It],O),this}addTo(m,O){if(typeof O=="number")this[Al]===Kx?this.set(m,(+this.getProperty(m)||0)+O):(this[Al]||this.update(),this.set(m,new VE(O)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,O){if(typeof O=="number")return this.addTo(m,-O);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let O=this[Oe],w=this[Me];rc(w),gs(this[Oe]).addWrite({key:w,store:i,invalidated:!0,entry:this[Jr],nodeName:this[Oe]?.nodeName,before:Le.invalidate?.bind(this,O,w),beforeIntermediate:Be.invalidate?.bind(this,O,w),commit:(A,D)=>{if(D?.version>A)return;let y=null;for(let U in r)y||(y={}),y[U]=this.getProperty(U);T(w,y,this[Jr],A,Ol,h,this[Oe],0,"invalidate")}})}static evict(m,O,w){let N=this.Source,A;if(!((L||h)&&(!O||(A=i.getEntry(m),!A||!O)||A.version!==w))){if(L){if(i.hasLock(m,A.version))return;let D;for(let y in r)D||(D={}),D[y]=O[y];if(D)return T(m,D,A,w,bl,null,null,0,null,!0)}return i.ifVersion(m,w,()=>{Fl(m,O,null)}),h?T(m,null,A,w,bl,null,null,0,null,!0):i.remove(m,w)}}lock(){throw new Error("Not yet implemented")}static operation(m,O){return m.table||=n,m.schema||=c,jx.operation(m,O)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,O,w){let N=this[Oe],A=gs(N),D=this[Me];rc(D);let y=this[Jr];this[Al]=O?Kx:mie;let U={key:D,store:i,entry:y,nodeName:N?.nodeName,validate:G=>{m||(m=this[It]),O||m&&FE(m)?N?.source||(A.checkOverloaded(),this.validate(m,!O),B&&(m[B.name]=B.type==="Date"?new Date(G):B.type==="String"?new Date(G).toISOString():G),O&&(t&&m[t]!==D&&(m[t]=D),k&&(y?.value?m[k.name]=y?.value[k.name]:m[k.name]=k.type==="Date"?new Date(G):k.type==="String"?new Date(G).toISOString():G),m=Lo(m))):A.removeWrite(U)},before:O?Le.put?()=>Le.put(N,D,m):null:Le.patch?()=>Le.patch(N,D,m):Le.put?()=>Le.put(N,D,Lo(this)):null,beforeIntermediate:O?Be.put?()=>Be.put(N,D,m):null:Be.patch?()=>Be.patch(N,D,m):Be.put?()=>Be.put(N,D,Lo(this)):null,commit:(G,C,v)=>{if(v){if(N&&C?.version>(N.lastModified||0)&&(N.lastModified=C.version),this[Jr]=C,C?.value?.[_e])throw new Error("Can not assign a record to a record, check for circular references");O||(this[_e]=C?.value??null)}this[It]=m,this[yl]=G;let F=C?.value,oe=m;if(this[Al]=0,C?.version>=G)if(h){let ae=C.localTime,qe=C.version;for(;oe&&(ae>G||qe>=G&&ae>0);){let re=u.get(ae);if(!re)break;let j=Dt(re);if(qe=j.version,qe>G){if(j.type==="patch"){let ge=j.getValue(i);oe=qE(oe,ge)}else if(j.type==="put"||j.type==="delete")return}else if(qe===G)return;ae=j.previousLocalTime}}else{if(O)return;oe=qE(oe,F)}let be;if(O?be=oe:(this[_e]=F,be=O?oe:Lo(this,oe)),this[_e]=be,be?.[_e])throw new Error("Can not assign a record to a record, check for circular references");let te;O||(te=m),Fl(D,F,be);let Pe=O?"put":"patch";T(D,be,C,G,0,h,N,N.expiresAt||(f?f+Date.now():0),Pe,!1,te)}};A.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[ps]){for await(let O of this.search(m))(await ze.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[_e]?this._writeDelete(m):!1}_writeDelete(m){let O=gs(this[Oe]),w=this[Me];rc(w);let N=this[Oe];return O.addWrite({key:w,store:i,resource:this,nodeName:N?.nodeName,before:Le.delete?.bind(this,N,w),beforeIntermediate:Be.delete?.bind(this,N,w),commit:(A,D,y)=>{let U=D?.value;y&&(N&&D?.version>(N.lastModified||0)&&(N.lastModified=D.version),zE(this,D)),!(D?.version>A)&&(Fl(this[Me],U),Ze.trace("Write delete entry",w,A),h||p?(T(w,null,this[Jr],A,0,h,this[Oe],0,"delete"),h||ph()):i.remove(this[Me]))}}),!0}search(m){let O=this[Oe],w=gs(O);if(!m)throw new Error("No query provided");let N=m.conditions;N?N.length===void 0&&(N=N[Symbol.iterator]?Array.from(N):[N]):N=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Me]&&(N=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(N));let A,D={};function y(j,ge){let He;switch(ge){case"and":case void 0:if(j.length<1)throw new Error('An "and" operator requires at least one condition');He=!0;break;case"or":if(j.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ge)}let Vs=He&&{},Kn;for(let $e of j){if($e.conditions){$e.conditions=y($e.conditions,$e.operator);continue}let Ht=$e[0]??$e.attribute,es=Ht==null?H:Bn(S,Ht);if(es){if(He){let $s=Hs(Ht),xt=Vs[$s];xt?(xt.push($e),Kn=!0):Vs[$s]=[$e]}(es.type||vg[$e.comparator])&&($e[1]===void 0?$e.value=G($e.value,es):$e[1]=G($e[1],es))}else if(Ht!=null)throw(0,Ss.handleHDBError)(new Error,`${Ht} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return j;if(Kn)for(let $e in Vs){let Ht=Vs[$e],es=Ht.length;if(es>1)for(let $s=0;$s<es;$s++){let xt=Ht[$s];if(xt.comparator==="ge"||xt.comparator==="greater_than_equal")for(let Wn=0;Wn<es;Wn++){let Ho=Ht[Wn];(Ho.comparator==="le"||Ho.comparator==="less_than_equal")&&(xt.comparator="between",xt.value=[xt.value,Ho.value],j.splice(j.indexOf(Ho),1))}if(xt.comparator==="equals"||!xt.comparator){for(let Wn=0;Wn<es;Wn++)if(Wn!==$s){let Ho=Ht[Wn];j.splice(j.indexOf(Ho),1)}break}}}return j}a(y,"prepareConditions");function U(j,ge){if(m.enforceExecutionOrder)return j;for(let He of j)He.conditions&&(He.conditions=U(He.conditions,He.operator));return j.length>1&&ge!=="or"?(0,Xx.sortBy)(j,xf(ze)):j}a(U,"orderConditions");function G(j,ge){return Array.isArray(j)?j.map(He=>QE(He,ge)):QE(j,ge)}a(G,"coerceTypedValues");let C=m.operator;(N.length>0||C)&&(N=y(N,C));let v=typeof m.sort=="object"&&m.sort,F;if(v&&C!=="or"){let j=v.attribute;if(A=N.find(ge=>Hs(ge.attribute)===Hs(j)),!A){if(!Bn(S,j))throw(0,Ss.handleHDBError)(new Error,`${Array.isArray(j)?j.join("."):j} is not a defined attribute`,404);A={attribute:j,comparator:"sort"},N.push(A)}A.descending=!!v.descending}N=U(N,C),v&&(N[0]===A?v.next&&(F={dbOrderedAttribute:v.attribute,attribute:v.next.attribute,descending:v.next.descending,next:v.next.next}):(A&&N.splice(N.indexOf(A),1),F=v));let oe=m.select;if(N.length===0&&(N=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:N,operator:C,postOrdering:F,selectApplied:!!oe};let be=w.useReadTxn(),te=Bg(N,C,ze,be,m,O,(j,ge)=>XA(j,oe,O,be,ge),D),Pe=m.ensureLoaded!==!1;F||(te=re(te));let ae=ze.transformEntryForSelect(oe,O,be,D,Pe,!0),qe=ze.transformToOrderedSelect(te,oe,F,be,O,ae);function re(j){return m.offset||m.limit!==void 0?j.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):j}return a(re,"applyOffset"),F&&(qe=re(qe)),qe.onDone=()=>{qe.onDone=null,w.doneReadTxn()},qe.selectApplied=!0,qe.getColumns=()=>{if(oe){let j=[];for(let ge of oe)ge==="*"?j.push(...S.map(He=>He.name)):j.push(ge.name||ge);return j}return S.map(j=>j.name)},qe}static transformToOrderedSelect(m,O,w,N,A,D){let y=new Qq;if(w){m=XA(m,O,N,A,null);let U;y.iterate=function(){let C,v=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),F,oe=w.dbOrderedAttribute,be,te,Pe=!0;function ae(re){let j=re.next&&ae(re.next),ge=re.descending;return(He,Vs)=>{let Kn=mh(He,re.attribute,N),$e=mh(Vs,re.attribute,N),Ht=ge?(0,Po.compareKeys)($e,Kn):(0,Po.compareKeys)(Kn,$e);return Ht===0?j?.(He,Vs)||0:Ht}}a(ae,"createComparator");let qe=ae(w);return{async next(){let re;if(C)if(re=C.next(),re.done){if(F)return y.onDone&&y.onDone(),re}else return{value:await D.call(this,re.value)};U=[],be&&U.push(be);do if(re=await v.next(),re.done){if(F=!0,U.length)break;return y.onDone&&y.onDone(),re}else{let j=re.value;if(j?.then&&(j=await j),oe){let ge=mh(j,oe,N);if(Pe)Pe=!1,te=ge;else if(ge!==te){te=ge,be=j;break}}U.push(j)}while(!0);return w.isGrouped,U.sort(qe),C=U[Symbol.iterator](),re=C.next(),re.done?(y.onDone&&y.onDone(),re):{value:await D.call(this,re.value)}},return(){y.onDone&&y.onDone(),v.return()},throw(){y.onDone&&y.onDone(),v.throw()}}};let G=a(C=>{if(typeof O=="object"&&Array.isArray(C.attribute))for(let v=0;v<O.length;v++){let F=O[v],oe;if(F.name===C.attribute[0]){for(oe=F.sort||(F.sort={});oe.next;)oe=oe.next;oe.attribute=C.attribute.slice(1),oe.descending=C.descending}else F===C.attribute[0]&&(O[v]=oe={name:F,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&G(C.next)},"applySortingOnSelect");G(w)}else y.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),y=y.map(D);return y}static transformEntryForSelect(m,O,w,N,A,D){if(m&&(m===t||m?.length===1&&m[0]===t)){let C=a(v=>v?.key??v,"transform");return m===t?C:m.asArray?v=>[C(v)]:v=>({[t]:C(v)})}let y;A&&L&&!m?.every(C=>{let v;return typeof C=="object"?v=C.name:v=C,r[v]||v===t})&&(y=!0);let U,G=a(function(C){let v;if(C!=null){if(fh=C,v=C.value||C.deref?.(),!v&&(C.key===void 0||C.deref)){if(C=Eh(C.key??C,O,{transaction:w,lazy:m?.length<4},this.isSync,F=>F),C?.then)return C.then(G.bind(this));v=C?.value}if(y&&(C.metadataFlags&(Ol|bl)||C.expiresAt&&C.expiresAt<Date.now())){let F=hh(C.key??C,C,O);if(F?.then)return F.then(G)}}if(v==null)return D?Mo.SKIP:v;if(m&&!(m[0]==="*"&&m.length===1)){let F,oe=a((te,Pe)=>{let ae;typeof te=="object"?ae=te.name:ae=te;let qe=Yn?.[ae],re;if(qe){let j=N?.[ae];if(j)if(j.hasMappings){let He=qe.from?v[qe.from]:Hs(C.key);re=j.get(He),re||(re=[])}else re=j.fromRecord?.(v);else re=qe(v,O,C);let ge=a(He=>{if(He&&typeof He=="object"){let Vs=qe.definition?.tableClass||ze;U||(U={});let Kn=U[ae]||(U[ae]=Vs.transformEntryForSelect(ae===te?null:te.select||(Array.isArray(te)?te:null),O,w,j,A));if(Array.isArray(He)){let $e=[],Ht=Vs.transformToOrderedSelect(He,te.select,typeof te.sort=="object"&&te.sort,O,w,Kn)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),es=a(xt=>{for(;!xt.done;){if(xt?.then)return xt.then(es);$e.push(xt.value),xt=Ht.next()}Pe($e,ae)},"nextValue"),$s=es(Ht.next());$s&&(F||(F=[]),F.push($s));return}else if(He=Kn.call(this,He),He?.then){F||(F=[]),F.push(He.then($e=>Pe($e,ae)));return}}Pe(He,ae)},"handleResolvedValue");re?.then?(F||(F=[]),F.push(re.then(ge))):ge(re);return}else re=v[ae],re&&typeof re=="object"&&ae!==te&&(re=ze.transformEntryForSelect(te.select||te,O,w,null)({value:re}));Pe(re,ae)},"selectAttribute"),be;if(typeof m=="string")oe(m,te=>{be=te});else if(Array.isArray(m))if(m.asArray)be=[],m.forEach((te,Pe)=>{te==="*"?m[Pe]=v:oe(te,ae=>be[Pe]=ae)});else{be={};let te=m.forceNulls;for(let Pe of m)if(Pe==="*")for(let ae in v)be[ae]=v[ae];else oe(Pe,(ae,qe)=>{ae===void 0&&te&&(ae=null),be[qe]=ae})}else throw new Ss.ClientError("Invalid select"+m);return F?Promise.all(F).then(()=>be):be}return v},"transform");return G}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");h||ct({table:n,database:c,schemaDefined:_,attributes:S,audit:!0}),m||(m={});let O=!m.rawEvents,w=Fx(ze,this[Me]??null,function(y,U,G,C){try{let v=U.getValue?.(i,O);if(!v&&U.type==="patch"&&O){let F=i.getEntry(y);F?.version===U.version?v=F.value:v=U.getValue?.(i,!0,G),U.type="put"}this.send({id:y,timestamp:G,value:v,version:U.version,type:U.type,beginTxn:C})}catch(v){Ze.error(v)}},m.startTime||0,this[ps]);this[ps]&&(w.includeDescendants=!0,m.onlyChildren&&(w.onlyChildren=!0)),m.crossThreads===!1&&(w.crossThreads=!1),m.supportsTransactions&&(w.supportsTransactions=!0);let N=this[Me],A=m.previousCount;A>1e3&&(A=1e3);let D=m.startTime;if(this[ps]){if(D){if(A)throw new Ss.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:U}of u.getRange({start:D,exclusiveStart:!0})){let G=Dt(U);if(G.tableId!==s)continue;let C=G.recordId;if(N==null||zx(N,C)){let v=G.getValue(i,O,y);w.send({id:C,timestamp:y,value:v,version:G.version,type:G.type})}w.startTime=y}}else if(A){let y=[];for(let{key:U,value:G}of u.getRange({start:"z",end:!1,reverse:!0}))try{let C=Dt(G);if(C.tableId!==s)continue;let v=C.recordId;if(N==null||zx(N,v)){let F=C.getValue(i,O,U);if(y.push({id:v,timestamp:U,value:F,version:C.version,type:C.type}),--A<=0)break}}catch(C){Ze.error("Error getting history entry",U,C)}for(let U=y.length;U>0;)w.send(y[--U]);y[0]&&(w.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:U,version:G,localTime:C}of i.getRange({start:N??!1,end:N==null?void 0:[N,Po.MAXIMUM_KEY],versions:!0}))U&&w.send({id:y,timestamp:C,value:U,version:G,type:"put"})}else{A&&!D&&(D=0);let y=this[Jr]?.localTime;if(y===im&&(i.cache?.delete(N),this[Jr]=i.getEntry(N),Ze.trace("re-retrieved record",y,this[Jr]?.localTime),y=this[Jr]?.localTime),Ze.trace("Subscription from",D,"from",N,y),D<y){let U=[],G=y;do{let C=u.get(G);if(C){m.omitCurrent=!0;let v=Dt(C),F=v.getValue(i,O,G);O&&(v.type="put"),U.push({id:N,value:F,timestamp:G,...v}),G=v.previousLocalTime}else break;A&&A--}while(G>D&&A!==0);for(let C=U.length;C>0;)w.send(U[--C]);w.startTime=y}!m.omitCurrent&&this.doesExist()&&w.send({id:N,timestamp:y,value:this,version:this[yl],type:"put"})}return m.listener&&w.on("data",m.listener),w}doesExist(){return!!(this[_e]||this[Al])}publish(m,O){this._writePublish(m,O)}_writePublish(m,O){let w=gs(this[Oe]),N=this[Me]||null;rc(N);let A=this[Oe];w.addWrite({key:N,store:i,entry:this[Jr],nodeName:A?.nodeName,validate:()=>{A?.source||(w.checkOverloaded(),this.validate(m))},before:Le.publish?.bind(this,A,N,m),beforeIntermediate:Be.publish?.bind(this,A,N,m),commit:(D,y,U)=>{y===void 0&&p&&!h&&ph(),T(N,y?.value??null,y,y?.version||D,0,!0,A,y?.expiresAt,"message",!1,m)}})}validate(m,O){let w,N=a((A,D,y)=>{if(D.type&&A!=null)if(O&&A.__op__&&(A=A.value),D.properties){typeof A!="object"&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be an object${D.type?" ("+D.type+")":""}`);let U=D.properties;for(let G=0,C=U.length;G<C;G++){let v=U[G],F=N(A[v.name],v,y+"."+v.name);F&&(A[v.name]=F)}if(D.sealed&&A!=null&&typeof A=="object")for(let G in A)U.find(C=>C.name===G)||(w||(w=[])).push(`Property ${G} is not allowed within object in property ${y}`)}else switch(D.type){case"Int":(typeof A!="number"||A>>0!==A)&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof A!="number"||!(Math.floor(A)===A&&Math.abs(A)<=9007199254740992))&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof A!="number"&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a number`);break;case"ID":typeof A=="string"||A?.length>0&&A.every?.(U=>typeof U=="string")||(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof A!="string"&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a string`);break;case"Boolean":typeof A!="boolean"&&(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a boolean`);break;case"Date":if(!(A instanceof Date)){if(typeof A=="string"||typeof A=="number")return new Date(A);(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof A!="bigint"){if(typeof A=="string"||typeof A=="number")return BigInt(A);(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a bigint`)}break;case"Bytes":A instanceof Uint8Array||(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(A)){if(D.elements)for(let U=0,G=A.length;U<G;U++){let C=A[U],v=N(C,D.elements,y+"[*]");v&&(A[U]=v)}}else(w||(w=[])).push(`Value ${Fs(A)} in property ${y} must be a Buffer or Uint8Array`);break}D.nullable===!1&&A==null&&(w||(w=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let A=0,D=S.length;A<D;A++){let y=S[A];if(!y.relationship&&(!O||y.name in m)){let U=N(m[y.name],y,y.name);U&&(m[y.name]=U)}}if(d)for(let A in m)S.find(D=>D.name===A)||(w||(w=[])).push(`Property ${A} is not allowed`);if(w)throw new Ss.ClientError(w.join(". "))}getUpdatedTime(){return this[yl]}wasLoadedFromSource(){return L?!!this[DA]:void 0}static async addAttributes(m){let O=S.slice(0);for(let w of m){if(!w.name)throw new Ss.ClientError("Attribute name is required");if(w.name.match(/[`/]/))throw new Ss.ClientError("Attribute names cannot include backticks or forward slashes");O.push(w)}return ct({table:n,database:c,schemaDefined:_,attributes:O}),ze.indexingOperation}static async removeAttributes(m){let O=S.filter(w=>!m.includes(w.name));return ct({table:n,database:c,schemaDefined:_,attributes:O}),ze.indexingOperation}static getRecordCount(m){let O=i.getStats().entryCount,w=5e3,N=1e3,A;O>w&&!m?.exactCount&&(A=N);let D=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:A}))y!=null&&D++;if(A){let y=D;D=0;for(let{value:Pe}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:A}))Pe!=null&&D++;let U=A*2,G=(D+y)/U,C=Math.pow((D-y+1)/A/2,2)+G*(1-G)/U,v=Math.max(Math.sqrt(C)*O,1),F=Math.round(G*O),oe=Math.max(F-1.96*v,0),be=Math.min(F+1.96*v,O),te=Math.pow(10,Math.round(Math.log10(v)));return te>F&&(te=te/10),D=Math.round(F/te)*te,{recordCount:D,estimatedRange:[Math.round(oe),Math.round(be)]}}return{recordCount:D}}static updatedAttributes(){Yn=this.propertyResolvers={$id:(m,O,w)=>({value:w.key}),$updatedtime:(m,O,w)=>w.version,$record:(m,O,w)=>w?{value:m}:m};for(let m of this.attributes){m.resolve=null;let O=m.relationship;if(O)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),JA=!0,O.to)m.elements?.definition?(Yn[m.name]=m.resolve=(w,N,A)=>{let D=w[O.from?O.from:t],y=m.elements.definition.tableClass;return A?Ma({attribute:O.to,value:D},gs(N).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:O.to,value:D}],N).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,O.from&&(m.resolve.from=O.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${n}" must have an array type referencing a table as the elements`);else if(O.from){let w=m.definition||m.elements?.definition;w?(Yn[m.name]=m.resolve=(N,A,D)=>{let y=N[O.from];if(y!==void 0){if(m.elements){let U,G=y.map(C=>{let v=D?w.tableClass.primaryStore.getEntry(C,{transaction:gs(A).getReadTxn()}):w.tableClass.get(C,A);return v?.then&&(U=!0),v});return O.filterMissing?U?Promise.all(G).then(C=>C.filter(Jx)):G.filter(Jx):U?Promise.all(G):G}return D?w.tableClass.primaryStore.getEntry(y,{transaction:gs(A).getReadTxn()}):w.tableClass.get(y,A)}},m.set=(N,A)=>{if(Array.isArray(A)){let D=A.map(y=>y[Me]||y[w.tableClass.primaryKey]);N[O.from]=D}else{let D=A[Me]||A[w.tableClass.primaryKey];N[O.from]=D}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=O.from):console.error(`The relationship property "${m.name}" in table "${n}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${n}" must use either "from" or "to" arguments`)}$E(this,this)}static async deleteHistory(m=0){let O;for(let{key:w,value:N}of u.getRange({start:0,end:m}))await Nl(),Dt(N).tableId===s&&(O=u.remove(w));await O}static async*getHistory(m=0,O=1/0){for(let{key:w,value:N}of u.getRange({start:m,end:O})){await Nl();let A=Dt(N);A.tableId===s&&(yield{id:A.recordId,localTime:w,version:A.version,type:A.type,value:A.getValue(i,!0,w),user:A.user})}}static async getHistoryOfRecord(m){let O=[];if(m==null)throw new Error("An id is required");let w=i.getEntry(m);if(!w)return O;let N=w.localTime;if(!N)throw new Error("The entry does not have a local audit time");let A=0;do{await Nl();let D=u.get(N);if(D){let y=Dt(D);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(A<1e3&&N);return O.reverse()}static cleanup(){z?.remove()}}ze.updatedAttributes();let Xq=ze.prototype;return Xq[hie]=!0,f&&ze.setTTLExpiration(f/1e3),J&&jq(),ze;function Fl(K,m,O){let w;for(let N in r){let A=r[N],D=A.isIndexing,y=O?.[N],U=m?.[N];if(y===U&&!D)continue;w=!0;let G=A.indexNulls,C=(0,wl.getIndexedValues)(U,G);if(C){Yx&&A.prefetch(C.map(v=>({key:v,value:K})),Qx);for(let v=0,F=C.length;v<F;v++)A.remove(C[v],K)}if(C=(0,wl.getIndexedValues)(y,G),C){Yx&&A.prefetch(C.map(v=>({key:v,value:K})),Qx);for(let v=0,F=C.length;v<F;v++)A.put(C[v],K)}}return w}a(Fl,"updateIndices");function rc(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>Wx)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)return!0;break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,Po.writeKey)(K,pie,0)>Wx)throw new Error("Primary key size is too large: "+K.length);return!0}a(rc,"checkValidId");function Eh(K,m,O,w,N){let A=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),O.transaction?.isDone)return N(null,K);let D=i.getEntry(K,O);return D&&m&&(D?.version>(m.lastModified||0)&&(m.lastModified=D.version),D?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=D.localTime)),N(D,K)},"whenPrefetched");return w?A():ce>0?(ce--,A()):new Promise((D,y)=>{ce===0?(ce--,i.prefetch([K],()=>{U(),G()})):(X.push(K),Te.push(G),X.length>Jq&&(ce--,U()));function U(){if(X.length>0){let C=Te;i.prefetch(X,()=>{ce===-1?U():ce++;for(let v of C)v()}),X=[],Te=[],de>2&&de--}else ce=de,de<zq&&de++}a(U,"prefetch");function G(){try{D(A())}catch(C){y(C)}}a(G,"load")})}a(Eh,"loadLocalRecord");function kl(K){if(!K?.role)return;let m=K.role.permission;if(m.super_user)return Sie;let O=m[c],w,N=O?.tables;if(N)return N[n];if(c==="data"&&(w=m[n])&&!w.tables)return w}a(kl,"getTablePermissions");function hh(K,m,O,w){if(L){let N;if(O.noCache?N=!0:(m?(!m.value||m.metadataFlags&(Ol|bl)||m.expiresAt&&m.expiresAt<Date.now())&&(N=!0):N=!0,ns(!N,"cache-hit",n)),N){let A=jA(K,m,O).then(D=>(D?.value?.[_e]&&Ze.error("Can not assign a record with a record property"),O&&(D?.version>(O.lastModified||0)&&(O.lastModified=D.version),O.lastRefreshed=Date.now()),D));if(O?.onlyIfCached||m?.value&&w?.allowStaleWhileRevalidate?.(m,K)){if(A.catch(D=>Ze.warn(D)),O?.onlyIfCached&&!w.doesExist())throw new Ss.ServerError("Entry is not cached",504);return}else return A}}}a(hh,"ensureLoadedFromSource");function gs(K){let m=K?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let O=m.next;if(!O)return m=m.next=new to,m.lmdbDb=i,m;m=O}while(!0)}else return new rd}a(gs,"txnForContext");function mh(K,m,O){if(!K)return;fh=K;let w=K.value||K.deref?.()||(fh=i.getEntry(K.key))?.value;if(typeof m=="object"){let A=Yn,D=w;for(let y=0,U=m.length;y<U;y++){let G=m[y],C=A?.[G];D=C&&D?C(D,O,!0)?.value:D?.[G],A=C?.definition?.tableClass?.propertyResolvers}return D}let N=Yn[m];return N?N(w,O):w[m]}a(mh,"getAttributeValue");function XA(K,m,O,w,N){let A=N?.length,D={transaction:w,lazy:A>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},y;function U(G,C){let v=G?.value;if(!v)return Mo.SKIP;for(let F=0;F<A;F++)if(!y?.includes(F)&&!N[F](v,G))return Mo.SKIP;return C!==void 0&&(G.key=C),G}if(a(U,"processEntry"),A>0||!K.hasEntries){let G=K.map(C=>{if(y=null,typeof C=="object"&&C.key!==void 0)return A>0?U(C):C;if(C==null)return Mo.SKIP;for(let v=0;v<A;v++){let oe=N[v].idFilter;if(oe){if(!oe(C))return Mo.SKIP;y||(y=[]),y.push(v)}}return Eh(C,O,D,!1,U)});return Array.isArray(K)&&(G=G.filter(C=>C!==Mo.SKIP)),G.hasEntries=!0,G}return K}a(XA,"transformToEntries");async function jA(K,m,O){let w=m?.metadataFlags,N=m?.version,A,D;if(!i.attemptLock(K,N,()=>{clearTimeout(D);let C=i.getEntry(K);!C||!C.value||C.metadataFlags&(Ol|bl)?A(jA(K,i.getEntry(K),O)):A(C)}))return new Promise(C=>{A=C,D=setTimeout(()=>{i.unlock(K,N)},Eie)});let y=m?.value,U={requestContext:O,replacingRecord:y,replacingVersion:N,source:null,resourceCache:O?.resourceCache},G=O?.responseHeaders;return new Promise((C,v)=>{let F;MA(je(U,async oe=>{let be=performance.now(),te,Pe,ae;try{for(let ge of ze.sources)if(ge.get&&(!ge.get.reliesOnPrototype||ge.prototype.get)&&(U.source=ge,te=await ge.get(K,U),te))break;ae=w&Ol;let re=U.lastModified||ae&&N;Pe=ae||re>N||!y,re||(re=(0,wl.getNextMonotonicTime)());let j=performance.now()-be;if(qr(j,"cache-resolution",n),G&&sg(G,"Server-Timing",`cache-resolve;dur=${j.toFixed(2)}`,!0),oe.timestamp=re,f&&!U.expiresAt&&(U.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]!==K&&(te[t]=K)}F=!0,C({version:re,value:te})}catch(re){re.message+=` while resolving record ${K} for ${n}`,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))?(C({version:N,value:y}),Ze.trace(re.message,"(returned stale record)")):v(re),U.transaction.abort();return}if(O?.noCacheStore){U.transaction.abort();return}gs(U).addWrite({key:K,store:i,entry:m,nodeName:"source",commit:(re,j)=>{if(j?.version!==N)return;let ge=Fl(K,y,te);te?(Be.put?.(U,K,te),T(K,te,j,re,0,h&&Pe||null,U,U.expiresAt,"put",!!ae)):(Be.delete?.(U,K),h||p?T(K,null,j,re,0,h&&Pe||null,U,0,"delete",!!ae):i.remove(K,N))}})}),()=>{i.unlock(K,N)},oe=>{i.unlock(K,N),F&&Ze.error("Error committing cache update",oe)})})}a(jA,"getFromSource");function ph(){if(Ct!==ql&&(ql=Ct,(0,Uo.getWorkerIndex)()===(0,Uo.getWorkerCount)()-1)){if(Gl&&clearTimeout(Gl),!Ct)return;let K=new Date;K.setMonth(0),K.setDate(1),K.setHours(0),K.setMinutes(0),K.setSeconds(0);let m=Math.ceil((Date.now()-K.getTime())/Ct)*Ct+K.getTime(),O=a(w=>{Ze.trace(`Scheduled next cleanup scan at ${new Date(w)}ms`),Gl=setTimeout(()=>P=P.then(async()=>{if(O(Math.max(w+Ct,Date.now())),i.rootStore.status!=="open"){clearTimeout(Gl);return}let N=50,A=new Array(N),D=0;Ze.trace(`Starting cleanup scan for ${n}`);try{let y=0;for(let{key:U,value:G,version:C,expiresAt:v}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let F;G===null&&!h&&C+fie<Date.now()?F=i.remove(U,C):v&&v+E<Date.now()&&(F=ze.evict(U,G,C),y++),F&&(await A[D],A[D]=F.catch(oe=>{Ze.error("Cleanup error",oe)}),++D>=N&&(D=0)),await Nl()}Ze.trace(`Finished cleanup scan for ${n}, evicted ${y} entries`)}catch(y){Ze.trace(`Error in cleanup scan for ${n}:`,y)}}),Math.min(w-Date.now(),2147483647)).unref()},"startNextTimer");O(m)}}a(ph,"scheduleCleanup");function ZA(){z=u?.addDeleteRemovalCallback(s,K=>{let m=i.getEntry(K);m?.value===null&&i.remove(K,m.version)})}a(ZA,"addDeleteRemoval");function jq(){(0,Uo.getWorkerIndex)()===0&&setInterval(async()=>{try{let K=J.name,m=r[K];if(!m)throw new Error(`expiresAt attribute ${J} must be indexed`);for(let{key:O,value:w}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let N=i.getEntry(w);N?.value?N.value[K]<Date.now()&&ze.evict(w,N.value,N.version):i.ifVersion(w,N?.version,()=>m.remove(O,w)),await Nl()}}catch(K){Ze.error("Error in evicting old records",K)}},die).unref()}a(jq,"runRecordExpirationEviction")}function LA(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function Qx(){}function Tie(e){jx=e}function QE(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"&&!gie.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,JE.autoCast)(e):e}function zx(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function MA(e,t,r){return e?.then?e.then(t,r):t(e)}function zE(e,t){e[Jr]=t,e[_e]=t?.value??null,e[yl]=t?.version}function Jx(e){return e!=null}function Fs(e){try{return JSON.stringify(e)}catch{return e}}var ks,Mo,wl,Xx,Dl,Ss,Il,Cl,Ze,Po,Uo,JE,_ie,jx,die,fie,Yx,Eie,yl,hie,Jr,Al,Kx,mie,DA,Xa,Ol,bl,pie,Wx,Sie,xSe,gie,Nl,eE=Re(()=>{ks=x(M()),Mo=require("lmdb"),wl=x(wr()),Xx=require("lodash");Os();jp();Dl=x(ee());$x();Ss=x(se()),Il=x(Rn()),Cl=x(Cs());Ae();Gf();Ze=x($());id();ro();Po=require("ordered-binary"),Uo=x(Ke());xi();JE=x(Q());bc();Nn();HE();qu();_ie=new Uint8Array(9);_ie[8]=192;die=6e4,fie=864e5;Dl.initSync();Yx=Dl.get(ks.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Eie=1e4,yl=Symbol.for("version"),hie=Symbol.for("incremental-update"),Jr=Symbol("entry"),Al=Symbol("is-saving"),Kx=1,mie=2,DA=Symbol("loaded-from-source"),Xa={isNotification:!0,ensureLoaded:!1},Ol=1,bl=8,pie=Buffer.allocUnsafeSlow(8192),Wx=1978,Sie={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},xSe=(0,JE.convertToMS)(Dl.get(ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(XE,"makeTable");a(LA,"attributesAsObject");a(Qx,"noop");a(Tie,"setServerUtilities");gie=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(QE,"coerceType");a(zx,"isDescendantId");Nl=a(()=>new Promise(setImmediate),"rest");a(MA,"when");a(zE,"updateResource");a(Jx,"exists");a(Fs,"stringify")});var Ge={};Ye(Ge,{database:()=>Jc,databases:()=>rt,dropDatabase:()=>sS,dropTableMeta:()=>yie,getDatabases:()=>Ls,getTables:()=>Rie,onUpdatedTable:()=>kR,readMetaDb:()=>Ll,resetDatabases:()=>Aie,table:()=>ct,tables:()=>Ir});function Rie(){return rh||Ls(),Ir||{}}function Ls(){if(rh)return rt;rh=!0,ec=new Map;let e=(0,er.getHdbBasePath)()&&(0,et.join)((0,er.getHdbBasePath)(),jr.DATABASES_DIR_NAME),t=(0,er.get)(jr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,er.get)(jr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Xr.existsSync)(e)?e:(0,et.join)((0,er.getHdbBasePath)(),jr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Xr.existsSync)(e))for(let r of(0,Xr.readdirSync)(e,{withFileTypes:!0})){let s=(0,et.basename)(r.name,".mdb");r.isFile()&&(0,et.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Ll((0,et.join)(e,r.name),null,s)}if((0,Xr.existsSync)((0,Za.getBaseSchemaPath)())){for(let r of(0,Xr.readdirSync)((0,Za.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,et.join)((0,Za.getBaseSchemaPath)(),r.name),n=(0,et.join)((0,Za.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Xr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,et.extname)(i.name).toLowerCase()===".mdb"){let o=(0,et.join)(n,i.name);Ll((0,et.join)(s,i.name),(0,et.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,Xr.existsSync)(n))for(let o of(0,Xr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,et.extname)(o.name).toLowerCase()===".mdb"&&Ll((0,et.join)(n,o.name),(0,et.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,et.join)(c.path,(0,et.basename)(o+".mdb"));(0,Xr.existsSync)(u)&&Ll(u,o,r,null,!0)}}for(let r in rt){let s=ec.get(r);if(s){let n=rt[r];r.includes("delete")&&Ts.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Ts.trace(`delete table class ${i}`),delete n[i])}else if(delete rt[r],r==="data"){for(let n in Ir)delete Ir[n];delete Ir[sh]}}return ec=null,rt}}function Aie(){rh=!1;for(let[,e]of Li)e.needsDeletion=!0;Ls();for(let[e,t]of Li)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Li.delete(e));return rt}function Ll(e,t,r=vA,s,n){let i=new UA.default(e,!1);try{let o=Li.get(e);o?o.needsDeletion=!1:(o=(0,ZE.open)(i),Li.set(e,o));let c=new vo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(jE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,Xr.existsSync)(s)&&(i.path=s,_=(0,ZE.open)(i),_.isLegacy=!0):_=BE(o));let l=rq(r),d=l[sh],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let T=f.get(p);T||f.set(p,T={attributes:[]}),(S==null||h.is_hash_attribute)&&(T.primary=h),S!=null&&T.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let X of p)if(X.is_hash_attribute||X.isPrimaryKey){S=X;break}if(!S){Ts.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let T=l[E],b={},R=[],L,H,P=typeof S.audit=="boolean"?S.audit:(0,er.get)(jr.CONFIG_PARAMS.LOGGING_AUDITLOG),k=S.trackDeletes,B=S.expiration,J=S.eviction,z=S.sealed;if(T)b=T.indices,R=T.attributes,T.schemaVersion++;else{L=S.tableId,L?L>=(u.get(ja)||0)&&u.putSync(ja,L+1):(S.tableId=L=u.get(ja),L||(L=1),u.putSync(ja,L+1),u.putSync(S.key,S));let X=new vo.default(!S.is_hash_attribute,S.is_hash_attribute);H=a_(o.openDB(S.key,X)),H.rootStore=o,H.tableId=L}for(let X of p){X.attribute=X.name;try{if(!X.is_hash_attribute&&(X.indexed||X.attribute&&!X.name)){if(!b[X.name]){let ce=new vo.default(!X.is_hash_attribute,X.is_hash_attribute);b[X.name]=o.openDB(X.key,ce),b[X.name].indexNulls=X.indexNulls}let Te=R.find(ce=>ce.name===X.name);Te?R.splice(R.indexOf(Te),1,X):R.push(X)}}catch(Te){Ts.error("Error trying to update attribute",X,R,b,Te)}}if(!T){T=sq(l,E,XE({primaryStore:H,auditStore:_,audit:P,sealed:z,expirationMS:B&&B*1e3,evictionMS:J&&J*1e3,trackDeletes:k,tableName:E,tableId:L,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:b,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),T.schemaVersion=1;for(let X of BA)X(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function rq(e){let t=rt[e];if(t||(e==="data"?t=rt[e]=Ir:e==="system"?Object.defineProperty(rt,"system",{value:t=Object.create(null),configurable:!0}):t=rt[e]=Object.create(null)),ec&&!ec.has(e)){let r=new Set;t[sh]=r,ec.set(e,r)}return t}function sq(e,t,r){return e[t]=r,r}function Jc({database:e,table:t}){e||(e=vA),Ls();let r=rq(e),s=(0,et.join)((0,er.getHdbBasePath)(),jr.DATABASES_DIR_NAME),n=(0,er.get)(jr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,er.get)(jr.CONFIG_PARAMS.STORAGE_PATH)||((0,Xr.existsSync)(s)?s:(0,et.join)((0,er.getHdbBasePath)(),jr.LEGACY_DATABASES_DIR_NAME));let o=(0,et.join)(s,(i?t:e)+".mdb"),c=Li.get(o);if(!c){let u=new UA.default(o,!1);c=(0,ZE.open)(u),Li.set(o,c)}return c}async function sS(e){if(!rt[e])throw new Error("Schema does not exist");let t=rt[e];for(let r in t){let n=t[r].primaryStore.rootStore;Li.delete(n.path),n.status==="open"&&(await n.close(),await Zx.remove(n.path))}if(e==="data"){for(let r in Ir)delete Ir[r];delete Ir[sh]}delete rt[e]}function ct({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,sealed:c,trackDeletes:u,schemaDefined:_,origin:l}){t||(t=vA);let d=Jc({database:t,table:e}),f=rt[t],E=f?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,p,S,T;_==null&&(_=!0);let b=new vo.default(!1);for(let B of i)B.attribute?(B.name=B.attribute,B.indexed=!0):B.attribute=B.name,B.expiresAt&&(B.indexed=!0);let R,L;if(E){if(h=E.primaryKey,E.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);E.attributes.splice(0,E.attributes.length,...i)}else{let B=d.auditStore;B||(B=BE(d)),p=i.find(Te=>Te.isPrimaryKey)||{},h=p.name,p.is_hash_attribute=!0,p.schemaDefined=_,u&&(p.trackDeletes=!0),o=p.audit=typeof o=="boolean"?o:(0,er.get)(jr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(p.expiration=r),s&&(p.eviction=s),typeof c=="boolean"&&(p.sealed=c),l&&(p.origins?p.origins.includes(l)||p.origins.push(l):p.origins=[l]),Ts.trace(`${e} table loading, opening primary store`);let J=new vo.default(!1,!0),z=e+"/",X=a_(d.openDB(z,J));X.rootStore=d,T=d.dbisDb=d.openDB(jE.INTERNAL_DBIS_NAME,b),X.tableId=T.get(ja),X.tableId||(X.tableId=1),T.putSync(ja,X.tableId+1),p.tableId=X.tableId,E=sq(f,e,XE({primaryStore:X,auditStore:B,audit:o,sealed:c,trackDeletes:u,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:h,tableName:e,tableId:X.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:T})),E.schemaVersion=1,R=!0,k(),T.put(z,p)}S=E.indices,T=T||(d.dbisDb=d.openDB(jE.INTERNAL_DBIS_NAME,b)),E.dbisDB=T;let H=[];for(let{key:B,value:J}of T.getRange({start:!0})){let[z,X]=B.toString().split("/");if(X===""&&(X=J.name),X){if(z!==e)continue}else X=z;if(!i.find(ce=>ce.name===X)?.indexed&&J.indexed&&!J.isPrimaryKey){k(),R=!0,T.remove(B);let ce=E.indices[z];ce&&H.push(ce)}}let P=[];try{for(let B of i||[]){if(B.relationship)continue;let J=e+"/"+(B.name||"");Object.defineProperty(B,"key",{value:J,configurable:!0});let z=T.get(J);if(B.isPrimaryKey){if(z=z||T.get(J=e+"/")||{},o!==E.audit||c!==c||(+r||void 0)!==(+z.expiration||void 0)||(+s||void 0)!==(+z.eviction||void 0)){let Te=Object.assign({},z);typeof o=="boolean"&&(o&&E.enableAuditing(o),Te.audit=o),r&&(Te.expiration=+r),s&&(Te.eviction=+s),c!==void 0&&(Te.sealed=c),R=!0,k(),T.put(J,Te)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let X=!z||z.type!==B.type||z.indexed!==B.indexed||z.nullable!==B.nullable||JSON.stringify(z.attributes)!==JSON.stringify(B.attributes)||JSON.stringify(z.elements)!==JSON.stringify(B.elements);if(B.indexed){let Te=new vo.default(!0,!1),ce=d.openDB(J,Te);(X||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Ml.workerData?.restartNumber)&&(R=!0,k(),z=T.get(J),(X||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Ml.workerData?.restartNumber)&&(R=!0,B.indexNulls===void 0&&(B.indexNulls=!0),E.primaryStore.getStats().entryCount>0&&(B.lastIndexedKey=z?.lastIndexedKey||!1,B.indexingPID=process.pid,ce.isIndexing=!0,Object.defineProperty(B,"dbi",{value:ce}),P.push(B))),T.put(J,B)),z?.indexNulls&&B.indexNulls===void 0&&(B.indexNulls=!0),ce.indexNulls=B.indexNulls,S[B.name]=ce}else X&&(R=!0,k(),T.put(J,B))}}finally{L&&L()}if(R&&(E.schemaVersion++,E.updatedAttributes()),Ts.trace(`${e} table loading, running index`),P.length>0||H.length>0?E.indexingOperation=Nie(E,P,H):R&&eh.signalSchemaChange(new th.SchemaEventMsg(process.pid,"schema-change",E.databaseName,E.tableName)),E.origin=l,R)for(let B of BA)B(E,l!=="cluster");return(r||s||n)&&E.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),Ts.trace(`${e} table loaded`),E;function k(){L||d.transactionSync(()=>({then(B){L=B}}))}a(k,"startTxn")}async function Nie(e,t,r){try{let s=e.schemaVersion;await eh.signalSchemaChange(new th.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,eq.getIndexedValues)(l[h]);if(p)for(let S=0,T=p.length;S<T;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,Ts.error(f)}),Ml.workerData&&Ml.workerData.restartNumber!==tq.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>Oie?await n:u>bie&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await eh.signalSchemaChange(new th.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Ts.error("Error in indexing",s)}}function yie({table:e,database:t}){let r=Jc({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function kR(e){BA.push(e)}var er,jE,ZE,et,Xr,Za,vo,UA,jr,Zx,PA,eq,eh,th,Ml,Ts,tq,vA,sh,Ir,rt,ja,BA,rh,Li,ec,Oie,bie,Ae=Re(()=>{er=x(ee()),jE=x(dt()),ZE=require("lmdb"),et=require("path"),Xr=require("fs"),Za=x(Je());eE();vo=x(c_()),UA=x(l_()),jr=x(M()),Zx=x(require("fs-extra")),PA=require("../index"),eq=x(wr()),eh=x(Rn()),th=x(Cs()),Ml=require("worker_threads"),Ts=x($()),tq=x(Ke());xi();bc();vA="data",sh=Symbol("defined-tables");(0,er.initSync)();Ir=Object.create(null),rt=Object.create(null);(0,PA._assignPackageExport)("databases",rt);(0,PA._assignPackageExport)("tables",Ir);ja=Symbol.for("next-table-id"),BA=[],Li=new Map;a(Rie,"getTables");a(Ls,"getDatabases");a(Aie,"resetDatabases");a(Ll,"readMetaDb");a(rq,"ensureDB");a(sq,"setTable");a(Jc,"database");a(sS,"dropDatabase");a(ct,"table");Oie=1e3,bie=10;a(Nie,"runIndexing");a(yie,"dropTableMeta");a(kR,"onUpdatedTable")});var Q=g((WSe,pq)=>{"use strict";var Mi=require("path"),cq=require("fs-extra"),br=$(),nq=require("fs-extra"),nh=require("os"),wie=require("net"),Iie=require("recursive-iterator"),at=M(),Cie=MO(),iq=require("papaparse"),ih=require("moment"),{inspect:Die}=require("util"),oq=require("is-number"),KSe=require("lodash"),Lie=require("minimist"),Mie=require("https"),Uie=require("http"),{hdb_errors:oh}=se(),Pie=/^((\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)))$/,uq=require("util").promisify(setTimeout),vie=100,Bie=5,Hie="",xie=4,aq={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};pq.exports={isEmpty:Zr,isEmptyOrZeroLength:fn,arrayHasEmptyValues:Fie,arrayHasEmptyOrZeroLengthValues:kie,buildFolderPath:Vie,isBoolean:lq,errorizeMessage:qie,stripFileExtension:Yie,autoCast:Kie,autoCastJSON:_q,autoCastJSONDeep:xA,removeDir:Wie,compareVersions:Qie,isCompatibleDataVersion:zie,escapeRawValue:Jie,unescapeValue:Xie,stringifyProps:jie,timeoutPromise:eoe,isClusterOperation:roe,getClusterUser:noe,checkGlobalSchemaTable:soe,getHomeDir:fq,getPropsFilePath:Zie,promisifyPapaParse:ioe,removeBOM:Eq,createEventPromise:ooe,checkProcessRunning:aoe,checkSchemaTableExist:coe,checkSchemaExists:hq,checkTableExists:mq,getStartOfTomorrowInSeconds:uoe,getLimitKey:loe,isObject:$ie,isNotEmptyAndHasValue:Gie,autoCasterIsNumberCheck:dq,backtickASTSchemaItems:_oe,isPortTaken:toe,createForkArgs:doe,autoCastBoolean:foe,async_set_timeout:uq,getTableHashAttribute:Eoe,doesSchemaExist:hoe,doesTableExist:moe,stringifyObj:poe,ms_to_time:Soe,changeExtension:Toe,getEnvCliRootPath:qA,noBootFile:goe,httpRequest:Roe,transformReq:Aoe,convertToMS:Ooe,PACKAGE_ROOT:at.PACKAGE_ROOT};function qie(e){return e instanceof Error?e:new Error(e)}a(qie,"errorizeMessage");function Zr(e){return e==null}a(Zr,"isEmpty");function Gie(e){return!Zr(e)&&(e||e===0||e===""||lq(e))}a(Gie,"isNotEmptyAndHasValue");function fn(e){return Zr(e)||e.length===0||e.size===0}a(fn,"isEmptyOrZeroLength");function Fie(e){if(Zr(e))return!0;for(let t=0;t<e.length;t++)if(Zr(e[t]))return!0;return!1}a(Fie,"arrayHasEmptyValues");function kie(e){if(fn(e))return!0;for(let t=0;t<e.length;t++)if(fn(e[t]))return!0;return!1}a(kie,"arrayHasEmptyOrZeroLengthValues");function Vie(...e){try{return e.join(Mi.sep)}catch{console.error(e)}}a(Vie,"buildFolderPath");function lq(e){return Zr(e)?!1:e===!0||e===!1}a(lq,"isBoolean");function $ie(e){return Zr(e)?!1:typeof e=="object"}a($ie,"isObject");function Yie(e){return fn(e)?Hie:e.slice(0,-xie)}a(Yie,"stripFileExtension");function Kie(e){return Zr(e)||e===""||typeof e!="string"?e:aq[e]!==void 0?aq[e]:dq(e)===!0?Number(e):Pie.test(e)?new Date(e):e}a(Kie,"autoCast");function _q(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(_q,"autoCastJSON");function xA(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=xA(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=xA(r);s!==r&&(e[t]=s)}return e}else return _q(e)}a(xA,"autoCastJSONDeep");function dq(e){if(e.startsWith("0.")&&oq(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&oq(e))}a(dq,"autoCasterIsNumberCheck");async function Wie(e){if(fn(e))throw new Error(`Directory path: ${e} does not exist`);try{await nq.emptyDir(e),await nq.remove(e)}catch(t){throw br.error(`Error removing files in ${e} -- ${t}`),t}}a(Wie,"removeDir");function Qie(e,t){if(fn(e)){br.info("Invalid current version sent as parameter.");return}if(fn(t)){br.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(Qie,"compareVersions");function zie(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(zie,"isCompatibleDataVersion");function Jie(e){if(Zr(e))return e;let t=String(e);return t==="."?at.UNICODE_PERIOD:t===".."?at.UNICODE_PERIOD+at.UNICODE_PERIOD:t.replace(at.FORWARD_SLASH_REGEX,at.UNICODE_FORWARD_SLASH)}a(Jie,"escapeRawValue");function Xie(e){if(Zr(e))return e;let t=String(e);return t===at.UNICODE_PERIOD?".":t===at.UNICODE_PERIOD+at.UNICODE_PERIOD?"..":String(e).replace(at.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Xie,"unescapeValue");function jie(e,t){if(Zr(e))return br.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+nh.EOL}!fn(s)&&s[0]===";"?r+=" "+s+n+nh.EOL:fn(s)||(r+=s+"="+n+nh.EOL)}catch{br.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(jie,"stringifyProps");function fq(){let e;try{e=nh.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(fq,"getHomeDir");function Zie(){let e=Mi.join(fq(),at.HDB_HOME_DIR_NAME,at.BOOT_PROPS_FILE_NAME);return cq.existsSync(e)||(e=Mi.join(__dirname,"../","hdb_boot_properties.file")),e}a(Zie,"getPropsFilePath");function eoe(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(eoe,"timeoutPromise");async function toe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=wie.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(toe,"isPortTaken");function roe(e){try{return at.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){br.error(`Error checking operation against cluster ops ${t}`)}return!1}a(roe,"isClusterOperation");function soe(e,t){let r=(Ae(),ne(Ge)).getDatabases();if(!r[e])return oh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return oh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(soe,"checkGlobalSchemaTable");function noe(e,t){if(Zr(t)){br.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Zr(e)||fn(e)){br.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){br.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){br.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(noe,"getClusterUser");function ioe(){iq.parsePromise=function(e,t,r){return new Promise(function(s,n){iq.parse(e,{header:!0,transformHeader:Eq,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(ioe,"promisifyPapaParse");function Eq(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Eq,"removeBOM");function ooe(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;br.info(`Got cluster status event response: ${Die(n)}`);try{i.cancel()}catch{br.error("Error trying to cancel timeout.")}s(n)})})}a(ooe,"createEventPromise");async function aoe(e){let t=!0,r=0;do await uq(vie*r++),(await Cie.findPs(e)).length>0&&(t=!1);while(t&&r<Bie);if(t)throw new Error(`process ${e} was not started`)}a(aoe,"checkProcessRunning");function coe(e,t){let r=hq(e);if(r)return r;let s=mq(e,t);if(s)return s}a(coe,"checkSchemaTableExist");function hq(e){let{getDatabases:t}=(Ae(),ne(Ge));if(!t()[e])return oh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(hq,"checkSchemaExists");function mq(e,t){let{getDatabases:r}=(Ae(),ne(Ge));if(!r()[e][t])return oh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(mq,"checkTableExists");function uoe(){let e=ih().utc().add(1,at.MOMENT_DAYS_TAG).startOf(at.MOMENT_DAYS_TAG).unix(),t=ih().utc().unix();return e-t}a(uoe,"getStartOfTomorrowInSeconds");function loe(){return ih().utc().format("DD-MM-YYYY")}a(loe,"getLimitKey");function _oe(e){try{let t=new Iie(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){br.error("Got an error back ticking items."),br.error(t)}}a(_oe,"backtickASTSchemaItems");function doe(e){return[e]}a(doe,"createForkArgs");function foe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(foe,"autoCastBoolean");function Eoe(e,t){let{getDatabases:r}=(Ae(),ne(Ge)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(Eoe,"getTableHashAttribute");function hoe(e){let{getDatabases:t}=(Ae(),ne(Ge));return t()[e]!==void 0}a(hoe,"doesSchemaExist");function moe(e,t){let{getDatabases:r}=(Ae(),ne(Ge));return r()[e]?.[t]!==void 0}a(moe,"doesTableExist");function poe(e){try{return JSON.stringify(e)}catch{return e}}a(poe,"stringifyObj");function Soe(e){let t=ih.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(Soe,"ms_to_time");function Toe(e,t){let r=Mi.basename(e,Mi.extname(e));return Mi.join(Mi.dirname(e),r+t)}a(Toe,"changeExtension");function qA(){if(process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Lie(process.argv);if(e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(qA,"getEnvCliRootPath");var HA;function goe(){if(HA)return HA;let e=qA();qA()&&cq.pathExistsSync(Mi.join(e,at.HDB_CONFIG_FILE))&&(HA=!0)}a(goe,"noBootFile");function Roe(e,t){let r;return e.protocol==="http:"?r=Uie:r=Mie,new Promise((s,n)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(Roe,"httpRequest");function Aoe(e){if(!e.schema&&!e.database){e.schema=at.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Aoe,"transformReq");function Ooe(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(Ooe,"convertToMS")});var ee=g((zSe,Rq)=>{"use strict";var GA=require("fs-extra"),Bo=require("path"),Sq=require("os"),boe=require("properties-reader"),Pl=$(),Ul=Q(),ue=M(),ah=Pr(),Noe="Error initializing environment manager",ch="BOOT_PROPS_FILE_PATH",Tq=!1,yoe={[ue.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Vn={};Rq.exports={BOOT_PROPS_FILE_PATH:ch,getHdbBasePath:woe,setHdbBasePath:Ioe,get:gq,initSync:Doe,setProperty:Ue,initTestEnvironment:Loe};function woe(){return Vn[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(woe,"getHdbBasePath");function Ioe(e){Vn[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Ioe,"setHdbBasePath");function gq(e){let t=ah.getConfigValue(e);return t===void 0?Vn[e]:t}a(gq,"get");function Ue(e,t){yoe[e]&&(Vn[e]=t),ah.updateConfigObject(e,t)}a(Ue,"setProperty");function Coe(){let e;try{e=Ul.getPropsFilePath(),GA.accessSync(e,GA.constants.F_OK|GA.constants.R_OK),Tq=!0;let t=boe(e);return Vn[ue.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ue.HDB_SETTINGS_NAMES.INSTALL_USER),Vn[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Vn[ch]=e,!0}catch{return Pl.trace(`Environment manager found no properties file at ${e}`),!1}}a(Coe,"doesPropFileExist");function Doe(e=!1){try{(Tq||Coe()||Ul.noBootFile())&&(ah.initConfig(e),Vn[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=ah.getConfigValue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Pl.error(Noe),Pl.error(t),console.error(t),process.exit(1)}}a(Doe,"initSync");function Loe(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Bo.join(__dirname,"../../","unitTests");Vn[ch]=Bo.join(u,"hdb_boot_properties.file"),Ue(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Bo.join(u,"settings.test")),Ue(ue.HDB_SETTINGS_NAMES.INSTALL_USER,Sq.userInfo()?Sq.userInfo().username:void 0),Ue(ue.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ue(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Bo.join(u,"envDir","log")),Ue(ue.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ue(ue.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ue(ue.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Bo.join(u,"envDir")),Ue(ue.CONFIG_PARAMS.STORAGE_PATH,Bo.join(u,"envDir")),n&&(Ue(ue.CONFIG_PARAMS.HTTP_SECUREPORT,gq(ue.CONFIG_PARAMS.HTTP_PORT)),Ue(ue.CONFIG_PARAMS.HTTP_PORT,null)),Ue(ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!n),Ue(ue.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ue(ue.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Ul.isEmpty(i)?!1:i),Ue(ue.CONFIG_PARAMS.HTTP_CORS,Ul.isEmpty(i)?!1:i),Ue(ue.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ue(ue.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ue(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Bo.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ue(ue.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Ul.isEmpty(c)?!1:c),o&&(Ue("CORS_ACCESSLIST",o),Ue(ue.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Ue(ue.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ue(ue.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ue(ue.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ue(ue.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${ch}. Please check your boot props and settings files`;Pl.fatal(r),Pl.error(t)}}a(Loe,"initTestEnvironment")});var yq=g((XSe,Nq)=>{"use strict";var bq=require("joi"),{string:vl,boolean:Aq,array:Moe}=bq.types(),Oq=M(),Uoe=Xe();Nq.exports=Poe;function Poe(e){let t=bq.object({operation:vl.valid(Oq.OPERATIONS_ENUM.ADD_NODE,Oq.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:vl.required(),subscriptions:Moe.items({schema:vl.required(),table:vl.optional(),hash_attribute:vl.optional(),subscribe:Aq.required(),publish:Aq.required()}).min(1).required()});return Uoe.validateBySchema(e,t)}a(Poe,"updateRemoteSourceValidator")});var Bl=g((ZSe,wq)=>{"use strict";var FA=class{static{a(this,"UpdateRemoteResponseObject")}constructor(t,r,s=void 0){this.status=t,this.message=r,this.system_info=s}};wq.exports=FA});var Mq=g((tTe,Lq)=>{"use strict";var voe=yq(),$n=$(),kA=Fe(),Iq=M(),VA=os(),Ui=st(),Cq=fu(),Boe=Z_(),{Node:Hoe,NodeSubscription:Dq}=Ei(),$A=Bl(),YA=Q(),xoe=ee(),{cloneDeep:qoe}=require("lodash"),{broadcast:Goe}=Ke();Lq.exports=Foe;async function Foe(e){try{let t=voe(e);if(t)return $n.error(`Validation error in updateRemoteSource: ${t.message}`),new $A(kA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:s,system_info:n}=e,i=[],o=qoe(await VA.getNodeRecord(s)),c=!YA.isEmptyOrZeroLength(o);o=c?o[0]:o,c&&$n.trace(`Existing record found for ${s}, updating records subscriptions`);for(let _=0,l=r.length;_<l;_++){let d=r[_],f=d.schema,E=d.table;if(!YA.doesSchemaExist(f)){$n.trace(`updateRemoteSource creating schema: ${f}`);try{await Cq.createSchema({operation:"create_schema",schema:f})}catch(h){$n.error(h)}}if(E&&!YA.doesTableExist(f,E)){let h=new Boe(f,E,d.hash_attribute);d.attributes&&(h.attributes=d.attributes),$n.trace(`updateRemoteSource creating table: ${E} in schema: ${f} with attributes: ${JSON.stringify(d.attributes)}`);try{await Cq.createTable(h)}catch(p){$n.error(p)}$n.trace(`Creating local stream for ${f}.${E}`),await Ui.createLocalTableStream(f,E)}if(f===Iq.SYSTEM_SCHEMA_NAME&&await Ui.createLocalTableStream(f,E),c?(await Ui.updateConsumerIterator(f,E,s,"stop"),await Ui.updateRemoteConsumer(d,s),d.subscribe===!0&&await Ui.updateConsumerIterator(f,E,s,"start")):(await Ui.updateRemoteConsumer(d,s),d.subscribe===!0?await Ui.updateConsumerIterator(f,E,s,"start"):await Ui.updateConsumerIterator(f,E,s,"stop")),c){let h=!1;for(let p=0,S=o.subscriptions.length;p<S;p++){let T=o.subscriptions[p];if(T.schema===f&&T.table===E){T.publish=d.publish,T.subscribe=d.subscribe,h=!0;break}}h||o.subscriptions.push(new Dq(f,E,d.publish,d.subscribe))}else i.push(new Dq(f,E,d.publish,d.subscribe))}c||(o=new Hoe(s,i,void 0),$n.trace(`No record found for ${s}, creating a new one`));let u=Object.create({});return Object.assign(u,o),u.system_info=n,await VA.upsertNodeRecord(u),Goe({type:"nats_update"}),new $A(kA.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${xoe.get(Iq.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await VA.getSystemInfo())}catch(t){$n.error(t);let r=t.message?t.message:t;return new $A(kA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Foe,"updateRemoteSource")});var Bq=g((sTe,vq)=>{"use strict";var Pq=require("joi"),{string:Uq}=Pq.types(),koe=M(),Voe=Xe();vq.exports=$oe;function $oe(e){let t=Pq.object({operation:Uq.valid(koe.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:Uq.required()});return Voe.validateBySchema(e,t)}a($oe,"removeRemoteSourceValidator")});var qq=g((iTe,xq)=>{"use strict";var Yoe=Bq(),uh=$(),lh=Fe(),KA=M(),Koe=os(),Woe=Q(),Hq=st(),Qoe=ee(),_h=Bl(),{NodeSubscription:zoe}=Ei(),Joe=sa(),Xoe=si(),{broadcast:joe}=Ke(),Zoe=Qoe.get(KA.CONFIG_PARAMS.CLUSTERING_NODENAME);xq.exports=eae;async function eae(e){try{let t=Yoe(e);if(t)return uh.error(`Validation error in removeRemoteSource: ${t.message}`),new _h(lh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,s=await Koe.getNodeRecord(r);if(Woe.isEmptyOrZeroLength(s)){let i=`No record found for node '${r}'`;return uh.error(i),new _h(lh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}s=s[0];for(let i=0,o=s.subscriptions.length;i<o;i++){let c=s.subscriptions[i];uh.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let u=new zoe(c.schema,c.table,!1,!1);await Hq.updateConsumerIterator(c.schema,c.table,r,"stop"),await Hq.updateRemoteConsumer(u,r)}let n=new Joe(KA.SYSTEM_SCHEMA_NAME,KA.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Xoe.deleteRecord(n),joe({type:"nats_update"}),new _h(lh.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${Zoe} successfully removed node '${r}'.`)}catch(t){uh.error(t);let r=t.message?t.message:t;return new _h(lh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(eae,"removeRemoteSource")});var Vq=g((aTe,kq)=>{"use strict";var dh=$(),Hl=M(),Gq=Fe(),WA=ee(),tae=Q(),Fq=Bl(),rae=os(),sae=Dd(),nae=Lr();kq.exports=iae;async function iae(e){try{dh.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=tae.ms_to_time(t),s=new oae(WA.get(Hl.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),WA.get(Hl.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)??WA.get(Hl.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT),r,await rae.getSystemInfo());try{let n={name:e.node_name,system_info:e.system_info},i=new sae(Hl.SYSTEM_SCHEMA_NAME,Hl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[n]);await nae.update(i)}catch(n){dh.error("Get remote config encountered an error updating system info for node:",e.node_name,n)}return dh.trace("getRemoteSourceConfig response:",s),new Fq(Gq.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,s)}catch(t){dh.error(t);let r=t.message?t.message:t;return new Fq(Gq.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(iae,"getRemoteSourceConfig");function oae(e,t,r,s){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=s}a(oae,"ConfigResponseObject")});var Wq=g((uTe,Kq)=>{"use strict";var $q=ee();$q.initSync();var Yq=st(),xl=$(),tc=M(),QA=Fe(),aae=Mq(),cae=qq(),uae=Vq(),lae=Bl(),{encode:_ae,decode:dae}=require("msgpackr"),fae=gn(),Eae=ei(),hae=require("util"),mae=M(),{isMainThread:pae,parentPort:Sae}=require("worker_threads");Ke();var Tae=hae.promisify(fae.setSchemaDataToGlobal),zA=$q.get(tc.CONFIG_PARAMS.CLUSTERING_NODENAME);Kq.exports=gae;async function gae(){try{xl.notify("Starting reply service."),await Tae();let e=await Yq.getConnection(),t=`${zA}.__request__`,r=e.subscribe(t,{queue:zA});await Rae(r)}catch(e){xl.error(e)}}a(gae,"initialize");async function Rae(e){for await(let t of e){let r=dae(t.data),s;switch(r.operation){case tc.OPERATIONS_ENUM.ADD_NODE:case tc.OPERATIONS_ENUM.UPDATE_NODE:s=await aae(r);break;case tc.OPERATIONS_ENUM.REMOVE_NODE:s=await cae(r);break;case tc.OPERATIONS_ENUM.CLUSTER_STATUS:s=await uae(r);break;case tc.OPERATIONS_ENUM.DESCRIBE_ALL:s=await Aae();break;default:let n=`node '${zA}' reply service received unrecognized request operation`;xl.error(n),s=new lae(QA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,n)}xl.trace(s),t.respond(_ae(s))}}a(Rae,"handleRequest");async function Aae(){try{return{status:QA.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await Eae.describeAll()}}catch(e){return xl.error(e),{status:QA.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(Aae,"getRemoteDescribeAll");pae||Sae.on("message",async e=>{let{type:t}=e;t===mae.ITC_EVENT_TYPES.SHUTDOWN&&Yq.closeConnection()})});var Oae=Wq();(async()=>{try{await Oae()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();