harperdb 4.3.32 → 4.3.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/harperdb.js CHANGED
@@ -1,25 +1,25 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var EY=Object.create;var Fl=Object.defineProperty;var hY=Object.getOwnPropertyDescriptor;var pY=Object.getOwnPropertyNames;var mY=Object.getPrototypeOf,SY=Object.prototype.hasOwnProperty;var a=(e,t)=>Fl(e,"name",{value:t,configurable:!0});var be=(e,t)=>()=>(e&&(t=e(e=0)),t);var R=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),$e=(e,t)=>{for(var r in t)Fl(e,r,{get:t[r],enumerable:!0})},hy=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of pY(t))!SY.call(e,s)&&s!==r&&Fl(e,s,{get:()=>t[s],enumerable:!(n=hY(t,s))||n.enumerable});return e};var x=(e,t,r)=>(r=e!=null?EY(mY(e)):{},hy(t||!e||!e.__esModule?Fl(r,"default",{value:e,enumerable:!0}):r,e)),ae=e=>hy(Fl({},"__esModule",{value:!0}),e);var Sy=R((khe,my)=>{var TY=require("fast-glob"),{statSync:rS,existsSync:nS,readFileSync:gY,writeFileSync:RY}=require("fs"),{spawnSync:AY,spawn:OY,execFileSync:Fhe}=require("child_process"),{isMainThread:bY}=require("worker_threads"),{join:Zi,relative:py}=require("path"),{PACKAGE_ROOT:es}=L(),{tmpdir:NY,platform:yY}=require("os");require("source-map-support").install();var IY=["resources","server","dataLayer","components"],kl="ts-build",sS,wY=__filename.endsWith("tsBuild.js");if(wY){if(bY){let r;try{rS(Zi(es,kl)),r=!0}catch{}if(r)for(let n of TY.sync(IY.map(s=>s+"/**/*.ts"),{cwd:es})){let s=0,i=0;try{s=rS(Zi(es,n)).mtimeMs-5e3,i=rS(Zi(es,kl,n.replace(/.ts$/,".js"))).mtimeMs}catch{}if(s>i){console.warn(`TypeScript ${n} is not compiled`+(i?` (TS source file was modified at ${new Date(s)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),sS=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),sS=!0;if(sS){let n=Zi(es,"node_modules/.bin/tsc");yY()==="win32"&&(n+=".cmd");let s=AY(n,{cwd:es});if(s.stdout?.length&&console.log(s.stdout.toString()),s.stderr?.length&&console.log(s.stderr.toString()),r){let i=Zi(NY(),"harperdb-tsc.pid"),o;if(nS(i))try{process.kill(+gY(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=OY(n,["--watch"],{cwd:es,detached:!0,stdio:"ignore"});RY(i,c.pid.toString()),c.unref()}}}}let e=my.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(es)&&!n[0].includes("node_modules")){let i=py(es,n[0]),o;i.startsWith(kl)?o=Zi(es,py(kl,i)):o=Zi(es,kl,i);let c=Zi(o,r),l=c+".js";if(nS(l))return l;if(c.includes(".")&&nS(c))return c}return t(r,n,s)}}});var L=R((Yhe,Py)=>{"use strict";var Pn=require("path"),CY=require("fs"),{relative:$he,join:Vhe}=Pn,{existsSync:DY}=CY;function LY(){let e=__dirname;for(;!DY(Pn.join(e,"package.json"));){let t=Pn.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(LY,"getHDBPackageRoot");var eo=LY(),Ty="js",Zd=Ty,PY="harperdb-config.yaml",MY="defaultConfig.yaml",UY="hdb",gy=`harperdb.${Zd}`,Ry=`customFunctionsServer.${Zd}`,vY=`restartHdb.${Zd}`,oS="HarperDB",Xd="Custom Functions",ef="Clustering Hub",tf="Clustering Leaf",BY="Clustering Ingest Service",HY="Clustering Reply Service",xY="foreground.pid",GY="hdb.pid",qY="data",FY={HDB:oS,CLUSTERING_HUB:ef,CLUSTERING_LEAF:tf,CLUSTERING_INGEST_SERVICE:BY,CLUSTERING_REPLY_SERVICE:HY,CUSTOM_FUNCTIONS:Xd,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"},kY={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},$Y={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},VY={harperdb:oS,"clustering hub":ef,"clustering leaf":tf,"custom functions":Xd,custom_functions:Xd,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},YY={CLUSTERING_HUB_PROC_DESCRIPTOR:ef,CLUSTERING_LEAF_PROC_DESCRIPTOR:tf},iS={HDB:Pn.join(eo,"server/harperdb"),CUSTOM_FUNCTIONS:Pn.join(eo,"server/customFunctions"),CLUSTERING_HUB:Pn.join(eo,"server/nats"),CLUSTERING_LEAF:Pn.join(eo,"server/nats")},KY={HDB:Pn.join(iS.HDB,gy),CUSTOM_FUNCTIONS:Pn.join(iS.CUSTOM_FUNCTIONS,Ry)},WY={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Pn.join(eo,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Pn.join(eo,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Pn.join(eo,"launchServiceScripts/launchUpdateNodes4-0-0.js")},QY={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Ay="support@harperdb.io",jY="customer-success@harperdb.io",Oy=1,zY=4141,by="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",JY="https://www.harperdb.io/product",XY=`For support, please submit a request at ${by} or contact ${Ay}`,Ny=`For license support, please contact ${jY}`,ZY="None of the specified records were found.",e1="hash attribute not found",t1=`Your current license only supports ${Oy} role. ${Ny}`,r1="Your current license only supports 3 connections to a node.",n1="127.0.0.1",s1=1,i1=/^\.$/,o1=/^\.\.$/,a1="U+002E",c1=/\//g,l1="U+002F",u1=/U\+002F/g,_1=/^U\+002E$/,d1=/^U\+002EU\+002E$/,f1="d",E1=999999,h1="*",p1="--max-old-space-size=",m1="system",S1="__hdb_hash",T1=".harperdb",g1=".hdb",R1="keys",A1="hdb_boot_properties.file",O1=".updateConfig.json",b1="SIGTSTP",N1=24,y1=6e4,I1=448,w1="blob",C1="trash",D1="database",L1="schema",P1="transactions",M1=".count",U1="id",v1="PROCESS_NAME",yy={SETTINGS_PATH_KEY:"settings_path"},Iy=require("lodash"),B1={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"},H1={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},x1={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},G1={JOB_TABLE_NAME:"hdb_job",NODE_TABLE_NAME:"hdb_nodes",ATTRIBUTE_TABLE_NAME:"hdb_attribute",LICENSE_TABLE_NAME:"hdb_license",ROLE_TABLE_NAME:"hdb_role",SCHEMA_TABLE_NAME:"hdb_schema",TABLE_TABLE_NAME:"hdb_table",USER_TABLE_NAME:"hdb_user",INFO_TABLE_NAME:"hdb_info"},q1={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"},rn="hdb_internal:",F1={CREATE_SCHEMA:rn+"create_schema",CREATE_TABLE:rn+"create_table",CREATE_ATTRIBUTE:rn+"create_attribute",ADD_USER:rn+"add_user",ALTER_USER:rn+"alter_user",DROP_USER:rn+"drop_user",HDB_NODES:rn+"hdb_nodes",HDB_USERS:rn+"hdb_users",HDB_WORKERS:rn+"hdb_workers",CATCHUP:rn+"catchup",SCHEMA_CATCHUP:rn+"schema_catchup",WORKER_ROOM:rn+"cluster_workers"},k1={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"},$1="060493.ks",V1=".license",Y1={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},te={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"},K1={CSV:".csv",JSON:".json"},W1={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Q1={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},$l={};$l[te.INSERT]=te.INSERT;$l[te.UPDATE]=te.UPDATE;$l[te.UPSERT]=te.UPSERT;$l[te.DELETE]=te.DELETE;var Fe=Object.create(null);Fe[te.DESCRIBE_ALL]=te.DESCRIBE_ALL;Fe[te.DESCRIBE_TABLE]=te.DESCRIBE_TABLE;Fe[te.DESCRIBE_SCHEMA]=te.DESCRIBE_SCHEMA;Fe[te.READ_LOG]=te.READ_LOG;Fe[te.ADD_NODE]=te.ADD_NODE;Fe[te.LIST_USERS]=te.LIST_USERS;Fe[te.LIST_ROLES]=te.LIST_ROLES;Fe[te.USER_INFO]=te.USER_INFO;Fe[te.SQL]=te.SQL;Fe[te.GET_JOB]=te.GET_JOB;Fe[te.SEARCH_JOBS_BY_START_DATE]=te.SEARCH_JOBS_BY_START_DATE;Fe[te.DELETE_FILES_BEFORE]=te.DELETE_FILES_BEFORE;Fe[te.EXPORT_LOCAL]=te.EXPORT_LOCAL;Fe[te.EXPORT_TO_S3]=te.EXPORT_TO_S3;Fe[te.CLUSTER_STATUS]=te.CLUSTER_STATUS;Fe[te.REMOVE_NODE]=te.REMOVE_NODE;Fe[te.RESTART]=te.RESTART;Fe[te.CUSTOM_FUNCTIONS_STATUS]=te.CUSTOM_FUNCTIONS_STATUS;Fe[te.GET_CUSTOM_FUNCTIONS]=te.GET_CUSTOM_FUNCTIONS;Fe[te.GET_CUSTOM_FUNCTION]=te.GET_CUSTOM_FUNCTION;Fe[te.SET_CUSTOM_FUNCTION]=te.SET_CUSTOM_FUNCTION;Fe[te.DROP_CUSTOM_FUNCTION]=te.DROP_CUSTOM_FUNCTION;Fe[te.ADD_CUSTOM_FUNCTION_PROJECT]=te.ADD_CUSTOM_FUNCTION_PROJECT;Fe[te.DROP_CUSTOM_FUNCTION_PROJECT]=te.DROP_CUSTOM_FUNCTION_PROJECT;Fe[te.PACKAGE_CUSTOM_FUNCTION_PROJECT]=te.PACKAGE_CUSTOM_FUNCTION_PROJECT;Fe[te.DEPLOY_CUSTOM_FUNCTION_PROJECT]=te.DEPLOY_CUSTOM_FUNCTION_PROJECT;var j1={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},z1={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},wy={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"},J1=Iy.invert(wy),X1={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},w={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",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:"operationsApi_tls",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_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},Cy={settings_path:yy.SETTINGS_PATH_KEY,hdb_root_key:w.ROOTPATH,hdb_root:w.ROOTPATH,rootpath:w.ROOTPATH,server_port_key:w.OPERATIONSAPI_NETWORK_PORT,server_port:w.OPERATIONSAPI_NETWORK_PORT,cert_key:w.TLS_CERTIFICATE,certificate:w.TLS_CERTIFICATE,private_key_key:w.TLS_PRIVATEKEY,private_key:w.TLS_PRIVATEKEY,http_secure_enabled_key:w.OPERATIONSAPI_NETWORK_HTTPS,https_on:w.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:w.OPERATIONSAPI_NETWORK_CORS,cors_on:w.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:w.LOGGING_LEVEL,log_level:w.LOGGING_LEVEL,log_path_key:w.LOGGING_ROOT,log_path:w.LOGGING_ROOT,clustering_node_name_key:w.CLUSTERING_NODENAME,node_name:w.CLUSTERING_NODENAME,clustering_enabled_key:w.CLUSTERING_ENABLED,clustering:w.CLUSTERING_ENABLED,max_http_threads:w.THREADS_COUNT,max_hdb_processes:w.THREADS_COUNT,server_timeout_key:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:w.LOGGING_AUDITLOG,disable_transaction_log:w.LOGGING_AUDITLOG,operation_token_timeout_key:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:w.HTTP_PORT,custom_functions_port:w.HTTP_PORT,custom_functions_directory_key:w.COMPONENTSROOT,custom_functions_directory:w.COMPONENTSROOT,max_custom_function_processes:w.THREADS_COUNT,log_to_file:w.LOGGING_FILE,log_to_stdstreams:w.LOGGING_STDSTREAMS,local_studio_on:w.LOCALSTUDIO_ENABLED,clustering_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:w.CLUSTERING_USER,clustering_enabled:w.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:w.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:w.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:w.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:w.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:w.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:w.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:w.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxconsumemsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS,clustering_leafserver_streams_maxingestthreads:w.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS,clustering_leafserver_streams_maxmsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:w.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:w.CLUSTERING_NODENAME,clustering_tls_certificate:w.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:w.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:w.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:w.CLUSTERING_TLS_INSECURE,clustering_tls_verify:w.CLUSTERING_TLS_VERIFY,clustering_loglevel:w.CLUSTERING_LOGLEVEL,clustering_republishmessages:w.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:w.CLUSTERING_DATABASELEVEL,customfunctions_network_port:w.HTTP_PORT,customfunctions_tls_certificate:w.TLS_CERTIFICATE,customfunctions_network_cors:w.HTTP_CORS,customfunctions_network_corsaccesslist:w.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:w.HTTP_HEADERSTIMEOUT,customfunctions_network_https:w.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:w.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:w.HTTP_TIMEOUT,customfunctions_tls:w.TLS,http_threads:w.THREADS_COUNT,threads:w.THREADS_COUNT,threads_count:w.THREADS_COUNT,threads_debug:w.THREADS_DEBUG,threads_debug_startingport:w.THREADS_DEBUG_STARTINGPORT,threads_debug_port:w.THREADS_DEBUG_PORT,threads_debug_host:w.THREADS_DEBUG_HOST,threads_debug_waitfordebugger:w.THREADS_DEBUG_WAITFORDEBUGGER,threads_maxheapmemory:w.THREADS_MAXHEAPMEMORY,http_session_affinity:w.HTTP_SESSIONAFFINITY,http_compressionthreshold:w.HTTP_COMPRESSIONTHRESHOLD,http_cors:w.HTTP_CORS,http_corsaccesslist:w.HTTP_CORSACCESSLIST,http_headerstimeout:w.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,http_timeout:w.HTTP_TIMEOUT,http_port:w.HTTP_PORT,http_secureport:w.HTTP_SECUREPORT,http_mtls:w.HTTP_MTLS,http_mtls_user:w.HTTP_MTLS_USER,http_mtls_required:w.HTTP_MTLS_REQUIRED,http_maxheadersize:w.HTTP_MAXHEADERSIZE,http_threadrange:w.HTTP_THREADRANGE,customfunctions_processes:w.THREADS_COUNT,customfunctions_root:w.COMPONENTSROOT,localstudio_enabled:w.LOCALSTUDIO_ENABLED,logging_file:w.LOGGING_FILE,logging_level:w.LOGGING_LEVEL,logging_root:w.LOGGING_ROOT,logging_rotation_enabled:w.LOGGING_ROTATION_ENABLED,logging_rotation_compress:w.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:w.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:w.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:w.LOGGING_ROTATION_PATH,logging_stdstreams:w.LOGGING_STDSTREAMS,logging_auditlog:w.LOGGING_AUDITLOG,logging_auditretention:w.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:w.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:w.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:w.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:w.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:w.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:w.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:w.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls:w.OPERATIONSAPI_TLS,operationsapi_tls_certificate:w.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:w.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:w.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:w.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:w.ROOTPATH,databases:w.DATABASES,storage_path:w.STORAGE_PATH,storage_maxtransactionqueuetime:w.STORAGE_MAXTRANSACTIONQUEUETIME,ignorescripts:w.IGNORE_SCRIPTS,mqtt_network_port:w.MQTT_NETWORK_PORT,mqtt_websocket:w.MQTT_WEBSOCKET,mqtt_network_secureport:w.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:w.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:w.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:w.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:w.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:w.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:w.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:w.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:w.AUTHENTICATION_CACHETTL,authentication_enablesessions:w.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:w.COMPONENTSROOT,tls:w.TLS,tls_certificate:w.TLS_CERTIFICATE,tls_privatekey:w.TLS_PRIVATEKEY,tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,tls_ciphers:w.TLS_CIPHERS};for(let e in w){let t=w[e];Cy[t.toLowerCase()]=t}var Z1={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},eK={csv_file_load:"csv_file_load",csv_data_load:te.CSV_DATA_LOAD,csv_url_load:te.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",restart_service:"restart_service"},tK={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"},rK={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},nK={VERSION_DEFAULT:"2.2.0"},sK={DEVELOPMENT:8192,DEFAULT:512},iK={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"},oK={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"},aK={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},Dy={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},cK=Symbol("metadata"),lK="__clustering__",uK=Object.values(Dy),_K=15984864e5,Ly={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},dK=Iy.invert(Ly),fK={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"},EK=111,hK=`\r
3
- `,pK={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},mK=["*","%"],SK="unauthorized_access",TK="func_val",gK={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},RK={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},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",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update"},OK={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},bK={HTTP:"http"},NK={STOPPED:"stopped",ONLINE:"online"},yK="3.x.x",IK={SUCCESS:"success",FAILURE:"failure"},wK={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};Py.exports={LOCAL_HARPERDB_OPERATIONS:Fe,HDB_SUPPORT_ADDRESS:Ay,HDB_SUPPORT_URL:by,HDB_PRICING_URL:JY,SUPPORT_HELP_MSG:XY,LICENSE_HELP_MSG:Ny,HDB_PROC_NAME:gy,HDB_PROC_DESCRIPTOR:oS,CLUSTERING_LEAF_PROC_DESCRIPTOR:tf,CLUSTERING_HUB_PROC_DESCRIPTOR:ef,SYSTEM_SCHEMA_NAME:m1,HASH_FOLDER_NAME:S1,HDB_HOME_DIR_NAME:T1,UPDATE_FILE_NAME:O1,LICENSE_KEY_DIR_NAME:R1,BOOT_PROPS_FILE_NAME:A1,JOB_TYPE_ENUM:eK,JOB_STATUS_ENUM:Y1,SYSTEM_TABLE_NAMES:G1,SYSTEM_TABLE_HASH_ATTRIBUTES:q1,OPERATIONS_ENUM:te,VALID_S3_FILE_TYPES:K1,S3_BUCKET_AUTH_KEYS:W1,VALID_SQL_OPS_ENUM:Q1,GEO_CONVERSION_ENUM:z1,HDB_SETTINGS_NAMES:wy,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:J1,SERVICE_ACTIONS_ENUM:j1,CLUSTER_MESSAGE_TYPE_ENUM:tK,CLUSTER_CONNECTION_DIRECTION_ENUM:rK,CLUSTER_EVENTS_DEFS_ENUM:iK,PERIOD_REGEX:i1,DOUBLE_PERIOD_REGEX:o1,UNICODE_PERIOD:a1,FORWARD_SLASH_REGEX:c1,UNICODE_FORWARD_SLASH:l1,ESCAPED_FORWARD_SLASH_REGEX:u1,ESCAPED_PERIOD_REGEX:_1,ESCAPED_DOUBLE_PERIOD_REGEX:d1,REG_KEY_FILE_NAME:$1,RESTART_TIMEOUT_MS:y1,HDB_FILE_PERMISSIONS:I1,DATABASES_DIR_NAME:D1,LEGACY_DATABASES_DIR_NAME:L1,TRANSACTIONS_DIR_NAME:P1,LIMIT_COUNT_NAME:M1,ID_ATTRIBUTE_STRING:U1,INSERT_MODULE_ENUM:H1,UPGRADE_JSON_FIELD_NAMES_ENUM:x1,RESTART_CODE:b1,RESTART_CODE_NUM:N1,CLUSTER_OPERATIONS:$l,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:k1,HDB_INTERNAL_SC_CHANNEL_PREFIX:rn,INTERNAL_SC_CHANNELS:F1,CLUSTERING_MESSAGE_TYPES:fK,HDB_FILE_SUFFIX:g1,BLOB_FOLDER_NAME:w1,HDB_TRASH_DIR:C1,ORIGINATOR_SET_VALUE:EK,LICENSE_VALUES:nK,RAM_ALLOCATION_ENUM:sK,TIME_STAMP_NAMES_ENUM:Dy,TIME_STAMP_NAMES:uK,PERMS_UPDATE_RELEASE_TIMESTAMP:_K,SEARCH_NOT_FOUND_MESSAGE:ZY,SEARCH_ATTRIBUTE_NOT_FOUND:e1,LICENSE_ROLE_DENIED_RESPONSE:t1,LICENSE_MAX_CONNS_REACHED:r1,BASIC_LICENSE_MAX_NON_CU_ROLES:Oy,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:zY,VALUE_SEARCH_COMPARATORS:Ly,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:dK,LICENSE_FILE_NAME:V1,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:oK,NEW_LINE:hK,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:s1,MOMENT_DAYS_TAG:f1,API_TURNOVER_SEC:E1,LOOPBACK:n1,CODE_EXTENSION:Zd,WILDCARD_SEARCH_VALUE:h1,NODE_ERROR_CODES:aK,JAVASCRIPT_EXTENSION:Ty,PERMS_CRUD_ENUM:pK,UNAUTHORIZED_PERMISSION_NAME:SK,SEARCH_WILDCARDS:mK,FUNC_VAL:TK,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:gK,JWT_ENUM:RK,CLUSTERING_FLAG:lK,ITC_EVENT_TYPES:AK,CUSTOM_FUNCTION_PROC_NAME:Ry,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Xd,SERVICES:OK,THREAD_TYPES:bK,MEM_SETTING_KEY:p1,HDB_RESTART_SCRIPT:vY,PROCESS_DESCRIPTORS:FY,SERVICE_SERVERS:KY,SERVICE_SERVERS_CWD:iS,PROCESS_DESCRIPTORS_VALIDATE:VY,LAUNCH_SERVICE_SCRIPTS:WY,LOG_LEVELS:$Y,PROCESS_NAME_ENV_PROP:v1,LOG_NAMES:kY,PM2_PROCESS_STATUSES:NK,CONFIG_PARAM_MAP:Cy,CONFIG_PARAMS:w,HDB_CONFIG_FILE:PY,HDB_DEFAULT_CONFIG_FILE:MY,ROLE_TYPES_ENUM:QY,BOOT_PROP_PARAMS:yy,INSTALL_PROMPTS:B1,HDB_ROOT_DIR_NAME:UY,CLUSTERING_PROCESSES:YY,FOREGROUND_PID_FILE:xY,PACKAGE_ROOT:eo,PRE_4_0_0_VERSION:yK,DATABASES_PARAM_CONFIG:Z1,METADATA_PROPERTY:cK,AUTH_AUDIT_STATUS:IK,AUTH_AUDIT_TYPES:wK,HDB_PID_FILE:GY,DEFAULT_DATABASE_NAME:qY,LEGACY_CONFIG_PARAMS:X1};Sy()});var to=R((Whe,vy)=>{"use strict";var My=require("minimist");vy.exports=CK;function CK(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=Uy(process.env),n=Uy(My(process.argv))):(r=process.env,n=My(process.argv));let s={};for(let i=0,o=e.length;i<o;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}a(CK,"assignCMDENVVariables");function Uy(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(Uy,"objKeysToLowerCase")});var k=R((jhe,fS)=>{"use strict";var Qo=require("fs-extra"),{workerData:DK,threadId:LK}=require("worker_threads"),ci=require("path"),xy=require("yaml"),Gy=require("properties-reader"),Nt=L(),By=to(),PK=require("os"),{PACKAGE_ROOT:cS}=L(),{_assignPackageExport:MK}=require("../index"),Yl={};for(let e in console)Yl[e]||(Yl[e]=console[e]);var yr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},qy={STDOUT:"stdOut",STDERR:"stdErr"},UK=ci.join(cS,"logs"),vK=ci.join(cS,"config/yaml/",Nt.HDB_DEFAULT_CONFIG_FILE),BK=1e4,ai,Cs,Nr,rf,nf,Kl,lc,Vl;Vl===void 0&&Fy();fS.exports={notify:Vy,fatal:Yy,error:Wl,warn:dS,info:sf,debug:_S,trace:uS,setLogLevel:$K,log_level:Nr,loggerWithTag:HK,suppressLogging:xK,initLogSettings:Fy,setupConsoleLogging:ky,logCustomLevel:FK,closeLogFile:lS,getLogFilePath:()=>Kl,OUTPUTS:qy,AuthAuditLog:KK};MK("logger",fS.exports);function Fy(e=!1){try{if(Vl===void 0||e){lS();let t=kK(),r=By(["ROOTPATH"]);try{Vl=Gy(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Qo.pathExistsSync(ci.join(r.ROOTPATH,Nt.HDB_CONFIG_FILE)))throw n}({level:Nr,config_log_path:nf,to_file:ai,to_stream:Cs}=VK(r.ROOTPATH?ci.join(r.ROOTPATH,Nt.HDB_CONFIG_FILE):Vl.get("settings_path"))),rf=Nt.LOG_NAMES.HDB,Kl=ci.join(nf,rf)}}catch(t){if(Vl=void 0,t.code===Nt.NODE_ERROR_CODES.ENOENT||t.code===Nt.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=By(Object.keys(Nt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Nt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Nt.CONFIG_PARAMS.LOGGING_LEVEL){Nr=l;continue}if(c===Nt.CONFIG_PARAMS.LOGGING_STDSTREAMS){Cs=l;continue}c===Nt.CONFIG_PARAMS.LOGGING_FILE&&(ai=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=YK();ai=ai===void 0?s:ai,ai=Hy(ai),Cs=Cs===void 0?i:Cs,Cs=Hy(Cs),Nr=Nr===void 0?n:Nr,nf=UK,rf=Nt.LOG_NAMES.INSTALL,Kl=ci.join(nf,rf);return}throw Wl("Error initializing log settings"),Wl(t),t}process.env.DEV_MODE&&(Cs=!0),ky()}a(Fy,"initLogSettings");var aS=!0;function ky(){cc("error",Wl),cc("warn",dS),cc("log",sf),cc("info",sf),cc("debug",_S),cc("trace",uS)}a(ky,"setupConsoleLogging");function cc(e,t){console[e]=function(...r){if(aS&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Yl[e](...r)}}a(cc,"logConsole");function HK(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Vy),fatal:r(Yy),error:r(Wl),warn:r(dS),info:r(sf),debug:r(_S),trace:r(uS)};function r(n){return function(...s){return n(t,...s)}}}a(HK,"loggerWithTag");function xK(e){try{aS=!1,e()}finally{aS=!0}}a(xK,"suppressLogging");var GK=DK?.name?.replace(/ /g,"-")||"main";function li(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-1,o=[e],c=0,l;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(l=t[0]?.serviceName,c++)),o.unshift(l||GK+"/"+LK);c<s;c++){let _=t[c];if(_ instanceof Error&&_.stack)n+=_.stack,Object.keys(_).length>0&&(n+=`
2
+ "use strict";var EY=Object.create;var Fl=Object.defineProperty;var hY=Object.getOwnPropertyDescriptor;var pY=Object.getOwnPropertyNames;var mY=Object.getPrototypeOf,SY=Object.prototype.hasOwnProperty;var a=(e,t)=>Fl(e,"name",{value:t,configurable:!0});var be=(e,t)=>()=>(e&&(t=e(e=0)),t);var R=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),$e=(e,t)=>{for(var r in t)Fl(e,r,{get:t[r],enumerable:!0})},py=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of pY(t))!SY.call(e,s)&&s!==r&&Fl(e,s,{get:()=>t[s],enumerable:!(n=hY(t,s))||n.enumerable});return e};var x=(e,t,r)=>(r=e!=null?EY(mY(e)):{},py(t||!e||!e.__esModule?Fl(r,"default",{value:e,enumerable:!0}):r,e)),ae=e=>py(Fl({},"__esModule",{value:!0}),e);var Ty=R((khe,Sy)=>{var TY=require("fast-glob"),{statSync:nS,existsSync:sS,readFileSync:gY,writeFileSync:RY}=require("fs"),{spawnSync:AY,spawn:OY,execFileSync:Fhe}=require("child_process"),{isMainThread:bY}=require("worker_threads"),{join:Zi,relative:my}=require("path"),{PACKAGE_ROOT:es}=L(),{tmpdir:NY,platform:yY}=require("os");require("source-map-support").install();var IY=["resources","server","dataLayer","components"],kl="ts-build",iS,wY=__filename.endsWith("tsBuild.js");if(wY){if(bY){let r;try{nS(Zi(es,kl)),r=!0}catch{}if(r)for(let n of TY.sync(IY.map(s=>s+"/**/*.ts"),{cwd:es})){let s=0,i=0;try{s=nS(Zi(es,n)).mtimeMs-5e3,i=nS(Zi(es,kl,n.replace(/.ts$/,".js"))).mtimeMs}catch{}if(s>i){console.warn(`TypeScript ${n} is not compiled`+(i?` (TS source file was modified at ${new Date(s)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),iS=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),iS=!0;if(iS){let n=Zi(es,"node_modules/.bin/tsc");yY()==="win32"&&(n+=".cmd");let s=AY(n,{cwd:es});if(s.stdout?.length&&console.log(s.stdout.toString()),s.stderr?.length&&console.log(s.stderr.toString()),r){let i=Zi(NY(),"harperdb-tsc.pid"),o;if(sS(i))try{process.kill(+gY(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=OY(n,["--watch"],{cwd:es,detached:!0,stdio:"ignore"});RY(i,c.pid.toString()),c.unref()}}}}let e=Sy.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(es)&&!n[0].includes("node_modules")){let i=my(es,n[0]),o;i.startsWith(kl)?o=Zi(es,my(kl,i)):o=Zi(es,kl,i);let c=Zi(o,r),l=c+".js";if(sS(l))return l;if(c.includes(".")&&sS(c))return c}return t(r,n,s)}}});var L=R((Yhe,My)=>{"use strict";var Pn=require("path"),CY=require("fs"),{relative:$he,join:Vhe}=Pn,{existsSync:DY}=CY;function LY(){let e=__dirname;for(;!DY(Pn.join(e,"package.json"));){let t=Pn.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(LY,"getHDBPackageRoot");var eo=LY(),gy="js",Zd=gy,PY="harperdb-config.yaml",MY="defaultConfig.yaml",UY="hdb",Ry=`harperdb.${Zd}`,Ay=`customFunctionsServer.${Zd}`,vY=`restartHdb.${Zd}`,aS="HarperDB",Xd="Custom Functions",ef="Clustering Hub",tf="Clustering Leaf",BY="Clustering Ingest Service",HY="Clustering Reply Service",xY="foreground.pid",GY="hdb.pid",qY="data",FY={HDB:aS,CLUSTERING_HUB:ef,CLUSTERING_LEAF:tf,CLUSTERING_INGEST_SERVICE:BY,CLUSTERING_REPLY_SERVICE:HY,CUSTOM_FUNCTIONS:Xd,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"},kY={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},$Y={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},VY={harperdb:aS,"clustering hub":ef,"clustering leaf":tf,"custom functions":Xd,custom_functions:Xd,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},YY={CLUSTERING_HUB_PROC_DESCRIPTOR:ef,CLUSTERING_LEAF_PROC_DESCRIPTOR:tf},oS={HDB:Pn.join(eo,"server/harperdb"),CUSTOM_FUNCTIONS:Pn.join(eo,"server/customFunctions"),CLUSTERING_HUB:Pn.join(eo,"server/nats"),CLUSTERING_LEAF:Pn.join(eo,"server/nats")},KY={HDB:Pn.join(oS.HDB,Ry),CUSTOM_FUNCTIONS:Pn.join(oS.CUSTOM_FUNCTIONS,Ay)},WY={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Pn.join(eo,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Pn.join(eo,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Pn.join(eo,"launchServiceScripts/launchUpdateNodes4-0-0.js")},QY={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Oy="support@harperdb.io",jY="customer-success@harperdb.io",by=1,zY=4141,Ny="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",JY="https://www.harperdb.io/product",XY=`For support, please submit a request at ${Ny} or contact ${Oy}`,yy=`For license support, please contact ${jY}`,ZY="None of the specified records were found.",e1="hash attribute not found",t1=`Your current license only supports ${by} role. ${yy}`,r1="Your current license only supports 3 connections to a node.",n1="127.0.0.1",s1=1,i1=/^\.$/,o1=/^\.\.$/,a1="U+002E",c1=/\//g,l1="U+002F",u1=/U\+002F/g,_1=/^U\+002E$/,d1=/^U\+002EU\+002E$/,f1="d",E1=999999,h1="*",p1="--max-old-space-size=",m1="system",S1="__hdb_hash",T1=".harperdb",g1=".hdb",R1="keys",A1="hdb_boot_properties.file",O1=".updateConfig.json",b1="SIGTSTP",N1=24,y1=6e4,I1=448,w1="blob",C1="trash",D1="database",L1="schema",P1="transactions",M1=".count",U1="id",v1="PROCESS_NAME",Iy={SETTINGS_PATH_KEY:"settings_path"},wy=require("lodash"),B1={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"},H1={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},x1={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},G1={JOB_TABLE_NAME:"hdb_job",NODE_TABLE_NAME:"hdb_nodes",ATTRIBUTE_TABLE_NAME:"hdb_attribute",LICENSE_TABLE_NAME:"hdb_license",ROLE_TABLE_NAME:"hdb_role",SCHEMA_TABLE_NAME:"hdb_schema",TABLE_TABLE_NAME:"hdb_table",USER_TABLE_NAME:"hdb_user",INFO_TABLE_NAME:"hdb_info"},q1={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"},rn="hdb_internal:",F1={CREATE_SCHEMA:rn+"create_schema",CREATE_TABLE:rn+"create_table",CREATE_ATTRIBUTE:rn+"create_attribute",ADD_USER:rn+"add_user",ALTER_USER:rn+"alter_user",DROP_USER:rn+"drop_user",HDB_NODES:rn+"hdb_nodes",HDB_USERS:rn+"hdb_users",HDB_WORKERS:rn+"hdb_workers",CATCHUP:rn+"catchup",SCHEMA_CATCHUP:rn+"schema_catchup",WORKER_ROOM:rn+"cluster_workers"},k1={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"},$1="060493.ks",V1=".license",Y1={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},te={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"},K1={CSV:".csv",JSON:".json"},W1={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Q1={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},$l={};$l[te.INSERT]=te.INSERT;$l[te.UPDATE]=te.UPDATE;$l[te.UPSERT]=te.UPSERT;$l[te.DELETE]=te.DELETE;var Fe=Object.create(null);Fe[te.DESCRIBE_ALL]=te.DESCRIBE_ALL;Fe[te.DESCRIBE_TABLE]=te.DESCRIBE_TABLE;Fe[te.DESCRIBE_SCHEMA]=te.DESCRIBE_SCHEMA;Fe[te.READ_LOG]=te.READ_LOG;Fe[te.ADD_NODE]=te.ADD_NODE;Fe[te.LIST_USERS]=te.LIST_USERS;Fe[te.LIST_ROLES]=te.LIST_ROLES;Fe[te.USER_INFO]=te.USER_INFO;Fe[te.SQL]=te.SQL;Fe[te.GET_JOB]=te.GET_JOB;Fe[te.SEARCH_JOBS_BY_START_DATE]=te.SEARCH_JOBS_BY_START_DATE;Fe[te.DELETE_FILES_BEFORE]=te.DELETE_FILES_BEFORE;Fe[te.EXPORT_LOCAL]=te.EXPORT_LOCAL;Fe[te.EXPORT_TO_S3]=te.EXPORT_TO_S3;Fe[te.CLUSTER_STATUS]=te.CLUSTER_STATUS;Fe[te.REMOVE_NODE]=te.REMOVE_NODE;Fe[te.RESTART]=te.RESTART;Fe[te.CUSTOM_FUNCTIONS_STATUS]=te.CUSTOM_FUNCTIONS_STATUS;Fe[te.GET_CUSTOM_FUNCTIONS]=te.GET_CUSTOM_FUNCTIONS;Fe[te.GET_CUSTOM_FUNCTION]=te.GET_CUSTOM_FUNCTION;Fe[te.SET_CUSTOM_FUNCTION]=te.SET_CUSTOM_FUNCTION;Fe[te.DROP_CUSTOM_FUNCTION]=te.DROP_CUSTOM_FUNCTION;Fe[te.ADD_CUSTOM_FUNCTION_PROJECT]=te.ADD_CUSTOM_FUNCTION_PROJECT;Fe[te.DROP_CUSTOM_FUNCTION_PROJECT]=te.DROP_CUSTOM_FUNCTION_PROJECT;Fe[te.PACKAGE_CUSTOM_FUNCTION_PROJECT]=te.PACKAGE_CUSTOM_FUNCTION_PROJECT;Fe[te.DEPLOY_CUSTOM_FUNCTION_PROJECT]=te.DEPLOY_CUSTOM_FUNCTION_PROJECT;var j1={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},z1={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Cy={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"},J1=wy.invert(Cy),X1={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},w={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",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:"operationsApi_tls",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_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},Dy={settings_path:Iy.SETTINGS_PATH_KEY,hdb_root_key:w.ROOTPATH,hdb_root:w.ROOTPATH,rootpath:w.ROOTPATH,server_port_key:w.OPERATIONSAPI_NETWORK_PORT,server_port:w.OPERATIONSAPI_NETWORK_PORT,cert_key:w.TLS_CERTIFICATE,certificate:w.TLS_CERTIFICATE,private_key_key:w.TLS_PRIVATEKEY,private_key:w.TLS_PRIVATEKEY,http_secure_enabled_key:w.OPERATIONSAPI_NETWORK_HTTPS,https_on:w.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:w.OPERATIONSAPI_NETWORK_CORS,cors_on:w.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:w.LOGGING_LEVEL,log_level:w.LOGGING_LEVEL,log_path_key:w.LOGGING_ROOT,log_path:w.LOGGING_ROOT,clustering_node_name_key:w.CLUSTERING_NODENAME,node_name:w.CLUSTERING_NODENAME,clustering_enabled_key:w.CLUSTERING_ENABLED,clustering:w.CLUSTERING_ENABLED,max_http_threads:w.THREADS_COUNT,max_hdb_processes:w.THREADS_COUNT,server_timeout_key:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:w.LOGGING_AUDITLOG,disable_transaction_log:w.LOGGING_AUDITLOG,operation_token_timeout_key:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:w.HTTP_PORT,custom_functions_port:w.HTTP_PORT,custom_functions_directory_key:w.COMPONENTSROOT,custom_functions_directory:w.COMPONENTSROOT,max_custom_function_processes:w.THREADS_COUNT,log_to_file:w.LOGGING_FILE,log_to_stdstreams:w.LOGGING_STDSTREAMS,local_studio_on:w.LOCALSTUDIO_ENABLED,clustering_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:w.CLUSTERING_USER,clustering_enabled:w.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:w.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:w.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:w.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:w.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:w.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:w.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:w.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxconsumemsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS,clustering_leafserver_streams_maxingestthreads:w.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS,clustering_leafserver_streams_maxmsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:w.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:w.CLUSTERING_NODENAME,clustering_tls_certificate:w.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:w.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:w.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:w.CLUSTERING_TLS_INSECURE,clustering_tls_verify:w.CLUSTERING_TLS_VERIFY,clustering_loglevel:w.CLUSTERING_LOGLEVEL,clustering_republishmessages:w.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:w.CLUSTERING_DATABASELEVEL,customfunctions_network_port:w.HTTP_PORT,customfunctions_tls_certificate:w.TLS_CERTIFICATE,customfunctions_network_cors:w.HTTP_CORS,customfunctions_network_corsaccesslist:w.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:w.HTTP_HEADERSTIMEOUT,customfunctions_network_https:w.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:w.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:w.HTTP_TIMEOUT,customfunctions_tls:w.TLS,http_threads:w.THREADS_COUNT,threads:w.THREADS_COUNT,threads_count:w.THREADS_COUNT,threads_debug:w.THREADS_DEBUG,threads_debug_startingport:w.THREADS_DEBUG_STARTINGPORT,threads_debug_port:w.THREADS_DEBUG_PORT,threads_debug_host:w.THREADS_DEBUG_HOST,threads_debug_waitfordebugger:w.THREADS_DEBUG_WAITFORDEBUGGER,threads_maxheapmemory:w.THREADS_MAXHEAPMEMORY,http_session_affinity:w.HTTP_SESSIONAFFINITY,http_compressionthreshold:w.HTTP_COMPRESSIONTHRESHOLD,http_cors:w.HTTP_CORS,http_corsaccesslist:w.HTTP_CORSACCESSLIST,http_headerstimeout:w.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,http_maxparamlength:w.HTTP_MAXPARAMLENGTH,http_timeout:w.HTTP_TIMEOUT,http_port:w.HTTP_PORT,http_secureport:w.HTTP_SECUREPORT,http_mtls:w.HTTP_MTLS,http_mtls_user:w.HTTP_MTLS_USER,http_mtls_required:w.HTTP_MTLS_REQUIRED,http_maxheadersize:w.HTTP_MAXHEADERSIZE,http_threadrange:w.HTTP_THREADRANGE,customfunctions_processes:w.THREADS_COUNT,customfunctions_root:w.COMPONENTSROOT,localstudio_enabled:w.LOCALSTUDIO_ENABLED,logging_file:w.LOGGING_FILE,logging_level:w.LOGGING_LEVEL,logging_root:w.LOGGING_ROOT,logging_rotation_enabled:w.LOGGING_ROTATION_ENABLED,logging_rotation_compress:w.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:w.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:w.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:w.LOGGING_ROTATION_PATH,logging_stdstreams:w.LOGGING_STDSTREAMS,logging_auditlog:w.LOGGING_AUDITLOG,logging_auditretention:w.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:w.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:w.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:w.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:w.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:w.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:w.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:w.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls:w.OPERATIONSAPI_TLS,operationsapi_tls_certificate:w.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:w.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:w.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:w.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:w.ROOTPATH,databases:w.DATABASES,storage_path:w.STORAGE_PATH,storage_maxtransactionqueuetime:w.STORAGE_MAXTRANSACTIONQUEUETIME,ignorescripts:w.IGNORE_SCRIPTS,mqtt_network_port:w.MQTT_NETWORK_PORT,mqtt_websocket:w.MQTT_WEBSOCKET,mqtt_network_secureport:w.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:w.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:w.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:w.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:w.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:w.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:w.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:w.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:w.AUTHENTICATION_CACHETTL,authentication_enablesessions:w.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:w.COMPONENTSROOT,tls:w.TLS,tls_certificate:w.TLS_CERTIFICATE,tls_privatekey:w.TLS_PRIVATEKEY,tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,tls_ciphers:w.TLS_CIPHERS};for(let e in w){let t=w[e];Dy[t.toLowerCase()]=t}var Z1={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},eK={csv_file_load:"csv_file_load",csv_data_load:te.CSV_DATA_LOAD,csv_url_load:te.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",restart_service:"restart_service"},tK={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"},rK={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},nK={VERSION_DEFAULT:"2.2.0"},sK={DEVELOPMENT:8192,DEFAULT:512},iK={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"},oK={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"},aK={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},Ly={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},cK=Symbol("metadata"),lK="__clustering__",uK=Object.values(Ly),_K=15984864e5,Py={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},dK=wy.invert(Py),fK={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"},EK=111,hK=`\r
3
+ `,pK={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},mK=["*","%"],SK="unauthorized_access",TK="func_val",gK={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},RK={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},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",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update"},OK={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},bK={HTTP:"http"},NK={STOPPED:"stopped",ONLINE:"online"},yK="3.x.x",IK={SUCCESS:"success",FAILURE:"failure"},wK={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};My.exports={LOCAL_HARPERDB_OPERATIONS:Fe,HDB_SUPPORT_ADDRESS:Oy,HDB_SUPPORT_URL:Ny,HDB_PRICING_URL:JY,SUPPORT_HELP_MSG:XY,LICENSE_HELP_MSG:yy,HDB_PROC_NAME:Ry,HDB_PROC_DESCRIPTOR:aS,CLUSTERING_LEAF_PROC_DESCRIPTOR:tf,CLUSTERING_HUB_PROC_DESCRIPTOR:ef,SYSTEM_SCHEMA_NAME:m1,HASH_FOLDER_NAME:S1,HDB_HOME_DIR_NAME:T1,UPDATE_FILE_NAME:O1,LICENSE_KEY_DIR_NAME:R1,BOOT_PROPS_FILE_NAME:A1,JOB_TYPE_ENUM:eK,JOB_STATUS_ENUM:Y1,SYSTEM_TABLE_NAMES:G1,SYSTEM_TABLE_HASH_ATTRIBUTES:q1,OPERATIONS_ENUM:te,VALID_S3_FILE_TYPES:K1,S3_BUCKET_AUTH_KEYS:W1,VALID_SQL_OPS_ENUM:Q1,GEO_CONVERSION_ENUM:z1,HDB_SETTINGS_NAMES:Cy,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:J1,SERVICE_ACTIONS_ENUM:j1,CLUSTER_MESSAGE_TYPE_ENUM:tK,CLUSTER_CONNECTION_DIRECTION_ENUM:rK,CLUSTER_EVENTS_DEFS_ENUM:iK,PERIOD_REGEX:i1,DOUBLE_PERIOD_REGEX:o1,UNICODE_PERIOD:a1,FORWARD_SLASH_REGEX:c1,UNICODE_FORWARD_SLASH:l1,ESCAPED_FORWARD_SLASH_REGEX:u1,ESCAPED_PERIOD_REGEX:_1,ESCAPED_DOUBLE_PERIOD_REGEX:d1,REG_KEY_FILE_NAME:$1,RESTART_TIMEOUT_MS:y1,HDB_FILE_PERMISSIONS:I1,DATABASES_DIR_NAME:D1,LEGACY_DATABASES_DIR_NAME:L1,TRANSACTIONS_DIR_NAME:P1,LIMIT_COUNT_NAME:M1,ID_ATTRIBUTE_STRING:U1,INSERT_MODULE_ENUM:H1,UPGRADE_JSON_FIELD_NAMES_ENUM:x1,RESTART_CODE:b1,RESTART_CODE_NUM:N1,CLUSTER_OPERATIONS:$l,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:k1,HDB_INTERNAL_SC_CHANNEL_PREFIX:rn,INTERNAL_SC_CHANNELS:F1,CLUSTERING_MESSAGE_TYPES:fK,HDB_FILE_SUFFIX:g1,BLOB_FOLDER_NAME:w1,HDB_TRASH_DIR:C1,ORIGINATOR_SET_VALUE:EK,LICENSE_VALUES:nK,RAM_ALLOCATION_ENUM:sK,TIME_STAMP_NAMES_ENUM:Ly,TIME_STAMP_NAMES:uK,PERMS_UPDATE_RELEASE_TIMESTAMP:_K,SEARCH_NOT_FOUND_MESSAGE:ZY,SEARCH_ATTRIBUTE_NOT_FOUND:e1,LICENSE_ROLE_DENIED_RESPONSE:t1,LICENSE_MAX_CONNS_REACHED:r1,BASIC_LICENSE_MAX_NON_CU_ROLES:by,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:zY,VALUE_SEARCH_COMPARATORS:Py,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:dK,LICENSE_FILE_NAME:V1,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:oK,NEW_LINE:hK,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:s1,MOMENT_DAYS_TAG:f1,API_TURNOVER_SEC:E1,LOOPBACK:n1,CODE_EXTENSION:Zd,WILDCARD_SEARCH_VALUE:h1,NODE_ERROR_CODES:aK,JAVASCRIPT_EXTENSION:gy,PERMS_CRUD_ENUM:pK,UNAUTHORIZED_PERMISSION_NAME:SK,SEARCH_WILDCARDS:mK,FUNC_VAL:TK,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:gK,JWT_ENUM:RK,CLUSTERING_FLAG:lK,ITC_EVENT_TYPES:AK,CUSTOM_FUNCTION_PROC_NAME:Ay,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Xd,SERVICES:OK,THREAD_TYPES:bK,MEM_SETTING_KEY:p1,HDB_RESTART_SCRIPT:vY,PROCESS_DESCRIPTORS:FY,SERVICE_SERVERS:KY,SERVICE_SERVERS_CWD:oS,PROCESS_DESCRIPTORS_VALIDATE:VY,LAUNCH_SERVICE_SCRIPTS:WY,LOG_LEVELS:$Y,PROCESS_NAME_ENV_PROP:v1,LOG_NAMES:kY,PM2_PROCESS_STATUSES:NK,CONFIG_PARAM_MAP:Dy,CONFIG_PARAMS:w,HDB_CONFIG_FILE:PY,HDB_DEFAULT_CONFIG_FILE:MY,ROLE_TYPES_ENUM:QY,BOOT_PROP_PARAMS:Iy,INSTALL_PROMPTS:B1,HDB_ROOT_DIR_NAME:UY,CLUSTERING_PROCESSES:YY,FOREGROUND_PID_FILE:xY,PACKAGE_ROOT:eo,PRE_4_0_0_VERSION:yK,DATABASES_PARAM_CONFIG:Z1,METADATA_PROPERTY:cK,AUTH_AUDIT_STATUS:IK,AUTH_AUDIT_TYPES:wK,HDB_PID_FILE:GY,DEFAULT_DATABASE_NAME:qY,LEGACY_CONFIG_PARAMS:X1};Ty()});var to=R((Whe,By)=>{"use strict";var Uy=require("minimist");By.exports=CK;function CK(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=vy(process.env),n=vy(Uy(process.argv))):(r=process.env,n=Uy(process.argv));let s={};for(let i=0,o=e.length;i<o;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}a(CK,"assignCMDENVVariables");function vy(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(vy,"objKeysToLowerCase")});var k=R((jhe,ES)=>{"use strict";var Qo=require("fs-extra"),{workerData:DK,threadId:LK}=require("worker_threads"),ci=require("path"),Gy=require("yaml"),qy=require("properties-reader"),Nt=L(),Hy=to(),PK=require("os"),{PACKAGE_ROOT:lS}=L(),{_assignPackageExport:MK}=require("../index"),Yl={};for(let e in console)Yl[e]||(Yl[e]=console[e]);var yr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Fy={STDOUT:"stdOut",STDERR:"stdErr"},UK=ci.join(lS,"logs"),vK=ci.join(lS,"config/yaml/",Nt.HDB_DEFAULT_CONFIG_FILE),BK=1e4,ai,Cs,Nr,rf,nf,Kl,lc,Vl;Vl===void 0&&ky();ES.exports={notify:Yy,fatal:Ky,error:Wl,warn:fS,info:sf,debug:dS,trace:_S,setLogLevel:$K,log_level:Nr,loggerWithTag:HK,suppressLogging:xK,initLogSettings:ky,setupConsoleLogging:$y,logCustomLevel:FK,closeLogFile:uS,getLogFilePath:()=>Kl,OUTPUTS:Fy,AuthAuditLog:KK};MK("logger",ES.exports);function ky(e=!1){try{if(Vl===void 0||e){uS();let t=kK(),r=Hy(["ROOTPATH"]);try{Vl=qy(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Qo.pathExistsSync(ci.join(r.ROOTPATH,Nt.HDB_CONFIG_FILE)))throw n}({level:Nr,config_log_path:nf,to_file:ai,to_stream:Cs}=VK(r.ROOTPATH?ci.join(r.ROOTPATH,Nt.HDB_CONFIG_FILE):Vl.get("settings_path"))),rf=Nt.LOG_NAMES.HDB,Kl=ci.join(nf,rf)}}catch(t){if(Vl=void 0,t.code===Nt.NODE_ERROR_CODES.ENOENT||t.code===Nt.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=Hy(Object.keys(Nt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Nt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Nt.CONFIG_PARAMS.LOGGING_LEVEL){Nr=l;continue}if(c===Nt.CONFIG_PARAMS.LOGGING_STDSTREAMS){Cs=l;continue}c===Nt.CONFIG_PARAMS.LOGGING_FILE&&(ai=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=YK();ai=ai===void 0?s:ai,ai=xy(ai),Cs=Cs===void 0?i:Cs,Cs=xy(Cs),Nr=Nr===void 0?n:Nr,nf=UK,rf=Nt.LOG_NAMES.INSTALL,Kl=ci.join(nf,rf);return}throw Wl("Error initializing log settings"),Wl(t),t}process.env.DEV_MODE&&(Cs=!0),$y()}a(ky,"initLogSettings");var cS=!0;function $y(){cc("error",Wl),cc("warn",fS),cc("log",sf),cc("info",sf),cc("debug",dS),cc("trace",_S)}a($y,"setupConsoleLogging");function cc(e,t){console[e]=function(...r){if(cS&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Yl[e](...r)}}a(cc,"logConsole");function HK(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Yy),fatal:r(Ky),error:r(Wl),warn:r(fS),info:r(sf),debug:r(dS),trace:r(_S)};function r(n){return function(...s){return n(t,...s)}}}a(HK,"loggerWithTag");function xK(e){try{cS=!1,e()}finally{cS=!0}}a(xK,"suppressLogging");var GK=DK?.name?.replace(/ /g,"-")||"main";function li(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-1,o=[e],c=0,l;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(l=t[0]?.serviceName,c++)),o.unshift(l||GK+"/"+LK);c<s;c++){let _=t[c];if(_ instanceof Error&&_.stack)n+=_.stack,Object.keys(_).length>0&&(n+=`
4
4
  `+JSON.stringify(_)),_.cause&&(t[c--]=_.cause,_&&(n+=`
5
5
  Caused by:`));else if(typeof _=="object")try{n+=JSON.stringify(_)}catch{n+="Object ["+Object.keys(_)+"]"}else n+=_;c<i&&(n+=" ")}return`${r} [${o.join("] [")}]: ${n}
6
- `}a(li,"createLogRecord");function Ql(e){ai&&$y(e),Cs&&process.stdout.write(e)}a(Ql,"logStdOut");function of(e){ai&&$y(e),Cs&&process.stderr.write(e)}a(of,"logStdErr");function $y(e){qK(),lc?Qo.appendFileSync(lc,e):Yl.log(e)}a($y,"logToFile");function lS(){try{Qo.closeSync(lc)}catch{}lc=null}a(lS,"closeLogFile");function qK(){if(!lc){try{if(!Kl)debugger;lc=Qo.openSync(Kl,"a")}catch(e){Yl.error(e)}setTimeout(()=>{lS()},BK).unref()}}a(qK,"openLogFile");function sf(...e){yr[Nr]<=yr.info&&Ql(li("info",e))}a(sf,"info");function uS(...e){yr[Nr]<=yr.trace&&Ql(li("trace",e))}a(uS,"trace");function Wl(...e){yr[Nr]<=yr.error&&of(li("error",e))}a(Wl,"error");function _S(...e){yr[Nr]<=yr.debug&&Ql(li("debug",e))}a(_S,"debug");function Vy(...e){yr[Nr]<=yr.notify&&Ql(li("notify",e))}a(Vy,"notify");function Yy(...e){yr[Nr]<=yr.fatal&&of(li("fatal",e))}a(Yy,"fatal");function dS(...e){yr[Nr]<=yr.warn&&of(li("warn",e))}a(dS,"warn");function FK(e,t,...r){t===qy.STDERR?of(li(e,r)):Ql(li(e,r))}a(FK,"logCustomLevel");function kK(){let e;try{e=PK.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ci.join(e,Nt.HDB_HOME_DIR_NAME,Nt.BOOT_PROPS_FILE_NAME);return Qo.existsSync(t)||(t=ci.join(cS,"utility/hdb_boot_properties.file")),t}a(kK,"getPropsFilePath");function $K(e){Nr=e}a($K,"setLogLevel");function Hy(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Hy,"autoCastBoolean");function VK(e){try{if(e.includes("config/settings.js")){let o=Gy(e);return{level:o.get(Nt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ci.dirname(o.get(Nt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Nt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Nt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=xy.parseDocument(Qo.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===Nt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(VK,"getLogConfig");function YK(){try{let e=xy.parseDocument(Qo.readFileSync(vK,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(YK,"getDefaultConfig");function KK(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}a(KK,"AuthAuditLog")});var ES=R((Jhe,Ky)=>{"use strict";var WK=require("util"),QK=require("path"),jK=require("child_process"),zK=WK.promisify(jK.execFile),JK=1e3*1e3*10;Ky.exports={findPs:XK};async function XK(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await zK("ps",["wwxo",`pid,${r}`],{maxBuffer:JK});for(let s of n.trim().split(`
7
- `).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:QK.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(XK,"findPs")});var _t=R((Zhe,Qy)=>{"use strict";var ZK="__dbis__",eW="__txns__",tW="__environment_name__",rW="__dbi_defintion__",nW={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"},sW=["__createdtime__","__updatedtime__"],iW="\uFFFF",Wy={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},oW=Object.values(Wy);Qy.exports={AUDIT_STORE_NAME:eW,INTERNAL_DBIS_NAME:ZK,DBI_DEFINITION_NAME:rW,SEARCH_TYPES:nW,TIMESTAMP_NAMES:sW,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:tW,TRANSACTIONS_DBI_NAMES_ENUM:Wy,TRANSACTIONS_DBIS:oW,OVERFLOW_MARKER:iW}});var nn=R((epe,nI)=>{"use strict";var jy=L(),zy=_t(),Jy={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},Xy=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Zy={500:Xy("There was an error processing your request."),400:"Invalid request"},aW=Zy[Jy.INTERNAL_SERVER_ERROR],cW={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.`},lW={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},uW={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"},_W={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 ${zy.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${zy.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"},dW={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${jy.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 ${jy.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"},eI={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"},fW={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."},EW={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`},hW={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"},pW={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},mW={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`},tI={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.`},rI={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}`},SW={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."},TW={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},gW={...eI,...uW,...cW,...fW,...EW,...hW,...pW,...mW,...dW,...tI,...rI,...SW,...TW,...lW};nI.exports={CHECK_LOGS_WRAPPER:Xy,HDB_ERROR_MSGS:gW,DEFAULT_ERROR_MSGS:Zy,DEFAULT_ERROR_RESP:aW,HTTP_STATUS_CODES:Jy,LMDB_ERRORS_ENUM:_W,AUTHENTICATION_ERROR_MSGS:eI,VALIDATION_ERROR_MSGS:tI,ITC_ERRORS:rI}});var ie=R((rpe,oI)=>{"use strict";var uc=nn(),RW=k(),AW=L(),af=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,sI),this.statusCode=n||uc.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(uc.DEFAULT_ERROR_MSGS[n]?uc.DEFAULT_ERROR_MSGS[n]:uc.DEFAULT_ERROR_MSGS[uc.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&RW[s](i)}},hS=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}},pS=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function sI(e,t,r,n=AW.LOG_LEVELS.ERROR,s=null,i=!1){if(iI(e))return e;let o=new af(e,t,r,n,s);return i&&delete o.stack,o}a(sI,"handleHDBError");function iI(e){return e.__proto__.constructor.name===af.name}a(iI,"isHDBError");oI.exports={isHDBError:iI,handleHDBError:sI,ClientError:hS,ServerError:pS,hdb_errors:uc}});var Je=R((spe,fI)=>{"use strict";var Zl=L(),OW=Y(),Ir=X(),eu=require("path"),bW=require("minimist"),aI=require("fs-extra"),cI=require("lodash");Ir.initSync();var{CONFIG_PARAMS:ro,DATABASES_PARAM_CONFIG:jl,SYSTEM_SCHEMA_NAME:cf}=Zl,zl,Jl,Xl;function lI(){if(zl!==void 0)return zl;if(Ir.getHdbBasePath()!==void 0)return zl=Ir.get(ro.STORAGE_PATH)||eu.join(Ir.getHdbBasePath(),Zl.DATABASES_DIR_NAME),zl}a(lI,"getBaseSchemaPath");function uI(){if(Jl!==void 0)return Jl;if(Ir.getHdbBasePath()!==void 0)return Jl=dI(cf),Jl}a(uI,"getSystemSchemaPath");function _I(){if(Xl!==void 0)return Xl;if(Ir.getHdbBasePath()!==void 0)return Xl=Ir.get(Zl.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||eu.join(Ir.getHdbBasePath(),Zl.TRANSACTIONS_DIR_NAME),Xl}a(_I,"getTransactionAuditStoreBasePath");function NW(e,t){let r=Ir.get(ro.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||eu.join(_I(),e.toString())}a(NW,"getTransactionAuditStorePath");function dI(e,t){e=e.toString(),t=t&&t.toString();let r=Ir.get(Zl.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||eu.join(lI(),e)}a(dI,"getSchemaPath");function yW(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,bW(process.argv));let n=r[ro.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!OW.isObject(n))throw o;i=n}for(let o of i){let c=o[cf];if(!c)continue;let l=Ir.get(ro.DATABASES);l=l??{};let _=c?.tables?.[t]?.[jl.PATH];if(_)return cI.set(l,[cf,jl.TABLES,t,jl.PATH],_),Ir.setProperty(ro.DATABASES,l),_;let u=c?.[jl.PATH];if(u)return cI.set(l,[cf,jl.PATH],u),Ir.setProperty(ro.DATABASES,l),u}}let s=r[ro.STORAGE_PATH.toUpperCase()];if(s){if(!aI.pathExistsSync(s))throw new Error(s+" does not exist");let i=eu.join(s,e);return aI.mkdirsSync(i),Ir.setProperty(ro.STORAGE_PATH,s),i}return uI()}a(yW,"initSystemSchemaPaths");function IW(){zl=void 0,Jl=void 0,Xl=void 0}a(IW,"resetPaths");fI.exports={getBaseSchemaPath:lI,getSystemSchemaPath:uI,getTransactionAuditStorePath:NW,getTransactionAuditStoreBasePath:_I,getSchemaPath:dI,initSystemSchemaPaths:yW,resetPaths:IW}});var wr=R((cpe,SI)=>{"use strict";var wW=nn().LMDB_ERRORS_ENUM,ope=require("lmdb"),CW=_t(),ape=require("buffer").Buffer,{OVERFLOW_MARKER:EI,MAX_SEARCH_KEY_LENGTH:lf}=CW,hI=["number","string","symbol","boolean","bigint"];function DW(e){if(e=e?.primaryStore||e,!e)throw new Error(wW.ENV_REQUIRED)}a(DW,"validateEnv");function LW(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(LW,"stringifyData");function PW(e){return e instanceof Date?e.valueOf():e}a(PW,"convertKeyValueToWrite");function MW(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(hI.includes(typeof e))return e.length>lf?[e.slice(0,lf)+EI]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(hI.includes(typeof i))i.length>lf?r.push(i.slice(0,lf)+EI):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(MW,"getIndexedValues");var uf=0,pI=0;function mI(){pI=Date.now()-performance.now()}a(mI,"adjustStartTime");mI();var UW=6e4;setInterval(mI,UW).unref();function vW(){let e=performance.now()+pI;return e>uf?(uf=e,e):(uf+=488e-6,uf)}a(vW,"getNextMonotonicTime");SI.exports={validateEnv:DW,stringifyData:LW,convertKeyValueToWrite:PW,getNextMonotonicTime:vW,getIndexedValues:MW}});var tu=R((upe,TI)=>{"use strict";var BW=L().OPERATIONS_ENUM,mS=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=BW.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};TI.exports=mS});var ru=R((fpe,OI)=>{"use strict";var dpe=tu(),_f=L(),SS=Y(),gI=k(),HW=require("uuid"),{handleHDBError:df,hdb_errors:xW}=ie(),{HDB_ERROR_MSGS:ff,HTTP_STATUS_CODES:Ef}=xW;OI.exports=RI;function RI(e,t,r){for(let s=0;s<t.length;s++)AI(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];GW(i,r,e.operation)}}a(RI,"processRows");RI.validateAttribute=AI;function AI(e){if(Buffer.byteLength(String(e))>_f.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw df(new Error,ff.ATTR_NAME_LENGTH_ERR(e),Ef.BAD_REQUEST,void 0,void 0,!0);if(SS.isEmptyOrZeroLength(e)||SS.isEmpty(e.trim()))throw df(new Error,ff.ATTR_NAME_NULLISH_ERR,Ef.BAD_REQUEST,void 0,void 0,!0)}a(AI,"validateAttribute");function GW(e,t,r){if(!e.hasOwnProperty(t)||SS.isEmptyOrZeroLength(e[t])){if(r===_f.OPERATIONS_ENUM.INSERT||r===_f.OPERATIONS_ENUM.UPSERT){e[t]=HW.v4();return}throw gI.error("Update transaction aborted due to record with no hash value:",e),df(new Error,ff.RECORD_MISSING_HASH_ERR,Ef.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>_f.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw gI.error(e),df(new Error,ff.HASH_VAL_LENGTH_ERR,Ef.BAD_REQUEST,void 0,void 0,!0)}a(GW,"validateHash")});var bI,ts,TS,nu=be(()=>{bI=require("events"),ts=class extends bI.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new TS;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(){let t=this.queue?.shift();return t||this.emit("drained"),t}waitForDrain(){return new Promise(t=>{!this.queue||this.queue.length===0?t(!0):(this.once("drained",()=>t(!0)),this.currentDrainResolver=t,this.drainCloseListener||(this.drainCloseListener=!0,this.on("close",()=>{this.currentDrainResolver?.(!1)})))})}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)}},TS=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 jo={};$e(jo,{server:()=>dt});var NI,dt,Cr=be(()=>{NI=require("../index"),dt={};(0,NI._assignPackageExport)("server",dt)});var AS={};$e(AS,{loadGQLSchema:()=>kW,start:()=>RS,startOnMainThread:()=>FW});function RS({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:_,StringValueNode:u}=await import("graphql"),d=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let S of d.definitions)switch(S.kind){case l.OBJECT_TYPE_DEFINITION:let U=function(v){if(v.kind==="NonNullType"){let W=U(v.type);return W.nullable=!1,W}if(v.kind==="ListType")return{type:"array",elements:U(v.type)};let M={type:v.name?.value};return Object.defineProperty(M,"location",{value:v.loc.startToken}),M};a(U,"getProperty");let g=S.name.value,T=[],b={table:null,database:null,properties:T};E.set(g,b);for(let v of S.directives){if(v.name.value==="table"){for(let F of v.arguments)b[F.name.value]=F.value.value;b.schema&&(b.database=b.schema),b.table||(b.table=g),b.audit&&(b.audit=b.audit!=="false"),b.attributes=b.properties,f.push(b)}if(v.name.value==="sealed"&&(b.sealed=!0),v.name.value==="export"){b.export=!0;for(let F of v.arguments)F.name.value==="name"&&(b.export={name:F.value.value})}}let N=!1;for(let v of S.fields){let F=U(v.type);F.name=v.name.value,T.push(F);for(let M of v.directives)if(M.name.value==="primaryKey")N?console.warn("Can not define two attributes as a primary key"):(F.isPrimaryKey=!0,N=!0);else if(M.name.value==="indexed")F.indexed=!0;else if(M.name.value==="relationship"){let W={};for(let z of M.arguments)W[z.name.value]=z.value.value;F.relationship=W}else if(M.name.value==="createdTime")F.assignCreatedTime=!0;else if(M.name.value==="updatedTime")F.assignUpdatedTime=!0;else if(M.name.value==="expiresAt")F.expiresAt=!0;else if(M.name.value==="allow"){let W=F.authorizedRoles=[];for(let z of M.arguments)z.name.value==="role"&&W.push(z.value.value)}}b.type=g,g==="Query"&&(h=b)}function m(S){let g=E.get(S.type);g?(Object.defineProperty(S,"properties",{value:g.properties}),Object.defineProperty(S,"definition",{value:g})):S.type==="array"?m(S.elements):qW.includes(S.type)||(0,yI.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(m,"connectPropertyType");for(let S of E.values())for(let g of S.properties)m(g);for(let S of f)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,gS.dirname)(n),S.tableClass):i.set((0,gS.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var gS,yI,qW,FW,kW,II=be(()=>{gS=require("path");Re();yI=x(rt()),qW=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(RS,"start");FW=RS,kW=RS({ensureTable:St}).handleFile});async function hf(e){let t=(0,DI.pathToFileURL)(e).toString();return $W?(su||(su=VW(KW)),(await(await su).import(t)).namespace):import(t)}async function VW(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),su=new Compartment({console,Math,Date,fetch:YW,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,CI.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:tr,tables:sn,databases:ft})}};let n=await(0,wI.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),su}function YW(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 KW(){return{Resource:tr,tables:sn}}var wI,CI,DI,$W,su,OS=be(()=>{Mn();Re();wI=require("fs/promises"),CI=require("path"),DI=require("url"),$W=!1;a(hf,"secureImport");a(VW,"getCompartment");a(YW,"secureOnlyFetch");a(KW,"getGlobalVars")});var NS={};$e(NS,{handleFile:()=>WW});async function WW(e,t,r,n){let s=new Map,i=await hf(r);c(i.default)&&n.set((0,bS.dirname)(t),i.default),o(i,(0,bS.dirname)(t));function o(l,_){for(let u in l){let d=l[u];c(d)?n.set(_+"/"+u,d):typeof d=="object"&&o(d,_+"/"+u)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var bS,LI=be(()=>{OS();bS=require("path");a(WW,"handleFile")});var IS={};$e(IS,{start:()=>QW});function QW({resources:e}){e.set("login",yS),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var yS,PI=be(()=>{Mn();a(QW,"start");yS=class extends tr{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var GI={};$e(GI,{parse:()=>CS,streamAsJSON:()=>iu,stringify:()=>zo});function iu(e){return new wS({value:e})}function MI(e){return console.error(e),JSON.stringify(e.toString())}function UI(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function zo(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===HI)return xI(e);if(t.resolution)return t.resolution.then(()=>zo(e));throw t}}function xI(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let n=0;n<e.length;n++)n>0&&(r+=","),r+=xI(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+zo(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function CS(e){return JW.test(e)?jW.parse(e):JSON.parse(e)}var vI,BI,jW,zW,HI,wS,JW,DS=be(()=>{vI=require("stream"),BI=x(require("json-bigint-fixes")),jW=(0,BI.default)({useNativeBigInt:!0}),zW=1e4,HI={};BigInt.prototype.toJSON=function(){throw HI};a(iu,"streamAsJSON");wS=class extends vI.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),MI)}catch(s){yield MI(s)}else yield zo(t)}else yield zo(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);UI(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>zW?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 UI(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(MI,"handleError");a(UI,"when");a(zo,"stringify");a(xI,"jsStringify");JW=/[[,:]\s*-?\d{16,}/;a(CS,"parse")});var XI=R((Cpe,JI)=>{"use strict";var LS=require("recursive-iterator"),XW=require("alasql"),PS=require("clone"),qI=Y(),{handleHDBError:FI,hdb_errors:ZW}=ie(),{HDB_ERROR_MSGS:kI,HTTP_STATUS_CODES:$I}=ZW,{getDatabases:eQ}=(Re(),ae(Ve)),tQ=["DISTINCT_ARRAY"],VI=Symbol("validateTables"),MS=Symbol("validateTable"),wpe=Symbol("getAllColumns"),YI=Symbol("validateAllColumns"),pf=Symbol("findColumn"),KI=Symbol("validateOrderBy"),ou=Symbol("validateSegment"),US=Symbol("validateColumn"),WI=Symbol("setColumnsForTable"),QI=Symbol("checkColumnsForAsterisk"),jI=Symbol("validateGroupBy"),zI=Symbol("hasColumns"),vS=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[VI](),this[QI](),this[YI]()}[VI](){if(this[zI]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[MS](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[MS](t.table)})}}[zI](){let t=!1,r=new LS(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[MS](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=eQ();if(!r[t.databaseid])throw FI(new Error,kI.SCHEMA_NOT_FOUND(t.databaseid),$I.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw FI(new Error,kI.TABLE_NOT_FOUND(t.databaseid,t.tableid),$I.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=PS(s);i.table=PS(t),this.attributes.push(i)})}[pf](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[QI](){let t=new LS(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[WI](r.tableid)}[WI](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new XW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[YI](){this[ou](this.statement.columns,!1),this[ou](this.statement.joins,!1),this[ou](this.statement.where,!1),this[jI](this.statement.group,!1),this[ou](this.statement.order,!0)}[ou](t,r){if(!t)return;let n=new LS(t),s=[];for(let{node:i,path:o}of n)!qI.isEmpty(i)&&!qI.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[KI](i):s.push(this[US](i)));return s}[jI](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&tQ.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=PS(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[pf](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[pf](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[KI](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[US](t)}[US](t){let r=this[pf](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};JI.exports=vS});var ew=R((Lpe,ZI)=>{"use strict";var BS=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")}};ZI.exports=BS});var rw=R((Mpe,tw)=>{"use strict";var HS=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};tw.exports=HS});var ow={};$e(ow,{HAS_EXPIRATION:()=>VS,LAST_TIMESTAMP_PLACEHOLDER:()=>lu,LOCAL_TIMESTAMP:()=>rQ,METADATA:()=>au,NO_TIMESTAMP:()=>GS,PENDING_LOCAL_TIME:()=>YS,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>$S,RecordEncoder:()=>kS,TIMESTAMP_ASSIGN_LAST:()=>sQ,TIMESTAMP_ASSIGN_NEW:()=>sw,TIMESTAMP_ASSIGN_PREVIOUS:()=>iw,TIMESTAMP_PLACEHOLDER:()=>mf,TIMESTAMP_RECORD_PREVIOUS:()=>qS,getUpdateRecord:()=>KS,handleLocalTimeForGets:()=>Rf});function oQ(){return cu[0]=cu[0]^64,nQ.getFloat64(0)}function Rf(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),l=c?.value,_=l?.[au];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,l.expiresAt>0&&(c.expiresAt=l.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[au]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let l=c.value,_=l[au];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,l.expiresAt>0&&(c.expiresAt=l.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Jo.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<Jo.length;l++){let _=Jo[l].deref();(!_||_.isDone||_.isCommitted)&&Jo.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function KS(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",E,f){if(E||l==null?_c=i?.localTime?qS|iw:GS:_c=l?i?.localTime?qS|16384:sw|16384:GS,u>0&&(c|=VS),Tf=c,FS=u,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:_c>0},m;try{E&&(h.ifVersion=m=i?.version??null);let S=e.put(n,s,h);if(l){let g=_?.user?.username;if(f&&(Sf=e.encoder.encode(f)),E&&i?.localTime){let T=i?.localTime,b=r.get(T);if(b){let N=Kt(b).previousLocalTime;return r.put(T,gf(o,t,n,N,g,d,Sf),{ifVersion:m}),S}}r.put(lu,gf(o,t,n,i?.localTime?1:0,g,d,Sf),{append:d!=="invalidate",instructedWrite:!0,ifVersion:m})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var nw,xS,mf,lu,$S,rQ,au,cu,nQ,GS,sw,sQ,iw,qS,VS,YS,iQ,Sf,_c,Tf,FS,kS,Jo,uu=be(()=>{nw=require("msgpackr");no();xS=x(k()),mf=new Uint8Array([1,1,1,1,4,64,0,0]),lu=new Uint8Array([1,1,1,1,1,0,0,0]),$S=new Uint8Array([1,1,1,1,3,64,0,0]),rQ=Symbol("local-timestamp"),au=Symbol("metadata"),cu=new Uint8Array(8),nQ=new DataView(cu.buffer,0,8),GS=0,sw=0,sQ=1,iw=3,qS=4,VS=16,YS=1,_c=0,Tf=-1,FS=0,kS=class extends nw.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(_c||Tf>=0){let i=0,o=_c;o&&(i+=8,_c=0);let c=Tf,l=FS;c>=0&&(i+=2,Tf=-1,l&&(i+=8,FS=0));let _=iQ=r.call(this,n,s|2048|i);Sf=_.subarray((_.start||0)+i,_.end);let u=_.start||0;return o&&(mf[4]=o,mf[5]=o>>8,_.set(mf,u),u+=8),c>=0&&(_[u++]=c,_[u++]=0,l&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(u,l)),_}else return r.call(this,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(cu,0,c),c+=8;else for(let d=0;d<8;d++)cu[d]=t[c++];l=oQ(),i=t[c]}let _;i<32&&(o=i,c+=2,o&VS&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let u=super.decode(t.subarray(c,s),s-c);return{localTime:l,value:u,[au]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(oQ,"getTimestamp");a(Rf,"handleLocalTimeForGets");Jo=[];setInterval(()=>{for(let e=0;e<Jo.length;e++){let t=Jo[e].deref();!t||t.isDone||t.isCommitted?Jo.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(xS.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):xS.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(KS,"getUpdateRecord")});var _u=R((xpe,cw)=>{"use strict";var aw=X(),aQ=L(),{RecordEncoder:cQ}=(uu(),ae(ow)),Hpe=require("fs");aw.initSync();var lQ=aw.get(aQ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,WS=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=lQ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:cQ})}};cw.exports=WS});var du=R((qpe,lw)=>{"use strict";var on=X(),Un=L();on.initSync();var Af=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=on.get(Un.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||on.get(Un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||on.get(Un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",on.get(Un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=on.get(Un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),on.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=on.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),on.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=on.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),on.get(Un.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=on.get(Un.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=on.get(Un.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};lw.exports=Af;Af.MAX_DBS=1e4});var Ye=R((kpe,Tw)=>{"use strict";var jS=require("lmdb"),rs=require("fs-extra"),an=require("path"),Of=wr(),dw=k(),Dr=nn().LMDB_ERRORS_ENUM,bf=rw(),zS=_u(),fw=du(),so=_t(),uw=L(),{table:uQ,resetDatabases:_Q}=(Re(),ae(Ve)),_w=X(),ns=so.INTERNAL_DBIS_NAME,Ew=so.DBI_DEFINITION_NAME,dQ="data.mdb",fQ="lock.mdb",fu=".mdb",EQ="-lock",QS=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=vn(t,r),this.key_type=this.dbi[so.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[so.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new jS.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Nf(e,t){if(e===void 0)throw new Error(Dr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Dr.ENV_NAME_REQUIRED)}a(Nf,"pathEnvNameValidation");async function JS(e,t,r=!0){try{await rs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Dr.INVALID_BASE_PATH):n}try{let n=an.join(e,t+fu);return await rs.access(n,rs.constants.R_OK|rs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await rs.access(an.join(e,t,dQ),rs.constants.R_OK|rs.constants.F_OK),an.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Dr.INVALID_ENVIRONMENT)}else throw new Error(Dr.INVALID_ENVIRONMENT);throw n}}a(JS,"validateEnvironmentPath");function yf(e,t){if(Of.validateEnv(e),t===void 0)throw new Error(Dr.DBI_NAME_REQUIRED)}a(yf,"validateEnvDBIName");async function hQ(e,t,r=!1,n=!1){Nf(e,t);let s=an.basename(e);t=t.toString();let i=_w.get(uw.CONFIG_PARAMS.DATABASES);i||_w.setProperty(uw.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await JS(e,t,n),hw(e,t,r)}catch(o){if(o.message===Dr.INVALID_ENVIRONMENT){let c=an.join(e,t);await rs.mkdirp(n?c:e);let l=new fw(n?c:c+fu,!1),_=jS.open(l);_.dbis=Object.create(null);let u=new zS(!1);_.openDB(ns,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=XS(e,t,r);return _[so.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(hQ,"createEnvironment");async function pQ(e,t,r,n=!0){Nf(e,t),t=t.toString();let s=an.join(e,t);return uQ({table:t,database:an.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(pQ,"copyEnvironment");async function hw(e,t,r=!1){Nf(e,t),t=t.toString();let n=XS(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await JS(e,t),i=an.join(e,t+fu),o=s!=i,c=new fw(s,o),l=jS.open(c);l.dbis=Object.create(null);let _=mw(l);for(let u=0;u<_.length;u++)vn(l,_[u]);return l[so.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(hw,"openEnvironment");async function mQ(e,t,r=!1){Nf(e,t),t=t.toString();let n=an.join(e,t+fu),s=await JS(e,t);if(global.lmdb_map!==void 0){let i=XS(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await pw(o),delete global.lmdb_map[i]}}await rs.remove(s),await rs.remove(s===n?s+EQ:an.join(an.dirname(s),fQ))}a(mQ,"deleteEnvironment");async function pw(e){Of.validateEnv(e);let t=e[so.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(pw,"closeEnvironment");function XS(e,t,r=!1){let s=`${an.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(XS,"getCachedEnvironmentName");function SQ(e){Of.validateEnv(e);let t=Object.create(null),r=vn(e,ns);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==ns)try{t[n]=Object.assign(new bf,s)}catch{dw.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(SQ,"listDBIDefinitions");function mw(e){Of.validateEnv(e);let t=[],r=vn(e,ns);for(let{key:n}of r.getRange({start:!1}))n!==ns&&t.push(n);return t}a(mw,"listDBIs");function TQ(e,t){let n=vn(e,ns).getEntry(t),s=new bf;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{dw.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(TQ,"getDBIDefinition");function Sw(e,t,r,n=!r){if(yf(e,t),t=t.toString(),t===ns)throw new Error(Dr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return vn(e,t)}catch(s){if(s.message===Dr.DBI_DOES_NOT_EXIST){let i=new zS(r,n===!0),o=e.openDB(t,i),c=new bf(r===!0,n);return o[Ew]=c,vn(e,ns).putSync(t,c),e.dbis[t]=o,o}throw s}}a(Sw,"createDBI");function vn(e,t){if(yf(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ns?r=TQ(e,t):r=new bf,r===void 0)throw new Error(Dr.DBI_DOES_NOT_EXIST);let n;try{let s=new zS(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(Dr.DBI_DOES_NOT_EXIST):s}return n[Ew]=r,e.dbis[t]=n,n}a(vn,"openDBI");function gQ(e,t){yf(e,t),t=t.toString();let r=vn(e,t),n=r.getStats();return r[so.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(gQ,"statDBI");async function RQ(e,t){try{let r=an.join(e,t+fu);return(await rs.stat(r)).size}catch{throw new Error(Dr.INVALID_ENVIRONMENT)}}a(RQ,"environmentDataSize");function AQ(e,t){if(yf(e,t),t=t.toString(),t===ns)throw new Error(Dr.CANNOT_DROP_INTERNAL_DBIS_NAME);vn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],vn(e,ns).removeSync(t)}a(AQ,"dropDBI");function OQ(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{vn(e,i)}catch(o){if(o.message===Dr.DBI_DOES_NOT_EXIST)Sw(e,i,i!==t,i===t),n=!0;else throw o}}n&&_Q()}a(OQ,"initializeDBIs");Tw.exports={openDBI:vn,openEnvironment:hw,createEnvironment:hQ,listDBIs:mw,listDBIDefinitions:SQ,createDBI:Sw,dropDBI:AQ,statDBI:gQ,deleteEnvironment:mQ,initializeDBIs:OQ,TransactionCursor:QS,environmentDataSize:RQ,copyEnvironment:pQ,closeEnvironment:pw}});var Rw=R((Vpe,gw)=>{"use strict";var ZS=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};gw.exports=ZS});var Ow=R((Kpe,Aw)=>{"use strict";var eT=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};Aw.exports=eT});var Nw=R((Qpe,bw)=>{"use strict";var tT=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};bw.exports=tT});var Zo=R((Zpe,ww)=>{"use strict";var bQ=Ye(),NQ=Rw(),yQ=Ow(),IQ=Nw(),Ds=wr(),Eu=nn().LMDB_ERRORS_ENUM,wQ=_t(),ui=L(),CQ=Y(),DQ=require("uuid"),zpe=require("lmdb"),{handleHDBError:LQ,hdb_errors:PQ}=ie(),{OVERFLOW_MARKER:Jpe,MAX_SEARCH_KEY_LENGTH:Xpe}=wQ,yw=X();yw.initSync();var If=yw.get(ui.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),rT=ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Xo=ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function MQ(e,t,r,n,s=Ds.getNextMonotonicTime()){oT(e,t,r,n),nT(e,t,r);let i=new NQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];Iw(_,!0,s);let u=UQ(e,t,r,_),d=_[t];o.push(u),c.push(d)}return sT(o,c,n,i,s)}a(MQ,"insertRecords");function UQ(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let u=c([[{}]]);Array.isArray(u)&&(c=u[0][ui.FUNC_VAL],n[o]=c)}let l=Ds.getIndexedValues(c),_=e.dbis[o];if(l){If&&_.prefetch(l.map(u=>({key:u,value:s})),wf);for(let u=0,d=l.length;u<d;u++)_.put(l[u],s)}}If&&e.dbis[t].prefetch([s],wf),e.dbis[t].put(s,n,n[Xo])})}a(UQ,"insertRecord");function vQ(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(vQ,"removeSkippedRecords");function Iw(e,t,r){let n=r>0;(n||!Number.isInteger(e[Xo]))&&(e[Xo]=r||(r=Ds.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[rT]))&&(e[rT]=r||Ds.getNextMonotonicTime()):delete e[rT]}a(Iw,"setTimestamps");function nT(e,t,r){r.indexOf(ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),bQ.initializeDBIs(e,t,r)}a(nT,"initializeTransaction");async function BQ(e,t,r,n,s=Ds.getNextMonotonicTime()){oT(e,t,r,n),nT(e,t,r);let i=new yQ,o=[],c=[],l=[];for(let _=0;_<n.length;_++){let u=n[_],d=u[t],E;try{E=iT(e,t,u,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(E),l.push(d)}return sT(c,l,n,i,s,o)}a(BQ,"updateRecords");async function HQ(e,t,r,n,s=Ds.getNextMonotonicTime()){try{oT(e,t,r,n)}catch(l){throw LQ(l,l.message,PQ.HTTP_STATUS_CODES.BAD_REQUEST)}nT(e,t,r);let i=new IQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l],u;CQ.isEmpty(_[t])?(u=DQ.v4(),_[t]=u):u=_[t];let d=iT(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return sT(o,c,n,i,s)}a(HQ,"upsertRecords");async function sT(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Ds.getNextMonotonicTime(),vQ(r,i),n}a(sT,"finalizeWrite");function iT(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),_=l?.value,u=_;if(!_){if(i)return!1;_={}}if(Iw(r,!u,o),Number.isInteger(r[Xo])&&_[Xo]>r[Xo])return!1;u&&s.original_records.push(_);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let m=r[h],S=e.dbis[h];if(S===void 0)continue;let g=_[h];if(typeof m=="function"){let b=m([[_]]);Array.isArray(b)&&(m=b[0][ui.FUNC_VAL],r[h]=m)}if(m===g)continue;let T=Ds.getIndexedValues(g);if(T){If&&S.prefetch(T.map(b=>({key:b,value:n})),wf);for(let b=0,N=T.length;b<N;b++)S.remove(T[b],n)}if(T=Ds.getIndexedValues(m),T){If&&S.prefetch(T.map(b=>({key:b,value:n})),wf);for(let b=0,N=T.length;b<N;b++)S.put(T[b],n)}}let f=Object.assign({},_,r);c.put(n,f,f[Xo])},"do_put");return l?d=c.ifVersion(n,l.version,E):d=c.ifNoExists(n,E),d.then(f=>f?!0:iT(e,t,r,n,s,i,o))}a(iT,"updateUpsertRecord");function xQ(e,t,r){if(Ds.validateEnv(e),t===void 0)throw new Error(Eu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Eu.WRITE_ATTRIBUTES_REQUIRED):new Error(Eu.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(xQ,"validateBasic");function oT(e,t,r,n){if(xQ(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Eu.RECORDS_REQUIRED):new Error(Eu.RECORDS_MUST_BE_ARRAY)}a(oT,"validateWrite");function wf(){}a(wf,"noop");ww.exports={insertRecords:MQ,updateRecords:BQ,upsertRecords:HQ}});var _i=R((tme,GQ)=>{GQ.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var Ps=R((rme,Lw)=>{"use strict";var Dw=Y(),Cw=L(),dc=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ls=require("joi"),io={schema_format:{pattern:dc,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},qQ=Ls.alternatives(Ls.string().min(1).max(io.schema_length.maximum).pattern(dc).messages({"string.pattern.base":"{:#label} "+io.schema_format.message}),Ls.number(),Ls.array()).required(),FQ=Ls.alternatives(Ls.string().min(1).max(io.schema_length.maximum).pattern(dc).messages({"string.pattern.base":"{:#label} "+io.schema_format.message}),Ls.number()),kQ=Ls.alternatives(Ls.string().min(1).max(io.schema_length.maximum).pattern(dc).messages({"string.pattern.base":"{:#label} "+io.schema_format.message}),Ls.number()).required();function $Q(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>io.schema_length.maximum?`'${e}' maximum of 250 characters`:dc.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a($Q,"checkValidTable");function VQ(e,t){return Dw.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(VQ,"validateSchemaExists");function YQ(e,t){let r=t.state.ancestors[0].schema;return Dw.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(YQ,"validateTableExists");function KQ(e,t){return e.toLowerCase()===Cw.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Cw.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(KQ,"validateSchemaName");Lw.exports={common_validators:io,schema_regex:dc,hdb_schema_table:qQ,validateSchemaExists:VQ,validateTableExists:YQ,validateSchemaName:KQ,checkValidTable:$Q,hdb_database:FQ,hdb_table:kQ}});var nt=R((sme,Pw)=>{"use strict";var Lr=require("validate.js");Lr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Lr.validators.type.checks[t](e)?null:` must be a '${t}' value`};Lr.validators.type.checks={Object:function(e){return Lr.isObject(e)&&!Lr.isArray(e)},Array:Lr.isArray,Integer:Lr.isInteger,Number:Lr.isNumber,String:Lr.isString,Date:Lr.isDate,Boolean:function(e){return typeof e=="boolean"}};Lr.validators.hasValidFileExt=function(e,t){return Lr.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};Pw.exports={validateObject:WQ,validateObjectAsync:QQ,validateBySchema:jQ};function WQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Lr(e,t,{format:"flat"});return r?new Error(r):null}a(WQ,"validateObject");async function QQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Lr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(QQ,"validateObjectAsync");function jQ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(jQ,"validateBySchema")});var Cf=R((ome,Mw)=>{var{common_validators:Ms}=Ps(),pu=nt(),hu="is required",yt={database:{presence:!1,format:Ms.schema_format,length:Ms.schema_length},schema:{presence:!1,format:Ms.schema_format,length:Ms.schema_length},table:{presence:!0,format:Ms.schema_format,length:Ms.schema_length},attribute:{presence:!0,format:Ms.schema_format,length:Ms.schema_length},hash_attribute:{presence:!0,format:Ms.schema_format,length:Ms.schema_length}};function mu(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(mu,"makeAttributesStrings");function zQ(e){return e=mu(e),yt.table.presence=!1,yt.attribute.presence=!1,yt.hash_attribute.presence=!1,pu.validateObject(e,yt)}a(zQ,"schema_object");function JQ(e){return e=mu(e),yt.table.presence={message:hu},yt.attribute.presence=!1,yt.hash_attribute.presence=!1,pu.validateObject(e,yt)}a(JQ,"table_object");function XQ(e){return e=mu(e),yt.table.presence={message:hu},yt.attribute.presence=!1,pu.validateObject(e,yt)}a(XQ,"create_table_object");function ZQ(e){return e=mu(e),yt.table.presence={message:hu},yt.attribute.presence={message:hu},yt.hash_attribute.presence=!1,pu.validateObject(e,yt)}a(ZQ,"attribute_object");function ej(e){return e=mu(e),yt.table.presence={message:hu},yt.attribute.presence=!1,yt.hash_attribute.presence=!1,pu.validateObject(e,yt)}a(ej,"describe_table");function tj(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(tj,"validateTableResidence");Mw.exports={schema_object:zQ,create_table_object:XQ,table_object:JQ,attribute_object:ZQ,describe_table:ej,validateTableResidence:tj}});var vw=R((cme,Uw)=>{"use strict";var rj=require("uuid"),aT=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||rj.v4(),this.schema_table=`${this.schema}.${this.table}`}};Uw.exports=aT});var Df=R((ume,Bw)=>{"use strict";var nj=vw(),cT=class extends nj{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};Bw.exports=cT});var xw=R((dme,Hw)=>{"use strict";Hw.exports=ij;var sj="inserted";function ij(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===sj?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(ij,"returnObject")});var Lf=R((Eme,$w)=>{"use strict";var oj=L(),lT=Ye(),aj=Zo(),{getSystemSchemaPath:cj,getSchemaPath:lj}=Je(),uj=_i(),_j=Cf(),dj=Df(),fj=xw(),{handleHDBError:Gw,hdb_errors:Fw}=ie(),qw=Y(),{HTTP_STATUS_CODES:Ej}=Fw,uT=uj.hdb_attribute,kw=[];for(let e=0;e<uT.attributes.length;e++)kw.push(uT.attributes[e].attribute);var hj="inserted";$w.exports=pj;async function pj(e){let t=_j.attribute_object(e);if(t)throw Gw(new Error,t.message,Fw.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&qw.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Gw(new Error,r,Ej.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=qw.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new dj(e.schema,e.table,e.attribute,e.id);try{let i=await lT.openEnvironment(lj(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}`);lT.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await lT.openEnvironment(cj(),oj.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await aj.insertRecords(o,uT.hash_attribute,kw,[s]);return fj(hj,c,{records:[s]},l)}catch(i){throw i}}a(pj,"lmdbCreateAttribute")});var dT=R((pme,Yw)=>{var{hdb_table:mj,hdb_database:Vw}=Ps(),Sj=nt(),_T=require("joi"),Tj={undefined:"undefined",null:"null"},gj=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||Tj[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),Rj=_T.object({database:Vw,schema:Vw,table:mj,records:_T.array().items(_T.object().custom(gj)).required()});Yw.exports=function(e){return Sj.validateBySchema(e,Rj)}});var Su=R((Tme,Ww)=>{"use strict";var di=Y(),Kw=k(),Sme=dT(),{getDatabases:Aj}=(Re(),ae(Ve)),{ClientError:ea}=ie();Ww.exports=Oj;function Oj(e){if(di.isEmpty(e))throw new ea("invalid update parameters defined.");if(di.isEmptyOrZeroLength(e.schema))throw new ea("invalid schema specified.");if(di.isEmptyOrZeroLength(e.table))throw new ea("invalid table specified.");if(!Array.isArray(e.records))throw new ea("records must be an array");let t=Aj()[e.schema]?.[e.table];if(di.isEmpty(t))throw new ea(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&di.isEmptyOrZeroLength(o[r]))throw Kw.error("a valid hash attribute must be provided with update record:",o),new ea("a valid hash attribute must be provided with update record, check log for more info");if(!di.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Kw.error(`a valid hash value must be provided with ${e.operation} record:`,o),new ea(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!di.isEmpty(o[r])&&o[r]!==""&&n.has(di.autoCast(o[r]))&&(o.skip=!0),n.add(di.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(Oj,"insertUpdateValidate")});var jw=R((Rme,Qw)=>{"use strict";var fT=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};Qw.exports=fT});var Xw=R((Ome,Jw)=>{"use strict";var ET=Ye(),bj=k(),zw=nn().LMDB_ERRORS_ENUM;Jw.exports=Nj;async function Nj(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 ET.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==zw.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await ET.closeEnvironment(global.lmdb_map[n]),await ET.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==zw.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){bj.error(t)}}a(Nj,"cleanLMDBMap")});var fi=R((Nme,rC)=>{"use strict";var Tu=require("crypto"),yj=X(),{CONFIG_PARAMS:Ij}=L(),eC="aes-256-cbc",wj=32,Cj=16,hT=64,tC=32,Dj=hT+tC,Zw=new Map;rC.exports={encrypt:Lj,decrypt:Pj,createNatsTableStreamName:Mj};function Lj(e){let t=Tu.randomBytes(wj),r=Tu.randomBytes(Cj),n=Tu.createCipheriv(eC,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(Lj,"encrypt");function Pj(e){let t=e.substr(0,hT),r=e.substr(hT,tC),n=e.substr(Dj,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Tu.createDecipheriv(eC,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Pj,"decrypt");function Mj(e,t){let r=yj.get(Ij.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=Zw.get(r);return n||(n=Tu.createHash("md5").update(r).digest("hex"),Zw.set(r,n)),n}a(Mj,"createNatsTableStreamName")});var Ei=R((wme,sC)=>{"use strict";var Ime=ur(),gu=k(),nC=Cf(),Uj=fi(),Pf=Y(),{handleHDBError:Mf,hdb_errors:vj}=ie(),{HDB_ERROR_MSGS:Uf,HTTP_STATUS_CODES:pT}=vj,Bj=X();Bj.initSync();var{getDatabases:mT}=(Re(),ae(Ve)),Hj=require("fs-extra");sC.exports={describeAll:xj,describeTable:vf,describeSchema:Gj};async function xj(e={}){try{let t=Pf.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=mT(),o={},c={},l=[],_=e?.exact_count;for(let d in i){o[d]=!0,!t&&!s&&!r&&(c[d]=e.hdb_user?.role?.permission[d]?.describe);let E=i[d];for(let f in E)try{let h;if(t||s||r)h=await vf({schema:d,table:f,exact_count:_});else if(n&&n[d].describe&&n[d].tables[f].describe){let m=n[d].tables[f].attribute_permissions;h=await vf({schema:d,table:f,exact_count:_},m)}h&&l.push(h)}catch(h){gu.error(h)}}let u={};for(let d in l)t||s||r?(u[l[d].schema]==null&&(u[l[d].schema]={}),u[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(u[l[d].schema]==null&&(u[l[d].schema]={}),u[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s||r?u[d]={}:c[d]&&(u[d]={});return u}catch(t){return gu.error("Got an error in describeAll"),gu.error(t),Mf(new Error,Uf.DESCRIBE_ALL_ERR)}}a(xj,"describeAll");async function vf(e,t){Pf.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(s=e.hdb_user?.role?.permission[r]?.tables[n]?.attribute_permissions);let i=nC.describe_table(e);if(i)throw i;let c=mT()[r];if(!c)throw Mf(new Error,Uf.SCHEMA_NOT_FOUND(e.schema),pT.NOT_FOUND);let l=c[n];if(!l)throw Mf(new Error,Uf.TABLE_NOT_FOUND(e.schema,e.table),pT.NOT_FOUND);function _(f){u.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(h=>({type:h.type,name:h.name})):void 0}))}a(_,"pushAtt");let u=[];if(s){let f={};s.forEach(h=>{h.describe&&(f[h.attribute_name]=!0)}),l.attributes.forEach(h=>{f[h.name]&&_(h)})}else l.attributes?.forEach(f=>_(f));let d;try{d=(await Hj.stat(l.primaryStore.env.path)).size}catch(f){gu.warn("unable to get database size",f)}let E={schema:r,name:l.tableName,hash_attribute:l.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:u,db_size:d};E.clustering_stream_name=Uj.createNatsTableStreamName(E.schema,E.name);try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});E.record_count=f.recordCount,E.estimated_record_range=f.estimatedRange;let h=l.auditStore;if(h)for(let m of h.getKeys({reverse:!0,limit:1}))E.last_updated_record=m[0];if(!E.last_updated_record&&l.indices.__updatedtime__)for(let m of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))E.last_updated_record=m}catch(f){gu.warn(`unable to stat table dbi due to ${f}`)}return E}a(vf,"descTable");async function Gj(e){Pf.transformReq(e);let t=nC.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=mT()[n];if(!i)throw Mf(new Error,Uf.SCHEMA_NOT_FOUND(e.schema),pT.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Pf.isEmpty(l)||l.describe){let _=await vf({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(Gj,"describeSchema")});var Bn=R((Pme,lC)=>{var qj=_i(),{callbackify:oC,promisify:Fj}=require("util"),{getDatabases:aC}=(Re(),ae(Ve));lC.exports={setSchemaDataToGlobal:iC,getTableSchema:kj,getSystemSchema:$j,setSchemaDataToGlobalAsync:Fj(iC)};var cC=Ei(),Dme=oC(cC.describeAll),Lme=oC(cC.describeTable);function iC(e){global.hdb_schema=aC(),e&&e()}a(iC,"setSchemaDataToGlobal");function kj(e,t,r){let n=aC()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(kj,"getTableSchema");function $j(){return qj}a($j,"getSystemSchema")});var Pr=R((Ume,fC)=>{"use strict";var Hf=dT(),rr=Y(),Vj=require("util"),xf=Hn(),Yj=Bn(),uC=k(),{handleHDBError:ta,hdb_errors:Kj}=ie(),{HTTP_STATUS_CODES:ra}=Kj,Wj=Vj.promisify(Yj.getTableSchema),Qj="updated",_C="inserted",dC="upserted";fC.exports={insert:zj,update:Jj,upsert:Xj,validation:jj,flush:Zj};async function jj(e){if(rr.isEmpty(e))throw new Error("invalid update parameters defined.");if(rr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(rr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Wj(e.schema,e.table),r=Hf(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&rr.isEmptyOrZeroLength(c[n]))throw uC.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(!rr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw uC.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!rr.isEmpty(c[n])&&c[n]!==""&&s.has(rr.autoCast(c[n]))&&(c.skip=!0),s.add(rr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(jj,"validation");async function zj(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Hf(e);if(t)throw ta(new Error,t.message,ra.BAD_REQUEST);rr.transformReq(e);let r=rr.checkSchemaTableExist(e.schema,e.table);if(r)throw ta(new Error,r,ra.BAD_REQUEST);let n=await xf.createRecords(e);return Bf(_C,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(zj,"insertData");async function Jj(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Hf(e);if(t)throw ta(new Error,t.message,ra.BAD_REQUEST);rr.transformReq(e);let r=rr.checkSchemaTableExist(e.schema,e.table);if(r)throw ta(new Error,r,ra.BAD_REQUEST);let n=await xf.updateRecords(e);return rr.isEmpty(n.existing_rows)?Bf(Qj,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Bf(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Jj,"updateData");async function Xj(e){if(e.operation!=="upsert")throw ta(new Error,"invalid operation, must be upsert",ra.INTERNAL_SERVER_ERROR);let t=Hf(e);if(t)throw ta(new Error,t.message,ra.BAD_REQUEST);rr.transformReq(e);let r=rr.checkSchemaTableExist(e.schema,e.table);if(r)throw ta(new Error,r,ra.BAD_REQUEST);let n=await xf.upsertRecords(e);return Bf(dC,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(Xj,"upsertData");function Bf(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===_C?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===dC?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Bf,"returnObject");function Zj(e){return rr.transformReq(e),xf.flush(e.schema,e.table)}a(Zj,"flush")});var TT=R((Bme,pC)=>{var ez=nt(),ST=require("joi"),{hdb_table:tz,hdb_database:EC}=Ps(),hC={schema:EC,database:EC,table:tz},rz={date:ST.date().iso().required()},nz={timestamp:ST.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};pC.exports=function(e,t){let r=t==="timestamp"?{...hC,...nz}:{...hC,...rz},n=ST.object(r);return ez.validateBySchema(e,n)}});var TC=R((Hme,SC)=>{var sz=nt(),gT=require("joi"),{hdb_table:iz,hdb_database:mC}=Ps(),oz=gT.object({schema:mC,database:mC,table:iz,hash_values:gT.array().required(),ids:gT.array()});SC.exports=function(e){return sz.validateBySchema(e,oz)}});var bT=R((xme,gC)=>{"use strict";var RT=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},AT=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},OT=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};gC.exports={InsertObject:RT,NoSQLSeachObject:AT,DeleteResponseObject:OT}});var ia=R((qme,NC)=>{"use strict";var AC=TT(),az=TC(),na=Y(),RC=require("moment"),OC=k(),{promisify:cz,callbackify:lz}=require("util"),sa=L(),uz=Bn(),NT=cz(uz.getTableSchema),yT=Hn(),{DeleteResponseObject:_z}=bT(),{handleHDBError:oo,hdb_errors:dz}=ie(),{HDB_ERROR_MSGS:Gf,HTTP_STATUS_CODES:ao}=dz,fz="records successfully deleted",Ez=lz(bC);NC.exports={delete:Ez,deleteRecord:bC,deleteFilesBefore:hz,deleteAuditLogsBefore:pz};async function hz(e){let t=AC(e,"date");if(t)throw oo(t,t.message,ao.BAD_REQUEST,void 0,void 0,!0);if(na.transformReq(e),!RC(e.date,RC.ISO_8601).isValid())throw oo(new Error,Gf.INVALID_DATE,ao.BAD_REQUEST,sa.LOG_LEVELS.ERROR,Gf.INVALID_DATE,!0);let n=na.checkSchemaTableExist(e.schema,e.table);if(n)throw oo(new Error,n,ao.NOT_FOUND,sa.LOG_LEVELS.ERROR,n,!0);let s=await yT.deleteRecordsBefore(e);if(await NT(e.schema,e.table),OC.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(hz,"deleteFilesBefore");async function pz(e){let t=AC(e,"timestamp");if(t)throw oo(t,t.message,ao.BAD_REQUEST,void 0,void 0,!0);if(na.transformReq(e),isNaN(e.timestamp))throw oo(new Error,Gf.INVALID_VALUE("Timestamp"),ao.BAD_REQUEST,sa.LOG_LEVELS.ERROR,Gf.INVALID_VALUE("Timestamp"),!0);let r=na.checkSchemaTableExist(e.schema,e.table);if(r)throw oo(new Error,r,ao.NOT_FOUND,sa.LOG_LEVELS.ERROR,r,!0);let n=await yT.deleteAuditLogsBefore(e);return await NT(e.schema,e.table),OC.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(pz,"deleteAuditLogsBefore");async function bC(e){e.ids&&(e.hash_values=e.ids);let t=az(e);if(t)throw oo(t,t.message,ao.BAD_REQUEST,void 0,void 0,!0);na.transformReq(e);let r=na.checkSchemaTableExist(e.schema,e.table);if(r)throw oo(new Error,r,ao.NOT_FOUND,sa.LOG_LEVELS.ERROR,r,!0);try{await NT(e.schema,e.table);let n=await yT.deleteRecords(e);return na.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${fz}`),n}catch(n){if(n.message===sa.SEARCH_NOT_FOUND_MESSAGE){let s=new _z;return s.message=sa.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(bC,"deleteRecord")});var qf=R((kme,wC)=>{var mz=require("crypto"),yC=9;function Sz(e){let t=gz(yC),r=IC(e+t);return t+r}a(Sz,"createHash");function Tz(e,t){let r=e?.substr(0,yC),n=r+IC(t+r);return e===n}a(Tz,"validateHash");function gz(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(gz,"generateSalt");function IC(e){return mz.createHash("md5").update(e).digest("hex")}a(IC,"md5");wC.exports={hash:Sz,validate:Tz}});var DC=R((Vme,CC)=>{var IT=nt(),_r={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function Rz(e){return _r.password.presence=!0,_r.username.presence=!0,_r.role.presence=!0,_r.active.presence=!0,IT.validateObject(e,_r)}a(Rz,"addUserValidation");function Az(e){return _r.password.presence=!1,_r.username.presence=!0,_r.role.presence=!1,_r.active.presence=!1,IT.validateObject(e,_r)}a(Az,"alterUserValidation");function Oz(e){return _r.password.presence=!1,_r.username.presence=!0,_r.role.presence=!1,_r.active.presence=!1,IT.validateObject(e,_r)}a(Oz,"dropUserValidation");CC.exports={addUserValidation:Rz,alterUserValidation:Az,dropUserValidation:Oz}});var Ze=R((Wme,PC)=>{"use strict";var{platform:Kme}=require("os"),bz="nats-server.zip",wT="nats-server",Nz=process.platform==="win32"?`${wT}.exe`:wT,yz=/^[^\s.,*>]+$/,LC="__request__",Iz=a(e=>`${e}.${LC}`,"REQUEST_SUBJECT"),wz={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Cz={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Dz={HUB:"hub.pid",LEAF:"leaf.pid"},Lz={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Pz={SUCCESS:"success",ERROR:"error"},Mz={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Uz={TXN:"txn",MSGID:"msgid"},fc={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},vz={[fc.ERR]:1,[fc.WRN]:2,[fc.INF]:3,[fc.DBG]:4,[fc.TRC]:5},Bz={debug:"-D",trace:"-DVV"};PC.exports={NATS_SERVER_ZIP:bz,NATS_SERVER_NAME:wT,NATS_BINARY_NAME:Nz,PID_FILES:Dz,NATS_CONFIG_FILES:Cz,SERVER_SUFFIX:Lz,NATS_TERM_CONSTRAINTS_RX:yz,REQUEST_SUFFIX:LC,UPDATE_REMOTE_RESPONSE_STATUSES:Pz,CLUSTER_STATUS_STATUSES:Mz,REQUEST_SUBJECT:Iz,SUBJECT_PREFIXES:Uz,MSG_HEADERS:wz,LOG_LEVELS:fc,LOG_LEVEL_FLAGS:Bz,LOG_LEVEL_HIERARCHY:vz}});var CT=R((jme,MC)=>{"use strict";var Hz={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
6
+ `}a(li,"createLogRecord");function Ql(e){ai&&Vy(e),Cs&&process.stdout.write(e)}a(Ql,"logStdOut");function of(e){ai&&Vy(e),Cs&&process.stderr.write(e)}a(of,"logStdErr");function Vy(e){qK(),lc?Qo.appendFileSync(lc,e):Yl.log(e)}a(Vy,"logToFile");function uS(){try{Qo.closeSync(lc)}catch{}lc=null}a(uS,"closeLogFile");function qK(){if(!lc){try{if(!Kl)debugger;lc=Qo.openSync(Kl,"a")}catch(e){Yl.error(e)}setTimeout(()=>{uS()},BK).unref()}}a(qK,"openLogFile");function sf(...e){yr[Nr]<=yr.info&&Ql(li("info",e))}a(sf,"info");function _S(...e){yr[Nr]<=yr.trace&&Ql(li("trace",e))}a(_S,"trace");function Wl(...e){yr[Nr]<=yr.error&&of(li("error",e))}a(Wl,"error");function dS(...e){yr[Nr]<=yr.debug&&Ql(li("debug",e))}a(dS,"debug");function Yy(...e){yr[Nr]<=yr.notify&&Ql(li("notify",e))}a(Yy,"notify");function Ky(...e){yr[Nr]<=yr.fatal&&of(li("fatal",e))}a(Ky,"fatal");function fS(...e){yr[Nr]<=yr.warn&&of(li("warn",e))}a(fS,"warn");function FK(e,t,...r){t===Fy.STDERR?of(li(e,r)):Ql(li(e,r))}a(FK,"logCustomLevel");function kK(){let e;try{e=PK.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ci.join(e,Nt.HDB_HOME_DIR_NAME,Nt.BOOT_PROPS_FILE_NAME);return Qo.existsSync(t)||(t=ci.join(lS,"utility/hdb_boot_properties.file")),t}a(kK,"getPropsFilePath");function $K(e){Nr=e}a($K,"setLogLevel");function xy(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(xy,"autoCastBoolean");function VK(e){try{if(e.includes("config/settings.js")){let o=qy(e);return{level:o.get(Nt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ci.dirname(o.get(Nt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Nt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Nt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Gy.parseDocument(Qo.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===Nt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(VK,"getLogConfig");function YK(){try{let e=Gy.parseDocument(Qo.readFileSync(vK,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(YK,"getDefaultConfig");function KK(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}a(KK,"AuthAuditLog")});var hS=R((Jhe,Wy)=>{"use strict";var WK=require("util"),QK=require("path"),jK=require("child_process"),zK=WK.promisify(jK.execFile),JK=1e3*1e3*10;Wy.exports={findPs:XK};async function XK(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await zK("ps",["wwxo",`pid,${r}`],{maxBuffer:JK});for(let s of n.trim().split(`
7
+ `).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:QK.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(XK,"findPs")});var _t=R((Zhe,jy)=>{"use strict";var ZK="__dbis__",eW="__txns__",tW="__environment_name__",rW="__dbi_defintion__",nW={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"},sW=["__createdtime__","__updatedtime__"],iW="\uFFFF",Qy={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},oW=Object.values(Qy);jy.exports={AUDIT_STORE_NAME:eW,INTERNAL_DBIS_NAME:ZK,DBI_DEFINITION_NAME:rW,SEARCH_TYPES:nW,TIMESTAMP_NAMES:sW,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:tW,TRANSACTIONS_DBI_NAMES_ENUM:Qy,TRANSACTIONS_DBIS:oW,OVERFLOW_MARKER:iW}});var nn=R((epe,sI)=>{"use strict";var zy=L(),Jy=_t(),Xy={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},Zy=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),eI={500:Zy("There was an error processing your request."),400:"Invalid request"},aW=eI[Xy.INTERNAL_SERVER_ERROR],cW={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.`},lW={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},uW={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"},_W={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 ${Jy.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Jy.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"},dW={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${zy.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 ${zy.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"},tI={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"},fW={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."},EW={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`},hW={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"},pW={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},mW={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`},rI={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.`},nI={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}`},SW={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."},TW={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},gW={...tI,...uW,...cW,...fW,...EW,...hW,...pW,...mW,...dW,...rI,...nI,...SW,...TW,...lW};sI.exports={CHECK_LOGS_WRAPPER:Zy,HDB_ERROR_MSGS:gW,DEFAULT_ERROR_MSGS:eI,DEFAULT_ERROR_RESP:aW,HTTP_STATUS_CODES:Xy,LMDB_ERRORS_ENUM:_W,AUTHENTICATION_ERROR_MSGS:tI,VALIDATION_ERROR_MSGS:rI,ITC_ERRORS:nI}});var ie=R((rpe,aI)=>{"use strict";var uc=nn(),RW=k(),AW=L(),af=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,iI),this.statusCode=n||uc.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(uc.DEFAULT_ERROR_MSGS[n]?uc.DEFAULT_ERROR_MSGS[n]:uc.DEFAULT_ERROR_MSGS[uc.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&RW[s](i)}},pS=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}},mS=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function iI(e,t,r,n=AW.LOG_LEVELS.ERROR,s=null,i=!1){if(oI(e))return e;let o=new af(e,t,r,n,s);return i&&delete o.stack,o}a(iI,"handleHDBError");function oI(e){return e.__proto__.constructor.name===af.name}a(oI,"isHDBError");aI.exports={isHDBError:oI,handleHDBError:iI,ClientError:pS,ServerError:mS,hdb_errors:uc}});var Je=R((spe,EI)=>{"use strict";var Zl=L(),OW=Y(),Ir=X(),eu=require("path"),bW=require("minimist"),cI=require("fs-extra"),lI=require("lodash");Ir.initSync();var{CONFIG_PARAMS:ro,DATABASES_PARAM_CONFIG:jl,SYSTEM_SCHEMA_NAME:cf}=Zl,zl,Jl,Xl;function uI(){if(zl!==void 0)return zl;if(Ir.getHdbBasePath()!==void 0)return zl=Ir.get(ro.STORAGE_PATH)||eu.join(Ir.getHdbBasePath(),Zl.DATABASES_DIR_NAME),zl}a(uI,"getBaseSchemaPath");function _I(){if(Jl!==void 0)return Jl;if(Ir.getHdbBasePath()!==void 0)return Jl=fI(cf),Jl}a(_I,"getSystemSchemaPath");function dI(){if(Xl!==void 0)return Xl;if(Ir.getHdbBasePath()!==void 0)return Xl=Ir.get(Zl.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||eu.join(Ir.getHdbBasePath(),Zl.TRANSACTIONS_DIR_NAME),Xl}a(dI,"getTransactionAuditStoreBasePath");function NW(e,t){let r=Ir.get(ro.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||eu.join(dI(),e.toString())}a(NW,"getTransactionAuditStorePath");function fI(e,t){e=e.toString(),t=t&&t.toString();let r=Ir.get(Zl.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||eu.join(uI(),e)}a(fI,"getSchemaPath");function yW(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,bW(process.argv));let n=r[ro.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!OW.isObject(n))throw o;i=n}for(let o of i){let c=o[cf];if(!c)continue;let l=Ir.get(ro.DATABASES);l=l??{};let _=c?.tables?.[t]?.[jl.PATH];if(_)return lI.set(l,[cf,jl.TABLES,t,jl.PATH],_),Ir.setProperty(ro.DATABASES,l),_;let u=c?.[jl.PATH];if(u)return lI.set(l,[cf,jl.PATH],u),Ir.setProperty(ro.DATABASES,l),u}}let s=r[ro.STORAGE_PATH.toUpperCase()];if(s){if(!cI.pathExistsSync(s))throw new Error(s+" does not exist");let i=eu.join(s,e);return cI.mkdirsSync(i),Ir.setProperty(ro.STORAGE_PATH,s),i}return _I()}a(yW,"initSystemSchemaPaths");function IW(){zl=void 0,Jl=void 0,Xl=void 0}a(IW,"resetPaths");EI.exports={getBaseSchemaPath:uI,getSystemSchemaPath:_I,getTransactionAuditStorePath:NW,getTransactionAuditStoreBasePath:dI,getSchemaPath:fI,initSystemSchemaPaths:yW,resetPaths:IW}});var wr=R((cpe,TI)=>{"use strict";var wW=nn().LMDB_ERRORS_ENUM,ope=require("lmdb"),CW=_t(),ape=require("buffer").Buffer,{OVERFLOW_MARKER:hI,MAX_SEARCH_KEY_LENGTH:lf}=CW,pI=["number","string","symbol","boolean","bigint"];function DW(e){if(e=e?.primaryStore||e,!e)throw new Error(wW.ENV_REQUIRED)}a(DW,"validateEnv");function LW(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(LW,"stringifyData");function PW(e){return e instanceof Date?e.valueOf():e}a(PW,"convertKeyValueToWrite");function MW(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(pI.includes(typeof e))return e.length>lf?[e.slice(0,lf)+hI]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(pI.includes(typeof i))i.length>lf?r.push(i.slice(0,lf)+hI):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(MW,"getIndexedValues");var uf=0,mI=0;function SI(){mI=Date.now()-performance.now()}a(SI,"adjustStartTime");SI();var UW=6e4;setInterval(SI,UW).unref();function vW(){let e=performance.now()+mI;return e>uf?(uf=e,e):(uf+=488e-6,uf)}a(vW,"getNextMonotonicTime");TI.exports={validateEnv:DW,stringifyData:LW,convertKeyValueToWrite:PW,getNextMonotonicTime:vW,getIndexedValues:MW}});var tu=R((upe,gI)=>{"use strict";var BW=L().OPERATIONS_ENUM,SS=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=BW.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};gI.exports=SS});var ru=R((fpe,bI)=>{"use strict";var dpe=tu(),_f=L(),TS=Y(),RI=k(),HW=require("uuid"),{handleHDBError:df,hdb_errors:xW}=ie(),{HDB_ERROR_MSGS:ff,HTTP_STATUS_CODES:Ef}=xW;bI.exports=AI;function AI(e,t,r){for(let s=0;s<t.length;s++)OI(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];GW(i,r,e.operation)}}a(AI,"processRows");AI.validateAttribute=OI;function OI(e){if(Buffer.byteLength(String(e))>_f.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw df(new Error,ff.ATTR_NAME_LENGTH_ERR(e),Ef.BAD_REQUEST,void 0,void 0,!0);if(TS.isEmptyOrZeroLength(e)||TS.isEmpty(e.trim()))throw df(new Error,ff.ATTR_NAME_NULLISH_ERR,Ef.BAD_REQUEST,void 0,void 0,!0)}a(OI,"validateAttribute");function GW(e,t,r){if(!e.hasOwnProperty(t)||TS.isEmptyOrZeroLength(e[t])){if(r===_f.OPERATIONS_ENUM.INSERT||r===_f.OPERATIONS_ENUM.UPSERT){e[t]=HW.v4();return}throw RI.error("Update transaction aborted due to record with no hash value:",e),df(new Error,ff.RECORD_MISSING_HASH_ERR,Ef.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>_f.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw RI.error(e),df(new Error,ff.HASH_VAL_LENGTH_ERR,Ef.BAD_REQUEST,void 0,void 0,!0)}a(GW,"validateHash")});var NI,ts,gS,nu=be(()=>{NI=require("events"),ts=class extends NI.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new gS;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(){let t=this.queue?.shift();return t||this.emit("drained"),t}waitForDrain(){return new Promise(t=>{!this.queue||this.queue.length===0?t(!0):(this.once("drained",()=>t(!0)),this.currentDrainResolver=t,this.drainCloseListener||(this.drainCloseListener=!0,this.on("close",()=>{this.currentDrainResolver?.(!1)})))})}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)}},gS=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 jo={};$e(jo,{server:()=>dt});var yI,dt,Cr=be(()=>{yI=require("../index"),dt={};(0,yI._assignPackageExport)("server",dt)});var OS={};$e(OS,{loadGQLSchema:()=>kW,start:()=>AS,startOnMainThread:()=>FW});function AS({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:_,StringValueNode:u}=await import("graphql"),d=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let S of d.definitions)switch(S.kind){case l.OBJECT_TYPE_DEFINITION:let U=function(v){if(v.kind==="NonNullType"){let W=U(v.type);return W.nullable=!1,W}if(v.kind==="ListType")return{type:"array",elements:U(v.type)};let M={type:v.name?.value};return Object.defineProperty(M,"location",{value:v.loc.startToken}),M};a(U,"getProperty");let g=S.name.value,T=[],b={table:null,database:null,properties:T};E.set(g,b);for(let v of S.directives){if(v.name.value==="table"){for(let F of v.arguments)b[F.name.value]=F.value.value;b.schema&&(b.database=b.schema),b.table||(b.table=g),b.audit&&(b.audit=b.audit!=="false"),b.attributes=b.properties,f.push(b)}if(v.name.value==="sealed"&&(b.sealed=!0),v.name.value==="export"){b.export=!0;for(let F of v.arguments)F.name.value==="name"&&(b.export={name:F.value.value})}}let N=!1;for(let v of S.fields){let F=U(v.type);F.name=v.name.value,T.push(F);for(let M of v.directives)if(M.name.value==="primaryKey")N?console.warn("Can not define two attributes as a primary key"):(F.isPrimaryKey=!0,N=!0);else if(M.name.value==="indexed")F.indexed=!0;else if(M.name.value==="relationship"){let W={};for(let z of M.arguments)W[z.name.value]=z.value.value;F.relationship=W}else if(M.name.value==="createdTime")F.assignCreatedTime=!0;else if(M.name.value==="updatedTime")F.assignUpdatedTime=!0;else if(M.name.value==="expiresAt")F.expiresAt=!0;else if(M.name.value==="allow"){let W=F.authorizedRoles=[];for(let z of M.arguments)z.name.value==="role"&&W.push(z.value.value)}}b.type=g,g==="Query"&&(h=b)}function m(S){let g=E.get(S.type);g?(Object.defineProperty(S,"properties",{value:g.properties}),Object.defineProperty(S,"definition",{value:g})):S.type==="array"?m(S.elements):qW.includes(S.type)||(0,II.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(m,"connectPropertyType");for(let S of E.values())for(let g of S.properties)m(g);for(let S of f)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,RS.dirname)(n),S.tableClass):i.set((0,RS.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var RS,II,qW,FW,kW,wI=be(()=>{RS=require("path");Re();II=x(rt()),qW=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(AS,"start");FW=AS,kW=AS({ensureTable:St}).handleFile});async function hf(e){let t=(0,LI.pathToFileURL)(e).toString();return $W?(su||(su=VW(KW)),(await(await su).import(t)).namespace):import(t)}async function VW(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),su=new Compartment({console,Math,Date,fetch:YW,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,DI.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:tr,tables:sn,databases:ft})}};let n=await(0,CI.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),su}function YW(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 KW(){return{Resource:tr,tables:sn}}var CI,DI,LI,$W,su,bS=be(()=>{Mn();Re();CI=require("fs/promises"),DI=require("path"),LI=require("url"),$W=!1;a(hf,"secureImport");a(VW,"getCompartment");a(YW,"secureOnlyFetch");a(KW,"getGlobalVars")});var yS={};$e(yS,{handleFile:()=>WW});async function WW(e,t,r,n){let s=new Map,i=await hf(r);c(i.default)&&n.set((0,NS.dirname)(t),i.default),o(i,(0,NS.dirname)(t));function o(l,_){for(let u in l){let d=l[u];c(d)?n.set(_+"/"+u,d):typeof d=="object"&&o(d,_+"/"+u)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var NS,PI=be(()=>{bS();NS=require("path");a(WW,"handleFile")});var wS={};$e(wS,{start:()=>QW});function QW({resources:e}){e.set("login",IS),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var IS,MI=be(()=>{Mn();a(QW,"start");IS=class extends tr{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var qI={};$e(qI,{parse:()=>DS,streamAsJSON:()=>iu,stringify:()=>zo});function iu(e){return new CS({value:e})}function UI(e){return console.error(e),JSON.stringify(e.toString())}function vI(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function zo(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===xI)return GI(e);if(t.resolution)return t.resolution.then(()=>zo(e));throw t}}function GI(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let n=0;n<e.length;n++)n>0&&(r+=","),r+=GI(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+zo(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function DS(e){return JW.test(e)?jW.parse(e):JSON.parse(e)}var BI,HI,jW,zW,xI,CS,JW,LS=be(()=>{BI=require("stream"),HI=x(require("json-bigint-fixes")),jW=(0,HI.default)({useNativeBigInt:!0}),zW=1e4,xI={};BigInt.prototype.toJSON=function(){throw xI};a(iu,"streamAsJSON");CS=class extends BI.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),UI)}catch(s){yield UI(s)}else yield zo(t)}else yield zo(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);vI(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>zW?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 vI(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(UI,"handleError");a(vI,"when");a(zo,"stringify");a(GI,"jsStringify");JW=/[[,:]\s*-?\d{16,}/;a(DS,"parse")});var ZI=R((Cpe,XI)=>{"use strict";var PS=require("recursive-iterator"),XW=require("alasql"),MS=require("clone"),FI=Y(),{handleHDBError:kI,hdb_errors:ZW}=ie(),{HDB_ERROR_MSGS:$I,HTTP_STATUS_CODES:VI}=ZW,{getDatabases:eQ}=(Re(),ae(Ve)),tQ=["DISTINCT_ARRAY"],YI=Symbol("validateTables"),US=Symbol("validateTable"),wpe=Symbol("getAllColumns"),KI=Symbol("validateAllColumns"),pf=Symbol("findColumn"),WI=Symbol("validateOrderBy"),ou=Symbol("validateSegment"),vS=Symbol("validateColumn"),QI=Symbol("setColumnsForTable"),jI=Symbol("checkColumnsForAsterisk"),zI=Symbol("validateGroupBy"),JI=Symbol("hasColumns"),BS=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[YI](),this[jI](),this[KI]()}[YI](){if(this[JI]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[US](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[US](t.table)})}}[JI](){let t=!1,r=new PS(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[US](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=eQ();if(!r[t.databaseid])throw kI(new Error,$I.SCHEMA_NOT_FOUND(t.databaseid),VI.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw kI(new Error,$I.TABLE_NOT_FOUND(t.databaseid,t.tableid),VI.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=MS(s);i.table=MS(t),this.attributes.push(i)})}[pf](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)}[jI](){let t=new PS(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[QI](r.tableid)}[QI](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new XW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[KI](){this[ou](this.statement.columns,!1),this[ou](this.statement.joins,!1),this[ou](this.statement.where,!1),this[zI](this.statement.group,!1),this[ou](this.statement.order,!0)}[ou](t,r){if(!t)return;let n=new PS(t),s=[];for(let{node:i,path:o}of n)!FI.isEmpty(i)&&!FI.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[WI](i):s.push(this[vS](i)));return s}[zI](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&tQ.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=MS(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[pf](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[pf](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[WI](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[vS](t)}[vS](t){let r=this[pf](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};XI.exports=BS});var tw=R((Lpe,ew)=>{"use strict";var HS=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")}};ew.exports=HS});var nw=R((Mpe,rw)=>{"use strict";var xS=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};rw.exports=xS});var aw={};$e(aw,{HAS_EXPIRATION:()=>YS,LAST_TIMESTAMP_PLACEHOLDER:()=>lu,LOCAL_TIMESTAMP:()=>rQ,METADATA:()=>au,NO_TIMESTAMP:()=>qS,PENDING_LOCAL_TIME:()=>KS,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>VS,RecordEncoder:()=>$S,TIMESTAMP_ASSIGN_LAST:()=>sQ,TIMESTAMP_ASSIGN_NEW:()=>iw,TIMESTAMP_ASSIGN_PREVIOUS:()=>ow,TIMESTAMP_PLACEHOLDER:()=>mf,TIMESTAMP_RECORD_PREVIOUS:()=>FS,getUpdateRecord:()=>WS,handleLocalTimeForGets:()=>Rf});function oQ(){return cu[0]=cu[0]^64,nQ.getFloat64(0)}function Rf(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),l=c?.value,_=l?.[au];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,l.expiresAt>0&&(c.expiresAt=l.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[au]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let l=c.value,_=l[au];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,l.expiresAt>0&&(c.expiresAt=l.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Jo.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<Jo.length;l++){let _=Jo[l].deref();(!_||_.isDone||_.isCommitted)&&Jo.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function WS(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",E,f){if(E||l==null?_c=i?.localTime?FS|ow:qS:_c=l?i?.localTime?FS|16384:iw|16384:qS,u>0&&(c|=YS),Tf=c,kS=u,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:_c>0},m;try{E&&(h.ifVersion=m=i?.version??null);let S=e.put(n,s,h);if(l){let g=_?.user?.username;if(f&&(Sf=e.encoder.encode(f)),E&&i?.localTime){let T=i?.localTime,b=r.get(T);if(b){let N=Kt(b).previousLocalTime;return r.put(T,gf(o,t,n,N,g,d,Sf),{ifVersion:m}),S}}r.put(lu,gf(o,t,n,i?.localTime?1:0,g,d,Sf),{append:d!=="invalidate",instructedWrite:!0,ifVersion:m})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var sw,GS,mf,lu,VS,rQ,au,cu,nQ,qS,iw,sQ,ow,FS,YS,KS,iQ,Sf,_c,Tf,kS,$S,Jo,uu=be(()=>{sw=require("msgpackr");no();GS=x(k()),mf=new Uint8Array([1,1,1,1,4,64,0,0]),lu=new Uint8Array([1,1,1,1,1,0,0,0]),VS=new Uint8Array([1,1,1,1,3,64,0,0]),rQ=Symbol("local-timestamp"),au=Symbol("metadata"),cu=new Uint8Array(8),nQ=new DataView(cu.buffer,0,8),qS=0,iw=0,sQ=1,ow=3,FS=4,YS=16,KS=1,_c=0,Tf=-1,kS=0,$S=class extends sw.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(_c||Tf>=0){let i=0,o=_c;o&&(i+=8,_c=0);let c=Tf,l=kS;c>=0&&(i+=2,Tf=-1,l&&(i+=8,kS=0));let _=iQ=r.call(this,n,s|2048|i);Sf=_.subarray((_.start||0)+i,_.end);let u=_.start||0;return o&&(mf[4]=o,mf[5]=o>>8,_.set(mf,u),u+=8),c>=0&&(_[u++]=c,_[u++]=0,l&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(u,l)),_}else return r.call(this,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(cu,0,c),c+=8;else for(let d=0;d<8;d++)cu[d]=t[c++];l=oQ(),i=t[c]}let _;i<32&&(o=i,c+=2,o&YS&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let u=super.decode(t.subarray(c,s),s-c);return{localTime:l,value:u,[au]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(oQ,"getTimestamp");a(Rf,"handleLocalTimeForGets");Jo=[];setInterval(()=>{for(let e=0;e<Jo.length;e++){let t=Jo[e].deref();!t||t.isDone||t.isCommitted?Jo.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(GS.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):GS.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(WS,"getUpdateRecord")});var _u=R((xpe,lw)=>{"use strict";var cw=X(),aQ=L(),{RecordEncoder:cQ}=(uu(),ae(aw)),Hpe=require("fs");cw.initSync();var lQ=cw.get(aQ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,QS=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=lQ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:cQ})}};lw.exports=QS});var du=R((qpe,uw)=>{"use strict";var on=X(),Un=L();on.initSync();var Af=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=on.get(Un.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||on.get(Un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||on.get(Un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",on.get(Un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=on.get(Un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),on.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=on.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),on.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=on.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),on.get(Un.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=on.get(Un.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=on.get(Un.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};uw.exports=Af;Af.MAX_DBS=1e4});var Ye=R((kpe,gw)=>{"use strict";var zS=require("lmdb"),rs=require("fs-extra"),an=require("path"),Of=wr(),fw=k(),Dr=nn().LMDB_ERRORS_ENUM,bf=nw(),JS=_u(),Ew=du(),so=_t(),_w=L(),{table:uQ,resetDatabases:_Q}=(Re(),ae(Ve)),dw=X(),ns=so.INTERNAL_DBIS_NAME,hw=so.DBI_DEFINITION_NAME,dQ="data.mdb",fQ="lock.mdb",fu=".mdb",EQ="-lock",jS=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=vn(t,r),this.key_type=this.dbi[so.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[so.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new zS.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Nf(e,t){if(e===void 0)throw new Error(Dr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Dr.ENV_NAME_REQUIRED)}a(Nf,"pathEnvNameValidation");async function XS(e,t,r=!0){try{await rs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Dr.INVALID_BASE_PATH):n}try{let n=an.join(e,t+fu);return await rs.access(n,rs.constants.R_OK|rs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await rs.access(an.join(e,t,dQ),rs.constants.R_OK|rs.constants.F_OK),an.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Dr.INVALID_ENVIRONMENT)}else throw new Error(Dr.INVALID_ENVIRONMENT);throw n}}a(XS,"validateEnvironmentPath");function yf(e,t){if(Of.validateEnv(e),t===void 0)throw new Error(Dr.DBI_NAME_REQUIRED)}a(yf,"validateEnvDBIName");async function hQ(e,t,r=!1,n=!1){Nf(e,t);let s=an.basename(e);t=t.toString();let i=dw.get(_w.CONFIG_PARAMS.DATABASES);i||dw.setProperty(_w.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await XS(e,t,n),pw(e,t,r)}catch(o){if(o.message===Dr.INVALID_ENVIRONMENT){let c=an.join(e,t);await rs.mkdirp(n?c:e);let l=new Ew(n?c:c+fu,!1),_=zS.open(l);_.dbis=Object.create(null);let u=new JS(!1);_.openDB(ns,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=ZS(e,t,r);return _[so.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(hQ,"createEnvironment");async function pQ(e,t,r,n=!0){Nf(e,t),t=t.toString();let s=an.join(e,t);return uQ({table:t,database:an.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(pQ,"copyEnvironment");async function pw(e,t,r=!1){Nf(e,t),t=t.toString();let n=ZS(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await XS(e,t),i=an.join(e,t+fu),o=s!=i,c=new Ew(s,o),l=zS.open(c);l.dbis=Object.create(null);let _=Sw(l);for(let u=0;u<_.length;u++)vn(l,_[u]);return l[so.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(pw,"openEnvironment");async function mQ(e,t,r=!1){Nf(e,t),t=t.toString();let n=an.join(e,t+fu),s=await XS(e,t);if(global.lmdb_map!==void 0){let i=ZS(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await mw(o),delete global.lmdb_map[i]}}await rs.remove(s),await rs.remove(s===n?s+EQ:an.join(an.dirname(s),fQ))}a(mQ,"deleteEnvironment");async function mw(e){Of.validateEnv(e);let t=e[so.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(mw,"closeEnvironment");function ZS(e,t,r=!1){let s=`${an.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(ZS,"getCachedEnvironmentName");function SQ(e){Of.validateEnv(e);let t=Object.create(null),r=vn(e,ns);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==ns)try{t[n]=Object.assign(new bf,s)}catch{fw.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(SQ,"listDBIDefinitions");function Sw(e){Of.validateEnv(e);let t=[],r=vn(e,ns);for(let{key:n}of r.getRange({start:!1}))n!==ns&&t.push(n);return t}a(Sw,"listDBIs");function TQ(e,t){let n=vn(e,ns).getEntry(t),s=new bf;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{fw.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(TQ,"getDBIDefinition");function Tw(e,t,r,n=!r){if(yf(e,t),t=t.toString(),t===ns)throw new Error(Dr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return vn(e,t)}catch(s){if(s.message===Dr.DBI_DOES_NOT_EXIST){let i=new JS(r,n===!0),o=e.openDB(t,i),c=new bf(r===!0,n);return o[hw]=c,vn(e,ns).putSync(t,c),e.dbis[t]=o,o}throw s}}a(Tw,"createDBI");function vn(e,t){if(yf(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ns?r=TQ(e,t):r=new bf,r===void 0)throw new Error(Dr.DBI_DOES_NOT_EXIST);let n;try{let s=new JS(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(Dr.DBI_DOES_NOT_EXIST):s}return n[hw]=r,e.dbis[t]=n,n}a(vn,"openDBI");function gQ(e,t){yf(e,t),t=t.toString();let r=vn(e,t),n=r.getStats();return r[so.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(gQ,"statDBI");async function RQ(e,t){try{let r=an.join(e,t+fu);return(await rs.stat(r)).size}catch{throw new Error(Dr.INVALID_ENVIRONMENT)}}a(RQ,"environmentDataSize");function AQ(e,t){if(yf(e,t),t=t.toString(),t===ns)throw new Error(Dr.CANNOT_DROP_INTERNAL_DBIS_NAME);vn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],vn(e,ns).removeSync(t)}a(AQ,"dropDBI");function OQ(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{vn(e,i)}catch(o){if(o.message===Dr.DBI_DOES_NOT_EXIST)Tw(e,i,i!==t,i===t),n=!0;else throw o}}n&&_Q()}a(OQ,"initializeDBIs");gw.exports={openDBI:vn,openEnvironment:pw,createEnvironment:hQ,listDBIs:Sw,listDBIDefinitions:SQ,createDBI:Tw,dropDBI:AQ,statDBI:gQ,deleteEnvironment:mQ,initializeDBIs:OQ,TransactionCursor:jS,environmentDataSize:RQ,copyEnvironment:pQ,closeEnvironment:mw}});var Aw=R((Vpe,Rw)=>{"use strict";var eT=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};Rw.exports=eT});var bw=R((Kpe,Ow)=>{"use strict";var tT=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};Ow.exports=tT});var yw=R((Qpe,Nw)=>{"use strict";var rT=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};Nw.exports=rT});var Zo=R((Zpe,Cw)=>{"use strict";var bQ=Ye(),NQ=Aw(),yQ=bw(),IQ=yw(),Ds=wr(),Eu=nn().LMDB_ERRORS_ENUM,wQ=_t(),ui=L(),CQ=Y(),DQ=require("uuid"),zpe=require("lmdb"),{handleHDBError:LQ,hdb_errors:PQ}=ie(),{OVERFLOW_MARKER:Jpe,MAX_SEARCH_KEY_LENGTH:Xpe}=wQ,Iw=X();Iw.initSync();var If=Iw.get(ui.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),nT=ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Xo=ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function MQ(e,t,r,n,s=Ds.getNextMonotonicTime()){aT(e,t,r,n),sT(e,t,r);let i=new NQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];ww(_,!0,s);let u=UQ(e,t,r,_),d=_[t];o.push(u),c.push(d)}return iT(o,c,n,i,s)}a(MQ,"insertRecords");function UQ(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let u=c([[{}]]);Array.isArray(u)&&(c=u[0][ui.FUNC_VAL],n[o]=c)}let l=Ds.getIndexedValues(c),_=e.dbis[o];if(l){If&&_.prefetch(l.map(u=>({key:u,value:s})),wf);for(let u=0,d=l.length;u<d;u++)_.put(l[u],s)}}If&&e.dbis[t].prefetch([s],wf),e.dbis[t].put(s,n,n[Xo])})}a(UQ,"insertRecord");function vQ(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(vQ,"removeSkippedRecords");function ww(e,t,r){let n=r>0;(n||!Number.isInteger(e[Xo]))&&(e[Xo]=r||(r=Ds.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[nT]))&&(e[nT]=r||Ds.getNextMonotonicTime()):delete e[nT]}a(ww,"setTimestamps");function sT(e,t,r){r.indexOf(ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),bQ.initializeDBIs(e,t,r)}a(sT,"initializeTransaction");async function BQ(e,t,r,n,s=Ds.getNextMonotonicTime()){aT(e,t,r,n),sT(e,t,r);let i=new yQ,o=[],c=[],l=[];for(let _=0;_<n.length;_++){let u=n[_],d=u[t],E;try{E=oT(e,t,u,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(E),l.push(d)}return iT(c,l,n,i,s,o)}a(BQ,"updateRecords");async function HQ(e,t,r,n,s=Ds.getNextMonotonicTime()){try{aT(e,t,r,n)}catch(l){throw LQ(l,l.message,PQ.HTTP_STATUS_CODES.BAD_REQUEST)}sT(e,t,r);let i=new IQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l],u;CQ.isEmpty(_[t])?(u=DQ.v4(),_[t]=u):u=_[t];let d=oT(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return iT(o,c,n,i,s)}a(HQ,"upsertRecords");async function iT(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Ds.getNextMonotonicTime(),vQ(r,i),n}a(iT,"finalizeWrite");function oT(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),_=l?.value,u=_;if(!_){if(i)return!1;_={}}if(ww(r,!u,o),Number.isInteger(r[Xo])&&_[Xo]>r[Xo])return!1;u&&s.original_records.push(_);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let m=r[h],S=e.dbis[h];if(S===void 0)continue;let g=_[h];if(typeof m=="function"){let b=m([[_]]);Array.isArray(b)&&(m=b[0][ui.FUNC_VAL],r[h]=m)}if(m===g)continue;let T=Ds.getIndexedValues(g);if(T){If&&S.prefetch(T.map(b=>({key:b,value:n})),wf);for(let b=0,N=T.length;b<N;b++)S.remove(T[b],n)}if(T=Ds.getIndexedValues(m),T){If&&S.prefetch(T.map(b=>({key:b,value:n})),wf);for(let b=0,N=T.length;b<N;b++)S.put(T[b],n)}}let f=Object.assign({},_,r);c.put(n,f,f[Xo])},"do_put");return l?d=c.ifVersion(n,l.version,E):d=c.ifNoExists(n,E),d.then(f=>f?!0:oT(e,t,r,n,s,i,o))}a(oT,"updateUpsertRecord");function xQ(e,t,r){if(Ds.validateEnv(e),t===void 0)throw new Error(Eu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Eu.WRITE_ATTRIBUTES_REQUIRED):new Error(Eu.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(xQ,"validateBasic");function aT(e,t,r,n){if(xQ(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Eu.RECORDS_REQUIRED):new Error(Eu.RECORDS_MUST_BE_ARRAY)}a(aT,"validateWrite");function wf(){}a(wf,"noop");Cw.exports={insertRecords:MQ,updateRecords:BQ,upsertRecords:HQ}});var _i=R((tme,GQ)=>{GQ.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var Ps=R((rme,Pw)=>{"use strict";var Lw=Y(),Dw=L(),dc=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ls=require("joi"),io={schema_format:{pattern:dc,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},qQ=Ls.alternatives(Ls.string().min(1).max(io.schema_length.maximum).pattern(dc).messages({"string.pattern.base":"{:#label} "+io.schema_format.message}),Ls.number(),Ls.array()).required(),FQ=Ls.alternatives(Ls.string().min(1).max(io.schema_length.maximum).pattern(dc).messages({"string.pattern.base":"{:#label} "+io.schema_format.message}),Ls.number()),kQ=Ls.alternatives(Ls.string().min(1).max(io.schema_length.maximum).pattern(dc).messages({"string.pattern.base":"{:#label} "+io.schema_format.message}),Ls.number()).required();function $Q(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>io.schema_length.maximum?`'${e}' maximum of 250 characters`:dc.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a($Q,"checkValidTable");function VQ(e,t){return Lw.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(VQ,"validateSchemaExists");function YQ(e,t){let r=t.state.ancestors[0].schema;return Lw.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(YQ,"validateTableExists");function KQ(e,t){return e.toLowerCase()===Dw.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Dw.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(KQ,"validateSchemaName");Pw.exports={common_validators:io,schema_regex:dc,hdb_schema_table:qQ,validateSchemaExists:VQ,validateTableExists:YQ,validateSchemaName:KQ,checkValidTable:$Q,hdb_database:FQ,hdb_table:kQ}});var nt=R((sme,Mw)=>{"use strict";var Lr=require("validate.js");Lr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Lr.validators.type.checks[t](e)?null:` must be a '${t}' value`};Lr.validators.type.checks={Object:function(e){return Lr.isObject(e)&&!Lr.isArray(e)},Array:Lr.isArray,Integer:Lr.isInteger,Number:Lr.isNumber,String:Lr.isString,Date:Lr.isDate,Boolean:function(e){return typeof e=="boolean"}};Lr.validators.hasValidFileExt=function(e,t){return Lr.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};Mw.exports={validateObject:WQ,validateObjectAsync:QQ,validateBySchema:jQ};function WQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Lr(e,t,{format:"flat"});return r?new Error(r):null}a(WQ,"validateObject");async function QQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Lr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(QQ,"validateObjectAsync");function jQ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(jQ,"validateBySchema")});var Cf=R((ome,Uw)=>{var{common_validators:Ms}=Ps(),pu=nt(),hu="is required",yt={database:{presence:!1,format:Ms.schema_format,length:Ms.schema_length},schema:{presence:!1,format:Ms.schema_format,length:Ms.schema_length},table:{presence:!0,format:Ms.schema_format,length:Ms.schema_length},attribute:{presence:!0,format:Ms.schema_format,length:Ms.schema_length},hash_attribute:{presence:!0,format:Ms.schema_format,length:Ms.schema_length}};function mu(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(mu,"makeAttributesStrings");function zQ(e){return e=mu(e),yt.table.presence=!1,yt.attribute.presence=!1,yt.hash_attribute.presence=!1,pu.validateObject(e,yt)}a(zQ,"schema_object");function JQ(e){return e=mu(e),yt.table.presence={message:hu},yt.attribute.presence=!1,yt.hash_attribute.presence=!1,pu.validateObject(e,yt)}a(JQ,"table_object");function XQ(e){return e=mu(e),yt.table.presence={message:hu},yt.attribute.presence=!1,pu.validateObject(e,yt)}a(XQ,"create_table_object");function ZQ(e){return e=mu(e),yt.table.presence={message:hu},yt.attribute.presence={message:hu},yt.hash_attribute.presence=!1,pu.validateObject(e,yt)}a(ZQ,"attribute_object");function ej(e){return e=mu(e),yt.table.presence={message:hu},yt.attribute.presence=!1,yt.hash_attribute.presence=!1,pu.validateObject(e,yt)}a(ej,"describe_table");function tj(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(tj,"validateTableResidence");Uw.exports={schema_object:zQ,create_table_object:XQ,table_object:JQ,attribute_object:ZQ,describe_table:ej,validateTableResidence:tj}});var Bw=R((cme,vw)=>{"use strict";var rj=require("uuid"),cT=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||rj.v4(),this.schema_table=`${this.schema}.${this.table}`}};vw.exports=cT});var Df=R((ume,Hw)=>{"use strict";var nj=Bw(),lT=class extends nj{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};Hw.exports=lT});var Gw=R((dme,xw)=>{"use strict";xw.exports=ij;var sj="inserted";function ij(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===sj?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(ij,"returnObject")});var Lf=R((Eme,Vw)=>{"use strict";var oj=L(),uT=Ye(),aj=Zo(),{getSystemSchemaPath:cj,getSchemaPath:lj}=Je(),uj=_i(),_j=Cf(),dj=Df(),fj=Gw(),{handleHDBError:qw,hdb_errors:kw}=ie(),Fw=Y(),{HTTP_STATUS_CODES:Ej}=kw,_T=uj.hdb_attribute,$w=[];for(let e=0;e<_T.attributes.length;e++)$w.push(_T.attributes[e].attribute);var hj="inserted";Vw.exports=pj;async function pj(e){let t=_j.attribute_object(e);if(t)throw qw(new Error,t.message,kw.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&Fw.checkGlobalSchemaTable(e.schema,e.table);if(r)throw qw(new Error,r,Ej.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Fw.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new dj(e.schema,e.table,e.attribute,e.id);try{let i=await uT.openEnvironment(lj(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);uT.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await uT.openEnvironment(cj(),oj.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await aj.insertRecords(o,_T.hash_attribute,$w,[s]);return fj(hj,c,{records:[s]},l)}catch(i){throw i}}a(pj,"lmdbCreateAttribute")});var fT=R((pme,Kw)=>{var{hdb_table:mj,hdb_database:Yw}=Ps(),Sj=nt(),dT=require("joi"),Tj={undefined:"undefined",null:"null"},gj=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||Tj[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),Rj=dT.object({database:Yw,schema:Yw,table:mj,records:dT.array().items(dT.object().custom(gj)).required()});Kw.exports=function(e){return Sj.validateBySchema(e,Rj)}});var Su=R((Tme,Qw)=>{"use strict";var di=Y(),Ww=k(),Sme=fT(),{getDatabases:Aj}=(Re(),ae(Ve)),{ClientError:ea}=ie();Qw.exports=Oj;function Oj(e){if(di.isEmpty(e))throw new ea("invalid update parameters defined.");if(di.isEmptyOrZeroLength(e.schema))throw new ea("invalid schema specified.");if(di.isEmptyOrZeroLength(e.table))throw new ea("invalid table specified.");if(!Array.isArray(e.records))throw new ea("records must be an array");let t=Aj()[e.schema]?.[e.table];if(di.isEmpty(t))throw new ea(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&di.isEmptyOrZeroLength(o[r]))throw Ww.error("a valid hash attribute must be provided with update record:",o),new ea("a valid hash attribute must be provided with update record, check log for more info");if(!di.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Ww.error(`a valid hash value must be provided with ${e.operation} record:`,o),new ea(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!di.isEmpty(o[r])&&o[r]!==""&&n.has(di.autoCast(o[r]))&&(o.skip=!0),n.add(di.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(Oj,"insertUpdateValidate")});var zw=R((Rme,jw)=>{"use strict";var ET=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};jw.exports=ET});var Zw=R((Ome,Xw)=>{"use strict";var hT=Ye(),bj=k(),Jw=nn().LMDB_ERRORS_ENUM;Xw.exports=Nj;async function Nj(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 hT.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==Jw.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await hT.closeEnvironment(global.lmdb_map[n]),await hT.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==Jw.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){bj.error(t)}}a(Nj,"cleanLMDBMap")});var fi=R((Nme,nC)=>{"use strict";var Tu=require("crypto"),yj=X(),{CONFIG_PARAMS:Ij}=L(),tC="aes-256-cbc",wj=32,Cj=16,pT=64,rC=32,Dj=pT+rC,eC=new Map;nC.exports={encrypt:Lj,decrypt:Pj,createNatsTableStreamName:Mj};function Lj(e){let t=Tu.randomBytes(wj),r=Tu.randomBytes(Cj),n=Tu.createCipheriv(tC,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(Lj,"encrypt");function Pj(e){let t=e.substr(0,pT),r=e.substr(pT,rC),n=e.substr(Dj,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Tu.createDecipheriv(tC,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Pj,"decrypt");function Mj(e,t){let r=yj.get(Ij.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=eC.get(r);return n||(n=Tu.createHash("md5").update(r).digest("hex"),eC.set(r,n)),n}a(Mj,"createNatsTableStreamName")});var Ei=R((wme,iC)=>{"use strict";var Ime=ur(),gu=k(),sC=Cf(),Uj=fi(),Pf=Y(),{handleHDBError:Mf,hdb_errors:vj}=ie(),{HDB_ERROR_MSGS:Uf,HTTP_STATUS_CODES:mT}=vj,Bj=X();Bj.initSync();var{getDatabases:ST}=(Re(),ae(Ve)),Hj=require("fs-extra");iC.exports={describeAll:xj,describeTable:vf,describeSchema:Gj};async function xj(e={}){try{let t=Pf.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=ST(),o={},c={},l=[],_=e?.exact_count;for(let d in i){o[d]=!0,!t&&!s&&!r&&(c[d]=e.hdb_user?.role?.permission[d]?.describe);let E=i[d];for(let f in E)try{let h;if(t||s||r)h=await vf({schema:d,table:f,exact_count:_});else if(n&&n[d].describe&&n[d].tables[f].describe){let m=n[d].tables[f].attribute_permissions;h=await vf({schema:d,table:f,exact_count:_},m)}h&&l.push(h)}catch(h){gu.error(h)}}let u={};for(let d in l)t||s||r?(u[l[d].schema]==null&&(u[l[d].schema]={}),u[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(u[l[d].schema]==null&&(u[l[d].schema]={}),u[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s||r?u[d]={}:c[d]&&(u[d]={});return u}catch(t){return gu.error("Got an error in describeAll"),gu.error(t),Mf(new Error,Uf.DESCRIBE_ALL_ERR)}}a(xj,"describeAll");async function vf(e,t){Pf.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(s=e.hdb_user?.role?.permission[r]?.tables[n]?.attribute_permissions);let i=sC.describe_table(e);if(i)throw i;let c=ST()[r];if(!c)throw Mf(new Error,Uf.SCHEMA_NOT_FOUND(e.schema),mT.NOT_FOUND);let l=c[n];if(!l)throw Mf(new Error,Uf.TABLE_NOT_FOUND(e.schema,e.table),mT.NOT_FOUND);function _(f){u.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(h=>({type:h.type,name:h.name})):void 0}))}a(_,"pushAtt");let u=[];if(s){let f={};s.forEach(h=>{h.describe&&(f[h.attribute_name]=!0)}),l.attributes.forEach(h=>{f[h.name]&&_(h)})}else l.attributes?.forEach(f=>_(f));let d;try{d=(await Hj.stat(l.primaryStore.env.path)).size}catch(f){gu.warn("unable to get database size",f)}let E={schema:r,name:l.tableName,hash_attribute:l.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:u,db_size:d};E.clustering_stream_name=Uj.createNatsTableStreamName(E.schema,E.name);try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});E.record_count=f.recordCount,E.estimated_record_range=f.estimatedRange;let h=l.auditStore;if(h)for(let m of h.getKeys({reverse:!0,limit:1}))E.last_updated_record=m[0];if(!E.last_updated_record&&l.indices.__updatedtime__)for(let m of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))E.last_updated_record=m}catch(f){gu.warn(`unable to stat table dbi due to ${f}`)}return E}a(vf,"descTable");async function Gj(e){Pf.transformReq(e);let t=sC.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=ST()[n];if(!i)throw Mf(new Error,Uf.SCHEMA_NOT_FOUND(e.schema),mT.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Pf.isEmpty(l)||l.describe){let _=await vf({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(Gj,"describeSchema")});var Bn=R((Pme,uC)=>{var qj=_i(),{callbackify:aC,promisify:Fj}=require("util"),{getDatabases:cC}=(Re(),ae(Ve));uC.exports={setSchemaDataToGlobal:oC,getTableSchema:kj,getSystemSchema:$j,setSchemaDataToGlobalAsync:Fj(oC)};var lC=Ei(),Dme=aC(lC.describeAll),Lme=aC(lC.describeTable);function oC(e){global.hdb_schema=cC(),e&&e()}a(oC,"setSchemaDataToGlobal");function kj(e,t,r){let n=cC()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(kj,"getTableSchema");function $j(){return qj}a($j,"getSystemSchema")});var Pr=R((Ume,EC)=>{"use strict";var Hf=fT(),rr=Y(),Vj=require("util"),xf=Hn(),Yj=Bn(),_C=k(),{handleHDBError:ta,hdb_errors:Kj}=ie(),{HTTP_STATUS_CODES:ra}=Kj,Wj=Vj.promisify(Yj.getTableSchema),Qj="updated",dC="inserted",fC="upserted";EC.exports={insert:zj,update:Jj,upsert:Xj,validation:jj,flush:Zj};async function jj(e){if(rr.isEmpty(e))throw new Error("invalid update parameters defined.");if(rr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(rr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Wj(e.schema,e.table),r=Hf(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&rr.isEmptyOrZeroLength(c[n]))throw _C.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(!rr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw _C.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!rr.isEmpty(c[n])&&c[n]!==""&&s.has(rr.autoCast(c[n]))&&(c.skip=!0),s.add(rr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(jj,"validation");async function zj(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Hf(e);if(t)throw ta(new Error,t.message,ra.BAD_REQUEST);rr.transformReq(e);let r=rr.checkSchemaTableExist(e.schema,e.table);if(r)throw ta(new Error,r,ra.BAD_REQUEST);let n=await xf.createRecords(e);return Bf(dC,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(zj,"insertData");async function Jj(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Hf(e);if(t)throw ta(new Error,t.message,ra.BAD_REQUEST);rr.transformReq(e);let r=rr.checkSchemaTableExist(e.schema,e.table);if(r)throw ta(new Error,r,ra.BAD_REQUEST);let n=await xf.updateRecords(e);return rr.isEmpty(n.existing_rows)?Bf(Qj,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Bf(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Jj,"updateData");async function Xj(e){if(e.operation!=="upsert")throw ta(new Error,"invalid operation, must be upsert",ra.INTERNAL_SERVER_ERROR);let t=Hf(e);if(t)throw ta(new Error,t.message,ra.BAD_REQUEST);rr.transformReq(e);let r=rr.checkSchemaTableExist(e.schema,e.table);if(r)throw ta(new Error,r,ra.BAD_REQUEST);let n=await xf.upsertRecords(e);return Bf(fC,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(Xj,"upsertData");function Bf(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===dC?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===fC?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Bf,"returnObject");function Zj(e){return rr.transformReq(e),xf.flush(e.schema,e.table)}a(Zj,"flush")});var gT=R((Bme,mC)=>{var ez=nt(),TT=require("joi"),{hdb_table:tz,hdb_database:hC}=Ps(),pC={schema:hC,database:hC,table:tz},rz={date:TT.date().iso().required()},nz={timestamp:TT.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};mC.exports=function(e,t){let r=t==="timestamp"?{...pC,...nz}:{...pC,...rz},n=TT.object(r);return ez.validateBySchema(e,n)}});var gC=R((Hme,TC)=>{var sz=nt(),RT=require("joi"),{hdb_table:iz,hdb_database:SC}=Ps(),oz=RT.object({schema:SC,database:SC,table:iz,hash_values:RT.array().required(),ids:RT.array()});TC.exports=function(e){return sz.validateBySchema(e,oz)}});var NT=R((xme,RC)=>{"use strict";var AT=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},OT=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},bT=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};RC.exports={InsertObject:AT,NoSQLSeachObject:OT,DeleteResponseObject:bT}});var ia=R((qme,yC)=>{"use strict";var OC=gT(),az=gC(),na=Y(),AC=require("moment"),bC=k(),{promisify:cz,callbackify:lz}=require("util"),sa=L(),uz=Bn(),yT=cz(uz.getTableSchema),IT=Hn(),{DeleteResponseObject:_z}=NT(),{handleHDBError:oo,hdb_errors:dz}=ie(),{HDB_ERROR_MSGS:Gf,HTTP_STATUS_CODES:ao}=dz,fz="records successfully deleted",Ez=lz(NC);yC.exports={delete:Ez,deleteRecord:NC,deleteFilesBefore:hz,deleteAuditLogsBefore:pz};async function hz(e){let t=OC(e,"date");if(t)throw oo(t,t.message,ao.BAD_REQUEST,void 0,void 0,!0);if(na.transformReq(e),!AC(e.date,AC.ISO_8601).isValid())throw oo(new Error,Gf.INVALID_DATE,ao.BAD_REQUEST,sa.LOG_LEVELS.ERROR,Gf.INVALID_DATE,!0);let n=na.checkSchemaTableExist(e.schema,e.table);if(n)throw oo(new Error,n,ao.NOT_FOUND,sa.LOG_LEVELS.ERROR,n,!0);let s=await IT.deleteRecordsBefore(e);if(await yT(e.schema,e.table),bC.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(hz,"deleteFilesBefore");async function pz(e){let t=OC(e,"timestamp");if(t)throw oo(t,t.message,ao.BAD_REQUEST,void 0,void 0,!0);if(na.transformReq(e),isNaN(e.timestamp))throw oo(new Error,Gf.INVALID_VALUE("Timestamp"),ao.BAD_REQUEST,sa.LOG_LEVELS.ERROR,Gf.INVALID_VALUE("Timestamp"),!0);let r=na.checkSchemaTableExist(e.schema,e.table);if(r)throw oo(new Error,r,ao.NOT_FOUND,sa.LOG_LEVELS.ERROR,r,!0);let n=await IT.deleteAuditLogsBefore(e);return await yT(e.schema,e.table),bC.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(pz,"deleteAuditLogsBefore");async function NC(e){e.ids&&(e.hash_values=e.ids);let t=az(e);if(t)throw oo(t,t.message,ao.BAD_REQUEST,void 0,void 0,!0);na.transformReq(e);let r=na.checkSchemaTableExist(e.schema,e.table);if(r)throw oo(new Error,r,ao.NOT_FOUND,sa.LOG_LEVELS.ERROR,r,!0);try{await yT(e.schema,e.table);let n=await IT.deleteRecords(e);return na.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${fz}`),n}catch(n){if(n.message===sa.SEARCH_NOT_FOUND_MESSAGE){let s=new _z;return s.message=sa.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(NC,"deleteRecord")});var qf=R((kme,CC)=>{var mz=require("crypto"),IC=9;function Sz(e){let t=gz(IC),r=wC(e+t);return t+r}a(Sz,"createHash");function Tz(e,t){let r=e?.substr(0,IC),n=r+wC(t+r);return e===n}a(Tz,"validateHash");function gz(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(gz,"generateSalt");function wC(e){return mz.createHash("md5").update(e).digest("hex")}a(wC,"md5");CC.exports={hash:Sz,validate:Tz}});var LC=R((Vme,DC)=>{var wT=nt(),_r={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function Rz(e){return _r.password.presence=!0,_r.username.presence=!0,_r.role.presence=!0,_r.active.presence=!0,wT.validateObject(e,_r)}a(Rz,"addUserValidation");function Az(e){return _r.password.presence=!1,_r.username.presence=!0,_r.role.presence=!1,_r.active.presence=!1,wT.validateObject(e,_r)}a(Az,"alterUserValidation");function Oz(e){return _r.password.presence=!1,_r.username.presence=!0,_r.role.presence=!1,_r.active.presence=!1,wT.validateObject(e,_r)}a(Oz,"dropUserValidation");DC.exports={addUserValidation:Rz,alterUserValidation:Az,dropUserValidation:Oz}});var Ze=R((Wme,MC)=>{"use strict";var{platform:Kme}=require("os"),bz="nats-server.zip",CT="nats-server",Nz=process.platform==="win32"?`${CT}.exe`:CT,yz=/^[^\s.,*>]+$/,PC="__request__",Iz=a(e=>`${e}.${PC}`,"REQUEST_SUBJECT"),wz={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Cz={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Dz={HUB:"hub.pid",LEAF:"leaf.pid"},Lz={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Pz={SUCCESS:"success",ERROR:"error"},Mz={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Uz={TXN:"txn",MSGID:"msgid"},fc={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},vz={[fc.ERR]:1,[fc.WRN]:2,[fc.INF]:3,[fc.DBG]:4,[fc.TRC]:5},Bz={debug:"-D",trace:"-DVV"};MC.exports={NATS_SERVER_ZIP:bz,NATS_SERVER_NAME:CT,NATS_BINARY_NAME:Nz,PID_FILES:Dz,NATS_CONFIG_FILES:Cz,SERVER_SUFFIX:Lz,NATS_TERM_CONSTRAINTS_RX:yz,REQUEST_SUFFIX:PC,UPDATE_REMOTE_RESPONSE_STATUSES:Pz,CLUSTER_STATUS_STATUSES:Mz,REQUEST_SUBJECT:Iz,SUBJECT_PREFIXES:Uz,MSG_HEADERS:wz,LOG_LEVELS:fc,LOG_LEVEL_FLAGS:Bz,LOG_LEVEL_HIERARCHY:vz}});var DT=R((jme,UC)=>{"use strict";var Hz={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
8
8
  `),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
9
- `)},xz="certificate.pem",Gz="privateKey.pem",qz="ca.pem";MC.exports={CERTIFICATE_VALUES:Hz,CERTIFICATE_PEM_NAME:xz,PRIVATEKEY_PEM_NAME:Gz,CA_PEM_NAME:qz}});var DT=R((Jme,GC)=>{"use strict";var HC=require("fs-extra"),le=require("joi"),Fz=require("os"),{boolean:ye,string:dr,number:st,array:Ff}=le.types(),{totalmem:UC}=require("os"),oa=require("path"),kz=k(),kf=Y(),zme=CT(),vC=L(),$z=nt(),BC="log",Vz="components",Yz="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Kz="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Wz="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",Qz="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",jz="rootPath config parameter is undefined",zz="clustering.enabled config parameter is undefined",aa=st.min(0).required(),$f=Ff.items({host:dr.required(),port:aa}).empty(null),Us,xC=!1;GC.exports={configValidator:Jz,routesValidator:nJ,route_constraints:$f};function Jz(e,t=!1){if(xC=t,Us=e.rootPath,kf.isEmpty(Us))throw jz;let r=ye.required(),n=st.min(0).max(1e3).empty(null).default(rJ),s=dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Ru),i=dr.optional().empty(null),o=dr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=le.string().empty(null).default(Ru),l=le.custom(Zz).empty(null).default(Ru),_=e.clustering?.enabled;if(kf.isEmpty(_))throw zz;let u=le.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return _===!0?d=le.object({enabled:r,hubServer:le.object({cluster:le.object({name:le.required().empty(null),network:le.object({port:aa,routes:$f}).required()}).required(),leafNodes:le.object({network:le.object({port:aa}).required()}).required(),network:le.object({port:aa}).required()}).required(),leafServer:le.object({network:le.object({port:aa,routes:$f}).required(),streams:le.object({maxAge:st.min(120).allow(null).optional(),maxBytes:st.min(1).allow(null).optional(),maxMsgs:st.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:le.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:ye.optional(),databaseLevel:ye.optional(),tls:le.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required(),verify:ye.optional()}),user:dr.optional().empty(null)}).required():d=le.object({enabled:r,tls:le.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()})}).required(),le.object({authentication:le.object({authorizeLocal:ye,cacheTTL:st.required(),enableSessions:ye}),analytics:le.object({aggregatePeriod:st}),componentsRoot:s.optional(),clustering:d,localStudio:le.object({enabled:r}).required(),logging:le.object({auditAuthEvents:le.object({logFailed:ye,logSuccessful:ye}),file:ye.required(),level:le.valid("notify","fatal","error","warn","info","debug","trace"),rotation:le.object({enabled:ye.optional(),compress:ye.optional(),interval:dr.custom(tJ).optional().empty(null),maxSize:dr.custom(eJ).optional().empty(null),path:dr.optional().empty(null).default(Ru)}).required(),root:s,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:le.object({network:le.object({cors:ye.optional(),corsAccessList:Ff.optional(),headersTimeout:st.min(1).optional(),keepAliveTimeout:st.min(1).optional(),port:st.optional().empty(null),domainSocket:le.optional().empty("hdb/operations-server").default(Ru),securePort:st.optional().empty(null),timeout:st.min(1).optional()}).optional(),tls:le.alternatives([le.array().items(u),u])}).required(),rootPath:dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:le.object({network:le.object({port:aa,securePort:aa,mtls:le.alternatives([ye.optional(),le.object({user:dr.optional(),certificateAuthority:i,required:ye.optional()})])}).required(),webSocket:ye.optional(),requireAuthentication:ye.optional()}),http:le.object({compressionThreshold:st.optional(),cors:ye.optional(),corsAccessList:Ff.optional(),headersTimeout:st.min(1).optional(),port:st.min(0).optional().empty(null),securePort:st.min(0).optional().empty(null),maxHeaderSize:st.optional(),mtls:le.alternatives([ye.optional(),le.object({user:dr.optional(),certificateAuthority:i,required:ye.optional()})]),threadRange:le.alternatives([Ff.optional(),dr.optional()])}).required(),threads:le.alternatives(n.optional(),le.object({count:n.optional(),debug:le.alternatives(ye.optional(),le.object({startingPort:st.min(1).optional(),host:dr.optional(),waitForDebugger:ye.optional()})),maxHeapMemory:st.min(0).optional()})),storage:le.object({writeAsync:ye.required(),overlappingSync:ye.optional(),caching:ye.optional(),compression:le.alternatives([ye.optional(),le.object({dictionary:dr.optional(),threshold:st.optional()})]),compactOnStart:ye.optional(),compactOnStartKeepBackup:ye.optional(),noReadAhead:ye.optional(),path:l,prefetchWrites:ye.optional(),maxFreeSpaceToLoad:st.optional(),maxFreeSpaceToRetain:st.optional()}).required(),ignoreScripts:ye.optional(),tls:le.alternatives([le.array().items(u),u])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(Jz,"configValidator");function Xz(e){return xC||HC.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Xz,"doesPathExist");function Zz(e,t){le.assert(e,dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Xz(e);if(r)return t.message(r)}a(Zz,"validatePath");function eJ(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Yz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Wz):e}a(eJ,"validateRotationMaxSize");function tJ(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Kz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Qz):e}a(tJ,"validateRotationInterval");function rJ(e,t){let r=t.state.path.join("."),n=Fz.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||UC();return i=Math.round(Math.min(i,UC())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),kz.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(rJ,"setDefaultThreads");function Ru(e,t){let r=t.state.path.join(".");if(!kf.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(kf.isEmpty(Us))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return oa.join(Us,Vz);case"logging.root":return oa.join(Us,BC);case"clustering.leafServer.streams.path":return oa.join(Us,"clustering","leaf");case"storage.path":let n=oa.join(Us,vC.LEGACY_DATABASES_DIR_NAME);return HC.existsSync(n)?n:oa.join(Us,vC.DATABASES_DIR_NAME);case"logging.rotation.path":return oa.join(Us,BC);case"operationsApi.network.domainSocket":return r==null?null:oa.join(Us,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Ru,"setDefaultRoot");function nJ(e){let t=le.object({routes:$f});return $z.validateBySchema({routes:e},t)}a(nJ,"routesValidator")});var Et=R((eSe,QC)=>{"use strict";var ln=L(),Wt=Y(),Bt=k(),{configValidator:sJ,routesValidator:qC}=DT(),Mr=require("fs-extra"),iJ=require("yaml"),ss=require("path"),oJ=require("is-number"),kC=require("properties-reader"),aJ=require("lodash"),{handleHDBError:cJ}=ie(),{HTTP_STATUS_CODES:lJ,HDB_ERROR_MSGS:Vf}=nn(),Zme=require("minimist"),{server:uJ}=(Cr(),ae(jo)),{DATABASES_PARAM_CONFIG:Au,CONFIG_PARAMS:cn,CONFIG_PARAM_MAP:is}=ln,_J="Unable to get config value because config is uninitialized",dJ="Config successfully initialized",fJ="Error backing up config file",EJ="Empty parameter sent to getConfigValue",$C=ss.join(ln.PACKAGE_ROOT,"config","yaml",ln.HDB_DEFAULT_CONFIG_FILE),hJ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",FC={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"},Yf,Ht,Kf;QC.exports={createConfigFile:pJ,getDefaultConfig:mJ,getConfigValue:YC,initConfig:PT,flattenConfig:Ec,updateConfigValue:KC,updateConfigObject:TJ,getConfiguration:AJ,setConfiguration:OJ,readConfigFile:UT,getClusteringRoutes:bJ,initOldConfig:WC,getConfigFromFile:NJ,getConfigFilePath:ca,addConfig:yJ,deleteConfigFromFile:IJ,getConfigObj:wJ};function pJ(e,t=!1){let r=co($C);Yf=Ec(r.toJSON());let n;for(let c in e){let l=is[c.toLowerCase()];if(l===cn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(_=>({[_]:e[c][_]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let _=l.split("_"),u=LT(l,e[c]);l==="rootPath"&&u?.endsWith("/")&&(u=u.slice(0,-1));try{r.setIn([..._],u)}catch(d){Bt.error(d)}}}n&&VC(r,n),MT(r,t);let s=r.toJSON();Ht=Ec(s);let i=r.getIn(["rootPath"]),o=ss.join(i,ln.HDB_CONFIG_FILE);Mr.createFileSync(o),Mr.writeFileSync(o,String(r)),Bt.trace(`Config file written to ${o}`)}a(pJ,"createConfigFile");function VC(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Wt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Au.TABLES))for(let i in n[s][Au.TABLES])for(let o in n[s][Au.TABLES][i]){let c=n[s][Au.TABLES][i][o],l=[cn.DATABASES,s,Au.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[cn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Bt.error("Error parsing schemas CLI/env config arguments",n)}}a(VC,"setSchemasConfig");function mJ(e){if(Yf===void 0){let r=co($C);Yf=Ec(r.toJSON())}let t=is[e.toLowerCase()];if(t!==void 0)return Yf[t.toLowerCase()]}a(mJ,"getDefaultConfig");function YC(e){if(e==null){Bt.error(EJ);return}if(Ht===void 0){Bt.trace(_J);return}let t=is[e.toLowerCase()];if(t!==void 0)return Ht[t.toLowerCase()]}a(YC,"getConfigValue");function ca(e=Wt.getPropsFilePath()){let t=Wt.getEnvCliRootPath();return t?ss.join(t,ln.HDB_CONFIG_FILE):kC(e).get(ln.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ca,"getConfigFilePath");function PT(e=!1){if(Ht===void 0||e){let t;if(!Wt.noBootFile()){t=Wt.getPropsFilePath();try{Mr.accessSync(t,Mr.constants.F_OK|Mr.constants.R_OK)}catch(i){throw Bt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ca(t),n;if(r.includes("config/settings.js"))try{WC(r);return}catch(i){if(i.code!==ln.NODE_ERROR_CODES.ENOENT)throw i}try{n=co(r)}catch(i){if(i.code===ln.NODE_ERROR_CODES.ENOENT){Bt.trace(`HarperDB config file not found at ${r}.
10
- This can occur during early stages of install where the config file has not yet been created`);return}else throw Bt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}SJ(n,r),MT(n);let s=n.toJSON();if(uJ.config=s,Ht=Ec(s),Ht.logging_rotation_rotate)for(let i in FC)Ht[i]&&Bt.error(`Config ${FC[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Bt.trace(dJ)}}a(PT,"initConfig");function SJ(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ss.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ss.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ss.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(Bt.trace("Updating config file with missing config params"),Mr.writeFileSync(t,String(e)))}a(SJ,"checkForUpdatedConfig");function MT(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=sJ(r,t);if(n.error)throw Vf.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket)}a(MT,"validateConfig");function TJ(e,t){Ht===void 0&&(Ht={});let r=is[e.toLowerCase()];if(r===void 0){Bt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ht[r.toLowerCase()]=t}a(TJ,"updateConfigObject");function KC(e,t,r=void 0,n=!1,s=!1,i=!1){Ht===void 0&&PT();let o=YC(is.hdb_root),c=ss.join(o,ln.HDB_CONFIG_FILE),l=co(c),_;if(r===void 0&&e.toLowerCase()===cn.DATABASES)_=t;else if(r===void 0){let E;if(i)E=e;else if(E=is[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=LT(E,t);l.setIn([...f],h)}else for(let E in r){let f=is[E.toLowerCase()];if(f===cn.HTTP_SECUREPORT&&r[E]===Ht[cn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===cn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===Ht[cn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===cn.DATABASES){_=r[E];continue}if(f?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),m=ln.LEGACY_CONFIG_PARAMS[E.toUpperCase()];m&&m.startsWith("customFunctions")&&l.hasIn(m.split("_"))&&(f=m,h=m.split("_"));let S=LT(f,r[E]);f==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],S)}catch(g){Bt.error(g)}}}_&&VC(l,_),MT(l);let u=l.getIn(["rootPath"]),d=ss.join(u,ln.HDB_CONFIG_FILE);n===!0&&gJ(c,u),Mr.writeFileSync(d,String(l)),s&&(Ht=Ec(l.toJSON())),Bt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(KC,"updateConfigValue");function gJ(e,t){try{let r=ss.join(t,"backup",`${ln.HDB_CONFIG_FILE}.bak`);Mr.copySync(e,r),Bt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Bt.error(fJ),Bt.error(r)}}a(gJ,"backupConfigFile");var RJ=["databases"];function Ec(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)),Kf=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!RJ.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!cn[l.toUpperCase()]&&is[l]&&(s[is[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Ec,"flattenConfig");function LT(e,t){if(e===cn.CLUSTERING_NODENAME||e===cn.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(oJ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Wt.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 Wt.autoCast(t)}a(LT,"castConfigValue");function AJ(){let e=Wt.getPropsFilePath(),t=ca(e);return co(t).toJSON()}a(AJ,"getConfiguration");async function OJ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return KC(void 0,void 0,s,!0),hJ}catch(i){throw typeof i=="string"||i instanceof String?cJ(i,i,lJ.BAD_REQUEST,void 0,void 0,!0):i}}a(OJ,"setConfiguration");function UT(){let e=Wt.getPropsFilePath();try{Mr.accessSync(e,Mr.constants.F_OK|Mr.constants.R_OK)}catch(n){if(!Wt.noBootFile())throw Bt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ca(e);return co(t).toJSON()}a(UT,"readConfigFile");function co(e){return iJ.parseDocument(Mr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(co,"parseYamlDoc");function bJ(){let e=UT(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Wt.isEmptyOrZeroLength(t)?[]:t;let r=qC(t);if(r)throw Vf.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Wt.isEmptyOrZeroLength(n)?[]:n;let s=qC(n);if(s)throw Vf.CONFIG_VALIDATION(s.message);if(!Wt.isEmptyOrZeroLength(n)&&!Wt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Wt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Vf.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(bJ,"getClusteringRoutes");function WC(e){let t=kC(e);Ht={};for(let r in is){let n=t.get(r.toUpperCase());if(Wt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=is[r].toLowerCase();s===cn.LOGGING_ROOT?Ht[s]=ss.dirname(n):Ht[s]=n}return Ht}a(WC,"initOldConfig");function NJ(e){let t=UT();return aJ.get(t,e.replaceAll("_","."))}a(NJ,"getConfigFromFile");async function yJ(e,t){let r=co(ca());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Mr.writeFile(ca(),String(r))}a(yJ,"addConfig");function IJ(e){let t=ca(Wt.getPropsFilePath()),r=co(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ss.join(n,ln.HDB_CONFIG_FILE);Mr.writeFileSync(s,String(r))}a(IJ,"deleteConfigFromFile");function wJ(){return Kf||(PT(),Kf)}a(wJ,"getConfigObj")});var zC=R((rSe,jC)=>{"use strict";var Wf=L(),Qf=class{static{a(this,"BaseLicense")}constructor(t=0,r=Wf.RAM_ALLOCATION_ENUM.DEFAULT,n=Wf.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},vT=class extends Qf{static{a(this,"ExtendedLicense")}constructor(t=0,r=Wf.RAM_ALLOCATION_ENUM.DEFAULT,n=Wf.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};jC.exports={BaseLicense:Qf,ExtendedLicense:vT}});var la=R((sSe,rD)=>{"use strict";var pc=require("fs-extra"),XC=qf(),ZC=require("crypto"),CJ=require("moment"),DJ=require("uuid").v4,fr=k(),HT=require("path"),LJ=Y(),lo=L(),{totalmem:JC}=require("os"),PJ=zC().ExtendedLicense,hc="invalid license key format",MJ="061183",UJ="mofi25",vJ="aes-256-cbc",BJ=16,HJ=32,eD=X();eD.initSync();var BT;rD.exports={validateLicense:tD,generateFingerPrint:GJ,licenseSearch:qT,getLicense:kJ,checkMemoryLimit:$J};function xT(){return HT.join(eD.getHdbBasePath(),lo.LICENSE_KEY_DIR_NAME,lo.LICENSE_FILE_NAME)}a(xT,"getLicenseDirPath");function xJ(){let e=xT();return HT.join(e,lo.LICENSE_FILE_NAME)}a(xJ,"getLicenseFilePath");function GT(){let e=xT();return HT.join(e,lo.REG_KEY_FILE_NAME)}a(GT,"getFingerPrintFilePath");async function GJ(){let e=GT();try{return await pc.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await qJ();throw fr.error(`Error writing fingerprint file to ${e}`),fr.error(t),new Error("There was an error generating the fingerprint")}}a(GJ,"generateFingerPrint");async function qJ(){let e=DJ(),t=XC.hash(e),r=GT();try{await pc.mkdirp(xT()),await pc.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw fr.error(`Error writing fingerprint file to ${r}`),fr.error(n),new Error("There was an error generating the fingerprint")}return t}a(qJ,"writeFingerprint");function tD(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:lo.RAM_ALLOCATION_ENUM.DEFAULT,version:lo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return fr.error("empty license key passed to validate."),r;let n=GT(),s=!1;try{s=pc.statSync(n)}catch(i){fr.error(i)}if(s){let i;try{i=pc.readFileSync(n,"utf8")}catch{fr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(UJ),c=o[1];c=Buffer.concat([Buffer.from(c)],BJ);let l=Buffer.concat([Buffer.from(i)],HJ),_=ZC.createDecipheriv(vJ,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let u=null;try{u=_.update(o[0],"hex","utf8"),u.trim(),u+=_.final("utf8")}catch{let f=FJ(o[0],i);if(f)u=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(hc),fr.error(hc),new Error(hc)}let d;if(isNaN(u))try{d=JSON.parse(u),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(hc),fr.error(hc),new Error(hc)}else r.exp_date=u;r.exp_date<CJ().valueOf()&&(r.valid_date=!1),XC.validate(o[1],`${MJ}${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||fr.error("Invalid licence"),r}a(tD,"validateLicense");function FJ(e,t){try{let r=ZC.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{fr.warn("Check old license failed")}}a(FJ,"checkOldLicense");function qT(){let e=new PJ,t=[];try{t=pc.readFileSync(xJ(),"utf-8").split(lo.NEW_LINE)}catch(r){r.code==="ENOENT"?fr.info("no license file found"):fr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(LJ.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=tD(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){fr.error("There was an error parsing the license string."),fr.error(s),e.ram_allocation=lo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return BT=e,e}a(qT,"licenseSearch");async function kJ(){return BT||await qT(),BT}a(kJ,"getLicense");function $J(){let e=qT().ram_allocation,t=process.constrainedMemory?.()||JC();if(t=Math.round(Math.min(t,JC())/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($J,"checkMemoryLimit")});var Ur=R((lSe,SD)=>{"use strict";var oD="username is required",aD="nothing to update, must supply active, role or password to update",cD="password cannot be an empty string",lD="If role is specified, it cannot be empty.",uD="active must be true or false";SD.exports={addUser:XJ,alterUser:ZJ,dropUser:t2,getSuperUser:i2,userInfo:r2,listUsers:zf,listUsersExternal:n2,setUsersToGlobal:Sc,findAndValidateUser:pD,getClusterUser:o2,USERNAME_REQUIRED:oD,ALTERUSER_NOTHING_TO_UPDATE:aD,EMPTY_PASSWORD:cD,EMPTY_ROLE:lD,ACTIVE_BOOLEAN:uD};var _D=Pr(),VJ=ia(),$T=qf(),dD=DC(),fD=ur(),VT=hi(),un=Y(),ED=require("validate.js"),Ne=k(),{promisify:YJ}=require("util"),YT=fi(),nD=L(),sD=Ze(),KJ=Et(),oSe=X(),aSe=la(),WJ=_i(),{table:cSe}=(Re(),ae(Ve)),{handleHDBError:vs,hdb_errors:QJ}=ie(),{HTTP_STATUS_CODES:Bs,AUTHENTICATION_ERROR_MSGS:FT,HDB_ERROR_MSGS:mc}=QJ,{UserEventMsg:KT}=os(),kT=require("lodash"),{server:WT}=(Cr(),ae(jo)),jJ=k();WT.getUser=(e,t)=>pD(e,t,t!=null);var hD={username:!0,active:!0,role:!0,password:!0},iD=new Map,jf=fD.searchByValue,zJ=fD.searchByHash,JJ=YJ(VJ.delete);async function XJ(e){let t=ED.cleanAttributes(e,hD),r=dD.addUserValidation(t);if(r)throw vs(new Error,r.message,Bs.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await jf(n),s=s&&Array.from(s)}catch(l){throw Ne.error("There was an error searching for a role in add user"),Ne.error(l),l}if(!s||s.length<1)throw vs(new Error,mc.ROLE_NAME_NOT_FOUND(t.role),Bs.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw vs(new Error,mc.DUP_ROLES_FOUND(t.role),Bs.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=YT.encrypt(t.password)),t.password=$T.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await _D.insert(i)}catch(l){throw Ne.error("There was an error searching for a user."),Ne.error(l),l}Ne.debug(o);try{await Sc()}catch(l){throw Ne.error("Got an error setting users to global"),Ne.error(l),l}if(o.skipped_hashes.length===1)throw vs(new Error,mc.USER_ALREADY_EXISTS(t.username),Bs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],VT.signalUserChange(new KT(process.pid)),`${c.username} successfully added`}a(XJ,"addUser");async function ZJ(e){let t=ED.cleanAttributes(e,hD);if(un.isEmptyOrZeroLength(t.username))throw new Error(oD);if(un.isEmptyOrZeroLength(t.password)&&un.isEmptyOrZeroLength(t.role)&&un.isEmptyOrZeroLength(t.active))throw new Error(aD);if(!un.isEmpty(t.password)&&un.isEmptyOrZeroLength(t.password.trim()))throw new Error(cD);if(!un.isEmpty(t.active)&&!un.isBoolean(t.active))throw new Error(uD);let r=e2(t.username);if(!un.isEmpty(t.password)&&!un.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=YT.encrypt(t.password)),t.password=$T.hash(t.password)),t.role==="")throw new Error(lD);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 jf(i)||[])}catch(c){throw Ne.error("Got an error searching for a role."),Ne.error(c),c}if(!o||o.length===0){let c=mc.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ne.error(c),vs(new Error,c,Bs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=mc.ALTER_USER_DUP_ROLES(t.role);throw Ne.error(c),vs(new Error,c,Bs.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await _D.update(n)}catch(i){throw Ne.error("Error during update."),Ne.error(i),i}try{await Sc()}catch(i){throw Ne.error("Got an error setting users to global"),Ne.error(i),i}return VT.signalUserChange(new KT(process.pid)),s}a(ZJ,"alterUser");function e2(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(e2,"isClusterUser");async function t2(e){try{let t=dD.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(un.isEmpty(global.hdb_users.get(e.username)))throw vs(new Error,mc.USER_NOT_EXIST(e.username),Bs.NOT_FOUND,void 0,void 0,!0);let n;try{n=await JJ(r)}catch(s){throw Ne.error("Got an error deleting a user."),Ne.error(s),s}Ne.debug(n);try{await Sc()}catch(s){throw Ne.error("Got an error setting users to global."),Ne.error(s),s}return VT.signalUserChange(new KT(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(t2,"dropUser");async function r2(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=kT.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await zJ(r)}catch(s){throw Ne.error("Got an error searching for a role."),Ne.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ne.error(r),r}return t}a(r2,"userInfo");async function n2(){let e;try{e=await zf()}catch(t){throw Ne.error("Got an error listing users."),Ne.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(n2,"listUsersExternal");async function zf(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await jf(e)}catch(o){throw Ne.error("Got an error searching for roles."),Ne.error(o),o}let r={};for(let o of t)r[o.id]=kT.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await jf(n)}catch(o){throw Ne.error("Got an error searching for users."),Ne.error(o),o}let i=new Map;for(let o of s)o=kT.cloneDeep(o),o.role=r[o.role],s2(o.role),i.set(o.username,o);return i}catch(e){throw Ne.error("got an error listing users"),Ne.error(e),un.errorizeMessage(e)}return null}a(zf,"listUsers");function s2(e){try{if(!e){Ne.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(WJ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ne.error("Got an error trying to set system permissions."),Ne.error(t)}}a(s2,"appendSystemTablesToRole");async function Sc(){try{let e=await zf();global.hdb_users=e}catch(e){throw Ne.error(e),e}}a(Sc,"setUsersToGlobal");async function pD(e,t,r=!0){global.hdb_users||await Sc();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw vs(new Error,FT.GENERIC_AUTH_FAIL,Bs.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw vs(new Error,FT.USER_INACTIVE,Bs.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(iD.get(t)===n.password)return s;if($T.validate(n.password,t))iD.set(t,n.password);else throw vs(new Error,FT.GENERIC_AUTH_FAIL,Bs.UNAUTHORIZED,void 0,void 0,!0)}return s}a(pD,"findAndValidateUser");async function i2(){global.hdb_users||await Sc();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(i2,"getSuperUser");async function o2(){let e=await zf(),t=KJ.getConfigFromFile(nD.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!un.isEmpty(r)&&r?.role?.role===nD.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=YT.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+sD.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+sD.SERVER_SUFFIX.ADMIN,r}a(o2,"getClusterUser");var mD=[];WT.invalidateUser=function(e){for(let t of mD)try{t(e)}catch(r){jJ.error("Error invalidating user",r)}};WT.onInvalidatedUser=function(e){mD.push(e)}});var bu=R((fSe,AD)=>{"use strict";var ua=k(),_n=L(),a2=Xw(),_Se=Bn(),dSe=Ei(),c2=Ur(),{validateEvent:TD}=os(),Ou=Hn(),l2=require("process"),{resetDatabases:u2}=(Re(),ae(Ve)),_2={[_n.ITC_EVENT_TYPES.SCHEMA]:d2,[_n.ITC_EVENT_TYPES.USER]:RD};async function d2(e){let t=TD(e);if(t){ua.error(t);return}ua.trace("ITC schemaHandler received schema event:",e),await a2(e.message),await f2(e.message)}a(d2,"schemaHandler");async function f2(e){try{Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=u2();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ua.error(t)}}a(f2,"syncSchemaMetadata");var gD=[];async function RD(e){try{try{Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ua.warn(r)}let t=TD(e);if(t){ua.error(t);return}ua.trace(`ITC userHandler ${_n.HDB_ITC_CLIENT_PREFIX}${l2.pid} received user event:`,e),await c2.setUsersToGlobal();for(let r of gD)r()}catch(t){ua.error(t)}}a(RD,"userHandler");RD.addListener=function(e){gD.push(e)};AD.exports=_2});var os=R((TSe,bD)=>{"use strict";var hSe=k(),QT=Y(),E2=L(),{ITC_ERRORS:Nu}=nn(),{parentPort:pSe,threadId:h2,isMainThread:p2,workerData:mSe}=require("worker_threads"),{onMessageFromWorkers:m2,broadcast:SSe,broadcastWithAcknowledgement:S2}=rt();bD.exports={sendItcEvent:T2,validateEvent:OD,SchemaEventMsg:g2,UserEventMsg:R2};var Jf;m2(async(e,t)=>{Jf=Jf||bu(),OD(e),Jf[e.type]&&await Jf[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function T2(e){return!p2&&e.message&&(e.message.originator=h2),S2(e)}a(T2,"sendItcEvent");function OD(e){if(typeof e!="object")return Nu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||QT.isEmpty(e.type))return Nu.MISSING_TYPE;if(!e.hasOwnProperty("message")||QT.isEmpty(e.message))return Nu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||QT.isEmpty(e.message.originator))return Nu.MISSING_ORIGIN;if(E2.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Nu.INVALID_EVENT(e.type)}a(OD,"validateEvent");function g2(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(g2,"SchemaEventMsg");function R2(e){this.originator=e}a(R2,"UserEventMsg")});var hi=R((ASe,wD)=>{"use strict";var ND=L(),RSe=Y(),Xf=k(),yD=jw(),Tc,{sendItcEvent:ID}=os();function A2(e){try{Xf.trace("signalSchemaChange called with message:",e),Tc=Tc||bu();let t=new yD(ND.ITC_EVENT_TYPES.SCHEMA,e);return Tc.schema(t),ID(t)}catch(t){Xf.error(t)}}a(A2,"signalSchemaChange");function O2(e){try{Xf.trace("signalUserChange called with message:",e),Tc=Tc||bu();let t=new yD(ND.ITC_EVENT_TYPES.USER,e);return Tc.user(t),ID(t)}catch(t){Xf.error(t)}}a(O2,"signalUserChange");wD.exports={signalSchemaChange:A2,signalUserChange:O2}});var Zf=R((bSe,DD)=>{"use strict";var CD=Y(),b2=L(),N2=k(),y2=Lf(),I2=Df(),w2=hi(),{SchemaEventMsg:C2}=os(),D2="already exists in";DD.exports=L2;async function L2(e,t,r){if(CD.isEmptyOrZeroLength(r))return r;let n=[];CD.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await P2(e,t.schema,t.name,i)})),s}a(L2,"lmdbCheckForNewAttributes");async function P2(e,t,r,n){let s=new I2(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await M2(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(D2))N2.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(P2,"createNewAttribute");async function M2(e){let t;return t=await y2(e),w2.signalSchemaChange(new C2(process.pid,b2.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(M2,"createAttribute")});var gc=R((ySe,LD)=>{"use strict";var jT=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};LD.exports=jT});var MD=R((wSe,PD)=>{"use strict";var U2=gc(),v2=L().OPERATIONS_ENUM,zT=class extends U2{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(v2.INSERT,r,n,s,i),this.records=t}};PD.exports=zT});var vD=R((DSe,UD)=>{"use strict";var B2=gc(),H2=L().OPERATIONS_ENUM,JT=class extends B2{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(H2.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};UD.exports=JT});var HD=R((PSe,BD)=>{"use strict";var x2=gc(),G2=L().OPERATIONS_ENUM,XT=class extends x2{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(G2.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};BD.exports=XT});var GD=R((USe,xD)=>{"use strict";var q2=gc(),F2=L().OPERATIONS_ENUM,ZT=class extends q2{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(F2.DELETE,n,s,t,i),this.original_records=r}};xD.exports=ZT});var yu=R((HSe,$D)=>{"use strict";var BSe=require("path"),qD=Ye(),k2=MD(),$2=vD(),V2=HD(),Y2=GD(),Rc=_t(),FD=Y(),{CONFIG_PARAMS:K2}=L(),kD=X();kD.initSync();var eE=L().OPERATIONS_ENUM,{getTransactionAuditStorePath:W2}=Je();$D.exports=Q2;async function Q2(e,t){if(kD.get(K2.LOGGING_AUDITLOG)===!1)return;let r=W2(e.schema,e.table),n=await qD.openEnvironment(r,e.table,!0),s=j2(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){qD.initializeDBIs(n,Rc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Rc.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),FD.isEmpty(s.user_name)||n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(Q2,"writeTransaction");function j2(e,t){let r=FD.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===eE.INSERT)return new k2(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.UPDATE)return new $2(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.UPSERT)return new V2(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.DELETE)return new Y2(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(j2,"createTransactionObject")});var eg=R((qSe,VD)=>{"use strict";var z2=Su(),GSe=tu(),Iu=L(),J2=ru(),X2=Zo().insertRecords,Z2=Ye(),e4=k(),t4=Zf(),{getSchemaPath:r4}=Je(),n4=yu();VD.exports=s4;async function s4(e){try{let{schema_table:t,attributes:r}=z2(e);J2(e,r,t.hash_attribute),e.schema!==Iu.SYSTEM_SCHEMA_NAME&&(r.includes(Iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await t4(e.hdb_auth_header,t,r),s=r4(e.schema,e.table),i=await Z2.openEnvironment(s,e.table),o=await X2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await n4(e,o)}catch(c){e4.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(s4,"lmdbCreateRecords")});var WD=R((kSe,KD)=>{"use strict";var YD=L(),i4=eg(),o4=tu(),a4=require("fs-extra"),{getSchemaPath:c4}=Je();KD.exports=l4;async function l4(e){let t=[{name:e.schema,createddate:Date.now()}],r=new o4(YD.SYSTEM_SCHEMA_NAME,YD.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await i4(r),await a4.mkdirp(c4(e.schema))}a(l4,"lmdbCreateSchema")});var jD=R((VSe,QD)=>{"use strict";var tg=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};QD.exports=tg});var ZD=R((jSe,XD)=>{"use strict";var zD=Ye(),rg=wr(),ng=nn().LMDB_ERRORS_ENUM,u4=_t(),JD=k(),KSe=Y(),_4=require("lmdb"),d4=jD(),f4=L(),{OVERFLOW_MARKER:WSe,MAX_SEARCH_KEY_LENGTH:QSe}=u4,E4=f4.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function h4(e,t,r,n){if(rg.validateEnv(e),t===void 0)throw new Error(ng.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ng.IDS_REQUIRED):new Error(ng.IDS_MUST_BE_ITERABLE);try{let s=zD.listDBIs(e);zD.initializeDBIs(e,t,s);let i=new d4,o,c=[],l=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[E4]>n){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,_4.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let g=s[S];if(!h.hasOwnProperty(g)||g===t)continue;let T=e.dbis[g],b=h[g];if(b!=null)try{let N=rg.getIndexedValues(b);if(N)for(let U=0,v=N.length;U<v;U++)T.remove(N[U],o)}catch{JD.warn(`cannot delete from attribute: ${g}, ${b}:${o}`)}}});c.push(m),l.push(o),i.original_records.push(h)}catch(h){JD.warn(h),i.skipped.push(o)}let _=[],u=await Promise.all(c);for(let E=0,f=u.length;E<f;E++)u[E]===!0?i.deleted.push(l[E]):(i.skipped.push(l[E]),_.push(E));let d=0;for(let E=0;E<_.length;E++){let f=_[E];i.original_records.splice(f-d,1),d++}return i.txn_time=rg.getNextMonotonicTime(),i}catch(s){throw s}}a(h4,"deleteRecords");XD.exports={deleteRecords:h4}});var wu=R((JSe,tL)=>{"use strict";var Ac=Y(),p4=ZD(),m4=Ye(),{getSchemaPath:S4}=Je(),T4=yu(),g4=k();tL.exports=R4;async function R4(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ac.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ac.isEmptyOrZeroLength(e.hash_values)&&!Ac.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Ac.isEmpty(l)||e.hash_values.push(l)}}if(Ac.isEmptyOrZeroLength(e.hash_values))return eL([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ac.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=S4(e.schema,e.table),i=await m4.openEnvironment(s,e.table),o=await p4.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await T4(e,o)}catch(c){g4.error(`unable to write transaction due to ${c.message}`)}return eL(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(R4,"lmdbDeleteRecords");function eL(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(eL,"createDeleteResponse")});var ig=R((eTe,rL)=>{"use strict";var A4=L(),ZSe=wr();function sg(e,t){let r=Object.create(null);if(t.length===1&&A4.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(sg,"parseRow");function O4(e,t,r,n){let s=sg(r,e);n.push(s)}a(O4,"searchAll");function b4(e,t,r,n){let s=sg(r,e);n[t]=s}a(b4,"searchAllToMap");function N4(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(N4,"iterateDBI");function _a(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(_a,"pushResults");function y4(e,t,r,n,s,i){t.toString().endsWith(e)&&_a(t,r,n,s,i)}a(y4,"endsWith");function I4(e,t,r,n,s,i){t.toString().includes(e)&&_a(t,r,n,s,i)}a(I4,"contains");function w4(e,t,r,n,s,i){t>e&&_a(t,r,n,s,i)}a(w4,"greaterThanCompare");function C4(e,t,r,n,s,i){t>=e&&_a(t,r,n,s,i)}a(C4,"greaterThanEqualCompare");function D4(e,t,r,n,s,i){t<e&&_a(t,r,n,s,i)}a(D4,"lessThanCompare");function L4(e,t,r,n,s,i){t<=e&&_a(t,r,n,s,i)}a(L4,"lessThanEqualCompare");rL.exports={parseRow:sg,searchAll:O4,searchAllToMap:b4,iterateDBI:N4,endsWith:y4,contains:I4,greaterThanCompare:w4,greaterThanEqualCompare:C4,lessThanCompare:D4,lessThanEqualCompare:L4,pushResults:_a}});var Oc=R((iTe,lL)=>{"use strict";var uo=Ye(),rTe=k(),dn=wr(),tE=_t(),Tt=nn().LMDB_ERRORS_ENUM,nTe=Y(),P4=L(),rE=ig(),{parseRow:M4}=rE,sTe=require("lmdb"),{OVERFLOW_MARKER:nL,MAX_SEARCH_KEY_LENGTH:U4}=tE;function sL(e,t,r,n=!1,s=void 0,i=void 0){return da(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(sL,"iterateFullIndex");function Cu(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return da(e,t,r,(u,d,E,f)=>{let T={transaction:u,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!_,exclusiveStart:i===!0?_:l};return f===r?(T.values=!1,d.getRange(T).map(b=>({value:b}))):d.getRange(T)})}a(Cu,"iterateRangeBetween");function da(e,t,r,n){let s=e.database||e,i=uo.openDBI(s,r);i[tE.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&uo.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(da,"setupTransaction");function iL(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(nL)){if(!s)if(r)s=uo.openDBI(e,r);else{let l=uo.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=uo.openDBI(e,l[_]),!s[tE.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(iL,"getOverflowCheck");function v4(e,t,r,n=!1,s=void 0,i=void 0){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);return da(e,t,t,(o,c,l)=>(nE(r),r=Du(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>M4(_.value,r))))}a(v4,"searchAll");function B4(e,t,r,n=!1,s=void 0,i=void 0){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);nE(r),r=Du(e.database||e,r);let o=new Map;for(let{key:c,value:l}of sL(e,t,t,n,s,i))o.set(c,rE.parseRow(l,r));return o}a(B4,"searchAllToMap");function H4(e,t,r=!1,n=void 0,s=void 0){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=sL(e,void 0,t,r,n,s),c=o.transaction,l=iL(c.database,c,void 0,t);for(let{key:_,value:u}of o){let d=l(_,u);i[d]===void 0&&(i[d]=[]),i[d].push(u)}return i}a(H4,"iterateDBI");function x4(e,t){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);return uo.statDBI(e,t).entryCount}a(x4,"countAll");function G4(e,t,r,n,s=!1,i=void 0,o=void 0){return _o(e,r,n),da(e,t,r,(c,l,_,u)=>(n=dn.convertKeyValueToWrite(n),u===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(G4,"equals");function q4(e,t,r){return _o(e,t,r),uo.openDBI(e,t).getValuesCount(r)}a(q4,"count");function F4(e,t,r,n,s=!1,i=void 0,o=void 0){return _o(e,r,n),da(e,null,r,(c,l)=>{n=dn.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let u;if(s===!0){let d;for(let E of l.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),u=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(n))return E;if(_===!0)return u.DONE}}),u.filter(E=>E)}else return u=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return u.DONE}),_?u:u.filter(d=>d)})}a(F4,"startsWith");function k4(e,t,r,n,s=!1,i=void 0,o=void 0){return oL(e,t,r,n,s,i,o,!0)}a(k4,"endsWith");function oL(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return _o(e,r,n),da(e,null,r,(l,_,u,d)=>{let E=iL(u,l,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(nL)?_.getValues(f,{transaction:l}).map(m=>{let S=E(f,m);if(c?S.endsWith(n):S.includes(n))return{key:S,value:m}}).filter(m=>m):(c?h.endsWith(n):h.includes(n))?_[tE.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:_.getValues(f,{transaction:l}).map(m=>({key:f,value:m})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(oL,"contains");function $4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Cu(e,t,r,n,l,s,i,o,!0,!1)}a($4,"greaterThan");function V4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Cu(e,t,r,n,l,s,i,o,!1,!1)}a(V4,"greaterThanEqual");function Y4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Cu(e,t,r,l,n,s,i,o,!1,!0)}a(Y4,"lessThan");function K4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Cu(e,t,r,l,n,s,i,o,!1,!1)}a(K4,"lessThanEqual");function W4(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(dn.validateEnv(e),r===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Tt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Tt.END_VALUE_REQUIRED);if(n=dn.convertKeyValueToWrite(n),s=dn.convertKeyValueToWrite(s),n>s)throw new Error(Tt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Cu(e,t,r,n,s,i,o,c)}a(W4,"between");function Q4(e,t,r,n){dn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(nE(r),r=Du(s,r),n===void 0)throw new Error(Tt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=rE.parseRow(c,r)),o}a(Q4,"searchByHash");function j4(e,t,r){dn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Tt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(j4,"checkHashExists");function z4(e,t,r,n,s=[]){return cL(e,t,r,n,s),aL(e,t,r,n,s).map(i=>i[1])}a(z4,"batchSearchByHash");function J4(e,t,r,n,s=[]){cL(e,t,r,n,s);let i=new Map;for(let[o,c]of aL(e,t,r,n,s))i.set(o,c);return i}a(J4,"batchSearchByHashToMap");function aL(e,t,r,n,s=[]){return da(e,t,t,(i,o,c)=>{r=Du(c,r);let l=r.length<3;return n.map(_=>{let u=c.dbis[t].get(_,{transaction:i,lazy:l});if(u)return[_,rE.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(aL,"batchHashSearch");function cL(e,t,r,n,s){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(nE(r),n==null)throw new Error(Tt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Tt.IDS_MUST_BE_ITERABLE)}a(cL,"initializeBatchSearchByHash");function nE(e){if(!Array.isArray(e))throw e===void 0?new Error(Tt.FETCH_ATTRIBUTES_REQUIRED):new Error(Tt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(nE,"validateFetchAttributes");function _o(e,t,r){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Tt.SEARCH_VALUE_REQUIRED);if(r?.length>U4)throw new Error(Tt.SEARCH_VALUE_TOO_LARGE)}a(_o,"validateComparisonFunctions");function Du(e,t){return t.length===1&&P4.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=uo.listDBIs(e)),t}a(Du,"setGetWholeRowAttributes");lL.exports={searchAll:v4,searchAllToMap:B4,count:q4,countAll:x4,equals:G4,startsWith:F4,endsWith:k4,contains:oL,searchByHash:Q4,setGetWholeRowAttributes:Du,batchSearchByHash:z4,batchSearchByHashToMap:J4,checkHashExists:j4,iterateDBI:H4,greaterThan:$4,greaterThanEqual:V4,lessThan:Y4,lessThanEqual:K4,between:W4}});var bc=R((aTe,EL)=>{var uL=require("lodash"),_L=nt(),me=require("joi"),X4=Y(),{hdb_schema_table:Lu,checkValidTable:dL,hdb_table:fL,hdb_database:sE}=Ps(),{handleHDBError:Z4,hdb_errors:e3}=ie(),{getDatabases:t3}=(Re(),ae(Ve)),{HTTP_STATUS_CODES:r3}=e3,n3=me.object({database:sE,schema:sE,table:fL,search_attribute:Lu,search_value:me.any().required(),get_attributes:me.array().min(1).items(me.alternatives(Lu,me.object())).optional(),desc:me.bool(),limit:me.number().integer().min(1),offset:me.number().integer().min(0)}),s3=me.object({database:sE,schema:sE,table:fL,operator:me.string().valid("and","or").default("and").lowercase(),offset:me.number().integer().min(0),limit:me.number().integer().min(1),get_attributes:me.array().min(1).items(me.alternatives(Lu,me.object())).optional(),sort:me.object({attribute:me.alternatives(Lu,me.array().min(1)),descending:me.bool().optional()}).optional(),conditions:me.array().min(1).items(me.alternatives(me.object({operator:me.string().valid("and","or").default("and").lowercase(),conditions:me.array()}),me.object({search_attribute:me.alternatives(Lu,me.array().min(1)),search_type:me.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:me.when("search_type",{switch:[{is:"equals",then:me.any()},{is:"between",then:me.array().items(me.alternatives([me.string(),me.number()])).length(2)}],otherwise:me.alternatives(me.string(),me.number())}).required()}))).required()});EL.exports=function(e,t){let r=null;switch(t){case"value":r=_L.validateBySchema(e,n3);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(dL("database",e.schema)),i(dL("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=_L.validateBySchema(e,s3);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=X4.checkGlobalSchemaTable(e.schema,e.table);if(s)return Z4(new Error,s,r3.NOT_FOUND);let o=t3()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(u=>{for(let d=0,E=u.conditions.length;d<E;d++){let f=u.conditions[d];f.conditions?l(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&l(e);let _=uL.filter(c,u=>u!=="*"&&!u.startsWith?.("$")&&u.attribute!=="*"&&!Array.isArray(u)&&!u.name&&!uL.some(o,d=>d===u||d.attribute===u||d.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var og=R((lTe,hL)=>{"use strict";var i3=Ye(),o3=bc(),{getSchemaPath:a3}=Je();hL.exports=c3;function c3(e){let t=o3(e,"hashes");if(t)throw t;let r=a3(e.schema,e.table);return i3.openEnvironment(r,e.table)}a(c3,"initialize")});var ag=R((_Te,pL)=>{"use strict";var l3=Oc(),u3=og();pL.exports=_3;async function _3(e){let t=await u3(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return l3.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(_3,"lmdbGetDataByHash")});var Nc=R((fTe,mL)=>{"use strict";var cg=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};mL.exports=cg});var TL=R((pTe,SL)=>{"use strict";var hTe=Nc(),d3=Oc(),f3=og();SL.exports=E3;async function E3(e){let t=await f3(e),r=global.hdb_schema[e.schema][e.table];return d3.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(E3,"lmdbSearchByHash")});var as=R((STe,gL)=>{"use strict";var lg=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,_=void 0,u=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=_,this.offset=u}};gL.exports=lg});var iE=R((gTe,yL)=>{"use strict";var Er=Oc(),h3=Ye(),p3=Y(),Se=_t(),fa=L(),m3=_i(),RL=nn().LMDB_ERRORS_ENUM,{getSchemaPath:S3}=Je(),pi=fa.SEARCH_WILDCARDS;async function T3(e,t,r){let n;e.schema===fa.SYSTEM_SCHEMA_NAME?n=m3[e.table]:n=global.hdb_schema[e.schema][e.table];let s=NL(e,n.hash_attribute,r,t);return OL(e,s,n.hash_attribute,r)}a(T3,"prepSearch");async function OL(e,t,r,n){let s=S3(e.schema,e.table),i=await h3.openEnvironment(s,e.table),o=bL(i,e,t,r),c=o.transaction||i;if([Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Se.SEARCH_TYPES.SEARCH_ALL,Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(g3(e,r)===!1){let u=e.search_attribute;if(u===r)return n?AL(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[u]:E.key}),"toObject");return n?AL(o,d):o.map(d)}let _=e.search_attribute===r?o.map(u=>u.key):o.map(u=>u.value);return n===!0?Er.batchSearchByHashToMap(c,r,e.get_attributes,_):Er.batchSearchByHash(c,r,e.get_attributes,_)}a(OL,"executeSearch");function bL(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case Se.SEARCH_TYPES.EQUALS:s=Er.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.CONTAINS:s=Er.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.ENDS_WITH:case Se.SEARCH_TYPES._ENDS_WITH:s=Er.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.STARTS_WITH:case Se.SEARCH_TYPES._STARTS_WITH:s=Er.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Er.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Er.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Se.SEARCH_TYPES.SEARCH_ALL:return Er.searchAll(e,n,t.get_attributes,o,c,l);case Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Er.searchAllToMap(e,n,t.get_attributes,o,c,l);case Se.SEARCH_TYPES.BETWEEN:s=Er.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case Se.SEARCH_TYPES.GREATER_THAN:case Se.SEARCH_TYPES._GREATER_THAN:s=Er.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.GREATER_THAN_EQUAL:case Se.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Er.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.LESS_THAN:case Se.SEARCH_TYPES._LESS_THAN:s=Er.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.LESS_THAN_EQUAL:case Se.SEARCH_TYPES._LESS_THAN_EQUAL:s=Er.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(bL,"searchByType");function AL(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(AL,"createMapFromIterable");function g3(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(g3,"checkToFetchMore");function NL(e,t,r,n){if(p3.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),pi.indexOf(s)>-1)return r===!0?Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Se.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(pi[0])<0&&s.indexOf(pi[1])<0)return c===!0?r===!0?Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Se.SEARCH_TYPES.EQUALS;if(pi.indexOf(i)>=0&&pi.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Se.SEARCH_TYPES.CONTAINS;if(pi.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Se.SEARCH_TYPES.ENDS_WITH;if(pi.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Se.SEARCH_TYPES.STARTS_WITH;if(s.includes(pi[0])||s.includes(pi[1]))return Se.SEARCH_TYPES.EQUALS;throw new Error(RL.UNKNOWN_SEARCH_TYPE)}else switch(n){case fa.VALUE_SEARCH_COMPARATORS.BETWEEN:return Se.SEARCH_TYPES.BETWEEN;case fa.VALUE_SEARCH_COMPARATORS.GREATER:return Se.SEARCH_TYPES.GREATER_THAN;case fa.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Se.SEARCH_TYPES.GREATER_THAN_EQUAL;case fa.VALUE_SEARCH_COMPARATORS.LESS:return Se.SEARCH_TYPES.LESS_THAN;case fa.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Se.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(RL.UNKNOWN_SEARCH_TYPE)}}a(NL,"createSearchTypeFromSearchObject");yL.exports={executeSearch:OL,createSearchTypeFromSearchObject:NL,prepSearch:T3,searchByType:bL}});var wL=R((OTe,IL)=>{"use strict";var ATe=as(),R3=bc(),A3=Y(),O3=L(),b3=iE();IL.exports=N3;function N3(e,t){if(!A3.isEmpty(t)&&O3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=R3(e,"value");if(n)throw n;return b3.prepSearch(e,t,!0)}a(N3,"lmdbGetDataByValue")});var Pu=R((yTe,CL)=>{"use strict";var NTe=as(),y3=bc(),I3=Y(),w3=L(),C3=iE();CL.exports=D3;async function D3(e,t){if(!I3.isEmpty(t)&&w3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=y3(e,"value");if(n)throw n;return C3.prepSearch(e,t,!1)}a(D3,"lmdbSearchByValue")});var LL=R((CTe,DL)=>{"use strict";var wTe=_t(),ug=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},_g=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},dg=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};DL.exports={SearchByConditionsObject:ug,SearchCondition:_g,SortAttribute:dg}});var BL=R((MTe,vL)=>{"use strict";var LTe=LL().SearchByConditionsObject,L3=as(),P3=bc(),fg=Oc(),oE=_t(),{Resource:PTe}=(Mn(),ae(Eg)),UL=iE(),M3=ig(),U3=require("lodash"),{getSchemaPath:v3}=Je(),PL=Ye(),{handleHDBError:B3,hdb_errors:H3}=ie(),{HTTP_STATUS_CODES:x3}=H3,G3=1e8;vL.exports=q3;async function q3(e){let t=P3(e,"conditions");if(t)throw B3(t,t.message,x3.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=v3(e.schema,e.table),n=await PL.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)PL.openDBI(n,_.search_attribute);let i=U3.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===oE.SEARCH_TYPES.EQUALS?_.estimated_count=fg.count(n,_.search_attribute,_.search_value):u===oE.SEARCH_TYPES.CONTAINS||u===oE.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=G3}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await ML(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],u=i.slice(1).map(UL.filterByType),d=u.length,E=fg.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(f=>_.get(f,{transaction:o,lazy:!0})),d>0&&(l=l.filter(f=>{for(let h=0;h<d;h++)if(!u[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(f=>M3.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await ML(o,e,E,s.hash_attribute);c=c.concat(f)}let _=new Set,u=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(u,e.limit&&e.limit+u),l=fg.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(q3,"lmdbSearchByConditions");async function ML(e,t,r,n){let s=new L3(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===oE.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,UL.searchByType(e,s,i,n).map(o=>o.value)}a(ML,"executeConditionSearch")});var Mu=R((vTe,HL)=>{"use strict";var F3=L().OPERATIONS_ENUM,hg=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=F3.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};HL.exports=hg});var pg=R((HTe,YL)=>{"use strict";var FL=as(),kL=Mu(),$L=Pu(),VL=wu(),vr=L(),xL=Y(),GL=Ye(),{getTransactionAuditStorePath:k3,getSchemaPath:$3}=Je(),qL=k();YL.exports=V3;async function V3(e){try{if(xL.isEmpty(global.hdb_schema[e.schema])||xL.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Y3(e),await K3(e);let t=$3(e.schema,e.table);try{await GL.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")qL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=k3(e.schema,e.table);await GL.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")qL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(V3,"lmdbDropTable");async function Y3(e){let t=new FL(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await $L(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new kL(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await VL(s)}a(Y3,"deleteAttributesFromSystem");async function K3(e){let t=new FL(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await $L(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new kL(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await VL(s)}catch(i){throw i}}a(K3,"dropTableFromSystem")});var WL=R((GTe,KL)=>{"use strict";var W3=require("fs-extra"),Q3=as(),j3=Nc(),z3=Mu(),J3=pg(),X3=wu(),Z3=ag(),eX=Pu(),mi=L(),{getSchemaPath:tX}=Je(),{handleHDBError:rX,hdb_errors:nX}=ie(),{HDB_ERROR_MSGS:sX,HTTP_STATUS_CODES:iX}=nX;KL.exports=oX;async function oX(e){let t;try{t=await aX(e.schema);let r=new Q3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await eX(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await J3(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new z3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await X3(s);let i=tX(t);await W3.remove(i)}catch(r){throw r}}a(oX,"lmdbDropSchema");async function aX(e){let t=new j3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await Z3(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw rX(new Error,sX.SCHEMA_NOT_FOUND(e),iX.NOT_FOUND,void 0,void 0,!0);return n}a(aX,"validateDropSchema")});var Uu=R((FTe,QL)=>{"use strict";var mg=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};QL.exports=mg});var Tg=R((VTe,jL)=>{"use strict";var cX=require("fs-extra"),aE=Ye(),{getTransactionAuditStorePath:lX}=Je(),Sg=_t(),$Te=Uu();jL.exports=uX;async function uX(e){let t;try{let r=lX(e.schema,e.table);await cX.mkdirp(r),t=await aE.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{aE.createDBI(t,Sg.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),aE.createDBI(t,Sg.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),aE.createDBI(t,Sg.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(uX,"createTransactionsAuditEnvironment")});var ZL=R((KTe,XL)=>{"use strict";var gg=L(),zL=Ye(),_X=Zo(),{getSystemSchemaPath:dX,getSchemaPath:fX}=Je(),EX=_i(),hX=Lf(),Rg=Df(),pX=k(),mX=Tg(),Og=EX.hdb_table,JL=[];for(let e=0;e<Og.attributes.length;e++)JL.push(Og.attributes[e].attribute);XL.exports=SX;async function SX(e,t){let r=fX(t.schema,t.table),n=new Rg(t.schema,t.table,gg.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Rg(t.schema,t.table,gg.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Rg(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await zL.createEnvironment(r,t.table),e!==void 0){let o=await zL.openEnvironment(dX(),gg.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await _X.insertRecords(o,Og.hash_attribute,JL,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Ag(n),await Ag(s),await Ag(i)}await mX(t)}catch(o){throw o}}a(SX,"lmdbCreateTable");async function Ag(e){try{await hX(e)}catch(t){pX.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Ag,"createAttribute")});var tP=R((QTe,eP)=>{"use strict";var TX=Su(),gX=ru(),RX=Zf(),vu=L(),AX=Zo().updateRecords,OX=Ye(),{getSchemaPath:bX}=Je(),NX=yu(),yX=k();eP.exports=IX;async function IX(e){try{let{schema_table:t,attributes:r}=TX(e);gX(e,r,t.hash_attribute),e.schema!==vu.SYSTEM_SCHEMA_NAME&&(r.includes(vu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(vu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(vu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(vu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await RX(e.hdb_auth_header,t,r),s=bX(e.schema,e.table),i=await OX.openEnvironment(s,e.table),o=await AX(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await NX(e,o)}catch(c){yX.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(IX,"lmdbUpdateRecords")});var nP=R((zTe,rP)=>{"use strict";var wX=L().OPERATIONS_ENUM,bg=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=wX.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};rP.exports=bg});var iP=R((ZTe,sP)=>{"use strict";var XTe=nP(),CX=Su(),DX=ru(),LX=Zf(),Bu=L(),PX=Zo().upsertRecords,MX=Ye(),{getSchemaPath:UX}=Je(),vX=yu(),BX=k(),{handleHDBError:HX,hdb_errors:xX}=ie();sP.exports=GX;async function GX(e){let t;try{t=CX(e)}catch(l){throw HX(l,l.message,xX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;DX(e,n,r.hash_attribute),e.schema!==Bu.SYSTEM_SCHEMA_NAME&&(n.includes(Bu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Bu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Bu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Bu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await LX(e.hdb_auth_header,r,n),i=UX(e.schema,e.table),o=await MX.openEnvironment(i,e.table),c=await PX(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await vX(e,c)}catch(l){BX.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(GX,"lmdbUpsertRecords")});var aP=R((tge,oP)=>{"use strict";var Ng=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};oP.exports=Ng});var lP=R((nge,cP)=>{"use strict";var yg=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};cP.exports=yg});var dP=R((oge,_P)=>{"use strict";var Ig=Ye(),{getTransactionAuditStorePath:qX}=Je(),ige=aP(),Hu=_t(),FX=Y(),uP=lP(),kX=require("util").promisify,$X=kX(setTimeout),VX=1e4,YX=100;_P.exports=KX;async function KX(e){let t=qX(e.schema,e.table),r=await Ig.openEnvironment(t,e.table,!0),n=Ig.listDBIs(r);Ig.initializeDBIs(r,Hu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new uP;do s=await WX(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await $X(YX);while(s.transactions_deleted>0);return i}a(KX,"deleteAuditLogsBefore");async function WX(e,t){let r=new uP;try{let n=e.dbis[Hu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[Hu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];FX.isEmpty(c)||(s=e.dbis[Hu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Hu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>VX)break}return await s,r}catch(n){throw n}}a(WX,"deleteTransactions")});var EP=R((cge,fP)=>{"use strict";var wg=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};fP.exports=wg});var pP=R((_ge,hP)=>{"use strict";var QX=as(),jX=Mu(),uge=EP(),Hs=L(),zX=Y(),Cg=Ye(),JX=_i(),XX=Pu(),ZX=wu(),{getSchemaPath:eZ}=Je();hP.exports=tZ;async function tZ(e,t=!0){let r;e.schema===Hs.SYSTEM_SCHEMA_NAME?r=JX[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await nZ(e),s=eZ(e.schema,e.table),i=await Cg.openEnvironment(s,e.table);return t===!0&&await rZ(e,i,r.hash_attribute),Cg.dropDBI(i,e.attribute),n}a(tZ,"lmdbDropAttribute");async function rZ(e,t,r){let n=Cg.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let _={};for(let u in c)u!==i&&(_[u]=c[u]);s=t.dbis[r].put(o,_,l)}await s}a(rZ,"removeAttributeFromAllObjects");async function nZ(e){let t=new QX(Hs.SYSTEM_SCHEMA_NAME,Hs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await XX(t)).filter(o=>o[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(zX.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new jX(Hs.SYSTEM_SCHEMA_NAME,Hs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return ZX(i)}a(nZ,"dropAttributeFromSystem")});var AP=R((Ege,RP)=>{"use strict";var Dg=Ye(),yc=_t(),fge=wr(),Lg=L(),mP=Y(),{getTransactionAuditStorePath:sZ}=Je(),iZ=Oc(),cE=gc(),oZ=k();RP.exports=aZ;async function aZ(e){let t=sZ(e.schema,e.table),r=await Dg.openEnvironment(t,e.table,!0),n=Dg.listDBIs(r);Dg.initializeDBIs(r,yc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Lg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return SP(r,e.search_values);case Lg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,lZ(r,e.search_values,s);case Lg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return cZ(r,e.search_values);default:return SP(r)}}a(aZ,"readAuditLog");function SP(e,t=[0,Date.now()]){mP.isEmpty(t[0])&&(t[0]=0),mP.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[yc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new cE,s))}a(SP,"searchTransactionsByTimestamp");function cZ(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[yc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,gP(e,i))}return Object.fromEntries(r)}a(cZ,"searchTransactionsByUsername");function lZ(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=iZ.equals(e,yc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,yc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of u){let E=Number(d);n.has(E)?n.get(E).push(_.toString()):n.set(E,[_.toString()])}}let s=Array.from(n.keys()),i=gP(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);TP(l,"records",r,u,o),TP(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(lZ,"searchTransactionsByHashValues");function TP(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let _=s.get(l),u=_[_.length-1];if(u.timestamp===i)u[t]=[c];else{let d=new cE(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new cE(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(l,[_])}}}a(TP,"loopRecords");function gP(e,t){let r=[];try{let n=e.dbis[yc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new cE,i);r.push(o)}}catch(i){oZ.warn(i)}return r}catch(n){throw n}}a(gP,"batchSearchTransactions")});var bP=R((Sge,OP)=>{"use strict";var{getSchemaPath:pge}=Je(),mge=Ye(),{database:uZ}=(Re(),ae(Ve));OP.exports={writeTransaction:_Z};async function _Z(e,t,r){return uZ({database:e,table:t}).transaction(r)}a(_Z,"writeTransaction")});var wP=R((gge,IP)=>{"use strict";var{getSchemaPath:NP}=Je(),yP=Ye();IP.exports={flush:dZ,resetReadTxn:fZ};async function dZ(e,t){return(await yP.openEnvironment(NP(e,t),t.toString())).flushed}a(dZ,"flush");async function fZ(e,t){try{(await yP.openEnvironment(NP(e,t),t.toString())).resetReadTxn()}catch{}}a(fZ,"resetReadTxn")});var PP=R((Age,LP)=>{"use strict";var{Readable:EZ}=require("stream"),{getDatabases:hZ}=(Re(),ae(Ve)),{readSync:pZ,openSync:mZ,createReadStream:CP}=require("fs"),{open:SZ}=require("lmdb"),DP=_u(),TZ=du(),{AUDIT_STORE_OPTIONS:gZ}=(no(),ae(MP)),{INTERNAL_DBIS_NAME:RZ,AUDIT_STORE_NAME:AZ}=_t();LP.exports=bZ;var Pg=32768,OZ=100;async function bZ(e){let t=e.database||e.schema||"data",r=hZ()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let u=_.dbisDB,d=SZ({noSync:!0,maxDbs:TZ.MAX_DBS}),E,f=d.openDB(RZ,new DP(!1)),h=u.useReadTransaction(),m=0,S=a(async function(T,b){b.encoding="binary",b.encoder=void 0;let N=d.openDB(T,b),U=u.openDB(T,b);for(let{key:v,version:F,value:M}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=N.put(v,M,F),m++%OZ===0&&(await new Promise(W=>setTimeout(W,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:T,value:b}of u.getRange({transaction:h,start:!1}))if(s.some(N=>T.startsWith?.(N+"/"))){f.put(T,b);let[,N]=T.split("/"),U=!N,v=new DP(!U,U);await S(T,v)}e.include_audit&&await S(AZ,Object.assign({},gZ)),await E;let g=CP(d.path);return g.headers=l(),g.on("close",()=>{h.done(),d.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=mZ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Pg);pZ(c,_,0,Pg),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=CP(null,{fd:c,start:Pg}),E=new EZ.from(async function*(){yield _;for await(let f of d)u.openTimer&&(u.openTimer=0),yield f;u.done()}());return E.headers=l(),E});function l(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(bZ,"getBackup")});var BP=R((bge,vP)=>{"use strict";var NZ=k(),{handleHDBError:yZ}=ie(),IZ=ew(),wZ=Lf(),CZ=eg(),DZ=WD(),LZ=wu(),PZ=ag(),MZ=TL(),UZ=wL(),vZ=Pu(),BZ=BL(),HZ=WL(),xZ=ZL(),GZ=tP(),qZ=iP(),FZ=dP(),kZ=pg(),$Z=pP(),VZ=AP(),YZ=bP(),UP=wP(),KZ=PP(),Mg=class extends IZ{static{a(this,"LMDBBridge")}async searchByConditions(t){return BZ(t)}async getDataByHash(t){return await PZ(t)}async searchByHash(t){return await MZ(t)}async getDataByValue(t,r){return await UZ(t,r)}async searchByValue(t){return await vZ(t)}async createSchema(t){return await DZ(t)}async dropSchema(t){return await HZ(t)}async createTable(t,r){return await xZ(t,r)}async dropTable(t){return await kZ(t)}async createAttribute(t){return await wZ(t)}async createRecords(t){return await CZ(t)}async updateRecords(t){return await GZ(t)}async upsertRecords(t){try{return await qZ(t)}catch(r){throw yZ(r,null,null,NZ.ERR,r)}}async deleteRecords(t){return await LZ(t)}async dropAttribute(t){return await $Z(t)}async deleteAuditLogsBefore(t){return await FZ(t)}async readAuditLog(t){return await VZ(t)}writeTransaction(t,r,n){return YZ.writeTransaction(t,r,n)}flush(t,r){return UP.flush(t,r)}resetReadTxn(t,r){return UP.resetReadTxn(t,r)}getBackup(t){return KZ(t)}};vP.exports=Mg});function zZ(){jZ=setInterval(function(){for(let e of Ug)if(e.stale){let t=e[Ie]?.url;qP.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},QZ).unref()}var vg,GP,qP,FP,kP,$P,HP,Ug,WZ,xu,xP,Ea,lE,QZ,jZ,Bg=be(()=>{vg=x(wr()),GP=x(ie()),qP=x(k());Mn();FP=x(X()),kP=x(L()),$P=x(Y()),HP=100,Ug=new Set,WZ=(0,$P.convertToMS)(FP.get(kP.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Ea=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;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.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),Ug.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Ug.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(xu&&!this.overloadChecked&&performance.now()-xP>WZ)throw new GP.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}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||(0,vg.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let f=d;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=d;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let m=d;m<this.validated;m++){let S=this.writes[m];if(!S)continue;let g=S[f===0?"before":"beforeIntermediate"];if(g){let T=g();h?h.push?h.push(T):h=[h,T]:h=T}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),l=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let E=d.store.ifVersion(d.key,d.entry?.version??null,l);s=s||E}else l();else for(let E of this.writes)c(E)},"nextCondition"),_=this.lmdbDb;if(this.writes.length>0&&(_?.retryRisk&&(_.retryRisk*=.99),this.writes.length+(_?.retryRisk||0)<HP>>n?l():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return xu||(xu=s,xP=performance.now(),xu.then(()=>{xu=null})),s.then(d=>d?(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}))):(_&&(_.retryRisk=(_.retryRisk||0)+HP/2),t?t.retries=n+1:t={retries:1},this.commit(t)));let u={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(E=>({txnTime:r,next:E}));u.next=d}return u}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},lE=class extends Ea{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,vg.getNextMonotonicTime)())}getReadTxn(){}},QZ=3e4;a(zZ,"startMonitoringTxns");zZ()});function it(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new Ea;e.timestamp&&(n.timestamp=e.timestamp),n[Ie]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var VP,ha=be(()=>{VP=require("../index");Mn();Bg();a(it,"transaction");(0,VP._assignPackageExport)("transaction",it);it.commit=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};it.abort=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var XP={};$e(XP,{ResourceBridge:()=>Gg});function qg({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 KP(e,t){let r=xs(e),n=qg(e,r);if(!r)throw new cs.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache},o;it(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let _=c[l++],u;try{u=await r.get({id:_,lazy:s,select:n},i),u=u&&_E(u)}catch(d){u={message:d.toString()}}return t?{value:{key:_,value:u}}:{value:u}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function xs(e){let t=e.database||e.schema||XZ,r=Br()[t];if(!r)throw(0,cs.handleHDBError)(new Error,JZ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function WP(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*QP(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:l}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(l)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[l]})}n&&(yield n)}var jP,uE,cs,zP,ls,Hg,xg,JP,JZ,XZ,ZZ,e5,YP,Gg,ZP=be(()=>{"use strict";jP=x(BP()),uE=x(bc()),cs=x(ie());Re();zP=x(Su()),ls=x(L()),Hg=x(hi()),xg=x(os()),JP=x(Y());ha();dE();({HDB_ERROR_MSGS:JZ}=cs.hdb_errors),XZ="data",ZZ=1e4,e5=10,Gg=class extends jP.default{static{a(this,"ResourceBridge")}constructor(t){super(t),YP=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,uE.default)(t,"conditions");if(r)throw(0,cs.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=xs(t);if(!n)throw new cs.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:qg(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new cs.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}St({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await xs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=xs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(_=>{if(!_){let{value:u,version:d}=r.primaryStore.getEntry(o);return i(o,u,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){xs(t).dropTable()}createSchema(t){return Ic({database:t.schema,table:null}),Hg.signalSchemaChange(new xg.SchemaEventMsg(process.pid,ls.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Fg(t.schema),Hg.signalSchemaChange(new xg.SchemaEventMsg(process.pid,ls.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,YP.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,zP.default)(t),s,i=Br()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return it(o,async c=>{if(!i.schemaDefined){s=[];for(let u of n)i.attributes.find(E=>E.name==u)||s.push(u);s.length>0&&await i.addAttributes(s.map(u=>({name:u,indexed:!0})))}let l=[],_=[];for(let u of t.records){let d=u[i.primaryKey],E=d!=null&&await i.get(d,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){_.push(u[i.primaryKey]);continue}E&&(E=_E(E));for(let f in u)if(Object.prototype.hasOwnProperty.call(u,f)){let h=u[f];if(typeof h=="function")try{let m=h([[E]]);Array.isArray(m)&&(h=m[0].func_val,u[f]=h)}catch(m){throw m.message+="Trying to set key "+f+" on object"+JSON.stringify(u),m}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(u,f)||(u[f]=E[f]);await(d==null?i.create(u,o):i.put(u,o)),l.push(u[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=Br()[t.schema][t.table],n={user:t.hdb_user};return it(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return WP(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Br()[t.schema][t.table];if(!r.createdTimeProperty)throw new cs.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:ls.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],_=a(async()=>{let u=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...u.deleted_hashes),o.push(...u.skipped_hashes),await(0,JP.async_set_timeout)(e5),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%ZZ===0&&await _();return l.length>0&&await _(),s?WP(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,uE.default)(t,"hashes");if(r)throw r;return KP(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of KP(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&ls.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,uE.default)(t,"value");if(n)throw n;let s=xs(t);if(!s)throw new cs.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===ls.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:qg(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}async getDataByValue(t,r){let n=new Map,s=xs(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){xs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return xs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=xs(t),n={};switch(t.search_type){case ls.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case ls.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of QP(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return QP(r,t.search_values?.[0],t.search_values?.[1])}}};a(qg,"getSelect");a(KP,"getRecords");a(xs,"getTable");a(WP,"createDeleteResponse");a(QP,"groupRecordsInHistory")});var Hn=R((Gge,eM)=>{"use strict";var{ResourceBridge:t5}=(ZP(),ae(XP)),r5=X();r5.initSync();var fE;function n5(){return fE||(fE=new t5,fE)}a(n5,"getBridge");eM.exports=n5()});var sM=R((Fge,nM)=>{"use strict";var tM=require("lodash"),Gu=require("mathjs"),s5=require("jsonata"),rM=Y();nM.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?tM.uniqWith(e,tM.isEqual):e,searchJSON:i5,mad:qu.bind(null,Gu.mad),mean:qu.bind(null,Gu.mean),mode:qu.bind(null,Gu.mode),prod:qu.bind(null,Gu.prod),median:qu.bind(null,Gu.median)};function qu(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(qu,"aggregateFunction");function i5(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(rM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),rM.isEmpty(this.__ala__.res[r])){let n=s5(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(i5,"searchJSON")});var oM=R(($ge,iM)=>{"use strict";var It=require("moment"),kg="YYYY-MM-DDTHH:mm:ss.SSSZZ";It.suppressDeprecationWarnings=!0;iM.exports={current_date:()=>It().utc().format("YYYY-MM-DD"),current_time:()=>It().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return It(e).utc().format("YYYY");case"month":return It(e).utc().format("MM");case"day":return It(e).utc().format("DD");case"hour":return It(e).utc().format("HH");case"minute":return It(e).utc().format("mm");case"second":return It(e).utc().format("ss");case"millisecond":return It(e).utc().format("SSS");default:break}},date:e=>It(e).utc().format(kg),date_format:(e,t)=>It(e).utc().format(t),date_add:(e,t,r)=>It(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>It(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=It(e).utc(),s=It(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>It().utc().valueOf(),get_server_time:()=>It().format(kg),offset_utc:(e,t)=>It(e).utc().utcOffset(t).format(kg)}});var uM=R((Vge,lM)=>{"use strict";var o5=require("@turf/area"),a5=require("@turf/length"),c5=require("@turf/circle"),l5=require("@turf/difference"),u5=require("@turf/distance"),_5=require("@turf/boolean-contains"),d5=require("@turf/boolean-equal"),f5=require("@turf/boolean-disjoint"),E5=require("@turf/helpers"),aM=L(),Ae=Y(),Si=k();lM.exports={geoArea:h5,geoLength:p5,geoCircle:m5,geoDifference:S5,geoDistance:cM,geoNear:T5,geoContains:g5,geoEqual:R5,geoCrosses:A5,geoConvert:O5};function h5(e){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return o5.default(e)}catch(t){return Si.trace(t,e),NaN}}a(h5,"geoArea");function p5(e,t){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return a5.default(e,{units:t||"kilometers"})}catch(r){return Si.trace(r,e),NaN}}a(p5,"geoLength");function m5(e,t,r){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return c5.default(e,t,{units:r||"kilometers"})}catch(n){return Si.trace(n,e,t),NaN}}a(m5,"geoCircle");function S5(e,t){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return l5(e,t)}catch(r){return Si.trace(r,e,t),NaN}}a(S5,"geoDifference");function cM(e,t,r){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return u5.default(e,t,{units:r||"kilometers"})}catch(n){return Si.trace(n,e,t),NaN}}a(cM,"geoDistance");function T5(e,t,r,n){if(Ae.isEmpty(e)||Ae.isEmpty(t))return!1;if(Ae.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return cM(e,t,n)<=r}catch(s){return Si.trace(s,e,t),!1}}a(T5,"geoNear");function g5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return _5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(g5,"geoContains");function R5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return d5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(R5,"geoEqual");function A5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return!f5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(A5,"geoCrosses");function O5(e,t,r){if(Ae.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ae.isEmpty(t))throw new Error("geo_type is required");if(Ae.isEmpty(aM.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(aM.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ae.autoCastJSON(e)),E5[t](e,r)}a(O5,"geoConvert")});var EE=R((Kge,_M)=>{var pa=sM(),fn=oM(),Gs=uM();_M.exports=e=>{e.aggr.mad=e.aggr.MAD=pa.mad,e.aggr.mean=e.aggr.MEAN=pa.mean,e.aggr.mode=e.aggr.MODE=pa.mode,e.aggr.prod=e.aggr.PROD=pa.prod,e.aggr.median=e.aggr.MEDIAN=pa.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=pa.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=pa.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=fn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=fn.current_time,e.fn.extract=e.fn.EXTRACT=fn.extract,e.fn.date=e.fn.DATE=fn.date,e.fn.date_format=e.fn.DATE_FORMAT=fn.date_format,e.fn.date_add=e.fn.DATE_ADD=fn.date_add,e.fn.date_sub=e.fn.DATE_SUB=fn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=fn.date_diff,e.fn.now=e.fn.NOW=fn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=fn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=fn.get_server_time,e.fn.getdate=e.fn.GETDATE=fn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=fn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Gs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Gs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Gs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Gs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Gs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Gs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Gs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Gs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Gs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Gs.geoNear}});var hM=R((Wge,EM)=>{"use strict";var Fu=require("lodash"),Hr=require("alasql");Hr.options.cache=!1;var b5=EE(),dM=require("clone"),hE=require("recursive-iterator"),he=k(),Me=Y(),wc=Hn(),N5=L(),{hdb_errors:y5}=ie(),{getDatabases:fM}=(Re(),ae(Ve)),I5="IS NULL",us="There was a problem performing this search. Please check the logs and try again.";b5(Hr);var $g=class{static{a(this,"SQLSearch")}constructor(t,r){if(Me.isEmpty(t))throw he.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(),Me.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Me.isEmptyOrZeroLength(n))return he.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw he.error("Error thrown from checkEmptySQL in SQLSearch class method search."),he.error(n),new Error(us)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw he.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),he.error(n),new Error(us)}if(Object.keys(this.data).length===0)return he.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw he.error("Error thrown from processJoins in SQLSearch class method search."),he.error(n),new Error(us)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw he.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),he.error(n),new Error(us)}try{return t=await this._finalSQL(),t}catch(n){throw he.error("Error thrown from finalSQL in SQLSearch class method search."),he.error(n),new Error(us)}}_getColumns(){let t=new hE(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(dM(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Fu.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=fM()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Me.isEmpty(this.statement.where)){he.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new hE(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Me.isEmpty(r)&&r.right)if(Me.isNotEmptyAndHasValue(r.right.value)){let n=Me.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Hr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Me.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Hr.yy.LogicValue({value:i}):n instanceof Hr.yy.StringValue&&Me.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Hr.yy.NumValue({value:i}))});if(t){he.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new hE(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Me.isEmpty(N5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Me.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Me.isEmptyOrZeroLength(r.left.columnid)||Me.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(Me.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"=":!Me.isEmpty(r.right.value)||!Me.isEmpty(r.left.value)?n.add(Me.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<l.length;_++)if(l[_].value)n.add(l[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(Me.isEmptyOrZeroLength(this.all_table_attributes)&&Me.isEmptyOrZeroLength(this.statement.from)&&Me.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Fu.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Me.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Me.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Me.isEmptyOrZeroLength(this.all_table_attributes)&&!Me.isEmptyOrZeroLength(this.columns.columns))return t;if(Me.isEmptyOrZeroLength(this.all_table_attributes)&&Me.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Hr.promise(r)}catch(r){throw he.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),he.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(dM(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Me.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(I5)>-1&&this.tables.forEach(s=>{let i={columnid:fM()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Fu.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Me.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Me.isEmptyOrZeroLength(this.exact_search_values[_].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[_].values);let u=await wc.getDataByHash(c);for(let d of c.hash_values)u.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(u){throw he.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),he.error(u),new Error(us)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async u=>{let d=Object.assign({},c);d.search_value=u;let E=await wc.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),he.error(u),new Error(us)}else if(!Me.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Me.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let u=this.comparator_search_values[_].comparators;for(let d=0,E=u.length;d<E;d++){let f=u[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await wc.getDataByValue(c,f.operation);if(l)for(let[m]of h)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...n[i]],this._setMergedHashAttribute(i,m));else for(let[m,S]of h)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]):(this.data[i].__merged_data[m]=[...n[i]],this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,m))}}catch(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),he.error(u),new Error(us)}else try{c.search_attribute=s.attribute,c.search_value="*";let u=await wc.getDataByValue(c);if(l)for(let[d]of u)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,E]of u)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,d))}catch(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),he.error(u),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 Hr.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Hr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Hr.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new Hr.yy.FuncValue:new Hr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,m=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${m}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${m}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let u="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(u=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${_} ${u} ${d}`,h=this._convertColumnsToIndexes(f,s);E=await Hr.promise(h,t),t=null}catch(f){throw he.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),he.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let m=E[f];o.forEach(S=>{m[S.key]!==null&&m[S.key]!==void 0&&S.keys.add(m[S.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),m=Fu.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,g=m.length;S<g;S++){let T=m[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[T]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new hE(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=Fu.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw he.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),he.error(i),new Error(us)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let u in i)o.push(i[u][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await wc.getDataByHash(c),_=s.columns.length;for(let u=0,d=o.length;u<d;u++){let E=o[u],f=l.get(E);for(let h=0;h<_;h++){let m=s.columns[h],S=f[m]===void 0?null:f[m];this.data[n].__merged_data[E].push(S)}}}}catch(r){throw he.error("Error thrown from getDataByHash function in SQLSearch class method getData."),he.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();he.trace(`Final SQL: ${s}`),n=await Hr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),he.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw he.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),he.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return he.error(y5.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),he.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],_=new RegExp(`${l}.\`${o}\``,"g"),u=`${l}.[${c}]`;n=n.replace(_,u)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(l,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await wc.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw he.error("There was an error when processing this SQL operation. Check your logs"),he.error(o),new Error(us)}}return Object.values(Object.values(this.data)[0].__merged_data)}};EM.exports=$g});var ur=R((jge,pM)=>{"use strict";var w5=XI();pM.exports={searchByConditions:D5,searchByHash:L5,searchByValue:P5,search:M5};var Vg=Hn(),{transformReq:Yg}=Y(),C5=hM();async function D5(e){return Yg(e),Vg.searchByConditions(e)}a(D5,"searchByConditions");async function L5(e){Yg(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Vg.searchByHash(e))r&&t.push(r);return t}a(L5,"searchByHash");async function P5(e){Yg(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Vg.searchByValue(e))t.push(r);return t}a(P5,"searchByValue");function M5(e,t){try{let r=new w5(e);r.validate(),new C5(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(M5,"search")});var pE=R((Jge,mM)=>{"use strict";var U5=Hn();mM.exports={writeTransaction:v5};function v5(e,t,r){return U5.writeTransaction(e,t,r)}a(v5,"writeTransaction")});var RM=R((eRe,gM)=>{"use strict";var B5=ur(),H5=Bn(),SM=k(),x5=Pr(),Zge=pE(),G5=require("clone"),Wg=require("alasql"),q5=EE(),TM=require("util"),F5=TM.promisify(H5.getTableSchema),k5=TM.promisify(B5.search),$5=L(),Kg=Y();q5(Wg);gM.exports={update:Y5};var V5="There was a problem performing this update. Please check the logs and try again.";async function Y5({statement:e,hdb_user:t}){let r=await F5(e.table.databaseid,e.table.tableid),n=K5(e.columns);Kg.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=G5(s),c=Kg.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=Wg.parse(l).statements[0],u=await k5(_),d=W5(n,u);return Q5(o,d,t)}a(Y5,"update");function K5(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Wg.compile(`SELECT ${r.expression.toString()} AS [${$5.FUNC_VAL}] FROM ?`)}),t}catch(t){throw SM.error(t),new Error(V5)}}a(K5,"createUpdateRecord");function W5(e,t){return Kg.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(W5,"buildUpdateRecords");async function Q5(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await x5.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){SM.error(`Error delete new_attributes from update response: ${i}`)}return s}a(Q5,"updateRecords")});var OM=R((sRe,AM)=>{var j5=require("alasql"),z5=ur(),J5=k(),X5=Hn(),jg=require("util"),Qg=Y(),Z5=L(),e8=Bn(),rRe=pE(),nRe=Pr(),t8="record",r8="successfully deleted",n8=jg.callbackify(a8),s8=jg.promisify(z5.search),i8=jg.promisify(e8.getTableSchema);AM.exports={convertDelete:n8};function o8(e){return`${e.deleted_hashes.length} ${t8}${e.deleted_hashes.length===1?"":"s"} ${r8}`}a(o8,"generateReturnMessage");async function a8({statement:e,hdb_user:t}){let r=await i8(e.table.databaseid,e.table.tableid);Qg.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Qg.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=j5.parse(o).statements[0],l={operation:Z5.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await s8(c);let _=await X5.deleteRecords(l);return Qg.isEmptyOrZeroLength(_.message)&&(_.message=o8(_)),delete _.txn_time,_}catch(_){throw J5.error(_),_.hdb_code?_.message:_}}a(a8,"convertDelete")});var wM=R((oRe,IM)=>{"use strict";var c8=Ei(),{hdb_errors:bM}=ie(),{getDatabases:NM}=(Re(),ae(Ve));IM.exports={checkSchemaExists:yM,checkSchemaTableExists:l8,schema_describe:c8};async function yM(e){if(!NM()[e])return bM.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(yM,"checkSchemaExists");async function l8(e,t){let r=await yM(e);if(r)return r;if(!NM()[e][t])return bM.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(l8,"checkSchemaTableExists")});var ma=R((cRe,u8)=>{u8.exports={name:"harperdb",version:"4.3.32",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.635.0","@aws-sdk/lib-storage":"3.635.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.12.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.8",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.26.2","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.1.3",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.30.1","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.22.9","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.17.1",yaml:"2.4.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.8",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.20.2",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.3.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.4.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var Ku={};$e(Ku,{addAnalyticsListener:()=>Yu,recordAction:()=>hr,recordActionBinary:()=>En,setAnalyticsEnabled:()=>_8});function _8(e){HM=e}function hr(e,t,r,n,s){if(!HM)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=TE.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let _=c;o.values=c=new Float32Array(l*2),c.set(_),c.index=l+1}c[l]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},TE.set(i,o)}mE||d8()}function En(e,t,r,n,s){hr(!!e,t,r,n,s)}function Yu(e){qM.push(e)}function d8(){mE=performance.now(),setTimeout(async()=>{let e=performance.now()-mE;mE=0;let t=[],r={time:Date.now(),period:e,threadId:Sa.threadId,metrics:t};for(let[s,i]of TE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,_=[],u;for(let d of FM){let E=Math.floor(c*d),f=o[E-1];if(E>l){let h=E-l;if(f===u){let m=_[_.length-1];typeof m=="number"?_[_.length-1]={value:m,count:1+h}:m.count+=h}else _.push(h>1?{value:f,count:h}:f),u=f;l=E}}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 kM()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Sa.threadId,byThread:!0,...n});for(let s of qM)s(t);TE=new Map,Sa.parentPort?Sa.parentPort.postMessage({type:GM,report:r}):YM({report:r})},xM).unref()}async function f8(e,t=6e4){let r=Xg(),n=$M(),s=new Promise(m=>{let S=performance.now();setImmediate(()=>{let g=performance.now();g-S>5e3&&(0,ku.warn)("Unusually high event queue latency on the main thread of "+Math.round(g-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let g=performance.now();g-S>5e3&&(0,ku.warn)("Unusually high task queue latency on the main thread of "+Math.round(g-S)+"ms"),m(g-S)})}),i;for(let m of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(m.value?.time){i=m.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,_=[],u;for(let{key:m,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(m>o+t)break}else o=m;u=m;let{metrics:g,threadId:T}=S;for(let b of g||[]){let{path:N,method:U,type:v,metric:F,count:M,total:W,distribution:z,threads:Z,...ce}=b;M||(M=1);let _e=F+(N?"-"+N:"");U!==void 0&&(_e+="-"+U),v!==void 0&&(_e+="-"+v);let de=c.get(_e);if(de){if(de.threads){let we=de.threads[T];if(we)de=we;else{de.threads[T]=Object.assign({},ce);continue}}de.count||(de.count=1);let xe=de.count;for(let we in ce){let Ge=ce[we];typeof Ge=="number"&&(de[we]=(de[we]*xe+Ge*M)/(xe+M))}de.count+=M,W>=0&&(de.total+=W,de.ratio=de.total/de.count)}else de=Object.assign({period:t},b),delete de.distribution,c.set(_e,de),de.byThread&&(de.threads=[],de.threads[T]=Object.assign({},ce),_.push(de));if(z){z=z.map(we=>typeof we=="number"?{value:we,count:1}:we);let xe=l.get(_e);xe?xe.push(...z):l.set(_e,z)}}await kM()}for(let m of _){let{path:S,method:g,type:T,metric:b,count:N,total:U,distribution:v,threads:F,...M}=m;F=F.filter(W=>W);for(let W in M){if(typeof m[W]!="number")continue;let z=0;for(let Z of F){let ce=Z[W];typeof ce=="number"&&(z+=ce)}m[W]=z}m.count=F.length,delete m.threads,delete m.byThread}for(let[m,S]of l){let g=c.get(m);S.sort((we,Ge)=>we.value>Ge.value?1:-1);let T=g.count-1,b=[],N=0,U=0,v;for(let we of FM){let Ge=T*we;for(;N<Ge;)v=S[U++],N+=v.count,U===1&&N--;let Wd=S[U>1?U-2:0];v||(v=S[0]),b.push(v.value-(v.value-Wd.value)*(N-Ge)/v.count)}let[F,M,W,z,Z,ce,_e,de,xe]=b;Object.assign(g,{p1:F,p10:M,p25:W,median:z,p75:Z,p90:ce,p95:_e,p99:de,p999:xe})}let d;for(let[m,S]of c)S.id=(0,SE.getNextMonotonicTime)(),S.time=u,n.primaryStore.put(S.id,S,{append:!0}).then(g=>{g||n.primaryStore.put(S.id,S)}),d=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(d||h*10>f){let m=(0,SE.getNextMonotonicTime)(),S={id:m,metric:"main-thread-utilization",idle:f-CM,active:h-DM,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(m,S,{append:!0}).then(g=>{g||n.primaryStore.put(m,S)})}CM=f,DM=h}async function LM(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Xg(){return PM||(PM=St({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function $M(){return MM||(MM=St({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function p8(){VM=!0;let e=(0,Vu.get)(Jg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await f8(xM,e),await LM(Xg(),E8),await LM($M(),h8)},Math.min(e/2,2147483647)).unref()}function YM(e,t){let r=e.report;r.threadId=t?.threadId||Sa.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(UM+=n.mean*n.count);r.totalBytesProcessed=UM,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(vM.get(t))}),vM.set(t,t.performance.eventLoopUtilization())),r.id=(0,SE.getNextMonotonicTime)(),Xg().primaryStore.put(r.id,r),VM||p8(),m8&&(KM=T8(r))}async function T8(e){if(await KM,!fo){let r=(0,$u.dirname)((0,ku.getLogFilePath)());try{fo=await(0,zg.open)((0,$u.join)(r,"analytics.log"),"r+")}catch{fo=await(0,zg.open)((0,$u.join)(r,"analytics.log"),"w+")}}let t=(await fo.stat()).size;if(t>S8){let r=Buffer.alloc(t);await fo.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await fo.write(r,{position:0}),await fo.truncate(r.length),t=r.length}await fo.write(JSON.stringify(e)+`
11
- `,t)}var Sa,BM,ku,$u,zg,SE,Vu,Jg,TE,HM,mE,xM,GM,qM,FM,CM,DM,kM,E8,h8,PM,MM,VM,UM,vM,m8,KM,fo,S8,Ti=be(()=>{Sa=require("worker_threads"),BM=x(rt());Re();ku=x(k()),$u=require("path"),zg=require("fs/promises"),SE=x(wr()),Vu=x(X()),Jg=x(L());Cr();(0,Vu.initSync)();TE=new Map,HM=(0,Vu.get)(Jg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(_8,"setAnalyticsEnabled");a(hr,"recordAction");dt.recordAnalytics=hr;a(En,"recordActionBinary");mE=0,xM=1e3,GM="analytics-report",qM=[];a(Yu,"addAnalyticsListener");FM=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(d8,"sendAnalytics");a(f8,"aggregation");CM=0,DM=0,kM=a(()=>new Promise(setImmediate),"rest");a(LM,"cleanup");E8=36e5,h8=31536e6;a(Xg,"getRawAnalyticsTable");a($M,"getAnalyticsTable");(0,BM.setChildListenerByType)(GM,YM);a(p8,"startScheduledTasks");UM=0,vM=new Map,m8=!1;a(YM,"recordAnalytics");S8=1e6;a(T8,"logAnalytics")});var nR=R((RRe,sU)=>{"use strict";var{decode:g8}=require("msgpackr"),{isMainThread:SRe,parentPort:TRe,threadId:gRe}=require("worker_threads"),AE=gt(),Cc=Ze(),tR=L(),pr=k(),eR=X(),R8=L(),{onMessageByType:A8}=rt(),zM=fi(),{recordAction:WM,recordActionBinary:O8}=(Ti(),ae(Ku)),{publishToStream:b8}=AE,{ConsumerEvents:QM}=require("nats"),N8=ur(),{promisify:y8}=require("util"),JM=y8(setTimeout),OE=1e4,bE,RE,I8,w8,XM,Wu=new Map,Dc=new Map;sU.exports={initialize:ZM,ingestConsumer:rR,setSubscription:C8,setIgnoreOrigin:P8,getDatabaseSubscriptions:L8,updateConsumer:eU};async function ZM(){A8(tR.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await eU(n)}),XM=!0,pr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await AE.getNATSReferences();bE=e,RE=e.info.server_name,I8=t,w8=r}a(ZM,"initialize");async function eU(e){if(e.status==="start"){let{js:t,jsm:r}=await tU(e.node_domain_name);rR(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Wu.get(e.stream_name+e.node_domain_name);t&&(pr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Wu.set(e.stream_name+e.node_domain_name,"close")),Dc.get(e.node_domain_name)==="failed"&&Dc.set(e.node_domain_name,"close")}}a(eU,"updateConsumer");var NE=new Map;function C8(e,t,r){let n=NE.get(e);n||NE.set(e,n=new Map),n.set(t,r),XM||ZM().then(D8)}a(C8,"setSubscription");async function D8(){let e=await N8.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Cc.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions)if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await tU(r),!n))break;let{schema:o,table:c}=i,l=zM.createNatsTableStreamName(o,c);rR(l,n,s,r)}}}a(D8,"accessConsumers");async function tU(e){let t,r,n=1;for(;!r;)try{t=await bE.jetstream({domain:e}),r=await bE.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Dc.get(e)==="close")break;Dc.set(e,"failed"),n%10===1&&pr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<OE?n++*100:OE;await JM(i)}return{js:t,jsm:r}}a(tU,"connectToRemoteJS");function L8(){return NE}a(L8,"getDatabaseSubscriptions");var rU;function P8(e){rU=e}a(P8,"setIgnoreOrigin");var nU=100,jM=new Array(nU),gE=0;async function rR(e,t,r,n){let{connection:s}=await AE.getNATSReferences();bE=s,RE=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,RE),pr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(Dc.get(n)==="close")break;o%10===1&&pr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(pr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await AE.createConsumer(r,e,RE,new Date(Date.now()).toISOString()));let u=o++*100<OE?o++*100:OE;await JM(u)}let c=!1,l;for(;!c;){if(Wu.get(e+n)==="close"||Dc.get(n)==="close"){Wu.delete(e+n),c=!0;continue}l=await i.consume({max_messages:eR.get(tR.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Wu.set(e+n,l);let _=!1;(async()=>{for await(let u of await l.status())if(u.type===QM.ConsumerDeleted&&(await l.close(),c=!0),u.type===QM.HeartbeatsMissed){let d=u.data;pr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===100&&(pr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),_=!0)}})();try{for await(let u of l)await jM[gE],jM[gE]=M8(u).catch(d=>{pr.error(d)}),++gE>=nU&&(gE=0)}catch(u){u.message==="consumer deleted"?(pr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):pr.error("Error consuming clustering ingest, restarting consumer",u)}}}a(rR,"ingestConsumer");async function M8(e){let t=g8(e.data);WM(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),pr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=eR.get(tR.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Cc.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Cc.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Cc.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!rU),O8(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Cc.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:_,records:u,hash_values:d,__origin:E,expiresAt:f}=t;pr.trace("processing message:",o,c,_,(u?"records: "+u.map(U=>U?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),pr.trace(`messageProcessor nats msg id: ${e.headers.get(Cc.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let m=new Promise(U=>h=U),{timestamp:S,user:g,node_name:T}=E||{},b=NE.get(c)?.get(_);if(!b)throw new Error(`Missing table for replication message: ${_}`);if(o==="define_schema")t.type=o,t.onCommit=h,b.send(t);else if(u.length===1&&!l)b.send({type:Zg(o),value:u[0],id:d?.[0],expiresAt:f,timestamp:S,table:_,onCommit:h,user:g,nodeName:T});else{let U=u.map((v,F)=>({type:Zg(o),value:v,expiresAt:f,id:d?.[F],table:_}));for(;l;)U.push({type:Zg(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;b.send({type:"transaction",writes:U,table:_,timestamp:S,onCommit:h,user:g,nodeName:T})}eR.get(R8.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&b8(e.subject.split(".").slice(0,-1).join("."),zM.createNatsTableStreamName(c,_),e.headers,e.data),await m;let N=Date.now()-S;S&&WM(N,"replication-latency",e.subject,o,"ingest")}catch(o){pr.error(o)}e.ack()}a(M8,"messageProcessor");function Zg(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(Zg,"convertOperation")});var gt=R((wRe,RU)=>{"use strict";var Qt=X();Qt.initSync();var U8=require("fs-extra"),v8=require("semver"),zu=require("path"),{monotonicFactory:B8}=require("ulidx"),oU=B8(),H8=require("util"),aU=require("child_process"),x8=H8.promisify(aU.exec),G8=aU.spawn,nr=Ze(),Ce=L(),yE=Y(),_s=k(),IE=fi(),q8=pE(),Qu=Et(),{broadcast:F8,onMessageByType:k8,getWorkerIndex:$8}=rt(),{isMainThread:cU}=require("worker_threads"),{Encoder:V8,decode:aR}=require("msgpackr"),lU=new V8,{isEmpty:Aa}=yE,uU=Ur(),ORe=48*36e11;cU&&k8(Ce.ITC_EVENT_TYPES.RESTART,()=>{mr=void 0,Ra=void 0});var{connect:Y8,StorageType:K8,RetentionPolicy:W8,AckPolicy:cR,DeliverPolicy:lR,DiscardPolicy:Q8,NatsConnection:bRe,JetStreamManager:NRe,JetStreamClient:yRe,StringCodec:IRe,JSONCodec:j8,createInbox:uR,headers:z8,ErrorCode:iU}=require("nats"),{PACKAGE_ROOT:J8}=L(),X8=ma(),{recordAction:Z8}=(Ti(),ae(Ku)),_U=j8(),e6="clustering",t6=X8.engines[nr.NATS_SERVER_NAME],r6=zu.join(J8,"dependencies"),oR=zu.join(r6,`${process.platform}-${process.arch}`,nr.NATS_BINARY_NAME),sR,iR,ju,Ta,ga;RU.exports={runCommand:dU,checkNATSServerInstalled:n6,createConnection:_R,getConnection:Ju,getJetStreamManager:Xu,getJetStream:EU,getNATSReferences:qs,getServerList:i6,createLocalStream:dR,listStreams:hU,deleteLocalStream:o6,getServerConfig:Lc,listRemoteStreams:a6,viewStream:c6,viewStreamIterator:l6,publishToStream:u6,request:f6,reloadNATS:fR,reloadNATSHub:E6,reloadNATSLeaf:h6,extractServerName:d6,requestErrorHandler:p6,createLocalTableStream:TU,createTableStreams:T6,purgeTableStream:gU,purgeSchemaTableStreams:g6,getStreamInfo:R6,updateLocalStreams:O6,closeConnection:s6,getJsmServerName:wE,addNatsMsgHeader:pU,clearClientCache:fU,updateRemoteConsumer:m6,createConsumer:mU,updateConsumerIterator:S6};async function dU(e,t=void 0){let{stdout:r,stderr:n}=await x8(e,{cwd:t});if(n)throw new Error(n.replace(`
9
+ `)},xz="certificate.pem",Gz="privateKey.pem",qz="ca.pem";UC.exports={CERTIFICATE_VALUES:Hz,CERTIFICATE_PEM_NAME:xz,PRIVATEKEY_PEM_NAME:Gz,CA_PEM_NAME:qz}});var LT=R((Jme,qC)=>{"use strict";var xC=require("fs-extra"),le=require("joi"),Fz=require("os"),{boolean:ye,string:dr,number:st,array:Ff}=le.types(),{totalmem:vC}=require("os"),oa=require("path"),kz=k(),kf=Y(),zme=DT(),BC=L(),$z=nt(),HC="log",Vz="components",Yz="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Kz="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Wz="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",Qz="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",jz="rootPath config parameter is undefined",zz="clustering.enabled config parameter is undefined",aa=st.min(0).required(),$f=Ff.items({host:dr.required(),port:aa}).empty(null),Us,GC=!1;qC.exports={configValidator:Jz,routesValidator:nJ,route_constraints:$f};function Jz(e,t=!1){if(GC=t,Us=e.rootPath,kf.isEmpty(Us))throw jz;let r=ye.required(),n=st.min(0).max(1e3).empty(null).default(rJ),s=dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Ru),i=dr.optional().empty(null),o=dr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=le.string().empty(null).default(Ru),l=le.custom(Zz).empty(null).default(Ru),_=e.clustering?.enabled;if(kf.isEmpty(_))throw zz;let u=le.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return _===!0?d=le.object({enabled:r,hubServer:le.object({cluster:le.object({name:le.required().empty(null),network:le.object({port:aa,routes:$f}).required()}).required(),leafNodes:le.object({network:le.object({port:aa}).required()}).required(),network:le.object({port:aa}).required()}).required(),leafServer:le.object({network:le.object({port:aa,routes:$f}).required(),streams:le.object({maxAge:st.min(120).allow(null).optional(),maxBytes:st.min(1).allow(null).optional(),maxMsgs:st.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:le.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:ye.optional(),databaseLevel:ye.optional(),tls:le.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required(),verify:ye.optional()}),user:dr.optional().empty(null)}).required():d=le.object({enabled:r,tls:le.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()})}).required(),le.object({authentication:le.object({authorizeLocal:ye,cacheTTL:st.required(),enableSessions:ye}),analytics:le.object({aggregatePeriod:st}),componentsRoot:s.optional(),clustering:d,localStudio:le.object({enabled:r}).required(),logging:le.object({auditAuthEvents:le.object({logFailed:ye,logSuccessful:ye}),file:ye.required(),level:le.valid("notify","fatal","error","warn","info","debug","trace"),rotation:le.object({enabled:ye.optional(),compress:ye.optional(),interval:dr.custom(tJ).optional().empty(null),maxSize:dr.custom(eJ).optional().empty(null),path:dr.optional().empty(null).default(Ru)}).required(),root:s,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:le.object({network:le.object({cors:ye.optional(),corsAccessList:Ff.optional(),headersTimeout:st.min(1).optional(),keepAliveTimeout:st.min(1).optional(),port:st.optional().empty(null),domainSocket:le.optional().empty("hdb/operations-server").default(Ru),securePort:st.optional().empty(null),timeout:st.min(1).optional()}).optional(),tls:le.alternatives([le.array().items(u),u])}).required(),rootPath:dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:le.object({network:le.object({port:aa,securePort:aa,mtls:le.alternatives([ye.optional(),le.object({user:dr.optional(),certificateAuthority:i,required:ye.optional()})])}).required(),webSocket:ye.optional(),requireAuthentication:ye.optional()}),http:le.object({compressionThreshold:st.optional(),cors:ye.optional(),corsAccessList:Ff.optional(),headersTimeout:st.min(1).optional(),port:st.min(0).optional().empty(null),securePort:st.min(0).optional().empty(null),maxHeaderSize:st.optional(),mtls:le.alternatives([ye.optional(),le.object({user:dr.optional(),certificateAuthority:i,required:ye.optional()})]),threadRange:le.alternatives([Ff.optional(),dr.optional()])}).required(),threads:le.alternatives(n.optional(),le.object({count:n.optional(),debug:le.alternatives(ye.optional(),le.object({startingPort:st.min(1).optional(),host:dr.optional(),waitForDebugger:ye.optional()})),maxHeapMemory:st.min(0).optional()})),storage:le.object({writeAsync:ye.required(),overlappingSync:ye.optional(),caching:ye.optional(),compression:le.alternatives([ye.optional(),le.object({dictionary:dr.optional(),threshold:st.optional()})]),compactOnStart:ye.optional(),compactOnStartKeepBackup:ye.optional(),noReadAhead:ye.optional(),path:l,prefetchWrites:ye.optional(),maxFreeSpaceToLoad:st.optional(),maxFreeSpaceToRetain:st.optional()}).required(),ignoreScripts:ye.optional(),tls:le.alternatives([le.array().items(u),u])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(Jz,"configValidator");function Xz(e){return GC||xC.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Xz,"doesPathExist");function Zz(e,t){le.assert(e,dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Xz(e);if(r)return t.message(r)}a(Zz,"validatePath");function eJ(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Yz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Wz):e}a(eJ,"validateRotationMaxSize");function tJ(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Kz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Qz):e}a(tJ,"validateRotationInterval");function rJ(e,t){let r=t.state.path.join("."),n=Fz.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||vC();return i=Math.round(Math.min(i,vC())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),kz.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(rJ,"setDefaultThreads");function Ru(e,t){let r=t.state.path.join(".");if(!kf.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(kf.isEmpty(Us))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return oa.join(Us,Vz);case"logging.root":return oa.join(Us,HC);case"clustering.leafServer.streams.path":return oa.join(Us,"clustering","leaf");case"storage.path":let n=oa.join(Us,BC.LEGACY_DATABASES_DIR_NAME);return xC.existsSync(n)?n:oa.join(Us,BC.DATABASES_DIR_NAME);case"logging.rotation.path":return oa.join(Us,HC);case"operationsApi.network.domainSocket":return r==null?null:oa.join(Us,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Ru,"setDefaultRoot");function nJ(e){let t=le.object({routes:$f});return $z.validateBySchema({routes:e},t)}a(nJ,"routesValidator")});var Et=R((eSe,jC)=>{"use strict";var ln=L(),Wt=Y(),Bt=k(),{configValidator:sJ,routesValidator:FC}=LT(),Mr=require("fs-extra"),iJ=require("yaml"),ss=require("path"),oJ=require("is-number"),$C=require("properties-reader"),aJ=require("lodash"),{handleHDBError:cJ}=ie(),{HTTP_STATUS_CODES:lJ,HDB_ERROR_MSGS:Vf}=nn(),Zme=require("minimist"),{server:uJ}=(Cr(),ae(jo)),{DATABASES_PARAM_CONFIG:Au,CONFIG_PARAMS:cn,CONFIG_PARAM_MAP:is}=ln,_J="Unable to get config value because config is uninitialized",dJ="Config successfully initialized",fJ="Error backing up config file",EJ="Empty parameter sent to getConfigValue",VC=ss.join(ln.PACKAGE_ROOT,"config","yaml",ln.HDB_DEFAULT_CONFIG_FILE),hJ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",kC={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"},Yf,Ht,Kf;jC.exports={createConfigFile:pJ,getDefaultConfig:mJ,getConfigValue:KC,initConfig:MT,flattenConfig:Ec,updateConfigValue:WC,updateConfigObject:TJ,getConfiguration:AJ,setConfiguration:OJ,readConfigFile:vT,getClusteringRoutes:bJ,initOldConfig:QC,getConfigFromFile:NJ,getConfigFilePath:ca,addConfig:yJ,deleteConfigFromFile:IJ,getConfigObj:wJ};function pJ(e,t=!1){let r=co(VC);Yf=Ec(r.toJSON());let n;for(let c in e){let l=is[c.toLowerCase()];if(l===cn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(_=>({[_]:e[c][_]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let _=l.split("_"),u=PT(l,e[c]);l==="rootPath"&&u?.endsWith("/")&&(u=u.slice(0,-1));try{r.setIn([..._],u)}catch(d){Bt.error(d)}}}n&&YC(r,n),UT(r,t);let s=r.toJSON();Ht=Ec(s);let i=r.getIn(["rootPath"]),o=ss.join(i,ln.HDB_CONFIG_FILE);Mr.createFileSync(o),Mr.writeFileSync(o,String(r)),Bt.trace(`Config file written to ${o}`)}a(pJ,"createConfigFile");function YC(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Wt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Au.TABLES))for(let i in n[s][Au.TABLES])for(let o in n[s][Au.TABLES][i]){let c=n[s][Au.TABLES][i][o],l=[cn.DATABASES,s,Au.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[cn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Bt.error("Error parsing schemas CLI/env config arguments",n)}}a(YC,"setSchemasConfig");function mJ(e){if(Yf===void 0){let r=co(VC);Yf=Ec(r.toJSON())}let t=is[e.toLowerCase()];if(t!==void 0)return Yf[t.toLowerCase()]}a(mJ,"getDefaultConfig");function KC(e){if(e==null){Bt.error(EJ);return}if(Ht===void 0){Bt.trace(_J);return}let t=is[e.toLowerCase()];if(t!==void 0)return Ht[t.toLowerCase()]}a(KC,"getConfigValue");function ca(e=Wt.getPropsFilePath()){let t=Wt.getEnvCliRootPath();return t?ss.join(t,ln.HDB_CONFIG_FILE):$C(e).get(ln.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ca,"getConfigFilePath");function MT(e=!1){if(Ht===void 0||e){let t;if(!Wt.noBootFile()){t=Wt.getPropsFilePath();try{Mr.accessSync(t,Mr.constants.F_OK|Mr.constants.R_OK)}catch(i){throw Bt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ca(t),n;if(r.includes("config/settings.js"))try{QC(r);return}catch(i){if(i.code!==ln.NODE_ERROR_CODES.ENOENT)throw i}try{n=co(r)}catch(i){if(i.code===ln.NODE_ERROR_CODES.ENOENT){Bt.trace(`HarperDB config file not found at ${r}.
10
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw Bt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}SJ(n,r),UT(n);let s=n.toJSON();if(uJ.config=s,Ht=Ec(s),Ht.logging_rotation_rotate)for(let i in kC)Ht[i]&&Bt.error(`Config ${kC[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Bt.trace(dJ)}}a(MT,"initConfig");function SJ(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ss.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ss.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ss.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(Bt.trace("Updating config file with missing config params"),Mr.writeFileSync(t,String(e)))}a(SJ,"checkForUpdatedConfig");function UT(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=sJ(r,t);if(n.error)throw Vf.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket)}a(UT,"validateConfig");function TJ(e,t){Ht===void 0&&(Ht={});let r=is[e.toLowerCase()];if(r===void 0){Bt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ht[r.toLowerCase()]=t}a(TJ,"updateConfigObject");function WC(e,t,r=void 0,n=!1,s=!1,i=!1){Ht===void 0&&MT();let o=KC(is.hdb_root),c=ss.join(o,ln.HDB_CONFIG_FILE),l=co(c),_;if(r===void 0&&e.toLowerCase()===cn.DATABASES)_=t;else if(r===void 0){let E;if(i)E=e;else if(E=is[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=PT(E,t);l.setIn([...f],h)}else for(let E in r){let f=is[E.toLowerCase()];if(f===cn.HTTP_SECUREPORT&&r[E]===Ht[cn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===cn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===Ht[cn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===cn.DATABASES){_=r[E];continue}if(f?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),m=ln.LEGACY_CONFIG_PARAMS[E.toUpperCase()];m&&m.startsWith("customFunctions")&&l.hasIn(m.split("_"))&&(f=m,h=m.split("_"));let S=PT(f,r[E]);f==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],S)}catch(g){Bt.error(g)}}}_&&YC(l,_),UT(l);let u=l.getIn(["rootPath"]),d=ss.join(u,ln.HDB_CONFIG_FILE);n===!0&&gJ(c,u),Mr.writeFileSync(d,String(l)),s&&(Ht=Ec(l.toJSON())),Bt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(WC,"updateConfigValue");function gJ(e,t){try{let r=ss.join(t,"backup",`${ln.HDB_CONFIG_FILE}.bak`);Mr.copySync(e,r),Bt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Bt.error(fJ),Bt.error(r)}}a(gJ,"backupConfigFile");var RJ=["databases"];function Ec(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)),Kf=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!RJ.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!cn[l.toUpperCase()]&&is[l]&&(s[is[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Ec,"flattenConfig");function PT(e,t){if(e===cn.CLUSTERING_NODENAME||e===cn.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(oJ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Wt.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 Wt.autoCast(t)}a(PT,"castConfigValue");function AJ(){let e=Wt.getPropsFilePath(),t=ca(e);return co(t).toJSON()}a(AJ,"getConfiguration");async function OJ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return WC(void 0,void 0,s,!0),hJ}catch(i){throw typeof i=="string"||i instanceof String?cJ(i,i,lJ.BAD_REQUEST,void 0,void 0,!0):i}}a(OJ,"setConfiguration");function vT(){let e=Wt.getPropsFilePath();try{Mr.accessSync(e,Mr.constants.F_OK|Mr.constants.R_OK)}catch(n){if(!Wt.noBootFile())throw Bt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ca(e);return co(t).toJSON()}a(vT,"readConfigFile");function co(e){return iJ.parseDocument(Mr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(co,"parseYamlDoc");function bJ(){let e=vT(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Wt.isEmptyOrZeroLength(t)?[]:t;let r=FC(t);if(r)throw Vf.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Wt.isEmptyOrZeroLength(n)?[]:n;let s=FC(n);if(s)throw Vf.CONFIG_VALIDATION(s.message);if(!Wt.isEmptyOrZeroLength(n)&&!Wt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Wt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Vf.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(bJ,"getClusteringRoutes");function QC(e){let t=$C(e);Ht={};for(let r in is){let n=t.get(r.toUpperCase());if(Wt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=is[r].toLowerCase();s===cn.LOGGING_ROOT?Ht[s]=ss.dirname(n):Ht[s]=n}return Ht}a(QC,"initOldConfig");function NJ(e){let t=vT();return aJ.get(t,e.replaceAll("_","."))}a(NJ,"getConfigFromFile");async function yJ(e,t){let r=co(ca());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Mr.writeFile(ca(),String(r))}a(yJ,"addConfig");function IJ(e){let t=ca(Wt.getPropsFilePath()),r=co(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ss.join(n,ln.HDB_CONFIG_FILE);Mr.writeFileSync(s,String(r))}a(IJ,"deleteConfigFromFile");function wJ(){return Kf||(MT(),Kf)}a(wJ,"getConfigObj")});var JC=R((rSe,zC)=>{"use strict";var Wf=L(),Qf=class{static{a(this,"BaseLicense")}constructor(t=0,r=Wf.RAM_ALLOCATION_ENUM.DEFAULT,n=Wf.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},BT=class extends Qf{static{a(this,"ExtendedLicense")}constructor(t=0,r=Wf.RAM_ALLOCATION_ENUM.DEFAULT,n=Wf.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};zC.exports={BaseLicense:Qf,ExtendedLicense:BT}});var la=R((sSe,nD)=>{"use strict";var pc=require("fs-extra"),ZC=qf(),eD=require("crypto"),CJ=require("moment"),DJ=require("uuid").v4,fr=k(),xT=require("path"),LJ=Y(),lo=L(),{totalmem:XC}=require("os"),PJ=JC().ExtendedLicense,hc="invalid license key format",MJ="061183",UJ="mofi25",vJ="aes-256-cbc",BJ=16,HJ=32,tD=X();tD.initSync();var HT;nD.exports={validateLicense:rD,generateFingerPrint:GJ,licenseSearch:FT,getLicense:kJ,checkMemoryLimit:$J};function GT(){return xT.join(tD.getHdbBasePath(),lo.LICENSE_KEY_DIR_NAME,lo.LICENSE_FILE_NAME)}a(GT,"getLicenseDirPath");function xJ(){let e=GT();return xT.join(e,lo.LICENSE_FILE_NAME)}a(xJ,"getLicenseFilePath");function qT(){let e=GT();return xT.join(e,lo.REG_KEY_FILE_NAME)}a(qT,"getFingerPrintFilePath");async function GJ(){let e=qT();try{return await pc.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await qJ();throw fr.error(`Error writing fingerprint file to ${e}`),fr.error(t),new Error("There was an error generating the fingerprint")}}a(GJ,"generateFingerPrint");async function qJ(){let e=DJ(),t=ZC.hash(e),r=qT();try{await pc.mkdirp(GT()),await pc.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw fr.error(`Error writing fingerprint file to ${r}`),fr.error(n),new Error("There was an error generating the fingerprint")}return t}a(qJ,"writeFingerprint");function rD(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:lo.RAM_ALLOCATION_ENUM.DEFAULT,version:lo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return fr.error("empty license key passed to validate."),r;let n=qT(),s=!1;try{s=pc.statSync(n)}catch(i){fr.error(i)}if(s){let i;try{i=pc.readFileSync(n,"utf8")}catch{fr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(UJ),c=o[1];c=Buffer.concat([Buffer.from(c)],BJ);let l=Buffer.concat([Buffer.from(i)],HJ),_=eD.createDecipheriv(vJ,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let u=null;try{u=_.update(o[0],"hex","utf8"),u.trim(),u+=_.final("utf8")}catch{let f=FJ(o[0],i);if(f)u=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(hc),fr.error(hc),new Error(hc)}let d;if(isNaN(u))try{d=JSON.parse(u),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(hc),fr.error(hc),new Error(hc)}else r.exp_date=u;r.exp_date<CJ().valueOf()&&(r.valid_date=!1),ZC.validate(o[1],`${MJ}${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||fr.error("Invalid licence"),r}a(rD,"validateLicense");function FJ(e,t){try{let r=eD.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{fr.warn("Check old license failed")}}a(FJ,"checkOldLicense");function FT(){let e=new PJ,t=[];try{t=pc.readFileSync(xJ(),"utf-8").split(lo.NEW_LINE)}catch(r){r.code==="ENOENT"?fr.info("no license file found"):fr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(LJ.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=rD(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){fr.error("There was an error parsing the license string."),fr.error(s),e.ram_allocation=lo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return HT=e,e}a(FT,"licenseSearch");async function kJ(){return HT||await FT(),HT}a(kJ,"getLicense");function $J(){let e=FT().ram_allocation,t=process.constrainedMemory?.()||XC();if(t=Math.round(Math.min(t,XC())/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($J,"checkMemoryLimit")});var Ur=R((lSe,TD)=>{"use strict";var aD="username is required",cD="nothing to update, must supply active, role or password to update",lD="password cannot be an empty string",uD="If role is specified, it cannot be empty.",_D="active must be true or false";TD.exports={addUser:XJ,alterUser:ZJ,dropUser:t2,getSuperUser:i2,userInfo:r2,listUsers:zf,listUsersExternal:n2,setUsersToGlobal:Sc,findAndValidateUser:mD,getClusterUser:o2,USERNAME_REQUIRED:aD,ALTERUSER_NOTHING_TO_UPDATE:cD,EMPTY_PASSWORD:lD,EMPTY_ROLE:uD,ACTIVE_BOOLEAN:_D};var dD=Pr(),VJ=ia(),VT=qf(),fD=LC(),ED=ur(),YT=hi(),un=Y(),hD=require("validate.js"),Ne=k(),{promisify:YJ}=require("util"),KT=fi(),sD=L(),iD=Ze(),KJ=Et(),oSe=X(),aSe=la(),WJ=_i(),{table:cSe}=(Re(),ae(Ve)),{handleHDBError:vs,hdb_errors:QJ}=ie(),{HTTP_STATUS_CODES:Bs,AUTHENTICATION_ERROR_MSGS:kT,HDB_ERROR_MSGS:mc}=QJ,{UserEventMsg:WT}=os(),$T=require("lodash"),{server:QT}=(Cr(),ae(jo)),jJ=k();QT.getUser=(e,t)=>mD(e,t,t!=null);var pD={username:!0,active:!0,role:!0,password:!0},oD=new Map,jf=ED.searchByValue,zJ=ED.searchByHash,JJ=YJ(VJ.delete);async function XJ(e){let t=hD.cleanAttributes(e,pD),r=fD.addUserValidation(t);if(r)throw vs(new Error,r.message,Bs.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await jf(n),s=s&&Array.from(s)}catch(l){throw Ne.error("There was an error searching for a role in add user"),Ne.error(l),l}if(!s||s.length<1)throw vs(new Error,mc.ROLE_NAME_NOT_FOUND(t.role),Bs.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw vs(new Error,mc.DUP_ROLES_FOUND(t.role),Bs.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=KT.encrypt(t.password)),t.password=VT.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await dD.insert(i)}catch(l){throw Ne.error("There was an error searching for a user."),Ne.error(l),l}Ne.debug(o);try{await Sc()}catch(l){throw Ne.error("Got an error setting users to global"),Ne.error(l),l}if(o.skipped_hashes.length===1)throw vs(new Error,mc.USER_ALREADY_EXISTS(t.username),Bs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],YT.signalUserChange(new WT(process.pid)),`${c.username} successfully added`}a(XJ,"addUser");async function ZJ(e){let t=hD.cleanAttributes(e,pD);if(un.isEmptyOrZeroLength(t.username))throw new Error(aD);if(un.isEmptyOrZeroLength(t.password)&&un.isEmptyOrZeroLength(t.role)&&un.isEmptyOrZeroLength(t.active))throw new Error(cD);if(!un.isEmpty(t.password)&&un.isEmptyOrZeroLength(t.password.trim()))throw new Error(lD);if(!un.isEmpty(t.active)&&!un.isBoolean(t.active))throw new Error(_D);let r=e2(t.username);if(!un.isEmpty(t.password)&&!un.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=KT.encrypt(t.password)),t.password=VT.hash(t.password)),t.role==="")throw new Error(uD);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 jf(i)||[])}catch(c){throw Ne.error("Got an error searching for a role."),Ne.error(c),c}if(!o||o.length===0){let c=mc.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ne.error(c),vs(new Error,c,Bs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=mc.ALTER_USER_DUP_ROLES(t.role);throw Ne.error(c),vs(new Error,c,Bs.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await dD.update(n)}catch(i){throw Ne.error("Error during update."),Ne.error(i),i}try{await Sc()}catch(i){throw Ne.error("Got an error setting users to global"),Ne.error(i),i}return YT.signalUserChange(new WT(process.pid)),s}a(ZJ,"alterUser");function e2(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(e2,"isClusterUser");async function t2(e){try{let t=fD.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(un.isEmpty(global.hdb_users.get(e.username)))throw vs(new Error,mc.USER_NOT_EXIST(e.username),Bs.NOT_FOUND,void 0,void 0,!0);let n;try{n=await JJ(r)}catch(s){throw Ne.error("Got an error deleting a user."),Ne.error(s),s}Ne.debug(n);try{await Sc()}catch(s){throw Ne.error("Got an error setting users to global."),Ne.error(s),s}return YT.signalUserChange(new WT(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(t2,"dropUser");async function r2(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=$T.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await zJ(r)}catch(s){throw Ne.error("Got an error searching for a role."),Ne.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ne.error(r),r}return t}a(r2,"userInfo");async function n2(){let e;try{e=await zf()}catch(t){throw Ne.error("Got an error listing users."),Ne.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(n2,"listUsersExternal");async function zf(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await jf(e)}catch(o){throw Ne.error("Got an error searching for roles."),Ne.error(o),o}let r={};for(let o of t)r[o.id]=$T.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await jf(n)}catch(o){throw Ne.error("Got an error searching for users."),Ne.error(o),o}let i=new Map;for(let o of s)o=$T.cloneDeep(o),o.role=r[o.role],s2(o.role),i.set(o.username,o);return i}catch(e){throw Ne.error("got an error listing users"),Ne.error(e),un.errorizeMessage(e)}return null}a(zf,"listUsers");function s2(e){try{if(!e){Ne.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(WJ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ne.error("Got an error trying to set system permissions."),Ne.error(t)}}a(s2,"appendSystemTablesToRole");async function Sc(){try{let e=await zf();global.hdb_users=e}catch(e){throw Ne.error(e),e}}a(Sc,"setUsersToGlobal");async function mD(e,t,r=!0){global.hdb_users||await Sc();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw vs(new Error,kT.GENERIC_AUTH_FAIL,Bs.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw vs(new Error,kT.USER_INACTIVE,Bs.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(oD.get(t)===n.password)return s;if(VT.validate(n.password,t))oD.set(t,n.password);else throw vs(new Error,kT.GENERIC_AUTH_FAIL,Bs.UNAUTHORIZED,void 0,void 0,!0)}return s}a(mD,"findAndValidateUser");async function i2(){global.hdb_users||await Sc();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(i2,"getSuperUser");async function o2(){let e=await zf(),t=KJ.getConfigFromFile(sD.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!un.isEmpty(r)&&r?.role?.role===sD.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=KT.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+iD.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+iD.SERVER_SUFFIX.ADMIN,r}a(o2,"getClusterUser");var SD=[];QT.invalidateUser=function(e){for(let t of SD)try{t(e)}catch(r){jJ.error("Error invalidating user",r)}};QT.onInvalidatedUser=function(e){SD.push(e)}});var bu=R((fSe,OD)=>{"use strict";var ua=k(),_n=L(),a2=Zw(),_Se=Bn(),dSe=Ei(),c2=Ur(),{validateEvent:gD}=os(),Ou=Hn(),l2=require("process"),{resetDatabases:u2}=(Re(),ae(Ve)),_2={[_n.ITC_EVENT_TYPES.SCHEMA]:d2,[_n.ITC_EVENT_TYPES.USER]:AD};async function d2(e){let t=gD(e);if(t){ua.error(t);return}ua.trace("ITC schemaHandler received schema event:",e),await a2(e.message),await f2(e.message)}a(d2,"schemaHandler");async function f2(e){try{Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=u2();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ua.error(t)}}a(f2,"syncSchemaMetadata");var RD=[];async function AD(e){try{try{Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ua.warn(r)}let t=gD(e);if(t){ua.error(t);return}ua.trace(`ITC userHandler ${_n.HDB_ITC_CLIENT_PREFIX}${l2.pid} received user event:`,e),await c2.setUsersToGlobal();for(let r of RD)r()}catch(t){ua.error(t)}}a(AD,"userHandler");AD.addListener=function(e){RD.push(e)};OD.exports=_2});var os=R((TSe,ND)=>{"use strict";var hSe=k(),jT=Y(),E2=L(),{ITC_ERRORS:Nu}=nn(),{parentPort:pSe,threadId:h2,isMainThread:p2,workerData:mSe}=require("worker_threads"),{onMessageFromWorkers:m2,broadcast:SSe,broadcastWithAcknowledgement:S2}=rt();ND.exports={sendItcEvent:T2,validateEvent:bD,SchemaEventMsg:g2,UserEventMsg:R2};var Jf;m2(async(e,t)=>{Jf=Jf||bu(),bD(e),Jf[e.type]&&await Jf[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function T2(e){return!p2&&e.message&&(e.message.originator=h2),S2(e)}a(T2,"sendItcEvent");function bD(e){if(typeof e!="object")return Nu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||jT.isEmpty(e.type))return Nu.MISSING_TYPE;if(!e.hasOwnProperty("message")||jT.isEmpty(e.message))return Nu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||jT.isEmpty(e.message.originator))return Nu.MISSING_ORIGIN;if(E2.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Nu.INVALID_EVENT(e.type)}a(bD,"validateEvent");function g2(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(g2,"SchemaEventMsg");function R2(e){this.originator=e}a(R2,"UserEventMsg")});var hi=R((ASe,CD)=>{"use strict";var yD=L(),RSe=Y(),Xf=k(),ID=zw(),Tc,{sendItcEvent:wD}=os();function A2(e){try{Xf.trace("signalSchemaChange called with message:",e),Tc=Tc||bu();let t=new ID(yD.ITC_EVENT_TYPES.SCHEMA,e);return Tc.schema(t),wD(t)}catch(t){Xf.error(t)}}a(A2,"signalSchemaChange");function O2(e){try{Xf.trace("signalUserChange called with message:",e),Tc=Tc||bu();let t=new ID(yD.ITC_EVENT_TYPES.USER,e);return Tc.user(t),wD(t)}catch(t){Xf.error(t)}}a(O2,"signalUserChange");CD.exports={signalSchemaChange:A2,signalUserChange:O2}});var Zf=R((bSe,LD)=>{"use strict";var DD=Y(),b2=L(),N2=k(),y2=Lf(),I2=Df(),w2=hi(),{SchemaEventMsg:C2}=os(),D2="already exists in";LD.exports=L2;async function L2(e,t,r){if(DD.isEmptyOrZeroLength(r))return r;let n=[];DD.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await P2(e,t.schema,t.name,i)})),s}a(L2,"lmdbCheckForNewAttributes");async function P2(e,t,r,n){let s=new I2(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await M2(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(D2))N2.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(P2,"createNewAttribute");async function M2(e){let t;return t=await y2(e),w2.signalSchemaChange(new C2(process.pid,b2.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(M2,"createAttribute")});var gc=R((ySe,PD)=>{"use strict";var zT=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};PD.exports=zT});var UD=R((wSe,MD)=>{"use strict";var U2=gc(),v2=L().OPERATIONS_ENUM,JT=class extends U2{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(v2.INSERT,r,n,s,i),this.records=t}};MD.exports=JT});var BD=R((DSe,vD)=>{"use strict";var B2=gc(),H2=L().OPERATIONS_ENUM,XT=class extends B2{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(H2.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};vD.exports=XT});var xD=R((PSe,HD)=>{"use strict";var x2=gc(),G2=L().OPERATIONS_ENUM,ZT=class extends x2{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(G2.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};HD.exports=ZT});var qD=R((USe,GD)=>{"use strict";var q2=gc(),F2=L().OPERATIONS_ENUM,eg=class extends q2{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(F2.DELETE,n,s,t,i),this.original_records=r}};GD.exports=eg});var yu=R((HSe,VD)=>{"use strict";var BSe=require("path"),FD=Ye(),k2=UD(),$2=BD(),V2=xD(),Y2=qD(),Rc=_t(),kD=Y(),{CONFIG_PARAMS:K2}=L(),$D=X();$D.initSync();var eE=L().OPERATIONS_ENUM,{getTransactionAuditStorePath:W2}=Je();VD.exports=Q2;async function Q2(e,t){if($D.get(K2.LOGGING_AUDITLOG)===!1)return;let r=W2(e.schema,e.table),n=await FD.openEnvironment(r,e.table,!0),s=j2(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){FD.initializeDBIs(n,Rc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Rc.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),kD.isEmpty(s.user_name)||n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(Q2,"writeTransaction");function j2(e,t){let r=kD.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===eE.INSERT)return new k2(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.UPDATE)return new $2(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.UPSERT)return new V2(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.DELETE)return new Y2(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(j2,"createTransactionObject")});var tg=R((qSe,YD)=>{"use strict";var z2=Su(),GSe=tu(),Iu=L(),J2=ru(),X2=Zo().insertRecords,Z2=Ye(),e4=k(),t4=Zf(),{getSchemaPath:r4}=Je(),n4=yu();YD.exports=s4;async function s4(e){try{let{schema_table:t,attributes:r}=z2(e);J2(e,r,t.hash_attribute),e.schema!==Iu.SYSTEM_SCHEMA_NAME&&(r.includes(Iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await t4(e.hdb_auth_header,t,r),s=r4(e.schema,e.table),i=await Z2.openEnvironment(s,e.table),o=await X2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await n4(e,o)}catch(c){e4.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(s4,"lmdbCreateRecords")});var QD=R((kSe,WD)=>{"use strict";var KD=L(),i4=tg(),o4=tu(),a4=require("fs-extra"),{getSchemaPath:c4}=Je();WD.exports=l4;async function l4(e){let t=[{name:e.schema,createddate:Date.now()}],r=new o4(KD.SYSTEM_SCHEMA_NAME,KD.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await i4(r),await a4.mkdirp(c4(e.schema))}a(l4,"lmdbCreateSchema")});var zD=R((VSe,jD)=>{"use strict";var rg=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};jD.exports=rg});var eL=R((jSe,ZD)=>{"use strict";var JD=Ye(),ng=wr(),sg=nn().LMDB_ERRORS_ENUM,u4=_t(),XD=k(),KSe=Y(),_4=require("lmdb"),d4=zD(),f4=L(),{OVERFLOW_MARKER:WSe,MAX_SEARCH_KEY_LENGTH:QSe}=u4,E4=f4.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function h4(e,t,r,n){if(ng.validateEnv(e),t===void 0)throw new Error(sg.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(sg.IDS_REQUIRED):new Error(sg.IDS_MUST_BE_ITERABLE);try{let s=JD.listDBIs(e);JD.initializeDBIs(e,t,s);let i=new d4,o,c=[],l=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[E4]>n){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,_4.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let g=s[S];if(!h.hasOwnProperty(g)||g===t)continue;let T=e.dbis[g],b=h[g];if(b!=null)try{let N=ng.getIndexedValues(b);if(N)for(let U=0,v=N.length;U<v;U++)T.remove(N[U],o)}catch{XD.warn(`cannot delete from attribute: ${g}, ${b}:${o}`)}}});c.push(m),l.push(o),i.original_records.push(h)}catch(h){XD.warn(h),i.skipped.push(o)}let _=[],u=await Promise.all(c);for(let E=0,f=u.length;E<f;E++)u[E]===!0?i.deleted.push(l[E]):(i.skipped.push(l[E]),_.push(E));let d=0;for(let E=0;E<_.length;E++){let f=_[E];i.original_records.splice(f-d,1),d++}return i.txn_time=ng.getNextMonotonicTime(),i}catch(s){throw s}}a(h4,"deleteRecords");ZD.exports={deleteRecords:h4}});var wu=R((JSe,rL)=>{"use strict";var Ac=Y(),p4=eL(),m4=Ye(),{getSchemaPath:S4}=Je(),T4=yu(),g4=k();rL.exports=R4;async function R4(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ac.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ac.isEmptyOrZeroLength(e.hash_values)&&!Ac.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Ac.isEmpty(l)||e.hash_values.push(l)}}if(Ac.isEmptyOrZeroLength(e.hash_values))return tL([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ac.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=S4(e.schema,e.table),i=await m4.openEnvironment(s,e.table),o=await p4.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await T4(e,o)}catch(c){g4.error(`unable to write transaction due to ${c.message}`)}return tL(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(R4,"lmdbDeleteRecords");function tL(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(tL,"createDeleteResponse")});var og=R((eTe,nL)=>{"use strict";var A4=L(),ZSe=wr();function ig(e,t){let r=Object.create(null);if(t.length===1&&A4.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(ig,"parseRow");function O4(e,t,r,n){let s=ig(r,e);n.push(s)}a(O4,"searchAll");function b4(e,t,r,n){let s=ig(r,e);n[t]=s}a(b4,"searchAllToMap");function N4(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(N4,"iterateDBI");function _a(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(_a,"pushResults");function y4(e,t,r,n,s,i){t.toString().endsWith(e)&&_a(t,r,n,s,i)}a(y4,"endsWith");function I4(e,t,r,n,s,i){t.toString().includes(e)&&_a(t,r,n,s,i)}a(I4,"contains");function w4(e,t,r,n,s,i){t>e&&_a(t,r,n,s,i)}a(w4,"greaterThanCompare");function C4(e,t,r,n,s,i){t>=e&&_a(t,r,n,s,i)}a(C4,"greaterThanEqualCompare");function D4(e,t,r,n,s,i){t<e&&_a(t,r,n,s,i)}a(D4,"lessThanCompare");function L4(e,t,r,n,s,i){t<=e&&_a(t,r,n,s,i)}a(L4,"lessThanEqualCompare");nL.exports={parseRow:ig,searchAll:O4,searchAllToMap:b4,iterateDBI:N4,endsWith:y4,contains:I4,greaterThanCompare:w4,greaterThanEqualCompare:C4,lessThanCompare:D4,lessThanEqualCompare:L4,pushResults:_a}});var Oc=R((iTe,uL)=>{"use strict";var uo=Ye(),rTe=k(),dn=wr(),tE=_t(),Tt=nn().LMDB_ERRORS_ENUM,nTe=Y(),P4=L(),rE=og(),{parseRow:M4}=rE,sTe=require("lmdb"),{OVERFLOW_MARKER:sL,MAX_SEARCH_KEY_LENGTH:U4}=tE;function iL(e,t,r,n=!1,s=void 0,i=void 0){return da(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(iL,"iterateFullIndex");function Cu(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return da(e,t,r,(u,d,E,f)=>{let T={transaction:u,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!_,exclusiveStart:i===!0?_:l};return f===r?(T.values=!1,d.getRange(T).map(b=>({value:b}))):d.getRange(T)})}a(Cu,"iterateRangeBetween");function da(e,t,r,n){let s=e.database||e,i=uo.openDBI(s,r);i[tE.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&uo.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(da,"setupTransaction");function oL(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(sL)){if(!s)if(r)s=uo.openDBI(e,r);else{let l=uo.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=uo.openDBI(e,l[_]),!s[tE.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(oL,"getOverflowCheck");function v4(e,t,r,n=!1,s=void 0,i=void 0){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);return da(e,t,t,(o,c,l)=>(nE(r),r=Du(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>M4(_.value,r))))}a(v4,"searchAll");function B4(e,t,r,n=!1,s=void 0,i=void 0){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);nE(r),r=Du(e.database||e,r);let o=new Map;for(let{key:c,value:l}of iL(e,t,t,n,s,i))o.set(c,rE.parseRow(l,r));return o}a(B4,"searchAllToMap");function H4(e,t,r=!1,n=void 0,s=void 0){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=iL(e,void 0,t,r,n,s),c=o.transaction,l=oL(c.database,c,void 0,t);for(let{key:_,value:u}of o){let d=l(_,u);i[d]===void 0&&(i[d]=[]),i[d].push(u)}return i}a(H4,"iterateDBI");function x4(e,t){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);return uo.statDBI(e,t).entryCount}a(x4,"countAll");function G4(e,t,r,n,s=!1,i=void 0,o=void 0){return _o(e,r,n),da(e,t,r,(c,l,_,u)=>(n=dn.convertKeyValueToWrite(n),u===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(G4,"equals");function q4(e,t,r){return _o(e,t,r),uo.openDBI(e,t).getValuesCount(r)}a(q4,"count");function F4(e,t,r,n,s=!1,i=void 0,o=void 0){return _o(e,r,n),da(e,null,r,(c,l)=>{n=dn.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let u;if(s===!0){let d;for(let E of l.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),u=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(n))return E;if(_===!0)return u.DONE}}),u.filter(E=>E)}else return u=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return u.DONE}),_?u:u.filter(d=>d)})}a(F4,"startsWith");function k4(e,t,r,n,s=!1,i=void 0,o=void 0){return aL(e,t,r,n,s,i,o,!0)}a(k4,"endsWith");function aL(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return _o(e,r,n),da(e,null,r,(l,_,u,d)=>{let E=oL(u,l,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(sL)?_.getValues(f,{transaction:l}).map(m=>{let S=E(f,m);if(c?S.endsWith(n):S.includes(n))return{key:S,value:m}}).filter(m=>m):(c?h.endsWith(n):h.includes(n))?_[tE.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:_.getValues(f,{transaction:l}).map(m=>({key:f,value:m})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(aL,"contains");function $4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Cu(e,t,r,n,l,s,i,o,!0,!1)}a($4,"greaterThan");function V4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Cu(e,t,r,n,l,s,i,o,!1,!1)}a(V4,"greaterThanEqual");function Y4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Cu(e,t,r,l,n,s,i,o,!1,!0)}a(Y4,"lessThan");function K4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Cu(e,t,r,l,n,s,i,o,!1,!1)}a(K4,"lessThanEqual");function W4(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(dn.validateEnv(e),r===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Tt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Tt.END_VALUE_REQUIRED);if(n=dn.convertKeyValueToWrite(n),s=dn.convertKeyValueToWrite(s),n>s)throw new Error(Tt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Cu(e,t,r,n,s,i,o,c)}a(W4,"between");function Q4(e,t,r,n){dn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(nE(r),r=Du(s,r),n===void 0)throw new Error(Tt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=rE.parseRow(c,r)),o}a(Q4,"searchByHash");function j4(e,t,r){dn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Tt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(j4,"checkHashExists");function z4(e,t,r,n,s=[]){return lL(e,t,r,n,s),cL(e,t,r,n,s).map(i=>i[1])}a(z4,"batchSearchByHash");function J4(e,t,r,n,s=[]){lL(e,t,r,n,s);let i=new Map;for(let[o,c]of cL(e,t,r,n,s))i.set(o,c);return i}a(J4,"batchSearchByHashToMap");function cL(e,t,r,n,s=[]){return da(e,t,t,(i,o,c)=>{r=Du(c,r);let l=r.length<3;return n.map(_=>{let u=c.dbis[t].get(_,{transaction:i,lazy:l});if(u)return[_,rE.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(cL,"batchHashSearch");function lL(e,t,r,n,s){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(nE(r),n==null)throw new Error(Tt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Tt.IDS_MUST_BE_ITERABLE)}a(lL,"initializeBatchSearchByHash");function nE(e){if(!Array.isArray(e))throw e===void 0?new Error(Tt.FETCH_ATTRIBUTES_REQUIRED):new Error(Tt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(nE,"validateFetchAttributes");function _o(e,t,r){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Tt.SEARCH_VALUE_REQUIRED);if(r?.length>U4)throw new Error(Tt.SEARCH_VALUE_TOO_LARGE)}a(_o,"validateComparisonFunctions");function Du(e,t){return t.length===1&&P4.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=uo.listDBIs(e)),t}a(Du,"setGetWholeRowAttributes");uL.exports={searchAll:v4,searchAllToMap:B4,count:q4,countAll:x4,equals:G4,startsWith:F4,endsWith:k4,contains:aL,searchByHash:Q4,setGetWholeRowAttributes:Du,batchSearchByHash:z4,batchSearchByHashToMap:J4,checkHashExists:j4,iterateDBI:H4,greaterThan:$4,greaterThanEqual:V4,lessThan:Y4,lessThanEqual:K4,between:W4}});var bc=R((aTe,hL)=>{var _L=require("lodash"),dL=nt(),me=require("joi"),X4=Y(),{hdb_schema_table:Lu,checkValidTable:fL,hdb_table:EL,hdb_database:sE}=Ps(),{handleHDBError:Z4,hdb_errors:e3}=ie(),{getDatabases:t3}=(Re(),ae(Ve)),{HTTP_STATUS_CODES:r3}=e3,n3=me.object({database:sE,schema:sE,table:EL,search_attribute:Lu,search_value:me.any().required(),get_attributes:me.array().min(1).items(me.alternatives(Lu,me.object())).optional(),desc:me.bool(),limit:me.number().integer().min(1),offset:me.number().integer().min(0)}),s3=me.object({database:sE,schema:sE,table:EL,operator:me.string().valid("and","or").default("and").lowercase(),offset:me.number().integer().min(0),limit:me.number().integer().min(1),get_attributes:me.array().min(1).items(me.alternatives(Lu,me.object())).optional(),sort:me.object({attribute:me.alternatives(Lu,me.array().min(1)),descending:me.bool().optional()}).optional(),conditions:me.array().min(1).items(me.alternatives(me.object({operator:me.string().valid("and","or").default("and").lowercase(),conditions:me.array()}),me.object({search_attribute:me.alternatives(Lu,me.array().min(1)),search_type:me.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:me.when("search_type",{switch:[{is:"equals",then:me.any()},{is:"between",then:me.array().items(me.alternatives([me.string(),me.number()])).length(2)}],otherwise:me.alternatives(me.string(),me.number())}).required()}))).required()});hL.exports=function(e,t){let r=null;switch(t){case"value":r=dL.validateBySchema(e,n3);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(fL("database",e.schema)),i(fL("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=dL.validateBySchema(e,s3);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=X4.checkGlobalSchemaTable(e.schema,e.table);if(s)return Z4(new Error,s,r3.NOT_FOUND);let o=t3()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(u=>{for(let d=0,E=u.conditions.length;d<E;d++){let f=u.conditions[d];f.conditions?l(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&l(e);let _=_L.filter(c,u=>u!=="*"&&!u.startsWith?.("$")&&u.attribute!=="*"&&!Array.isArray(u)&&!u.name&&!_L.some(o,d=>d===u||d.attribute===u||d.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var ag=R((lTe,pL)=>{"use strict";var i3=Ye(),o3=bc(),{getSchemaPath:a3}=Je();pL.exports=c3;function c3(e){let t=o3(e,"hashes");if(t)throw t;let r=a3(e.schema,e.table);return i3.openEnvironment(r,e.table)}a(c3,"initialize")});var cg=R((_Te,mL)=>{"use strict";var l3=Oc(),u3=ag();mL.exports=_3;async function _3(e){let t=await u3(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return l3.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(_3,"lmdbGetDataByHash")});var Nc=R((fTe,SL)=>{"use strict";var lg=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};SL.exports=lg});var gL=R((pTe,TL)=>{"use strict";var hTe=Nc(),d3=Oc(),f3=ag();TL.exports=E3;async function E3(e){let t=await f3(e),r=global.hdb_schema[e.schema][e.table];return d3.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(E3,"lmdbSearchByHash")});var as=R((STe,RL)=>{"use strict";var ug=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,_=void 0,u=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=_,this.offset=u}};RL.exports=ug});var iE=R((gTe,IL)=>{"use strict";var Er=Oc(),h3=Ye(),p3=Y(),Se=_t(),fa=L(),m3=_i(),AL=nn().LMDB_ERRORS_ENUM,{getSchemaPath:S3}=Je(),pi=fa.SEARCH_WILDCARDS;async function T3(e,t,r){let n;e.schema===fa.SYSTEM_SCHEMA_NAME?n=m3[e.table]:n=global.hdb_schema[e.schema][e.table];let s=yL(e,n.hash_attribute,r,t);return bL(e,s,n.hash_attribute,r)}a(T3,"prepSearch");async function bL(e,t,r,n){let s=S3(e.schema,e.table),i=await h3.openEnvironment(s,e.table),o=NL(i,e,t,r),c=o.transaction||i;if([Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Se.SEARCH_TYPES.SEARCH_ALL,Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(g3(e,r)===!1){let u=e.search_attribute;if(u===r)return n?OL(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[u]:E.key}),"toObject");return n?OL(o,d):o.map(d)}let _=e.search_attribute===r?o.map(u=>u.key):o.map(u=>u.value);return n===!0?Er.batchSearchByHashToMap(c,r,e.get_attributes,_):Er.batchSearchByHash(c,r,e.get_attributes,_)}a(bL,"executeSearch");function NL(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case Se.SEARCH_TYPES.EQUALS:s=Er.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.CONTAINS:s=Er.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.ENDS_WITH:case Se.SEARCH_TYPES._ENDS_WITH:s=Er.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.STARTS_WITH:case Se.SEARCH_TYPES._STARTS_WITH:s=Er.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Er.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Er.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Se.SEARCH_TYPES.SEARCH_ALL:return Er.searchAll(e,n,t.get_attributes,o,c,l);case Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Er.searchAllToMap(e,n,t.get_attributes,o,c,l);case Se.SEARCH_TYPES.BETWEEN:s=Er.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case Se.SEARCH_TYPES.GREATER_THAN:case Se.SEARCH_TYPES._GREATER_THAN:s=Er.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.GREATER_THAN_EQUAL:case Se.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Er.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.LESS_THAN:case Se.SEARCH_TYPES._LESS_THAN:s=Er.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.LESS_THAN_EQUAL:case Se.SEARCH_TYPES._LESS_THAN_EQUAL:s=Er.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(NL,"searchByType");function OL(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(OL,"createMapFromIterable");function g3(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(g3,"checkToFetchMore");function yL(e,t,r,n){if(p3.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),pi.indexOf(s)>-1)return r===!0?Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Se.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(pi[0])<0&&s.indexOf(pi[1])<0)return c===!0?r===!0?Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Se.SEARCH_TYPES.EQUALS;if(pi.indexOf(i)>=0&&pi.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Se.SEARCH_TYPES.CONTAINS;if(pi.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Se.SEARCH_TYPES.ENDS_WITH;if(pi.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Se.SEARCH_TYPES.STARTS_WITH;if(s.includes(pi[0])||s.includes(pi[1]))return Se.SEARCH_TYPES.EQUALS;throw new Error(AL.UNKNOWN_SEARCH_TYPE)}else switch(n){case fa.VALUE_SEARCH_COMPARATORS.BETWEEN:return Se.SEARCH_TYPES.BETWEEN;case fa.VALUE_SEARCH_COMPARATORS.GREATER:return Se.SEARCH_TYPES.GREATER_THAN;case fa.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Se.SEARCH_TYPES.GREATER_THAN_EQUAL;case fa.VALUE_SEARCH_COMPARATORS.LESS:return Se.SEARCH_TYPES.LESS_THAN;case fa.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Se.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(AL.UNKNOWN_SEARCH_TYPE)}}a(yL,"createSearchTypeFromSearchObject");IL.exports={executeSearch:bL,createSearchTypeFromSearchObject:yL,prepSearch:T3,searchByType:NL}});var CL=R((OTe,wL)=>{"use strict";var ATe=as(),R3=bc(),A3=Y(),O3=L(),b3=iE();wL.exports=N3;function N3(e,t){if(!A3.isEmpty(t)&&O3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=R3(e,"value");if(n)throw n;return b3.prepSearch(e,t,!0)}a(N3,"lmdbGetDataByValue")});var Pu=R((yTe,DL)=>{"use strict";var NTe=as(),y3=bc(),I3=Y(),w3=L(),C3=iE();DL.exports=D3;async function D3(e,t){if(!I3.isEmpty(t)&&w3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=y3(e,"value");if(n)throw n;return C3.prepSearch(e,t,!1)}a(D3,"lmdbSearchByValue")});var PL=R((CTe,LL)=>{"use strict";var wTe=_t(),_g=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},dg=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},fg=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};LL.exports={SearchByConditionsObject:_g,SearchCondition:dg,SortAttribute:fg}});var HL=R((MTe,BL)=>{"use strict";var LTe=PL().SearchByConditionsObject,L3=as(),P3=bc(),Eg=Oc(),oE=_t(),{Resource:PTe}=(Mn(),ae(hg)),vL=iE(),M3=og(),U3=require("lodash"),{getSchemaPath:v3}=Je(),ML=Ye(),{handleHDBError:B3,hdb_errors:H3}=ie(),{HTTP_STATUS_CODES:x3}=H3,G3=1e8;BL.exports=q3;async function q3(e){let t=P3(e,"conditions");if(t)throw B3(t,t.message,x3.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=v3(e.schema,e.table),n=await ML.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)ML.openDBI(n,_.search_attribute);let i=U3.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===oE.SEARCH_TYPES.EQUALS?_.estimated_count=Eg.count(n,_.search_attribute,_.search_value):u===oE.SEARCH_TYPES.CONTAINS||u===oE.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=G3}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await UL(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],u=i.slice(1).map(vL.filterByType),d=u.length,E=Eg.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(f=>_.get(f,{transaction:o,lazy:!0})),d>0&&(l=l.filter(f=>{for(let h=0;h<d;h++)if(!u[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(f=>M3.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await UL(o,e,E,s.hash_attribute);c=c.concat(f)}let _=new Set,u=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(u,e.limit&&e.limit+u),l=Eg.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(q3,"lmdbSearchByConditions");async function UL(e,t,r,n){let s=new L3(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===oE.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,vL.searchByType(e,s,i,n).map(o=>o.value)}a(UL,"executeConditionSearch")});var Mu=R((vTe,xL)=>{"use strict";var F3=L().OPERATIONS_ENUM,pg=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=F3.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};xL.exports=pg});var mg=R((HTe,KL)=>{"use strict";var kL=as(),$L=Mu(),VL=Pu(),YL=wu(),vr=L(),GL=Y(),qL=Ye(),{getTransactionAuditStorePath:k3,getSchemaPath:$3}=Je(),FL=k();KL.exports=V3;async function V3(e){try{if(GL.isEmpty(global.hdb_schema[e.schema])||GL.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Y3(e),await K3(e);let t=$3(e.schema,e.table);try{await qL.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")FL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=k3(e.schema,e.table);await qL.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")FL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(V3,"lmdbDropTable");async function Y3(e){let t=new kL(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await VL(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new $L(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await YL(s)}a(Y3,"deleteAttributesFromSystem");async function K3(e){let t=new kL(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,vr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await VL(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new $L(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await YL(s)}catch(i){throw i}}a(K3,"dropTableFromSystem")});var QL=R((GTe,WL)=>{"use strict";var W3=require("fs-extra"),Q3=as(),j3=Nc(),z3=Mu(),J3=mg(),X3=wu(),Z3=cg(),eX=Pu(),mi=L(),{getSchemaPath:tX}=Je(),{handleHDBError:rX,hdb_errors:nX}=ie(),{HDB_ERROR_MSGS:sX,HTTP_STATUS_CODES:iX}=nX;WL.exports=oX;async function oX(e){let t;try{t=await aX(e.schema);let r=new Q3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await eX(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await J3(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new z3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await X3(s);let i=tX(t);await W3.remove(i)}catch(r){throw r}}a(oX,"lmdbDropSchema");async function aX(e){let t=new j3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await Z3(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw rX(new Error,sX.SCHEMA_NOT_FOUND(e),iX.NOT_FOUND,void 0,void 0,!0);return n}a(aX,"validateDropSchema")});var Uu=R((FTe,jL)=>{"use strict";var Sg=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};jL.exports=Sg});var gg=R((VTe,zL)=>{"use strict";var cX=require("fs-extra"),aE=Ye(),{getTransactionAuditStorePath:lX}=Je(),Tg=_t(),$Te=Uu();zL.exports=uX;async function uX(e){let t;try{let r=lX(e.schema,e.table);await cX.mkdirp(r),t=await aE.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{aE.createDBI(t,Tg.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),aE.createDBI(t,Tg.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),aE.createDBI(t,Tg.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(uX,"createTransactionsAuditEnvironment")});var eP=R((KTe,ZL)=>{"use strict";var Rg=L(),JL=Ye(),_X=Zo(),{getSystemSchemaPath:dX,getSchemaPath:fX}=Je(),EX=_i(),hX=Lf(),Ag=Df(),pX=k(),mX=gg(),bg=EX.hdb_table,XL=[];for(let e=0;e<bg.attributes.length;e++)XL.push(bg.attributes[e].attribute);ZL.exports=SX;async function SX(e,t){let r=fX(t.schema,t.table),n=new Ag(t.schema,t.table,Rg.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Ag(t.schema,t.table,Rg.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Ag(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await JL.createEnvironment(r,t.table),e!==void 0){let o=await JL.openEnvironment(dX(),Rg.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await _X.insertRecords(o,bg.hash_attribute,XL,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Og(n),await Og(s),await Og(i)}await mX(t)}catch(o){throw o}}a(SX,"lmdbCreateTable");async function Og(e){try{await hX(e)}catch(t){pX.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Og,"createAttribute")});var rP=R((QTe,tP)=>{"use strict";var TX=Su(),gX=ru(),RX=Zf(),vu=L(),AX=Zo().updateRecords,OX=Ye(),{getSchemaPath:bX}=Je(),NX=yu(),yX=k();tP.exports=IX;async function IX(e){try{let{schema_table:t,attributes:r}=TX(e);gX(e,r,t.hash_attribute),e.schema!==vu.SYSTEM_SCHEMA_NAME&&(r.includes(vu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(vu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(vu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(vu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await RX(e.hdb_auth_header,t,r),s=bX(e.schema,e.table),i=await OX.openEnvironment(s,e.table),o=await AX(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await NX(e,o)}catch(c){yX.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(IX,"lmdbUpdateRecords")});var sP=R((zTe,nP)=>{"use strict";var wX=L().OPERATIONS_ENUM,Ng=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=wX.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};nP.exports=Ng});var oP=R((ZTe,iP)=>{"use strict";var XTe=sP(),CX=Su(),DX=ru(),LX=Zf(),Bu=L(),PX=Zo().upsertRecords,MX=Ye(),{getSchemaPath:UX}=Je(),vX=yu(),BX=k(),{handleHDBError:HX,hdb_errors:xX}=ie();iP.exports=GX;async function GX(e){let t;try{t=CX(e)}catch(l){throw HX(l,l.message,xX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;DX(e,n,r.hash_attribute),e.schema!==Bu.SYSTEM_SCHEMA_NAME&&(n.includes(Bu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Bu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Bu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Bu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await LX(e.hdb_auth_header,r,n),i=UX(e.schema,e.table),o=await MX.openEnvironment(i,e.table),c=await PX(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await vX(e,c)}catch(l){BX.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(GX,"lmdbUpsertRecords")});var cP=R((tge,aP)=>{"use strict";var yg=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};aP.exports=yg});var uP=R((nge,lP)=>{"use strict";var Ig=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};lP.exports=Ig});var fP=R((oge,dP)=>{"use strict";var wg=Ye(),{getTransactionAuditStorePath:qX}=Je(),ige=cP(),Hu=_t(),FX=Y(),_P=uP(),kX=require("util").promisify,$X=kX(setTimeout),VX=1e4,YX=100;dP.exports=KX;async function KX(e){let t=qX(e.schema,e.table),r=await wg.openEnvironment(t,e.table,!0),n=wg.listDBIs(r);wg.initializeDBIs(r,Hu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new _P;do s=await WX(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await $X(YX);while(s.transactions_deleted>0);return i}a(KX,"deleteAuditLogsBefore");async function WX(e,t){let r=new _P;try{let n=e.dbis[Hu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[Hu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];FX.isEmpty(c)||(s=e.dbis[Hu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Hu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>VX)break}return await s,r}catch(n){throw n}}a(WX,"deleteTransactions")});var hP=R((cge,EP)=>{"use strict";var Cg=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};EP.exports=Cg});var mP=R((_ge,pP)=>{"use strict";var QX=as(),jX=Mu(),uge=hP(),Hs=L(),zX=Y(),Dg=Ye(),JX=_i(),XX=Pu(),ZX=wu(),{getSchemaPath:eZ}=Je();pP.exports=tZ;async function tZ(e,t=!0){let r;e.schema===Hs.SYSTEM_SCHEMA_NAME?r=JX[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await nZ(e),s=eZ(e.schema,e.table),i=await Dg.openEnvironment(s,e.table);return t===!0&&await rZ(e,i,r.hash_attribute),Dg.dropDBI(i,e.attribute),n}a(tZ,"lmdbDropAttribute");async function rZ(e,t,r){let n=Dg.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let _={};for(let u in c)u!==i&&(_[u]=c[u]);s=t.dbis[r].put(o,_,l)}await s}a(rZ,"removeAttributeFromAllObjects");async function nZ(e){let t=new QX(Hs.SYSTEM_SCHEMA_NAME,Hs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await XX(t)).filter(o=>o[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(zX.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new jX(Hs.SYSTEM_SCHEMA_NAME,Hs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return ZX(i)}a(nZ,"dropAttributeFromSystem")});var OP=R((Ege,AP)=>{"use strict";var Lg=Ye(),yc=_t(),fge=wr(),Pg=L(),SP=Y(),{getTransactionAuditStorePath:sZ}=Je(),iZ=Oc(),cE=gc(),oZ=k();AP.exports=aZ;async function aZ(e){let t=sZ(e.schema,e.table),r=await Lg.openEnvironment(t,e.table,!0),n=Lg.listDBIs(r);Lg.initializeDBIs(r,yc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Pg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return TP(r,e.search_values);case Pg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,lZ(r,e.search_values,s);case Pg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return cZ(r,e.search_values);default:return TP(r)}}a(aZ,"readAuditLog");function TP(e,t=[0,Date.now()]){SP.isEmpty(t[0])&&(t[0]=0),SP.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[yc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new cE,s))}a(TP,"searchTransactionsByTimestamp");function cZ(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[yc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,RP(e,i))}return Object.fromEntries(r)}a(cZ,"searchTransactionsByUsername");function lZ(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=iZ.equals(e,yc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,yc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of u){let E=Number(d);n.has(E)?n.get(E).push(_.toString()):n.set(E,[_.toString()])}}let s=Array.from(n.keys()),i=RP(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);gP(l,"records",r,u,o),gP(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(lZ,"searchTransactionsByHashValues");function gP(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let _=s.get(l),u=_[_.length-1];if(u.timestamp===i)u[t]=[c];else{let d=new cE(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new cE(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(l,[_])}}}a(gP,"loopRecords");function RP(e,t){let r=[];try{let n=e.dbis[yc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new cE,i);r.push(o)}}catch(i){oZ.warn(i)}return r}catch(n){throw n}}a(RP,"batchSearchTransactions")});var NP=R((Sge,bP)=>{"use strict";var{getSchemaPath:pge}=Je(),mge=Ye(),{database:uZ}=(Re(),ae(Ve));bP.exports={writeTransaction:_Z};async function _Z(e,t,r){return uZ({database:e,table:t}).transaction(r)}a(_Z,"writeTransaction")});var CP=R((gge,wP)=>{"use strict";var{getSchemaPath:yP}=Je(),IP=Ye();wP.exports={flush:dZ,resetReadTxn:fZ};async function dZ(e,t){return(await IP.openEnvironment(yP(e,t),t.toString())).flushed}a(dZ,"flush");async function fZ(e,t){try{(await IP.openEnvironment(yP(e,t),t.toString())).resetReadTxn()}catch{}}a(fZ,"resetReadTxn")});var MP=R((Age,PP)=>{"use strict";var{Readable:EZ}=require("stream"),{getDatabases:hZ}=(Re(),ae(Ve)),{readSync:pZ,openSync:mZ,createReadStream:DP}=require("fs"),{open:SZ}=require("lmdb"),LP=_u(),TZ=du(),{AUDIT_STORE_OPTIONS:gZ}=(no(),ae(UP)),{INTERNAL_DBIS_NAME:RZ,AUDIT_STORE_NAME:AZ}=_t();PP.exports=bZ;var Mg=32768,OZ=100;async function bZ(e){let t=e.database||e.schema||"data",r=hZ()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let u=_.dbisDB,d=SZ({noSync:!0,maxDbs:TZ.MAX_DBS}),E,f=d.openDB(RZ,new LP(!1)),h=u.useReadTransaction(),m=0,S=a(async function(T,b){b.encoding="binary",b.encoder=void 0;let N=d.openDB(T,b),U=u.openDB(T,b);for(let{key:v,version:F,value:M}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=N.put(v,M,F),m++%OZ===0&&(await new Promise(W=>setTimeout(W,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:T,value:b}of u.getRange({transaction:h,start:!1}))if(s.some(N=>T.startsWith?.(N+"/"))){f.put(T,b);let[,N]=T.split("/"),U=!N,v=new LP(!U,U);await S(T,v)}e.include_audit&&await S(AZ,Object.assign({},gZ)),await E;let g=DP(d.path);return g.headers=l(),g.on("close",()=>{h.done(),d.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=mZ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Mg);pZ(c,_,0,Mg),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=DP(null,{fd:c,start:Mg}),E=new EZ.from(async function*(){yield _;for await(let f of d)u.openTimer&&(u.openTimer=0),yield f;u.done()}());return E.headers=l(),E});function l(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(bZ,"getBackup")});var HP=R((bge,BP)=>{"use strict";var NZ=k(),{handleHDBError:yZ}=ie(),IZ=tw(),wZ=Lf(),CZ=tg(),DZ=QD(),LZ=wu(),PZ=cg(),MZ=gL(),UZ=CL(),vZ=Pu(),BZ=HL(),HZ=QL(),xZ=eP(),GZ=rP(),qZ=oP(),FZ=fP(),kZ=mg(),$Z=mP(),VZ=OP(),YZ=NP(),vP=CP(),KZ=MP(),Ug=class extends IZ{static{a(this,"LMDBBridge")}async searchByConditions(t){return BZ(t)}async getDataByHash(t){return await PZ(t)}async searchByHash(t){return await MZ(t)}async getDataByValue(t,r){return await UZ(t,r)}async searchByValue(t){return await vZ(t)}async createSchema(t){return await DZ(t)}async dropSchema(t){return await HZ(t)}async createTable(t,r){return await xZ(t,r)}async dropTable(t){return await kZ(t)}async createAttribute(t){return await wZ(t)}async createRecords(t){return await CZ(t)}async updateRecords(t){return await GZ(t)}async upsertRecords(t){try{return await qZ(t)}catch(r){throw yZ(r,null,null,NZ.ERR,r)}}async deleteRecords(t){return await LZ(t)}async dropAttribute(t){return await $Z(t)}async deleteAuditLogsBefore(t){return await FZ(t)}async readAuditLog(t){return await VZ(t)}writeTransaction(t,r,n){return YZ.writeTransaction(t,r,n)}flush(t,r){return vP.flush(t,r)}resetReadTxn(t,r){return vP.resetReadTxn(t,r)}getBackup(t){return KZ(t)}};BP.exports=Ug});function zZ(){jZ=setInterval(function(){for(let e of vg)if(e.stale){let t=e[Ie]?.url;FP.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},QZ).unref()}var Bg,qP,FP,kP,$P,VP,xP,vg,WZ,xu,GP,Ea,lE,QZ,jZ,Hg=be(()=>{Bg=x(wr()),qP=x(ie()),FP=x(k());Mn();kP=x(X()),$P=x(L()),VP=x(Y()),xP=100,vg=new Set,WZ=(0,VP.convertToMS)(kP.get($P.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Ea=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;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.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),vg.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(vg.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(xu&&!this.overloadChecked&&performance.now()-GP>WZ)throw new qP.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}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||(0,Bg.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let f=d;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=d;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let m=d;m<this.validated;m++){let S=this.writes[m];if(!S)continue;let g=S[f===0?"before":"beforeIntermediate"];if(g){let T=g();h?h.push?h.push(T):h=[h,T]:h=T}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),l=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let E=d.store.ifVersion(d.key,d.entry?.version??null,l);s=s||E}else l();else for(let E of this.writes)c(E)},"nextCondition"),_=this.lmdbDb;if(this.writes.length>0&&(_?.retryRisk&&(_.retryRisk*=.99),this.writes.length+(_?.retryRisk||0)<xP>>n?l():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return xu||(xu=s,GP=performance.now(),xu.then(()=>{xu=null})),s.then(d=>d?(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}))):(_&&(_.retryRisk=(_.retryRisk||0)+xP/2),t?t.retries=n+1:t={retries:1},this.commit(t)));let u={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(E=>({txnTime:r,next:E}));u.next=d}return u}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},lE=class extends Ea{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Bg.getNextMonotonicTime)())}getReadTxn(){}},QZ=3e4;a(zZ,"startMonitoringTxns");zZ()});function it(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new Ea;e.timestamp&&(n.timestamp=e.timestamp),n[Ie]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var YP,ha=be(()=>{YP=require("../index");Mn();Hg();a(it,"transaction");(0,YP._assignPackageExport)("transaction",it);it.commit=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};it.abort=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var ZP={};$e(ZP,{ResourceBridge:()=>qg});function Fg({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 WP(e,t){let r=xs(e),n=Fg(e,r);if(!r)throw new cs.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache},o;it(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let _=c[l++],u;try{u=await r.get({id:_,lazy:s,select:n},i),u=u&&_E(u)}catch(d){u={message:d.toString()}}return t?{value:{key:_,value:u}}:{value:u}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function xs(e){let t=e.database||e.schema||XZ,r=Br()[t];if(!r)throw(0,cs.handleHDBError)(new Error,JZ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function QP(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*jP(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:l}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(l)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[l]})}n&&(yield n)}var zP,uE,cs,JP,ls,xg,Gg,XP,JZ,XZ,ZZ,e5,KP,qg,eM=be(()=>{"use strict";zP=x(HP()),uE=x(bc()),cs=x(ie());Re();JP=x(Su()),ls=x(L()),xg=x(hi()),Gg=x(os()),XP=x(Y());ha();dE();({HDB_ERROR_MSGS:JZ}=cs.hdb_errors),XZ="data",ZZ=1e4,e5=10,qg=class extends zP.default{static{a(this,"ResourceBridge")}constructor(t){super(t),KP=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,uE.default)(t,"conditions");if(r)throw(0,cs.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=xs(t);if(!n)throw new cs.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Fg(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new cs.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}St({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await xs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=xs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(_=>{if(!_){let{value:u,version:d}=r.primaryStore.getEntry(o);return i(o,u,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){xs(t).dropTable()}createSchema(t){return Ic({database:t.schema,table:null}),xg.signalSchemaChange(new Gg.SchemaEventMsg(process.pid,ls.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await kg(t.schema),xg.signalSchemaChange(new Gg.SchemaEventMsg(process.pid,ls.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,KP.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,JP.default)(t),s,i=Br()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return it(o,async c=>{if(!i.schemaDefined){s=[];for(let u of n)i.attributes.find(E=>E.name==u)||s.push(u);s.length>0&&await i.addAttributes(s.map(u=>({name:u,indexed:!0})))}let l=[],_=[];for(let u of t.records){let d=u[i.primaryKey],E=d!=null&&await i.get(d,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){_.push(u[i.primaryKey]);continue}E&&(E=_E(E));for(let f in u)if(Object.prototype.hasOwnProperty.call(u,f)){let h=u[f];if(typeof h=="function")try{let m=h([[E]]);Array.isArray(m)&&(h=m[0].func_val,u[f]=h)}catch(m){throw m.message+="Trying to set key "+f+" on object"+JSON.stringify(u),m}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(u,f)||(u[f]=E[f]);await(d==null?i.create(u,o):i.put(u,o)),l.push(u[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=Br()[t.schema][t.table],n={user:t.hdb_user};return it(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return QP(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Br()[t.schema][t.table];if(!r.createdTimeProperty)throw new cs.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:ls.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],_=a(async()=>{let u=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...u.deleted_hashes),o.push(...u.skipped_hashes),await(0,XP.async_set_timeout)(e5),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%ZZ===0&&await _();return l.length>0&&await _(),s?QP(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,uE.default)(t,"hashes");if(r)throw r;return WP(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of WP(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&ls.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,uE.default)(t,"value");if(n)throw n;let s=xs(t);if(!s)throw new cs.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===ls.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:Fg(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}async getDataByValue(t,r){let n=new Map,s=xs(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){xs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return xs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=xs(t),n={};switch(t.search_type){case ls.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case ls.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of jP(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return jP(r,t.search_values?.[0],t.search_values?.[1])}}};a(Fg,"getSelect");a(WP,"getRecords");a(xs,"getTable");a(QP,"createDeleteResponse");a(jP,"groupRecordsInHistory")});var Hn=R((Gge,tM)=>{"use strict";var{ResourceBridge:t5}=(eM(),ae(ZP)),r5=X();r5.initSync();var fE;function n5(){return fE||(fE=new t5,fE)}a(n5,"getBridge");tM.exports=n5()});var iM=R((Fge,sM)=>{"use strict";var rM=require("lodash"),Gu=require("mathjs"),s5=require("jsonata"),nM=Y();sM.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?rM.uniqWith(e,rM.isEqual):e,searchJSON:i5,mad:qu.bind(null,Gu.mad),mean:qu.bind(null,Gu.mean),mode:qu.bind(null,Gu.mode),prod:qu.bind(null,Gu.prod),median:qu.bind(null,Gu.median)};function qu(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(qu,"aggregateFunction");function i5(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(nM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),nM.isEmpty(this.__ala__.res[r])){let n=s5(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(i5,"searchJSON")});var aM=R(($ge,oM)=>{"use strict";var It=require("moment"),$g="YYYY-MM-DDTHH:mm:ss.SSSZZ";It.suppressDeprecationWarnings=!0;oM.exports={current_date:()=>It().utc().format("YYYY-MM-DD"),current_time:()=>It().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return It(e).utc().format("YYYY");case"month":return It(e).utc().format("MM");case"day":return It(e).utc().format("DD");case"hour":return It(e).utc().format("HH");case"minute":return It(e).utc().format("mm");case"second":return It(e).utc().format("ss");case"millisecond":return It(e).utc().format("SSS");default:break}},date:e=>It(e).utc().format($g),date_format:(e,t)=>It(e).utc().format(t),date_add:(e,t,r)=>It(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>It(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=It(e).utc(),s=It(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>It().utc().valueOf(),get_server_time:()=>It().format($g),offset_utc:(e,t)=>It(e).utc().utcOffset(t).format($g)}});var _M=R((Vge,uM)=>{"use strict";var o5=require("@turf/area"),a5=require("@turf/length"),c5=require("@turf/circle"),l5=require("@turf/difference"),u5=require("@turf/distance"),_5=require("@turf/boolean-contains"),d5=require("@turf/boolean-equal"),f5=require("@turf/boolean-disjoint"),E5=require("@turf/helpers"),cM=L(),Ae=Y(),Si=k();uM.exports={geoArea:h5,geoLength:p5,geoCircle:m5,geoDifference:S5,geoDistance:lM,geoNear:T5,geoContains:g5,geoEqual:R5,geoCrosses:A5,geoConvert:O5};function h5(e){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return o5.default(e)}catch(t){return Si.trace(t,e),NaN}}a(h5,"geoArea");function p5(e,t){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return a5.default(e,{units:t||"kilometers"})}catch(r){return Si.trace(r,e),NaN}}a(p5,"geoLength");function m5(e,t,r){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return c5.default(e,t,{units:r||"kilometers"})}catch(n){return Si.trace(n,e,t),NaN}}a(m5,"geoCircle");function S5(e,t){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return l5(e,t)}catch(r){return Si.trace(r,e,t),NaN}}a(S5,"geoDifference");function lM(e,t,r){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return u5.default(e,t,{units:r||"kilometers"})}catch(n){return Si.trace(n,e,t),NaN}}a(lM,"geoDistance");function T5(e,t,r,n){if(Ae.isEmpty(e)||Ae.isEmpty(t))return!1;if(Ae.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return lM(e,t,n)<=r}catch(s){return Si.trace(s,e,t),!1}}a(T5,"geoNear");function g5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return _5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(g5,"geoContains");function R5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return d5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(R5,"geoEqual");function A5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return!f5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(A5,"geoCrosses");function O5(e,t,r){if(Ae.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ae.isEmpty(t))throw new Error("geo_type is required");if(Ae.isEmpty(cM.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(cM.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ae.autoCastJSON(e)),E5[t](e,r)}a(O5,"geoConvert")});var EE=R((Kge,dM)=>{var pa=iM(),fn=aM(),Gs=_M();dM.exports=e=>{e.aggr.mad=e.aggr.MAD=pa.mad,e.aggr.mean=e.aggr.MEAN=pa.mean,e.aggr.mode=e.aggr.MODE=pa.mode,e.aggr.prod=e.aggr.PROD=pa.prod,e.aggr.median=e.aggr.MEDIAN=pa.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=pa.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=pa.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=fn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=fn.current_time,e.fn.extract=e.fn.EXTRACT=fn.extract,e.fn.date=e.fn.DATE=fn.date,e.fn.date_format=e.fn.DATE_FORMAT=fn.date_format,e.fn.date_add=e.fn.DATE_ADD=fn.date_add,e.fn.date_sub=e.fn.DATE_SUB=fn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=fn.date_diff,e.fn.now=e.fn.NOW=fn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=fn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=fn.get_server_time,e.fn.getdate=e.fn.GETDATE=fn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=fn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Gs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Gs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Gs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Gs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Gs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Gs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Gs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Gs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Gs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Gs.geoNear}});var pM=R((Wge,hM)=>{"use strict";var Fu=require("lodash"),Hr=require("alasql");Hr.options.cache=!1;var b5=EE(),fM=require("clone"),hE=require("recursive-iterator"),he=k(),Me=Y(),wc=Hn(),N5=L(),{hdb_errors:y5}=ie(),{getDatabases:EM}=(Re(),ae(Ve)),I5="IS NULL",us="There was a problem performing this search. Please check the logs and try again.";b5(Hr);var Vg=class{static{a(this,"SQLSearch")}constructor(t,r){if(Me.isEmpty(t))throw he.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(),Me.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Me.isEmptyOrZeroLength(n))return he.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw he.error("Error thrown from checkEmptySQL in SQLSearch class method search."),he.error(n),new Error(us)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw he.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),he.error(n),new Error(us)}if(Object.keys(this.data).length===0)return he.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw he.error("Error thrown from processJoins in SQLSearch class method search."),he.error(n),new Error(us)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw he.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),he.error(n),new Error(us)}try{return t=await this._finalSQL(),t}catch(n){throw he.error("Error thrown from finalSQL in SQLSearch class method search."),he.error(n),new Error(us)}}_getColumns(){let t=new hE(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(fM(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Fu.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=EM()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Me.isEmpty(this.statement.where)){he.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new hE(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Me.isEmpty(r)&&r.right)if(Me.isNotEmptyAndHasValue(r.right.value)){let n=Me.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Hr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Me.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Hr.yy.LogicValue({value:i}):n instanceof Hr.yy.StringValue&&Me.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Hr.yy.NumValue({value:i}))});if(t){he.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new hE(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Me.isEmpty(N5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Me.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Me.isEmptyOrZeroLength(r.left.columnid)||Me.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(Me.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"=":!Me.isEmpty(r.right.value)||!Me.isEmpty(r.left.value)?n.add(Me.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<l.length;_++)if(l[_].value)n.add(l[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(Me.isEmptyOrZeroLength(this.all_table_attributes)&&Me.isEmptyOrZeroLength(this.statement.from)&&Me.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Fu.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Me.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Me.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Me.isEmptyOrZeroLength(this.all_table_attributes)&&!Me.isEmptyOrZeroLength(this.columns.columns))return t;if(Me.isEmptyOrZeroLength(this.all_table_attributes)&&Me.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Hr.promise(r)}catch(r){throw he.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),he.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(fM(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Me.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(I5)>-1&&this.tables.forEach(s=>{let i={columnid:EM()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Fu.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Me.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Me.isEmptyOrZeroLength(this.exact_search_values[_].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[_].values);let u=await wc.getDataByHash(c);for(let d of c.hash_values)u.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(u){throw he.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),he.error(u),new Error(us)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async u=>{let d=Object.assign({},c);d.search_value=u;let E=await wc.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),he.error(u),new Error(us)}else if(!Me.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Me.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let u=this.comparator_search_values[_].comparators;for(let d=0,E=u.length;d<E;d++){let f=u[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await wc.getDataByValue(c,f.operation);if(l)for(let[m]of h)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...n[i]],this._setMergedHashAttribute(i,m));else for(let[m,S]of h)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]):(this.data[i].__merged_data[m]=[...n[i]],this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,m))}}catch(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),he.error(u),new Error(us)}else try{c.search_attribute=s.attribute,c.search_value="*";let u=await wc.getDataByValue(c);if(l)for(let[d]of u)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,E]of u)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,d))}catch(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),he.error(u),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 Hr.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Hr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Hr.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new Hr.yy.FuncValue:new Hr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,m=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${m}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${m}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let u="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(u=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${_} ${u} ${d}`,h=this._convertColumnsToIndexes(f,s);E=await Hr.promise(h,t),t=null}catch(f){throw he.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),he.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let m=E[f];o.forEach(S=>{m[S.key]!==null&&m[S.key]!==void 0&&S.keys.add(m[S.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),m=Fu.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,g=m.length;S<g;S++){let T=m[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[T]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new hE(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=Fu.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw he.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),he.error(i),new Error(us)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let u in i)o.push(i[u][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await wc.getDataByHash(c),_=s.columns.length;for(let u=0,d=o.length;u<d;u++){let E=o[u],f=l.get(E);for(let h=0;h<_;h++){let m=s.columns[h],S=f[m]===void 0?null:f[m];this.data[n].__merged_data[E].push(S)}}}}catch(r){throw he.error("Error thrown from getDataByHash function in SQLSearch class method getData."),he.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();he.trace(`Final SQL: ${s}`),n=await Hr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),he.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw he.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),he.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return he.error(y5.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),he.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],_=new RegExp(`${l}.\`${o}\``,"g"),u=`${l}.[${c}]`;n=n.replace(_,u)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(l,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await wc.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw he.error("There was an error when processing this SQL operation. Check your logs"),he.error(o),new Error(us)}}return Object.values(Object.values(this.data)[0].__merged_data)}};hM.exports=Vg});var ur=R((jge,mM)=>{"use strict";var w5=ZI();mM.exports={searchByConditions:D5,searchByHash:L5,searchByValue:P5,search:M5};var Yg=Hn(),{transformReq:Kg}=Y(),C5=pM();async function D5(e){return Kg(e),Yg.searchByConditions(e)}a(D5,"searchByConditions");async function L5(e){Kg(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Yg.searchByHash(e))r&&t.push(r);return t}a(L5,"searchByHash");async function P5(e){Kg(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Yg.searchByValue(e))t.push(r);return t}a(P5,"searchByValue");function M5(e,t){try{let r=new w5(e);r.validate(),new C5(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(M5,"search")});var pE=R((Jge,SM)=>{"use strict";var U5=Hn();SM.exports={writeTransaction:v5};function v5(e,t,r){return U5.writeTransaction(e,t,r)}a(v5,"writeTransaction")});var AM=R((eRe,RM)=>{"use strict";var B5=ur(),H5=Bn(),TM=k(),x5=Pr(),Zge=pE(),G5=require("clone"),Qg=require("alasql"),q5=EE(),gM=require("util"),F5=gM.promisify(H5.getTableSchema),k5=gM.promisify(B5.search),$5=L(),Wg=Y();q5(Qg);RM.exports={update:Y5};var V5="There was a problem performing this update. Please check the logs and try again.";async function Y5({statement:e,hdb_user:t}){let r=await F5(e.table.databaseid,e.table.tableid),n=K5(e.columns);Wg.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=G5(s),c=Wg.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=Qg.parse(l).statements[0],u=await k5(_),d=W5(n,u);return Q5(o,d,t)}a(Y5,"update");function K5(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Qg.compile(`SELECT ${r.expression.toString()} AS [${$5.FUNC_VAL}] FROM ?`)}),t}catch(t){throw TM.error(t),new Error(V5)}}a(K5,"createUpdateRecord");function W5(e,t){return Wg.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(W5,"buildUpdateRecords");async function Q5(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await x5.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){TM.error(`Error delete new_attributes from update response: ${i}`)}return s}a(Q5,"updateRecords")});var bM=R((sRe,OM)=>{var j5=require("alasql"),z5=ur(),J5=k(),X5=Hn(),zg=require("util"),jg=Y(),Z5=L(),e8=Bn(),rRe=pE(),nRe=Pr(),t8="record",r8="successfully deleted",n8=zg.callbackify(a8),s8=zg.promisify(z5.search),i8=zg.promisify(e8.getTableSchema);OM.exports={convertDelete:n8};function o8(e){return`${e.deleted_hashes.length} ${t8}${e.deleted_hashes.length===1?"":"s"} ${r8}`}a(o8,"generateReturnMessage");async function a8({statement:e,hdb_user:t}){let r=await i8(e.table.databaseid,e.table.tableid);jg.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=jg.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=j5.parse(o).statements[0],l={operation:Z5.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await s8(c);let _=await X5.deleteRecords(l);return jg.isEmptyOrZeroLength(_.message)&&(_.message=o8(_)),delete _.txn_time,_}catch(_){throw J5.error(_),_.hdb_code?_.message:_}}a(a8,"convertDelete")});var CM=R((oRe,wM)=>{"use strict";var c8=Ei(),{hdb_errors:NM}=ie(),{getDatabases:yM}=(Re(),ae(Ve));wM.exports={checkSchemaExists:IM,checkSchemaTableExists:l8,schema_describe:c8};async function IM(e){if(!yM()[e])return NM.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(IM,"checkSchemaExists");async function l8(e,t){let r=await IM(e);if(r)return r;if(!yM()[e][t])return NM.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(l8,"checkSchemaTableExists")});var ma=R((cRe,u8)=>{u8.exports={name:"harperdb",version:"4.3.33",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.635.0","@aws-sdk/lib-storage":"3.635.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.12.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.8",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.26.2","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.1.3",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.30.1","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.22.9","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.17.1",yaml:"2.4.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.8",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.20.2",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.3.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.4.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var Ku={};$e(Ku,{addAnalyticsListener:()=>Yu,recordAction:()=>hr,recordActionBinary:()=>En,setAnalyticsEnabled:()=>_8});function _8(e){xM=e}function hr(e,t,r,n,s){if(!xM)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=TE.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let _=c;o.values=c=new Float32Array(l*2),c.set(_),c.index=l+1}c[l]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},TE.set(i,o)}mE||d8()}function En(e,t,r,n,s){hr(!!e,t,r,n,s)}function Yu(e){FM.push(e)}function d8(){mE=performance.now(),setTimeout(async()=>{let e=performance.now()-mE;mE=0;let t=[],r={time:Date.now(),period:e,threadId:Sa.threadId,metrics:t};for(let[s,i]of TE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,_=[],u;for(let d of kM){let E=Math.floor(c*d),f=o[E-1];if(E>l){let h=E-l;if(f===u){let m=_[_.length-1];typeof m=="number"?_[_.length-1]={value:m,count:1+h}:m.count+=h}else _.push(h>1?{value:f,count:h}:f),u=f;l=E}}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 $M()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Sa.threadId,byThread:!0,...n});for(let s of FM)s(t);TE=new Map,Sa.parentPort?Sa.parentPort.postMessage({type:qM,report:r}):KM({report:r})},GM).unref()}async function f8(e,t=6e4){let r=Zg(),n=VM(),s=new Promise(m=>{let S=performance.now();setImmediate(()=>{let g=performance.now();g-S>5e3&&(0,ku.warn)("Unusually high event queue latency on the main thread of "+Math.round(g-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let g=performance.now();g-S>5e3&&(0,ku.warn)("Unusually high task queue latency on the main thread of "+Math.round(g-S)+"ms"),m(g-S)})}),i;for(let m of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(m.value?.time){i=m.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,_=[],u;for(let{key:m,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(m>o+t)break}else o=m;u=m;let{metrics:g,threadId:T}=S;for(let b of g||[]){let{path:N,method:U,type:v,metric:F,count:M,total:W,distribution:z,threads:Z,...ce}=b;M||(M=1);let _e=F+(N?"-"+N:"");U!==void 0&&(_e+="-"+U),v!==void 0&&(_e+="-"+v);let de=c.get(_e);if(de){if(de.threads){let we=de.threads[T];if(we)de=we;else{de.threads[T]=Object.assign({},ce);continue}}de.count||(de.count=1);let xe=de.count;for(let we in ce){let Ge=ce[we];typeof Ge=="number"&&(de[we]=(de[we]*xe+Ge*M)/(xe+M))}de.count+=M,W>=0&&(de.total+=W,de.ratio=de.total/de.count)}else de=Object.assign({period:t},b),delete de.distribution,c.set(_e,de),de.byThread&&(de.threads=[],de.threads[T]=Object.assign({},ce),_.push(de));if(z){z=z.map(we=>typeof we=="number"?{value:we,count:1}:we);let xe=l.get(_e);xe?xe.push(...z):l.set(_e,z)}}await $M()}for(let m of _){let{path:S,method:g,type:T,metric:b,count:N,total:U,distribution:v,threads:F,...M}=m;F=F.filter(W=>W);for(let W in M){if(typeof m[W]!="number")continue;let z=0;for(let Z of F){let ce=Z[W];typeof ce=="number"&&(z+=ce)}m[W]=z}m.count=F.length,delete m.threads,delete m.byThread}for(let[m,S]of l){let g=c.get(m);S.sort((we,Ge)=>we.value>Ge.value?1:-1);let T=g.count-1,b=[],N=0,U=0,v;for(let we of kM){let Ge=T*we;for(;N<Ge;)v=S[U++],N+=v.count,U===1&&N--;let Wd=S[U>1?U-2:0];v||(v=S[0]),b.push(v.value-(v.value-Wd.value)*(N-Ge)/v.count)}let[F,M,W,z,Z,ce,_e,de,xe]=b;Object.assign(g,{p1:F,p10:M,p25:W,median:z,p75:Z,p90:ce,p95:_e,p99:de,p999:xe})}let d;for(let[m,S]of c)S.id=(0,SE.getNextMonotonicTime)(),S.time=u,n.primaryStore.put(S.id,S,{append:!0}).then(g=>{g||n.primaryStore.put(S.id,S)}),d=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(d||h*10>f){let m=(0,SE.getNextMonotonicTime)(),S={id:m,metric:"main-thread-utilization",idle:f-DM,active:h-LM,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(m,S,{append:!0}).then(g=>{g||n.primaryStore.put(m,S)})}DM=f,LM=h}async function PM(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Zg(){return MM||(MM=St({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function VM(){return UM||(UM=St({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function p8(){YM=!0;let e=(0,Vu.get)(Xg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await f8(GM,e),await PM(Zg(),E8),await PM(VM(),h8)},Math.min(e/2,2147483647)).unref()}function KM(e,t){let r=e.report;r.threadId=t?.threadId||Sa.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(vM+=n.mean*n.count);r.totalBytesProcessed=vM,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(BM.get(t))}),BM.set(t,t.performance.eventLoopUtilization())),r.id=(0,SE.getNextMonotonicTime)(),Zg().primaryStore.put(r.id,r),YM||p8(),m8&&(WM=T8(r))}async function T8(e){if(await WM,!fo){let r=(0,$u.dirname)((0,ku.getLogFilePath)());try{fo=await(0,Jg.open)((0,$u.join)(r,"analytics.log"),"r+")}catch{fo=await(0,Jg.open)((0,$u.join)(r,"analytics.log"),"w+")}}let t=(await fo.stat()).size;if(t>S8){let r=Buffer.alloc(t);await fo.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await fo.write(r,{position:0}),await fo.truncate(r.length),t=r.length}await fo.write(JSON.stringify(e)+`
11
+ `,t)}var Sa,HM,ku,$u,Jg,SE,Vu,Xg,TE,xM,mE,GM,qM,FM,kM,DM,LM,$M,E8,h8,MM,UM,YM,vM,BM,m8,WM,fo,S8,Ti=be(()=>{Sa=require("worker_threads"),HM=x(rt());Re();ku=x(k()),$u=require("path"),Jg=require("fs/promises"),SE=x(wr()),Vu=x(X()),Xg=x(L());Cr();(0,Vu.initSync)();TE=new Map,xM=(0,Vu.get)(Xg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(_8,"setAnalyticsEnabled");a(hr,"recordAction");dt.recordAnalytics=hr;a(En,"recordActionBinary");mE=0,GM=1e3,qM="analytics-report",FM=[];a(Yu,"addAnalyticsListener");kM=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(d8,"sendAnalytics");a(f8,"aggregation");DM=0,LM=0,$M=a(()=>new Promise(setImmediate),"rest");a(PM,"cleanup");E8=36e5,h8=31536e6;a(Zg,"getRawAnalyticsTable");a(VM,"getAnalyticsTable");(0,HM.setChildListenerByType)(qM,KM);a(p8,"startScheduledTasks");vM=0,BM=new Map,m8=!1;a(KM,"recordAnalytics");S8=1e6;a(T8,"logAnalytics")});var sR=R((RRe,iU)=>{"use strict";var{decode:g8}=require("msgpackr"),{isMainThread:SRe,parentPort:TRe,threadId:gRe}=require("worker_threads"),AE=gt(),Cc=Ze(),rR=L(),pr=k(),tR=X(),R8=L(),{onMessageByType:A8}=rt(),JM=fi(),{recordAction:QM,recordActionBinary:O8}=(Ti(),ae(Ku)),{publishToStream:b8}=AE,{ConsumerEvents:jM}=require("nats"),N8=ur(),{promisify:y8}=require("util"),XM=y8(setTimeout),OE=1e4,bE,RE,I8,w8,ZM,Wu=new Map,Dc=new Map;iU.exports={initialize:eU,ingestConsumer:nR,setSubscription:C8,setIgnoreOrigin:P8,getDatabaseSubscriptions:L8,updateConsumer:tU};async function eU(){A8(rR.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await tU(n)}),ZM=!0,pr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await AE.getNATSReferences();bE=e,RE=e.info.server_name,I8=t,w8=r}a(eU,"initialize");async function tU(e){if(e.status==="start"){let{js:t,jsm:r}=await rU(e.node_domain_name);nR(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Wu.get(e.stream_name+e.node_domain_name);t&&(pr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Wu.set(e.stream_name+e.node_domain_name,"close")),Dc.get(e.node_domain_name)==="failed"&&Dc.set(e.node_domain_name,"close")}}a(tU,"updateConsumer");var NE=new Map;function C8(e,t,r){let n=NE.get(e);n||NE.set(e,n=new Map),n.set(t,r),ZM||eU().then(D8)}a(C8,"setSubscription");async function D8(){let e=await N8.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Cc.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions)if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await rU(r),!n))break;let{schema:o,table:c}=i,l=JM.createNatsTableStreamName(o,c);nR(l,n,s,r)}}}a(D8,"accessConsumers");async function rU(e){let t,r,n=1;for(;!r;)try{t=await bE.jetstream({domain:e}),r=await bE.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Dc.get(e)==="close")break;Dc.set(e,"failed"),n%10===1&&pr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<OE?n++*100:OE;await XM(i)}return{js:t,jsm:r}}a(rU,"connectToRemoteJS");function L8(){return NE}a(L8,"getDatabaseSubscriptions");var nU;function P8(e){nU=e}a(P8,"setIgnoreOrigin");var sU=100,zM=new Array(sU),gE=0;async function nR(e,t,r,n){let{connection:s}=await AE.getNATSReferences();bE=s,RE=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,RE),pr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(Dc.get(n)==="close")break;o%10===1&&pr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(pr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await AE.createConsumer(r,e,RE,new Date(Date.now()).toISOString()));let u=o++*100<OE?o++*100:OE;await XM(u)}let c=!1,l;for(;!c;){if(Wu.get(e+n)==="close"||Dc.get(n)==="close"){Wu.delete(e+n),c=!0;continue}l=await i.consume({max_messages:tR.get(rR.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Wu.set(e+n,l);let _=!1;(async()=>{for await(let u of await l.status())if(u.type===jM.ConsumerDeleted&&(await l.close(),c=!0),u.type===jM.HeartbeatsMissed){let d=u.data;pr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===100&&(pr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),_=!0)}})();try{for await(let u of l)await zM[gE],zM[gE]=M8(u).catch(d=>{pr.error(d)}),++gE>=sU&&(gE=0)}catch(u){u.message==="consumer deleted"?(pr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):pr.error("Error consuming clustering ingest, restarting consumer",u)}}}a(nR,"ingestConsumer");async function M8(e){let t=g8(e.data);QM(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),pr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=tR.get(rR.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Cc.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Cc.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Cc.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!nU),O8(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Cc.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:_,records:u,hash_values:d,__origin:E,expiresAt:f}=t;pr.trace("processing message:",o,c,_,(u?"records: "+u.map(U=>U?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),pr.trace(`messageProcessor nats msg id: ${e.headers.get(Cc.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let m=new Promise(U=>h=U),{timestamp:S,user:g,node_name:T}=E||{},b=NE.get(c)?.get(_);if(!b)throw new Error(`Missing table for replication message: ${_}`);if(o==="define_schema")t.type=o,t.onCommit=h,b.send(t);else if(u.length===1&&!l)b.send({type:eR(o),value:u[0],id:d?.[0],expiresAt:f,timestamp:S,table:_,onCommit:h,user:g,nodeName:T});else{let U=u.map((v,F)=>({type:eR(o),value:v,expiresAt:f,id:d?.[F],table:_}));for(;l;)U.push({type:eR(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;b.send({type:"transaction",writes:U,table:_,timestamp:S,onCommit:h,user:g,nodeName:T})}tR.get(R8.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&b8(e.subject.split(".").slice(0,-1).join("."),JM.createNatsTableStreamName(c,_),e.headers,e.data),await m;let N=Date.now()-S;S&&QM(N,"replication-latency",e.subject,o,"ingest")}catch(o){pr.error(o)}e.ack()}a(M8,"messageProcessor");function eR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(eR,"convertOperation")});var gt=R((wRe,AU)=>{"use strict";var Qt=X();Qt.initSync();var U8=require("fs-extra"),v8=require("semver"),zu=require("path"),{monotonicFactory:B8}=require("ulidx"),aU=B8(),H8=require("util"),cU=require("child_process"),x8=H8.promisify(cU.exec),G8=cU.spawn,nr=Ze(),Ce=L(),yE=Y(),_s=k(),IE=fi(),q8=pE(),Qu=Et(),{broadcast:F8,onMessageByType:k8,getWorkerIndex:$8}=rt(),{isMainThread:lU}=require("worker_threads"),{Encoder:V8,decode:cR}=require("msgpackr"),uU=new V8,{isEmpty:Aa}=yE,_U=Ur(),ORe=48*36e11;lU&&k8(Ce.ITC_EVENT_TYPES.RESTART,()=>{mr=void 0,Ra=void 0});var{connect:Y8,StorageType:K8,RetentionPolicy:W8,AckPolicy:lR,DeliverPolicy:uR,DiscardPolicy:Q8,NatsConnection:bRe,JetStreamManager:NRe,JetStreamClient:yRe,StringCodec:IRe,JSONCodec:j8,createInbox:_R,headers:z8,ErrorCode:oU}=require("nats"),{PACKAGE_ROOT:J8}=L(),X8=ma(),{recordAction:Z8}=(Ti(),ae(Ku)),dU=j8(),e6="clustering",t6=X8.engines[nr.NATS_SERVER_NAME],r6=zu.join(J8,"dependencies"),aR=zu.join(r6,`${process.platform}-${process.arch}`,nr.NATS_BINARY_NAME),iR,oR,ju,Ta,ga;AU.exports={runCommand:fU,checkNATSServerInstalled:n6,createConnection:dR,getConnection:Ju,getJetStreamManager:Xu,getJetStream:hU,getNATSReferences:qs,getServerList:i6,createLocalStream:fR,listStreams:pU,deleteLocalStream:o6,getServerConfig:Lc,listRemoteStreams:a6,viewStream:c6,viewStreamIterator:l6,publishToStream:u6,request:f6,reloadNATS:ER,reloadNATSHub:E6,reloadNATSLeaf:h6,extractServerName:d6,requestErrorHandler:p6,createLocalTableStream:gU,createTableStreams:T6,purgeTableStream:RU,purgeSchemaTableStreams:g6,getStreamInfo:R6,updateLocalStreams:O6,closeConnection:s6,getJsmServerName:wE,addNatsMsgHeader:mU,clearClientCache:EU,updateRemoteConsumer:m6,createConsumer:SU,updateConsumerIterator:S6};async function fU(e,t=void 0){let{stdout:r,stderr:n}=await x8(e,{cwd:t});if(n)throw new Error(n.replace(`
12
12
  `,""));return r.replace(`
13
- `,"")}a(dU,"runCommand");async function n6(){try{await U8.access(oR)}catch{return!1}let e=await dU(`${oR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return v8.eq(t,t6)}a(n6,"checkNATSServerInstalled");async function _R(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await uU.getClusterUser();if(Aa(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}_s.trace("create nats connection called");let i=await Y8({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),_s.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&_s.error("Error with Nats client connection, connection closed",o),i===mr&&fU()}),i}a(_R,"createConnection");function fU(){mr=void 0,Ta=void 0,ga=void 0,Ra=void 0}a(fU,"clearClientCache");async function s6(){mr&&(await mr.drain(),mr=void 0,Ta=void 0,ga=void 0,Ra=void 0)}a(s6,"closeConnection");var mr,Ra;async function Ju(){return Ra||(Ra=_R(Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),mr=await Ra),mr||Ra}a(Ju,"getConnection");async function Xu(){if(Ta)return Ta;Aa(mr)&&await Ju();let{domain:e}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Aa(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ta=await mr.jetstreamManager({domain:e,timeout:6e4}),Ta}a(Xu,"getJetStreamManager");async function EU(){if(ga)return ga;Aa(mr)&&await Ju();let{domain:e}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Aa(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ga=mr.jetstream({domain:e,timeout:6e4}),ga}a(EU,"getJetStream");async function qs(){let e=mr||await Ju(),t=Ta||await Xu(),r=ga||await EU();return{connection:e,jsm:t,js:r}}a(qs,"getNATSReferences");async function i6(e){let t=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await uU.getClusterUser(),s=await _R(t,r,n),i=uR(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=_U.decode(u.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await yE.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(i6,"getServerList");async function dR(e,t){let{jsm:r}=await qs(),n=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:K8.File,retention:W8.Limits,subjects:t,discard:Q8.Old,max_msgs:s,max_bytes:i,max_age:n})}a(dR,"createLocalStream");async function hU(){let{jsm:e}=await qs(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(hU,"listStreams");async function o6(e){let{jsm:t}=await qs();await t.streams.delete(e)}a(o6,"deleteLocalStream");async function a6(e){let{connection:t}=await qs(),r=[],n=uR(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(_U.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(a6,"listRemoteStreams");async function c6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await qs(),i=oU(),o={durable_name:i,ack_policy:cR.Explicit};t&&(o.deliver_policy=lR.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let u of l){let d=aR(u.data),E={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};if(u.headers&&(E.origin=u.headers.get(nr.MSG_HEADERS.ORIGIN)),_.push(E),u.ack(),u.info.pending===0)break}return await c.delete(),_}a(c6,"viewStream");async function*l6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await qs(),i=oU(),o={durable_name:i,ack_policy:cR.Explicit};t&&(o.deliver_policy=lR.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of l){let u=aR(_.data);u[0]||(u=[u]);for(let d of u){let E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(E.origin=_.headers.get(nr.MSG_HEADERS.ORIGIN)),yield E}if(_.ack(),_.info.pending===0)break}await c.delete()}a(l6,"viewStreamIterator");async function u6(e,t,r,n){_s.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=pU(n,r);let{js:s}=await qs(),i=await wE(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:lU.encode(n);try{_s.trace(`publishToStream publishing to subject: ${o}`),Z8(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return SU(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){_s.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await dR(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(u6,"publishToStream");function pU(e,t){t===void 0&&(t=z8());let r=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(nr.MSG_HEADERS.ORIGIN)&&r&&t.append(nr.MSG_HEADERS.ORIGIN,r),t}a(pU,"addNatsMsgHeader");function Lc(e){e=e.toLowerCase();let t=zu.join(Qt.get(Ce.CONFIG_PARAMS.ROOTPATH),e6);if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Aa(iR)&&(iR={port:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+nr.SERVER_SUFFIX.HUB,config_file:nr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:zu.join(t,nr.PID_FILES.HUB),hdb_nats_path:t}),iR;if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Aa(sR)&&(sR={port:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+nr.SERVER_SUFFIX.LEAF,config_file:nr.NATS_CONFIG_FILES.LEAF_SERVER,domain:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+nr.SERVER_SUFFIX.LEAF,pid_file_path:zu.join(t,nr.PID_FILES.LEAF),hdb_nats_path:t}),sR;_s.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Lc,"getServerConfig");async function mU(e,t,r,n){try{await e.consumers.add(t,{ack_policy:cR.Explicit,durable_name:r,deliver_policy:lR.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(mU,"createConsumer");async function _6(e,t,r){await e.consumers.delete(t,r)}a(_6,"removeConsumer");function d6(e){return e.split(".")[1]}a(d6,"extractServerName");async function f6(e,t,r=6e4,n=uR()){if(!yE.isObject(t))throw new Error("data param must be an object");let s=lU.encode(t),{connection:i}=await qs(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return aR(c.data)}a(f6,"request");function fR(e){return new Promise(async(t,r)=>{let n=G8(oR,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(fR,"reloadNATS");async function E6(){let{pid_file_path:e}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await fR(e)}a(E6,"reloadNATSHub");async function h6(){let{pid_file_path:e}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await fR(e)}a(h6,"reloadNATSLeaf");function p6(e,t,r){let n;switch(e.code){case iU.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case iU.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(p6,"requestErrorHandler");async function m6(e,t){let r=t+nr.SERVER_SUFFIX.LEAF,{connection:n}=await qs(),{jsm:s}=await N6(r),{schema:i,table:o}=e,c=IE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await SU(async()=>{if(e.subscribe===!0)await mU(s,c,n.info.server_name,l);else try{await _6(s,c,n.info.server_name)}catch(_){_s.trace(_)}})}a(m6,"updateRemoteConsumer");async function S6(e,t,r,n){let s=IE.createNatsTableStreamName(e,t),i=r+nr.SERVER_SUFFIX.LEAF,o={type:Ce.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!cU&&$8()<Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=nR();await c(o)}await F8(o),n==="stop"&&await yE.async_set_timeout(1e3)}a(S6,"updateConsumerIterator");function SU(e){return q8.writeTransaction(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(SU,"exclusiveLock");async function TU(e,t){let r=IE.createNatsTableStreamName(e,t),n=await wE(),s=A6(e,t,n);await dR(r,[s])}a(TU,"createLocalTableStream");async function T6(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await TU(n,s)}}a(T6,"createTableStreams");async function gU(e,t,r=void 0){if(Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=IE.createNatsTableStreamName(e,t),{domain:s}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Ju()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")_s.warn(n);else throw n}}a(gU,"purgeTableStream");async function g6(e,t){if(Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await gU(e,t[r])}a(g6,"purgeSchemaTableStreams");async function R6(e){return(await Xu()).streams.info(e)}a(R6,"getStreamInfo");function A6(e,t,r){return`${nr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(A6,"createSubjectName");async function wE(){if(ju)return ju;if(ju=(await Xu())?.nc?.info?.server_name,ju===void 0)throw new Error("Unable to get jetstream manager server name");return ju}a(wE,"getJsmServerName");async function O6(){let e=await Xu(),t=await wE(),r=await hU();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=b6(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let u=_.join(".");_s.trace(`Updating stream subject name from: ${i} to: ${u}`),s.subjects[0]=u,await e.streams.update(s.name,s)}}a(O6,"updateLocalStreams");function b6(e){let{config:t}=e,r=!1,n=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(b6,"updateStreamLimits");async function N6(e){let t,r;try{t=await mr.jetstream({domain:e}),r=await mr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw _s.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(N6,"connectToRemoteJS")});var PE=R((LRe,NU)=>{"use strict";var Pc=Cf(),Mc=wM(),y6=k(),I6=require("uuid").v4,DRe=require("clone"),DE=hi(),Uc=L(),w6=require("util"),Eo=Hn(),{handleHDBError:xr,hdb_errors:C6}=ie(),{HDB_ERROR_MSGS:CE,HTTP_STATUS_CODES:Gr}=C6,{SchemaEventMsg:LE}=os(),AU=gt(),{getDatabases:D6}=(Re(),ae(Ve)),{transformReq:vc}=Y();NU.exports={createSchema:L6,createSchemaStructure:OU,createTable:P6,createTableStructure:bU,createAttribute:H6,dropSchema:M6,dropTable:U6,dropAttribute:v6,getBackup:x6};async function L6(e){let t=await OU(e);return DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema)),t}a(L6,"createSchema");async function OU(e){let t=Pc.schema_object(e);if(t)throw xr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);if(vc(e),!await Mc.checkSchemaExists(e.schema))throw xr(new Error,CE.SCHEMA_EXISTS_ERR(e.schema),Gr.BAD_REQUEST,Uc.LOG_LEVELS.ERROR,CE.SCHEMA_EXISTS_ERR(e.schema),!0);return await Eo.createSchema(e),`database '${e.schema}' successfully created`}a(OU,"createSchemaStructure");async function P6(e){return vc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await bU(e)}a(P6,"createTable");async function bU(e){let t=Pc.create_table_object(e);if(t)throw xr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);if(Pc.validateTableResidence(e.residence),!await Mc.checkSchemaTableExists(e.schema,e.table))throw xr(new Error,CE.TABLE_EXISTS_ERR(e.schema,e.table),Gr.BAD_REQUEST,Uc.LOG_LEVELS.ERROR,CE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:I6(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Eo.createTable(n,e);else throw xr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Gr.BAD_REQUEST);else await Eo.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(bU,"createTableStructure");async function M6(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Pc.schema_object(e),n=t??r;if(n)throw xr(n,n.message,Gr.BAD_REQUEST,void 0,void 0,!0);vc(e);let s=await Mc.checkSchemaExists(e.schema);if(s)throw xr(new Error,s,Gr.NOT_FOUND,Uc.LOG_LEVELS.ERROR,s,!0);let i=await Mc.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Eo.dropSchema(e),DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema)),await AU.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(M6,"dropSchema");async function U6(e){let t=Pc.table_object(e);if(t)throw xr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);vc(e);let r=await Mc.checkSchemaTableExists(e.schema,e.table);if(r)throw xr(new Error,r,Gr.NOT_FOUND,Uc.LOG_LEVELS.ERROR,r,!0);return await Eo.dropTable(e),await AU.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(U6,"dropTable");async function v6(e){let t=Pc.attribute_object(e);if(t)throw xr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);vc(e);let r=await Mc.checkSchemaTableExists(e.schema,e.table);if(r)throw xr(new Error,r,Gr.NOT_FOUND,Uc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw xr(new Error,"You cannot drop a hash attribute",Gr.BAD_REQUEST,void 0,void 0,!0);if(Uc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw xr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Gr.BAD_REQUEST,void 0,void 0,!0);try{return await Eo.dropAttribute(e),B6(e),DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw y6.error(`Got an error deleting attribute ${w6.inspect(e)}.`),n}}a(v6,"dropAttribute");function B6(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(B6,"dropAttributeFromGlobal");async function H6(e){vc(e);let t=D6()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw xr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Gr.BAD_REQUEST,void 0,void 0,!0);return await Eo.createAttribute(e),DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(H6,"createAttribute");function x6(e){return Eo.getBackup(e)}a(x6,"getBackup")});var IU=R((MRe,yU)=>{"use strict";var{OPERATIONS_ENUM:G6}=L(),ER=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=G6.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};yU.exports=ER});var hR=R((BRe,PU)=>{"use strict";var q6=Hn(),vRe=IU(),ME=Y(),UE=L(),F6=X(),{handleHDBError:wU,hdb_errors:k6}=ie(),{HDB_ERROR_MSGS:CU,HTTP_STATUS_CODES:DU}=k6,$6=Object.values(UE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),LU="To use this operation audit log must be enabled in harperdb-config.yaml";PU.exports=V6;async function V6(e){if(ME.isEmpty(e.schema))throw new Error(CU.SCHEMA_REQUIRED_ERR);if(ME.isEmpty(e.table))throw new Error(CU.TABLE_REQUIRED_ERR);if(!F6.get(UE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw wU(new Error,LU,DU.BAD_REQUEST,UE.LOG_LEVELS.ERROR,LU,!0);let t=ME.checkSchemaTableExist(e.schema,e.table);if(t)throw wU(new Error,t,DU.NOT_FOUND,UE.LOG_LEVELS.ERROR,t,!0);if(!ME.isEmpty(e.search_type)&&$6.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await q6.readAuditLog(e)}a(V6,"readAuditLog")});var UU=R((xRe,MU)=>{"use strict";var{OPERATIONS_ENUM:Y6}=L(),pR=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Y6.GET_BACKUP,this.schema=t,this.table=r}};MU.exports=pR});var HU=R((kRe,BU)=>{"use strict";var K6=Hn(),qRe=UU(),mR=Y(),W6=L(),FRe=X(),{handleHDBError:Q6,hdb_errors:j6}=ie(),{HDB_ERROR_MSGS:vU,HTTP_STATUS_CODES:z6}=j6;BU.exports=J6;async function J6(e){if(mR.isEmpty(e.schema))throw new Error(vU.SCHEMA_REQUIRED_ERR);if(mR.isEmpty(e.table))throw new Error(vU.TABLE_REQUIRED_ERR);let t=mR.checkSchemaTableExist(e.schema,e.table);if(t)throw Q6(new Error,t,z6.NOT_FOUND,W6.LOG_LEVELS.ERROR,t,!0);return await K6.getBackup(read_audit_log_object)}a(J6,"getBackup")});var $U=R((VRe,kU)=>{var ho=require("validate.js"),GU=nt(),Bc=L(),{handleHDBError:X6,hdb_errors:Z6}=ie(),{HDB_ERROR_MSGS:Rt,HTTP_STATUS_CODES:e9}=Z6,SR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),t9={STRUCTURE_USER:"structure_user"},xU=Object.values(Bc.ROLE_TYPES_ENUM),r9="attribute_permissions",n9="attribute_name",{PERMS_CRUD_ENUM:Hc}=Bc,s9=[r9,...Object.values(Hc)],qU=[Hc.READ,Hc.INSERT,Hc.UPDATE],i9=[n9,...qU];function o9(e){let t=SR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,FU(e,t)}a(o9,"addRoleValidation");function a9(e){let t=SR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,FU(e,t)}a(a9,"alterRoleValidation");function c9(e){let t=SR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,GU.validateObject(e,t)}a(c9,"dropRoleValidation");var l9=["operation","role","id","permission","hdb_user","hdb_auth_header"];function FU(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)l9.includes(n[o])||s.push(n[o]);s.length>0&&wt(Rt.INVALID_ROLE_JSON_KEYS(s),r);let i=GU.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{wt(o,r)}),e.permission){let o=u9(e);o&&wt(o,r),xU.forEach(c=>{e.permission[c]&&!ho.isBoolean(e.permission[c])&&wt(Rt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(xU.indexOf(o)<0){if(o===t9.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let _=0,u=l.length;_<u;_++){let d=l[_];global.hdb_schema[d]||wt(Rt.SCHEMA_NOT_FOUND(d),r)}continue}wt(Rt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){wt(Rt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let _=c.tables[l];if(!l||!global.hdb_schema[o][l]){wt(Rt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(_).forEach(u=>{s9.includes(u)||wt(Rt.INVALID_PERM_KEY(u),r,o,l)}),Object.values(Hc).forEach(u=>{ho.isDefined(_[u])?ho.isBoolean(_[u])||wt(Rt.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):wt(Rt.TABLE_PERM_MISSING(u),r,o,l)}),ho.isDefined(_.attribute_permissions)){if(!ho.isArray(_.attribute_permissions)){wt(Rt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}}else{wt(Rt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}if(_.attribute_permissions){let u=global.hdb_schema[o][l].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in _.attribute_permissions){let f=_.attribute_permissions[E];if(Object.keys(f).forEach(m=>{!i9.includes(m)&&m!==Hc.DELETE&&wt(Rt.INVALID_ATTR_PERM_KEY(m),r,o,l)}),!ho.isDefined(f.attribute_name)){wt(Rt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=f.attribute_name;if(!u.includes(h)){wt(Rt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}qU.forEach(m=>{ho.isDefined(f[m])?ho.isBoolean(f[m])||wt(Rt.ATTR_PERM_NOT_BOOLEAN(m,h),r,o,l):wt(Rt.ATTR_PERM_MISSING(m,h),r,o,l)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let E=`${o}.${l}`;wt(Rt.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,l)}}}}return _9(r)}a(FU,"customValidate");kU.exports={addRoleValidation:o9,alterRoleValidation:a9,dropRoleValidation:c9};function u9(e){let{operation:t,permission:r}=e;if(t===Bc.OPERATIONS_ENUM.ADD_ROLE||t===Bc.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return Rt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Bc.ROLE_TYPES_ENUM.SUPER_USER:Bc.ROLE_TYPES_ENUM.CLUSTER_USER;return Rt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(u9,"validateNoSUPerms");function _9(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:Rt.ROLE_PERMS_ERROR,...e};return X6(new Error,n,e9.BAD_REQUEST)}else return null}a(_9,"generateRolePermResponse");function wt(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(wt,"addPermError")});var BE=R((KRe,WU)=>{"use strict";var VU=Pr(),YU=ur(),d9=ia(),gR=$U(),RR=hi(),f9=require("uuid").v4,E9=require("util"),vE=L(),h9=Y(),AR=YU.searchByValue,p9=YU.searchByHash,m9=E9.promisify(d9.delete),S9=as(),T9=Nc(),{hdb_errors:g9,handleHDBError:Oa}=ie(),{HDB_ERROR_MSGS:KU,HTTP_STATUS_CODES:Zu}=g9,{UserEventMsg:OR}=os();WU.exports={addRole:R9,alterRole:A9,dropRole:O9,listRoles:b9};function TR(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(TR,"scrubRoleDetails");async function R9(e){let t=gR.addRoleValidation(e);if(t)throw t;e=TR(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await AR(r)||[])}catch(i){throw Oa(i)}if(n&&n.length>0)throw Oa(new Error,KU.ROLE_ALREADY_EXISTS(e.role),Zu.CONFLICT,void 0,void 0,!0);e.id||(e.id=f9());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await VU.insert(s),RR.signalUserChange(new OR(process.pid)),e=TR(e),e}a(R9,"addRole");async function A9(e){let t=gR.alterRoleValidation(e);if(t)throw t;e=TR(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await VU.update(r)}catch(s){throw Oa(s)}if(n&&n?.message==="updated 0 of 1 records")throw Oa(new Error,"Invalid role id",Zu.BAD_REQUEST,void 0,void 0,!0);return await RR.signalUserChange(new OR(process.pid)),e}a(A9,"alterRole");async function O9(e){let t=gR.dropRoleValidation(e);if(t)throw Oa(new Error,t,Zu.BAD_REQUEST,void 0,void 0,!0);let r=new T9(vE.SYSTEM_SCHEMA_NAME,vE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await p9(r));if(n.length===0)throw Oa(new Error,KU.ROLE_NOT_FOUND,Zu.NOT_FOUND,void 0,void 0,!0);let s=new S9(vE.SYSTEM_SCHEMA_NAME,vE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await AR(s)),o=!1;if(h9.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Oa(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Zu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await m9(c),RR.signalUserChange(new OR(process.pid)),`${n[0].role} successfully deleted`}a(O9,"dropRole");async function b9(){return AR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(b9,"listRoles")});var JU=R((QRe,zU)=>{"use strict";var N9=X(),po=require("joi"),y9=nt(),QU=require("moment"),I9=require("fs-extra"),bR=require("path"),w9=require("lodash"),e_=L(),{LOG_LEVELS:ba}=L(),C9="YYYY-MM-DD hh:mm:ss",D9=bR.resolve(__dirname,"../logs");zU.exports=function(e){return y9.validateBySchema(e,L9)};var L9=po.object({from:po.custom(jU),until:po.custom(jU),level:po.valid(ba.NOTIFY,ba.FATAL,ba.ERROR,ba.WARN,ba.INFO,ba.DEBUG,ba.TRACE),order:po.valid("asc","desc"),limit:po.number().min(1),start:po.number().min(0),log_name:po.custom(P9)});function jU(e,t){if(QU(e,QU.ISO_8601).format(C9)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(jU,"validateDatetime");function P9(e,t){if(w9.invert(e_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=N9.get(e_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?e_.LOG_NAMES.HDB:e,i=s===e_.LOG_NAMES.INSTALL?bR.join(D9,e_.LOG_NAMES.INSTALL):bR.join(n,s);return I9.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(P9,"validateReadLogPath")});var yR=R((zRe,ZU)=>{"use strict";var HE=L(),M9=k(),U9=X(),v9=JU(),NR=require("path"),XU=require("fs-extra"),{once:B9}=require("events"),{handleHDBError:H9,hdb_errors:x9}=ie(),{PACKAGE_ROOT:G9}=L(),q9=NR.join(G9,"logs"),F9=1e3,k9=200;ZU.exports=$9;async function $9(e){let t=v9(e);if(t)throw H9(t,t.message,x9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=U9.get(HE.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?HE.LOG_NAMES.HDB:e.log_name,s=n===HE.LOG_NAMES.INSTALL?NR.join(q9,HE.LOG_NAMES.INSTALL):NR.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,_=e.until!==void 0,u=_?new Date(e.until):void 0,d=e.limit===void 0?F9:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,m=0;E==="desc"&&!l&&!u&&(m=Math.max(XU.statSync(s).size-(h+5)*k9,0));let S=XU.createReadStream(s,{start:m});S.on("error",v=>{M9.error(v)});let g=0,T=[],b="",N;S.on("data",v=>{let F=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;v=b+v;let M=0,W;for(;(W=F.exec(v))&&!S.destroyed;){N&&(N.message=v.slice(M,W.index),U(N));let[z,Z,ce]=W,_e=ce.split("] ["),de=_e[0],xe=_e[1];_e.splice(0,2),N={timestamp:Z,thread:de,level:xe,tags:_e,message:""},M=W.index+z.length}b=v.slice(M)}),S.on("end",v=>{S.destroyed||N&&(N.message=b.trim(),U(N))}),S.resume();function U(v){let F,M,W;switch(!0){case(i&&c&&_):F=new Date(v.timestamp),M=new Date(l),W=new Date(u),v.level===o&&F>=M&&F<=W&&g<f?g++:v.level===o&&F>=M&&F<=W&&(mo(v,E,T),g++,g===h&&S.destroy());break;case(i&&c):F=new Date(v.timestamp),M=new Date(l),v.level===o&&F>=M&&g<f?g++:v.level===o&&F>=M&&(mo(v,E,T),g++,g===h&&S.destroy());break;case(i&&_):F=new Date(v.timestamp),W=new Date(u),v.level===o&&F<=W&&g<f?g++:v.level===o&&F<=W&&(mo(v,E,T),g++,g===h&&S.destroy());break;case(c&&_):F=new Date(v.timestamp),M=new Date(l),W=new Date(u),F>=M&&F<=W&&g<f?g++:F>=M&&F<=W&&(mo(v,E,T),g++,g===h&&S.destroy());break;case i:v.level===o&&g<f?g++:v.level===o&&(mo(v,E,T),g++,g===h&&S.destroy());break;case c:F=new Date(v.timestamp),M=new Date(l),F>=M&&g<f?g++:F>=M&&g>=f&&(mo(v,E,T),g++,g===h&&S.destroy());break;case _:F=new Date(v.timestamp),W=new Date(u),F<=W&&g<f?g++:F<=W&&g>=f&&(mo(v,E,T),g++,g===h&&S.destroy());break;default:g<f?g++:(mo(v,E,T),g++,g===h&&S.destroy())}}return a(U,"onLogMessage"),await B9(S,"close"),T}a($9,"readLog");function mo(e,t,r){t==="desc"?V9(e,r):t==="asc"?Y9(e,r):r.push(e)}a(mo,"pushLineToResult");function V9(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(V9,"insertDescending");function Y9(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(Y9,"insertAscending")});var xE=R((tAe,nv)=>{"use strict";var IR=require("joi"),{string:t_,boolean:ev,date:K9}=IR.types(),W9=nt(),{validateSchemaExists:XRe,validateTableExists:ZRe,validateSchemaName:eAe}=Ps(),Q9=L(),j9=Ze(),tv=X();tv.initSync();var z9=t_.invalid(tv.get(Q9.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(j9.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(),rv={operation:t_.valid("add_node","update_node","set_node_replication"),node_name:z9,subscriptions:IR.array().items({table:t_.optional(),schema:t_.optional(),database:t_.optional(),subscribe:ev.required(),publish:ev.required().custom(X9),start_time:K9.iso()}).min(1).required()};function J9(e){return W9.validateBySchema(e,IR.object(rv))}a(J9,"addUpdateNodeValidator");function X9(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(X9,"checkForFalsy");nv.exports={addUpdateNodeValidator:J9,validation_schema:rv}});var iv=R((nAe,sv)=>{var Z9=nt(),e7={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};sv.exports=function(e){return Z9.validateObject(e,e7)}});var GE=R((sAe,ov)=>{"use strict";var t7=L().OPERATIONS_ENUM,wR=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=t7.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};ov.exports=wR});var cv=R((oAe,av)=>{"use strict";var r7={OPERATION:"operation",REFRESH:"refresh"},CR=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},DR=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};av.exports={JWTTokens:CR,TOKEN_TYPE_ENUM:r7,JWTRSAKeys:DR}});var s_=R((cAe,dv)=>{"use strict";var n_=require("jsonwebtoken"),LR=require("fs-extra"),PR=Y(),xn=L(),{handleHDBError:qr,hdb_errors:n7}=ie(),{HTTP_STATUS_CODES:Fr,AUTHENTICATION_ERROR_MSGS:kr}=n7,r_=k(),lv=qf(),vR=Ur(),s7=Pr().update,i7=GE(),o7=hi(),{UserEventMsg:a7}=os(),So=X();So.initSync();var MR=require("path"),{JWTTokens:c7,JWTRSAKeys:l7,TOKEN_TYPE_ENUM:qE}=cv(),u7=So.get(xn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?So.get(xn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",_7=So.get(xn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?So.get(xn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",FE="RS256",UR;dv.exports={createTokens:d7,validateOperationToken:E7,refreshOperationToken:f7,validateRefreshToken:_v};async function d7(e){if(PR.isEmpty(e)||typeof e!="object")throw qr(new Error,kr.INVALID_AUTH_OBJECT,Fr.BAD_REQUEST,void 0,void 0,!0);if(PR.isEmpty(e.username))throw qr(new Error,kr.USERNAME_REQUIRED,Fr.BAD_REQUEST,void 0,void 0,!0);if(PR.isEmpty(e.password))throw qr(new Error,kr.PASSWORD_REQUIRED,Fr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await vR.findAndValidateUser(e.username,e.password),!t)throw qr(new Error,kr.INVALID_CREDENTIALS,Fr.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw r_.error(E),qr(new Error,kr.INVALID_CREDENTIALS,Fr.UNAUTHORIZED,void 0,void 0,!0)}let r=await kE(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await uv(i,r.private_key,r.passphrase),c=await n_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:_7,algorithm:FE,subject:qE.REFRESH}),l=lv.hash(c),_=new i7(xn.SYSTEM_SCHEMA_NAME,xn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await s7(_)}catch(E){r_.error(E),d=E}if(d!==void 0||u.skipped_hashes.length>0)throw qr(new Error,kr.REFRESH_TOKEN_SAVE_FAILED,Fr.INTERNAL_SERVER_ERROR);return o7.signalUserChange(new a7(process.pid)),new c7(o,c)}a(d7,"createTokens");async function uv(e,t,r){return await n_.sign(e,{key:t,passphrase:r},{expiresIn:u7,algorithm:FE,subject:qE.OPERATION})}a(uv,"signOperationToken");async function kE(){if(UR===void 0)try{let e=MR.join(So.getHdbBasePath(),xn.LICENSE_KEY_DIR_NAME,xn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=MR.join(So.getHdbBasePath(),xn.LICENSE_KEY_DIR_NAME,xn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=MR.join(So.getHdbBasePath(),xn.LICENSE_KEY_DIR_NAME,xn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await LR.readFile(e)).toString(),s=(await LR.readFile(t)).toString(),i=(await LR.readFile(r)).toString();UR=new l7(i,s,n)}catch(e){throw r_.error(e),qr(new Error,kr.NO_ENCRYPTION_KEYS,Fr.INTERNAL_SERVER_ERROR)}return UR}a(kE,"getJWTRSAKeys");async function f7(e){if(!e)throw qr(new Error,kr.INVALID_BODY,Fr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw qr(new Error,kr.REFRESH_TOKEN_REQUIRED,Fr.BAD_REQUEST,void 0,void 0,!0);await _v(e.refresh_token);let t=await kE(),r=await n_.decode(e.refresh_token);return{operation_token:await uv({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(f7,"refreshOperationToken");async function E7(e){try{let t=await kE(),r=await n_.verify(e,t.public_key,{algorithms:FE,subject:qE.OPERATION});return await vR.findAndValidateUser(r.username,void 0,!1)}catch(t){throw r_.warn(t),t.name&&t.name==="TokenExpiredError"?qr(new Error,kr.TOKEN_EXPIRED,Fr.FORBIDDEN):qr(new Error,kr.INVALID_TOKEN,Fr.UNAUTHORIZED)}}a(E7,"validateOperationToken");async function _v(e){let t;try{let r=await kE(),n=await n_.verify(e,r.public_key,{algorithms:FE,subject:qE.REFRESH});t=await vR.findAndValidateUser(n.username,void 0,!1)}catch(r){throw r_.warn(r),r.name&&r.name==="TokenExpiredError"?qr(new Error,kr.TOKEN_EXPIRED,Fr.FORBIDDEN):qr(new Error,kr.INVALID_TOKEN,Fr.UNAUTHORIZED)}if(!lv.validate(t.refresh_token,e))throw qr(new Error,kr.INVALID_TOKEN,Fr.UNAUTHORIZED);return t}a(_v,"validateRefreshToken")});var BR=R((_Ae,hv)=>{"use strict";var h7=iv(),xc=require("passport"),p7=require("passport-local").Strategy,m7=require("passport-http").BasicStrategy,S7=require("util"),T7=Ur(),Ev=S7.callbackify(T7.findAndValidateUser),uAe=nn(),g7=L(),fv=s_();xc.use(new p7(function(e,t,r){Ev(e,t,r)}));xc.use(new m7(function(e,t,r){Ev(e,t,r)}));xc.serializeUser(function(e,t){t(null,e)});xc.deserializeUser(function(e,t){t(null,e)});function R7(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":xc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===g7.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?fv.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):fv.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:xc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(R7,"authorize");function A7(e,t){let r=h7(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(A7,"checkPermissions");hv.exports={authorize:R7,checkPermissions:A7}});var Gc=R((fAe,pv)=>{"use strict";var HR=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},xR=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};pv.exports={Node:HR,NodeSubscription:xR}});var Sv=R((hAe,mv)=>{"use strict";var O7=L().OPERATIONS_ENUM,GR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=O7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};mv.exports=GR});var i_=R((mAe,Tv)=>{"use strict";var qR=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},FR=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};Tv.exports={RemotePayloadObject:qR,RemotePayloadSubscription:FR}});var Rv=R((TAe,gv)=>{"use strict";var kR=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};gv.exports=kR});var bv=R((bAe,Ov)=>{"use strict";var b7=Rv(),RAe=_t(),Av=Ye(),N7=k(),{getSchemaPath:AAe,getTransactionAuditStorePath:OAe}=Je(),{getDatabases:y7}=(Re(),ae(Ve));Ov.exports=I7;async function I7(e){let t=new b7;try{let r=y7()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await Av.environmentDataSize(schema_path,e.name),o=await Av.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){N7.warn(`unable to stat table dbi due to ${r}`)}return t}a(I7,"lmdbGetTableSize")});var yv=R((yAe,Nv)=>{"use strict";var $R=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};Nv.exports=$R});var gi=R((PAe,Dv)=>{"use strict";var w7=require("fs-extra"),C7=require("path"),Sr=require("systeminformation"),To=k(),Iv=gt(),wAe=Ze(),VE=L(),D7=bv(),L7=Ei(),{getThreadInfo:wv}=rt(),eA=X();eA.initSync();var P7=yv(),{openEnvironment:CAe}=Ye(),{getSchemaPath:DAe}=Je(),{database:LAe,databases:VR}=(Re(),ae(Ve)),$E;Dv.exports={getHDBProcessInfo:QR,getNetworkInfo:zR,getDiskInfo:jR,getMemoryInfo:WR,getCPUInfo:KR,getTimeInfo:YR,getSystemInformation:JR,systemInformation:M7,getTableSize:XR,getMetrics:ZR};function YR(){return Sr.time()}a(YR,"getTimeInfo");async function KR(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:_,...u}=await Sr.cpu();u.cpu_speed=await Sr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:m,raw_currentload_user:S,cpus:g,...T}=await Sr.currentLoad();return T.cpus=[],g.forEach(b=>{let{raw_load:N,raw_load_idle:U,raw_load_irq:v,raw_load_nice:F,raw_load_system:M,raw_load_user:W,...z}=b;T.cpus.push(z)}),u.current_load=T,u}catch(e){return To.error(`error in getCPUInfo: ${e}`),{}}}a(KR,"getCPUInfo");async function WR(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Sr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return To.error(`error in getMemoryInfo: ${e}`),{}}}a(WR,"getMemoryInfo");async function QR(){let e={core:[],clustering:[]};try{let t=await Sr.processes(),r;try{r=Number.parseInt(await w7.readFile(C7.join(eA.get(VE.CONFIG_PARAMS.ROOTPATH),VE.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===VE.NODE_ERROR_CODES.ENOENT)To.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return To.error(`error in getHDBProcessInfo: ${t}`),e}}a(QR,"getHDBProcessInfo");async function jR(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Sr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,..._}=await Sr.fsStats();return e.read_write=_,e.size=await Sr.fsSize(),e}catch(t){return To.error(`error in getDiskInfo: ${t}`),e}}a(jR,"getDiskInfo");async function zR(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Sr.networkInterfaceDefault(),e.latency=await Sr.inetChecksite("google.com"),(await Sr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:_,ieee8021xState:u,carrier_changes:d,...E}=n;e.interfaces.push(E)}),(await Sr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return To.error(`error in getNetworkInfo: ${t}`),e}}a(zR,"getNetworkInfo");async function JR(){if($E!==void 0)return $E;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Sr.osInfo();e=c;let l=await Sr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,$E=e,$E}catch(t){return To.error(`error in getSystemInformation: ${t}`),e}}a(JR,"getSystemInformation");async function XR(){let e=[],t=await L7.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await D7(n));return e}a(XR,"getTableSize");async function ZR(){let e={};for(let t in VR){let r=e[t]={},n=r.tables={};for(let s in VR[t])try{let i=VR[t][s];r.readers||(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[_,u,d]=l.trim().split(" ");return{pid:_,thread:u,txnid:d}}),i.primaryStore.auditStore&&(r.audit=i.auditStore.getStats()));let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){To.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(ZR,"getMetrics");async function Cv(){if(eA.get(VE.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await Iv.getNATSReferences(),t=await Iv.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(Cv,"getNatsStreamInfo");async function M7(e){let t=new P7;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await JR(),t.time=YR(),t.cpu=await KR(),t.memory=await WR(),t.disk=await jR(),t.network=await zR(),t.harperdb_processes=await QR(),t.table_size=await XR(),t.metrics=await ZR(),t.threads=await wv(),t.replication=await Cv(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await JR();break;case"time":t.time=YR();break;case"cpu":t.cpu=await KR();break;case"memory":t.memory=await WR();break;case"disk":t.disk=await jR();break;case"network":t.network=await zR();break;case"harperdb_processes":t.harperdb_processes=await QR();break;case"table_size":t.table_size=await XR();break;case"database_metrics":case"metrics":t.metrics=await ZR();break;case"threads":t.threads=await wv();break;case"replication":t.replication=await Cv();break;default:break}return t}a(M7,"systemInformation")});var Ri=R((UAe,Lv)=>{"use strict";Lv.exports={version:U7,printVersion:v7};var YE=ma();function U7(){if(YE)return YE.version}a(U7,"version");function v7(){YE&&console.log(`HarperDB Version ${YE.version}`)}a(v7,"printVersion")});var Ai=R((xAe,vv)=>{"use strict";var B7=Pr(),tA=Y(),H7=require("util"),Na=L(),Pv=X();Pv.initSync();var x7=BR(),Mv=ur(),{Node:BAe,NodeSubscription:HAe}=Gc(),G7=Nc(),q7=Sv(),{RemotePayloadObject:F7,RemotePayloadSubscription:k7}=i_(),{handleHDBError:$7,hdb_errors:V7}=ie(),{HTTP_STATUS_CODES:Y7,HDB_ERROR_MSGS:K7}=V7,W7=as(),Q7=gi(),j7=Ri(),{getDatabases:z7}=(Re(),ae(Ve)),J7=H7.promisify(x7.authorize),X7=Mv.searchByHash,Z7=Mv.searchByValue;vv.exports={authHeaderToUser:eee,isEmpty:tee,getNodeRecord:ree,upsertNodeRecord:nee,buildNodePayloads:see,checkClusteringEnabled:iee,getAllNodeRecords:oee,getSystemInfo:aee,reverseSubscription:Uv};async function eee(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await J7(t,null),e}a(eee,"authHeaderToUser");function tee(e){return e==null}a(tee,"isEmpty");async function ree(e){let t=new G7(Na.SYSTEM_SCHEMA_NAME,Na.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return X7(t)}a(ree,"getNodeRecord");async function nee(e){let t=new q7(Na.SYSTEM_SCHEMA_NAME,Na.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return B7.upsert(t)}a(nee,"upsertNodeRecord");function Uv(e){if(tA.isEmpty(e.subscribe)||tA.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(Uv,"reverseSubscription");function see(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:_}=c,u=tA.getTableHashAttribute(l,_),{subscribe:d,publish:E}=Uv(c),f=z7()[l]?.[_],h=new k7(l,_,u,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);s.push(h)}return new F7(r,t,s,n)}a(see,"buildNodePayloads");function iee(){if(!Pv.get(Na.CONFIG_PARAMS.CLUSTERING_ENABLED))throw $7(new Error,K7.CLUSTERING_NOT_ENABLED,Y7.BAD_REQUEST,void 0,void 0,!0)}a(iee,"checkClusteringEnabled");async function oee(){let e=new W7(Na.SYSTEM_SCHEMA_NAME,Na.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Z7(e))}a(oee,"getAllNodeRecords");async function aee(){let e=await Q7.getSystemInformation();return{hdb_version:j7.version(),node_version:e.node_version,platform:e.platform}}a(aee,"getSystemInfo")});var rA=R((qAe,$v)=>{"use strict";var KE=gt(),Bv=Y(),Hv=Ze(),xv=L(),WE=k(),Gv=PE(),cee=Uu(),{RemotePayloadObject:lee}=i_(),{handleHDBError:qv,hdb_errors:uee}=ie(),{HTTP_STATUS_CODES:Fv}=uee,{NodeSubscription:kv}=Gc();$v.exports=_ee;async function _ee(e,t){let r;try{r=await KE.request(`${t}.${Hv.REQUEST_SUFFIX}`,new lee(xv.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),WE.trace("Response from remote describe all request:",r)}catch(o){WE.error(`addNode received error from describe all request to remote node: ${o}`);let c=KE.requestErrorHandler(o,"add_node",t);throw qv(new Error,c,Fv.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===Hv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw qv(new Error,o,Fv.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===xv.SYSTEM_SCHEMA_NAME){await KE.createLocalTableStream(l,c);let h=new kv(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=Bv.doesSchemaExist(l),u=n[l]!==void 0,d=c?Bv.doesTableExist(l,c):!0,E=c?n?.[l]?.[c]!==void 0:!0;if(!_&&!u||!d&&!E){s.push(o);continue}if(!_&&u&&(WE.trace(`addNode creating schema: ${l}`),await Gv.createSchema({operation:"create_schema",schema:l})),!d&&E){WE.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new cee(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await Gv.createTable(h)}await KE.createLocalTableStream(l,c);let f=new kv(l,c,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:s}}a(_ee,"reviewSubscriptions")});var c_=R((kAe,Kv)=>{"use strict";var{handleHDBError:QE,hdb_errors:dee}=ie(),{HTTP_STATUS_CODES:jE}=dee,{addUpdateNodeValidator:fee}=xE(),zE=k(),Yv=L(),Vv=Ze(),Eee=Y(),o_=gt(),a_=Ai(),hee=X(),pee=rA(),{Node:mee,NodeSubscription:See}=Gc(),{broadcast:Tee}=rt(),gee="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Ree="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Aee=hee.get(Yv.CONFIG_PARAMS.CLUSTERING_NODENAME);Kv.exports=Oee;async function Oee(e,t=!1){zE.trace("addNode called with:",e),a_.checkClusteringEnabled();let r=fee(e);if(r)throw QE(r,r.message,jE.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await a_.getNodeRecord(n);if(!Eee.isEmptyOrZeroLength(d))throw QE(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,jE.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await pee(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=gee,o;let c=a_.buildNodePayloads(s,Aee,Yv.OPERATIONS_ENUM.ADD_NODE,await a_.getSystemInfo()),l=[];for(let d=0,E=s.length;d<E;d++){let f=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new See(f.schema,f.table,f.publish,f.subscribe))}zE.trace("addNode sending remote payload:",c);let _;try{_=await o_.request(`${n}.${Vv.REQUEST_SUFFIX}`,c)}catch(d){zE.error(`addNode received error from request: ${d}`);for(let f=0,h=s.length;f<h;f++){let m=s[f];m.publish=!1,m.subscribe=!1,await o_.updateRemoteConsumer(m,n)}let E=o_.requestErrorHandler(d,"add_node",n);throw QE(new Error,E,jE.INTERNAL_SERVER_ERROR,"error",E)}if(_.status===Vv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw QE(new Error,d,jE.INTERNAL_SERVER_ERROR,"error",d)}zE.trace(_);for(let d=0,E=s.length;d<E;d++){let f=s[d];await o_.updateRemoteConsumer(f,n),f.subscribe===!0&&await o_.updateConsumerIterator(f.schema,f.table,n,"start")}let u=new mee(n,l,_.system_info);return await a_.upsertNodeRecord(u),Tee({type:"nats_update"}),i.length>0?o.message=Ree:o.message=`Successfully added '${n}' to manifest`,o}a(Oee,"addNode")});var iA=R((YAe,jv)=>{"use strict";var{handleHDBError:nA,hdb_errors:bee}=ie(),{HTTP_STATUS_CODES:sA}=bee,{addUpdateNodeValidator:Nee}=xE(),l_=k(),Qv=L(),Wv=Ze(),VAe=Y(),u_=gt(),__=Ai(),yee=X(),{cloneDeep:Iee}=require("lodash"),wee=rA(),{Node:Cee,NodeSubscription:Dee}=Gc(),{broadcast:Lee}=rt(),Pee="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Mee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Uee=yee.get(Qv.CONFIG_PARAMS.CLUSTERING_NODENAME);jv.exports=vee;async function vee(e){l_.trace("updateNode called with:",e),__.checkClusteringEnabled();let t=Nee(e);if(t)throw nA(t,t.message,sA.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await __.getNodeRecord(r);s.length>0&&(n=Iee(s));let{added:i,skipped:o}=await wee(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Pee,c;let l=__.buildNodePayloads(i,Uee,Qv.OPERATIONS_ENUM.UPDATE_NODE,await __.getSystemInfo());for(let u=0,d=i.length;u<d;u++){let E=i[u];l_.trace(`updateNode updating work stream for node: ${r} subscription:`,E),i[u].start_time===void 0&&delete i[u].start_time}l_.trace("updateNode sending remote payload:",l);let _;try{_=await u_.request(`${r}.${Wv.REQUEST_SUFFIX}`,l)}catch(u){l_.error(`updateNode received error from request: ${u}`);let d=u_.requestErrorHandler(u,"update_node",r);throw nA(new Error,d,sA.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===Wv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw nA(new Error,u,sA.INTERNAL_SERVER_ERROR,"error",u)}l_.trace(_);for(let u=0,d=i.length;u<d;u++){let E=i[u];await u_.updateRemoteConsumer(E,r),E.subscribe===!0?await u_.updateConsumerIterator(E.schema,E.table,r,"start"):await u_.updateConsumerIterator(E.schema,E.table,r,"stop")}return n||(n=[new Cee(r,[],_.system_info)]),await Bee(n[0],i,_.system_info),o.length>0?c.message=Mee:c.message=`Successfully updated '${r}'`,c}a(vee,"updateNode");async function Bee(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,_=e.subscriptions.length;l<_;l++){let u=n.subscriptions[l];if(u.schema===o.schema&&u.table===o.table){u.publish=o.publish,u.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new Dee(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await __.upsertNodeRecord(n),Lee({type:"nats_update"})}a(Bee,"updateNodeTable")});var e0=R((WAe,Zv)=>{"use strict";var Xv=require("joi"),{string:zv}=Xv.types(),Hee=nt(),Jv=L(),xee=X(),Gee=Ze();Zv.exports=qee;function qee(e){let t=zv.invalid(xee.get(Jv.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Gee.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=Xv.object({operation:zv.valid(Jv.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Hee.validateBySchema(e,r)}a(qee,"removeNodeValidator")});var XE=R((jAe,i0)=>{"use strict";var{handleHDBError:t0,hdb_errors:Fee}=ie(),{HTTP_STATUS_CODES:r0}=Fee,kee=e0(),d_=k(),n0=Ai(),$ee=Y(),JE=L(),s0=Ze(),oA=gt(),Vee=X(),{RemotePayloadObject:Yee}=i_(),{NodeSubscription:Kee}=Gc(),Wee=Mu(),Qee=ia(),{broadcast:jee}=rt(),zee=Vee.get(JE.CONFIG_PARAMS.CLUSTERING_NODENAME);i0.exports=Jee;async function Jee(e){d_.trace("removeNode called with:",e),n0.checkClusteringEnabled();let t=kee(e);if(t)throw t0(t,t.message,r0.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await n0.getNodeRecord(r);if($ee.isEmptyOrZeroLength(n))throw t0(new Error,`Node '${r}' was not found.`,r0.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Yee(JE.OPERATIONS_ENUM.REMOVE_NODE,zee,[]),i,o=!1;for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];u.subscribe===!0&&await oA.updateConsumerIterator(u.schema,u.table,r,"stop");try{await oA.updateRemoteConsumer(new Kee(u.schema,u.table,!1,!1),r)}catch(d){d_.error(d)}}try{i=await oA.request(`${r}.${s0.REQUEST_SUFFIX}`,s),d_.trace("Remove node reply from remote node:",r,i)}catch(l){d_.error("removeNode received error from request:",l),o=!0}let c=new Wee(JE.SYSTEM_SCHEMA_NAME,JE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Qee.deleteRecord(c),jee({type:"nats_update"}),i?.status===s0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(d_.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(Jee,"removeNode")});var c0=R((JAe,a0)=>{"use strict";var o0=require("joi"),{string:Xee,array:Zee}=o0.types(),ete=nt(),tte=xE();a0.exports=rte;function rte(e){let t=o0.object({operation:Xee.valid("configure_cluster").required(),connections:Zee.items(tte.validation_schema).required()});return ete.validateBySchema(e,t)}a(rte,"configureClusterValidator")});var eh=R((ZAe,f0)=>{"use strict";var nte=L(),ZE=k(),ste=Y(),ite=XE(),ote=c_(),l0=Ai(),ate=c0(),{handleHDBError:u0,hdb_errors:cte}=ie(),{HTTP_STATUS_CODES:_0}=cte,lte="Configure cluster complete.",ute="Failed to configure the cluster. Check the logs for more details.",_te="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";f0.exports=dte;async function dte(e){ZE.trace("configure cluster called with:",e),l0.checkClusteringEnabled();let t=ate(e);if(t)throw u0(t,t.message,_0.BAD_REQUEST,void 0,void 0,!0);let r=await l0.getAllNodeRecords(),n=[];for(let u=0,d=r.length;u<d;u++){let E=await d0(ite,{operation:nte.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[u].name},r[u].name);n.push(E)}ZE.trace("All results from configure_cluster remove node:",n);let s=[],i=e.connections.length;for(let u=0;u<i;u++){let d=e.connections[u],E=await d0(ote,d,d.node_name);s.push(E)}ZE.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,_=n.concat(s);for(let u=0,d=_.length;u<d;u++){let E=_[u];E.status==="rejected"&&(ZE.error(E),o.includes(E.node_name)||o.push(E.node_name)),(E?.result?.message?.includes?.("Successfully")||E?.result?.includes?.("Successfully"))&&(l=!0),!(typeof E.result=="string"&&E.result.includes("Successfully removed")||E.status==="rejected")&&c.push({node_name:E?.node_name,subscriptions:E?.result})}if(ste.isEmptyOrZeroLength(o))return{message:lte,connections:c};if(l)return{message:_te,failed_nodes:o,connections:c};throw u0(new Error,ute,_0.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(dte,"configureCluster");async function d0(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(d0,"functionWrapper")});var m0=R((tOe,p0)=>{"use strict";var f_=require("joi"),fte=nt(),{validateSchemaExists:E0,validateTableExists:Ete,validateSchemaName:h0}=Ps(),hte=f_.object({operation:f_.string().valid("purge_stream"),schema:f_.string().custom(E0).custom(h0).optional(),database:f_.string().custom(E0).custom(h0).optional(),table:f_.string().custom(Ete).required()});function pte(e){return fte.validateBySchema(e,hte)}a(pte,"purgeStreamValidator");p0.exports=pte});var aA=R((nOe,S0)=>{"use strict";var{handleHDBError:mte,hdb_errors:Ste}=ie(),{HTTP_STATUS_CODES:Tte}=Ste,gte=m0(),Rte=gt(),Ate=Ai();S0.exports=Ote;async function Ote(e){e.schema=e.schema??e.database;let t=gte(e);if(t)throw mte(t,t.message,Tte.BAD_REQUEST,void 0,void 0,!0);Ate.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Rte.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(Ote,"purgeStream")});var rh=R((iOe,b0)=>{"use strict";var lA=Ai(),bte=gt(),R0=X(),th=L(),ya=Ze(),Nte=Y(),cA=k(),{RemotePayloadObject:yte}=i_(),{ErrorCode:T0}=require("nats"),g0=R0.get(th.CONFIG_PARAMS.CLUSTERING_ENABLED),A0=R0.get(th.CONFIG_PARAMS.CLUSTERING_NODENAME);b0.exports={clusterStatus:Ite,buildNodeStatus:O0};async function Ite(){let e={node_name:A0,is_enabled:g0,connections:[]};if(!g0)return e;let t=await lA.getAllNodeRecords();if(Nte.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(O0(t[n],e.connections));return await Promise.allSettled(r),e}a(Ite,"clusterStatus");async function O0(e,t){let r=e.name,n=new yte(th.OPERATIONS_ENUM.CLUSTER_STATUS,A0,void 0,await lA.getSystemInfo()),s,i,o=ya.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await bte.request(ya.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===ya.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ya.CLUSTER_STATUS_STATUSES.CLOSED,cA.error(`Error getting node status from ${r} `,s))}catch(l){cA.warn(`Error getting node status from ${r}`,l),l.code===T0.NoResponders?o=ya.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===T0.Timeout?o=ya.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ya.CLUSTER_STATUS_STATUSES.CLOSED}let c=new wte(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==th.PRE_4_0_0_VERSION&&await lA.upsertNodeRecord(l)}catch(l){cA.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(O0,"buildNodeStatus");function wte(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(wte,"NodeStatusObject")});var sh=R((aOe,N0)=>{"use strict";var{handleHDBError:Cte,hdb_errors:Dte}=ie(),{HTTP_STATUS_CODES:Lte}=Dte,Pte=gt(),Mte=Ai(),uA=Y(),nh=require("joi"),Ute=nt(),vte=2e3,Bte=nh.object({timeout:nh.number().min(1),connected_nodes:nh.boolean(),routes:nh.boolean()});N0.exports=Hte;async function Hte(e){Mte.checkClusteringEnabled();let t=Ute.validateBySchema(e,Bte);if(t)throw Cte(t,t.message,Lte.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||uA.autoCastBoolean(n),o=s===void 0||uA.autoCastBoolean(s),c={nodes:[]},l=await Pte.getServerList(r??vte),_={};if(i)for(let u=0,d=l.length;u<d;u++){let E=l[u].statsz;E&&(_[l[u].server.name]=E.routes)}for(let u=0,d=l.length;u<d;u++){if(l[u].statsz)continue;let E=l[u].server,f=l[u].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:l[u].response_time};i&&(h.connected_nodes=[],_[E.name]&&_[E.name].forEach(m=>{h.connected_nodes.includes(m.name.slice(0,-4))||h.connected_nodes.push(m.name.slice(0,-4))})),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(m=>({host:m.split(":")[0],port:uA.autoCast(m.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Hte,"clusterNetwork")});var C0=R((lOe,w0)=>{"use strict";var _A=require("joi"),y0=nt(),{route_constraints:I0}=DT();w0.exports={setRoutesValidator:xte,deleteRoutesValidator:Gte};function xte(e){let t=_A.object({server:_A.valid("hub","leaf").required(),routes:I0.required()});return y0.validateBySchema(e,t)}a(xte,"setRoutesValidator");function Gte(e){let t=_A.object({routes:I0.required()});return y0.validateBySchema(e,t)}a(Gte,"deleteRoutesValidator")});var oh=R((_Oe,M0)=>{"use strict";var Ia=Et(),dA=Y(),ih=L(),D0=C0(),{handleHDBError:L0,hdb_errors:qte}=ie(),{HTTP_STATUS_CODES:P0}=qte,Fte="cluster routes successfully set",kte="cluster routes successfully deleted";M0.exports={setRoutes:$te,getRoutes:Vte,deleteRoutes:Yte};function $te(e){let t=D0.setRoutesValidator(e);if(t)throw L0(t,t.message,P0.BAD_REQUEST,void 0,void 0,!0);let r=Ia.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,l=e.routes.length;c<l;c++){let _=e.routes[c];_.port=dA.autoCast(_.port);let u=n.some(E=>E.host===_.host&&E.port===_.port),d=s.some(E=>E.host===_.host&&E.port===_.port);u||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?Ia.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):Ia.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:Fte,set:o,skipped:i}}a($te,"setRoutes");function Vte(){let e=Ia.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Vte,"getRoutes");function Yte(e){let t=D0.deleteRoutesValidator(e);if(t)throw L0(t,t.message,P0.BAD_REQUEST,void 0,void 0,!0);let r=Ia.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,l=!1;for(let _=0,u=e.routes.length;_<u;_++){let d=e.routes[_],E=!1;for(let f=0,h=n.length;f<h;f++){let m=n[f];if(d.host===m.host&&d.port===m.port){n.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,m=s.length;h<m;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),l=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(n=dA.isEmptyOrZeroLength(n)?null:n,Ia.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=dA.isEmptyOrZeroLength(s)?null:s,Ia.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:kte,deleted:i,skipped:o}}a(Yte,"deleteRoutes")});var v0=R((fOe,U0)=>{"use strict";var E_=require("alasql"),wa=require("recursive-iterator"),ds=k(),Kte=Y(),h_=L(),fA=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,Qte(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(s=>h_.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!h_.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][h_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Wte(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let l=this.affected_attributes.get(i).get(o).filter(_=>!h_.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new E_.yy.Column({columnid:_});s.tableid&&(u.tableid=s.tableid),this.ast.columns.push(u),l.includes(_)||l.push(_)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function Wte(e){return e.filter(t=>t[h_.PERMS_CRUD_ENUM.READ])}a(Wte,"filterReadRestrictedAttrs");function Qte(e,t,r,n,s){jte(e,t,r,n,s)}a(Qte,"interpretAST");function p_(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(p_,"addSchemaTableToMap");function jte(e,t,r,n,s){if(!e){ds.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof E_.yy.Insert?Zte(e,t,r):e instanceof E_.yy.Select?zte(e,t,r,n,s):e instanceof E_.yy.Update?Jte(e,t,r):e instanceof E_.yy.Delete?Xte(e,t,r):ds.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(jte,"getRecordAttributesAST");function zte(e,t,r,n,s){if(!e){ds.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Kte.isEmptyOrZeroLength(i)){ds.error("No schema specified");return}e.from.forEach(c=>{p_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),p_(c.table,t,r,n,s)});let o=new wa(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,_=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{ds.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(c.columnid)<0&&t.get(_).get(l).push(c.columnid)}if(e.where){let c=new wa(e.where),l=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid?_.tableid:l;if(!t.get(i).has(u))if(r.has(u))u=r.get(u);else{ds.info(`table specified as ${u} not found.`);continue}t.get(i).get(u).indexOf(_.columnid)<0&&t.get(i).get(u).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new wa(c.on);for(let{node:_}of l)if(_&&_.columnid){let u=_.tableid,d=s.get(u);if(!t.get(d).has(u))if(r.has(u))u=r.get(u);else{ds.info(`table specified as ${u} not found.`);continue}t.get(d).get(u).indexOf(_.columnid)<0&&t.get(d).get(u).push(_.columnid)}}),e.order){let c=new wa(e.order);for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid,u=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{ds.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(l.columnid)<0&&t.get(u).get(_).push(l.columnid)}}}a(zte,"getSelectAttributes");function Jte(e,t,r){if(!e){ds.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new wa(e.columns),s=e.table.databaseid;p_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&EA(e.table.tableid,s,i.columnid,t,r)}a(Jte,"getUpdateAttributes");function Xte(e,t,r){if(!e){ds.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new wa(e.where),s=e.table.databaseid;p_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&EA(e.table.tableid,s,i.columnid,t,r)}a(Xte,"getDeleteAttributes");function Zte(e,t,r){if(!e){ds.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new wa(e.columns),s=e.into.databaseid;p_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&EA(e.into.tableid,s,i.columnid,t,r)}a(Zte,"getInsertAttributes");function EA(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(EA,"pushAttribute");U0.exports=fA});var ch=R((hOe,G0)=>{var ah=la(),B0=require("chalk"),hn=k(),H0=require("prompt"),{promisify:ere}=require("util"),hA=L(),tre=require("fs-extra"),rre=require("path"),nre=Y(),sre=Ri(),x0=X();x0.initSync();var ire=require("moment"),ore=ere(H0.get),are=rre.join(x0.getHdbBasePath(),hA.LICENSE_KEY_DIR_NAME,hA.LICENSE_FILE_NAME,hA.LICENSE_FILE_NAME);G0.exports={getFingerprint:lre,setLicense:cre,parseLicense:pA,register:ure,getRegistrationInfo:dre};async function cre(e){if(e&&e.key&&e.company){try{hn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await pA(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw hn.error(r),hn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(cre,"setLicense");async function lre(){let e={};try{e=await ah.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw hn.error(r),hn.error(t),new Error(r)}return e}a(lre,"getFingerprint");async function pA(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");hn.info("Validating license input...");let r=ah.validateLicense(e,t);if(hn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(hn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(hn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{hn.info("writing license to disk"),await tre.writeFile(are,JSON.stringify({license_key:e,company:t}))}catch(n){throw hn.error("Failed to write License"),n}return"Registration successful."}a(pA,"parseLicense");async function ure(){let e=await _re();return pA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(ure,"register");async function _re(){let e=await ah.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:B0.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:B0.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{H0.start()}catch(n){hn.error(n)}let r;try{r=await ore(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(_re,"promptForRegistration");async function dre(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await ah.getLicense()}catch(r){throw hn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(nre.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=sre.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=ire.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(dre,"getRegistrationInfo")});var F0=R((mOe,q0)=>{"use strict";var fre=Ze(),mA=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+fre.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:d,routes:E,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};q0.exports=mA});var V0=R((TOe,$0)=>{"use strict";var k0=Ze(),SA=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d){this.port=t,d===null&&(d=void 0),this.server_name=r+k0.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+k0.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:u,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};$0.exports=SA});var K0=R((ROe,Y0)=>{"use strict";var TA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};Y0.exports=TA});var Q0=R((OOe,W0)=>{"use strict";var Ere=Ze(),gA=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Ere.SERVER_SUFFIX.ADMIN,this.password=r}};W0.exports=gA});var fh=R((NOe,J0)=>{"use strict";var qc=require("path"),_h=require("fs-extra"),hre=F0(),pre=V0(),mre=K0(),Sre=Q0(),RA=Ur(),kc=Y(),$r=Et(),uh=L(),m_=Ze(),{CONFIG_PARAMS:At}=uh,$c=k(),S_=X(),j0=fi(),AA=gt(),Fc="clustering",Tre=1e4,z0=50;J0.exports={generateNatsConfig:Rre,removeNatsConfig:Are,getHubConfigPath:gre};function gre(){let e=S_.get(At.ROOTPATH);return qc.join(e,Fc,m_.NATS_CONFIG_FILES.HUB_SERVER)}a(gre,"getHubConfigPath");async function Rre(e=!1,t=void 0){S_.initSync();let r=S_.get(At.ROOTPATH),n=qc.join(r,Fc,m_.PID_FILES.HUB),s=qc.join(r,Fc,m_.PID_FILES.LEAF),i=$r.getConfigFromFile(At.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=qc.join(r,Fc,m_.NATS_CONFIG_FILES.HUB_SERVER),c=qc.join(r,Fc,m_.NATS_CONFIG_FILES.LEAF_SERVER),l=$r.getConfigFromFile(At.CLUSTERING_TLS_CERTIFICATE),_=$r.getConfigFromFile(At.CLUSTERING_TLS_PRIVATEKEY),u=$r.getConfigFromFile(At.CLUSTERING_TLS_CERT_AUTH),d=$r.getConfigFromFile(At.CLUSTERING_TLS_INSECURE),E=$r.getConfigFromFile(At.CLUSTERING_TLS_VERIFY),f=$r.getConfigFromFile(At.CLUSTERING_NODENAME),h=$r.getConfigFromFile(At.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await AA.checkNATSServerInstalled()||dh("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await RA.listUsers(),S=$r.getConfigFromFile(At.CLUSTERING_USER),g=await RA.getClusterUser();(kc.isEmpty(g)||g.active!==!0)&&dh(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await lh(At.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await lh(At.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await lh(At.CLUSTERING_HUBSERVER_NETWORK_PORT),await lh(At.CLUSTERING_LEAFSERVER_NETWORK_PORT));let T=[],b=[];for(let[z,Z]of m.entries())Z.role?.role===uh.ROLE_TYPES_ENUM.CLUSTER_USER&&Z.active&&(T.push(new Sre(Z.username,j0.decrypt(Z.hash))),b.push(new mre(Z.username,j0.decrypt(Z.hash))));let N=[],{hub_routes:U}=$r.getClusteringRoutes();if(!kc.isEmptyOrZeroLength(U))for(let z of U)N.push(`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@${z.host}:${z.port}`);let v=new hre($r.getConfigFromFile(At.CLUSTERING_HUBSERVER_NETWORK_PORT),f,n,l,_,u,d,E,h,$r.getConfigFromFile(At.CLUSTERING_HUBSERVER_CLUSTER_NAME),$r.getConfigFromFile(At.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,T,b);u==null&&(delete v.tls.ca_file,delete v.leafnodes.tls.ca_file),t=kc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===uh.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await _h.writeJson(o,v),$c.trace(`Hub server config written to ${o}`));let F=`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,M=`tls://${g.uri_encoded_name}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,W=new pre($r.getConfigFromFile(At.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,s,i,[F],[M],T,b,l,_,u,d);u==null&&delete W.tls.ca_file,(t===void 0||t===uh.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await _h.writeJson(c,W),$c.trace(`Leaf server config written to ${c}`))}a(Rre,"generateNatsConfig");async function lh(e){let t=S_.get(e);return kc.isEmpty(t)&&dh(`port undefined for '${e}'`),await kc.isPortTaken(t)&&dh(`'${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(lh,"isPortAvailable");function dh(e){let t=`Error generating clustering config: ${e}`;$c.error(t),console.error(t),process.exit(1)}a(dh,"generateNatsConfigError");async function Are(e){let{port:t,config_file:r}=AA.getServerConfig(e),{username:n,decrypt_hash:s}=await RA.getClusterUser(),i=0,o=2e3;for(;i<z0;){try{let u=await AA.createConnection(t,n,s,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){$c.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=z0)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let _=o*(i*2);_>3e4&&$c.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await kc.async_set_timeout(_)}let c="0".repeat(Tre),l=qc.join(S_.get(At.ROOTPATH),Fc,r);await _h.writeFile(l,c),await _h.remove(l),$c.notify(e,"started.")}a(Are,"removeNatsConfig")});var nB=R((IOe,rB)=>{"use strict";var pn=X(),Ore=la(),Te=L(),T_=Ze(),Oi=require("path"),{PACKAGE_ROOT:hh}=L(),X0=X(),Eh=Y(),Vc="/dev/null",bre=Oi.join(hh,"launchServiceScripts"),Z0=Oi.join(hh,"utility/scripts"),Nre=Oi.join(Z0,Te.HDB_RESTART_SCRIPT),eB=Oi.resolve(hh,"dependencies",`${process.platform}-${process.arch}`,T_.NATS_BINARY_NAME);function tB(){let t=Ore.licenseSearch().ram_allocation||Te.RAM_ALLOCATION_ENUM.DEFAULT,r=Te.MEM_SETTING_KEY+t,n={[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Eh.noBootFile()&&(n[Te.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Eh.getEnvCliRootPath()),{name:Te.PROCESS_DESCRIPTORS.HDB,script:Te.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:hh}}a(tB,"generateMainServerConfig");var yre=9930;function Ire(){pn.initSync(!0);let e=pn.get(Te.CONFIG_PARAMS.ROOTPATH),t=Oi.join(e,"clustering",T_.NATS_CONFIG_FILES.HUB_SERVER),r=Oi.join(pn.get(Te.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Te.LOG_NAMES.HDB),n=X0.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=T_.LOG_LEVEL_FLAGS[pn.get(Te.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==yre?"-"+n:""),script:eB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return pn.get(Te.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Vc,i.error_file=Vc),i}a(Ire,"generateNatsHubServerConfig");var wre=9940;function Cre(){pn.initSync(!0);let e=pn.get(Te.CONFIG_PARAMS.ROOTPATH),t=Oi.join(e,"clustering",T_.NATS_CONFIG_FILES.LEAF_SERVER),r=Oi.join(pn.get(Te.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Te.LOG_NAMES.HDB),n=X0.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=T_.LOG_LEVEL_FLAGS[pn.get(Te.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==wre?"-"+n:""),script:eB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return pn.get(Te.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Vc,i.error_file=Vc),i}a(Cre,"generateNatsLeafServerConfig");function Dre(){pn.initSync();let e=Oi.join(pn.get(Te.CONFIG_PARAMS.LOGGING_ROOT),Te.LOG_NAMES.HDB),t={name:Te.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Te.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:bre,autorestart:!1};return pn.get(Te.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Vc,t.error_file=Vc),t}a(Dre,"generateClusteringUpgradeV4ServiceConfig");function Lre(){let e={[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.RESTART_HDB};return Eh.noBootFile()&&(e[Te.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Eh.getEnvCliRootPath()),{...{name:Te.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:Z0},script:Nre}}a(Lre,"generateRestart");function Pre(){return{apps:[tB()]}}a(Pre,"generateAllServiceConfigs");rB.exports={generateAllServiceConfigs:Pre,generateMainServerConfig:tB,generateRestart:Lre,generateNatsHubServerConfig:Ire,generateNatsLeafServerConfig:Cre,generateClusteringUpgradeV4ServiceConfig:Dre}});var Yc=R((DOe,mB)=>{"use strict";var He=L(),Mre=Y(),Ni=fh(),ph=gt(),bi=Ze(),go=nB(),mh=X(),Ro=k(),Ure=Ai(),{startWorker:sB,onMessageFromWorkers:vre}=rt(),Bre=gi(),COe=require("util"),Hre=require("child_process"),xre=require("fs"),{execFile:Gre}=Hre,De;mB.exports={enterPM2Mode:qre,start:Ao,stop:OA,reload:oB,restart:aB,list:bA,describe:uB,connect:yi,kill:Yre,startAllServices:Kre,startService:NA,getUniqueServicesList:_B,restartAllServices:Wre,isServiceRegistered:dB,reloadStopStart:fB,restartHdb:lB,deleteProcess:$re,startClusteringProcesses:hB,startClusteringThreads:pB,isHdbRestartRunning:Vre,isClusteringRunning:jre,stopClustering:Qre,reloadClustering:zre,expectedRestartOfChildren:cB};var g_=!1;vre(e=>{e.type==="restart"&&mh.initSync(!0)});function qre(){g_=!0}a(qre,"enterPM2Mode");function yi(){return De||(De=require("pm2")),new Promise((e,t)=>{De.connect((r,n)=>{Ro.setupConsoleLogging(),r&&t(r),e(n)})})}a(yi,"connect");var Tr,Fre=10,iB;function Ao(e,t=!1){if(g_)return kre(e);let r=Gre(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let o=Tr.indexOf(r);o>-1&&Tr.splice(o,1),!iB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Fre&&(xre.existsSync(Ni.getHubConfigPath())?Ao(e):(await Ni.generateNatsConfig(!0),Ao(e),await new Promise(c=>setTimeout(c,3e3)),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=mh.get(He.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,_=0,u;for(;l=c.exec(i);){if(l.index&&bi.LOG_LEVEL_HIERARCHY[o]>=bi.LOG_LEVEL_HIERARCHY[u||"info"]){let f=u===bi.LOG_LEVELS.ERR||u===bi.LOG_LEVELS.WRN?Ro.OUTPUTS.STDERR:Ro.OUTPUTS.STDOUT;Ro.logCustomLevel(u||"info",f,n,i.slice(_,l.index).trim())}let[d,E]=l;_=l.index+d.length,u=bi.LOG_LEVELS[E]}if(bi.LOG_LEVEL_HIERARCHY[o]>=bi.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===bi.LOG_LEVELS.ERR||u===bi.LOG_LEVELS.WRN?Ro.OUTPUTS.STDERR:Ro.OUTPUTS.STDOUT;Ro.logCustomLevel(u||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!Tr&&(Tr=[],!t)){let i=a(()=>{iB=!0,Tr&&(Tr.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)}Tr.push(r)}a(Ao,"start");function kre(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.start(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a(kre,"startWithPM2");function OA(e){if(!g_){for(let t of Tr||[])t.name===e&&(Tr.splice(Tr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.stop(e,async(n,s)=>{n&&(De.disconnect(),r(n)),De.delete(e,(i,o)=>{i&&(De.disconnect(),r(n)),De.disconnect(),t(o)})})})}a(OA,"stop");function oB(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.reload(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a(oB,"reload");function aB(e){if(!g_){cB();for(let t of Tr||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.restart(e,(n,s)=>{De.disconnect(),t(s)})})}a(aB,"restart");function cB(){for(let e of Tr||[])e.config&&(e.config.restarts=0)}a(cB,"expectedRestartOfChildren");function $re(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.delete(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a($re,"deleteProcess");async function lB(){await Ao(go.generateRestart())}a(lB,"restartHdb");async function Vre(){let e=await bA();for(let t in e)if(e[t].name===He.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Vre,"isHdbRestartRunning");function bA(){return new Promise(async(e,t)=>{try{await yi()}catch(r){t(r)}De.list((r,n)=>{r&&(De.disconnect(),t(r)),De.disconnect(),e(n)})})}a(bA,"list");function uB(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.describe(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a(uB,"describe");function Yre(){if(!g_){for(let e of Tr||[])e.kill();Tr=[];return}return new Promise(async(e,t)=>{try{await yi()}catch(r){t(r)}De.killDaemon((r,n)=>{r&&(De.disconnect(),t(r)),De.disconnect(),e(n)})})}a(Yre,"kill");async function Kre(){try{await hB(),await pB(),await Ao(go.generateAllServiceConfigs())}catch(e){throw De?.disconnect(),e}}a(Kre,"startAllServices");async function NA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case He.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=go.generateMainServerConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=go.generateNatsIngestServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=go.generateNatsReplyServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=go.generateNatsHubServerConfig(),await Ao(r,t),await Ni.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=go.generateNatsLeafServerConfig(),await Ao(r,t),await Ni.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=go.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ao(r)}catch(r){throw De?.disconnect(),r}}a(NA,"startService");async function _B(){try{let e=await bA(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw De?.disconnect(),e}}a(_B,"getUniqueServicesList");async function Wre(e=[]){try{let t=!1,r=await _B();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===He.PROCESS_DESCRIPTORS.HDB?t=!0:await aB(o))}t&&await fB(He.PROCESS_DESCRIPTORS.HDB)}catch(t){throw De?.disconnect(),t}}a(Wre,"restartAllServices");async function dB(e){if(Tr?.find(r=>r.name===e))return!0;let t=await Bre.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(dB,"isServiceRegistered");async function fB(e){let t=mh.get(He.CONFIG_PARAMS.THREADS_COUNT)??mh.get(He.CONFIG_PARAMS.THREADS),r=await uB(e),n=Mre.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await OA(e),await NA(e)):e===He.PROCESS_DESCRIPTORS.HDB?await lB():await oB(e)}a(fB,"reloadStopStart");var EB;async function hB(e=!1){for(let t in He.CLUSTERING_PROCESSES){let r=He.CLUSTERING_PROCESSES[t];await NA(r,e)}}a(hB,"startClusteringProcesses");async function pB(){EB=sB(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await ph.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await ph.updateLocalStreams();let e=await Ure.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===He.PRE_4_0_0_VERSION){Ro.info("Starting clustering upgrade 4.0.0 process"),sB(He.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(pB,"startClusteringThreads");async function Qre(){for(let e in He.CLUSTERING_PROCESSES)if(e!==He.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===He.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await EB.terminate();else{let t=He.CLUSTERING_PROCESSES[e];await OA(t)}}a(Qre,"stopClustering");async function jre(){for(let e in He.CLUSTERING_PROCESSES){let t=He.CLUSTERING_PROCESSES[e];if(await dB(t)===!1)return!1}return!0}a(jre,"isClusteringRunning");async function zre(){await Ni.generateNatsConfig(!0),await ph.reloadNATSHub(),await ph.reloadNATSLeaf(),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(zre,"reloadClustering")});var gh={};$e(gh,{compactOnStart:()=>Jre,copyDb:()=>OB});async function Jre(){A_.notify("Running compact on start"),console.log("Running compact on start");let e=(0,yA.get)(Oo.CONFIG_PARAMS.ROOTPATH),t=new Map,r=Br();try{for(let n in r){if(n==="system")continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,Sh.join)(e,"backup",n+".mdb"),o=(0,Sh.join)(e,Oo.DATABASES_DIR_NAME,n+"-copy.mdb"),c=await SB(n);console.log("Database",n,"before compact has a total record count of",c),t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await OB(n,o),console.log("Backing up",n,"to",i),await(0,Ca.move)(s,i,{overwrite:!0})}R_();for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Ca.move)(i,s,{overwrite:!0}),await(0,Ca.remove)((0,Sh.join)(e,Oo.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));R_()}catch(n){A_.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,IA.updateConfigValue)(Oo.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,Ca.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw R_(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await SB(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
13
+ `,"")}a(fU,"runCommand");async function n6(){try{await U8.access(aR)}catch{return!1}let e=await fU(`${aR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return v8.eq(t,t6)}a(n6,"checkNATSServerInstalled");async function dR(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await _U.getClusterUser();if(Aa(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}_s.trace("create nats connection called");let i=await Y8({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),_s.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&_s.error("Error with Nats client connection, connection closed",o),i===mr&&EU()}),i}a(dR,"createConnection");function EU(){mr=void 0,Ta=void 0,ga=void 0,Ra=void 0}a(EU,"clearClientCache");async function s6(){mr&&(await mr.drain(),mr=void 0,Ta=void 0,ga=void 0,Ra=void 0)}a(s6,"closeConnection");var mr,Ra;async function Ju(){return Ra||(Ra=dR(Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),mr=await Ra),mr||Ra}a(Ju,"getConnection");async function Xu(){if(Ta)return Ta;Aa(mr)&&await Ju();let{domain:e}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Aa(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ta=await mr.jetstreamManager({domain:e,timeout:6e4}),Ta}a(Xu,"getJetStreamManager");async function hU(){if(ga)return ga;Aa(mr)&&await Ju();let{domain:e}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Aa(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ga=mr.jetstream({domain:e,timeout:6e4}),ga}a(hU,"getJetStream");async function qs(){let e=mr||await Ju(),t=Ta||await Xu(),r=ga||await hU();return{connection:e,jsm:t,js:r}}a(qs,"getNATSReferences");async function i6(e){let t=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await _U.getClusterUser(),s=await dR(t,r,n),i=_R(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=dU.decode(u.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await yE.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(i6,"getServerList");async function fR(e,t){let{jsm:r}=await qs(),n=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:K8.File,retention:W8.Limits,subjects:t,discard:Q8.Old,max_msgs:s,max_bytes:i,max_age:n})}a(fR,"createLocalStream");async function pU(){let{jsm:e}=await qs(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(pU,"listStreams");async function o6(e){let{jsm:t}=await qs();await t.streams.delete(e)}a(o6,"deleteLocalStream");async function a6(e){let{connection:t}=await qs(),r=[],n=_R(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(dU.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(a6,"listRemoteStreams");async function c6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await qs(),i=aU(),o={durable_name:i,ack_policy:lR.Explicit};t&&(o.deliver_policy=uR.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let u of l){let d=cR(u.data),E={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};if(u.headers&&(E.origin=u.headers.get(nr.MSG_HEADERS.ORIGIN)),_.push(E),u.ack(),u.info.pending===0)break}return await c.delete(),_}a(c6,"viewStream");async function*l6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await qs(),i=aU(),o={durable_name:i,ack_policy:lR.Explicit};t&&(o.deliver_policy=uR.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of l){let u=cR(_.data);u[0]||(u=[u]);for(let d of u){let E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(E.origin=_.headers.get(nr.MSG_HEADERS.ORIGIN)),yield E}if(_.ack(),_.info.pending===0)break}await c.delete()}a(l6,"viewStreamIterator");async function u6(e,t,r,n){_s.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=mU(n,r);let{js:s}=await qs(),i=await wE(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:uU.encode(n);try{_s.trace(`publishToStream publishing to subject: ${o}`),Z8(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return TU(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){_s.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await fR(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(u6,"publishToStream");function mU(e,t){t===void 0&&(t=z8());let r=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(nr.MSG_HEADERS.ORIGIN)&&r&&t.append(nr.MSG_HEADERS.ORIGIN,r),t}a(mU,"addNatsMsgHeader");function Lc(e){e=e.toLowerCase();let t=zu.join(Qt.get(Ce.CONFIG_PARAMS.ROOTPATH),e6);if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Aa(oR)&&(oR={port:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+nr.SERVER_SUFFIX.HUB,config_file:nr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:zu.join(t,nr.PID_FILES.HUB),hdb_nats_path:t}),oR;if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Aa(iR)&&(iR={port:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+nr.SERVER_SUFFIX.LEAF,config_file:nr.NATS_CONFIG_FILES.LEAF_SERVER,domain:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+nr.SERVER_SUFFIX.LEAF,pid_file_path:zu.join(t,nr.PID_FILES.LEAF),hdb_nats_path:t}),iR;_s.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Lc,"getServerConfig");async function SU(e,t,r,n){try{await e.consumers.add(t,{ack_policy:lR.Explicit,durable_name:r,deliver_policy:uR.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(SU,"createConsumer");async function _6(e,t,r){await e.consumers.delete(t,r)}a(_6,"removeConsumer");function d6(e){return e.split(".")[1]}a(d6,"extractServerName");async function f6(e,t,r=6e4,n=_R()){if(!yE.isObject(t))throw new Error("data param must be an object");let s=uU.encode(t),{connection:i}=await qs(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return cR(c.data)}a(f6,"request");function ER(e){return new Promise(async(t,r)=>{let n=G8(aR,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(ER,"reloadNATS");async function E6(){let{pid_file_path:e}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await ER(e)}a(E6,"reloadNATSHub");async function h6(){let{pid_file_path:e}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await ER(e)}a(h6,"reloadNATSLeaf");function p6(e,t,r){let n;switch(e.code){case oU.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case oU.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(p6,"requestErrorHandler");async function m6(e,t){let r=t+nr.SERVER_SUFFIX.LEAF,{connection:n}=await qs(),{jsm:s}=await N6(r),{schema:i,table:o}=e,c=IE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await TU(async()=>{if(e.subscribe===!0)await SU(s,c,n.info.server_name,l);else try{await _6(s,c,n.info.server_name)}catch(_){_s.trace(_)}})}a(m6,"updateRemoteConsumer");async function S6(e,t,r,n){let s=IE.createNatsTableStreamName(e,t),i=r+nr.SERVER_SUFFIX.LEAF,o={type:Ce.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!lU&&$8()<Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=sR();await c(o)}await F8(o),n==="stop"&&await yE.async_set_timeout(1e3)}a(S6,"updateConsumerIterator");function TU(e){return q8.writeTransaction(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(TU,"exclusiveLock");async function gU(e,t){let r=IE.createNatsTableStreamName(e,t),n=await wE(),s=A6(e,t,n);await fR(r,[s])}a(gU,"createLocalTableStream");async function T6(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await gU(n,s)}}a(T6,"createTableStreams");async function RU(e,t,r=void 0){if(Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=IE.createNatsTableStreamName(e,t),{domain:s}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Ju()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")_s.warn(n);else throw n}}a(RU,"purgeTableStream");async function g6(e,t){if(Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await RU(e,t[r])}a(g6,"purgeSchemaTableStreams");async function R6(e){return(await Xu()).streams.info(e)}a(R6,"getStreamInfo");function A6(e,t,r){return`${nr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(A6,"createSubjectName");async function wE(){if(ju)return ju;if(ju=(await Xu())?.nc?.info?.server_name,ju===void 0)throw new Error("Unable to get jetstream manager server name");return ju}a(wE,"getJsmServerName");async function O6(){let e=await Xu(),t=await wE(),r=await pU();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=b6(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let u=_.join(".");_s.trace(`Updating stream subject name from: ${i} to: ${u}`),s.subjects[0]=u,await e.streams.update(s.name,s)}}a(O6,"updateLocalStreams");function b6(e){let{config:t}=e,r=!1,n=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(b6,"updateStreamLimits");async function N6(e){let t,r;try{t=await mr.jetstream({domain:e}),r=await mr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw _s.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(N6,"connectToRemoteJS")});var PE=R((LRe,yU)=>{"use strict";var Pc=Cf(),Mc=CM(),y6=k(),I6=require("uuid").v4,DRe=require("clone"),DE=hi(),Uc=L(),w6=require("util"),Eo=Hn(),{handleHDBError:xr,hdb_errors:C6}=ie(),{HDB_ERROR_MSGS:CE,HTTP_STATUS_CODES:Gr}=C6,{SchemaEventMsg:LE}=os(),OU=gt(),{getDatabases:D6}=(Re(),ae(Ve)),{transformReq:vc}=Y();yU.exports={createSchema:L6,createSchemaStructure:bU,createTable:P6,createTableStructure:NU,createAttribute:H6,dropSchema:M6,dropTable:U6,dropAttribute:v6,getBackup:x6};async function L6(e){let t=await bU(e);return DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema)),t}a(L6,"createSchema");async function bU(e){let t=Pc.schema_object(e);if(t)throw xr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);if(vc(e),!await Mc.checkSchemaExists(e.schema))throw xr(new Error,CE.SCHEMA_EXISTS_ERR(e.schema),Gr.BAD_REQUEST,Uc.LOG_LEVELS.ERROR,CE.SCHEMA_EXISTS_ERR(e.schema),!0);return await Eo.createSchema(e),`database '${e.schema}' successfully created`}a(bU,"createSchemaStructure");async function P6(e){return vc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await NU(e)}a(P6,"createTable");async function NU(e){let t=Pc.create_table_object(e);if(t)throw xr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);if(Pc.validateTableResidence(e.residence),!await Mc.checkSchemaTableExists(e.schema,e.table))throw xr(new Error,CE.TABLE_EXISTS_ERR(e.schema,e.table),Gr.BAD_REQUEST,Uc.LOG_LEVELS.ERROR,CE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:I6(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Eo.createTable(n,e);else throw xr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Gr.BAD_REQUEST);else await Eo.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(NU,"createTableStructure");async function M6(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Pc.schema_object(e),n=t??r;if(n)throw xr(n,n.message,Gr.BAD_REQUEST,void 0,void 0,!0);vc(e);let s=await Mc.checkSchemaExists(e.schema);if(s)throw xr(new Error,s,Gr.NOT_FOUND,Uc.LOG_LEVELS.ERROR,s,!0);let i=await Mc.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Eo.dropSchema(e),DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema)),await OU.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(M6,"dropSchema");async function U6(e){let t=Pc.table_object(e);if(t)throw xr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);vc(e);let r=await Mc.checkSchemaTableExists(e.schema,e.table);if(r)throw xr(new Error,r,Gr.NOT_FOUND,Uc.LOG_LEVELS.ERROR,r,!0);return await Eo.dropTable(e),await OU.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(U6,"dropTable");async function v6(e){let t=Pc.attribute_object(e);if(t)throw xr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);vc(e);let r=await Mc.checkSchemaTableExists(e.schema,e.table);if(r)throw xr(new Error,r,Gr.NOT_FOUND,Uc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw xr(new Error,"You cannot drop a hash attribute",Gr.BAD_REQUEST,void 0,void 0,!0);if(Uc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw xr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Gr.BAD_REQUEST,void 0,void 0,!0);try{return await Eo.dropAttribute(e),B6(e),DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw y6.error(`Got an error deleting attribute ${w6.inspect(e)}.`),n}}a(v6,"dropAttribute");function B6(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(B6,"dropAttributeFromGlobal");async function H6(e){vc(e);let t=D6()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw xr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Gr.BAD_REQUEST,void 0,void 0,!0);return await Eo.createAttribute(e),DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(H6,"createAttribute");function x6(e){return Eo.getBackup(e)}a(x6,"getBackup")});var wU=R((MRe,IU)=>{"use strict";var{OPERATIONS_ENUM:G6}=L(),hR=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=G6.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};IU.exports=hR});var pR=R((BRe,MU)=>{"use strict";var q6=Hn(),vRe=wU(),ME=Y(),UE=L(),F6=X(),{handleHDBError:CU,hdb_errors:k6}=ie(),{HDB_ERROR_MSGS:DU,HTTP_STATUS_CODES:LU}=k6,$6=Object.values(UE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),PU="To use this operation audit log must be enabled in harperdb-config.yaml";MU.exports=V6;async function V6(e){if(ME.isEmpty(e.schema))throw new Error(DU.SCHEMA_REQUIRED_ERR);if(ME.isEmpty(e.table))throw new Error(DU.TABLE_REQUIRED_ERR);if(!F6.get(UE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw CU(new Error,PU,LU.BAD_REQUEST,UE.LOG_LEVELS.ERROR,PU,!0);let t=ME.checkSchemaTableExist(e.schema,e.table);if(t)throw CU(new Error,t,LU.NOT_FOUND,UE.LOG_LEVELS.ERROR,t,!0);if(!ME.isEmpty(e.search_type)&&$6.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await q6.readAuditLog(e)}a(V6,"readAuditLog")});var vU=R((xRe,UU)=>{"use strict";var{OPERATIONS_ENUM:Y6}=L(),mR=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Y6.GET_BACKUP,this.schema=t,this.table=r}};UU.exports=mR});var xU=R((kRe,HU)=>{"use strict";var K6=Hn(),qRe=vU(),SR=Y(),W6=L(),FRe=X(),{handleHDBError:Q6,hdb_errors:j6}=ie(),{HDB_ERROR_MSGS:BU,HTTP_STATUS_CODES:z6}=j6;HU.exports=J6;async function J6(e){if(SR.isEmpty(e.schema))throw new Error(BU.SCHEMA_REQUIRED_ERR);if(SR.isEmpty(e.table))throw new Error(BU.TABLE_REQUIRED_ERR);let t=SR.checkSchemaTableExist(e.schema,e.table);if(t)throw Q6(new Error,t,z6.NOT_FOUND,W6.LOG_LEVELS.ERROR,t,!0);return await K6.getBackup(read_audit_log_object)}a(J6,"getBackup")});var VU=R((VRe,$U)=>{var ho=require("validate.js"),qU=nt(),Bc=L(),{handleHDBError:X6,hdb_errors:Z6}=ie(),{HDB_ERROR_MSGS:Rt,HTTP_STATUS_CODES:e9}=Z6,TR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),t9={STRUCTURE_USER:"structure_user"},GU=Object.values(Bc.ROLE_TYPES_ENUM),r9="attribute_permissions",n9="attribute_name",{PERMS_CRUD_ENUM:Hc}=Bc,s9=[r9,...Object.values(Hc)],FU=[Hc.READ,Hc.INSERT,Hc.UPDATE],i9=[n9,...FU];function o9(e){let t=TR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,kU(e,t)}a(o9,"addRoleValidation");function a9(e){let t=TR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,kU(e,t)}a(a9,"alterRoleValidation");function c9(e){let t=TR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,qU.validateObject(e,t)}a(c9,"dropRoleValidation");var l9=["operation","role","id","permission","hdb_user","hdb_auth_header"];function kU(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)l9.includes(n[o])||s.push(n[o]);s.length>0&&wt(Rt.INVALID_ROLE_JSON_KEYS(s),r);let i=qU.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{wt(o,r)}),e.permission){let o=u9(e);o&&wt(o,r),GU.forEach(c=>{e.permission[c]&&!ho.isBoolean(e.permission[c])&&wt(Rt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(GU.indexOf(o)<0){if(o===t9.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let _=0,u=l.length;_<u;_++){let d=l[_];global.hdb_schema[d]||wt(Rt.SCHEMA_NOT_FOUND(d),r)}continue}wt(Rt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){wt(Rt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let _=c.tables[l];if(!l||!global.hdb_schema[o][l]){wt(Rt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(_).forEach(u=>{s9.includes(u)||wt(Rt.INVALID_PERM_KEY(u),r,o,l)}),Object.values(Hc).forEach(u=>{ho.isDefined(_[u])?ho.isBoolean(_[u])||wt(Rt.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):wt(Rt.TABLE_PERM_MISSING(u),r,o,l)}),ho.isDefined(_.attribute_permissions)){if(!ho.isArray(_.attribute_permissions)){wt(Rt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}}else{wt(Rt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}if(_.attribute_permissions){let u=global.hdb_schema[o][l].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in _.attribute_permissions){let f=_.attribute_permissions[E];if(Object.keys(f).forEach(m=>{!i9.includes(m)&&m!==Hc.DELETE&&wt(Rt.INVALID_ATTR_PERM_KEY(m),r,o,l)}),!ho.isDefined(f.attribute_name)){wt(Rt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=f.attribute_name;if(!u.includes(h)){wt(Rt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}FU.forEach(m=>{ho.isDefined(f[m])?ho.isBoolean(f[m])||wt(Rt.ATTR_PERM_NOT_BOOLEAN(m,h),r,o,l):wt(Rt.ATTR_PERM_MISSING(m,h),r,o,l)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let E=`${o}.${l}`;wt(Rt.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,l)}}}}return _9(r)}a(kU,"customValidate");$U.exports={addRoleValidation:o9,alterRoleValidation:a9,dropRoleValidation:c9};function u9(e){let{operation:t,permission:r}=e;if(t===Bc.OPERATIONS_ENUM.ADD_ROLE||t===Bc.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return Rt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Bc.ROLE_TYPES_ENUM.SUPER_USER:Bc.ROLE_TYPES_ENUM.CLUSTER_USER;return Rt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(u9,"validateNoSUPerms");function _9(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:Rt.ROLE_PERMS_ERROR,...e};return X6(new Error,n,e9.BAD_REQUEST)}else return null}a(_9,"generateRolePermResponse");function wt(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(wt,"addPermError")});var BE=R((KRe,QU)=>{"use strict";var YU=Pr(),KU=ur(),d9=ia(),RR=VU(),AR=hi(),f9=require("uuid").v4,E9=require("util"),vE=L(),h9=Y(),OR=KU.searchByValue,p9=KU.searchByHash,m9=E9.promisify(d9.delete),S9=as(),T9=Nc(),{hdb_errors:g9,handleHDBError:Oa}=ie(),{HDB_ERROR_MSGS:WU,HTTP_STATUS_CODES:Zu}=g9,{UserEventMsg:bR}=os();QU.exports={addRole:R9,alterRole:A9,dropRole:O9,listRoles:b9};function gR(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(gR,"scrubRoleDetails");async function R9(e){let t=RR.addRoleValidation(e);if(t)throw t;e=gR(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await OR(r)||[])}catch(i){throw Oa(i)}if(n&&n.length>0)throw Oa(new Error,WU.ROLE_ALREADY_EXISTS(e.role),Zu.CONFLICT,void 0,void 0,!0);e.id||(e.id=f9());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await YU.insert(s),AR.signalUserChange(new bR(process.pid)),e=gR(e),e}a(R9,"addRole");async function A9(e){let t=RR.alterRoleValidation(e);if(t)throw t;e=gR(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await YU.update(r)}catch(s){throw Oa(s)}if(n&&n?.message==="updated 0 of 1 records")throw Oa(new Error,"Invalid role id",Zu.BAD_REQUEST,void 0,void 0,!0);return await AR.signalUserChange(new bR(process.pid)),e}a(A9,"alterRole");async function O9(e){let t=RR.dropRoleValidation(e);if(t)throw Oa(new Error,t,Zu.BAD_REQUEST,void 0,void 0,!0);let r=new T9(vE.SYSTEM_SCHEMA_NAME,vE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await p9(r));if(n.length===0)throw Oa(new Error,WU.ROLE_NOT_FOUND,Zu.NOT_FOUND,void 0,void 0,!0);let s=new S9(vE.SYSTEM_SCHEMA_NAME,vE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await OR(s)),o=!1;if(h9.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Oa(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Zu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await m9(c),AR.signalUserChange(new bR(process.pid)),`${n[0].role} successfully deleted`}a(O9,"dropRole");async function b9(){return OR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(b9,"listRoles")});var XU=R((QRe,JU)=>{"use strict";var N9=X(),po=require("joi"),y9=nt(),jU=require("moment"),I9=require("fs-extra"),NR=require("path"),w9=require("lodash"),e_=L(),{LOG_LEVELS:ba}=L(),C9="YYYY-MM-DD hh:mm:ss",D9=NR.resolve(__dirname,"../logs");JU.exports=function(e){return y9.validateBySchema(e,L9)};var L9=po.object({from:po.custom(zU),until:po.custom(zU),level:po.valid(ba.NOTIFY,ba.FATAL,ba.ERROR,ba.WARN,ba.INFO,ba.DEBUG,ba.TRACE),order:po.valid("asc","desc"),limit:po.number().min(1),start:po.number().min(0),log_name:po.custom(P9)});function zU(e,t){if(jU(e,jU.ISO_8601).format(C9)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(zU,"validateDatetime");function P9(e,t){if(w9.invert(e_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=N9.get(e_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?e_.LOG_NAMES.HDB:e,i=s===e_.LOG_NAMES.INSTALL?NR.join(D9,e_.LOG_NAMES.INSTALL):NR.join(n,s);return I9.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(P9,"validateReadLogPath")});var IR=R((zRe,ev)=>{"use strict";var HE=L(),M9=k(),U9=X(),v9=XU(),yR=require("path"),ZU=require("fs-extra"),{once:B9}=require("events"),{handleHDBError:H9,hdb_errors:x9}=ie(),{PACKAGE_ROOT:G9}=L(),q9=yR.join(G9,"logs"),F9=1e3,k9=200;ev.exports=$9;async function $9(e){let t=v9(e);if(t)throw H9(t,t.message,x9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=U9.get(HE.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?HE.LOG_NAMES.HDB:e.log_name,s=n===HE.LOG_NAMES.INSTALL?yR.join(q9,HE.LOG_NAMES.INSTALL):yR.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,_=e.until!==void 0,u=_?new Date(e.until):void 0,d=e.limit===void 0?F9:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,m=0;E==="desc"&&!l&&!u&&(m=Math.max(ZU.statSync(s).size-(h+5)*k9,0));let S=ZU.createReadStream(s,{start:m});S.on("error",v=>{M9.error(v)});let g=0,T=[],b="",N;S.on("data",v=>{let F=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;v=b+v;let M=0,W;for(;(W=F.exec(v))&&!S.destroyed;){N&&(N.message=v.slice(M,W.index),U(N));let[z,Z,ce]=W,_e=ce.split("] ["),de=_e[0],xe=_e[1];_e.splice(0,2),N={timestamp:Z,thread:de,level:xe,tags:_e,message:""},M=W.index+z.length}b=v.slice(M)}),S.on("end",v=>{S.destroyed||N&&(N.message=b.trim(),U(N))}),S.resume();function U(v){let F,M,W;switch(!0){case(i&&c&&_):F=new Date(v.timestamp),M=new Date(l),W=new Date(u),v.level===o&&F>=M&&F<=W&&g<f?g++:v.level===o&&F>=M&&F<=W&&(mo(v,E,T),g++,g===h&&S.destroy());break;case(i&&c):F=new Date(v.timestamp),M=new Date(l),v.level===o&&F>=M&&g<f?g++:v.level===o&&F>=M&&(mo(v,E,T),g++,g===h&&S.destroy());break;case(i&&_):F=new Date(v.timestamp),W=new Date(u),v.level===o&&F<=W&&g<f?g++:v.level===o&&F<=W&&(mo(v,E,T),g++,g===h&&S.destroy());break;case(c&&_):F=new Date(v.timestamp),M=new Date(l),W=new Date(u),F>=M&&F<=W&&g<f?g++:F>=M&&F<=W&&(mo(v,E,T),g++,g===h&&S.destroy());break;case i:v.level===o&&g<f?g++:v.level===o&&(mo(v,E,T),g++,g===h&&S.destroy());break;case c:F=new Date(v.timestamp),M=new Date(l),F>=M&&g<f?g++:F>=M&&g>=f&&(mo(v,E,T),g++,g===h&&S.destroy());break;case _:F=new Date(v.timestamp),W=new Date(u),F<=W&&g<f?g++:F<=W&&g>=f&&(mo(v,E,T),g++,g===h&&S.destroy());break;default:g<f?g++:(mo(v,E,T),g++,g===h&&S.destroy())}}return a(U,"onLogMessage"),await B9(S,"close"),T}a($9,"readLog");function mo(e,t,r){t==="desc"?V9(e,r):t==="asc"?Y9(e,r):r.push(e)}a(mo,"pushLineToResult");function V9(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(V9,"insertDescending");function Y9(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(Y9,"insertAscending")});var xE=R((tAe,sv)=>{"use strict";var wR=require("joi"),{string:t_,boolean:tv,date:K9}=wR.types(),W9=nt(),{validateSchemaExists:XRe,validateTableExists:ZRe,validateSchemaName:eAe}=Ps(),Q9=L(),j9=Ze(),rv=X();rv.initSync();var z9=t_.invalid(rv.get(Q9.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(j9.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(),nv={operation:t_.valid("add_node","update_node","set_node_replication"),node_name:z9,subscriptions:wR.array().items({table:t_.optional(),schema:t_.optional(),database:t_.optional(),subscribe:tv.required(),publish:tv.required().custom(X9),start_time:K9.iso()}).min(1).required()};function J9(e){return W9.validateBySchema(e,wR.object(nv))}a(J9,"addUpdateNodeValidator");function X9(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(X9,"checkForFalsy");sv.exports={addUpdateNodeValidator:J9,validation_schema:nv}});var ov=R((nAe,iv)=>{var Z9=nt(),e7={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};iv.exports=function(e){return Z9.validateObject(e,e7)}});var GE=R((sAe,av)=>{"use strict";var t7=L().OPERATIONS_ENUM,CR=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=t7.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};av.exports=CR});var lv=R((oAe,cv)=>{"use strict";var r7={OPERATION:"operation",REFRESH:"refresh"},DR=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},LR=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};cv.exports={JWTTokens:DR,TOKEN_TYPE_ENUM:r7,JWTRSAKeys:LR}});var s_=R((cAe,fv)=>{"use strict";var n_=require("jsonwebtoken"),PR=require("fs-extra"),MR=Y(),xn=L(),{handleHDBError:qr,hdb_errors:n7}=ie(),{HTTP_STATUS_CODES:Fr,AUTHENTICATION_ERROR_MSGS:kr}=n7,r_=k(),uv=qf(),BR=Ur(),s7=Pr().update,i7=GE(),o7=hi(),{UserEventMsg:a7}=os(),So=X();So.initSync();var UR=require("path"),{JWTTokens:c7,JWTRSAKeys:l7,TOKEN_TYPE_ENUM:qE}=lv(),u7=So.get(xn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?So.get(xn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",_7=So.get(xn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?So.get(xn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",FE="RS256",vR;fv.exports={createTokens:d7,validateOperationToken:E7,refreshOperationToken:f7,validateRefreshToken:dv};async function d7(e){if(MR.isEmpty(e)||typeof e!="object")throw qr(new Error,kr.INVALID_AUTH_OBJECT,Fr.BAD_REQUEST,void 0,void 0,!0);if(MR.isEmpty(e.username))throw qr(new Error,kr.USERNAME_REQUIRED,Fr.BAD_REQUEST,void 0,void 0,!0);if(MR.isEmpty(e.password))throw qr(new Error,kr.PASSWORD_REQUIRED,Fr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await BR.findAndValidateUser(e.username,e.password),!t)throw qr(new Error,kr.INVALID_CREDENTIALS,Fr.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw r_.error(E),qr(new Error,kr.INVALID_CREDENTIALS,Fr.UNAUTHORIZED,void 0,void 0,!0)}let r=await kE(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await _v(i,r.private_key,r.passphrase),c=await n_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:_7,algorithm:FE,subject:qE.REFRESH}),l=uv.hash(c),_=new i7(xn.SYSTEM_SCHEMA_NAME,xn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await s7(_)}catch(E){r_.error(E),d=E}if(d!==void 0||u.skipped_hashes.length>0)throw qr(new Error,kr.REFRESH_TOKEN_SAVE_FAILED,Fr.INTERNAL_SERVER_ERROR);return o7.signalUserChange(new a7(process.pid)),new c7(o,c)}a(d7,"createTokens");async function _v(e,t,r){return await n_.sign(e,{key:t,passphrase:r},{expiresIn:u7,algorithm:FE,subject:qE.OPERATION})}a(_v,"signOperationToken");async function kE(){if(vR===void 0)try{let e=UR.join(So.getHdbBasePath(),xn.LICENSE_KEY_DIR_NAME,xn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=UR.join(So.getHdbBasePath(),xn.LICENSE_KEY_DIR_NAME,xn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=UR.join(So.getHdbBasePath(),xn.LICENSE_KEY_DIR_NAME,xn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await PR.readFile(e)).toString(),s=(await PR.readFile(t)).toString(),i=(await PR.readFile(r)).toString();vR=new l7(i,s,n)}catch(e){throw r_.error(e),qr(new Error,kr.NO_ENCRYPTION_KEYS,Fr.INTERNAL_SERVER_ERROR)}return vR}a(kE,"getJWTRSAKeys");async function f7(e){if(!e)throw qr(new Error,kr.INVALID_BODY,Fr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw qr(new Error,kr.REFRESH_TOKEN_REQUIRED,Fr.BAD_REQUEST,void 0,void 0,!0);await dv(e.refresh_token);let t=await kE(),r=await n_.decode(e.refresh_token);return{operation_token:await _v({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(f7,"refreshOperationToken");async function E7(e){try{let t=await kE(),r=await n_.verify(e,t.public_key,{algorithms:FE,subject:qE.OPERATION});return await BR.findAndValidateUser(r.username,void 0,!1)}catch(t){throw r_.warn(t),t.name&&t.name==="TokenExpiredError"?qr(new Error,kr.TOKEN_EXPIRED,Fr.FORBIDDEN):qr(new Error,kr.INVALID_TOKEN,Fr.UNAUTHORIZED)}}a(E7,"validateOperationToken");async function dv(e){let t;try{let r=await kE(),n=await n_.verify(e,r.public_key,{algorithms:FE,subject:qE.REFRESH});t=await BR.findAndValidateUser(n.username,void 0,!1)}catch(r){throw r_.warn(r),r.name&&r.name==="TokenExpiredError"?qr(new Error,kr.TOKEN_EXPIRED,Fr.FORBIDDEN):qr(new Error,kr.INVALID_TOKEN,Fr.UNAUTHORIZED)}if(!uv.validate(t.refresh_token,e))throw qr(new Error,kr.INVALID_TOKEN,Fr.UNAUTHORIZED);return t}a(dv,"validateRefreshToken")});var HR=R((_Ae,pv)=>{"use strict";var h7=ov(),xc=require("passport"),p7=require("passport-local").Strategy,m7=require("passport-http").BasicStrategy,S7=require("util"),T7=Ur(),hv=S7.callbackify(T7.findAndValidateUser),uAe=nn(),g7=L(),Ev=s_();xc.use(new p7(function(e,t,r){hv(e,t,r)}));xc.use(new m7(function(e,t,r){hv(e,t,r)}));xc.serializeUser(function(e,t){t(null,e)});xc.deserializeUser(function(e,t){t(null,e)});function R7(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":xc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===g7.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Ev.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):Ev.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:xc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(R7,"authorize");function A7(e,t){let r=h7(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(A7,"checkPermissions");pv.exports={authorize:R7,checkPermissions:A7}});var Gc=R((fAe,mv)=>{"use strict";var xR=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},GR=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};mv.exports={Node:xR,NodeSubscription:GR}});var Tv=R((hAe,Sv)=>{"use strict";var O7=L().OPERATIONS_ENUM,qR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=O7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Sv.exports=qR});var i_=R((mAe,gv)=>{"use strict";var FR=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},kR=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};gv.exports={RemotePayloadObject:FR,RemotePayloadSubscription:kR}});var Av=R((TAe,Rv)=>{"use strict";var $R=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};Rv.exports=$R});var Nv=R((bAe,bv)=>{"use strict";var b7=Av(),RAe=_t(),Ov=Ye(),N7=k(),{getSchemaPath:AAe,getTransactionAuditStorePath:OAe}=Je(),{getDatabases:y7}=(Re(),ae(Ve));bv.exports=I7;async function I7(e){let t=new b7;try{let r=y7()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await Ov.environmentDataSize(schema_path,e.name),o=await Ov.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){N7.warn(`unable to stat table dbi due to ${r}`)}return t}a(I7,"lmdbGetTableSize")});var Iv=R((yAe,yv)=>{"use strict";var VR=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};yv.exports=VR});var gi=R((PAe,Lv)=>{"use strict";var w7=require("fs-extra"),C7=require("path"),Sr=require("systeminformation"),To=k(),wv=gt(),wAe=Ze(),VE=L(),D7=Nv(),L7=Ei(),{getThreadInfo:Cv}=rt(),tA=X();tA.initSync();var P7=Iv(),{openEnvironment:CAe}=Ye(),{getSchemaPath:DAe}=Je(),{database:LAe,databases:YR}=(Re(),ae(Ve)),$E;Lv.exports={getHDBProcessInfo:jR,getNetworkInfo:JR,getDiskInfo:zR,getMemoryInfo:QR,getCPUInfo:WR,getTimeInfo:KR,getSystemInformation:XR,systemInformation:M7,getTableSize:ZR,getMetrics:eA};function KR(){return Sr.time()}a(KR,"getTimeInfo");async function WR(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:_,...u}=await Sr.cpu();u.cpu_speed=await Sr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:m,raw_currentload_user:S,cpus:g,...T}=await Sr.currentLoad();return T.cpus=[],g.forEach(b=>{let{raw_load:N,raw_load_idle:U,raw_load_irq:v,raw_load_nice:F,raw_load_system:M,raw_load_user:W,...z}=b;T.cpus.push(z)}),u.current_load=T,u}catch(e){return To.error(`error in getCPUInfo: ${e}`),{}}}a(WR,"getCPUInfo");async function QR(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Sr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return To.error(`error in getMemoryInfo: ${e}`),{}}}a(QR,"getMemoryInfo");async function jR(){let e={core:[],clustering:[]};try{let t=await Sr.processes(),r;try{r=Number.parseInt(await w7.readFile(C7.join(tA.get(VE.CONFIG_PARAMS.ROOTPATH),VE.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===VE.NODE_ERROR_CODES.ENOENT)To.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return To.error(`error in getHDBProcessInfo: ${t}`),e}}a(jR,"getHDBProcessInfo");async function zR(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Sr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,..._}=await Sr.fsStats();return e.read_write=_,e.size=await Sr.fsSize(),e}catch(t){return To.error(`error in getDiskInfo: ${t}`),e}}a(zR,"getDiskInfo");async function JR(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Sr.networkInterfaceDefault(),e.latency=await Sr.inetChecksite("google.com"),(await Sr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:_,ieee8021xState:u,carrier_changes:d,...E}=n;e.interfaces.push(E)}),(await Sr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return To.error(`error in getNetworkInfo: ${t}`),e}}a(JR,"getNetworkInfo");async function XR(){if($E!==void 0)return $E;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Sr.osInfo();e=c;let l=await Sr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,$E=e,$E}catch(t){return To.error(`error in getSystemInformation: ${t}`),e}}a(XR,"getSystemInformation");async function ZR(){let e=[],t=await L7.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await D7(n));return e}a(ZR,"getTableSize");async function eA(){let e={};for(let t in YR){let r=e[t]={},n=r.tables={};for(let s in YR[t])try{let i=YR[t][s];r.readers||(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[_,u,d]=l.trim().split(" ");return{pid:_,thread:u,txnid:d}}),i.primaryStore.auditStore&&(r.audit=i.auditStore.getStats()));let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){To.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(eA,"getMetrics");async function Dv(){if(tA.get(VE.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await wv.getNATSReferences(),t=await wv.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(Dv,"getNatsStreamInfo");async function M7(e){let t=new P7;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await XR(),t.time=KR(),t.cpu=await WR(),t.memory=await QR(),t.disk=await zR(),t.network=await JR(),t.harperdb_processes=await jR(),t.table_size=await ZR(),t.metrics=await eA(),t.threads=await Cv(),t.replication=await Dv(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await XR();break;case"time":t.time=KR();break;case"cpu":t.cpu=await WR();break;case"memory":t.memory=await QR();break;case"disk":t.disk=await zR();break;case"network":t.network=await JR();break;case"harperdb_processes":t.harperdb_processes=await jR();break;case"table_size":t.table_size=await ZR();break;case"database_metrics":case"metrics":t.metrics=await eA();break;case"threads":t.threads=await Cv();break;case"replication":t.replication=await Dv();break;default:break}return t}a(M7,"systemInformation")});var Ri=R((UAe,Pv)=>{"use strict";Pv.exports={version:U7,printVersion:v7};var YE=ma();function U7(){if(YE)return YE.version}a(U7,"version");function v7(){YE&&console.log(`HarperDB Version ${YE.version}`)}a(v7,"printVersion")});var Ai=R((xAe,Bv)=>{"use strict";var B7=Pr(),rA=Y(),H7=require("util"),Na=L(),Mv=X();Mv.initSync();var x7=HR(),Uv=ur(),{Node:BAe,NodeSubscription:HAe}=Gc(),G7=Nc(),q7=Tv(),{RemotePayloadObject:F7,RemotePayloadSubscription:k7}=i_(),{handleHDBError:$7,hdb_errors:V7}=ie(),{HTTP_STATUS_CODES:Y7,HDB_ERROR_MSGS:K7}=V7,W7=as(),Q7=gi(),j7=Ri(),{getDatabases:z7}=(Re(),ae(Ve)),J7=H7.promisify(x7.authorize),X7=Uv.searchByHash,Z7=Uv.searchByValue;Bv.exports={authHeaderToUser:eee,isEmpty:tee,getNodeRecord:ree,upsertNodeRecord:nee,buildNodePayloads:see,checkClusteringEnabled:iee,getAllNodeRecords:oee,getSystemInfo:aee,reverseSubscription:vv};async function eee(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await J7(t,null),e}a(eee,"authHeaderToUser");function tee(e){return e==null}a(tee,"isEmpty");async function ree(e){let t=new G7(Na.SYSTEM_SCHEMA_NAME,Na.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return X7(t)}a(ree,"getNodeRecord");async function nee(e){let t=new q7(Na.SYSTEM_SCHEMA_NAME,Na.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return B7.upsert(t)}a(nee,"upsertNodeRecord");function vv(e){if(rA.isEmpty(e.subscribe)||rA.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(vv,"reverseSubscription");function see(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:_}=c,u=rA.getTableHashAttribute(l,_),{subscribe:d,publish:E}=vv(c),f=z7()[l]?.[_],h=new k7(l,_,u,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);s.push(h)}return new F7(r,t,s,n)}a(see,"buildNodePayloads");function iee(){if(!Mv.get(Na.CONFIG_PARAMS.CLUSTERING_ENABLED))throw $7(new Error,K7.CLUSTERING_NOT_ENABLED,Y7.BAD_REQUEST,void 0,void 0,!0)}a(iee,"checkClusteringEnabled");async function oee(){let e=new W7(Na.SYSTEM_SCHEMA_NAME,Na.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Z7(e))}a(oee,"getAllNodeRecords");async function aee(){let e=await Q7.getSystemInformation();return{hdb_version:j7.version(),node_version:e.node_version,platform:e.platform}}a(aee,"getSystemInfo")});var nA=R((qAe,Vv)=>{"use strict";var KE=gt(),Hv=Y(),xv=Ze(),Gv=L(),WE=k(),qv=PE(),cee=Uu(),{RemotePayloadObject:lee}=i_(),{handleHDBError:Fv,hdb_errors:uee}=ie(),{HTTP_STATUS_CODES:kv}=uee,{NodeSubscription:$v}=Gc();Vv.exports=_ee;async function _ee(e,t){let r;try{r=await KE.request(`${t}.${xv.REQUEST_SUFFIX}`,new lee(Gv.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),WE.trace("Response from remote describe all request:",r)}catch(o){WE.error(`addNode received error from describe all request to remote node: ${o}`);let c=KE.requestErrorHandler(o,"add_node",t);throw Fv(new Error,c,kv.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===xv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw Fv(new Error,o,kv.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===Gv.SYSTEM_SCHEMA_NAME){await KE.createLocalTableStream(l,c);let h=new $v(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=Hv.doesSchemaExist(l),u=n[l]!==void 0,d=c?Hv.doesTableExist(l,c):!0,E=c?n?.[l]?.[c]!==void 0:!0;if(!_&&!u||!d&&!E){s.push(o);continue}if(!_&&u&&(WE.trace(`addNode creating schema: ${l}`),await qv.createSchema({operation:"create_schema",schema:l})),!d&&E){WE.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new cee(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await qv.createTable(h)}await KE.createLocalTableStream(l,c);let f=new $v(l,c,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:s}}a(_ee,"reviewSubscriptions")});var c_=R((kAe,Wv)=>{"use strict";var{handleHDBError:QE,hdb_errors:dee}=ie(),{HTTP_STATUS_CODES:jE}=dee,{addUpdateNodeValidator:fee}=xE(),zE=k(),Kv=L(),Yv=Ze(),Eee=Y(),o_=gt(),a_=Ai(),hee=X(),pee=nA(),{Node:mee,NodeSubscription:See}=Gc(),{broadcast:Tee}=rt(),gee="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Ree="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Aee=hee.get(Kv.CONFIG_PARAMS.CLUSTERING_NODENAME);Wv.exports=Oee;async function Oee(e,t=!1){zE.trace("addNode called with:",e),a_.checkClusteringEnabled();let r=fee(e);if(r)throw QE(r,r.message,jE.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await a_.getNodeRecord(n);if(!Eee.isEmptyOrZeroLength(d))throw QE(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,jE.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await pee(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=gee,o;let c=a_.buildNodePayloads(s,Aee,Kv.OPERATIONS_ENUM.ADD_NODE,await a_.getSystemInfo()),l=[];for(let d=0,E=s.length;d<E;d++){let f=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new See(f.schema,f.table,f.publish,f.subscribe))}zE.trace("addNode sending remote payload:",c);let _;try{_=await o_.request(`${n}.${Yv.REQUEST_SUFFIX}`,c)}catch(d){zE.error(`addNode received error from request: ${d}`);for(let f=0,h=s.length;f<h;f++){let m=s[f];m.publish=!1,m.subscribe=!1,await o_.updateRemoteConsumer(m,n)}let E=o_.requestErrorHandler(d,"add_node",n);throw QE(new Error,E,jE.INTERNAL_SERVER_ERROR,"error",E)}if(_.status===Yv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw QE(new Error,d,jE.INTERNAL_SERVER_ERROR,"error",d)}zE.trace(_);for(let d=0,E=s.length;d<E;d++){let f=s[d];await o_.updateRemoteConsumer(f,n),f.subscribe===!0&&await o_.updateConsumerIterator(f.schema,f.table,n,"start")}let u=new mee(n,l,_.system_info);return await a_.upsertNodeRecord(u),Tee({type:"nats_update"}),i.length>0?o.message=Ree:o.message=`Successfully added '${n}' to manifest`,o}a(Oee,"addNode")});var oA=R((YAe,zv)=>{"use strict";var{handleHDBError:sA,hdb_errors:bee}=ie(),{HTTP_STATUS_CODES:iA}=bee,{addUpdateNodeValidator:Nee}=xE(),l_=k(),jv=L(),Qv=Ze(),VAe=Y(),u_=gt(),__=Ai(),yee=X(),{cloneDeep:Iee}=require("lodash"),wee=nA(),{Node:Cee,NodeSubscription:Dee}=Gc(),{broadcast:Lee}=rt(),Pee="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Mee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Uee=yee.get(jv.CONFIG_PARAMS.CLUSTERING_NODENAME);zv.exports=vee;async function vee(e){l_.trace("updateNode called with:",e),__.checkClusteringEnabled();let t=Nee(e);if(t)throw sA(t,t.message,iA.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await __.getNodeRecord(r);s.length>0&&(n=Iee(s));let{added:i,skipped:o}=await wee(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Pee,c;let l=__.buildNodePayloads(i,Uee,jv.OPERATIONS_ENUM.UPDATE_NODE,await __.getSystemInfo());for(let u=0,d=i.length;u<d;u++){let E=i[u];l_.trace(`updateNode updating work stream for node: ${r} subscription:`,E),i[u].start_time===void 0&&delete i[u].start_time}l_.trace("updateNode sending remote payload:",l);let _;try{_=await u_.request(`${r}.${Qv.REQUEST_SUFFIX}`,l)}catch(u){l_.error(`updateNode received error from request: ${u}`);let d=u_.requestErrorHandler(u,"update_node",r);throw sA(new Error,d,iA.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===Qv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw sA(new Error,u,iA.INTERNAL_SERVER_ERROR,"error",u)}l_.trace(_);for(let u=0,d=i.length;u<d;u++){let E=i[u];await u_.updateRemoteConsumer(E,r),E.subscribe===!0?await u_.updateConsumerIterator(E.schema,E.table,r,"start"):await u_.updateConsumerIterator(E.schema,E.table,r,"stop")}return n||(n=[new Cee(r,[],_.system_info)]),await Bee(n[0],i,_.system_info),o.length>0?c.message=Mee:c.message=`Successfully updated '${r}'`,c}a(vee,"updateNode");async function Bee(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,_=e.subscriptions.length;l<_;l++){let u=n.subscriptions[l];if(u.schema===o.schema&&u.table===o.table){u.publish=o.publish,u.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new Dee(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await __.upsertNodeRecord(n),Lee({type:"nats_update"})}a(Bee,"updateNodeTable")});var t0=R((WAe,e0)=>{"use strict";var Zv=require("joi"),{string:Jv}=Zv.types(),Hee=nt(),Xv=L(),xee=X(),Gee=Ze();e0.exports=qee;function qee(e){let t=Jv.invalid(xee.get(Xv.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Gee.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=Zv.object({operation:Jv.valid(Xv.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Hee.validateBySchema(e,r)}a(qee,"removeNodeValidator")});var XE=R((jAe,o0)=>{"use strict";var{handleHDBError:r0,hdb_errors:Fee}=ie(),{HTTP_STATUS_CODES:n0}=Fee,kee=t0(),d_=k(),s0=Ai(),$ee=Y(),JE=L(),i0=Ze(),aA=gt(),Vee=X(),{RemotePayloadObject:Yee}=i_(),{NodeSubscription:Kee}=Gc(),Wee=Mu(),Qee=ia(),{broadcast:jee}=rt(),zee=Vee.get(JE.CONFIG_PARAMS.CLUSTERING_NODENAME);o0.exports=Jee;async function Jee(e){d_.trace("removeNode called with:",e),s0.checkClusteringEnabled();let t=kee(e);if(t)throw r0(t,t.message,n0.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await s0.getNodeRecord(r);if($ee.isEmptyOrZeroLength(n))throw r0(new Error,`Node '${r}' was not found.`,n0.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Yee(JE.OPERATIONS_ENUM.REMOVE_NODE,zee,[]),i,o=!1;for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];u.subscribe===!0&&await aA.updateConsumerIterator(u.schema,u.table,r,"stop");try{await aA.updateRemoteConsumer(new Kee(u.schema,u.table,!1,!1),r)}catch(d){d_.error(d)}}try{i=await aA.request(`${r}.${i0.REQUEST_SUFFIX}`,s),d_.trace("Remove node reply from remote node:",r,i)}catch(l){d_.error("removeNode received error from request:",l),o=!0}let c=new Wee(JE.SYSTEM_SCHEMA_NAME,JE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Qee.deleteRecord(c),jee({type:"nats_update"}),i?.status===i0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(d_.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(Jee,"removeNode")});var l0=R((JAe,c0)=>{"use strict";var a0=require("joi"),{string:Xee,array:Zee}=a0.types(),ete=nt(),tte=xE();c0.exports=rte;function rte(e){let t=a0.object({operation:Xee.valid("configure_cluster").required(),connections:Zee.items(tte.validation_schema).required()});return ete.validateBySchema(e,t)}a(rte,"configureClusterValidator")});var eh=R((ZAe,E0)=>{"use strict";var nte=L(),ZE=k(),ste=Y(),ite=XE(),ote=c_(),u0=Ai(),ate=l0(),{handleHDBError:_0,hdb_errors:cte}=ie(),{HTTP_STATUS_CODES:d0}=cte,lte="Configure cluster complete.",ute="Failed to configure the cluster. Check the logs for more details.",_te="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";E0.exports=dte;async function dte(e){ZE.trace("configure cluster called with:",e),u0.checkClusteringEnabled();let t=ate(e);if(t)throw _0(t,t.message,d0.BAD_REQUEST,void 0,void 0,!0);let r=await u0.getAllNodeRecords(),n=[];for(let u=0,d=r.length;u<d;u++){let E=await f0(ite,{operation:nte.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[u].name},r[u].name);n.push(E)}ZE.trace("All results from configure_cluster remove node:",n);let s=[],i=e.connections.length;for(let u=0;u<i;u++){let d=e.connections[u],E=await f0(ote,d,d.node_name);s.push(E)}ZE.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,_=n.concat(s);for(let u=0,d=_.length;u<d;u++){let E=_[u];E.status==="rejected"&&(ZE.error(E),o.includes(E.node_name)||o.push(E.node_name)),(E?.result?.message?.includes?.("Successfully")||E?.result?.includes?.("Successfully"))&&(l=!0),!(typeof E.result=="string"&&E.result.includes("Successfully removed")||E.status==="rejected")&&c.push({node_name:E?.node_name,subscriptions:E?.result})}if(ste.isEmptyOrZeroLength(o))return{message:lte,connections:c};if(l)return{message:_te,failed_nodes:o,connections:c};throw _0(new Error,ute,d0.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(dte,"configureCluster");async function f0(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(f0,"functionWrapper")});var S0=R((tOe,m0)=>{"use strict";var f_=require("joi"),fte=nt(),{validateSchemaExists:h0,validateTableExists:Ete,validateSchemaName:p0}=Ps(),hte=f_.object({operation:f_.string().valid("purge_stream"),schema:f_.string().custom(h0).custom(p0).optional(),database:f_.string().custom(h0).custom(p0).optional(),table:f_.string().custom(Ete).required()});function pte(e){return fte.validateBySchema(e,hte)}a(pte,"purgeStreamValidator");m0.exports=pte});var cA=R((nOe,T0)=>{"use strict";var{handleHDBError:mte,hdb_errors:Ste}=ie(),{HTTP_STATUS_CODES:Tte}=Ste,gte=S0(),Rte=gt(),Ate=Ai();T0.exports=Ote;async function Ote(e){e.schema=e.schema??e.database;let t=gte(e);if(t)throw mte(t,t.message,Tte.BAD_REQUEST,void 0,void 0,!0);Ate.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Rte.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(Ote,"purgeStream")});var rh=R((iOe,N0)=>{"use strict";var uA=Ai(),bte=gt(),A0=X(),th=L(),ya=Ze(),Nte=Y(),lA=k(),{RemotePayloadObject:yte}=i_(),{ErrorCode:g0}=require("nats"),R0=A0.get(th.CONFIG_PARAMS.CLUSTERING_ENABLED),O0=A0.get(th.CONFIG_PARAMS.CLUSTERING_NODENAME);N0.exports={clusterStatus:Ite,buildNodeStatus:b0};async function Ite(){let e={node_name:O0,is_enabled:R0,connections:[]};if(!R0)return e;let t=await uA.getAllNodeRecords();if(Nte.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(b0(t[n],e.connections));return await Promise.allSettled(r),e}a(Ite,"clusterStatus");async function b0(e,t){let r=e.name,n=new yte(th.OPERATIONS_ENUM.CLUSTER_STATUS,O0,void 0,await uA.getSystemInfo()),s,i,o=ya.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await bte.request(ya.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===ya.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ya.CLUSTER_STATUS_STATUSES.CLOSED,lA.error(`Error getting node status from ${r} `,s))}catch(l){lA.warn(`Error getting node status from ${r}`,l),l.code===g0.NoResponders?o=ya.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===g0.Timeout?o=ya.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ya.CLUSTER_STATUS_STATUSES.CLOSED}let c=new wte(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==th.PRE_4_0_0_VERSION&&await uA.upsertNodeRecord(l)}catch(l){lA.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(b0,"buildNodeStatus");function wte(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(wte,"NodeStatusObject")});var sh=R((aOe,y0)=>{"use strict";var{handleHDBError:Cte,hdb_errors:Dte}=ie(),{HTTP_STATUS_CODES:Lte}=Dte,Pte=gt(),Mte=Ai(),_A=Y(),nh=require("joi"),Ute=nt(),vte=2e3,Bte=nh.object({timeout:nh.number().min(1),connected_nodes:nh.boolean(),routes:nh.boolean()});y0.exports=Hte;async function Hte(e){Mte.checkClusteringEnabled();let t=Ute.validateBySchema(e,Bte);if(t)throw Cte(t,t.message,Lte.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||_A.autoCastBoolean(n),o=s===void 0||_A.autoCastBoolean(s),c={nodes:[]},l=await Pte.getServerList(r??vte),_={};if(i)for(let u=0,d=l.length;u<d;u++){let E=l[u].statsz;E&&(_[l[u].server.name]=E.routes)}for(let u=0,d=l.length;u<d;u++){if(l[u].statsz)continue;let E=l[u].server,f=l[u].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:l[u].response_time};i&&(h.connected_nodes=[],_[E.name]&&_[E.name].forEach(m=>{h.connected_nodes.includes(m.name.slice(0,-4))||h.connected_nodes.push(m.name.slice(0,-4))})),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(m=>({host:m.split(":")[0],port:_A.autoCast(m.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Hte,"clusterNetwork")});var D0=R((lOe,C0)=>{"use strict";var dA=require("joi"),I0=nt(),{route_constraints:w0}=LT();C0.exports={setRoutesValidator:xte,deleteRoutesValidator:Gte};function xte(e){let t=dA.object({server:dA.valid("hub","leaf").required(),routes:w0.required()});return I0.validateBySchema(e,t)}a(xte,"setRoutesValidator");function Gte(e){let t=dA.object({routes:w0.required()});return I0.validateBySchema(e,t)}a(Gte,"deleteRoutesValidator")});var oh=R((_Oe,U0)=>{"use strict";var Ia=Et(),fA=Y(),ih=L(),L0=D0(),{handleHDBError:P0,hdb_errors:qte}=ie(),{HTTP_STATUS_CODES:M0}=qte,Fte="cluster routes successfully set",kte="cluster routes successfully deleted";U0.exports={setRoutes:$te,getRoutes:Vte,deleteRoutes:Yte};function $te(e){let t=L0.setRoutesValidator(e);if(t)throw P0(t,t.message,M0.BAD_REQUEST,void 0,void 0,!0);let r=Ia.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,l=e.routes.length;c<l;c++){let _=e.routes[c];_.port=fA.autoCast(_.port);let u=n.some(E=>E.host===_.host&&E.port===_.port),d=s.some(E=>E.host===_.host&&E.port===_.port);u||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?Ia.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):Ia.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:Fte,set:o,skipped:i}}a($te,"setRoutes");function Vte(){let e=Ia.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Vte,"getRoutes");function Yte(e){let t=L0.deleteRoutesValidator(e);if(t)throw P0(t,t.message,M0.BAD_REQUEST,void 0,void 0,!0);let r=Ia.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,l=!1;for(let _=0,u=e.routes.length;_<u;_++){let d=e.routes[_],E=!1;for(let f=0,h=n.length;f<h;f++){let m=n[f];if(d.host===m.host&&d.port===m.port){n.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,m=s.length;h<m;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),l=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(n=fA.isEmptyOrZeroLength(n)?null:n,Ia.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=fA.isEmptyOrZeroLength(s)?null:s,Ia.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:kte,deleted:i,skipped:o}}a(Yte,"deleteRoutes")});var B0=R((fOe,v0)=>{"use strict";var E_=require("alasql"),wa=require("recursive-iterator"),ds=k(),Kte=Y(),h_=L(),EA=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,Qte(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(s=>h_.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!h_.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][h_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Wte(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let l=this.affected_attributes.get(i).get(o).filter(_=>!h_.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new E_.yy.Column({columnid:_});s.tableid&&(u.tableid=s.tableid),this.ast.columns.push(u),l.includes(_)||l.push(_)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function Wte(e){return e.filter(t=>t[h_.PERMS_CRUD_ENUM.READ])}a(Wte,"filterReadRestrictedAttrs");function Qte(e,t,r,n,s){jte(e,t,r,n,s)}a(Qte,"interpretAST");function p_(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(p_,"addSchemaTableToMap");function jte(e,t,r,n,s){if(!e){ds.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof E_.yy.Insert?Zte(e,t,r):e instanceof E_.yy.Select?zte(e,t,r,n,s):e instanceof E_.yy.Update?Jte(e,t,r):e instanceof E_.yy.Delete?Xte(e,t,r):ds.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(jte,"getRecordAttributesAST");function zte(e,t,r,n,s){if(!e){ds.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Kte.isEmptyOrZeroLength(i)){ds.error("No schema specified");return}e.from.forEach(c=>{p_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),p_(c.table,t,r,n,s)});let o=new wa(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,_=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{ds.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(c.columnid)<0&&t.get(_).get(l).push(c.columnid)}if(e.where){let c=new wa(e.where),l=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid?_.tableid:l;if(!t.get(i).has(u))if(r.has(u))u=r.get(u);else{ds.info(`table specified as ${u} not found.`);continue}t.get(i).get(u).indexOf(_.columnid)<0&&t.get(i).get(u).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new wa(c.on);for(let{node:_}of l)if(_&&_.columnid){let u=_.tableid,d=s.get(u);if(!t.get(d).has(u))if(r.has(u))u=r.get(u);else{ds.info(`table specified as ${u} not found.`);continue}t.get(d).get(u).indexOf(_.columnid)<0&&t.get(d).get(u).push(_.columnid)}}),e.order){let c=new wa(e.order);for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid,u=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{ds.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(l.columnid)<0&&t.get(u).get(_).push(l.columnid)}}}a(zte,"getSelectAttributes");function Jte(e,t,r){if(!e){ds.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new wa(e.columns),s=e.table.databaseid;p_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&hA(e.table.tableid,s,i.columnid,t,r)}a(Jte,"getUpdateAttributes");function Xte(e,t,r){if(!e){ds.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new wa(e.where),s=e.table.databaseid;p_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&hA(e.table.tableid,s,i.columnid,t,r)}a(Xte,"getDeleteAttributes");function Zte(e,t,r){if(!e){ds.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new wa(e.columns),s=e.into.databaseid;p_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&hA(e.into.tableid,s,i.columnid,t,r)}a(Zte,"getInsertAttributes");function hA(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(hA,"pushAttribute");v0.exports=EA});var ch=R((hOe,q0)=>{var ah=la(),H0=require("chalk"),hn=k(),x0=require("prompt"),{promisify:ere}=require("util"),pA=L(),tre=require("fs-extra"),rre=require("path"),nre=Y(),sre=Ri(),G0=X();G0.initSync();var ire=require("moment"),ore=ere(x0.get),are=rre.join(G0.getHdbBasePath(),pA.LICENSE_KEY_DIR_NAME,pA.LICENSE_FILE_NAME,pA.LICENSE_FILE_NAME);q0.exports={getFingerprint:lre,setLicense:cre,parseLicense:mA,register:ure,getRegistrationInfo:dre};async function cre(e){if(e&&e.key&&e.company){try{hn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await mA(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw hn.error(r),hn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(cre,"setLicense");async function lre(){let e={};try{e=await ah.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw hn.error(r),hn.error(t),new Error(r)}return e}a(lre,"getFingerprint");async function mA(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");hn.info("Validating license input...");let r=ah.validateLicense(e,t);if(hn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(hn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(hn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{hn.info("writing license to disk"),await tre.writeFile(are,JSON.stringify({license_key:e,company:t}))}catch(n){throw hn.error("Failed to write License"),n}return"Registration successful."}a(mA,"parseLicense");async function ure(){let e=await _re();return mA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(ure,"register");async function _re(){let e=await ah.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:H0.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:H0.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{x0.start()}catch(n){hn.error(n)}let r;try{r=await ore(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(_re,"promptForRegistration");async function dre(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await ah.getLicense()}catch(r){throw hn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(nre.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=sre.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=ire.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(dre,"getRegistrationInfo")});var k0=R((mOe,F0)=>{"use strict";var fre=Ze(),SA=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+fre.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:d,routes:E,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};F0.exports=SA});var Y0=R((TOe,V0)=>{"use strict";var $0=Ze(),TA=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d){this.port=t,d===null&&(d=void 0),this.server_name=r+$0.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+$0.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:u,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};V0.exports=TA});var W0=R((ROe,K0)=>{"use strict";var gA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};K0.exports=gA});var j0=R((OOe,Q0)=>{"use strict";var Ere=Ze(),RA=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Ere.SERVER_SUFFIX.ADMIN,this.password=r}};Q0.exports=RA});var fh=R((NOe,X0)=>{"use strict";var qc=require("path"),_h=require("fs-extra"),hre=k0(),pre=Y0(),mre=W0(),Sre=j0(),AA=Ur(),kc=Y(),$r=Et(),uh=L(),m_=Ze(),{CONFIG_PARAMS:At}=uh,$c=k(),S_=X(),z0=fi(),OA=gt(),Fc="clustering",Tre=1e4,J0=50;X0.exports={generateNatsConfig:Rre,removeNatsConfig:Are,getHubConfigPath:gre};function gre(){let e=S_.get(At.ROOTPATH);return qc.join(e,Fc,m_.NATS_CONFIG_FILES.HUB_SERVER)}a(gre,"getHubConfigPath");async function Rre(e=!1,t=void 0){S_.initSync();let r=S_.get(At.ROOTPATH),n=qc.join(r,Fc,m_.PID_FILES.HUB),s=qc.join(r,Fc,m_.PID_FILES.LEAF),i=$r.getConfigFromFile(At.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=qc.join(r,Fc,m_.NATS_CONFIG_FILES.HUB_SERVER),c=qc.join(r,Fc,m_.NATS_CONFIG_FILES.LEAF_SERVER),l=$r.getConfigFromFile(At.CLUSTERING_TLS_CERTIFICATE),_=$r.getConfigFromFile(At.CLUSTERING_TLS_PRIVATEKEY),u=$r.getConfigFromFile(At.CLUSTERING_TLS_CERT_AUTH),d=$r.getConfigFromFile(At.CLUSTERING_TLS_INSECURE),E=$r.getConfigFromFile(At.CLUSTERING_TLS_VERIFY),f=$r.getConfigFromFile(At.CLUSTERING_NODENAME),h=$r.getConfigFromFile(At.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await OA.checkNATSServerInstalled()||dh("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await AA.listUsers(),S=$r.getConfigFromFile(At.CLUSTERING_USER),g=await AA.getClusterUser();(kc.isEmpty(g)||g.active!==!0)&&dh(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await lh(At.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await lh(At.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await lh(At.CLUSTERING_HUBSERVER_NETWORK_PORT),await lh(At.CLUSTERING_LEAFSERVER_NETWORK_PORT));let T=[],b=[];for(let[z,Z]of m.entries())Z.role?.role===uh.ROLE_TYPES_ENUM.CLUSTER_USER&&Z.active&&(T.push(new Sre(Z.username,z0.decrypt(Z.hash))),b.push(new mre(Z.username,z0.decrypt(Z.hash))));let N=[],{hub_routes:U}=$r.getClusteringRoutes();if(!kc.isEmptyOrZeroLength(U))for(let z of U)N.push(`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@${z.host}:${z.port}`);let v=new hre($r.getConfigFromFile(At.CLUSTERING_HUBSERVER_NETWORK_PORT),f,n,l,_,u,d,E,h,$r.getConfigFromFile(At.CLUSTERING_HUBSERVER_CLUSTER_NAME),$r.getConfigFromFile(At.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,T,b);u==null&&(delete v.tls.ca_file,delete v.leafnodes.tls.ca_file),t=kc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===uh.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await _h.writeJson(o,v),$c.trace(`Hub server config written to ${o}`));let F=`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,M=`tls://${g.uri_encoded_name}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,W=new pre($r.getConfigFromFile(At.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,s,i,[F],[M],T,b,l,_,u,d);u==null&&delete W.tls.ca_file,(t===void 0||t===uh.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await _h.writeJson(c,W),$c.trace(`Leaf server config written to ${c}`))}a(Rre,"generateNatsConfig");async function lh(e){let t=S_.get(e);return kc.isEmpty(t)&&dh(`port undefined for '${e}'`),await kc.isPortTaken(t)&&dh(`'${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(lh,"isPortAvailable");function dh(e){let t=`Error generating clustering config: ${e}`;$c.error(t),console.error(t),process.exit(1)}a(dh,"generateNatsConfigError");async function Are(e){let{port:t,config_file:r}=OA.getServerConfig(e),{username:n,decrypt_hash:s}=await AA.getClusterUser(),i=0,o=2e3;for(;i<J0;){try{let u=await OA.createConnection(t,n,s,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){$c.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=J0)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let _=o*(i*2);_>3e4&&$c.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await kc.async_set_timeout(_)}let c="0".repeat(Tre),l=qc.join(S_.get(At.ROOTPATH),Fc,r);await _h.writeFile(l,c),await _h.remove(l),$c.notify(e,"started.")}a(Are,"removeNatsConfig")});var sB=R((IOe,nB)=>{"use strict";var pn=X(),Ore=la(),Te=L(),T_=Ze(),Oi=require("path"),{PACKAGE_ROOT:hh}=L(),Z0=X(),Eh=Y(),Vc="/dev/null",bre=Oi.join(hh,"launchServiceScripts"),eB=Oi.join(hh,"utility/scripts"),Nre=Oi.join(eB,Te.HDB_RESTART_SCRIPT),tB=Oi.resolve(hh,"dependencies",`${process.platform}-${process.arch}`,T_.NATS_BINARY_NAME);function rB(){let t=Ore.licenseSearch().ram_allocation||Te.RAM_ALLOCATION_ENUM.DEFAULT,r=Te.MEM_SETTING_KEY+t,n={[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Eh.noBootFile()&&(n[Te.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Eh.getEnvCliRootPath()),{name:Te.PROCESS_DESCRIPTORS.HDB,script:Te.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:hh}}a(rB,"generateMainServerConfig");var yre=9930;function Ire(){pn.initSync(!0);let e=pn.get(Te.CONFIG_PARAMS.ROOTPATH),t=Oi.join(e,"clustering",T_.NATS_CONFIG_FILES.HUB_SERVER),r=Oi.join(pn.get(Te.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Te.LOG_NAMES.HDB),n=Z0.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=T_.LOG_LEVEL_FLAGS[pn.get(Te.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==yre?"-"+n:""),script:tB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return pn.get(Te.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Vc,i.error_file=Vc),i}a(Ire,"generateNatsHubServerConfig");var wre=9940;function Cre(){pn.initSync(!0);let e=pn.get(Te.CONFIG_PARAMS.ROOTPATH),t=Oi.join(e,"clustering",T_.NATS_CONFIG_FILES.LEAF_SERVER),r=Oi.join(pn.get(Te.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Te.LOG_NAMES.HDB),n=Z0.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=T_.LOG_LEVEL_FLAGS[pn.get(Te.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==wre?"-"+n:""),script:tB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return pn.get(Te.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Vc,i.error_file=Vc),i}a(Cre,"generateNatsLeafServerConfig");function Dre(){pn.initSync();let e=Oi.join(pn.get(Te.CONFIG_PARAMS.LOGGING_ROOT),Te.LOG_NAMES.HDB),t={name:Te.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Te.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:bre,autorestart:!1};return pn.get(Te.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Vc,t.error_file=Vc),t}a(Dre,"generateClusteringUpgradeV4ServiceConfig");function Lre(){let e={[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.RESTART_HDB};return Eh.noBootFile()&&(e[Te.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Eh.getEnvCliRootPath()),{...{name:Te.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:eB},script:Nre}}a(Lre,"generateRestart");function Pre(){return{apps:[rB()]}}a(Pre,"generateAllServiceConfigs");nB.exports={generateAllServiceConfigs:Pre,generateMainServerConfig:rB,generateRestart:Lre,generateNatsHubServerConfig:Ire,generateNatsLeafServerConfig:Cre,generateClusteringUpgradeV4ServiceConfig:Dre}});var Yc=R((DOe,SB)=>{"use strict";var He=L(),Mre=Y(),Ni=fh(),ph=gt(),bi=Ze(),go=sB(),mh=X(),Ro=k(),Ure=Ai(),{startWorker:iB,onMessageFromWorkers:vre}=rt(),Bre=gi(),COe=require("util"),Hre=require("child_process"),xre=require("fs"),{execFile:Gre}=Hre,De;SB.exports={enterPM2Mode:qre,start:Ao,stop:bA,reload:aB,restart:cB,list:NA,describe:_B,connect:yi,kill:Yre,startAllServices:Kre,startService:yA,getUniqueServicesList:dB,restartAllServices:Wre,isServiceRegistered:fB,reloadStopStart:EB,restartHdb:uB,deleteProcess:$re,startClusteringProcesses:pB,startClusteringThreads:mB,isHdbRestartRunning:Vre,isClusteringRunning:jre,stopClustering:Qre,reloadClustering:zre,expectedRestartOfChildren:lB};var g_=!1;vre(e=>{e.type==="restart"&&mh.initSync(!0)});function qre(){g_=!0}a(qre,"enterPM2Mode");function yi(){return De||(De=require("pm2")),new Promise((e,t)=>{De.connect((r,n)=>{Ro.setupConsoleLogging(),r&&t(r),e(n)})})}a(yi,"connect");var Tr,Fre=10,oB;function Ao(e,t=!1){if(g_)return kre(e);let r=Gre(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let o=Tr.indexOf(r);o>-1&&Tr.splice(o,1),!oB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Fre&&(xre.existsSync(Ni.getHubConfigPath())?Ao(e):(await Ni.generateNatsConfig(!0),Ao(e),await new Promise(c=>setTimeout(c,3e3)),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=mh.get(He.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,_=0,u;for(;l=c.exec(i);){if(l.index&&bi.LOG_LEVEL_HIERARCHY[o]>=bi.LOG_LEVEL_HIERARCHY[u||"info"]){let f=u===bi.LOG_LEVELS.ERR||u===bi.LOG_LEVELS.WRN?Ro.OUTPUTS.STDERR:Ro.OUTPUTS.STDOUT;Ro.logCustomLevel(u||"info",f,n,i.slice(_,l.index).trim())}let[d,E]=l;_=l.index+d.length,u=bi.LOG_LEVELS[E]}if(bi.LOG_LEVEL_HIERARCHY[o]>=bi.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===bi.LOG_LEVELS.ERR||u===bi.LOG_LEVELS.WRN?Ro.OUTPUTS.STDERR:Ro.OUTPUTS.STDOUT;Ro.logCustomLevel(u||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!Tr&&(Tr=[],!t)){let i=a(()=>{oB=!0,Tr&&(Tr.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)}Tr.push(r)}a(Ao,"start");function kre(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.start(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a(kre,"startWithPM2");function bA(e){if(!g_){for(let t of Tr||[])t.name===e&&(Tr.splice(Tr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.stop(e,async(n,s)=>{n&&(De.disconnect(),r(n)),De.delete(e,(i,o)=>{i&&(De.disconnect(),r(n)),De.disconnect(),t(o)})})})}a(bA,"stop");function aB(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.reload(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a(aB,"reload");function cB(e){if(!g_){lB();for(let t of Tr||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.restart(e,(n,s)=>{De.disconnect(),t(s)})})}a(cB,"restart");function lB(){for(let e of Tr||[])e.config&&(e.config.restarts=0)}a(lB,"expectedRestartOfChildren");function $re(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.delete(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a($re,"deleteProcess");async function uB(){await Ao(go.generateRestart())}a(uB,"restartHdb");async function Vre(){let e=await NA();for(let t in e)if(e[t].name===He.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Vre,"isHdbRestartRunning");function NA(){return new Promise(async(e,t)=>{try{await yi()}catch(r){t(r)}De.list((r,n)=>{r&&(De.disconnect(),t(r)),De.disconnect(),e(n)})})}a(NA,"list");function _B(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.describe(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a(_B,"describe");function Yre(){if(!g_){for(let e of Tr||[])e.kill();Tr=[];return}return new Promise(async(e,t)=>{try{await yi()}catch(r){t(r)}De.killDaemon((r,n)=>{r&&(De.disconnect(),t(r)),De.disconnect(),e(n)})})}a(Yre,"kill");async function Kre(){try{await pB(),await mB(),await Ao(go.generateAllServiceConfigs())}catch(e){throw De?.disconnect(),e}}a(Kre,"startAllServices");async function yA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case He.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=go.generateMainServerConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=go.generateNatsIngestServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=go.generateNatsReplyServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=go.generateNatsHubServerConfig(),await Ao(r,t),await Ni.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=go.generateNatsLeafServerConfig(),await Ao(r,t),await Ni.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=go.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ao(r)}catch(r){throw De?.disconnect(),r}}a(yA,"startService");async function dB(){try{let e=await NA(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw De?.disconnect(),e}}a(dB,"getUniqueServicesList");async function Wre(e=[]){try{let t=!1,r=await dB();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===He.PROCESS_DESCRIPTORS.HDB?t=!0:await cB(o))}t&&await EB(He.PROCESS_DESCRIPTORS.HDB)}catch(t){throw De?.disconnect(),t}}a(Wre,"restartAllServices");async function fB(e){if(Tr?.find(r=>r.name===e))return!0;let t=await Bre.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(fB,"isServiceRegistered");async function EB(e){let t=mh.get(He.CONFIG_PARAMS.THREADS_COUNT)??mh.get(He.CONFIG_PARAMS.THREADS),r=await _B(e),n=Mre.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await bA(e),await yA(e)):e===He.PROCESS_DESCRIPTORS.HDB?await uB():await aB(e)}a(EB,"reloadStopStart");var hB;async function pB(e=!1){for(let t in He.CLUSTERING_PROCESSES){let r=He.CLUSTERING_PROCESSES[t];await yA(r,e)}}a(pB,"startClusteringProcesses");async function mB(){hB=iB(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await ph.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await ph.updateLocalStreams();let e=await Ure.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===He.PRE_4_0_0_VERSION){Ro.info("Starting clustering upgrade 4.0.0 process"),iB(He.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(mB,"startClusteringThreads");async function Qre(){for(let e in He.CLUSTERING_PROCESSES)if(e!==He.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===He.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await hB.terminate();else{let t=He.CLUSTERING_PROCESSES[e];await bA(t)}}a(Qre,"stopClustering");async function jre(){for(let e in He.CLUSTERING_PROCESSES){let t=He.CLUSTERING_PROCESSES[e];if(await fB(t)===!1)return!1}return!0}a(jre,"isClusteringRunning");async function zre(){await Ni.generateNatsConfig(!0),await ph.reloadNATSHub(),await ph.reloadNATSLeaf(),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(zre,"reloadClustering")});var gh={};$e(gh,{compactOnStart:()=>Jre,copyDb:()=>bB});async function Jre(){A_.notify("Running compact on start"),console.log("Running compact on start");let e=(0,IA.get)(Oo.CONFIG_PARAMS.ROOTPATH),t=new Map,r=Br();try{for(let n in r){if(n==="system")continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,Sh.join)(e,"backup",n+".mdb"),o=(0,Sh.join)(e,Oo.DATABASES_DIR_NAME,n+"-copy.mdb"),c=await TB(n);console.log("Database",n,"before compact has a total record count of",c),t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await bB(n,o),console.log("Backing up",n,"to",i),await(0,Ca.move)(s,i,{overwrite:!0})}R_();for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Ca.move)(i,s,{overwrite:!0}),await(0,Ca.remove)((0,Sh.join)(e,Oo.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));R_()}catch(n){A_.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,wA.updateConfigValue)(Oo.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,Ca.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw R_(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await TB(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
14
14
  Total record count before compaction: ${i}, total after: ${c}.
15
- Database backup has not been removed and can be found here: ${s}`;A_.error(l),console.error(l)}(0,yA.get)(Oo.CONFIG_PARAMS.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,Ca.remove)(s))}(0,IA.updateConfigValue)(Oo.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1)}async function SB(e){let t=await(0,AB.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function OB(e,t){console.log("copyDb start");let r=Br()[e],n;for(let d in r){n=r[d].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,TB.open)(new gB.default(t)),c=o.openDB(Th.INTERNAL_DBIS_NAME),l,_=0,u=s.useReadTransaction();try{for(let{key:f,value:h}of s.getRange({transaction:u})){let m=h.is_hash_attribute||h.isPrimaryKey,S,g;if(m&&(S=h.compression,g=Oh(),g?h.compression=g:delete h.compression,S?.dictionary?.toString()===g?.dictionary?.toString()&&(S=null,g=null)),c.put(f,h),!(m||h.indexed))continue;let T=new RB.default(!m,m);T.encoding="binary",T.compression=S;let b=n.openDB(f,T);b.decoder=null,T.compression=g;let N=o.openDB(f,T);N.encoder=null,console.log("copying",f,"from",e,"to",t),await E(b,N,m,u)}let d=n.openDB(Th.AUDIT_STORE_NAME,Ah);console.log("copying audit log"),E(i,d,!1,u);async function E(f,h,m,S){let g=0,T=0;for(let{key:b,value:N,version:U}of f.getRange({start:null,versions:m,transaction:S}))l=h.put(b,N,U),g++,S.openTimer&&(S.openTimer=0),T+=(b?.length||10)+N.length,_++>5e3&&(await l,console.log("copied",g,"entries",T,"bytes"),_=0);console.log("finish copying, copied",g,"entries",T,"bytes")}a(E,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{u.done(),o.close()}}var TB,Sh,Ca,yA,gB,RB,Th,Oo,AB,IA,A_,Rh=be(()=>{Re();TB=require("lmdb"),Sh=require("path"),Ca=require("fs-extra"),yA=x(X()),gB=x(du()),RB=x(_u()),Th=x(_t()),Oo=x(L());no();AB=x(Ei()),IA=x(Et()),A_=x(k());a(Jre,"compactOnStart");a(SB,"getTotalDBRecordCount");a(OB,"copyDb")});var bo=R((HOe,CB)=>{"use strict";var Xre=require("minimist"),{isMainThread:DA,parentPort:wA,threadId:vOe}=require("worker_threads"),ot=L(),{PROCESS_DESCRIPTORS_VALIDATE:O_}=ot,Fs=k(),LA=Y(),Nh=fh(),bh=gt(),BOe=Ze(),yB=Et(),Es=Yc(),bB=gi(),{compactOnStart:Zre}=(Rh(),ae(gh)),ene=to(),{restartWorkers:yh,onMessageByType:tne}=rt(),{handleHDBError:rne,hdb_errors:nne}=ie(),{HTTP_STATUS_CODES:sne}=nne,N_=X();N_.initSync();var b_=`Restarting HarperDB. This may take up to ${ot.RESTART_TIMEOUT_MS/1e3} seconds.`,ine="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",NB="Clustering is not enabled so cannot be restarted",one="Invalid service",Kc,Gn;CB.exports={restart:IB,restartService:PA};DA&&tne(ot.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await PA({service:e.workerType}):IB({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function IB(e){Gn=Object.keys(e).length===0,Kc=await Es.isServiceRegistered(ot.HDB_PROC_DESCRIPTOR);let t=Xre(process.argv);if(t.service){await PA(t);return}if(Gn&&!Kc){console.error(ine);return}if(Gn&&console.log(b_),Kc){Es.enterPM2Mode(),Fs.notify(b_);let r=ene(Object.keys(ot.CONFIG_PARAM_MAP),!0);return LA.isEmptyOrZeroLength(Object.keys(r))||yB.updateConfigValue(void 0,void 0,r,!0,!0),ane(),b_}return DA?(Fs.notify(b_),N_.get(ot.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Zre(),setTimeout(()=>{yh()},50)):wA.postMessage({type:ot.ITC_EVENT_TYPES.RESTART}),b_}a(IB,"restart");async function PA(e){let{service:t}=e;if(ot.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw rne(new Error,one,sne.BAD_REQUEST,void 0,void 0,!0);if(Es.expectedRestartOfChildren(),Kc=await Es.isServiceRegistered(ot.HDB_PROC_DESCRIPTOR),!DA)return wA.postMessage({type:ot.ITC_EVENT_TYPES.RESTART,workerType:t}),new Promise(n=>{wA.on("message",s=>{s.type==="restart-complete"&&n()})});let r;switch(t){case O_.clustering:if(!N_.get(ot.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=NB;break}Gn&&console.log("Restarting clustering"),Fs.notify("Restarting clustering"),await wB();break;case O_.clustering_config:case O_["clustering config"]:if(!N_.get(ot.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=NB;break}Gn&&console.log("Restarting clustering_config"),Fs.notify("Restarting clustering_config"),await Es.reloadClustering();break;case"custom_functions":case"custom functions":case O_.harperdb:case O_.http_workers:if(Gn&&!Kc){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Gn&&console.log("Restarting http_workers"),Fs.notify("Restarting http_workers"),Gn?await Es.restart(ot.HDB_PROC_DESCRIPTOR):await yh("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Fs.error(r),Gn&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(PA,"restartService");async function ane(){await wB(),await Es.restart(ot.HDB_PROC_DESCRIPTOR),await LA.async_set_timeout(2e3),N_.get(ot.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await CA(),Gn&&(await bh.closeConnection(),process.exit(0))}a(ane,"restartPM2Mode");async function wB(){if(!yB.getConfigFromFile(ot.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await bB.getHDBProcessInfo()).clustering.length===0)Fs.trace("Clustering not running, restart will start clustering services"),await Nh.generateNatsConfig(!0),await Es.startClusteringProcesses(),await Es.startClusteringThreads(),await CA(),Gn&&await bh.closeConnection();else{await Nh.generateNatsConfig(!0),Kc?(Fs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Es.restart(ot.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Es.restart(ot.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await bB.getHDBProcessInfo()).clustering.forEach(s=>{Fs.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await LA.async_set_timeout(3e3),await CA(),await bh.updateLocalStreams(),Gn&&await bh.closeConnection(),Fs.trace("Restart clustering restarting ingest and reply service threads");let t=yh(ot.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=yh(ot.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(wB,"restartClustering");async function CA(){await Nh.removeNatsConfig(ot.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Nh.removeNatsConfig(ot.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(CA,"removeNatsConfig")});var qB=R((qOe,GB)=>{"use strict";var GOe=require("lodash"),Vr=L(),{handleHDBError:DB,hdb_errors:cne}=ie(),{HDB_ERROR_MSGS:lne,HTTP_STATUS_CODES:une}=cne,MA=k();GB.exports={getRolePermissions:dne};var Da=Object.create(null),_ne=a(e=>({key:e,perms:{}}),"perms_template_obj"),UB=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),vB=a((e=!1,t=!1,r=!1,n=!1)=>({[Vr.PERMS_CRUD_ENUM.READ]:e,[Vr.PERMS_CRUD_ENUM.INSERT]:t,[Vr.PERMS_CRUD_ENUM.UPDATE]:r,[Vr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),UA=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...vB(t,r,n,s)}),"table_perms_template"),LB=a((e,t=vB())=>({attribute_name:e,describe:xB(t),[y_]:t[y_],[vA]:t[vA],[BA]:t[BA]}),"attr_perms_template"),PB=a((e,t=!1)=>({attribute_name:e,describe:t,[y_]:t}),"timestamp_attr_perms_template"),{READ:y_,INSERT:vA,UPDATE:BA}=Vr.PERMS_CRUD_ENUM,BB=Object.values(Vr.PERMS_CRUD_ENUM),HB=[y_,vA,BA];function dne(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[Vr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Da[t]&&Da[t].key===n)return Da[t].perms;let s=fne(e,r);return Da[t]?Da[t].key=n:Da[t]=_ne(n),Da[t].perms=s,s}catch(r){if(!e[Vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Vr.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw MA.error(n),MA.debug(r),DB(new Error,lne.OUTDATED_PERMS_TRANSLATION_ERROR,une.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
16
- ${r.stack}`;throw MA.error(n),DB(new Error)}}}a(dne,"getRolePermissions");function fne(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Vr.SYSTEM_SCHEMA_NAME]=n[Vr.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=Ene(t[i]);return}r[i]=UB(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],_=hne(c,l);r[i].describe||BB.forEach(u=>{_[u]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=UA()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=UA()})}),r}a(fne,"translateRolePermissions");function Ene(e){let t=UB(!0);return Object.keys(e).forEach(r=>{t.tables[r]=UA(!0,!0,!0,!0,!0)}),t}a(Ene,"createStructureUserPermissions");function hne(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,u)=>{let{attribute_name:d}=u,E=u;return Vr.TIME_STAMP_NAMES.includes(d)&&(E=PB(d,u[y_])),_[d]=E,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=LB(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let u=i[_];u.describe=xB(u),s.attribute_permissions.push(u),c||pne(u,l)}else if(_!==o){let u;Vr.TIME_STAMP_NAMES.includes(_)?u=PB(_):u=LB(_),s.attribute_permissions.push(u)}}),c||s.attribute_permissions.push(l),s.describe=MB(s),s}else return e.describe=MB(e),e}a(hne,"getTableAttrPerms");function MB(e){return BB.filter(t=>e[t]).length>0}a(MB,"getSchemaTableDescribePerm");function xB(e){return HB.filter(t=>e[t]).length>0}a(xB,"getAttributeDescribePerm");function pne(e,t){HB.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(pne,"checkForHashPerms")});var FB={};$e(FB,{Resources:()=>Ih,keyArrayToString:()=>Wc,resetResources:()=>mne,resources:()=>No});function mne(){return No=new Ih}function Wc(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Ih,No,I_=be(()=>{ha();Ih=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,l]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let u=this.get(c.slice(0,_));u&&(u.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),l=this.get(c);if(!l&&c.indexOf(".")>-1){let _=c.split(".");l=this.get(_[0])}if(l){if(l.relativeURL=t.slice(n),!l.hasSubPaths)return l;s=l}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),!s&&o.indexOf(".")>-1&&(s=this.get(o.split(".")[0])),s?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return it(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(mne,"resetResources");a(Wc,"keyArrayToString")});var kB={};$e(kB,{Headers:()=>yo,appendHeader:()=>wh});function wh(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var yo,w_=be(()=>{yo=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(wh,"appendHeader")});var C_={};$e(C_,{authentication:()=>zB,bypassAuth:()=>bne,login:()=>yne,logout:()=>Ine,start:()=>Nne});function bne(){jB=!0}async function zB(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let f=e.isOperationsServer?Rne?gne:[]:Tne?Sne:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h=new yo([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Ch&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Ch&&o.push("Access-Control-Allow-Credentials","true")}}let l,_;if(Ch){i||(i=r.host);let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let m of h)if(m.startsWith(f)){let S=m.indexOf(";");l=m.slice(f.length,S===-1?m.length:S),_=await VB.get(l);break}e.session=_||(_={})}let u=a((f,h,m)=>{let S=new Qc.AuthAuditLog(f,h,jt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=m,l&&(S.session_id=l),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===jt.AUTH_AUDIT_STATUS.SUCCESS?$B.notify(S):$B.error(S)},"authAuditLog");if(e.mtlsConfig&&e.authorized){let f=e.mtlsConfig.user;f!==null?((f===void 0||f==="Common Name"||f==="CN")&&(f=e.peerCertificate.subject.CN),e.user=await dt.getUser(f,null,null),u(f,jt.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Qc.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=La.get(n),!d){let f=n.indexOf(" "),h=n.slice(0,f),m=n.slice(f+1),S,g;try{switch(h){case"Basic":let T=atob(m),b=T.indexOf(":");S=T.slice(0,b),g=T.slice(b+1),d=S||g?await dt.getUser(S,g,e):null;break;case"Bearer":try{d=await(0,Dh.validateOperationToken)(m)}catch(N){if(N.message==="invalid token")try{return await(0,Dh.validateRefreshToken)(m),c({status:-1})}catch{throw N}}break}}catch(T){return One&&(La.get(m)||(La.set(m,m),u(S,jt.AUTH_AUDIT_STATUS.FAILURE,h))),c({status:401,body:Pa({error:T.message},e)})}La.set(n,d),Ane&&u(d.username,jt.AUTH_AUDIT_STATUS.SUCCESS,h)}e.user=d}else _?.user?e.user=await dt.getUser(_.user,null,e):(jB&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,KB.getSuperUser)());Ch&&(e.session.update=function(f){if(!l){l=(0,WB.v4)();let m=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",m):E?.headers?.set&&E.headers.set("Set-Cookie",m)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):E?.headers?.set&&(i&&E.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),E.headers.set("X-Hdb-Session","Secure"))),f.id=l,VB.put(f)},e.login=async function(f,h){e.user=await dt.getUser(f,h,e),e.session.update({user:e.user.username})});let E=await t(e);return E&&(E.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&No.loginPath?(E.status=302,E.headers.set("Location",No.loginPath(e))):E.headers.set("WWW-Authenticate","Basic")),c(E))}catch(l){throw c(l)}function c(l){let _=o.length;if(_>0){let u=l.headers;u||(l.headers=u=new yo);for(let d=0;d<_;){let E=o[d++];u.set(E,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function Nne({server:e,port:t}){e.http(zB,{port:t||"all"}),YB||(YB=!0,setInterval(()=>{La=new Map},qn.get(jt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),QB.user.addListener(()=>{La=new Map}))}async function yne(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 Ine(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var KB,Dh,WB,qn,jt,Qc,QB,$B,Sne,Tne,gne,Rne,VB,Ch,jB,Ane,One,La,YB,Lh=be(()=>{KB=x(Ur());Cr();I_();Dh=x(s_());Re();WB=require("uuid"),qn=x(X()),jt=x(L()),Qc=x(k()),QB=x(bu());w_();jc();$B=(0,Qc.loggerWithTag)("auth-event");qn.initSync();Sne=qn.get(jt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),Tne=qn.get(jt.CONFIG_PARAMS.HTTP_CORS),gne=qn.get(jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Rne=qn.get(jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),VB=St({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Ch=qn.get(jt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,jB=qn.get(jt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Ane=qn.get(jt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,One=qn.get(jt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,La=new Map;dt.onInvalidatedUser(()=>{La=new Map});a(bne,"bypassAuth");a(zB,"authentication");a(Nne,"start");a(yne,"login");a(Ine,"logout")});var nH=R((JOe,rH)=>{"use strict";var Le=require("joi"),JB=require("fs-extra"),XB=require("path"),wi=nt(),ZB=X(),eH=L(),tH=k(),{hdb_errors:wne}=ie(),{HDB_ERROR_MSGS:gr}=wne,Ii=/^[a-zA-Z0-9-_]+$/;rH.exports={getDropCustomFunctionValidator:Dne,setCustomFunctionValidator:Lne,addComponentValidator:vne,dropCustomFunctionProjectValidator:Bne,packageComponentValidator:Hne,deployComponentValidator:xne,setComponentFileValidator:Pne,getComponentFileValidator:Une,dropComponentFileValidator:Mne};function Ph(e,t,r){try{let n=ZB.get(eH.CONFIG_PARAMS.COMPONENTSROOT),s=XB.join(n,t);return JB.existsSync(s)?e?t:r.message(gr.PROJECT_EXISTS):e?r.message(gr.NO_PROJECT):t}catch(n){return tH.error(n),r.message(gr.VALIDATION_ERR)}}a(Ph,"checkProjectExists");function D_(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(D_,"checkFilePath");function Cne(e,t,r,n){try{let s=ZB.get(eH.CONFIG_PARAMS.COMPONENTSROOT),i=XB.join(s,e,t,r+".js");return JB.existsSync(i)?r:n.message(gr.NO_FILE)}catch(s){return tH.error(s),n.message(gr.VALIDATION_ERR)}}a(Cne,"checkFileExists");function Dne(e){let t=Le.object({project:Le.string().pattern(Ii).custom(Ph.bind(null,!0)).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME}),type:Le.string().valid("helpers","routes").required(),file:Le.string().pattern(Ii).custom(Cne.bind(null,e.project,e.type)).custom(D_).required().messages({"string.pattern.base":gr.BAD_FILE_NAME})});return wi.validateBySchema(e,t)}a(Dne,"getDropCustomFunctionValidator");function Lne(e){let t=Le.object({project:Le.string().pattern(Ii).custom(Ph.bind(null,!0)).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME}),type:Le.string().valid("helpers","routes").required(),file:Le.string().custom(D_).required(),function_content:Le.string().required()});return wi.validateBySchema(e,t)}a(Lne,"setCustomFunctionValidator");function Pne(e){let t=Le.object({project:Le.string().pattern(Ii).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME}),file:Le.string().custom(D_).required(),payload:Le.string().allow("").optional(),encoding:Le.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return wi.validateBySchema(e,t)}a(Pne,"setComponentFileValidator");function Mne(e){let t=Le.object({project:Le.string().pattern(Ii).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME}),file:Le.string().custom(D_).optional()});return wi.validateBySchema(e,t)}a(Mne,"dropComponentFileValidator");function Une(e){let t=Le.object({project:Le.string().required(),file:Le.string().custom(D_).required(),encoding:Le.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return wi.validateBySchema(e,t)}a(Une,"getComponentFileValidator");function vne(e){let t=Le.object({project:Le.string().pattern(Ii).custom(Ph.bind(null,!1)).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME})});return wi.validateBySchema(e,t)}a(vne,"addComponentValidator");function Bne(e){let t=Le.object({project:Le.string().pattern(Ii).custom(Ph.bind(null,!0)).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME})});return wi.validateBySchema(e,t)}a(Bne,"dropCustomFunctionProjectValidator");function Hne(e){let t=Le.object({project:Le.string().pattern(Ii).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME}),skip_node_modules:Le.boolean()});return wi.validateBySchema(e,t)}a(Hne,"packageComponentValidator");function xne(e){let t=Le.object({project:Le.string().pattern(Ii).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME}),payload:Le.string().optional().messages({"string.pattern.base":gr.BAD_PACKAGE}),package:Le.string().optional()});return wi.validateBySchema(e,t)}a(xne,"deployComponentValidator")});var Bh=R((ZOe,uH)=>{"use strict";var Mh=require("joi"),Uh=require("path"),sH=require("fs-extra"),{exec:Gne}=require("child_process"),qne=require("util"),iH=qne.promisify(Gne),L_=L(),{handleHDBError:zc,hdb_errors:Fne}=ie(),{HTTP_STATUS_CODES:Jc}=Fne,P_=X(),kne=nt(),Xc=k();P_.initSync();var HA=P_.get(L_.CONFIG_PARAMS.COMPONENTSROOT),oH="npm install --omit=dev --json",$ne=`${oH} --dry-run`;uH.exports={installModules:Wne,auditModules:Qne,installAllRootModules:Vne,uninstallRootModule:Yne,linkHarperdb:Kne};async function Vne(e=!1){await vh(),await M_(e?"npm install --ignore-scripts":"npm install",P_.get(L_.CONFIG_PARAMS.ROOTPATH))}a(Vne,"installAllRootModules");async function Yne(e){await M_(`npm uninstall ${e}`,P_.get(L_.CONFIG_PARAMS.ROOTPATH))}a(Yne,"uninstallRootModule");async function Kne(){await vh(),await M_(`npm link ${L_.PACKAGE_ROOT}`,P_.get(L_.CONFIG_PARAMS.ROOTPATH))}a(Kne,"linkHarperdb");async function M_(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await iH(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
15
+ Database backup has not been removed and can be found here: ${s}`;A_.error(l),console.error(l)}(0,IA.get)(Oo.CONFIG_PARAMS.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,Ca.remove)(s))}(0,wA.updateConfigValue)(Oo.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1)}async function TB(e){let t=await(0,OB.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function bB(e,t){console.log("copyDb start");let r=Br()[e],n;for(let d in r){n=r[d].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,gB.open)(new RB.default(t)),c=o.openDB(Th.INTERNAL_DBIS_NAME),l,_=0,u=s.useReadTransaction();try{for(let{key:f,value:h}of s.getRange({transaction:u})){let m=h.is_hash_attribute||h.isPrimaryKey,S,g;if(m&&(S=h.compression,g=Oh(),g?h.compression=g:delete h.compression,S?.dictionary?.toString()===g?.dictionary?.toString()&&(S=null,g=null)),c.put(f,h),!(m||h.indexed))continue;let T=new AB.default(!m,m);T.encoding="binary",T.compression=S;let b=n.openDB(f,T);b.decoder=null,T.compression=g;let N=o.openDB(f,T);N.encoder=null,console.log("copying",f,"from",e,"to",t),await E(b,N,m,u)}let d=n.openDB(Th.AUDIT_STORE_NAME,Ah);console.log("copying audit log"),E(i,d,!1,u);async function E(f,h,m,S){let g=0,T=0;for(let{key:b,value:N,version:U}of f.getRange({start:null,versions:m,transaction:S}))l=h.put(b,N,U),g++,S.openTimer&&(S.openTimer=0),T+=(b?.length||10)+N.length,_++>5e3&&(await l,console.log("copied",g,"entries",T,"bytes"),_=0);console.log("finish copying, copied",g,"entries",T,"bytes")}a(E,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{u.done(),o.close()}}var gB,Sh,Ca,IA,RB,AB,Th,Oo,OB,wA,A_,Rh=be(()=>{Re();gB=require("lmdb"),Sh=require("path"),Ca=require("fs-extra"),IA=x(X()),RB=x(du()),AB=x(_u()),Th=x(_t()),Oo=x(L());no();OB=x(Ei()),wA=x(Et()),A_=x(k());a(Jre,"compactOnStart");a(TB,"getTotalDBRecordCount");a(bB,"copyDb")});var bo=R((HOe,DB)=>{"use strict";var Xre=require("minimist"),{isMainThread:LA,parentPort:CA,threadId:vOe}=require("worker_threads"),ot=L(),{PROCESS_DESCRIPTORS_VALIDATE:O_}=ot,Fs=k(),PA=Y(),Nh=fh(),bh=gt(),BOe=Ze(),IB=Et(),Es=Yc(),NB=gi(),{compactOnStart:Zre}=(Rh(),ae(gh)),ene=to(),{restartWorkers:yh,onMessageByType:tne}=rt(),{handleHDBError:rne,hdb_errors:nne}=ie(),{HTTP_STATUS_CODES:sne}=nne,N_=X();N_.initSync();var b_=`Restarting HarperDB. This may take up to ${ot.RESTART_TIMEOUT_MS/1e3} seconds.`,ine="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",yB="Clustering is not enabled so cannot be restarted",one="Invalid service",Kc,Gn;DB.exports={restart:wB,restartService:MA};LA&&tne(ot.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await MA({service:e.workerType}):wB({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function wB(e){Gn=Object.keys(e).length===0,Kc=await Es.isServiceRegistered(ot.HDB_PROC_DESCRIPTOR);let t=Xre(process.argv);if(t.service){await MA(t);return}if(Gn&&!Kc){console.error(ine);return}if(Gn&&console.log(b_),Kc){Es.enterPM2Mode(),Fs.notify(b_);let r=ene(Object.keys(ot.CONFIG_PARAM_MAP),!0);return PA.isEmptyOrZeroLength(Object.keys(r))||IB.updateConfigValue(void 0,void 0,r,!0,!0),ane(),b_}return LA?(Fs.notify(b_),N_.get(ot.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Zre(),setTimeout(()=>{yh()},50)):CA.postMessage({type:ot.ITC_EVENT_TYPES.RESTART}),b_}a(wB,"restart");async function MA(e){let{service:t}=e;if(ot.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw rne(new Error,one,sne.BAD_REQUEST,void 0,void 0,!0);if(Es.expectedRestartOfChildren(),Kc=await Es.isServiceRegistered(ot.HDB_PROC_DESCRIPTOR),!LA)return CA.postMessage({type:ot.ITC_EVENT_TYPES.RESTART,workerType:t}),new Promise(n=>{CA.on("message",s=>{s.type==="restart-complete"&&n()})});let r;switch(t){case O_.clustering:if(!N_.get(ot.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=yB;break}Gn&&console.log("Restarting clustering"),Fs.notify("Restarting clustering"),await CB();break;case O_.clustering_config:case O_["clustering config"]:if(!N_.get(ot.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=yB;break}Gn&&console.log("Restarting clustering_config"),Fs.notify("Restarting clustering_config"),await Es.reloadClustering();break;case"custom_functions":case"custom functions":case O_.harperdb:case O_.http_workers:if(Gn&&!Kc){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Gn&&console.log("Restarting http_workers"),Fs.notify("Restarting http_workers"),Gn?await Es.restart(ot.HDB_PROC_DESCRIPTOR):await yh("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Fs.error(r),Gn&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(MA,"restartService");async function ane(){await CB(),await Es.restart(ot.HDB_PROC_DESCRIPTOR),await PA.async_set_timeout(2e3),N_.get(ot.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await DA(),Gn&&(await bh.closeConnection(),process.exit(0))}a(ane,"restartPM2Mode");async function CB(){if(!IB.getConfigFromFile(ot.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await NB.getHDBProcessInfo()).clustering.length===0)Fs.trace("Clustering not running, restart will start clustering services"),await Nh.generateNatsConfig(!0),await Es.startClusteringProcesses(),await Es.startClusteringThreads(),await DA(),Gn&&await bh.closeConnection();else{await Nh.generateNatsConfig(!0),Kc?(Fs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Es.restart(ot.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Es.restart(ot.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await NB.getHDBProcessInfo()).clustering.forEach(s=>{Fs.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await PA.async_set_timeout(3e3),await DA(),await bh.updateLocalStreams(),Gn&&await bh.closeConnection(),Fs.trace("Restart clustering restarting ingest and reply service threads");let t=yh(ot.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=yh(ot.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(CB,"restartClustering");async function DA(){await Nh.removeNatsConfig(ot.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Nh.removeNatsConfig(ot.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(DA,"removeNatsConfig")});var FB=R((qOe,qB)=>{"use strict";var GOe=require("lodash"),Vr=L(),{handleHDBError:LB,hdb_errors:cne}=ie(),{HDB_ERROR_MSGS:lne,HTTP_STATUS_CODES:une}=cne,UA=k();qB.exports={getRolePermissions:dne};var Da=Object.create(null),_ne=a(e=>({key:e,perms:{}}),"perms_template_obj"),vB=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),BB=a((e=!1,t=!1,r=!1,n=!1)=>({[Vr.PERMS_CRUD_ENUM.READ]:e,[Vr.PERMS_CRUD_ENUM.INSERT]:t,[Vr.PERMS_CRUD_ENUM.UPDATE]:r,[Vr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),vA=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...BB(t,r,n,s)}),"table_perms_template"),PB=a((e,t=BB())=>({attribute_name:e,describe:GB(t),[y_]:t[y_],[BA]:t[BA],[HA]:t[HA]}),"attr_perms_template"),MB=a((e,t=!1)=>({attribute_name:e,describe:t,[y_]:t}),"timestamp_attr_perms_template"),{READ:y_,INSERT:BA,UPDATE:HA}=Vr.PERMS_CRUD_ENUM,HB=Object.values(Vr.PERMS_CRUD_ENUM),xB=[y_,BA,HA];function dne(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[Vr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Da[t]&&Da[t].key===n)return Da[t].perms;let s=fne(e,r);return Da[t]?Da[t].key=n:Da[t]=_ne(n),Da[t].perms=s,s}catch(r){if(!e[Vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Vr.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw UA.error(n),UA.debug(r),LB(new Error,lne.OUTDATED_PERMS_TRANSLATION_ERROR,une.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
16
+ ${r.stack}`;throw UA.error(n),LB(new Error)}}}a(dne,"getRolePermissions");function fne(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Vr.SYSTEM_SCHEMA_NAME]=n[Vr.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=Ene(t[i]);return}r[i]=vB(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],_=hne(c,l);r[i].describe||HB.forEach(u=>{_[u]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=vA()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=vA()})}),r}a(fne,"translateRolePermissions");function Ene(e){let t=vB(!0);return Object.keys(e).forEach(r=>{t.tables[r]=vA(!0,!0,!0,!0,!0)}),t}a(Ene,"createStructureUserPermissions");function hne(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,u)=>{let{attribute_name:d}=u,E=u;return Vr.TIME_STAMP_NAMES.includes(d)&&(E=MB(d,u[y_])),_[d]=E,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=PB(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let u=i[_];u.describe=GB(u),s.attribute_permissions.push(u),c||pne(u,l)}else if(_!==o){let u;Vr.TIME_STAMP_NAMES.includes(_)?u=MB(_):u=PB(_),s.attribute_permissions.push(u)}}),c||s.attribute_permissions.push(l),s.describe=UB(s),s}else return e.describe=UB(e),e}a(hne,"getTableAttrPerms");function UB(e){return HB.filter(t=>e[t]).length>0}a(UB,"getSchemaTableDescribePerm");function GB(e){return xB.filter(t=>e[t]).length>0}a(GB,"getAttributeDescribePerm");function pne(e,t){xB.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(pne,"checkForHashPerms")});var kB={};$e(kB,{Resources:()=>Ih,keyArrayToString:()=>Wc,resetResources:()=>mne,resources:()=>No});function mne(){return No=new Ih}function Wc(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Ih,No,I_=be(()=>{ha();Ih=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,l]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let u=this.get(c.slice(0,_));u&&(u.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),l=this.get(c);if(!l&&c.indexOf(".")>-1){let _=c.split(".");l=this.get(_[0])}if(l){if(l.relativeURL=t.slice(n),!l.hasSubPaths)return l;s=l}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),!s&&o.indexOf(".")>-1&&(s=this.get(o.split(".")[0])),s?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return it(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(mne,"resetResources");a(Wc,"keyArrayToString")});var $B={};$e($B,{Headers:()=>yo,appendHeader:()=>wh});function wh(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var yo,w_=be(()=>{yo=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(wh,"appendHeader")});var C_={};$e(C_,{authentication:()=>JB,bypassAuth:()=>bne,login:()=>yne,logout:()=>Ine,start:()=>Nne});function bne(){zB=!0}async function JB(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let f=e.isOperationsServer?Rne?gne:[]:Tne?Sne:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h=new yo([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Ch&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Ch&&o.push("Access-Control-Allow-Credentials","true")}}let l,_;if(Ch){i||(i=r.host);let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let m of h)if(m.startsWith(f)){let S=m.indexOf(";");l=m.slice(f.length,S===-1?m.length:S),_=await YB.get(l);break}e.session=_||(_={})}let u=a((f,h,m)=>{let S=new Qc.AuthAuditLog(f,h,jt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=m,l&&(S.session_id=l),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===jt.AUTH_AUDIT_STATUS.SUCCESS?VB.notify(S):VB.error(S)},"authAuditLog");if(e.mtlsConfig&&e.authorized){let f=e.mtlsConfig.user;f!==null?((f===void 0||f==="Common Name"||f==="CN")&&(f=e.peerCertificate.subject.CN),e.user=await dt.getUser(f,null,null),u(f,jt.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Qc.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=La.get(n),!d){let f=n.indexOf(" "),h=n.slice(0,f),m=n.slice(f+1),S,g;try{switch(h){case"Basic":let T=atob(m),b=T.indexOf(":");S=T.slice(0,b),g=T.slice(b+1),d=S||g?await dt.getUser(S,g,e):null;break;case"Bearer":try{d=await(0,Dh.validateOperationToken)(m)}catch(N){if(N.message==="invalid token")try{return await(0,Dh.validateRefreshToken)(m),c({status:-1})}catch{throw N}}break}}catch(T){return One&&(La.get(m)||(La.set(m,m),u(S,jt.AUTH_AUDIT_STATUS.FAILURE,h))),c({status:401,body:Pa({error:T.message},e)})}La.set(n,d),Ane&&u(d.username,jt.AUTH_AUDIT_STATUS.SUCCESS,h)}e.user=d}else _?.user?e.user=await dt.getUser(_.user,null,e):(zB&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,WB.getSuperUser)());Ch&&(e.session.update=function(f){if(!l){l=(0,QB.v4)();let m=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",m):E?.headers?.set&&E.headers.set("Set-Cookie",m)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):E?.headers?.set&&(i&&E.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),E.headers.set("X-Hdb-Session","Secure"))),f.id=l,YB.put(f)},e.login=async function(f,h){e.user=await dt.getUser(f,h,e),e.session.update({user:e.user.username})});let E=await t(e);return E&&(E.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&No.loginPath?(E.status=302,E.headers.set("Location",No.loginPath(e))):E.headers.set("WWW-Authenticate","Basic")),c(E))}catch(l){throw c(l)}function c(l){let _=o.length;if(_>0){let u=l.headers;u||(l.headers=u=new yo);for(let d=0;d<_;){let E=o[d++];u.set(E,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function Nne({server:e,port:t}){e.http(JB,{port:t||"all"}),KB||(KB=!0,setInterval(()=>{La=new Map},qn.get(jt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),jB.user.addListener(()=>{La=new Map}))}async function yne(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 Ine(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var WB,Dh,QB,qn,jt,Qc,jB,VB,Sne,Tne,gne,Rne,YB,Ch,zB,Ane,One,La,KB,Lh=be(()=>{WB=x(Ur());Cr();I_();Dh=x(s_());Re();QB=require("uuid"),qn=x(X()),jt=x(L()),Qc=x(k()),jB=x(bu());w_();jc();VB=(0,Qc.loggerWithTag)("auth-event");qn.initSync();Sne=qn.get(jt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),Tne=qn.get(jt.CONFIG_PARAMS.HTTP_CORS),gne=qn.get(jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Rne=qn.get(jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),YB=St({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Ch=qn.get(jt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,zB=qn.get(jt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Ane=qn.get(jt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,One=qn.get(jt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,La=new Map;dt.onInvalidatedUser(()=>{La=new Map});a(bne,"bypassAuth");a(JB,"authentication");a(Nne,"start");a(yne,"login");a(Ine,"logout")});var sH=R((JOe,nH)=>{"use strict";var Le=require("joi"),XB=require("fs-extra"),ZB=require("path"),wi=nt(),eH=X(),tH=L(),rH=k(),{hdb_errors:wne}=ie(),{HDB_ERROR_MSGS:gr}=wne,Ii=/^[a-zA-Z0-9-_]+$/;nH.exports={getDropCustomFunctionValidator:Dne,setCustomFunctionValidator:Lne,addComponentValidator:vne,dropCustomFunctionProjectValidator:Bne,packageComponentValidator:Hne,deployComponentValidator:xne,setComponentFileValidator:Pne,getComponentFileValidator:Une,dropComponentFileValidator:Mne};function Ph(e,t,r){try{let n=eH.get(tH.CONFIG_PARAMS.COMPONENTSROOT),s=ZB.join(n,t);return XB.existsSync(s)?e?t:r.message(gr.PROJECT_EXISTS):e?r.message(gr.NO_PROJECT):t}catch(n){return rH.error(n),r.message(gr.VALIDATION_ERR)}}a(Ph,"checkProjectExists");function D_(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(D_,"checkFilePath");function Cne(e,t,r,n){try{let s=eH.get(tH.CONFIG_PARAMS.COMPONENTSROOT),i=ZB.join(s,e,t,r+".js");return XB.existsSync(i)?r:n.message(gr.NO_FILE)}catch(s){return rH.error(s),n.message(gr.VALIDATION_ERR)}}a(Cne,"checkFileExists");function Dne(e){let t=Le.object({project:Le.string().pattern(Ii).custom(Ph.bind(null,!0)).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME}),type:Le.string().valid("helpers","routes").required(),file:Le.string().pattern(Ii).custom(Cne.bind(null,e.project,e.type)).custom(D_).required().messages({"string.pattern.base":gr.BAD_FILE_NAME})});return wi.validateBySchema(e,t)}a(Dne,"getDropCustomFunctionValidator");function Lne(e){let t=Le.object({project:Le.string().pattern(Ii).custom(Ph.bind(null,!0)).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME}),type:Le.string().valid("helpers","routes").required(),file:Le.string().custom(D_).required(),function_content:Le.string().required()});return wi.validateBySchema(e,t)}a(Lne,"setCustomFunctionValidator");function Pne(e){let t=Le.object({project:Le.string().pattern(Ii).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME}),file:Le.string().custom(D_).required(),payload:Le.string().allow("").optional(),encoding:Le.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return wi.validateBySchema(e,t)}a(Pne,"setComponentFileValidator");function Mne(e){let t=Le.object({project:Le.string().pattern(Ii).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME}),file:Le.string().custom(D_).optional()});return wi.validateBySchema(e,t)}a(Mne,"dropComponentFileValidator");function Une(e){let t=Le.object({project:Le.string().required(),file:Le.string().custom(D_).required(),encoding:Le.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return wi.validateBySchema(e,t)}a(Une,"getComponentFileValidator");function vne(e){let t=Le.object({project:Le.string().pattern(Ii).custom(Ph.bind(null,!1)).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME})});return wi.validateBySchema(e,t)}a(vne,"addComponentValidator");function Bne(e){let t=Le.object({project:Le.string().pattern(Ii).custom(Ph.bind(null,!0)).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME})});return wi.validateBySchema(e,t)}a(Bne,"dropCustomFunctionProjectValidator");function Hne(e){let t=Le.object({project:Le.string().pattern(Ii).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME}),skip_node_modules:Le.boolean()});return wi.validateBySchema(e,t)}a(Hne,"packageComponentValidator");function xne(e){let t=Le.object({project:Le.string().pattern(Ii).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME}),payload:Le.string().optional().messages({"string.pattern.base":gr.BAD_PACKAGE}),package:Le.string().optional()});return wi.validateBySchema(e,t)}a(xne,"deployComponentValidator")});var Bh=R((ZOe,_H)=>{"use strict";var Mh=require("joi"),Uh=require("path"),iH=require("fs-extra"),{exec:Gne}=require("child_process"),qne=require("util"),oH=qne.promisify(Gne),L_=L(),{handleHDBError:zc,hdb_errors:Fne}=ie(),{HTTP_STATUS_CODES:Jc}=Fne,P_=X(),kne=nt(),Xc=k();P_.initSync();var xA=P_.get(L_.CONFIG_PARAMS.COMPONENTSROOT),aH="npm install --omit=dev --json",$ne=`${aH} --dry-run`;_H.exports={installModules:Wne,auditModules:Qne,installAllRootModules:Vne,uninstallRootModule:Yne,linkHarperdb:Kne};async function Vne(e=!1){await vh(),await M_(e?"npm install --ignore-scripts":"npm install",P_.get(L_.CONFIG_PARAMS.ROOTPATH))}a(Vne,"installAllRootModules");async function Yne(e){await M_(`npm uninstall ${e}`,P_.get(L_.CONFIG_PARAMS.ROOTPATH))}a(Yne,"uninstallRootModule");async function Kne(){await vh(),await M_(`npm link ${L_.PACKAGE_ROOT}`,P_.get(L_.CONFIG_PARAMS.ROOTPATH))}a(Kne,"linkHarperdb");async function M_(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await oH(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
17
17
  `,""))}return n&&!n.includes("Debugger listening")&&Xc.error("Error running NPM command:",e,n),Xc.trace(r,n),r?.replace(`
18
- `,"")}a(M_,"runCommand");async function Wne(e){Xc.info(`starting installModules for request: ${e}`);let t=lH(e);if(t)throw zc(t,t.message,Jc.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?$ne:oH;await vh(),await cH(r);let i={};for(let o=0,c=r.length;o<c;o++){let l=r[o];i[l]={npm_output:null,npm_error:null};let _=Uh.join(HA,l),u,d=null;try{let{stdout:E,stderr:f}=await iH(s,{cwd:_});u=E?E.replace(`
18
+ `,"")}a(M_,"runCommand");async function Wne(e){Xc.info(`starting installModules for request: ${e}`);let t=uH(e);if(t)throw zc(t,t.message,Jc.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?$ne:aH;await vh(),await lH(r);let i={};for(let o=0,c=r.length;o<c;o++){let l=r[o];i[l]={npm_output:null,npm_error:null};let _=Uh.join(xA,l),u,d=null;try{let{stdout:E,stderr:f}=await oH(s,{cwd:_});u=E?E.replace(`
19
19
  `,""):null,d=f?f.replace(`
20
- `,""):null}catch(E){E.stderr?i[l].npm_error=aH(E.stderr):i[l].npm_error=E.message;continue}try{i[l].npm_output=JSON.parse(u)}catch{i[l].npm_output=u}try{i[l].npm_error=JSON.parse(d)}catch{i[l].npm_error=d}}return Xc.info(`finished installModules with response ${i}`),i}a(Wne,"installModules");function aH(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
21
- `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(aH,"parseNPMStdErr");async function Qne(e){Xc.info(`starting auditModules for request: ${e}`);let t=lH(e);if(t)throw zc(t,t.message,Jc.BAD_REQUEST);let{projects:r}=e;await vh(),await cH(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Uh.join(HA,o);n[o]={npm_output:null,npm_error:null};try{let l=await M_("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=aH(l.stderr)}}return Xc.info(`finished auditModules with response ${n}`),n}a(Qne,"auditModules");async function vh(){try{return await M_("npm -v"),!0}catch{throw zc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Jc.BAD_REQUEST,void 0,void 0,!0)}}a(vh,"checkNPMInstalled");async function cH(e){if(!Array.isArray(e)||e.length===0)throw zc(new Error,"projects argument must be an array with at least 1 element",Jc.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=Uh.join(HA,i.toString());if(!await sH.pathExists(o)){t.push(i);continue}let l=Uh.join(o,"package.json");await sH.pathExists(l)||r.push(i)}if(t.length>0)throw zc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Jc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw zc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Jc.BAD_REQUEST,void 0,void 0,!0)}a(cH,"checkProjectPaths");function lH(e){let t=Mh.object({projects:Mh.array().min(1).items(Mh.string()).required(),dry_run:Mh.boolean().default(!1)});return kne.validateBySchema(e,t)}a(lH,"modulesValidator")});var GA=R((tbe,hH)=>{"use strict";var Zc=require("fs-extra"),xA=require("path"),Hh=k(),_H=Y(),xh=L(),EH=X(),jne=Et();hH.exports=zne;async function zne(){let e=Jne(),t=EH.get(xh.CONFIG_PARAMS.ROOTPATH),r=xA.join(t,"package.json"),n={dependencies:{harperdb:"file:"+xh.PACKAGE_ROOT}},s=xA.join(t,"node_modules");await Zc.ensureDir(s);let i,o=!0,c=!1;try{i=await Zc.readJson(r)}catch(l){if(_H.isEmptyOrZeroLength(e))return;if(l.code!==xh.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!_H.isEmptyOrZeroLength(e)){for(let{name:l,package:_}of e){let u=await dH(_);n.dependencies[l]=u+_}if(!o){Hh.notify("Installing components"),await fH(r,n,null);return}for(let{name:l,package:_}of e){let u=i.dependencies[l],d=await dH(_);if(u===void 0||u!==d+_){c=!0;break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Hh.notify("Removing component",l),c=!0);c&&(Hh.notify("Updating components."),await fH(r,n,i))}a(zne,"installComponents");function Jne(){let e=jne.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(Jne,"getComponentsConfig");async function dH(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":xA.extname(e)||await Zc.pathExists(e)?"file:":"github:"}a(dH,"getPkgPrefix");async function fH(e,t,r){Hh.trace("npm installing components package.json",t),await Zc.writeFile(e,JSON.stringify(t,null," "));try{await Bh().installAllRootModules(EH.get(xh.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await Zc.writeFile(e,JSON.stringify(r,null," ")):await Zc.unlink(e),n}}a(fH,"installPackages")});var kA=R((sbe,TH)=>{"use strict";var Ke=require("fs-extra"),qA=require("fast-glob"),Oe=require("path"),mH=require("tar-fs"),nbe=require("uuid").v4,FA=require("normalize-path"),ks=nH(),xt=k(),Xe=L(),Ct=X(),U_=Et(),Xne=Y(),{PACKAGE_ROOT:Zne}=L(),{handleHDBError:zt,hdb_errors:ese}=ie(),{basename:tse}=require("path"),rse=GA(),SH=X(),nse=L(),{Readable:sse}=require("stream"),{isMainThread:ise}=require("worker_threads"),{HDB_ERROR_MSGS:Ma,HTTP_STATUS_CODES:Jt}=ese,ose=Oe.join(Zne,"application-template"),pH=Oe.join(Ct.get(Xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function ase(){xt.trace("getting custom api status");let e={};try{e={port:Ct.get(Xe.CONFIG_PARAMS.HTTP_PORT),directory:Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw zt(new Error,Ma.FUNCTION_STATUS,Jt.INTERNAL_SERVER_ERROR,xt.ERR,t)}return e}a(ase,"customFunctionsStatus");function cse(){xt.trace("getting custom api endpoints");let e={},t=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT);try{qA.sync(FA(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:qA.sync(FA(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:qA.sync(FA(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw zt(new Error,Ma.GET_FUNCTIONS,Jt.INTERNAL_SERVER_ERROR,xt.ERR,r)}return e}a(cse,"getCustomFunctions");function lse(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=ks.getDropCustomFunctionValidator(e);if(t)throw zt(t,t.message,Jt.BAD_REQUEST);xt.trace("getting custom api endpoint file content");let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=Oe.join(r,n,s,i+".js");try{return Ke.readFileSync(o,{encoding:"utf8"})}catch(c){throw zt(new Error,Ma.GET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,xt.ERR,c)}}a(lse,"getCustomFunction");function use(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=ks.setCustomFunctionValidator(e);if(t)throw zt(t,t.message,Jt.BAD_REQUEST);xt.trace("setting custom function file content");let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return Ke.outputFileSync(Oe.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw zt(new Error,Ma.SET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,xt.ERR,c)}}a(use,"setCustomFunction");function _se(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=ks.getDropCustomFunctionValidator(e);if(t)throw zt(t,t.message,Jt.BAD_REQUEST);xt.trace("dropping custom function file");let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return Ke.unlinkSync(Oe.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw zt(new Error,Ma.DROP_FUNCTION,Jt.INTERNAL_SERVER_ERROR,xt.ERR,o)}}a(_se,"dropCustomFunction");function dse(e){e.project&&(e.project=Oe.parse(e.project).name);let t=ks.addComponentValidator(e);if(t)throw zt(t,t.message,Jt.BAD_REQUEST);xt.trace("adding component");let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Oe.join(r,n);return Ke.mkdirSync(s,{recursive:!0}),Ke.copySync(ose,s),`Successfully added project: ${n}`}catch(s){throw zt(new Error,Ma.ADD_FUNCTION,Jt.INTERNAL_SERVER_ERROR,xt.ERR,s)}}a(dse,"addComponent");function fse(e){e.project&&(e.project=Oe.parse(e.project).name);let t=ks.dropCustomFunctionProjectValidator(e);if(t)throw zt(t,t.message,Jt.BAD_REQUEST);xt.trace("dropping custom function project");let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Ct.get(Xe.CONFIG_PARAMS.APPS);if(!Xne.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return U_.updateConfigValue(Xe.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Oe.join(r,n);return Ke.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw zt(new Error,Ma.DROP_FUNCTION_PROJECT,Jt.INTERNAL_SERVER_ERROR,xt.ERR,i)}}a(fse,"dropCustomFunctionProject");async function Ese(e){e.project&&(e.project=Oe.parse(e.project).name);let t=ks.packageComponentValidator(e);if(t)throw zt(t,t.message,Jt.BAD_REQUEST);let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;xt.trace("packaging component",n);let s;try{s=await Ke.realpath(Oe.join(r,n))}catch(l){if(l.code!==Xe.NODE_ERROR_CODES.ENOENT)throw l;try{s=await Ke.realpath(Oe.join(Ct.get(Xe.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===Xe.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await Ke.ensureDir(pH);let i=Oe.join(pH,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:l=>l.includes(Oe.join(s,"node_modules"))}),mH.pack(s,o).pipe(Ke.createWriteStream(i,{overwrite:!0})),await new Promise(l=>setTimeout(l,2e3));let c=Ke.readFileSync(i,{encoding:"base64"});return await Ke.remove(i),{project:n,payload:c}}a(Ese,"packageComponent");async function hse(e){e.project&&(e.project=Oe.parse(e.project).name);let t=ks.deployComponentValidator(e);if(t)throw zt(t,t.message,Jt.BAD_REQUEST);let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(xt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=Oe.join(r,n),i="file:"+o,await Ke.emptyDir(o);let E=sse.from(Buffer.from(s,"base64"));await new Promise((h,m)=>{E.pipe(mH.extract(o,{finish:h})).on("error",m)});let f=await Ke.readdir(o);f.length===1&&f[0]==="package"&&(await Ke.copy(Oe.join(o,"package"),o),await Ke.remove(Oe.join(o,"package")))}if(await U_.addConfig(n,{package:i}),!s){await rse();let E=SH.get(nse.CONFIG_PARAMS.ROOTPATH);o=Oe.join(E,"node_modules",n)}if(ise)return;let c=new Map;c.isWorker=!0;let l=(qh(),ae(Gh)),_;l.setErrorReporter(E=>_=E);let u=tse(o),d=l.component_errors.get(u);try{await l.loadComponent(o,c)}finally{l.component_errors.set(u,d)}if(_)throw _;return xt.info("Installed component"),`Successfully deployed: ${n}`}a(hse,"deployComponent");async function pse(){let e=U_.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let l=await Ke.readdir(o,{withFileTypes:!0});for(let _ of l){let u=_.name;if(u.startsWith(".")||u==="node_modules")continue;let d=Oe.join(o,u);if(_.isDirectory()||_.isSymbolicLink()){let E={name:u,entries:[]};c.entries.push(E),await r(d,E)}else{let E=await Ke.stat(d),f={name:Oe.basename(u),mtime:E.mtime,size:E.size};c.entries.push(f)}}return c}catch(l){return xt.warn("Error loading package",l),{error:l.toString(),entries:[]}}},"walk_dir"),n=await r(Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{name:Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT).split(Oe.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(Oe.join(Ct.get(Xe.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(qh(),ae(Gh)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return n}a(pse,"getComponents");async function mse(e){let t=ks.getComponentFileValidator(e);if(t)throw zt(t,t.message,Jt.BAD_REQUEST);let n=U_.getConfigObj()[e.project]||e.project==="harperdb"?Oe.join(SH.get(Xe.CONFIG_PARAMS.ROOTPATH),"node_modules"):Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ke.stat(Oe.join(n,e.project,e.file));return{message:await Ke.readFile(Oe.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Xe.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Oe.join(e.project,e.file)}'`):i}}a(mse,"getComponentFile");async function Sse(e){let t=ks.setComponentFileValidator(e);if(t)throw zt(t,t.message,Jt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Oe.join(Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Ke.ensureFile(n),await Ke.outputFile(n,e.payload,r)):await Ke.ensureDir(n),"Successfully set component: "+e.file}a(Sse,"setComponentFile");async function Tse(e){let t=ks.dropComponentFileValidator(e);if(t)throw zt(t,t.message,Jt.BAD_REQUEST);let r=e.file?Oe.join(e.project,e.file):e.project,n=Oe.join(Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),r);return await Ke.pathExists(n)&&await Ke.remove(n),U_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(Tse,"dropComponent");TH.exports={customFunctionsStatus:ase,getCustomFunctions:cse,getCustomFunction:lse,setCustomFunction:use,dropCustomFunction:_se,addComponent:dse,dropCustomFunctionProject:fse,packageComponent:Ese,deployComponent:hse,getComponents:pse,getComponentFile:mse,setComponentFile:Sse,dropComponent:Tse}});var $A=R((obe,RH)=>{"use strict";var $s=require("joi"),gH=nt();RH.exports={readTransactionLogValidator:gse,deleteTransactionLogsBeforeValidator:Rse};function gse(e){let t=$s.object({schema:$s.string().required(),table:$s.string().required(),from:$s.date().timestamp(),to:$s.date().timestamp(),limit:$s.number().min(1)});return gH.validateBySchema(e,t)}a(gse,"readTransactionLogValidator");function Rse(e){let t=$s.object({schema:$s.string().required(),table:$s.string().required(),timestamp:$s.date().timestamp().required()});return gH.validateBySchema(e,t)}a(Rse,"deleteTransactionLogsBeforeValidator")});var Fh=R((cbe,yH)=>{"use strict";var VA=L(),v_=gt(),AH=Y(),OH=X(),bH=fi(),{handleHDBError:el,hdb_errors:Ase}=ie(),{HTTP_STATUS_CODES:tl}=Ase,{readTransactionLogValidator:Ose,deleteTransactionLogsBeforeValidator:bse}=$A(),NH="This operation relies on clustering and cannot run with it disable.",Nse="Logs successfully deleted from transaction log.",yse="All logs successfully deleted from transaction log.";yH.exports={readTransactionLog:Ise,deleteTransactionLogsBefore:wse};async function*Ise(e){let t=Ose(e);if(t)throw el(t,t.message,tl.BAD_REQUEST,void 0,void 0,!0);if(!OH.get(VA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw el(new Error,NH,tl.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=AH.checkSchemaTableExist(r,n);if(s)throw el(new Error,s,tl.NOT_FOUND,void 0,void 0,!0);let i=bH.createNatsTableStreamName(r,n),o=await v_.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let l=Math.floor(c?.nats_timestamp/1e6);if(e.to&&l>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:l,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===VA.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(Ise,"readTransactionLog");async function wse(e){let t=bse(e);if(t)throw el(t,t.message,tl.BAD_REQUEST,void 0,void 0,!0);if(!OH.get(VA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw el(new Error,NH,tl.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=AH.checkSchemaTableExist(r,n);if(i)throw el(new Error,i,tl.NOT_FOUND,void 0,void 0,!0);let o=bH.createNatsTableStreamName(r,n),{jsm:c}=await v_.getNATSReferences(),l=await v_.getStreamInfo(o),_=new Date(l.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let u=Nse,d,E=new Date(l.state.last_ts).getTime();return s>E?(d=l.state.last_seq+1,u=yse):d=(await v_.viewStream(o,parseInt(s),1))[0].nats_sequence,await v_.purgeTableStream(r,n,{seq:d}),u}a(wse,"deleteTransactionLogsBefore")});var wH=R((ube,IH)=>{"use strict";var YA=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};IH.exports=YA});var DH=R((dbe,CH)=>{"use strict";var KA=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};CH.exports=KA});var QA=R((Ebe,PH)=>{"use strict";var LH=wH(),Cse=DH(),{HDB_ERROR_MSGS:Dse}=nn(),WA=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Dse.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new LH(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Cse(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new LH(r,n,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};PH.exports=WA});var Yh=R((pbe,QH)=>{"use strict";var jA=Pr(),kh=ur(),kn=PE(),x_=Ei(),zA=ia(),Lse=hR(),Pse=HU(),G_=Ur(),$h=BE(),Gt=k(),Mse=yR(),Use=c_(),vse=iA(),Bse=XE(),Hse=eh(),xse=aA(),Gse=rh(),qse=sh(),JA=oh(),Ci=Y(),Fse=v0(),XA=ch(),vH=bo(),Fn=L(),BH=qB(),kse=gi(),HH=s_(),xH=(Lh(),ae(C_)),GH=Et(),mn=kA(),$se=require("alasql"),qH=Fh(),FH=Bh(),kH=QA(),{handleHDBError:Yr,hdb_errors:$H}=ie(),{HDB_ERROR_MSGS:sr,HTTP_STATUS_CODES:B_}=$H,V=new Map,VH="delete",Io="insert",Di="read",Ua="update",H_="describe",MH=x_.describeSchema.name,UH=x_.describeTable.name,YH={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Vse="catchup",Yse="handleGetJob",Kse="handleGetJobsByStartDate",Vh={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Wse=[kn.createTable.name,kn.createAttribute.name,kn.dropTable.name,kn.dropAttribute.name],KH={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},j=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};V.set(jA.insert.name,new j(!1,[Io]));V.set(jA.update.name,new j(!1,[Ua]));V.set(jA.upsert.name,new j(!1,[Io,Ua]));V.set(kh.searchByConditions.name,new j(!1,[Di]));V.set(kh.searchByHash.name,new j(!1,[Di]));V.set(kh.searchByValue.name,new j(!1,[Di]));V.set(kh.search.name,new j(!1,[Di]));V.set(kn.createSchema.name,new j(!0,[]));V.set(kn.createTable.name,new j(!0,[]));V.set(kn.createAttribute.name,new j(!1,[Io]));V.set(kn.dropSchema.name,new j(!0,[]));V.set(kn.dropTable.name,new j(!0,[]));V.set(kn.dropAttribute.name,new j(!0,[]));V.set(x_.describeSchema.name,new j(!1,[Di]));V.set(x_.describeTable.name,new j(!1,[Di]));V.set(zA.deleteRecord.name,new j(!1,[VH]));V.set(G_.addUser.name,new j(!0,[]));V.set(G_.alterUser.name,new j(!0,[]));V.set(G_.dropUser.name,new j(!0,[]));V.set(G_.listUsersExternal.name,new j(!0,[]));V.set($h.listRoles.name,new j(!0,[]));V.set($h.addRole.name,new j(!0,[]));V.set($h.alterRole.name,new j(!0,[]));V.set($h.dropRole.name,new j(!0,[]));V.set(Mse.name,new j(!0,[]));V.set(Use.name,new j(!0,[]));V.set(vse.name,new j(!0,[]));V.set(Bse.name,new j(!0,[]));V.set(Hse.name,new j(!0,[]));V.set(xse.name,new j(!0,[]));V.set(JA.setRoutes.name,new j(!0,[]));V.set(JA.getRoutes.name,new j(!0,[]));V.set(JA.deleteRoutes.name,new j(!0,[]));V.set(GH.setConfiguration.name,new j(!0,[]));V.set(Gse.clusterStatus.name,new j(!0,[]));V.set(qse.name,new j(!0,[]));V.set(XA.getFingerprint.name,new j(!0,[]));V.set(XA.setLicense.name,new j(!0,[]));V.set(zA.deleteFilesBefore.name,new j(!0,[]));V.set(zA.deleteAuditLogsBefore.name,new j(!0,[]));V.set(vH.restart.name,new j(!0,[]));V.set(vH.restartService.name,new j(!0,[]));V.set(Lse.name,new j(!0,[]));V.set(Pse.name,new j(!0,[Di]));V.set(kse.systemInformation.name,new j(!0,[]));V.set(GH.getConfiguration.name,new j(!0,[]));V.set(qH.readTransactionLog.name,new j(!0,[]));V.set(qH.deleteTransactionLogsBefore.name,new j(!0,[]));V.set(FH.installModules.name,new j(!0,[]));V.set(FH.auditModules.name,new j(!0,[]));V.set(HH.createTokens.name,new j(!1,[]));V.set(HH.refreshOperationToken.name,new j(!1,[]));V.set(xH.login.name,new j(!1,[]));V.set(xH.logout.name,new j(!1,[]));V.set(mn.customFunctionsStatus.name,new j(!0,[]));V.set(mn.getCustomFunctions.name,new j(!0,[]));V.set(mn.getComponents.name,new j(!0,[]));V.set(mn.getComponentFile.name,new j(!0,[]));V.set(mn.setComponentFile.name,new j(!0,[]));V.set(mn.dropComponent.name,new j(!0,[]));V.set(mn.getCustomFunction.name,new j(!0,[]));V.set(mn.setCustomFunction.name,new j(!0,[]));V.set(mn.dropCustomFunction.name,new j(!0,[]));V.set(mn.addComponent.name,new j(!0,[]));V.set(mn.dropCustomFunctionProject.name,new j(!0,[]));V.set(mn.packageComponent.name,new j(!0,[]));V.set(mn.deployComponent.name,new j(!0,[]));V.set(XA.getRegistrationInfo.name,new j(!1,[]));V.set(G_.userInfo.name,new j(!1,[]));V.set(x_.describeAll.name,new j(!1,[]));V.set(Yse,new j(!1,[]));V.set(Kse,new j(!0,[]));V.set(Vse,new j(!0,[]));V.set(Vh.CSV_DATA_LOAD,new j(!1,[Io,Ua]));V.set(Vh.CSV_URL_LOAD,new j(!1,[Io,Ua]));V.set(Vh.CSV_FILE_LOAD,new j(!1,[Io,Ua]));V.set(Vh.IMPORT_FROM_S3,new j(!1,[Io,Ua]));V.set(KH.EXPORT_TO_S3,new j(!0,[]));V.set(KH.EXPORT_LOCAL,new j(!0,[]));V.set(Fn.VALID_SQL_OPS_ENUM.DELETE,new j(!1,[VH]));V.set(Fn.VALID_SQL_OPS_ENUM.SELECT,new j(!1,[Di]));V.set(Fn.VALID_SQL_OPS_ENUM.INSERT,new j(!1,[Io]));V.set(Fn.VALID_SQL_OPS_ENUM.UPDATE,new j(!1,[Ua]));QH.exports={verifyPerms:jse,verifyPermsAst:Qse,verifyBulkLoadAttributePerms:Jse};function Qse(e,t,r){if(Ci.isEmptyOrZeroLength(e))throw Gt.info("verify_perms_ast has an empty user parameter"),Yr(new Error);if(Ci.isEmptyOrZeroLength(t))throw Gt.info("verify_perms_ast has an empty user parameter"),Yr(new Error);if(Ci.isEmptyOrZeroLength(r))throw Gt.info("verify_perms_ast has a null operation parameter"),Yr(new Error);try{let n=new kH,s=new Fse(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Gt.info("No schemas defined in verifyPermsAst(), will not continue."),Yr(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&YH[r])throw Yr(new Error,sr.DROP_SYSTEM,B_.FORBIDDEN);if(c&&!l)return null;let _=BH.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof $se.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let E=s.getTablesBySchemaName(i[d]);E&&o.set(i[d],E)}let u=WH(t,r,o,n);return u||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=s.getAttributesBySchemaTableName(E,d[f]),m=eO(t.role.permission,E,d[f]);ZA(h,m,r,d[f],E,n)}}),n.getPermsResponse())}catch(n){throw Yr(n)}}a(Qse,"verifyPermsAst");function jse(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Gt.info("null required parameter in verifyPerms"),Yr(new Error,sr.DEFAULT_INVALID_REQUEST,B_.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new kH;if(Ci.isEmptyOrZeroLength(e.hdb_user?.role)||Ci.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Gt.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(sr.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,_=e.hdb_user?.role?.permission?.structure_user,u=o.has(Fn.SYSTEM_SCHEMA_NAME)||s===Fn.SYSTEM_SCHEMA_NAME;if(u&&YH[r])throw Yr(new Error,sr.DROP_SYSTEM,B_.FORBIDDEN);if(l&&!u||_===!0&&(r===kn.createSchema.name||r===kn.dropSchema.name))return null;if(Wse.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=BH.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=d),r===MH||r===UH){if(s===Fn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(sr.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===MH&&(!d[s]||!d[s][H_]))return c.handleInvalidItem(sr.SCHEMA_NOT_FOUND(s));if(r===UH&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][H_]))return c.handleInvalidItem(sr.TABLE_NOT_FOUND(s,i))}}let E=WH(e.hdb_user,r,o,c,n);if(E)return E;if(V.get(r)&&V.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Fn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let m=[],S=d[s].tables[i];S[Fn.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(T=>T[Fn.PERMS_CRUD_ENUM.READ]).forEach(T=>{m.push(T.attribute_name)}):m=global.hdb_schema[s][i].attributes.map(g=>g.attribute),e.get_attributes=m)}let f=zse(e),h=eO(e.hdb_user?.role?.permission,s,i);return ZA(f,h,r,i,s,c,n),c.getPermsResponse()}a(jse,"verifyPerms");function WH(e,t,r,n,s){if(Ci.arrayHasEmptyValues([e,t,r]))throw Gt.info("hasPermissions has an invalid parameter"),Yr(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 Gt.info(`operation ${t} not found.`),Yr(new Error,sr.OP_NOT_FOUND(t),B_.BAD_REQUEST);if(V.get(t)&&V.get(t).requires_su)return Gt.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(sr.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][H_]===!1){n.addInvalidItem(sr.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(sr.SCHEMA_NOT_FOUND(l));continue}let _=r.get(l);for(let u of _){let d=o[l].tables[u];if(!d||d[H_]===!1)n.addInvalidItem(sr.TABLE_NOT_FOUND(l,u));else try{let E=[],f=V.get(t).perms;!Ci.isEmpty(s)&&f.includes(s)&&(f=[s]);for(let h=0;h<f.length;h++){let m=f[h],S=d[m];(S==null||S===!1)&&(Gt.info(`Required ${m} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),E.push(m))}E.length>0&&n.addUnauthorizedTable(l,u,E)}catch(E){let f=sr.UNKNOWN_OP_AUTH_ERROR(t,l,u);throw Gt.error(f),Gt.error(E),Yr($H.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?n.getPermsResponse():null}a(WH,"hasPermissions");function ZA(e,t,r,n,s,i,o){if(!e||!t)throw Gt.info("no attributes specified in checkAttributePerms."),Yr(new Error);let c=V.get(r).perms;if(!c||c==="")throw Gt.info(`no permissions found for ${r} in checkAttributePerms().`),Yr(new Error);if(Ci.isEmptyOrZeroLength(t))return Gt.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let u of e){let d=t.get(u);if(d){if(d[H_]===!1){i.addInvalidItem(sr.ATTR_NOT_FOUND(s,n,u),s,n);continue}if(c)for(let E of c){if(Fn.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==Di)throw Yr(new Error,sr.SYSTEM_TIMESTAMP_PERMS_ERR,B_.FORBIDDEN);d[E]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(E):l[d.attribute_name]=[E])}}else i.addInvalidItem(sr.ATTR_NOT_FOUND(s,n,u),s,n)}let _=Object.keys(l);_.length>0&&i.addUnauthorizedAttributes(_,s,n,l)}a(ZA,"checkAttributePerms");function zse(e){let t=new Set;try{if(e.action)return t;if(e.operation===Fn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){Gt.info(r)}return t}a(zse,"getRecordAttributes");function eO(e,t,r){let n=new Map;if(Ci.isEmpty(e))return Gt.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Gt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(eO,"getAttributePermissions");function Jse(e,t,r,n,s,i,o){let c=new Set(i),l=eO(e,n,s);ZA(c,l,t,s,n,o,r)}a(Jse,"verifyBulkLoadAttributePerms")});var Wh=R((Sbe,ZH)=>{"use strict";ZH.exports={evaluateSQL:uie,processAST:XH,convertSQLToAST:JH,checkASTPermissions:zH};var Xse=Pr(),jH=require("util"),Zse=jH.callbackify(Xse.insert),eie=ur().search,tie=RM().update,rie=jH.callbackify(tie),nie=OM().convertDelete,wo=require("alasql"),sie=Yh(),Kh=k(),iie=EE(),oie=Y(),q_=L(),{hdb_errors:aie,handleHDBError:tO}=ie(),{HTTP_STATUS_CODES:rO}=aie;iie(wo);var cie=403,lie="There was a problem performing this insert. Please check the logs and try again.",nO=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function uie(e,t){let r=e.parsed_sql_object;if(!r){r=JH(e.sql);let n,s=r.ast.statements[0];if(s instanceof wo.yy.Insert?n=s.into.databaseid:s instanceof wo.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof wo.yy.Update||s instanceof wo.yy.Delete?n=s.table.databaseid:Kh.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof wo.yy.Select)&&oie.isEmptyOrZeroLength(n))return t("No schema specified",null)}XH(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(uie,"evaluateSQL");function zH(e,t){let r;try{r=sie.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(zH,"checkASTPermissions");function JH(e){let t=new nO;if(!e)throw tO(new Error,"The 'sql' parameter is missing from the request body",rO.BAD_REQUEST);try{let r=e.trim(),n=wo.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
22
- `);throw n[1]?tO(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,rO.BAD_REQUEST):tO(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",rO.BAD_REQUEST)}return t}a(JH,"convertSQLToAST");function XH(e,t,r){try{let n=_ie;if(!e.bypass_auth&&!t.permissions_checked){let i=zH(e,t);if(i&&i.length>0)return r(cie,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case q_.VALID_SQL_OPS_ENUM.SELECT:n=eie,s=t.ast.statements[0];break;case q_.VALID_SQL_OPS_ENUM.INSERT:n=die;break;case q_.VALID_SQL_OPS_ENUM.UPDATE:n=rie;break;case q_.VALID_SQL_OPS_ENUM.DELETE:n=nie;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(XH,"processAST");function _ie(e,t){Kh.info(e),t("unknown sql statement")}a(_ie,"nullFunction");function die({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=fie(i,e.values)}catch(o){return r(o)}Zse(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){Kh.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(die,"convertInsert");function fie(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=wo.compile(`SELECT ${s.toString()} AS [${q_.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Kh.error(r),new Error(lie)}}a(fie,"createDataObjects")});var sO=R((gbe,tx)=>{"use strict";var{S3:Eie,GetObjectCommand:hie}=require("@aws-sdk/client-s3");tx.exports={getFileStreamFromS3:pie,getS3AuthObj:ex};async function pie(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await ex(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new hie(r))).Body}a(pie,"getFileStreamFromS3");function ex(e,t,r){return new Eie({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(ex,"getS3AuthObj")});var Qh=R((Abe,ux)=>{"use strict";var oO=ur(),mie=Wh(),Sie=sO(),{AsyncParser:Tie,Transform:gie}=require("json2csv"),k_=require("stream"),Sn=Y(),iO=require("fs-extra"),Rie=require("path"),$n=k(),{promisify:sx}=require("util"),F_=Y(),{handleHDBError:Dt,hdb_errors:Aie}=ie(),{HDB_ERROR_MSGS:Kr,HTTP_STATUS_CODES:Lt}=Aie,{streamAsJSON:Oie}=(DS(),ae(GI)),{Upload:bie}=require("@aws-sdk/lib-storage"),rx=["search_by_value","search_by_hash","sql","search_by_conditions"],nx=["json","csv"],ix="json",ox="csv",Nie="Successfully exported JSON locally.",yie="Successfully exported CSV locally.",Iie=1e3,wie=oO.searchByHash,Cie=oO.searchByValue,Die=sx(mie.evaluateSQL),Lie=sx(k_.finished);ux.exports={export_to_s3:vie,export_local:Pie,toCsvStream:ax};async function Pie(e){$n.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=cx(e);if(!Sn.isEmpty(t))throw $n.error(t),Dt(new Error,t,Lt.BAD_REQUEST,void 0,void 0,!0);if(Sn.isEmpty(e.path))throw $n.error(Kr.MISSING_VALUE("path")),Dt(new Error,Kr.MISSING_VALUE("path"),Lt.BAD_REQUEST,void 0,void 0,!0);let r=(Sn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Rie.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Sn.buildFolderPath(e.path,r);await Mie(e.path);let s=await lx(e);return await Uie(n,e.format,s)}a(Pie,"export_local");async function Mie(e){if($n.trace("in confirmPath"),Sn.isEmptyOrZeroLength(e))throw Dt(new Error,`Invalid path: ${e}`,Lt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await iO.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,$n.error(n),Dt(new Error,n,Lt.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 $n.error(r),Dt(new Error,r,Lt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Mie,"confirmPath");async function Uie(e,t,r){if($n.trace("in saveToLocal"),F_.isEmptyOrZeroLength(e))throw Dt(new Error,Kr.INVALID_VALUE("file_path"),Lt.BAD_REQUEST,void 0,void 0,!0);if(F_.isEmptyOrZeroLength(t))throw Dt(new Error,Kr.INVALID_VALUE("Source format"),Lt.BAD_REQUEST,void 0,void 0,!0);if(F_.isEmpty(r))throw Dt(new Error,Kr.NOT_FOUND("Data"),Lt.BAD_REQUEST,void 0,void 0,!0);if(t===ix){let n=iO.createWriteStream(e);return Oie(r).pipe(n),await Lie(n),{message:Nie,path:e}}else if(t===ox){let n=iO.createWriteStream(e),s=k_.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(u=>({label:u,value:u})));let c={objectMode:!0};return await new Tie(i,c).fromInput(s).toOutput(n).promise(!1),{message:yie,path:e}}throw Dt(new Error,Kr.INVALID_VALUE("format"),Lt.BAD_REQUEST)}a(Uie,"saveToLocal");async function vie(e){if(!e.s3||Object.keys(e.s3).length===0)throw Dt(new Error,Kr.MISSING_VALUE("S3 object"),Lt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Dt(new Error,Kr.MISSING_VALUE("aws_access_key_id"),Lt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Dt(new Error,Kr.MISSING_VALUE("aws_secret_access_key"),Lt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.bucket))throw Dt(new Error,Kr.MISSING_VALUE("bucket"),Lt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.key))throw Dt(new Error,Kr.MISSING_VALUE("key"),Lt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.region))throw Dt(new Error,Kr.MISSING_VALUE("region"),Lt.BAD_REQUEST);let t=cx(e);if(!Sn.isEmpty(t))throw Dt(new Error,t,Lt.BAD_REQUEST);$n.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await lx(e)}catch(l){throw $n.error(l),l}let n,s=await Sie.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new k_.PassThrough;if(e.format===ox){i=e.s3.key+".csv";let l=ax(r,r.getColumns?.());l.on("error",_=>{throw _}),l.pipe(o)}else if(e.format===ix){i=e.s3.key+".json";let l=new k_.Readable;l.pipe(o),l.on("error",d=>{throw d}),l.push("[");let _=r.length,u="";for(let[d,E]of r.entries()){let f=d===_-1?JSON.stringify(E):JSON.stringify(E)+",";u+=f,d!==0&&d%Iie===0&&(l.push(u),u="")}u.length!==0&&l.push(u),l.push("]"),l.push(null)}else throw Dt(new Error,Kr.INVALID_VALUE("format"),Lt.BAD_REQUEST);return new bie({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(vie,"export_to_s3");function ax(e,t){let r=k_.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new gie(n,s);return r.pipe(i)}a(ax,"toCsvStream");function cx(e){if($n.trace("in exportCoreValidation"),Sn.isEmpty(e.format))return"format missing";if(nx.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${nx.join(", ")}`;let t=e.search_operation.operation;if(Sn.isEmpty(t))return"search_operation.operation missing";if(rx.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${rx.join(", ")}`}a(cx,"exportCoreValidation");async function lx(e){$n.trace("in getRecords");let t,r;if(F_.isEmpty(e.search_operation)||F_.isEmptyOrZeroLength(e.search_operation.operation))throw Dt(new Error,Kr.INVALID_VALUE("Search operation"),Lt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Cie;break;case"search_by_hash":t=wie;break;case"search_by_conditions":t=oO.searchByConditions;break;case"sql":t=Die;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,$n.error(r),Dt(new Error,r,Lt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(lx,"getRecords")});var Tx={};$e(Tx,{contentTypes:()=>uO,findBestSerializer:()=>Jh,getDeserializer:()=>Ba,registerContentHandlers:()=>_O,serialize:()=>Xh,serializeMessage:()=>Pa});function Bie(e){try{return e?.[0]===123?lO(e):e}catch{return e}}function _O(e){e.register(xie,{serializers:[{regex:/^application\/json$/,serializer:iu},{regex:/^application\/cbor$/,serializer:function(t){return new va.EncoderStream(V_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?zh.Readable.from((0,Vs.encodeIter)(t,V_)):(0,Vs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,jh.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Vs.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,va.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function Jh(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[_,...u]=l.split(/\s*;\s*/),d=1,E={q:1};for(let h of u){let m=h.indexOf("=");E[h.substring(0,m)]=h.substring(m+1)}d=+E.q;let f=Xt.get(_);if(f){let h=(f.q||1)*d;h>s&&(n=f,i=f.type||_,s=h,o=E)}}if(!n){if(r)throw new Ex.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(Xt.keys()).join(", "),406);n=Xt.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function Xh(e,t,r){let n=dx&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=Jh(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Li.createBrotliCompress)({params:{[Li.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Li.constants.BROTLI_MODE_TEXT:Li.constants.BROTLI_MODE_GENERIC,[Li.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>dx?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Li.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function Pa(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return $_(e);let r=t.serialize;if(r)return r(e);let n=Jh(t);return r=t.serialize=n.serializer.serialize,r(e)}function Gie(e){return new Promise((t,r)=>{let n=[];e.on("data",s=>n.push(s)),e.on("end",()=>t(Buffer.concat(n))),e.on("error",r)})}function Ba(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Xt.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Xt.get(e)?.deserialize||fx(e,n);return o=>Gie(o).then(i)}return e&&Xt.get(e)?.deserialize||fx(e,n)}function fx(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return n=>({contentType:e,data:n.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return lO(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function qie(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}var jh,Vs,va,Li,Ex,zh,hx,aO,cO,px,mx,$_,lO,V_,Xt,uO,_x,Sx,Hie,xie,dx,jc=be(()=>{DS();jh=x(Qh()),Vs=require("msgpackr"),va=require("cbor-x"),Li=require("zlib"),Ex=x(ie()),zh=require("stream");Cr();hx=require("../index"),aO=x(X()),cO=x(L()),px=x(require("yaml")),mx=aO.default.get(cO.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,$_=mx?zo:JSON.stringify,lO=mx?CS:JSON.parse,V_={useRecords:!1,useToJSON:!0},Xt=new Map,uO=Xt;dt.contentTypes=uO;(0,hx._assignPackageExport)("contentTypes",uO);Xt.set("application/json",{serializeStream:iu,serialize:$_,deserialize:lO,q:.8});_x=new va.Encoder(V_);Xt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new va.EncoderStream(V_).end(e)},serialize:_x.encode,deserialize:_x.decode,q:1});Xt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?zh.Readable.from((0,Vs.encodeIter)(e,V_)):(0,Vs.pack)(e)},serialize:Vs.pack,deserialize:Vs.unpack,q:.9});Xt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,jh.toCsvStream)(e,e?.getColumns?.())},serialize(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),e&&!e[Symbol.iterator]&&(e=[e.toJSON?e.toJSON():e]),(0,jh.toCsvStream)(e,e?.getColumns?.())},q:.1});Xt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.2});Xt.set("text/yaml",{serialize(e){return px.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Xt.set("text/event-stream",{serializeStream:function(e){return zh.Readable.from(qie(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+`
20
+ `,""):null}catch(E){E.stderr?i[l].npm_error=cH(E.stderr):i[l].npm_error=E.message;continue}try{i[l].npm_output=JSON.parse(u)}catch{i[l].npm_output=u}try{i[l].npm_error=JSON.parse(d)}catch{i[l].npm_error=d}}return Xc.info(`finished installModules with response ${i}`),i}a(Wne,"installModules");function cH(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
21
+ `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(cH,"parseNPMStdErr");async function Qne(e){Xc.info(`starting auditModules for request: ${e}`);let t=uH(e);if(t)throw zc(t,t.message,Jc.BAD_REQUEST);let{projects:r}=e;await vh(),await lH(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Uh.join(xA,o);n[o]={npm_output:null,npm_error:null};try{let l=await M_("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=cH(l.stderr)}}return Xc.info(`finished auditModules with response ${n}`),n}a(Qne,"auditModules");async function vh(){try{return await M_("npm -v"),!0}catch{throw zc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Jc.BAD_REQUEST,void 0,void 0,!0)}}a(vh,"checkNPMInstalled");async function lH(e){if(!Array.isArray(e)||e.length===0)throw zc(new Error,"projects argument must be an array with at least 1 element",Jc.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=Uh.join(xA,i.toString());if(!await iH.pathExists(o)){t.push(i);continue}let l=Uh.join(o,"package.json");await iH.pathExists(l)||r.push(i)}if(t.length>0)throw zc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Jc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw zc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Jc.BAD_REQUEST,void 0,void 0,!0)}a(lH,"checkProjectPaths");function uH(e){let t=Mh.object({projects:Mh.array().min(1).items(Mh.string()).required(),dry_run:Mh.boolean().default(!1)});return kne.validateBySchema(e,t)}a(uH,"modulesValidator")});var qA=R((tbe,pH)=>{"use strict";var Zc=require("fs-extra"),GA=require("path"),Hh=k(),dH=Y(),xh=L(),hH=X(),jne=Et();pH.exports=zne;async function zne(){let e=Jne(),t=hH.get(xh.CONFIG_PARAMS.ROOTPATH),r=GA.join(t,"package.json"),n={dependencies:{harperdb:"file:"+xh.PACKAGE_ROOT}},s=GA.join(t,"node_modules");await Zc.ensureDir(s);let i,o=!0,c=!1;try{i=await Zc.readJson(r)}catch(l){if(dH.isEmptyOrZeroLength(e))return;if(l.code!==xh.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!dH.isEmptyOrZeroLength(e)){for(let{name:l,package:_}of e){let u=await fH(_);n.dependencies[l]=u+_}if(!o){Hh.notify("Installing components"),await EH(r,n,null);return}for(let{name:l,package:_}of e){let u=i.dependencies[l],d=await fH(_);if(u===void 0||u!==d+_){c=!0;break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Hh.notify("Removing component",l),c=!0);c&&(Hh.notify("Updating components."),await EH(r,n,i))}a(zne,"installComponents");function Jne(){let e=jne.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(Jne,"getComponentsConfig");async function fH(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":GA.extname(e)||await Zc.pathExists(e)?"file:":"github:"}a(fH,"getPkgPrefix");async function EH(e,t,r){Hh.trace("npm installing components package.json",t),await Zc.writeFile(e,JSON.stringify(t,null," "));try{await Bh().installAllRootModules(hH.get(xh.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await Zc.writeFile(e,JSON.stringify(r,null," ")):await Zc.unlink(e),n}}a(EH,"installPackages")});var $A=R((sbe,gH)=>{"use strict";var Ke=require("fs-extra"),FA=require("fast-glob"),Oe=require("path"),SH=require("tar-fs"),nbe=require("uuid").v4,kA=require("normalize-path"),ks=sH(),xt=k(),Xe=L(),Ct=X(),U_=Et(),Xne=Y(),{PACKAGE_ROOT:Zne}=L(),{handleHDBError:zt,hdb_errors:ese}=ie(),{basename:tse}=require("path"),rse=qA(),TH=X(),nse=L(),{Readable:sse}=require("stream"),{isMainThread:ise}=require("worker_threads"),{HDB_ERROR_MSGS:Ma,HTTP_STATUS_CODES:Jt}=ese,ose=Oe.join(Zne,"application-template"),mH=Oe.join(Ct.get(Xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function ase(){xt.trace("getting custom api status");let e={};try{e={port:Ct.get(Xe.CONFIG_PARAMS.HTTP_PORT),directory:Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw zt(new Error,Ma.FUNCTION_STATUS,Jt.INTERNAL_SERVER_ERROR,xt.ERR,t)}return e}a(ase,"customFunctionsStatus");function cse(){xt.trace("getting custom api endpoints");let e={},t=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT);try{FA.sync(kA(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:FA.sync(kA(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:FA.sync(kA(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw zt(new Error,Ma.GET_FUNCTIONS,Jt.INTERNAL_SERVER_ERROR,xt.ERR,r)}return e}a(cse,"getCustomFunctions");function lse(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=ks.getDropCustomFunctionValidator(e);if(t)throw zt(t,t.message,Jt.BAD_REQUEST);xt.trace("getting custom api endpoint file content");let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=Oe.join(r,n,s,i+".js");try{return Ke.readFileSync(o,{encoding:"utf8"})}catch(c){throw zt(new Error,Ma.GET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,xt.ERR,c)}}a(lse,"getCustomFunction");function use(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=ks.setCustomFunctionValidator(e);if(t)throw zt(t,t.message,Jt.BAD_REQUEST);xt.trace("setting custom function file content");let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return Ke.outputFileSync(Oe.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw zt(new Error,Ma.SET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,xt.ERR,c)}}a(use,"setCustomFunction");function _se(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=ks.getDropCustomFunctionValidator(e);if(t)throw zt(t,t.message,Jt.BAD_REQUEST);xt.trace("dropping custom function file");let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return Ke.unlinkSync(Oe.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw zt(new Error,Ma.DROP_FUNCTION,Jt.INTERNAL_SERVER_ERROR,xt.ERR,o)}}a(_se,"dropCustomFunction");function dse(e){e.project&&(e.project=Oe.parse(e.project).name);let t=ks.addComponentValidator(e);if(t)throw zt(t,t.message,Jt.BAD_REQUEST);xt.trace("adding component");let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Oe.join(r,n);return Ke.mkdirSync(s,{recursive:!0}),Ke.copySync(ose,s),`Successfully added project: ${n}`}catch(s){throw zt(new Error,Ma.ADD_FUNCTION,Jt.INTERNAL_SERVER_ERROR,xt.ERR,s)}}a(dse,"addComponent");function fse(e){e.project&&(e.project=Oe.parse(e.project).name);let t=ks.dropCustomFunctionProjectValidator(e);if(t)throw zt(t,t.message,Jt.BAD_REQUEST);xt.trace("dropping custom function project");let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Ct.get(Xe.CONFIG_PARAMS.APPS);if(!Xne.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return U_.updateConfigValue(Xe.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Oe.join(r,n);return Ke.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw zt(new Error,Ma.DROP_FUNCTION_PROJECT,Jt.INTERNAL_SERVER_ERROR,xt.ERR,i)}}a(fse,"dropCustomFunctionProject");async function Ese(e){e.project&&(e.project=Oe.parse(e.project).name);let t=ks.packageComponentValidator(e);if(t)throw zt(t,t.message,Jt.BAD_REQUEST);let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;xt.trace("packaging component",n);let s;try{s=await Ke.realpath(Oe.join(r,n))}catch(l){if(l.code!==Xe.NODE_ERROR_CODES.ENOENT)throw l;try{s=await Ke.realpath(Oe.join(Ct.get(Xe.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===Xe.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await Ke.ensureDir(mH);let i=Oe.join(mH,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:l=>l.includes(Oe.join(s,"node_modules"))}),SH.pack(s,o).pipe(Ke.createWriteStream(i,{overwrite:!0})),await new Promise(l=>setTimeout(l,2e3));let c=Ke.readFileSync(i,{encoding:"base64"});return await Ke.remove(i),{project:n,payload:c}}a(Ese,"packageComponent");async function hse(e){e.project&&(e.project=Oe.parse(e.project).name);let t=ks.deployComponentValidator(e);if(t)throw zt(t,t.message,Jt.BAD_REQUEST);let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(xt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=Oe.join(r,n),i="file:"+o,await Ke.emptyDir(o);let E=sse.from(Buffer.from(s,"base64"));await new Promise((h,m)=>{E.pipe(SH.extract(o,{finish:h})).on("error",m)});let f=await Ke.readdir(o);f.length===1&&f[0]==="package"&&(await Ke.copy(Oe.join(o,"package"),o),await Ke.remove(Oe.join(o,"package")))}if(await U_.addConfig(n,{package:i}),!s){await rse();let E=TH.get(nse.CONFIG_PARAMS.ROOTPATH);o=Oe.join(E,"node_modules",n)}if(ise)return;let c=new Map;c.isWorker=!0;let l=(qh(),ae(Gh)),_;l.setErrorReporter(E=>_=E);let u=tse(o),d=l.component_errors.get(u);try{await l.loadComponent(o,c)}finally{l.component_errors.set(u,d)}if(_)throw _;return xt.info("Installed component"),`Successfully deployed: ${n}`}a(hse,"deployComponent");async function pse(){let e=U_.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let l=await Ke.readdir(o,{withFileTypes:!0});for(let _ of l){let u=_.name;if(u.startsWith(".")||u==="node_modules")continue;let d=Oe.join(o,u);if(_.isDirectory()||_.isSymbolicLink()){let E={name:u,entries:[]};c.entries.push(E),await r(d,E)}else{let E=await Ke.stat(d),f={name:Oe.basename(u),mtime:E.mtime,size:E.size};c.entries.push(f)}}return c}catch(l){return xt.warn("Error loading package",l),{error:l.toString(),entries:[]}}},"walk_dir"),n=await r(Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{name:Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT).split(Oe.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(Oe.join(Ct.get(Xe.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(qh(),ae(Gh)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return n}a(pse,"getComponents");async function mse(e){let t=ks.getComponentFileValidator(e);if(t)throw zt(t,t.message,Jt.BAD_REQUEST);let n=U_.getConfigObj()[e.project]||e.project==="harperdb"?Oe.join(TH.get(Xe.CONFIG_PARAMS.ROOTPATH),"node_modules"):Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ke.stat(Oe.join(n,e.project,e.file));return{message:await Ke.readFile(Oe.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Xe.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Oe.join(e.project,e.file)}'`):i}}a(mse,"getComponentFile");async function Sse(e){let t=ks.setComponentFileValidator(e);if(t)throw zt(t,t.message,Jt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Oe.join(Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Ke.ensureFile(n),await Ke.outputFile(n,e.payload,r)):await Ke.ensureDir(n),"Successfully set component: "+e.file}a(Sse,"setComponentFile");async function Tse(e){let t=ks.dropComponentFileValidator(e);if(t)throw zt(t,t.message,Jt.BAD_REQUEST);let r=e.file?Oe.join(e.project,e.file):e.project,n=Oe.join(Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),r);return await Ke.pathExists(n)&&await Ke.remove(n),U_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(Tse,"dropComponent");gH.exports={customFunctionsStatus:ase,getCustomFunctions:cse,getCustomFunction:lse,setCustomFunction:use,dropCustomFunction:_se,addComponent:dse,dropCustomFunctionProject:fse,packageComponent:Ese,deployComponent:hse,getComponents:pse,getComponentFile:mse,setComponentFile:Sse,dropComponent:Tse}});var VA=R((obe,AH)=>{"use strict";var $s=require("joi"),RH=nt();AH.exports={readTransactionLogValidator:gse,deleteTransactionLogsBeforeValidator:Rse};function gse(e){let t=$s.object({schema:$s.string().required(),table:$s.string().required(),from:$s.date().timestamp(),to:$s.date().timestamp(),limit:$s.number().min(1)});return RH.validateBySchema(e,t)}a(gse,"readTransactionLogValidator");function Rse(e){let t=$s.object({schema:$s.string().required(),table:$s.string().required(),timestamp:$s.date().timestamp().required()});return RH.validateBySchema(e,t)}a(Rse,"deleteTransactionLogsBeforeValidator")});var Fh=R((cbe,IH)=>{"use strict";var YA=L(),v_=gt(),OH=Y(),bH=X(),NH=fi(),{handleHDBError:el,hdb_errors:Ase}=ie(),{HTTP_STATUS_CODES:tl}=Ase,{readTransactionLogValidator:Ose,deleteTransactionLogsBeforeValidator:bse}=VA(),yH="This operation relies on clustering and cannot run with it disable.",Nse="Logs successfully deleted from transaction log.",yse="All logs successfully deleted from transaction log.";IH.exports={readTransactionLog:Ise,deleteTransactionLogsBefore:wse};async function*Ise(e){let t=Ose(e);if(t)throw el(t,t.message,tl.BAD_REQUEST,void 0,void 0,!0);if(!bH.get(YA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw el(new Error,yH,tl.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=OH.checkSchemaTableExist(r,n);if(s)throw el(new Error,s,tl.NOT_FOUND,void 0,void 0,!0);let i=NH.createNatsTableStreamName(r,n),o=await v_.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let l=Math.floor(c?.nats_timestamp/1e6);if(e.to&&l>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:l,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===YA.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(Ise,"readTransactionLog");async function wse(e){let t=bse(e);if(t)throw el(t,t.message,tl.BAD_REQUEST,void 0,void 0,!0);if(!bH.get(YA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw el(new Error,yH,tl.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=OH.checkSchemaTableExist(r,n);if(i)throw el(new Error,i,tl.NOT_FOUND,void 0,void 0,!0);let o=NH.createNatsTableStreamName(r,n),{jsm:c}=await v_.getNATSReferences(),l=await v_.getStreamInfo(o),_=new Date(l.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let u=Nse,d,E=new Date(l.state.last_ts).getTime();return s>E?(d=l.state.last_seq+1,u=yse):d=(await v_.viewStream(o,parseInt(s),1))[0].nats_sequence,await v_.purgeTableStream(r,n,{seq:d}),u}a(wse,"deleteTransactionLogsBefore")});var CH=R((ube,wH)=>{"use strict";var KA=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};wH.exports=KA});var LH=R((dbe,DH)=>{"use strict";var WA=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};DH.exports=WA});var jA=R((Ebe,MH)=>{"use strict";var PH=CH(),Cse=LH(),{HDB_ERROR_MSGS:Dse}=nn(),QA=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Dse.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new PH(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Cse(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new PH(r,n,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};MH.exports=QA});var Yh=R((pbe,jH)=>{"use strict";var zA=Pr(),kh=ur(),kn=PE(),x_=Ei(),JA=ia(),Lse=pR(),Pse=xU(),G_=Ur(),$h=BE(),Gt=k(),Mse=IR(),Use=c_(),vse=oA(),Bse=XE(),Hse=eh(),xse=cA(),Gse=rh(),qse=sh(),XA=oh(),Ci=Y(),Fse=B0(),ZA=ch(),BH=bo(),Fn=L(),HH=FB(),kse=gi(),xH=s_(),GH=(Lh(),ae(C_)),qH=Et(),mn=$A(),$se=require("alasql"),FH=Fh(),kH=Bh(),$H=jA(),{handleHDBError:Yr,hdb_errors:VH}=ie(),{HDB_ERROR_MSGS:sr,HTTP_STATUS_CODES:B_}=VH,V=new Map,YH="delete",Io="insert",Di="read",Ua="update",H_="describe",UH=x_.describeSchema.name,vH=x_.describeTable.name,KH={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Vse="catchup",Yse="handleGetJob",Kse="handleGetJobsByStartDate",Vh={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Wse=[kn.createTable.name,kn.createAttribute.name,kn.dropTable.name,kn.dropAttribute.name],WH={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},j=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};V.set(zA.insert.name,new j(!1,[Io]));V.set(zA.update.name,new j(!1,[Ua]));V.set(zA.upsert.name,new j(!1,[Io,Ua]));V.set(kh.searchByConditions.name,new j(!1,[Di]));V.set(kh.searchByHash.name,new j(!1,[Di]));V.set(kh.searchByValue.name,new j(!1,[Di]));V.set(kh.search.name,new j(!1,[Di]));V.set(kn.createSchema.name,new j(!0,[]));V.set(kn.createTable.name,new j(!0,[]));V.set(kn.createAttribute.name,new j(!1,[Io]));V.set(kn.dropSchema.name,new j(!0,[]));V.set(kn.dropTable.name,new j(!0,[]));V.set(kn.dropAttribute.name,new j(!0,[]));V.set(x_.describeSchema.name,new j(!1,[Di]));V.set(x_.describeTable.name,new j(!1,[Di]));V.set(JA.deleteRecord.name,new j(!1,[YH]));V.set(G_.addUser.name,new j(!0,[]));V.set(G_.alterUser.name,new j(!0,[]));V.set(G_.dropUser.name,new j(!0,[]));V.set(G_.listUsersExternal.name,new j(!0,[]));V.set($h.listRoles.name,new j(!0,[]));V.set($h.addRole.name,new j(!0,[]));V.set($h.alterRole.name,new j(!0,[]));V.set($h.dropRole.name,new j(!0,[]));V.set(Mse.name,new j(!0,[]));V.set(Use.name,new j(!0,[]));V.set(vse.name,new j(!0,[]));V.set(Bse.name,new j(!0,[]));V.set(Hse.name,new j(!0,[]));V.set(xse.name,new j(!0,[]));V.set(XA.setRoutes.name,new j(!0,[]));V.set(XA.getRoutes.name,new j(!0,[]));V.set(XA.deleteRoutes.name,new j(!0,[]));V.set(qH.setConfiguration.name,new j(!0,[]));V.set(Gse.clusterStatus.name,new j(!0,[]));V.set(qse.name,new j(!0,[]));V.set(ZA.getFingerprint.name,new j(!0,[]));V.set(ZA.setLicense.name,new j(!0,[]));V.set(JA.deleteFilesBefore.name,new j(!0,[]));V.set(JA.deleteAuditLogsBefore.name,new j(!0,[]));V.set(BH.restart.name,new j(!0,[]));V.set(BH.restartService.name,new j(!0,[]));V.set(Lse.name,new j(!0,[]));V.set(Pse.name,new j(!0,[Di]));V.set(kse.systemInformation.name,new j(!0,[]));V.set(qH.getConfiguration.name,new j(!0,[]));V.set(FH.readTransactionLog.name,new j(!0,[]));V.set(FH.deleteTransactionLogsBefore.name,new j(!0,[]));V.set(kH.installModules.name,new j(!0,[]));V.set(kH.auditModules.name,new j(!0,[]));V.set(xH.createTokens.name,new j(!1,[]));V.set(xH.refreshOperationToken.name,new j(!1,[]));V.set(GH.login.name,new j(!1,[]));V.set(GH.logout.name,new j(!1,[]));V.set(mn.customFunctionsStatus.name,new j(!0,[]));V.set(mn.getCustomFunctions.name,new j(!0,[]));V.set(mn.getComponents.name,new j(!0,[]));V.set(mn.getComponentFile.name,new j(!0,[]));V.set(mn.setComponentFile.name,new j(!0,[]));V.set(mn.dropComponent.name,new j(!0,[]));V.set(mn.getCustomFunction.name,new j(!0,[]));V.set(mn.setCustomFunction.name,new j(!0,[]));V.set(mn.dropCustomFunction.name,new j(!0,[]));V.set(mn.addComponent.name,new j(!0,[]));V.set(mn.dropCustomFunctionProject.name,new j(!0,[]));V.set(mn.packageComponent.name,new j(!0,[]));V.set(mn.deployComponent.name,new j(!0,[]));V.set(ZA.getRegistrationInfo.name,new j(!1,[]));V.set(G_.userInfo.name,new j(!1,[]));V.set(x_.describeAll.name,new j(!1,[]));V.set(Yse,new j(!1,[]));V.set(Kse,new j(!0,[]));V.set(Vse,new j(!0,[]));V.set(Vh.CSV_DATA_LOAD,new j(!1,[Io,Ua]));V.set(Vh.CSV_URL_LOAD,new j(!1,[Io,Ua]));V.set(Vh.CSV_FILE_LOAD,new j(!1,[Io,Ua]));V.set(Vh.IMPORT_FROM_S3,new j(!1,[Io,Ua]));V.set(WH.EXPORT_TO_S3,new j(!0,[]));V.set(WH.EXPORT_LOCAL,new j(!0,[]));V.set(Fn.VALID_SQL_OPS_ENUM.DELETE,new j(!1,[YH]));V.set(Fn.VALID_SQL_OPS_ENUM.SELECT,new j(!1,[Di]));V.set(Fn.VALID_SQL_OPS_ENUM.INSERT,new j(!1,[Io]));V.set(Fn.VALID_SQL_OPS_ENUM.UPDATE,new j(!1,[Ua]));jH.exports={verifyPerms:jse,verifyPermsAst:Qse,verifyBulkLoadAttributePerms:Jse};function Qse(e,t,r){if(Ci.isEmptyOrZeroLength(e))throw Gt.info("verify_perms_ast has an empty user parameter"),Yr(new Error);if(Ci.isEmptyOrZeroLength(t))throw Gt.info("verify_perms_ast has an empty user parameter"),Yr(new Error);if(Ci.isEmptyOrZeroLength(r))throw Gt.info("verify_perms_ast has a null operation parameter"),Yr(new Error);try{let n=new $H,s=new Fse(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Gt.info("No schemas defined in verifyPermsAst(), will not continue."),Yr(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&KH[r])throw Yr(new Error,sr.DROP_SYSTEM,B_.FORBIDDEN);if(c&&!l)return null;let _=HH.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof $se.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let E=s.getTablesBySchemaName(i[d]);E&&o.set(i[d],E)}let u=QH(t,r,o,n);return u||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=s.getAttributesBySchemaTableName(E,d[f]),m=tO(t.role.permission,E,d[f]);eO(h,m,r,d[f],E,n)}}),n.getPermsResponse())}catch(n){throw Yr(n)}}a(Qse,"verifyPermsAst");function jse(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Gt.info("null required parameter in verifyPerms"),Yr(new Error,sr.DEFAULT_INVALID_REQUEST,B_.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new $H;if(Ci.isEmptyOrZeroLength(e.hdb_user?.role)||Ci.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Gt.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(sr.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,_=e.hdb_user?.role?.permission?.structure_user,u=o.has(Fn.SYSTEM_SCHEMA_NAME)||s===Fn.SYSTEM_SCHEMA_NAME;if(u&&KH[r])throw Yr(new Error,sr.DROP_SYSTEM,B_.FORBIDDEN);if(l&&!u||_===!0&&(r===kn.createSchema.name||r===kn.dropSchema.name))return null;if(Wse.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=HH.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=d),r===UH||r===vH){if(s===Fn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(sr.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===UH&&(!d[s]||!d[s][H_]))return c.handleInvalidItem(sr.SCHEMA_NOT_FOUND(s));if(r===vH&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][H_]))return c.handleInvalidItem(sr.TABLE_NOT_FOUND(s,i))}}let E=QH(e.hdb_user,r,o,c,n);if(E)return E;if(V.get(r)&&V.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Fn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let m=[],S=d[s].tables[i];S[Fn.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(T=>T[Fn.PERMS_CRUD_ENUM.READ]).forEach(T=>{m.push(T.attribute_name)}):m=global.hdb_schema[s][i].attributes.map(g=>g.attribute),e.get_attributes=m)}let f=zse(e),h=tO(e.hdb_user?.role?.permission,s,i);return eO(f,h,r,i,s,c,n),c.getPermsResponse()}a(jse,"verifyPerms");function QH(e,t,r,n,s){if(Ci.arrayHasEmptyValues([e,t,r]))throw Gt.info("hasPermissions has an invalid parameter"),Yr(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 Gt.info(`operation ${t} not found.`),Yr(new Error,sr.OP_NOT_FOUND(t),B_.BAD_REQUEST);if(V.get(t)&&V.get(t).requires_su)return Gt.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(sr.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][H_]===!1){n.addInvalidItem(sr.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(sr.SCHEMA_NOT_FOUND(l));continue}let _=r.get(l);for(let u of _){let d=o[l].tables[u];if(!d||d[H_]===!1)n.addInvalidItem(sr.TABLE_NOT_FOUND(l,u));else try{let E=[],f=V.get(t).perms;!Ci.isEmpty(s)&&f.includes(s)&&(f=[s]);for(let h=0;h<f.length;h++){let m=f[h],S=d[m];(S==null||S===!1)&&(Gt.info(`Required ${m} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),E.push(m))}E.length>0&&n.addUnauthorizedTable(l,u,E)}catch(E){let f=sr.UNKNOWN_OP_AUTH_ERROR(t,l,u);throw Gt.error(f),Gt.error(E),Yr(VH.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?n.getPermsResponse():null}a(QH,"hasPermissions");function eO(e,t,r,n,s,i,o){if(!e||!t)throw Gt.info("no attributes specified in checkAttributePerms."),Yr(new Error);let c=V.get(r).perms;if(!c||c==="")throw Gt.info(`no permissions found for ${r} in checkAttributePerms().`),Yr(new Error);if(Ci.isEmptyOrZeroLength(t))return Gt.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let u of e){let d=t.get(u);if(d){if(d[H_]===!1){i.addInvalidItem(sr.ATTR_NOT_FOUND(s,n,u),s,n);continue}if(c)for(let E of c){if(Fn.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==Di)throw Yr(new Error,sr.SYSTEM_TIMESTAMP_PERMS_ERR,B_.FORBIDDEN);d[E]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(E):l[d.attribute_name]=[E])}}else i.addInvalidItem(sr.ATTR_NOT_FOUND(s,n,u),s,n)}let _=Object.keys(l);_.length>0&&i.addUnauthorizedAttributes(_,s,n,l)}a(eO,"checkAttributePerms");function zse(e){let t=new Set;try{if(e.action)return t;if(e.operation===Fn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){Gt.info(r)}return t}a(zse,"getRecordAttributes");function tO(e,t,r){let n=new Map;if(Ci.isEmpty(e))return Gt.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Gt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(tO,"getAttributePermissions");function Jse(e,t,r,n,s,i,o){let c=new Set(i),l=tO(e,n,s);eO(c,l,t,s,n,o,r)}a(Jse,"verifyBulkLoadAttributePerms")});var Wh=R((Sbe,ex)=>{"use strict";ex.exports={evaluateSQL:uie,processAST:ZH,convertSQLToAST:XH,checkASTPermissions:JH};var Xse=Pr(),zH=require("util"),Zse=zH.callbackify(Xse.insert),eie=ur().search,tie=AM().update,rie=zH.callbackify(tie),nie=bM().convertDelete,wo=require("alasql"),sie=Yh(),Kh=k(),iie=EE(),oie=Y(),q_=L(),{hdb_errors:aie,handleHDBError:rO}=ie(),{HTTP_STATUS_CODES:nO}=aie;iie(wo);var cie=403,lie="There was a problem performing this insert. Please check the logs and try again.",sO=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function uie(e,t){let r=e.parsed_sql_object;if(!r){r=XH(e.sql);let n,s=r.ast.statements[0];if(s instanceof wo.yy.Insert?n=s.into.databaseid:s instanceof wo.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof wo.yy.Update||s instanceof wo.yy.Delete?n=s.table.databaseid:Kh.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof wo.yy.Select)&&oie.isEmptyOrZeroLength(n))return t("No schema specified",null)}ZH(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(uie,"evaluateSQL");function JH(e,t){let r;try{r=sie.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(JH,"checkASTPermissions");function XH(e){let t=new sO;if(!e)throw rO(new Error,"The 'sql' parameter is missing from the request body",nO.BAD_REQUEST);try{let r=e.trim(),n=wo.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
22
+ `);throw n[1]?rO(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,nO.BAD_REQUEST):rO(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",nO.BAD_REQUEST)}return t}a(XH,"convertSQLToAST");function ZH(e,t,r){try{let n=_ie;if(!e.bypass_auth&&!t.permissions_checked){let i=JH(e,t);if(i&&i.length>0)return r(cie,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case q_.VALID_SQL_OPS_ENUM.SELECT:n=eie,s=t.ast.statements[0];break;case q_.VALID_SQL_OPS_ENUM.INSERT:n=die;break;case q_.VALID_SQL_OPS_ENUM.UPDATE:n=rie;break;case q_.VALID_SQL_OPS_ENUM.DELETE:n=nie;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(ZH,"processAST");function _ie(e,t){Kh.info(e),t("unknown sql statement")}a(_ie,"nullFunction");function die({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=fie(i,e.values)}catch(o){return r(o)}Zse(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){Kh.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(die,"convertInsert");function fie(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=wo.compile(`SELECT ${s.toString()} AS [${q_.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Kh.error(r),new Error(lie)}}a(fie,"createDataObjects")});var iO=R((gbe,rx)=>{"use strict";var{S3:Eie,GetObjectCommand:hie}=require("@aws-sdk/client-s3");rx.exports={getFileStreamFromS3:pie,getS3AuthObj:tx};async function pie(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await tx(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new hie(r))).Body}a(pie,"getFileStreamFromS3");function tx(e,t,r){return new Eie({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(tx,"getS3AuthObj")});var Qh=R((Abe,_x)=>{"use strict";var aO=ur(),mie=Wh(),Sie=iO(),{AsyncParser:Tie,Transform:gie}=require("json2csv"),k_=require("stream"),Sn=Y(),oO=require("fs-extra"),Rie=require("path"),$n=k(),{promisify:ix}=require("util"),F_=Y(),{handleHDBError:Dt,hdb_errors:Aie}=ie(),{HDB_ERROR_MSGS:Kr,HTTP_STATUS_CODES:Lt}=Aie,{streamAsJSON:Oie}=(LS(),ae(qI)),{Upload:bie}=require("@aws-sdk/lib-storage"),nx=["search_by_value","search_by_hash","sql","search_by_conditions"],sx=["json","csv"],ox="json",ax="csv",Nie="Successfully exported JSON locally.",yie="Successfully exported CSV locally.",Iie=1e3,wie=aO.searchByHash,Cie=aO.searchByValue,Die=ix(mie.evaluateSQL),Lie=ix(k_.finished);_x.exports={export_to_s3:vie,export_local:Pie,toCsvStream:cx};async function Pie(e){$n.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=lx(e);if(!Sn.isEmpty(t))throw $n.error(t),Dt(new Error,t,Lt.BAD_REQUEST,void 0,void 0,!0);if(Sn.isEmpty(e.path))throw $n.error(Kr.MISSING_VALUE("path")),Dt(new Error,Kr.MISSING_VALUE("path"),Lt.BAD_REQUEST,void 0,void 0,!0);let r=(Sn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Rie.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Sn.buildFolderPath(e.path,r);await Mie(e.path);let s=await ux(e);return await Uie(n,e.format,s)}a(Pie,"export_local");async function Mie(e){if($n.trace("in confirmPath"),Sn.isEmptyOrZeroLength(e))throw Dt(new Error,`Invalid path: ${e}`,Lt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await oO.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,$n.error(n),Dt(new Error,n,Lt.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 $n.error(r),Dt(new Error,r,Lt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Mie,"confirmPath");async function Uie(e,t,r){if($n.trace("in saveToLocal"),F_.isEmptyOrZeroLength(e))throw Dt(new Error,Kr.INVALID_VALUE("file_path"),Lt.BAD_REQUEST,void 0,void 0,!0);if(F_.isEmptyOrZeroLength(t))throw Dt(new Error,Kr.INVALID_VALUE("Source format"),Lt.BAD_REQUEST,void 0,void 0,!0);if(F_.isEmpty(r))throw Dt(new Error,Kr.NOT_FOUND("Data"),Lt.BAD_REQUEST,void 0,void 0,!0);if(t===ox){let n=oO.createWriteStream(e);return Oie(r).pipe(n),await Lie(n),{message:Nie,path:e}}else if(t===ax){let n=oO.createWriteStream(e),s=k_.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(u=>({label:u,value:u})));let c={objectMode:!0};return await new Tie(i,c).fromInput(s).toOutput(n).promise(!1),{message:yie,path:e}}throw Dt(new Error,Kr.INVALID_VALUE("format"),Lt.BAD_REQUEST)}a(Uie,"saveToLocal");async function vie(e){if(!e.s3||Object.keys(e.s3).length===0)throw Dt(new Error,Kr.MISSING_VALUE("S3 object"),Lt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Dt(new Error,Kr.MISSING_VALUE("aws_access_key_id"),Lt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Dt(new Error,Kr.MISSING_VALUE("aws_secret_access_key"),Lt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.bucket))throw Dt(new Error,Kr.MISSING_VALUE("bucket"),Lt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.key))throw Dt(new Error,Kr.MISSING_VALUE("key"),Lt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.region))throw Dt(new Error,Kr.MISSING_VALUE("region"),Lt.BAD_REQUEST);let t=lx(e);if(!Sn.isEmpty(t))throw Dt(new Error,t,Lt.BAD_REQUEST);$n.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await ux(e)}catch(l){throw $n.error(l),l}let n,s=await Sie.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new k_.PassThrough;if(e.format===ax){i=e.s3.key+".csv";let l=cx(r,r.getColumns?.());l.on("error",_=>{throw _}),l.pipe(o)}else if(e.format===ox){i=e.s3.key+".json";let l=new k_.Readable;l.pipe(o),l.on("error",d=>{throw d}),l.push("[");let _=r.length,u="";for(let[d,E]of r.entries()){let f=d===_-1?JSON.stringify(E):JSON.stringify(E)+",";u+=f,d!==0&&d%Iie===0&&(l.push(u),u="")}u.length!==0&&l.push(u),l.push("]"),l.push(null)}else throw Dt(new Error,Kr.INVALID_VALUE("format"),Lt.BAD_REQUEST);return new bie({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(vie,"export_to_s3");function cx(e,t){let r=k_.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new gie(n,s);return r.pipe(i)}a(cx,"toCsvStream");function lx(e){if($n.trace("in exportCoreValidation"),Sn.isEmpty(e.format))return"format missing";if(sx.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${sx.join(", ")}`;let t=e.search_operation.operation;if(Sn.isEmpty(t))return"search_operation.operation missing";if(nx.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${nx.join(", ")}`}a(lx,"exportCoreValidation");async function ux(e){$n.trace("in getRecords");let t,r;if(F_.isEmpty(e.search_operation)||F_.isEmptyOrZeroLength(e.search_operation.operation))throw Dt(new Error,Kr.INVALID_VALUE("Search operation"),Lt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Cie;break;case"search_by_hash":t=wie;break;case"search_by_conditions":t=aO.searchByConditions;break;case"sql":t=Die;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,$n.error(r),Dt(new Error,r,Lt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(ux,"getRecords")});var gx={};$e(gx,{contentTypes:()=>_O,findBestSerializer:()=>Jh,getDeserializer:()=>Ba,registerContentHandlers:()=>dO,serialize:()=>Xh,serializeMessage:()=>Pa});function Bie(e){try{return e?.[0]===123?uO(e):e}catch{return e}}function dO(e){e.register(xie,{serializers:[{regex:/^application\/json$/,serializer:iu},{regex:/^application\/cbor$/,serializer:function(t){return new va.EncoderStream(V_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?zh.Readable.from((0,Vs.encodeIter)(t,V_)):(0,Vs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,jh.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Vs.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,va.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function Jh(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[_,...u]=l.split(/\s*;\s*/),d=1,E={q:1};for(let h of u){let m=h.indexOf("=");E[h.substring(0,m)]=h.substring(m+1)}d=+E.q;let f=Xt.get(_);if(f){let h=(f.q||1)*d;h>s&&(n=f,i=f.type||_,s=h,o=E)}}if(!n){if(r)throw new hx.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(Xt.keys()).join(", "),406);n=Xt.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function Xh(e,t,r){let n=fx&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=Jh(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Li.createBrotliCompress)({params:{[Li.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Li.constants.BROTLI_MODE_TEXT:Li.constants.BROTLI_MODE_GENERIC,[Li.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>fx?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Li.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function Pa(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return $_(e);let r=t.serialize;if(r)return r(e);let n=Jh(t);return r=t.serialize=n.serializer.serialize,r(e)}function Gie(e){return new Promise((t,r)=>{let n=[];e.on("data",s=>n.push(s)),e.on("end",()=>t(Buffer.concat(n))),e.on("error",r)})}function Ba(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Xt.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Xt.get(e)?.deserialize||Ex(e,n);return o=>Gie(o).then(i)}return e&&Xt.get(e)?.deserialize||Ex(e,n)}function Ex(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return n=>({contentType:e,data:n.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return uO(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function qie(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}var jh,Vs,va,Li,hx,zh,px,cO,lO,mx,Sx,$_,uO,V_,Xt,_O,dx,Tx,Hie,xie,fx,jc=be(()=>{LS();jh=x(Qh()),Vs=require("msgpackr"),va=require("cbor-x"),Li=require("zlib"),hx=x(ie()),zh=require("stream");Cr();px=require("../index"),cO=x(X()),lO=x(L()),mx=x(require("yaml")),Sx=cO.default.get(lO.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,$_=Sx?zo:JSON.stringify,uO=Sx?DS:JSON.parse,V_={useRecords:!1,useToJSON:!0},Xt=new Map,_O=Xt;dt.contentTypes=_O;(0,px._assignPackageExport)("contentTypes",_O);Xt.set("application/json",{serializeStream:iu,serialize:$_,deserialize:uO,q:.8});dx=new va.Encoder(V_);Xt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new va.EncoderStream(V_).end(e)},serialize:dx.encode,deserialize:dx.decode,q:1});Xt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?zh.Readable.from((0,Vs.encodeIter)(e,V_)):(0,Vs.pack)(e)},serialize:Vs.pack,deserialize:Vs.unpack,q:.9});Xt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,jh.toCsvStream)(e,e?.getColumns?.())},serialize(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),e&&!e[Symbol.iterator]&&(e=[e.toJSON?e.toJSON():e]),(0,jh.toCsvStream)(e,e?.getColumns?.())},q:.1});Xt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.2});Xt.set("text/yaml",{serialize(e){return mx.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Xt.set("text/event-stream",{serializeStream:function(e){return zh.Readable.from(qie(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+`
23
23
  `),e.data){let r=e.data;typeof r=="object"&&(r=$_(r)),t+="data: "+r+`
24
24
  `}return e.id&&(t+="id: "+e.id+`
25
25
  `),e.retry&&(t+="retry: "+e.retry+`
@@ -28,11 +28,11 @@ Database backup has not been removed and can be found here: ${s}`;A_.error(l),co
28
28
 
29
29
  `:`data: ${e}
30
30
 
31
- `},compressible:!1,q:.8});Xt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,n]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let s=t[r];Array.isArray(s)?s.push(n):t.key=[s,n]}else t[r]=n},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});Sx={type:"application/json",serializeStream:iu,serialize:$_,deserialize:Bie,q:.5};Xt.set("*/*",Sx);Xt.set("",Sx);a(Bie,"tryJSONParse");a(_O,"registerContentHandlers");Hie=require("fastify-plugin"),xie=Hie(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Jh(n.raw);s.type(c),s.serializer(function(l){return(o.serializeStream||o.serialize)(l,{headers:{set:(_,u)=>{s.header(_,u)}}})})}),r()},{name:"content-type-negotiation"});a(Jh,"findBestSerializer");dx=aO.default.get(cO.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Xh,"serialize");a(Pa,"serializeMessage");a(Gie,"streamToBuffer");a(Ba,"getDeserializer");a(fx,"deserializerUnknownType");a(qie,"transformIterable")});function EO(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let d=_(l);for(let f=1;f<e.length;f++){let h=e[f],m=_(h);d=d.concat(m)}let E=new Set;return d.filter(f=>{let h=f.key??f;return E.has(h)?!1:(E.add(h),!0)})}else{let d=_(l),E=u(e.slice(1),!0,l.estimated_count);return E.length>0?o(d,E):d}function _(d){return d.conditions?EO(d.conditions,d.operator,r,n,s,i,o,c):sl(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(_,"executeCondition");function u(d,E,f){return d.map((h,m)=>{if(h.conditions){let T=h.operator==="or",b=u(h.conditions,!T,f);return T?(N,U)=>b.some(v=>v(N,U)):(N,U)=>b.every(v=>v(N,U))}let S=(h.attribute||h[0])===r.primaryKey,g=W_(h,r,i,c,S,f);return E&&m<d.length-1&&f&&(f=jie(r.primaryStore,h.estimated_count,f)),g}).filter(Boolean)}a(u,"mapConditionsToFilters")}function sl(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(Array.isArray(o)){let T=o[0],b=Mi(n.attributes,T);if(b.relationship){if(o.length<2)throw new Tn.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let N=b.definition?.tableClass||b.elements?.definition?.tableClass,U=new Map,v=sl({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,N,s,U);if(b.relationship.to){i[o[0]]=U;let F=!!Mi(N.attributes,b.relationship.to)?.elements;v=Yie(v,b,N.primaryStore,F,U)}if(b.relationship.from){let F=a(M=>sl({attribute:b.relationship.from,value:M},t,r,n,s,U),"searchEntry");b.elements?(i[o[0]]=U,v=Kie(v,b,N.primaryStore,U,F)):v=v.flatMap(F)}return v}else if(o.length===1)o=o[0];else throw new Tn.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,u,d,E;c instanceof Date&&(c=c.getTime());let f;switch(hO[l]||l){case"lt":_=!0,u=c;break;case"le":_=!0,u=c,d=!0;break;case"gt":_=c,E=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,u=c.slice(0),u[u.length-1]=Ys.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),u=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),u=c[1],u instanceof Date&&(u=u.getTime()),d=!0;break;case"equals":case void 0:_=c,u=c,d=!0;break;case"ne":if(c===null){_=c,E=!0;break}case"sort":case"contains":case"ends_with":_=!0,f=!0;break;default:throw new Tn.ClientError(`Unknown query comparator "${l}"`)}let h,m=o===n.primaryKey||o==null;if(typeof _=="string"&&_.length>Vn.MAX_SEARCH_KEY_LENGTH&&(_=_.slice(0,Vn.MAX_SEARCH_KEY_LENGTH)+Vn.OVERFLOW_MARKER,E=!1,h=W_(e,n,null,i,m)),typeof u=="string"&&u.length>Vn.MAX_SEARCH_KEY_LENGTH&&(u=u.slice(0,Vn.MAX_SEARCH_KEY_LENGTH)+Vn.OVERFLOW_MARKER,d=!0,h=h??W_(e,n,null,i,m)),r){let T=_;_=u,u=T,T=!E,E=!d,d=T}let S=m?n.primaryStore:n.indices[o];if(!S||S.isIndexing||f||c===null&&!S.indexNulls){if(s===!1&&!S)throw new Tn.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&f)throw new Tn.ClientError(`Can not use ${l||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(S?.isIndexing)throw new Tn.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!S.indexNulls)throw new Tn.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(h=h??W_(e,n,null,i,m),!h)throw new Tn.ClientError(`Unknown search operator ${e.comparator}`)}let g={start:_,end:u,inclusiveEnd:d,exclusiveStart:E,values:!0,versions:m,transaction:t,reverse:r};if(m){let T=S.getRange(g).map(h?function({key:b,value:N}){return this.isSync?N&&h(N)?b:Co.SKIP:new Promise((U,v)=>setImmediate(()=>{try{U(N&&h(N)?b:Co.SKIP)}catch(F){v(F)}}))}:b=>b.value==null?Co.SKIP:b);return T.hasEntries=!0,T}else return S?S.getRange(g).map(h?function({key:T,value:b}){let N;return typeof T=="string"&&T.length>Vn.MAX_SEARCH_KEY_LENGTH?N=n.primaryStore.get(b):N={[o]:T},this.isSync?h(N)?b:Co.SKIP:new Promise((U,v)=>setImmediate(()=>{try{U(h(N)?b:Co.SKIP)}catch(F){v(F)}}))}:({value:T})=>T):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:T,value:b}){return this.isSync?b&&h(b)?T:Co.SKIP:new Promise((N,U)=>setImmediate(()=>{try{N(b&&h(b)?T:Co.SKIP)}catch(v){U(v)}}))})}function Mi(e,t){if(Array.isArray(t))if(t.length>1){let r=Mi(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?Mi(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function Yie(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;s.hasMappings=!0;let o;return{next(){if(!i){let l=t.relationship.to,_=a((u,d)=>{let E=u;Array.isArray(u)&&(E=hs(u),o=!0);let f=s.get(E);f?f.push(d):s.set(E,f=[d]),u!==E&&(f.key=u)},"add_entry");for(let u of e){let d=u.value??r.get(u.key??u),E=d?.[l];if(E!=null&&!s.filters?.some(f=>!f(d)))if(n)for(let f=0;f<E.length;f++)_(E[f],u);else _(E,u)}return i=(o?s:s.keys())[Symbol.iterator](),this.next()}let c=i.next();return c.done?c:{value:o?c.value[1].key||c.value[0]:c.value}},return(){if(i?.return)return i.return()}}}})}function Kie(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let _=hs(l.value);if(!c.has(_))return c.add(_),l}if(!i){let _=new Map;n.fromRecord=u=>u[t.relationship.from]?.filter?.(d=>_.has(hs(d)));for(let u of e){if(n.filters){let d=r.get(u);if(n.filters.some(E=>!E(d)))continue}_.set(hs(u),u)}return i=_.values()[Symbol.iterator](),this.next()}do{let _=i.next();return _.done?_:(o=s(_.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function W_(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let u=c[0],d=Mi(t.attributes,u),E=d.definition?.tableClass||d.elements.definition?.tableClass,f=n?.[u],h=W_({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},E,r,f?.[u]?.joined,c[1]===E.primaryKey,i);if(!h)return;if(f){f.filters||(f.filters=[]),f.filters.push(h);return}let m=t.propertyResolvers?.[u],S,g=a((T,b)=>{let N,U;if(m){if(m.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let F of h.idFilter.idSet)e={attribute:m.from,value:F};S=_(m.from,h.idFilter,!0,!0)}else S=_(m.from,h.idFilter,!1,!0);let v=S(T);return S.idFilter&&(g.idFilter=S.idFilter),v}U=m(T,r,b),N=U?.value}else N=T[u];return N?Array.isArray(N)?N.some(h):h(N,U):!1},"recordFilter");return g}}switch(l instanceof Date&&(l=l.getTime()),hO[o]||o){case Vn.SEARCH_TYPES.EQUALS:case void 0:return _(c,u=>u===l,!0);case"contains":return _(c,u=>u?.toString().includes(l));case"ends_with":return _(c,u=>u?.toString().endsWith(l));case"starts_with":return _(c,u=>typeof u=="string"&&u.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],_(c,u=>{if(!Array.isArray(u))return!1;for(let d=0,E=l.length;d<E;d++)if(u[d]!==l[d])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),_(c,u=>(0,Ys.compareKeys)(u,l[0])>=0&&(0,Ys.compareKeys)(u,l[1])<=0,!0);case"gt":return _(c,u=>(0,Ys.compareKeys)(u,l)>0);case"ge":return _(c,u=>(0,Ys.compareKeys)(u,l)>=0);case"lt":return _(c,u=>(0,Ys.compareKeys)(u,l)<0);case"le":return _(c,u=>(0,Ys.compareKeys)(u,l)<=0);case"ne":return _(c,u=>(0,Ys.compareKeys)(u,l)!==0);case"sort":return()=>!0;default:throw new Tn.ClientError(`Unknown query comparator "${o}"`)}function _(u,d,E,f){let h;E=E&&!s&&t?.indices[u]&&i>3,E&&(e.estimated_count==null&&ep(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(E=!1));let m=0,S=3;function g(T){let b=T[u],N;if(typeof b!="object"||!b||f?N=d(b):Array.isArray(b)?N=b.some(d):b instanceof Date&&(N=d(b.getTime())),E&&(S++,!N&&!g.idFilter&&++m/S*(i-S)>h)){let U=sl(e,r.transaction.getReadTxn(),!1,t).map(hs),v=new Set(U);g.idFilter=F=>v.has(hs(F)),g.idFilter.idSet=v}return N}return a(g,"recordFilter"),s&&(g.idFilter=d),g}a(_,"attributeComparator")}function ep(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/Pi(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=hO[n]||n,n===Vn.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=Mi(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=ep(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*Pi(e.indices[i.relationship.from])/(Pi(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=Pi(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=$ie*Pi(e.primaryStore)+1:n==="between"?r.estimated_count=kie*Pi(e.primaryStore)+1:n==="sort"?r.estimated_count=Pi(e.primaryStore)+1:r.estimated_count=Fie*Pi(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function tp(e){if(e)if(Do=e,rl.lastIndex=0,Wie.test(e))try{let t=Y_(new nl,"");if(Wr!==Do.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 ${Wr} in '${Do}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Y_(e,t){let r=rl,n,s,i,o,c,l=decodeURIComponent,_;for(;n=r.exec(Do);){Wr=r.lastIndex;let[,u,d]=n;if(o){if(u)throw new SyntaxError(`expected operator, but encountered '${u}'`);o=!1,c=!1}else c=!0;let E;switch(d){case"=":if(s){if(u.length<=2)i=u;else throw new SyntaxError(`invalid FIQL operator ${u}`);l=dO}else{if(l=decodeURIComponent,i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");s=K_(u)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=Vie[d],l=fO[i]?dO:decodeURIComponent,!u)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=K_(u);break;case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s,value:l(u)};i==="eq"&&gx(h,u),Zh(e,_),e.conditions.push(h)}d==="&"&&(_="and"),d==="|"&&(_="or"),s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(K_(u)),s=void 0;break;case"(":rl.lastIndex=Wr;let f=Y_(u?[]:new nl,")");switch(u){case"":Zh(e,_),e.conditions.push(f);break;case"limit":switch(f.length){case 1:e.limit=+f[0];break;case 2:e.offset=+f[0],e.limit=f[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(f[0])&&f.length===1&&!f[0].name?(e.select=f[0],e.select.asArray=!0):f.length===1?e.select=f[0]:f.length===2&&f[1]===""?e.select=f.slice(0,1):e.select=f;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=Rx(f);break;default:throw new SyntaxError(`unknown query function call ${u}`)}Do[Wr]===","?r.lastIndex=++Wr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!u)throw new SyntaxError("property sets must have a defined parent property name");rl.lastIndex=Wr,E=Y_([],"}"),E.name=u,e.push(E),Do[Wr]===","?r.lastIndex=++Wr:o=!0;break;case"[":rl.lastIndex=Wr,u?(E=Y_(new nl,"]"),E.name=u):E=Y_(e.conditions?new nl:[],"]"),e.conditions?(Zh(e,_),e.conditions.push(E),s=null):e.push(E),Do[Wr]===","?r.lastIndex=++Wr:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let h={comparator:i||"equals",attribute:s,value:l(u)};i==="eq"&&gx(h,u),Zh(e,_),e.conditions.push(h)}else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(K_(u));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?Qie:rl,r.lastIndex=Wr),Wr===Do.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Zh(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function K_(e){return e.indexOf(".")>-1?e.split(".").map(K_):decodeURIComponent(e)}function dO(e){if(e==="null")return null;if(e.indexOf("/")>-1){let t=e.split("/"),r=new il(t.length);for(let n=0,s=t.length;n<s;n++)r[n]=dO(t[n]);return r}if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new Tn.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function gx(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Tn.ClientError("wildcard can only be used at the end of a string")}function Rx(e){let t=Ax(e[0]);return e.length>1&&(t.next=Rx(e.slice(1))),t}function Ax(e){if(Array.isArray(e)){let t=Ax(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 Pi(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function jie(e,t,r){return t*r/Pi(e)}var Tn,Vn,Ys,Co,Fie,kie,$ie,Vie,fO,hO,Wie,rl,Qie,Wr,Do,nl,rp=be(()=>{Tn=x(ie()),Vn=x(_t()),Ys=require("ordered-binary"),Co=require("lmdb");Mn();Fie=.3,kie=.1,$ie=.05,Vie={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},fO={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(EO,"executeConditions");a(sl,"searchByIndex");a(Mi,"findAttribute");a(Yie,"joinTo");a(Kie,"joinFrom");hO={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(W_,"filterByType");a(ep,"estimateCondition");Wie=/[()[\]|!<>.]|(=\w*=)/,rl=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,Qie=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(tp,"parseQuery");a(Y_,"parseBlock");a(Zh,"assignOperator");a(K_,"decodeProperty");a(dO,"typedDecoding");a(gx,"wildcardDecoding");a(Rx,"toSortObject");a(Ax,"toSortEntry");nl=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}};a(hs,"flattenKey");a(Pi,"estimatedEntryCount");a(jie,"intersectionEstimate")});function Ix(e){let t={openapi:zie,info:{title:"HarperDB HTTP REST interface",version:(0,yx.version)()},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let _={},u=[];if(o)for(let{type:b,name:N,elements:U,relationship:v,definition:F}of o){if(v)b==="array"?_[N]={type:"array",items:{$ref:Lo+U.type}}:_[N]={$ref:Lo+b};else{let M=F??U?.definition;if(M){if(!t.components.schemas[M.type]){let W={};M.properties.forEach(z=>{W[z.name]=new TO(pO[z.type],z.type)}),t.components.schemas[M.type]=new Nx(W)}b==="array"?_[N]={type:"array",items:{$ref:Lo+M.type}}:_[N]={$ref:Lo+M.type}}else b==="array"?U.type==="Any"||U.type=="ID"?_[N]={type:"array",items:{format:U.type}}:_[N]={type:"array",items:new TO(pO[U.type],U.type)}:b==="Any"||b=="ID"?_[N]={format:b}:_[N]=new TO(pO[b],b)}u.push(new gO(N,"query",_[N]))}let d=Object.keys(_),E=new gO(c,"path",{format:"ID"});E.required=!0,E.description="primary key of record";let f=new gO("property","path",{enum:d});f.required=!0,t.components.schemas[i]=new Nx(_);let h=l.post!==Resource.prototype.post||l.update,m=typeof l.put=="function",S=typeof l.get=="function",g=typeof l.delete=="function",T="/"+s+"/";h&&(t.paths[T]={},t.paths[T].post=new Jie(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[T]||(t.paths[T]={}),t.paths[T].get=new mO(u,r,{200:new SO({$ref:Lo+i})},"search for records by the specified property name and value pairs")),g&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new bx(u,r,"delete all the records that match the provided query",{204:new Ox})),T="/"+s+"/{"+c+"}",S&&(t.paths[T]={},t.paths[T].get=new mO([E],r,{200:new SO({$ref:Lo+i})},"retrieve a record by its primary key")),m&&(t.paths[T]||(t.paths[T]={}),t.paths[T].put=new Xie([E],r,i,"create or update the record with the URL path that maps to the record's primary key")),g&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new bx([E],r,"delete a record with the given primary key",{204:new Ox})),S&&f.schema.enum.length>0&&(T="/"+s+"/{"+c+"}.{property}",t.paths[T]={},t.paths[T].get=new mO([E,f],r,{200:new SO({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function Jie(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Lo+e}}}},this.security=t,this.responses={200:{description:RO,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function mO(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function SO(e){this.description=RO,this.content={"application/json":{schema:e}}}function Ox(){this.description="successfully processed request, no content returned to client"}function Xie(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Lo+r}}}},this.responses={200:{description:RO}}}function bx(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function Nx(e){this.type="object",this.properties=e}function TO(e,t){this.type=e,this.format=t}function gO(e,t,r){this.name=e,this.in=t,this.schema=r}var yx,zie,pO,Lo,RO,wx=be(()=>{yx=x(Ri()),zie="3.0.3",pO={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Lo="#/components/schemas/",RO="successful operation";a(Ix,"generateJsonApi");a(Jie,"Post");a(mO,"Get");a(SO,"Response200");a(Ox,"Response204");a(Xie,"Put");a(bx,"Delete");a(Nx,"ResourceSchema");a(TO,"Type");a(gO,"Parameter")});var sp={};$e(sp,{start:()=>toe});async function eoe(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&tp(e);let s=new yo;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==Cx){let f=np.getMatch(i);if(!f)return t(e);e.handlerPath=f.path,o={url:f.relativeURL,async:!0},c=f.Resource}if(c.isCaching){let f=r["cache-control"];if(f){f=f.toLowerCase();let h=f.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),f.includes("only-if-cached")&&(e.onlyIfCached=!0),f.includes("no-cache")&&(e.noCache=!0),f.includes("no-store")&&(e.noCacheStore=!0),f.includes("stale-if-error")&&(e.staleIfError=!0),f.includes("must-revalidate")&&(e.mustRevalidate=!0)}}let l=await it(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Ba(r["content-type"],!0)(e.body,e.headers)}catch(f){throw new ol.ClientError(f,400)}if(e.authorize=!0,i===Cx&&n==="GET"){if(e?.user?.role?.permission?.super_user)return Ix(np);throw new ol.ServerError("Forbidden",403)}switch(n){case"GET":case"HEAD":return c.get(o,e);case"POST":return c.post(o,e.data,e);case"PUT":return c.put(o,e.data,e);case"DELETE":return c.delete(o,e);case"PATCH":return c.patch(o,e.data,e);case"OPTIONS":s.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return c.connect(o,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return c.query(o,e.data,e);case"COPY":return c.copy(o,r.destination,e);case"MOVE":return c.move(o,r.destination,e);case"BREW":throw new ol.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new ol.ServerError(`Method ${n} is not recognized`,501)}}),_=200,u;if(l==null)_=n==="GET"||n==="HEAD"?404:204,AO.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(u=e.lastModified){Zie[0]=u;let f=String.fromCharCode(34,(ir[0]&63)+62,(ir[0]>>6)+(ir[1]<<2&63)+62,(ir[1]>>4)+(ir[2]<<4&63)+62,(ir[2]>>2)+62,(ir[3]&63)+62,(ir[3]>>6)+(ir[4]<<2&63)+62,(ir[4]>>4)+(ir[5]<<4&63)+62,(ir[5]>>2)+62,(ir[6]&63)+62,(ir[6]>>6)+(ir[7]<<2&63)+62,34),h=r["if-none-match"];h&&f==h?(l?.onDone&&l.onDone(),_=304,l=void 0):s.setIfNone("ETag",f),AO.lastModified&&s.setIfNone("Last-Modified",new Date(u).toUTCString())}e.createdResource&&(_=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let d={status:_,headers:s,body:void 0},E=l?.wasLoadedFromSource?.();return E!==void 0&&(d.wasCacheMiss=E,!E&&u&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||u))/1e3))),l!==void 0&&(d.body=Xh(l,e,d),n==="HEAD"&&(d.body=void 0)),d}catch(i){i.statusCode?i.statusCode===500?Ha.warn(i):Ha.info(i):Ha.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),s.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:s,body:void 0};return o.body=Xh(i.contentType?i:i.toString(),e,o),o}}function toe(e){AO=e,!Dx&&(Dx=!0,np=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return eoe(t,r)},e),e.server.ws(async(t,r,n)=>{Q_++;let s=new ts;Lx||(Lx=!0,Yu(l=>{Q_>0&&l.push({metric:"ws-connections",connections:Q_,byThread:!0})}));let i;t.on("error",l=>{i=!0,Ha.warn(l)});let o;t.on("message",a(function(_){o||(o=Ba(r.requestedContentType??r.headers.asObject["content-type"],!1));let u=o(_);s.push(u)},"message"));let c;t.on("close",()=>{Q_--,En(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),_=np.getMatch(l);if(En(!!_,"connection","ws","connect"),_){r.handlerPath=_.path,hr(h=>({count:h.count,total:Q_}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let u={url:_.relativeURL,async:!0},d=_.Resource;c=(await it(r,()=>d.connect(u,s,r)))[Symbol.asyncIterator]();let f;for(;!(f=await c.next()).done;){let h=Pa(f.value,r);t.send(h),hr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){t.close(roe[l.statusCode]||1011,l.toString()),t.close("login failed")}t.close()},e))}var Ha,ol,ir,Zie,AO,Cx,Dx,np,Lx,Q_,roe,Px=be(()=>{jc();Ti();Ha=x(k()),ol=x(ie());rp();nu();ha();w_();wx();ir=new Uint8Array(8),Zie=new Float64Array(ir.buffer,0,1),AO={},Cx="openapi";a(eoe,"http");Q_=0;a(toe,"start");roe={401:3e3,403:3003}});var OO=R((Fbe,Ux)=>{var{recordAction:ip,recordActionBinary:Mx}=(Ti(),ae(Ku)),noe=require("fastify-plugin"),soe=200;Ux.exports=noe(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,_,u,d;l.config?.isOperation?(_=n.body?.operation,u="operation"):(_=l.url,u="fastify-route",d=l.method),ip(o,"duration",_,d,u),Mx(s.raw.statusCode<400,"success",_,d,u),Mx(1,"response_"+s.raw.statusCode,_,d,u);let E=soe;i?.pipe?(i.on("data",S=>{E+=S.length}),i.on("end",()=>{ip(performance.now()-c,"transfer",_,d,u),ip(E,"bytes-sent",_,d,u)})):(E+=i?.length||0,ip(E,"bytes-sent",_,d,u));let f=o.toFixed(3),h=s.getHeader("Server-Timing"),m=`db;dur=${f}`;s.header("Server-Timing",h?`${h}, ${m}`:m)}),r()},{name:"hdb-request-time"})});var CO=R((Vbe,xx)=>{var lp=require("clone"),up=nt(),ioe=Y(),ap=L(),kbe=k(),bO=require("fs"),yO=require("joi"),{string:cp}=yO.types(),{hdb_errors:ooe,handleHDBError:op}=ie(),{HDB_ERROR_MSGS:$be,HTTP_STATUS_CODES:NO}=ooe,{common_validators:al}=Ps(),vx=" is required",aoe=["insert","update","upsert"],IO={database:{presence:!1,format:al.schema_format,length:al.schema_length},schema:{presence:!1,format:al.schema_format,length:al.schema_length},table:{presence:!0,format:al.schema_format,length:al.schema_length},action:{inclusion:{within:aoe,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},coe={schema:cp.required(),table:cp.required(),action:cp.valid("insert","update","upsert")},{AWS_ACCESS_KEY:loe,AWS_SECRET:uoe,AWS_BUCKET:_oe,AWS_FILE_KEY:doe,REGION:foe}=ap.S3_BUCKET_AUTH_KEYS,Eoe={s3:{presence:!0},[`s3.${loe}`]:{presence:!0,type:"String"},[`s3.${uoe}`]:{presence:!0,type:"String"},[`s3.${_oe}`]:{presence:!0,type:"String"},[`s3.${doe}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${foe}`]:{presence:!0,type:"String"}},Bx=lp(IO);Bx.data.presence={message:vx};var Hx=lp(IO);Hx.file_path.presence={message:vx};var hoe=Object.assign(lp(IO),Eoe),wO=lp(coe);wO.csv_url=cp.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();wO.passthrough_headers=yO.object();function poe(e){let t=up.validateObject(e,Bx);return _p(e,t)}a(poe,"dataObject");function moe(e){let t=up.validateBySchema(e,yO.object(wO));return _p(e,t)}a(moe,"urlObject");function Soe(e){let t=up.validateObject(e,Hx);return _p(e,t)}a(Soe,"fileObject");function Toe(e){let t=up.validateObject(e,hoe);return _p(e,t)}a(Toe,"s3FileObject");function _p(e,t){if(!t){let r=ioe.checkGlobalSchemaTable(e.schema,e.table);if(r)return op(new Error,r,NO.BAD_REQUEST);if(e.operation===ap.OPERATIONS_ENUM.CSV_FILE_LOAD)try{bO.accessSync(e.file_path,bO.constants.R_OK|bO.constants.F_OK)}catch(n){return n.code===ap.NODE_ERROR_CODES.ENOENT?op(n,`No such file or directory ${n.path}`,NO.BAD_REQUEST):n.code===ap.NODE_ERROR_CODES.EACCES?op(n,`Permission denied ${n.path}`,NO.BAD_REQUEST):op(n)}}return t}a(_p,"postValidateChecks");xx.exports={dataObject:poe,urlObject:moe,fileObject:Soe,s3FileObject:Toe}});var DO=R((Kbe,Gx)=>{"use strict";var j_=k(),dp=L();async function goe(e,t,r,n=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let s;try{return s=await e(t),r&&await r(t,s,n),t.operation===dp.OPERATIONS_ENUM.INSERT||t.operation===dp.OPERATIONS_ENUM.UPDATE||t.operation===dp.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===dp.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(j_.info(i.message),i):i.http_resp_msg?(j_.error(`Error calling operation: ${e.name}`),j_.error(i.http_resp_msg),i):(j_.error(`Error calling operation: ${e.name}`),j_.error(i),i)}}a(goe,"callOperationFunctionAsAwait");Gx.exports={callOperationFunctionAsAwait:goe}});var Fx=R((Qbe,qx)=>{"use strict";var LO=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},PO=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};qx.exports={BulkLoadFileObject:LO,BulkLoadDataObject:PO}});var $x=R((zbe,kx)=>{"use strict";var MO=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};kx.exports=MO});var GO=R((rNe,oG)=>{"use strict";var fp=Pr(),hp=CO(),Roe=require("needle"),ps=L(),Xbe=Ze(),cl=Y(),{handleHDBError:ht,hdb_errors:Xx}=ie(),{HTTP_STATUS_CODES:or,HDB_ERROR_MSGS:qt,CHECK_LOGS_WRAPPER:Ga}=Xx,ll=k(),UO=require("papaparse");cl.promisifyPapaParse();var ms=require("fs-extra"),Aoe=require("path"),{chain:Vx}=require("stream-chain"),Yx=require("stream-json/streamers/StreamArray"),Kx=require("stream-json/utils/Batch"),Wx=require("stream-chain/utils/comp"),{finished:Qx}=require("stream"),Ooe=X(),Zx=DO(),boe=sO(),{BulkLoadFileObject:BO,BulkLoadDataObject:Noe}=Fx(),HO=QA(),{verifyBulkLoadAttributePerms:eG}=Yh(),Zbe=$x(),eNe=gt(),tNe=fi(),{databases:yoe}=(Re(),ae(Ve)),{coerceType:Ioe}=(pp(),ae(qO)),jx="No records parsed from csv file.",xa=`${Ooe.get("HDB_ROOT")}/tmp`,{schema_regex:woe}=Ps(),zx=1024*1024*2,Jx=5e3,Coe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};oG.exports={csvDataLoad:Doe,csvURLLoad:Loe,csvFileLoad:Poe,importFromS3:Moe};async function Doe(e,t){let r=hp.dataObject(e);if(r)throw ht(r,r.message,or.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=nG(e.schema,e.table),i=UO.parse(e.data,{header:!0,skipEmptyLines:!0,transform:vO.bind(null,s),dynamicTyping:!1}),o=new HO;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&eG(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 ht(new Error,c,or.BAD_REQUEST,void 0,void 0,!0);let l=new Noe(e.action,e.schema,e.table,i.data);return n=await Zx.callOperationFunctionAsAwait(sG,l,null),n.message===jx?jx:iG(n.records,n.number_written)}catch(s){throw qa(s)}}a(Doe,"csvDataLoad");async function Loe(e){let t=hp.urlObject(e);if(t)throw ht(t,t.message,or.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${xa}/${r}`;try{await Uoe(e,r)}catch(s){throw ll.error(qt.DOWNLOAD_FILE_ERR(r)+" - "+s),ht(s,Ga(qt.DOWNLOAD_FILE_ERR(r)))}try{let s=new BO(this.job_operation_function.name,e.action,e.schema,e.table,n,ps.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await xO(s);return await Ep(n),i}catch(s){throw await Ep(n),qa(s)}}a(Loe,"csvURLLoad");async function Poe(e){let t=hp.fileObject(e);if(t)throw ht(t,t.message,or.BAD_REQUEST,void 0,void 0,!0);let r=new BO(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,ps.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await xO(r)}catch(n){throw qa(n)}}a(Poe,"csvFileLoad");async function Moe(e){let t=hp.s3FileObject(e);if(t)throw ht(t,t.message,or.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Aoe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${xa}/${s}`;let i=new BO(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await voe(s,e);let o=await xO(i);return await Ep(r),o}catch(n){throw await Ep(r),qa(n)}}a(Moe,"importFromS3");async function Uoe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Roe("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw ht(n,s,n.statusCode,ps.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Hoe(r,e.csv_url),await Boe(t,r.raw)}a(Uoe,"downloadCSVFile");async function voe(e,t){try{let r=`${xa}/${e}`;await ms.mkdirp(xa),await ms.writeFile(`${xa}/${e}`,"",{flag:"a+"});let n=await ms.createWriteStream(r),s=await boe.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){ll.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw ll.error(qt.S3_DOWNLOAD_ERR+" - "+r),ht(r,Ga(qt.S3_DOWNLOAD_ERR))}}a(voe,"downloadFileFromS3");async function Boe(e,t){try{await ms.mkdirp(xa),await ms.writeFile(`${xa}/${e}`,t)}catch(r){throw ll.error(qt.WRITE_TEMP_FILE_ERR),ht(r,Ga(qt.DEFAULT_BULK_LOAD_ERR))}}a(Boe,"writeFileToTempFolder");async function Ep(e){if(e)try{await ms.access(e),await ms.unlink(e)}catch{ll.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Ep,"deleteTempFile");function Hoe(e,t){if(e.statusCode!==Xx.HTTP_STATUS_CODES.OK)throw ht(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,or.BAD_REQUEST);if(!Coe[e.headers["content-type"]])throw ht(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,or.BAD_REQUEST);if(!e.raw)throw ht(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,or.BAD_REQUEST)}a(Hoe,"validateURLResponse");async function xO(e){try{let t;switch(e.file_type){case ps.VALID_S3_FILE_TYPES.CSV:t=await xoe(e);break;case ps.VALID_S3_FILE_TYPES.JSON:t=await Goe(e);break;default:throw ht(new Error,qt.DEFAULT_BULK_LOAD_ERR,or.BAD_REQUEST,ps.LOG_LEVELS.ERROR,qt.INVALID_FILE_EXT_ERR(e))}return iG(t.records,t.number_written)}catch(t){throw qa(t)}}a(xO,"fileLoad");async function tG(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await fp.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&eG(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=ht(c);r(l)}}a(tG,"validateChunk");async function rG(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;cl.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!cl.isEmpty(c)&&!cl.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await Zx.callOperationFunctionAsAwait(sG,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=ht(c,Ga(qt.INSERT_CSV_ERR),or.INTERNAL_SERVER_ERROR,ps.LOG_LEVELS.ERROR,qt.INSERT_CSV_ERR+" - "+c);r(l)}}a(rG,"insertChunk");async function xoe(e){let t={records:0,number_written:0},r=nG(e.schema,e.table);try{let n=new HO,s=ms.createReadStream(e.file_path,{highWaterMark:zx});s.setEncoding("utf8"),await UO.parsePromise(s,tG.bind(null,e,n),vO.bind(null,r));let i=n.getPermsResponse();if(i)throw ht(new Error,i,or.BAD_REQUEST);return s=ms.createReadStream(e.file_path,{highWaterMark:zx}),s.setEncoding("utf8"),await UO.parsePromise(s,rG.bind(null,e,t),vO.bind(null,r)),s.destroy(),t}catch(n){throw ht(n,Ga(qt.PAPA_PARSE_ERR),or.INTERNAL_SERVER_ERROR,ps.LOG_LEVELS.ERROR,qt.PAPA_PARSE_ERR+n)}}a(xoe,"callPapaParse");function nG(e,t){let r=yoe[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>Ioe(i,s));return n}a(nG,"createTransformMap");function vO(e,t,r){let n=e.get(r);return n?n(t):cl.autoCast(t)}a(vO,"typeFunction");async function Goe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new HO,s=Vx([ms.createReadStream(e.file_path,{encoding:"utf-8"}),Yx.withParser(),c=>c.value,new Kx({batchSize:Jx}),Wx(async c=>{await tG(e,n,r,c)})]);await new Promise((c,l)=>{Qx(s,_=>{_?l(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw ht(new Error,i,or.BAD_REQUEST);let o=Vx([ms.createReadStream(e.file_path,{encoding:"utf-8"}),Yx.withParser(),c=>c.value,new Kx({batchSize:Jx}),Wx(async c=>{await rG(e,t,r,c)})]);return await new Promise((c,l)=>{Qx(o,_=>{_?l(_):c()}),o.resume()}),t}catch(n){throw ht(n,Ga(qt.INSERT_JSON_ERR),or.INTERNAL_SERVER_ERROR,ps.LOG_LEVELS.ERROR,qt.INSERT_JSON_ERR+n)}}a(Goe,"insertJson");async function sG(e){let t={};try{e.data&&e.data.length>0&&qoe(e.data[0])?t=await Foe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",ll.info(t.message))}catch(r){throw qa(r)}return t}a(sG,"callBulkFileLoad");function qoe(e){let t=Object.keys(e);for(let r of t)if(!woe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(qoe,"validateColumnNames");async function Foe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=fp.insert;break;case"update":i=fp.update;break;case"upsert":i=fp.upsert;break;default:throw ht(new Error,qt.INVALID_ACTION_PARAM_ERR(n),or.BAD_REQUEST,ps.LOG_LEVELS.ERROR,qt.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let u=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][u])>=0&&e.splice(d,1)}let l=cl.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw qa(o)}}a(Foe,"bulkFileLoad");function iG(e,t){return`successfully loaded ${t} of ${e} records`}a(iG,"buildResponseMsg");function qa(e){return ht(e,Ga(qt.DEFAULT_BULK_LOAD_ERR),or.INTERNAL_SERVER_ERROR,ps.LOG_LEVELS.ERROR,qt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(qa,"buildTopLevelErrMsg")});var cG=R((sNe,aG)=>{"use strict";var FO=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};aG.exports=FO});var _G=R((oNe,uG)=>{"use strict";var koe=L(),lG=require("moment"),$oe=require("uuid").v4,kO=class{static{a(this,"JobObject")}constructor(){this.id=$oe(),this.type=void 0,this.start_datetime=lG().valueOf(),this.created_datetime=lG().valueOf(),this.end_datetime=void 0,this.status=koe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};uG.exports=kO});var $O=R((cNe,TG)=>{"use strict";var Voe=require("uuid").v4,pG=Pr(),mG=ur(),Yoe=as(),Koe=Nc(),Woe=cG(),et=L(),Qoe=_G(),joe=GE(),Yn=k(),zoe=tu(),ul=Y(),{promisify:Joe}=require("util"),Fa=require("moment"),Xoe=Wh(),mp=CO(),dG=TT(),{deleteTransactionLogsBeforeValidator:Zoe}=$A(),{handleHDBError:fG,hdb_errors:eae}=ie(),{HTTP_STATUS_CODES:EG}=eae,hG=mG.searchByValue,tae=mG.searchByHash,rae=pG.insert,nae=Joe(Xoe.evaluateSQL),sae=pG.update;TG.exports={addJob:aae,updateJob:lae,handleGetJob:iae,handleGetJobsByStartDate:oae,getJobById:SG};async function iae(e){try{let t=await SG(e.id);return ul.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 Yn.error("There was an error getting job",t),new Error(r)}}a(iae,"handleGetJob");async function oae(e){try{let t=await cae(e);if(Yn.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=Fa(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Fa(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 Yn.error(r),new Error(r)}}a(oae,"handleGetJobsByStartDate");async function aae(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||ul.isEmptyOrZeroLength(e.operation)){let u="job parameter is invalid";return Yn.info(u),t.error=u,t}if(!et.JOB_TYPE_ENUM[e.operation])return Yn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case et.OPERATIONS_ENUM.CSV_FILE_LOAD:n=mp.fileObject(e);break;case et.OPERATIONS_ENUM.CSV_URL_LOAD:n=mp.urlObject(e);break;case et.OPERATIONS_ENUM.CSV_DATA_LOAD:n=mp.dataObject(e);break;case et.OPERATIONS_ENUM.IMPORT_FROM_S3:n=mp.s3FileObject(e);break;case et.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case et.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=dG(e,"date");break;case et.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=dG(e,"timestamp");break;case et.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Zoe(e);break;case et.OPERATIONS_ENUM.RESTART_SERVICE:if(et.PROCESS_DESCRIPTORS_VALIDATE[e.service]===void 0)throw fG(new Error,"Invalid service",EG.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw fG(n,n.message,EG.BAD_REQUEST,void 0,void 0,!0);let s=new Qoe;s.type=e.operation===et.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?et.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new Yoe(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await hG(i))}catch(u){let d=`There was an error inserting a new job: ${u}`;return Yn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=Voe();try{o=await hG(i)}catch(u){let d=`There was an error inserting a new job: ${u}`;return Yn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Yn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new zoe(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await rae(l)}catch(u){return Yn.error(`There was an error inserting a job for job type: ${e.operation} -- ${u}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let u=`Created a job with type ${s.type} and id ${s.id}`;t.message=u,t.createdJob=s,t.success=!0,Yn.trace(u)}return t}a(aae,"addJob");async function cae(e){let t=Fa(e.from_date,Fa.ISO_8601),r=Fa(e.to_date,Fa.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new Woe(n,e.hdb_user);try{return await nae(s)}catch(i){throw Yn.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(cae,"getJobsInDateRange");async function SG(e){if(ul.isEmptyOrZeroLength(e))return ul.errorizeMessage("Invalid job ID specified.");let t=new Koe(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await tae(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Yn.error(n),ul.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(SG,"getJobById");async function lae(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(ul.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===et.JOB_STATUS_ENUM.COMPLETE||e.status===et.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Fa().valueOf());let t=new joe(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await sae(t),r}a(lae,"updateJob")});var IG=R((uNe,yG)=>{"use strict";var gG=Y(),Ft=L(),uae=require("moment"),Sp=GO(),z_=k(),RG=$O(),AG=Qh(),OG=ia(),bG=rt(),_ae=Fh(),dae=bo(),{parentPort:fae,isMainThread:NG}=require("worker_threads"),{onMessageByType:Eae}=rt(),VO=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function hae(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(gG.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(gG.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Ft.JOB_TYPE_ENUM.csv_file_load:await Ks(e,Sp.csvFileLoad);break;case Ft.JOB_TYPE_ENUM.csv_url_load:await Ks(e,Sp.csvURLLoad);break;case Ft.JOB_TYPE_ENUM.csv_data_load:await Ks(e,Sp.csvDataLoad);break;case Ft.JOB_TYPE_ENUM.import_from_s3:await Ks(e,Sp.importFromS3);break;case Ft.JOB_TYPE_ENUM.empty_trash:break;case Ft.JOB_TYPE_ENUM.export_local:await Ks(e,AG.export_local);break;case Ft.JOB_TYPE_ENUM.export_to_s3:await Ks(e,AG.export_to_s3);break;case Ft.JOB_TYPE_ENUM.delete_files_before:case Ft.JOB_TYPE_ENUM.delete_records_before:await Ks(e,OG.deleteFilesBefore);break;case Ft.JOB_TYPE_ENUM.delete_audit_logs_before:await Ks(e,OG.deleteAuditLogsBefore);break;case Ft.JOB_TYPE_ENUM.delete_transaction_logs_before:await Ks(e,_ae.deleteTransactionLogsBefore);break;case Ft.JOB_TYPE_ENUM.restart_service:return await Ks(e,dae.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(hae,"parseMessage");async function Ks(e,t){try{e.job.status=Ft.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=uae().valueOf(),await RG.updateJob(e.job),await pae(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):z_.error(`There was an error running ${t.name} job with id ${e.job.id}`),z_.error(n),e.job.message=n,e.job.status=Ft.JOB_STATUS_ENUM.ERROR;try{await RG.updateJob(e.job)}catch(s){throw z_.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Ks,"runJob");async function pae(e){z_.trace("launching job thread:",e),NG?bG.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Ft.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})}):fae.postMessage({type:Ft.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(pae,"launchJobThread");NG&&Eae(Ft.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{bG.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Ft.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`})})}catch(r){z_.error(r)}});yG.exports={parseMessage:hae,RunnerMessage:VO}});var CG=R((dNe,wG)=>{"use strict";var YO=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};wG.exports=YO});var KG=R((ENe,JO)=>{"use strict";var Op=ur(),QO=Wh(),Tp=GO(),Ui=PE(),gp=Ei(),X_=ia(),mae=hR(),J_=Ur(),Rp=BE(),ar=kA(),Ap=k(),Sae=yR(),Tae=c_(),DG=iA(),gae=XE(),Rae=eh(),Aae=aA(),Oae=rh(),bae=sh(),KO=oh(),LG=Qh(),Nae=Yh(),jO=$O(),$=L(),{hdb_errors:ed,handleHDBError:Z_}=ie(),{HTTP_STATUS_CODES:PG}=ed,WO=ch(),MG=bo(),kG=require("util"),_l=Pr(),yae=Bn(),Iae=gi(),UG=IG(),vG=s_(),BG=(Lh(),ae(C_)),HG=Et(),xG=Fh(),GG=Bh(),{setServerUtilities:wae}=(pp(),ae(qO)),{CONTEXT:Cae}=(Mn(),ae(Eg)),{_assignPackageExport:Dae}=require("../index"),{transformReq:Lae}=Y(),{server:Pae}=(Cr(),ae(jo)),Rr=Ap.loggerWithTag("operation"),Mae=DO(),qG=Op.searchByHash,Uae=Op.searchByValue,vae=kG.promisify(Op.search),Bae=kG.promisify(QO.evaluateSQL),Hae={[$.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[$.OPERATIONS_ENUM.CREATE_TABLE]:!0,[$.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[$.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[$.OPERATIONS_ENUM.DROP_TABLE]:!0,[$.OPERATIONS_ENUM.DROP_SCHEMA]:!0},K=CG();async function $G(e,t){try{if(e.body.operation!=="read_log"&&(Ap.log_level===$.LOG_LEVELS.INFO||Ap.log_level===$.LOG_LEVELS.DEBUG||Ap.log_level===$.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;Rr.info(o)}}catch(n){Rr.error(n)}let r=await Mae.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Hae[e.body.operation]&&yae.setSchemaDataToGlobal(n=>{n&&Rr.error(n)}),r}a($G,"processLocalTransaction");var FG=Gae();JO.exports={chooseOperation:VG,getOperationFunction:YG,operation:zO,processLocalTransaction:$G};wae(JO.exports);Pae.operation=zO;function VG(e){let t;try{t=YG(e)}catch(s){throw Rr.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=QO.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=QO.checkASTPermissions(e,i);if(o)throw Rr.error(`${PG.FORBIDDEN} from operation ${e.operation}`),Rr.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),Z_(new Error,o,ed.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==$.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==$.OPERATIONS_ENUM.LOGIN&&e.operation!==$.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=Nae.verifyPerms(i,s);if(o)throw Rr.error(`${PG.FORBIDDEN} from operation ${e.operation}`),Rr.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),Z_(new Error,o,ed.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw Z_(s,"There was an error when trying to choose an operation path")}return r}a(VG,"chooseOperation");function YG(e){if(Rr.trace(`getOperationFunction with operation: ${e.operation}`),FG.has(e.operation))return FG.get(e.operation);throw Z_(new Error,ed.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),ed.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(YG,"getOperationFunction");Dae("operation",zO);function zO(e,t){e.hdb_user=this[Cae]?.user,e.bypass_auth=!t;let r=VG(e);return $G({body:e},r)}a(zO,"operation");async function xae(e){Rr.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[$.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case $.OPERATIONS_ENUM.INSERT:o=await _l.insert(i);break;case $.OPERATIONS_ENUM.UPDATE:o=await _l.update(i);break;case $.OPERATIONS_ENUM.UPSERT:o=await _l.upsert(i);break;case $.OPERATIONS_ENUM.DELETE:o=await X_.deleteRecord(i);break;default:Rr.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Rr.info("Invalid operation in transaction"),Rr.error(o)}}a(xae,"catchup");async function Ss(e){Lae(e);let t,r;try{r=await jO.addJob(e),t=r.createdJob,Rr.info("addJob result",r);let n=new UG.RunnerMessage(t,e);return{message:await UG.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw Rr.error(s),Z_(n,s)}}a(Ss,"executeJob");function Gae(){let e=new Map;return e.set($.OPERATIONS_ENUM.INSERT,new K(_l.insert)),e.set($.OPERATIONS_ENUM.UPDATE,new K(_l.update)),e.set($.OPERATIONS_ENUM.UPSERT,new K(_l.upsert)),e.set($.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new K(Op.searchByConditions)),e.set($.OPERATIONS_ENUM.SEARCH_BY_HASH,new K(qG)),e.set($.OPERATIONS_ENUM.SEARCH_BY_ID,new K(qG)),e.set($.OPERATIONS_ENUM.SEARCH_BY_VALUE,new K(Uae)),e.set($.OPERATIONS_ENUM.SEARCH,new K(vae)),e.set($.OPERATIONS_ENUM.SQL,new K(Bae)),e.set($.OPERATIONS_ENUM.CSV_DATA_LOAD,new K(Ss,Tp.csvDataLoad)),e.set($.OPERATIONS_ENUM.CSV_FILE_LOAD,new K(Ss,Tp.csvFileLoad)),e.set($.OPERATIONS_ENUM.CSV_URL_LOAD,new K(Ss,Tp.csvURLLoad)),e.set($.OPERATIONS_ENUM.IMPORT_FROM_S3,new K(Ss,Tp.importFromS3)),e.set($.OPERATIONS_ENUM.CREATE_SCHEMA,new K(Ui.createSchema)),e.set($.OPERATIONS_ENUM.CREATE_DATABASE,new K(Ui.createSchema)),e.set($.OPERATIONS_ENUM.CREATE_TABLE,new K(Ui.createTable)),e.set($.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new K(Ui.createAttribute)),e.set($.OPERATIONS_ENUM.DROP_SCHEMA,new K(Ui.dropSchema)),e.set($.OPERATIONS_ENUM.DROP_DATABASE,new K(Ui.dropSchema)),e.set($.OPERATIONS_ENUM.DROP_TABLE,new K(Ui.dropTable)),e.set($.OPERATIONS_ENUM.DROP_ATTRIBUTE,new K(Ui.dropAttribute)),e.set($.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new K(gp.describeSchema)),e.set($.OPERATIONS_ENUM.DESCRIBE_DATABASE,new K(gp.describeSchema)),e.set($.OPERATIONS_ENUM.DESCRIBE_TABLE,new K(gp.describeTable)),e.set($.OPERATIONS_ENUM.DESCRIBE_ALL,new K(gp.describeAll)),e.set($.OPERATIONS_ENUM.DELETE,new K(X_.deleteRecord)),e.set($.OPERATIONS_ENUM.ADD_USER,new K(J_.addUser)),e.set($.OPERATIONS_ENUM.ALTER_USER,new K(J_.alterUser)),e.set($.OPERATIONS_ENUM.DROP_USER,new K(J_.dropUser)),e.set($.OPERATIONS_ENUM.LIST_USERS,new K(J_.listUsersExternal)),e.set($.OPERATIONS_ENUM.LIST_ROLES,new K(Rp.listRoles)),e.set($.OPERATIONS_ENUM.ADD_ROLE,new K(Rp.addRole)),e.set($.OPERATIONS_ENUM.ALTER_ROLE,new K(Rp.alterRole)),e.set($.OPERATIONS_ENUM.DROP_ROLE,new K(Rp.dropRole)),e.set($.OPERATIONS_ENUM.USER_INFO,new K(J_.userInfo)),e.set($.OPERATIONS_ENUM.READ_LOG,new K(Sae)),e.set($.OPERATIONS_ENUM.ADD_NODE,new K(Tae)),e.set($.OPERATIONS_ENUM.UPDATE_NODE,new K(DG)),e.set($.OPERATIONS_ENUM.SET_NODE_REPLICATION,new K(DG)),e.set($.OPERATIONS_ENUM.REMOVE_NODE,new K(gae)),e.set($.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new K(Rae)),e.set($.OPERATIONS_ENUM.PURGE_STREAM,new K(Aae)),e.set($.OPERATIONS_ENUM.SET_CONFIGURATION,new K(HG.setConfiguration)),e.set($.OPERATIONS_ENUM.CLUSTER_STATUS,new K(Oae.clusterStatus)),e.set($.OPERATIONS_ENUM.CLUSTER_NETWORK,new K(bae)),e.set($.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new K(KO.setRoutes)),e.set($.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new K(KO.getRoutes)),e.set($.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new K(KO.deleteRoutes)),e.set($.OPERATIONS_ENUM.EXPORT_TO_S3,new K(Ss,LG.export_to_s3)),e.set($.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new K(Ss,X_.deleteFilesBefore)),e.set($.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new K(Ss,X_.deleteFilesBefore)),e.set($.OPERATIONS_ENUM.EXPORT_LOCAL,new K(Ss,LG.export_local)),e.set($.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new K(jO.handleGetJobsByStartDate)),e.set($.OPERATIONS_ENUM.GET_JOB,new K(jO.handleGetJob)),e.set($.OPERATIONS_ENUM.GET_FINGERPRINT,new K(WO.getFingerprint)),e.set($.OPERATIONS_ENUM.SET_LICENSE,new K(WO.setLicense)),e.set($.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new K(WO.getRegistrationInfo)),e.set($.OPERATIONS_ENUM.RESTART,new K(MG.restart)),e.set($.OPERATIONS_ENUM.RESTART_SERVICE,new K(Ss,MG.restartService)),e.set($.OPERATIONS_ENUM.CATCHUP,new K(xae)),e.set($.OPERATIONS_ENUM.SYSTEM_INFORMATION,new K(Iae.systemInformation)),e.set($.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new K(Ss,X_.deleteAuditLogsBefore)),e.set($.OPERATIONS_ENUM.READ_AUDIT_LOG,new K(mae)),e.set($.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new K(vG.createTokens)),e.set($.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new K(vG.refreshOperationToken)),e.set($.OPERATIONS_ENUM.LOGIN,new K(BG.login)),e.set($.OPERATIONS_ENUM.LOGOUT,new K(BG.logout)),e.set($.OPERATIONS_ENUM.GET_CONFIGURATION,new K(HG.getConfiguration)),e.set($.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new K(ar.customFunctionsStatus)),e.set($.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new K(ar.getCustomFunctions)),e.set($.OPERATIONS_ENUM.GET_COMPONENT_FILE,new K(ar.getComponentFile)),e.set($.OPERATIONS_ENUM.GET_COMPONENTS,new K(ar.getComponents)),e.set($.OPERATIONS_ENUM.SET_COMPONENT_FILE,new K(ar.setComponentFile)),e.set($.OPERATIONS_ENUM.DROP_COMPONENT,new K(ar.dropComponent)),e.set($.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new K(ar.getCustomFunction)),e.set($.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new K(ar.setCustomFunction)),e.set($.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new K(ar.dropCustomFunction)),e.set($.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new K(ar.addComponent)),e.set($.OPERATIONS_ENUM.ADD_COMPONENT,new K(ar.addComponent)),e.set($.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new K(ar.dropCustomFunctionProject)),e.set($.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new K(ar.packageComponent)),e.set($.OPERATIONS_ENUM.PACKAGE_COMPONENT,new K(ar.packageComponent)),e.set($.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new K(ar.deployComponent)),e.set($.OPERATIONS_ENUM.DEPLOY_COMPONENT,new K(ar.deployComponent)),e.set($.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new K(xG.readTransactionLog)),e.set($.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new K(Ss,xG.deleteTransactionLogsBefore)),e.set($.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new K(GG.installModules)),e.set($.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new K(GG.auditModules)),e.set($.OPERATIONS_ENUM.GET_BACKUP,new K(Ui.getBackup)),e}a(Gae,"initializeOperationFunctionMap")});var Np=R((pNe,jG)=>{"use strict";var XO=L(),qae=Y(),td=k(),{handleHDBError:ZO,hdb_errors:bp}=ie(),{isMainThread:Fae}=require("worker_threads"),{Readable:kae}=require("stream"),WG=require("os"),$ae=require("util"),Vae=BR(),Yae=$ae.promisify(Vae.authorize),QG=KG(),{createGzip:Kae,constants:Wae}=require("zlib");function Qae(e){let t=`Found an uncaught exception with message: ${e.message}. ${WG.EOL}Stack: ${e.stack} ${WG.EOL}Terminating ${Fae?"HDB":"thread"}.`;console.error(t),td.fatal(t),process.exit(1)}a(Qae,"handleServerUncaughtException");function jae(e,t,r){if(td[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:bp.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(jae,"serverErrorHandler");function zae(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=ZO(new Error,"Invalid JSON.",bp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(qae.isEmpty(e.body.operation)){let n=ZO(new Error,"Request body must include an 'operation' property.",bp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(zae,"reqBodyValidationHandler");function Jae(e,t,r){let n;e.body.operation!==XO.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==XO.OPERATIONS_ENUM.LOGIN&&e.body.operation!==XO.OPERATIONS_ENUM.LOGOUT?Yae(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{td.warn(s),td.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(ZO(s,i,bp.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(Jae,"authHandler");async function Xae(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=QG.chooseOperation(e.body);let s=await QG.processLocalTransaction(e,n);if(s instanceof kae&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(Kae({level:Wae.Z_BEST_SPEED})))}return s}catch(s){throw td.error(s),s}}a(Xae,"handlePostRequest");jG.exports={authHandler:Jae,handlePostRequest:Xae,handleServerUncaughtException:Qae,serverErrorHandler:jae,reqBodyValidationHandler:zae}});var ZG=R((SNe,XG)=>{"use strict";var Zae=require("fastify-plugin"),{handlePostRequest:zG,authHandler:ece,reqBodyValidationHandler:tce}=Np();async function rce(e){e.decorate("hdbCore",{preValidation:[tce,ece],request:t=>JG(zG(t,response)),requestWithoutAuthentication:(t,r)=>JG(zG(t,r,!0))})}a(rce,"hdbCore");async function JG(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(JG,"convertAsyncIterators");XG.exports=Zae(rce)});var rq=R((RNe,tq)=>{"use strict";var gNe=require("fs"),eb=X();eb.initSync();var{CONFIG_PARAMS:eq}=L(),nce=1024*1024*1024;function sce(e){let t=eb.get(eq.HTTP_TIMEOUT),r=eb.get(eq.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:nce,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(sce,"getServerOptions");tq.exports=sce});var iq=R((ONe,sq)=>{"use strict";var tb=X();tb.initSync();var{CONFIG_PARAMS:nq}=L();function ice(){let e=tb.get(nq.HTTP_CORSACCESSLIST),t=tb.get(nq.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(ice,"getCORSOptions");sq.exports=ice});var cq=R((NNe,aq)=>{"use strict";var oq=X();oq.initSync();var oce=L();function ace(){return oq.get(oce.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(ace,"getHeaderTimeoutConfig");aq.exports=ace});var nb={};$e(nb,{customFunctionsServer:()=>uce,ready:()=>Oq,start:()=>lce});function lce(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){vi||(vi=Aq(t),dt.http((await vi).server));let o=await vi,c=(0,rb.dirname)(s),l=(0,rb.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!lq.has(c)){lq.add(c);try{o.register(dce(c,l))}catch(_){if(_.message==="Root plugin has already booted")We.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:Oq}}async function uce(){try{We.info("In Custom Functions Fastify server"+process.cwd()),We.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),We.debug(`Custom Functions server process ${process.pid} starting up.`),await _ce();let e=hq.get(pq.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=vi=await Aq(e)}catch(r){throw We.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw We.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){We.error(`Custom Functions ${process.pid} Error: ${e}`),We.error(e),process.exit(1)}}async function _ce(){try{We.info("Custom Functions starting configuration."),await mq.setUsersToGlobal(),We.info("Custom Functions completed configuration.")}catch(e){We.error(e)}}function dce(e,t){return async function(r){try{We.info("Custom Functions starting buildRoutes"),We.trace("Loading fastify routes folder "+e),(0,uq.existsSync)(e)&&r.register(Eq.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:We.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?We.error(s.message):s&&We.error(s),o()})}catch(n){We.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function Aq(e){We.info("Custom Functions starting buildServer.");let t=(0,Sq.default)(e),r=(0,_q.default)(t);r.server.headersTimeout=(0,gq.default)(),r.setErrorHandler(Rq.serverErrorHandler);let n=(0,Tq.default)();return n&&r.register(dq.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(fq.default),await r.register(cce),await r.after(),_O(r),We.info("Custom Functions completed buildServer."),r}function Oq(){if(vi)return vi.then?vi.then(e=>e.ready()):vi.ready()}var rb,uq,_q,dq,fq,Eq,hq,pq,We,cce,mq,Sq,Tq,gq,Rq,vi,lq,bq=be(()=>{rb=require("path"),uq=require("fs"),_q=x(require("fastify")),dq=x(require("@fastify/cors")),fq=x(OO()),Eq=x(require("@fastify/autoload")),hq=x(X()),pq=x(L()),We=x(k()),cce=x(ZG()),mq=x(Ur()),Sq=x(rq()),Tq=x(iq()),gq=x(cq()),Rq=x(Np());jc();Cr();lq=new Set;a(lce,"start");a(uce,"customFunctionsServer");a(_ce,"setUp");a(dce,"buildRouteFolder");a(Aq,"buildServer");a(Oq,"ready")});var sb={};$e(sb,{start:()=>fce});function fce(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,Cq.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){yq||(yq=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=Nq.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,Iq.default)(s,(0,wq.realpathSync)(o))}}return i(s)},{runFirst:!0})),Nq.set(r,n)}}}var Iq,wq,Cq,Nq,yq,Dq=be(()=>{Iq=x(require("send")),wq=require("fs"),Cq=x(require("serve-static")),Nq=new Map;a(fce,"start")});var cb={};$e(cb,{Request:()=>ib,createReuseportFd:()=>yp});var Lq,ib,ob,ab,yp,Ip=be(()=>{Lq=require("os"),ib=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new ab(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new ob(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},ob=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},ab=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,Lq.platform)()!="win32"&&(yp=require("node-unix-socket").createReuseportFd)});var Sb=R(Po=>{"use strict";var{isMainThread:_b,parentPort:nd,threadId:wp}=require("worker_threads"),{Socket:Ece,createServer:hce}=require("net"),{createServer:pce,IncomingMessage:mce}=require("http"),{createServer:Sce}=require("https"),{readFileSync:Tce,unlinkSync:Pq,existsSync:gce}=require("fs"),kt=k(),ke=X(),pt=L(),{server:Lp}=(Cr(),ae(jo)),{WebSocketServer:Rce}=require("ws"),{createSecureContext:Ace,createServer:Oce}=require("node:tls"),{getTicketKeys:Hq,restartNumber:bce,getWorkerIndex:sd}=rt(),{Headers:xq,appendHeader:Nce}=(w_(),ae(kB)),{recordAction:rd,recordActionBinary:Mq}=(Ti(),ae(Ku)),{Request:Gq,createReuseportFd:Uq}=(Ip(),ae(cb)),{checkMemoryLimit:yce}=la(),{X509Certificate:Ice}=require("crypto"),qq=require("tls"),wce=qq.createSecureContext,dl;qq.createSecureContext=function(e){return dl||wce(e)};var Fq=ke.get(pt.CONFIG_PARAMS.THREADS_DEBUG);if(Fq){let e;if(_b)e=ke.get(pt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){kt.info("Could not close debugger",t)}});else{let t=ke.get(pt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&sd()>=0&&(e=t+sd())}if(e){let t=ke.get(pt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=ke.get(pt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){kt.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&_b)try{require("inspector").open(9229)}catch(e){bce<=1&&kt.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:PNe,CONFIG_PARAMS:Cce}=pt;ke.initSync();var Dce=ke.get(Cce.HTTP_SESSIONAFFINITY),Ws={};Po.registerServer=hb;Po.httpServer=pb;Po.deliverSocket=Eb;Po.startServers=kq;Po.when_components_loaded=null;Po.createSNICallback=mb;Lp.http=pb;Lp.request=Uce;Lp.socket=vce;Lp.ws=Bce;var lb={},Cp={},Lce,Bi={},Dp={},Pce=[],db=[];function kq(){return Po.when_components_loaded=Pp().loadRootComponents(!0).then(()=>{nd?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)Eb(n,r,s);else if(t.requestId)Mce(t);else if(t.type===pt.ITC_EVENT_TYPES.SHUTDOWN){kt.trace("received shutdown request",wp);for(let i in Ws){let o=Ws[i],c;if(o.closeIdleConnections){let _=Object.getOwnPropertySymbols(o).find(E=>E.description.includes("connections")),u=0,d=setInterval(()=>{u++;let E=u>=100,f=o[_][E?"all":"idle"]();if(f.length===0){E&&clearInterval(d);return}u===1?kt.info(`Closing ${f.length} idle connections`):E&&kt.warn(`Forcefully closing ${f.length} active connections`);for(let h=0,m=f.length;h<m;h++){let S=f[h].socket;S._httpMessage&&!S._httpMessage.finished&&!E||(E?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
31
+ `},compressible:!1,q:.8});Xt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,n]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let s=t[r];Array.isArray(s)?s.push(n):t.key=[s,n]}else t[r]=n},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});Tx={type:"application/json",serializeStream:iu,serialize:$_,deserialize:Bie,q:.5};Xt.set("*/*",Tx);Xt.set("",Tx);a(Bie,"tryJSONParse");a(dO,"registerContentHandlers");Hie=require("fastify-plugin"),xie=Hie(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Jh(n.raw);s.type(c),s.serializer(function(l){return(o.serializeStream||o.serialize)(l,{headers:{set:(_,u)=>{s.header(_,u)}}})})}),r()},{name:"content-type-negotiation"});a(Jh,"findBestSerializer");fx=cO.default.get(lO.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Xh,"serialize");a(Pa,"serializeMessage");a(Gie,"streamToBuffer");a(Ba,"getDeserializer");a(Ex,"deserializerUnknownType");a(qie,"transformIterable")});function hO(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let d=_(l);for(let f=1;f<e.length;f++){let h=e[f],m=_(h);d=d.concat(m)}let E=new Set;return d.filter(f=>{let h=f.key??f;return E.has(h)?!1:(E.add(h),!0)})}else{let d=_(l),E=u(e.slice(1),!0,l.estimated_count);return E.length>0?o(d,E):d}function _(d){return d.conditions?hO(d.conditions,d.operator,r,n,s,i,o,c):sl(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(_,"executeCondition");function u(d,E,f){return d.map((h,m)=>{if(h.conditions){let T=h.operator==="or",b=u(h.conditions,!T,f);return T?(N,U)=>b.some(v=>v(N,U)):(N,U)=>b.every(v=>v(N,U))}let S=(h.attribute||h[0])===r.primaryKey,g=W_(h,r,i,c,S,f);return E&&m<d.length-1&&f&&(f=jie(r.primaryStore,h.estimated_count,f)),g}).filter(Boolean)}a(u,"mapConditionsToFilters")}function sl(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(Array.isArray(o)){let T=o[0],b=Mi(n.attributes,T);if(b.relationship){if(o.length<2)throw new Tn.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let N=b.definition?.tableClass||b.elements?.definition?.tableClass,U=new Map,v=sl({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,N,s,U);if(b.relationship.to){i[o[0]]=U;let F=!!Mi(N.attributes,b.relationship.to)?.elements;v=Yie(v,b,N.primaryStore,F,U)}if(b.relationship.from){let F=a(M=>sl({attribute:b.relationship.from,value:M},t,r,n,s,U),"searchEntry");b.elements?(i[o[0]]=U,v=Kie(v,b,N.primaryStore,U,F)):v=v.flatMap(F)}return v}else if(o.length===1)o=o[0];else throw new Tn.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,u,d,E;c instanceof Date&&(c=c.getTime());let f;switch(pO[l]||l){case"lt":_=!0,u=c;break;case"le":_=!0,u=c,d=!0;break;case"gt":_=c,E=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,u=c.slice(0),u[u.length-1]=Ys.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),u=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),u=c[1],u instanceof Date&&(u=u.getTime()),d=!0;break;case"equals":case void 0:_=c,u=c,d=!0;break;case"ne":if(c===null){_=c,E=!0;break}case"sort":case"contains":case"ends_with":_=!0,f=!0;break;default:throw new Tn.ClientError(`Unknown query comparator "${l}"`)}let h,m=o===n.primaryKey||o==null;if(typeof _=="string"&&_.length>Vn.MAX_SEARCH_KEY_LENGTH&&(_=_.slice(0,Vn.MAX_SEARCH_KEY_LENGTH)+Vn.OVERFLOW_MARKER,E=!1,h=W_(e,n,null,i,m)),typeof u=="string"&&u.length>Vn.MAX_SEARCH_KEY_LENGTH&&(u=u.slice(0,Vn.MAX_SEARCH_KEY_LENGTH)+Vn.OVERFLOW_MARKER,d=!0,h=h??W_(e,n,null,i,m)),r){let T=_;_=u,u=T,T=!E,E=!d,d=T}let S=m?n.primaryStore:n.indices[o];if(!S||S.isIndexing||f||c===null&&!S.indexNulls){if(s===!1&&!S)throw new Tn.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&f)throw new Tn.ClientError(`Can not use ${l||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(S?.isIndexing)throw new Tn.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!S.indexNulls)throw new Tn.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(h=h??W_(e,n,null,i,m),!h)throw new Tn.ClientError(`Unknown search operator ${e.comparator}`)}let g={start:_,end:u,inclusiveEnd:d,exclusiveStart:E,values:!0,versions:m,transaction:t,reverse:r};if(m){let T=S.getRange(g).map(h?function({key:b,value:N}){return this.isSync?N&&h(N)?b:Co.SKIP:new Promise((U,v)=>setImmediate(()=>{try{U(N&&h(N)?b:Co.SKIP)}catch(F){v(F)}}))}:b=>b.value==null?Co.SKIP:b);return T.hasEntries=!0,T}else return S?S.getRange(g).map(h?function({key:T,value:b}){let N;return typeof T=="string"&&T.length>Vn.MAX_SEARCH_KEY_LENGTH?N=n.primaryStore.get(b):N={[o]:T},this.isSync?h(N)?b:Co.SKIP:new Promise((U,v)=>setImmediate(()=>{try{U(h(N)?b:Co.SKIP)}catch(F){v(F)}}))}:({value:T})=>T):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:T,value:b}){return this.isSync?b&&h(b)?T:Co.SKIP:new Promise((N,U)=>setImmediate(()=>{try{N(b&&h(b)?T:Co.SKIP)}catch(v){U(v)}}))})}function Mi(e,t){if(Array.isArray(t))if(t.length>1){let r=Mi(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?Mi(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function Yie(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;s.hasMappings=!0;let o;return{next(){if(!i){let l=t.relationship.to,_=a((u,d)=>{let E=u;Array.isArray(u)&&(E=hs(u),o=!0);let f=s.get(E);f?f.push(d):s.set(E,f=[d]),u!==E&&(f.key=u)},"add_entry");for(let u of e){let d=u.value??r.get(u.key??u),E=d?.[l];if(E!=null&&!s.filters?.some(f=>!f(d)))if(n)for(let f=0;f<E.length;f++)_(E[f],u);else _(E,u)}return i=(o?s:s.keys())[Symbol.iterator](),this.next()}let c=i.next();return c.done?c:{value:o?c.value[1].key||c.value[0]:c.value}},return(){if(i?.return)return i.return()}}}})}function Kie(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let _=hs(l.value);if(!c.has(_))return c.add(_),l}if(!i){let _=new Map;n.fromRecord=u=>u[t.relationship.from]?.filter?.(d=>_.has(hs(d)));for(let u of e){if(n.filters){let d=r.get(u);if(n.filters.some(E=>!E(d)))continue}_.set(hs(u),u)}return i=_.values()[Symbol.iterator](),this.next()}do{let _=i.next();return _.done?_:(o=s(_.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function W_(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let u=c[0],d=Mi(t.attributes,u),E=d.definition?.tableClass||d.elements.definition?.tableClass,f=n?.[u],h=W_({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},E,r,f?.[u]?.joined,c[1]===E.primaryKey,i);if(!h)return;if(f){f.filters||(f.filters=[]),f.filters.push(h);return}let m=t.propertyResolvers?.[u],S,g=a((T,b)=>{let N,U;if(m){if(m.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let F of h.idFilter.idSet)e={attribute:m.from,value:F};S=_(m.from,h.idFilter,!0,!0)}else S=_(m.from,h.idFilter,!1,!0);let v=S(T);return S.idFilter&&(g.idFilter=S.idFilter),v}U=m(T,r,b),N=U?.value}else N=T[u];return N?Array.isArray(N)?N.some(h):h(N,U):!1},"recordFilter");return g}}switch(l instanceof Date&&(l=l.getTime()),pO[o]||o){case Vn.SEARCH_TYPES.EQUALS:case void 0:return _(c,u=>u===l,!0);case"contains":return _(c,u=>u?.toString().includes(l));case"ends_with":return _(c,u=>u?.toString().endsWith(l));case"starts_with":return _(c,u=>typeof u=="string"&&u.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],_(c,u=>{if(!Array.isArray(u))return!1;for(let d=0,E=l.length;d<E;d++)if(u[d]!==l[d])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),_(c,u=>(0,Ys.compareKeys)(u,l[0])>=0&&(0,Ys.compareKeys)(u,l[1])<=0,!0);case"gt":return _(c,u=>(0,Ys.compareKeys)(u,l)>0);case"ge":return _(c,u=>(0,Ys.compareKeys)(u,l)>=0);case"lt":return _(c,u=>(0,Ys.compareKeys)(u,l)<0);case"le":return _(c,u=>(0,Ys.compareKeys)(u,l)<=0);case"ne":return _(c,u=>(0,Ys.compareKeys)(u,l)!==0);case"sort":return()=>!0;default:throw new Tn.ClientError(`Unknown query comparator "${o}"`)}function _(u,d,E,f){let h;E=E&&!s&&t?.indices[u]&&i>3,E&&(e.estimated_count==null&&ep(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(E=!1));let m=0,S=3;function g(T){let b=T[u],N;if(typeof b!="object"||!b||f?N=d(b):Array.isArray(b)?N=b.some(d):b instanceof Date&&(N=d(b.getTime())),E&&(S++,!N&&!g.idFilter&&++m/S*(i-S)>h)){let U=sl(e,r.transaction.getReadTxn(),!1,t).map(hs),v=new Set(U);g.idFilter=F=>v.has(hs(F)),g.idFilter.idSet=v}return N}return a(g,"recordFilter"),s&&(g.idFilter=d),g}a(_,"attributeComparator")}function ep(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/Pi(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=pO[n]||n,n===Vn.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=Mi(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=ep(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*Pi(e.indices[i.relationship.from])/(Pi(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=Pi(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=$ie*Pi(e.primaryStore)+1:n==="between"?r.estimated_count=kie*Pi(e.primaryStore)+1:n==="sort"?r.estimated_count=Pi(e.primaryStore)+1:r.estimated_count=Fie*Pi(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function tp(e){if(e)if(Do=e,rl.lastIndex=0,Wie.test(e))try{let t=Y_(new nl,"");if(Wr!==Do.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 ${Wr} in '${Do}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Y_(e,t){let r=rl,n,s,i,o,c,l=decodeURIComponent,_;for(;n=r.exec(Do);){Wr=r.lastIndex;let[,u,d]=n;if(o){if(u)throw new SyntaxError(`expected operator, but encountered '${u}'`);o=!1,c=!1}else c=!0;let E;switch(d){case"=":if(s){if(u.length<=2)i=u;else throw new SyntaxError(`invalid FIQL operator ${u}`);l=fO}else{if(l=decodeURIComponent,i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");s=K_(u)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=Vie[d],l=EO[i]?fO:decodeURIComponent,!u)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=K_(u);break;case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s,value:l(u)};i==="eq"&&Rx(h,u),Zh(e,_),e.conditions.push(h)}d==="&"&&(_="and"),d==="|"&&(_="or"),s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(K_(u)),s=void 0;break;case"(":rl.lastIndex=Wr;let f=Y_(u?[]:new nl,")");switch(u){case"":Zh(e,_),e.conditions.push(f);break;case"limit":switch(f.length){case 1:e.limit=+f[0];break;case 2:e.offset=+f[0],e.limit=f[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(f[0])&&f.length===1&&!f[0].name?(e.select=f[0],e.select.asArray=!0):f.length===1?e.select=f[0]:f.length===2&&f[1]===""?e.select=f.slice(0,1):e.select=f;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=Ax(f);break;default:throw new SyntaxError(`unknown query function call ${u}`)}Do[Wr]===","?r.lastIndex=++Wr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!u)throw new SyntaxError("property sets must have a defined parent property name");rl.lastIndex=Wr,E=Y_([],"}"),E.name=u,e.push(E),Do[Wr]===","?r.lastIndex=++Wr:o=!0;break;case"[":rl.lastIndex=Wr,u?(E=Y_(new nl,"]"),E.name=u):E=Y_(e.conditions?new nl:[],"]"),e.conditions?(Zh(e,_),e.conditions.push(E),s=null):e.push(E),Do[Wr]===","?r.lastIndex=++Wr:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let h={comparator:i||"equals",attribute:s,value:l(u)};i==="eq"&&Rx(h,u),Zh(e,_),e.conditions.push(h)}else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(K_(u));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?Qie:rl,r.lastIndex=Wr),Wr===Do.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Zh(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function K_(e){return e.indexOf(".")>-1?e.split(".").map(K_):decodeURIComponent(e)}function fO(e){if(e==="null")return null;if(e.indexOf("/")>-1){let t=e.split("/"),r=new il(t.length);for(let n=0,s=t.length;n<s;n++)r[n]=fO(t[n]);return r}if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new Tn.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function Rx(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Tn.ClientError("wildcard can only be used at the end of a string")}function Ax(e){let t=Ox(e[0]);return e.length>1&&(t.next=Ax(e.slice(1))),t}function Ox(e){if(Array.isArray(e)){let t=Ox(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 Pi(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function jie(e,t,r){return t*r/Pi(e)}var Tn,Vn,Ys,Co,Fie,kie,$ie,Vie,EO,pO,Wie,rl,Qie,Wr,Do,nl,rp=be(()=>{Tn=x(ie()),Vn=x(_t()),Ys=require("ordered-binary"),Co=require("lmdb");Mn();Fie=.3,kie=.1,$ie=.05,Vie={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},EO={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(hO,"executeConditions");a(sl,"searchByIndex");a(Mi,"findAttribute");a(Yie,"joinTo");a(Kie,"joinFrom");pO={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(W_,"filterByType");a(ep,"estimateCondition");Wie=/[()[\]|!<>.]|(=\w*=)/,rl=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,Qie=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(tp,"parseQuery");a(Y_,"parseBlock");a(Zh,"assignOperator");a(K_,"decodeProperty");a(fO,"typedDecoding");a(Rx,"wildcardDecoding");a(Ax,"toSortObject");a(Ox,"toSortEntry");nl=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}};a(hs,"flattenKey");a(Pi,"estimatedEntryCount");a(jie,"intersectionEstimate")});function wx(e){let t={openapi:zie,info:{title:"HarperDB HTTP REST interface",version:(0,Ix.version)()},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let _={},u=[];if(o)for(let{type:b,name:N,elements:U,relationship:v,definition:F}of o){if(v)b==="array"?_[N]={type:"array",items:{$ref:Lo+U.type}}:_[N]={$ref:Lo+b};else{let M=F??U?.definition;if(M){if(!t.components.schemas[M.type]){let W={};M.properties.forEach(z=>{W[z.name]=new gO(mO[z.type],z.type)}),t.components.schemas[M.type]=new yx(W)}b==="array"?_[N]={type:"array",items:{$ref:Lo+M.type}}:_[N]={$ref:Lo+M.type}}else b==="array"?U.type==="Any"||U.type=="ID"?_[N]={type:"array",items:{format:U.type}}:_[N]={type:"array",items:new gO(mO[U.type],U.type)}:b==="Any"||b=="ID"?_[N]={format:b}:_[N]=new gO(mO[b],b)}u.push(new RO(N,"query",_[N]))}let d=Object.keys(_),E=new RO(c,"path",{format:"ID"});E.required=!0,E.description="primary key of record";let f=new RO("property","path",{enum:d});f.required=!0,t.components.schemas[i]=new yx(_);let h=l.post!==Resource.prototype.post||l.update,m=typeof l.put=="function",S=typeof l.get=="function",g=typeof l.delete=="function",T="/"+s+"/";h&&(t.paths[T]={},t.paths[T].post=new Jie(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[T]||(t.paths[T]={}),t.paths[T].get=new SO(u,r,{200:new TO({$ref:Lo+i})},"search for records by the specified property name and value pairs")),g&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new Nx(u,r,"delete all the records that match the provided query",{204:new bx})),T="/"+s+"/{"+c+"}",S&&(t.paths[T]={},t.paths[T].get=new SO([E],r,{200:new TO({$ref:Lo+i})},"retrieve a record by its primary key")),m&&(t.paths[T]||(t.paths[T]={}),t.paths[T].put=new Xie([E],r,i,"create or update the record with the URL path that maps to the record's primary key")),g&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new Nx([E],r,"delete a record with the given primary key",{204:new bx})),S&&f.schema.enum.length>0&&(T="/"+s+"/{"+c+"}.{property}",t.paths[T]={},t.paths[T].get=new SO([E,f],r,{200:new TO({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function Jie(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Lo+e}}}},this.security=t,this.responses={200:{description:AO,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function SO(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function TO(e){this.description=AO,this.content={"application/json":{schema:e}}}function bx(){this.description="successfully processed request, no content returned to client"}function Xie(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Lo+r}}}},this.responses={200:{description:AO}}}function Nx(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function yx(e){this.type="object",this.properties=e}function gO(e,t){this.type=e,this.format=t}function RO(e,t,r){this.name=e,this.in=t,this.schema=r}var Ix,zie,mO,Lo,AO,Cx=be(()=>{Ix=x(Ri()),zie="3.0.3",mO={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Lo="#/components/schemas/",AO="successful operation";a(wx,"generateJsonApi");a(Jie,"Post");a(SO,"Get");a(TO,"Response200");a(bx,"Response204");a(Xie,"Put");a(Nx,"Delete");a(yx,"ResourceSchema");a(gO,"Type");a(RO,"Parameter")});var sp={};$e(sp,{start:()=>toe});async function eoe(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&tp(e);let s=new yo;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==Dx){let f=np.getMatch(i);if(!f)return t(e);e.handlerPath=f.path,o={url:f.relativeURL,async:!0},c=f.Resource}if(c.isCaching){let f=r["cache-control"];if(f){f=f.toLowerCase();let h=f.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),f.includes("only-if-cached")&&(e.onlyIfCached=!0),f.includes("no-cache")&&(e.noCache=!0),f.includes("no-store")&&(e.noCacheStore=!0),f.includes("stale-if-error")&&(e.staleIfError=!0),f.includes("must-revalidate")&&(e.mustRevalidate=!0)}}let l=await it(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Ba(r["content-type"],!0)(e.body,e.headers)}catch(f){throw new ol.ClientError(f,400)}if(e.authorize=!0,i===Dx&&n==="GET"){if(e?.user?.role?.permission?.super_user)return wx(np);throw new ol.ServerError("Forbidden",403)}switch(n){case"GET":case"HEAD":return c.get(o,e);case"POST":return c.post(o,e.data,e);case"PUT":return c.put(o,e.data,e);case"DELETE":return c.delete(o,e);case"PATCH":return c.patch(o,e.data,e);case"OPTIONS":s.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return c.connect(o,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return c.query(o,e.data,e);case"COPY":return c.copy(o,r.destination,e);case"MOVE":return c.move(o,r.destination,e);case"BREW":throw new ol.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new ol.ServerError(`Method ${n} is not recognized`,501)}}),_=200,u;if(l==null)_=n==="GET"||n==="HEAD"?404:204,OO.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(u=e.lastModified){Zie[0]=u;let f=String.fromCharCode(34,(ir[0]&63)+62,(ir[0]>>6)+(ir[1]<<2&63)+62,(ir[1]>>4)+(ir[2]<<4&63)+62,(ir[2]>>2)+62,(ir[3]&63)+62,(ir[3]>>6)+(ir[4]<<2&63)+62,(ir[4]>>4)+(ir[5]<<4&63)+62,(ir[5]>>2)+62,(ir[6]&63)+62,(ir[6]>>6)+(ir[7]<<2&63)+62,34),h=r["if-none-match"];h&&f==h?(l?.onDone&&l.onDone(),_=304,l=void 0):s.setIfNone("ETag",f),OO.lastModified&&s.setIfNone("Last-Modified",new Date(u).toUTCString())}e.createdResource&&(_=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let d={status:_,headers:s,body:void 0},E=l?.wasLoadedFromSource?.();return E!==void 0&&(d.wasCacheMiss=E,!E&&u&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||u))/1e3))),l!==void 0&&(d.body=Xh(l,e,d),n==="HEAD"&&(d.body=void 0)),d}catch(i){i.statusCode?i.statusCode===500?Ha.warn(i):Ha.info(i):Ha.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),s.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:s,body:void 0};return o.body=Xh(i.contentType?i:i.toString(),e,o),o}}function toe(e){OO=e,!Lx&&(Lx=!0,np=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return eoe(t,r)},e),e.server.ws(async(t,r,n)=>{Q_++;let s=new ts;Px||(Px=!0,Yu(l=>{Q_>0&&l.push({metric:"ws-connections",connections:Q_,byThread:!0})}));let i;t.on("error",l=>{i=!0,Ha.warn(l)});let o;t.on("message",a(function(_){o||(o=Ba(r.requestedContentType??r.headers.asObject["content-type"],!1));let u=o(_);s.push(u)},"message"));let c;t.on("close",()=>{Q_--,En(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),_=np.getMatch(l);if(En(!!_,"connection","ws","connect"),_){r.handlerPath=_.path,hr(h=>({count:h.count,total:Q_}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let u={url:_.relativeURL,async:!0},d=_.Resource;c=(await it(r,()=>d.connect(u,s,r)))[Symbol.asyncIterator]();let f;for(;!(f=await c.next()).done;){let h=Pa(f.value,r);t.send(h),hr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){t.close(roe[l.statusCode]||1011,l.toString()),t.close("login failed")}t.close()},e))}var Ha,ol,ir,Zie,OO,Dx,Lx,np,Px,Q_,roe,Mx=be(()=>{jc();Ti();Ha=x(k()),ol=x(ie());rp();nu();ha();w_();Cx();ir=new Uint8Array(8),Zie=new Float64Array(ir.buffer,0,1),OO={},Dx="openapi";a(eoe,"http");Q_=0;a(toe,"start");roe={401:3e3,403:3003}});var bO=R((Fbe,vx)=>{var{recordAction:ip,recordActionBinary:Ux}=(Ti(),ae(Ku)),noe=require("fastify-plugin"),soe=200;vx.exports=noe(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,_,u,d;l.config?.isOperation?(_=n.body?.operation,u="operation"):(_=l.url,u="fastify-route",d=l.method),ip(o,"duration",_,d,u),Ux(s.raw.statusCode<400,"success",_,d,u),Ux(1,"response_"+s.raw.statusCode,_,d,u);let E=soe;i?.pipe?(i.on("data",S=>{E+=S.length}),i.on("end",()=>{ip(performance.now()-c,"transfer",_,d,u),ip(E,"bytes-sent",_,d,u)})):(E+=i?.length||0,ip(E,"bytes-sent",_,d,u));let f=o.toFixed(3),h=s.getHeader("Server-Timing"),m=`db;dur=${f}`;s.header("Server-Timing",h?`${h}, ${m}`:m)}),r()},{name:"hdb-request-time"})});var DO=R((Vbe,Gx)=>{var lp=require("clone"),up=nt(),ioe=Y(),ap=L(),kbe=k(),NO=require("fs"),IO=require("joi"),{string:cp}=IO.types(),{hdb_errors:ooe,handleHDBError:op}=ie(),{HDB_ERROR_MSGS:$be,HTTP_STATUS_CODES:yO}=ooe,{common_validators:al}=Ps(),Bx=" is required",aoe=["insert","update","upsert"],wO={database:{presence:!1,format:al.schema_format,length:al.schema_length},schema:{presence:!1,format:al.schema_format,length:al.schema_length},table:{presence:!0,format:al.schema_format,length:al.schema_length},action:{inclusion:{within:aoe,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},coe={schema:cp.required(),table:cp.required(),action:cp.valid("insert","update","upsert")},{AWS_ACCESS_KEY:loe,AWS_SECRET:uoe,AWS_BUCKET:_oe,AWS_FILE_KEY:doe,REGION:foe}=ap.S3_BUCKET_AUTH_KEYS,Eoe={s3:{presence:!0},[`s3.${loe}`]:{presence:!0,type:"String"},[`s3.${uoe}`]:{presence:!0,type:"String"},[`s3.${_oe}`]:{presence:!0,type:"String"},[`s3.${doe}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${foe}`]:{presence:!0,type:"String"}},Hx=lp(wO);Hx.data.presence={message:Bx};var xx=lp(wO);xx.file_path.presence={message:Bx};var hoe=Object.assign(lp(wO),Eoe),CO=lp(coe);CO.csv_url=cp.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();CO.passthrough_headers=IO.object();function poe(e){let t=up.validateObject(e,Hx);return _p(e,t)}a(poe,"dataObject");function moe(e){let t=up.validateBySchema(e,IO.object(CO));return _p(e,t)}a(moe,"urlObject");function Soe(e){let t=up.validateObject(e,xx);return _p(e,t)}a(Soe,"fileObject");function Toe(e){let t=up.validateObject(e,hoe);return _p(e,t)}a(Toe,"s3FileObject");function _p(e,t){if(!t){let r=ioe.checkGlobalSchemaTable(e.schema,e.table);if(r)return op(new Error,r,yO.BAD_REQUEST);if(e.operation===ap.OPERATIONS_ENUM.CSV_FILE_LOAD)try{NO.accessSync(e.file_path,NO.constants.R_OK|NO.constants.F_OK)}catch(n){return n.code===ap.NODE_ERROR_CODES.ENOENT?op(n,`No such file or directory ${n.path}`,yO.BAD_REQUEST):n.code===ap.NODE_ERROR_CODES.EACCES?op(n,`Permission denied ${n.path}`,yO.BAD_REQUEST):op(n)}}return t}a(_p,"postValidateChecks");Gx.exports={dataObject:poe,urlObject:moe,fileObject:Soe,s3FileObject:Toe}});var LO=R((Kbe,qx)=>{"use strict";var j_=k(),dp=L();async function goe(e,t,r,n=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let s;try{return s=await e(t),r&&await r(t,s,n),t.operation===dp.OPERATIONS_ENUM.INSERT||t.operation===dp.OPERATIONS_ENUM.UPDATE||t.operation===dp.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===dp.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(j_.info(i.message),i):i.http_resp_msg?(j_.error(`Error calling operation: ${e.name}`),j_.error(i.http_resp_msg),i):(j_.error(`Error calling operation: ${e.name}`),j_.error(i),i)}}a(goe,"callOperationFunctionAsAwait");qx.exports={callOperationFunctionAsAwait:goe}});var kx=R((Qbe,Fx)=>{"use strict";var PO=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},MO=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};Fx.exports={BulkLoadFileObject:PO,BulkLoadDataObject:MO}});var Vx=R((zbe,$x)=>{"use strict";var UO=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};$x.exports=UO});var qO=R((rNe,aG)=>{"use strict";var fp=Pr(),hp=DO(),Roe=require("needle"),ps=L(),Xbe=Ze(),cl=Y(),{handleHDBError:ht,hdb_errors:Zx}=ie(),{HTTP_STATUS_CODES:or,HDB_ERROR_MSGS:qt,CHECK_LOGS_WRAPPER:Ga}=Zx,ll=k(),vO=require("papaparse");cl.promisifyPapaParse();var ms=require("fs-extra"),Aoe=require("path"),{chain:Yx}=require("stream-chain"),Kx=require("stream-json/streamers/StreamArray"),Wx=require("stream-json/utils/Batch"),Qx=require("stream-chain/utils/comp"),{finished:jx}=require("stream"),Ooe=X(),eG=LO(),boe=iO(),{BulkLoadFileObject:HO,BulkLoadDataObject:Noe}=kx(),xO=jA(),{verifyBulkLoadAttributePerms:tG}=Yh(),Zbe=Vx(),eNe=gt(),tNe=fi(),{databases:yoe}=(Re(),ae(Ve)),{coerceType:Ioe}=(pp(),ae(FO)),zx="No records parsed from csv file.",xa=`${Ooe.get("HDB_ROOT")}/tmp`,{schema_regex:woe}=Ps(),Jx=1024*1024*2,Xx=5e3,Coe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};aG.exports={csvDataLoad:Doe,csvURLLoad:Loe,csvFileLoad:Poe,importFromS3:Moe};async function Doe(e,t){let r=hp.dataObject(e);if(r)throw ht(r,r.message,or.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=sG(e.schema,e.table),i=vO.parse(e.data,{header:!0,skipEmptyLines:!0,transform:BO.bind(null,s),dynamicTyping:!1}),o=new xO;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&tG(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 ht(new Error,c,or.BAD_REQUEST,void 0,void 0,!0);let l=new Noe(e.action,e.schema,e.table,i.data);return n=await eG.callOperationFunctionAsAwait(iG,l,null),n.message===zx?zx:oG(n.records,n.number_written)}catch(s){throw qa(s)}}a(Doe,"csvDataLoad");async function Loe(e){let t=hp.urlObject(e);if(t)throw ht(t,t.message,or.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${xa}/${r}`;try{await Uoe(e,r)}catch(s){throw ll.error(qt.DOWNLOAD_FILE_ERR(r)+" - "+s),ht(s,Ga(qt.DOWNLOAD_FILE_ERR(r)))}try{let s=new HO(this.job_operation_function.name,e.action,e.schema,e.table,n,ps.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await GO(s);return await Ep(n),i}catch(s){throw await Ep(n),qa(s)}}a(Loe,"csvURLLoad");async function Poe(e){let t=hp.fileObject(e);if(t)throw ht(t,t.message,or.BAD_REQUEST,void 0,void 0,!0);let r=new HO(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,ps.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await GO(r)}catch(n){throw qa(n)}}a(Poe,"csvFileLoad");async function Moe(e){let t=hp.s3FileObject(e);if(t)throw ht(t,t.message,or.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Aoe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${xa}/${s}`;let i=new HO(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await voe(s,e);let o=await GO(i);return await Ep(r),o}catch(n){throw await Ep(r),qa(n)}}a(Moe,"importFromS3");async function Uoe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Roe("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw ht(n,s,n.statusCode,ps.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Hoe(r,e.csv_url),await Boe(t,r.raw)}a(Uoe,"downloadCSVFile");async function voe(e,t){try{let r=`${xa}/${e}`;await ms.mkdirp(xa),await ms.writeFile(`${xa}/${e}`,"",{flag:"a+"});let n=await ms.createWriteStream(r),s=await boe.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){ll.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw ll.error(qt.S3_DOWNLOAD_ERR+" - "+r),ht(r,Ga(qt.S3_DOWNLOAD_ERR))}}a(voe,"downloadFileFromS3");async function Boe(e,t){try{await ms.mkdirp(xa),await ms.writeFile(`${xa}/${e}`,t)}catch(r){throw ll.error(qt.WRITE_TEMP_FILE_ERR),ht(r,Ga(qt.DEFAULT_BULK_LOAD_ERR))}}a(Boe,"writeFileToTempFolder");async function Ep(e){if(e)try{await ms.access(e),await ms.unlink(e)}catch{ll.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Ep,"deleteTempFile");function Hoe(e,t){if(e.statusCode!==Zx.HTTP_STATUS_CODES.OK)throw ht(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,or.BAD_REQUEST);if(!Coe[e.headers["content-type"]])throw ht(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,or.BAD_REQUEST);if(!e.raw)throw ht(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,or.BAD_REQUEST)}a(Hoe,"validateURLResponse");async function GO(e){try{let t;switch(e.file_type){case ps.VALID_S3_FILE_TYPES.CSV:t=await xoe(e);break;case ps.VALID_S3_FILE_TYPES.JSON:t=await Goe(e);break;default:throw ht(new Error,qt.DEFAULT_BULK_LOAD_ERR,or.BAD_REQUEST,ps.LOG_LEVELS.ERROR,qt.INVALID_FILE_EXT_ERR(e))}return oG(t.records,t.number_written)}catch(t){throw qa(t)}}a(GO,"fileLoad");async function rG(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await fp.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&tG(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=ht(c);r(l)}}a(rG,"validateChunk");async function nG(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;cl.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!cl.isEmpty(c)&&!cl.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await eG.callOperationFunctionAsAwait(iG,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=ht(c,Ga(qt.INSERT_CSV_ERR),or.INTERNAL_SERVER_ERROR,ps.LOG_LEVELS.ERROR,qt.INSERT_CSV_ERR+" - "+c);r(l)}}a(nG,"insertChunk");async function xoe(e){let t={records:0,number_written:0},r=sG(e.schema,e.table);try{let n=new xO,s=ms.createReadStream(e.file_path,{highWaterMark:Jx});s.setEncoding("utf8"),await vO.parsePromise(s,rG.bind(null,e,n),BO.bind(null,r));let i=n.getPermsResponse();if(i)throw ht(new Error,i,or.BAD_REQUEST);return s=ms.createReadStream(e.file_path,{highWaterMark:Jx}),s.setEncoding("utf8"),await vO.parsePromise(s,nG.bind(null,e,t),BO.bind(null,r)),s.destroy(),t}catch(n){throw ht(n,Ga(qt.PAPA_PARSE_ERR),or.INTERNAL_SERVER_ERROR,ps.LOG_LEVELS.ERROR,qt.PAPA_PARSE_ERR+n)}}a(xoe,"callPapaParse");function sG(e,t){let r=yoe[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>Ioe(i,s));return n}a(sG,"createTransformMap");function BO(e,t,r){let n=e.get(r);return n?n(t):cl.autoCast(t)}a(BO,"typeFunction");async function Goe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new xO,s=Yx([ms.createReadStream(e.file_path,{encoding:"utf-8"}),Kx.withParser(),c=>c.value,new Wx({batchSize:Xx}),Qx(async c=>{await rG(e,n,r,c)})]);await new Promise((c,l)=>{jx(s,_=>{_?l(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw ht(new Error,i,or.BAD_REQUEST);let o=Yx([ms.createReadStream(e.file_path,{encoding:"utf-8"}),Kx.withParser(),c=>c.value,new Wx({batchSize:Xx}),Qx(async c=>{await nG(e,t,r,c)})]);return await new Promise((c,l)=>{jx(o,_=>{_?l(_):c()}),o.resume()}),t}catch(n){throw ht(n,Ga(qt.INSERT_JSON_ERR),or.INTERNAL_SERVER_ERROR,ps.LOG_LEVELS.ERROR,qt.INSERT_JSON_ERR+n)}}a(Goe,"insertJson");async function iG(e){let t={};try{e.data&&e.data.length>0&&qoe(e.data[0])?t=await Foe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",ll.info(t.message))}catch(r){throw qa(r)}return t}a(iG,"callBulkFileLoad");function qoe(e){let t=Object.keys(e);for(let r of t)if(!woe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(qoe,"validateColumnNames");async function Foe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=fp.insert;break;case"update":i=fp.update;break;case"upsert":i=fp.upsert;break;default:throw ht(new Error,qt.INVALID_ACTION_PARAM_ERR(n),or.BAD_REQUEST,ps.LOG_LEVELS.ERROR,qt.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let u=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][u])>=0&&e.splice(d,1)}let l=cl.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw qa(o)}}a(Foe,"bulkFileLoad");function oG(e,t){return`successfully loaded ${t} of ${e} records`}a(oG,"buildResponseMsg");function qa(e){return ht(e,Ga(qt.DEFAULT_BULK_LOAD_ERR),or.INTERNAL_SERVER_ERROR,ps.LOG_LEVELS.ERROR,qt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(qa,"buildTopLevelErrMsg")});var lG=R((sNe,cG)=>{"use strict";var kO=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};cG.exports=kO});var dG=R((oNe,_G)=>{"use strict";var koe=L(),uG=require("moment"),$oe=require("uuid").v4,$O=class{static{a(this,"JobObject")}constructor(){this.id=$oe(),this.type=void 0,this.start_datetime=uG().valueOf(),this.created_datetime=uG().valueOf(),this.end_datetime=void 0,this.status=koe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};_G.exports=$O});var VO=R((cNe,gG)=>{"use strict";var Voe=require("uuid").v4,mG=Pr(),SG=ur(),Yoe=as(),Koe=Nc(),Woe=lG(),et=L(),Qoe=dG(),joe=GE(),Yn=k(),zoe=tu(),ul=Y(),{promisify:Joe}=require("util"),Fa=require("moment"),Xoe=Wh(),mp=DO(),fG=gT(),{deleteTransactionLogsBeforeValidator:Zoe}=VA(),{handleHDBError:EG,hdb_errors:eae}=ie(),{HTTP_STATUS_CODES:hG}=eae,pG=SG.searchByValue,tae=SG.searchByHash,rae=mG.insert,nae=Joe(Xoe.evaluateSQL),sae=mG.update;gG.exports={addJob:aae,updateJob:lae,handleGetJob:iae,handleGetJobsByStartDate:oae,getJobById:TG};async function iae(e){try{let t=await TG(e.id);return ul.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 Yn.error("There was an error getting job",t),new Error(r)}}a(iae,"handleGetJob");async function oae(e){try{let t=await cae(e);if(Yn.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=Fa(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Fa(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 Yn.error(r),new Error(r)}}a(oae,"handleGetJobsByStartDate");async function aae(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||ul.isEmptyOrZeroLength(e.operation)){let u="job parameter is invalid";return Yn.info(u),t.error=u,t}if(!et.JOB_TYPE_ENUM[e.operation])return Yn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case et.OPERATIONS_ENUM.CSV_FILE_LOAD:n=mp.fileObject(e);break;case et.OPERATIONS_ENUM.CSV_URL_LOAD:n=mp.urlObject(e);break;case et.OPERATIONS_ENUM.CSV_DATA_LOAD:n=mp.dataObject(e);break;case et.OPERATIONS_ENUM.IMPORT_FROM_S3:n=mp.s3FileObject(e);break;case et.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case et.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=fG(e,"date");break;case et.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=fG(e,"timestamp");break;case et.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Zoe(e);break;case et.OPERATIONS_ENUM.RESTART_SERVICE:if(et.PROCESS_DESCRIPTORS_VALIDATE[e.service]===void 0)throw EG(new Error,"Invalid service",hG.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw EG(n,n.message,hG.BAD_REQUEST,void 0,void 0,!0);let s=new Qoe;s.type=e.operation===et.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?et.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new Yoe(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await pG(i))}catch(u){let d=`There was an error inserting a new job: ${u}`;return Yn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=Voe();try{o=await pG(i)}catch(u){let d=`There was an error inserting a new job: ${u}`;return Yn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Yn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new zoe(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await rae(l)}catch(u){return Yn.error(`There was an error inserting a job for job type: ${e.operation} -- ${u}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let u=`Created a job with type ${s.type} and id ${s.id}`;t.message=u,t.createdJob=s,t.success=!0,Yn.trace(u)}return t}a(aae,"addJob");async function cae(e){let t=Fa(e.from_date,Fa.ISO_8601),r=Fa(e.to_date,Fa.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new Woe(n,e.hdb_user);try{return await nae(s)}catch(i){throw Yn.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(cae,"getJobsInDateRange");async function TG(e){if(ul.isEmptyOrZeroLength(e))return ul.errorizeMessage("Invalid job ID specified.");let t=new Koe(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await tae(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Yn.error(n),ul.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(TG,"getJobById");async function lae(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(ul.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===et.JOB_STATUS_ENUM.COMPLETE||e.status===et.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Fa().valueOf());let t=new joe(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await sae(t),r}a(lae,"updateJob")});var wG=R((uNe,IG)=>{"use strict";var RG=Y(),Ft=L(),uae=require("moment"),Sp=qO(),z_=k(),AG=VO(),OG=Qh(),bG=ia(),NG=rt(),_ae=Fh(),dae=bo(),{parentPort:fae,isMainThread:yG}=require("worker_threads"),{onMessageByType:Eae}=rt(),YO=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function hae(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(RG.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(RG.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Ft.JOB_TYPE_ENUM.csv_file_load:await Ks(e,Sp.csvFileLoad);break;case Ft.JOB_TYPE_ENUM.csv_url_load:await Ks(e,Sp.csvURLLoad);break;case Ft.JOB_TYPE_ENUM.csv_data_load:await Ks(e,Sp.csvDataLoad);break;case Ft.JOB_TYPE_ENUM.import_from_s3:await Ks(e,Sp.importFromS3);break;case Ft.JOB_TYPE_ENUM.empty_trash:break;case Ft.JOB_TYPE_ENUM.export_local:await Ks(e,OG.export_local);break;case Ft.JOB_TYPE_ENUM.export_to_s3:await Ks(e,OG.export_to_s3);break;case Ft.JOB_TYPE_ENUM.delete_files_before:case Ft.JOB_TYPE_ENUM.delete_records_before:await Ks(e,bG.deleteFilesBefore);break;case Ft.JOB_TYPE_ENUM.delete_audit_logs_before:await Ks(e,bG.deleteAuditLogsBefore);break;case Ft.JOB_TYPE_ENUM.delete_transaction_logs_before:await Ks(e,_ae.deleteTransactionLogsBefore);break;case Ft.JOB_TYPE_ENUM.restart_service:return await Ks(e,dae.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(hae,"parseMessage");async function Ks(e,t){try{e.job.status=Ft.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=uae().valueOf(),await AG.updateJob(e.job),await pae(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):z_.error(`There was an error running ${t.name} job with id ${e.job.id}`),z_.error(n),e.job.message=n,e.job.status=Ft.JOB_STATUS_ENUM.ERROR;try{await AG.updateJob(e.job)}catch(s){throw z_.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Ks,"runJob");async function pae(e){z_.trace("launching job thread:",e),yG?NG.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Ft.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})}):fae.postMessage({type:Ft.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(pae,"launchJobThread");yG&&Eae(Ft.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{NG.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Ft.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`})})}catch(r){z_.error(r)}});IG.exports={parseMessage:hae,RunnerMessage:YO}});var DG=R((dNe,CG)=>{"use strict";var KO=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};CG.exports=KO});var WG=R((ENe,XO)=>{"use strict";var Op=ur(),jO=Wh(),Tp=qO(),Ui=PE(),gp=Ei(),X_=ia(),mae=pR(),J_=Ur(),Rp=BE(),ar=$A(),Ap=k(),Sae=IR(),Tae=c_(),LG=oA(),gae=XE(),Rae=eh(),Aae=cA(),Oae=rh(),bae=sh(),WO=oh(),PG=Qh(),Nae=Yh(),zO=VO(),$=L(),{hdb_errors:ed,handleHDBError:Z_}=ie(),{HTTP_STATUS_CODES:MG}=ed,QO=ch(),UG=bo(),$G=require("util"),_l=Pr(),yae=Bn(),Iae=gi(),vG=wG(),BG=s_(),HG=(Lh(),ae(C_)),xG=Et(),GG=Fh(),qG=Bh(),{setServerUtilities:wae}=(pp(),ae(FO)),{CONTEXT:Cae}=(Mn(),ae(hg)),{_assignPackageExport:Dae}=require("../index"),{transformReq:Lae}=Y(),{server:Pae}=(Cr(),ae(jo)),Rr=Ap.loggerWithTag("operation"),Mae=LO(),FG=Op.searchByHash,Uae=Op.searchByValue,vae=$G.promisify(Op.search),Bae=$G.promisify(jO.evaluateSQL),Hae={[$.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[$.OPERATIONS_ENUM.CREATE_TABLE]:!0,[$.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[$.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[$.OPERATIONS_ENUM.DROP_TABLE]:!0,[$.OPERATIONS_ENUM.DROP_SCHEMA]:!0},K=DG();async function VG(e,t){try{if(e.body.operation!=="read_log"&&(Ap.log_level===$.LOG_LEVELS.INFO||Ap.log_level===$.LOG_LEVELS.DEBUG||Ap.log_level===$.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;Rr.info(o)}}catch(n){Rr.error(n)}let r=await Mae.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Hae[e.body.operation]&&yae.setSchemaDataToGlobal(n=>{n&&Rr.error(n)}),r}a(VG,"processLocalTransaction");var kG=Gae();XO.exports={chooseOperation:YG,getOperationFunction:KG,operation:JO,processLocalTransaction:VG};wae(XO.exports);Pae.operation=JO;function YG(e){let t;try{t=KG(e)}catch(s){throw Rr.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=jO.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=jO.checkASTPermissions(e,i);if(o)throw Rr.error(`${MG.FORBIDDEN} from operation ${e.operation}`),Rr.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),Z_(new Error,o,ed.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==$.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==$.OPERATIONS_ENUM.LOGIN&&e.operation!==$.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=Nae.verifyPerms(i,s);if(o)throw Rr.error(`${MG.FORBIDDEN} from operation ${e.operation}`),Rr.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),Z_(new Error,o,ed.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw Z_(s,"There was an error when trying to choose an operation path")}return r}a(YG,"chooseOperation");function KG(e){if(Rr.trace(`getOperationFunction with operation: ${e.operation}`),kG.has(e.operation))return kG.get(e.operation);throw Z_(new Error,ed.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),ed.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(KG,"getOperationFunction");Dae("operation",JO);function JO(e,t){e.hdb_user=this[Cae]?.user,e.bypass_auth=!t;let r=YG(e);return VG({body:e},r)}a(JO,"operation");async function xae(e){Rr.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[$.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case $.OPERATIONS_ENUM.INSERT:o=await _l.insert(i);break;case $.OPERATIONS_ENUM.UPDATE:o=await _l.update(i);break;case $.OPERATIONS_ENUM.UPSERT:o=await _l.upsert(i);break;case $.OPERATIONS_ENUM.DELETE:o=await X_.deleteRecord(i);break;default:Rr.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Rr.info("Invalid operation in transaction"),Rr.error(o)}}a(xae,"catchup");async function Ss(e){Lae(e);let t,r;try{r=await zO.addJob(e),t=r.createdJob,Rr.info("addJob result",r);let n=new vG.RunnerMessage(t,e);return{message:await vG.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw Rr.error(s),Z_(n,s)}}a(Ss,"executeJob");function Gae(){let e=new Map;return e.set($.OPERATIONS_ENUM.INSERT,new K(_l.insert)),e.set($.OPERATIONS_ENUM.UPDATE,new K(_l.update)),e.set($.OPERATIONS_ENUM.UPSERT,new K(_l.upsert)),e.set($.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new K(Op.searchByConditions)),e.set($.OPERATIONS_ENUM.SEARCH_BY_HASH,new K(FG)),e.set($.OPERATIONS_ENUM.SEARCH_BY_ID,new K(FG)),e.set($.OPERATIONS_ENUM.SEARCH_BY_VALUE,new K(Uae)),e.set($.OPERATIONS_ENUM.SEARCH,new K(vae)),e.set($.OPERATIONS_ENUM.SQL,new K(Bae)),e.set($.OPERATIONS_ENUM.CSV_DATA_LOAD,new K(Ss,Tp.csvDataLoad)),e.set($.OPERATIONS_ENUM.CSV_FILE_LOAD,new K(Ss,Tp.csvFileLoad)),e.set($.OPERATIONS_ENUM.CSV_URL_LOAD,new K(Ss,Tp.csvURLLoad)),e.set($.OPERATIONS_ENUM.IMPORT_FROM_S3,new K(Ss,Tp.importFromS3)),e.set($.OPERATIONS_ENUM.CREATE_SCHEMA,new K(Ui.createSchema)),e.set($.OPERATIONS_ENUM.CREATE_DATABASE,new K(Ui.createSchema)),e.set($.OPERATIONS_ENUM.CREATE_TABLE,new K(Ui.createTable)),e.set($.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new K(Ui.createAttribute)),e.set($.OPERATIONS_ENUM.DROP_SCHEMA,new K(Ui.dropSchema)),e.set($.OPERATIONS_ENUM.DROP_DATABASE,new K(Ui.dropSchema)),e.set($.OPERATIONS_ENUM.DROP_TABLE,new K(Ui.dropTable)),e.set($.OPERATIONS_ENUM.DROP_ATTRIBUTE,new K(Ui.dropAttribute)),e.set($.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new K(gp.describeSchema)),e.set($.OPERATIONS_ENUM.DESCRIBE_DATABASE,new K(gp.describeSchema)),e.set($.OPERATIONS_ENUM.DESCRIBE_TABLE,new K(gp.describeTable)),e.set($.OPERATIONS_ENUM.DESCRIBE_ALL,new K(gp.describeAll)),e.set($.OPERATIONS_ENUM.DELETE,new K(X_.deleteRecord)),e.set($.OPERATIONS_ENUM.ADD_USER,new K(J_.addUser)),e.set($.OPERATIONS_ENUM.ALTER_USER,new K(J_.alterUser)),e.set($.OPERATIONS_ENUM.DROP_USER,new K(J_.dropUser)),e.set($.OPERATIONS_ENUM.LIST_USERS,new K(J_.listUsersExternal)),e.set($.OPERATIONS_ENUM.LIST_ROLES,new K(Rp.listRoles)),e.set($.OPERATIONS_ENUM.ADD_ROLE,new K(Rp.addRole)),e.set($.OPERATIONS_ENUM.ALTER_ROLE,new K(Rp.alterRole)),e.set($.OPERATIONS_ENUM.DROP_ROLE,new K(Rp.dropRole)),e.set($.OPERATIONS_ENUM.USER_INFO,new K(J_.userInfo)),e.set($.OPERATIONS_ENUM.READ_LOG,new K(Sae)),e.set($.OPERATIONS_ENUM.ADD_NODE,new K(Tae)),e.set($.OPERATIONS_ENUM.UPDATE_NODE,new K(LG)),e.set($.OPERATIONS_ENUM.SET_NODE_REPLICATION,new K(LG)),e.set($.OPERATIONS_ENUM.REMOVE_NODE,new K(gae)),e.set($.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new K(Rae)),e.set($.OPERATIONS_ENUM.PURGE_STREAM,new K(Aae)),e.set($.OPERATIONS_ENUM.SET_CONFIGURATION,new K(xG.setConfiguration)),e.set($.OPERATIONS_ENUM.CLUSTER_STATUS,new K(Oae.clusterStatus)),e.set($.OPERATIONS_ENUM.CLUSTER_NETWORK,new K(bae)),e.set($.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new K(WO.setRoutes)),e.set($.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new K(WO.getRoutes)),e.set($.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new K(WO.deleteRoutes)),e.set($.OPERATIONS_ENUM.EXPORT_TO_S3,new K(Ss,PG.export_to_s3)),e.set($.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new K(Ss,X_.deleteFilesBefore)),e.set($.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new K(Ss,X_.deleteFilesBefore)),e.set($.OPERATIONS_ENUM.EXPORT_LOCAL,new K(Ss,PG.export_local)),e.set($.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new K(zO.handleGetJobsByStartDate)),e.set($.OPERATIONS_ENUM.GET_JOB,new K(zO.handleGetJob)),e.set($.OPERATIONS_ENUM.GET_FINGERPRINT,new K(QO.getFingerprint)),e.set($.OPERATIONS_ENUM.SET_LICENSE,new K(QO.setLicense)),e.set($.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new K(QO.getRegistrationInfo)),e.set($.OPERATIONS_ENUM.RESTART,new K(UG.restart)),e.set($.OPERATIONS_ENUM.RESTART_SERVICE,new K(Ss,UG.restartService)),e.set($.OPERATIONS_ENUM.CATCHUP,new K(xae)),e.set($.OPERATIONS_ENUM.SYSTEM_INFORMATION,new K(Iae.systemInformation)),e.set($.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new K(Ss,X_.deleteAuditLogsBefore)),e.set($.OPERATIONS_ENUM.READ_AUDIT_LOG,new K(mae)),e.set($.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new K(BG.createTokens)),e.set($.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new K(BG.refreshOperationToken)),e.set($.OPERATIONS_ENUM.LOGIN,new K(HG.login)),e.set($.OPERATIONS_ENUM.LOGOUT,new K(HG.logout)),e.set($.OPERATIONS_ENUM.GET_CONFIGURATION,new K(xG.getConfiguration)),e.set($.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new K(ar.customFunctionsStatus)),e.set($.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new K(ar.getCustomFunctions)),e.set($.OPERATIONS_ENUM.GET_COMPONENT_FILE,new K(ar.getComponentFile)),e.set($.OPERATIONS_ENUM.GET_COMPONENTS,new K(ar.getComponents)),e.set($.OPERATIONS_ENUM.SET_COMPONENT_FILE,new K(ar.setComponentFile)),e.set($.OPERATIONS_ENUM.DROP_COMPONENT,new K(ar.dropComponent)),e.set($.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new K(ar.getCustomFunction)),e.set($.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new K(ar.setCustomFunction)),e.set($.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new K(ar.dropCustomFunction)),e.set($.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new K(ar.addComponent)),e.set($.OPERATIONS_ENUM.ADD_COMPONENT,new K(ar.addComponent)),e.set($.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new K(ar.dropCustomFunctionProject)),e.set($.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new K(ar.packageComponent)),e.set($.OPERATIONS_ENUM.PACKAGE_COMPONENT,new K(ar.packageComponent)),e.set($.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new K(ar.deployComponent)),e.set($.OPERATIONS_ENUM.DEPLOY_COMPONENT,new K(ar.deployComponent)),e.set($.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new K(GG.readTransactionLog)),e.set($.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new K(Ss,GG.deleteTransactionLogsBefore)),e.set($.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new K(qG.installModules)),e.set($.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new K(qG.auditModules)),e.set($.OPERATIONS_ENUM.GET_BACKUP,new K(Ui.getBackup)),e}a(Gae,"initializeOperationFunctionMap")});var Np=R((pNe,zG)=>{"use strict";var ZO=L(),qae=Y(),td=k(),{handleHDBError:eb,hdb_errors:bp}=ie(),{isMainThread:Fae}=require("worker_threads"),{Readable:kae}=require("stream"),QG=require("os"),$ae=require("util"),Vae=HR(),Yae=$ae.promisify(Vae.authorize),jG=WG(),{createGzip:Kae,constants:Wae}=require("zlib");function Qae(e){let t=`Found an uncaught exception with message: ${e.message}. ${QG.EOL}Stack: ${e.stack} ${QG.EOL}Terminating ${Fae?"HDB":"thread"}.`;console.error(t),td.fatal(t),process.exit(1)}a(Qae,"handleServerUncaughtException");function jae(e,t,r){if(td[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:bp.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(jae,"serverErrorHandler");function zae(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=eb(new Error,"Invalid JSON.",bp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(qae.isEmpty(e.body.operation)){let n=eb(new Error,"Request body must include an 'operation' property.",bp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(zae,"reqBodyValidationHandler");function Jae(e,t,r){let n;e.body.operation!==ZO.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==ZO.OPERATIONS_ENUM.LOGIN&&e.body.operation!==ZO.OPERATIONS_ENUM.LOGOUT?Yae(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{td.warn(s),td.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(eb(s,i,bp.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(Jae,"authHandler");async function Xae(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=jG.chooseOperation(e.body);let s=await jG.processLocalTransaction(e,n);if(s instanceof kae&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(Kae({level:Wae.Z_BEST_SPEED})))}return s}catch(s){throw td.error(s),s}}a(Xae,"handlePostRequest");zG.exports={authHandler:Jae,handlePostRequest:Xae,handleServerUncaughtException:Qae,serverErrorHandler:jae,reqBodyValidationHandler:zae}});var eq=R((SNe,ZG)=>{"use strict";var Zae=require("fastify-plugin"),{handlePostRequest:JG,authHandler:ece,reqBodyValidationHandler:tce}=Np();async function rce(e){e.decorate("hdbCore",{preValidation:[tce,ece],request:t=>XG(JG(t,response)),requestWithoutAuthentication:(t,r)=>XG(JG(t,r,!0))})}a(rce,"hdbCore");async function XG(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(XG,"convertAsyncIterators");ZG.exports=Zae(rce)});var rq=R((RNe,tq)=>{"use strict";var gNe=require("fs"),yp=X();yp.initSync();var{CONFIG_PARAMS:tb}=L(),nce=1024*1024*1024;function sce(e){let t=yp.get(tb.HTTP_TIMEOUT),r=yp.get(tb.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:nce,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:yp.get(tb.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(sce,"getServerOptions");tq.exports=sce});var iq=R((ONe,sq)=>{"use strict";var rb=X();rb.initSync();var{CONFIG_PARAMS:nq}=L();function ice(){let e=rb.get(nq.HTTP_CORSACCESSLIST),t=rb.get(nq.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(ice,"getCORSOptions");sq.exports=ice});var cq=R((NNe,aq)=>{"use strict";var oq=X();oq.initSync();var oce=L();function ace(){return oq.get(oce.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(ace,"getHeaderTimeoutConfig");aq.exports=ace});var sb={};$e(sb,{customFunctionsServer:()=>uce,ready:()=>Oq,start:()=>lce});function lce(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){vi||(vi=Aq(t),dt.http((await vi).server));let o=await vi,c=(0,nb.dirname)(s),l=(0,nb.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!lq.has(c)){lq.add(c);try{o.register(dce(c,l))}catch(_){if(_.message==="Root plugin has already booted")We.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:Oq}}async function uce(){try{We.info("In Custom Functions Fastify server"+process.cwd()),We.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),We.debug(`Custom Functions server process ${process.pid} starting up.`),await _ce();let e=hq.get(pq.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=vi=await Aq(e)}catch(r){throw We.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw We.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){We.error(`Custom Functions ${process.pid} Error: ${e}`),We.error(e),process.exit(1)}}async function _ce(){try{We.info("Custom Functions starting configuration."),await mq.setUsersToGlobal(),We.info("Custom Functions completed configuration.")}catch(e){We.error(e)}}function dce(e,t){return async function(r){try{We.info("Custom Functions starting buildRoutes"),We.trace("Loading fastify routes folder "+e),(0,uq.existsSync)(e)&&r.register(Eq.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:We.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?We.error(s.message):s&&We.error(s),o()})}catch(n){We.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function Aq(e){We.info("Custom Functions starting buildServer.");let t=(0,Sq.default)(e),r=(0,_q.default)(t);r.server.headersTimeout=(0,gq.default)(),r.setErrorHandler(Rq.serverErrorHandler);let n=(0,Tq.default)();return n&&r.register(dq.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(fq.default),await r.register(cce),await r.after(),dO(r),We.info("Custom Functions completed buildServer."),r}function Oq(){if(vi)return vi.then?vi.then(e=>e.ready()):vi.ready()}var nb,uq,_q,dq,fq,Eq,hq,pq,We,cce,mq,Sq,Tq,gq,Rq,vi,lq,bq=be(()=>{nb=require("path"),uq=require("fs"),_q=x(require("fastify")),dq=x(require("@fastify/cors")),fq=x(bO()),Eq=x(require("@fastify/autoload")),hq=x(X()),pq=x(L()),We=x(k()),cce=x(eq()),mq=x(Ur()),Sq=x(rq()),Tq=x(iq()),gq=x(cq()),Rq=x(Np());jc();Cr();lq=new Set;a(lce,"start");a(uce,"customFunctionsServer");a(_ce,"setUp");a(dce,"buildRouteFolder");a(Aq,"buildServer");a(Oq,"ready")});var ib={};$e(ib,{start:()=>fce});function fce(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,Cq.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){yq||(yq=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=Nq.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,Iq.default)(s,(0,wq.realpathSync)(o))}}return i(s)},{runFirst:!0})),Nq.set(r,n)}}}var Iq,wq,Cq,Nq,yq,Dq=be(()=>{Iq=x(require("send")),wq=require("fs"),Cq=x(require("serve-static")),Nq=new Map;a(fce,"start")});var lb={};$e(lb,{Request:()=>ob,createReuseportFd:()=>Ip});var Lq,ob,ab,cb,Ip,wp=be(()=>{Lq=require("os"),ob=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new cb(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 ab(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},ab=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},cb=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,Lq.platform)()!="win32"&&(Ip=require("node-unix-socket").createReuseportFd)});var Tb=R(Po=>{"use strict";var{isMainThread:db,parentPort:nd,threadId:Cp}=require("worker_threads"),{Socket:Ece,createServer:hce}=require("net"),{createServer:pce,IncomingMessage:mce}=require("http"),{createServer:Sce}=require("https"),{readFileSync:Tce,unlinkSync:Pq,existsSync:gce}=require("fs"),kt=k(),ke=X(),pt=L(),{server:Pp}=(Cr(),ae(jo)),{WebSocketServer:Rce}=require("ws"),{createSecureContext:Ace,createServer:Oce}=require("node:tls"),{getTicketKeys:Hq,restartNumber:bce,getWorkerIndex:sd}=rt(),{Headers:xq,appendHeader:Nce}=(w_(),ae($B)),{recordAction:rd,recordActionBinary:Mq}=(Ti(),ae(Ku)),{Request:Gq,createReuseportFd:Uq}=(wp(),ae(lb)),{checkMemoryLimit:yce}=la(),{X509Certificate:Ice}=require("crypto"),qq=require("tls"),wce=qq.createSecureContext,dl;qq.createSecureContext=function(e){return dl||wce(e)};var Fq=ke.get(pt.CONFIG_PARAMS.THREADS_DEBUG);if(Fq){let e;if(db)e=ke.get(pt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){kt.info("Could not close debugger",t)}});else{let t=ke.get(pt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&sd()>=0&&(e=t+sd())}if(e){let t=ke.get(pt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=ke.get(pt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){kt.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&db)try{require("inspector").open(9229)}catch(e){bce<=1&&kt.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:PNe,CONFIG_PARAMS:Cce}=pt;ke.initSync();var Dce=ke.get(Cce.HTTP_SESSIONAFFINITY),Ws={};Po.registerServer=pb;Po.httpServer=mb;Po.deliverSocket=hb;Po.startServers=kq;Po.when_components_loaded=null;Po.createSNICallback=Sb;Pp.http=mb;Pp.request=Uce;Pp.socket=vce;Pp.ws=Bce;var ub={},Dp={},Lce,Bi={},Lp={},Pce=[],fb=[];function kq(){return Po.when_components_loaded=Mp().loadRootComponents(!0).then(()=>{nd?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)hb(n,r,s);else if(t.requestId)Mce(t);else if(t.type===pt.ITC_EVENT_TYPES.SHUTDOWN){kt.trace("received shutdown request",Cp);for(let i in Ws){let o=Ws[i],c;if(o.closeIdleConnections){let _=Object.getOwnPropertySymbols(o).find(E=>E.description.includes("connections")),u=0,d=setInterval(()=>{u++;let E=u>=100,f=o[_][E?"all":"idle"]();if(f.length===0){E&&clearInterval(d);return}u===1?kt.info(`Closing ${f.length} idle connections`):E&&kt.warn(`Forcefully closing ${f.length} active connections`);for(let h=0,m=f.length;h<m;h++){let S=f[h].socket;S._httpMessage&&!S._httpMessage.finished&&!E||(E?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
32
32
  Connection: close\r
33
33
  \r
34
- `))}},25).unref()}o.close?.(()=>{if(ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&sd()==0)try{Pq(ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,wp),o.cantCleanupProperly||kt.warn("Had to forcefully exit the thread",wp),process.exit(0)},5e3).unref()})}if(Fq||process.env.DEV_MODE)try{require("inspector").close()}catch(i){kt.info("Could not close debugger",i)}}}).ref();let e=[];if(Uq&&!Dce)for(let t in Ws){let r=Ws[t];if(isNaN(t)&&sd()==0){gce(t)&&Pq(t),e.push(new Promise((i,o)=>{r.listen({path:t},()=>{i(),kt.info("Domain socket listening on "+t)}).on("error",o)}));continue}let n=ke.get(pt.CONFIG_PARAMS.HTTP_THREADRANGE);if(n){let i=typeof n=="string"?n.split("-"):n,o=sd();if(o<i[0]||o>i[1])continue}let s;try{s=Uq(+t,"::")}catch(i){console.error(`Unable to bind to port ${t}`,i);continue}e.push(new Promise((i,o)=>{r.listen({fd:s},()=>{i(),kt.trace("Listening on port "+t,wp)}).on("error",o)}))}Promise.all(e).then(()=>{nd?.postMessage({type:pt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(kq,"startServers");_b||kq();function Eb(e,t,r){let n=e?.read?e:new Ece({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Ws[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Ws[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(kt.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(Eb,"deliverSocket");var vq=new Map;function Mce(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=vq.get(s),r){case"connection":i=Eb(void 0,t),vq.set(s,i),i.write=(c,l,_)=>(nd.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,l,_)=>(nd.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),nd.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(Mce,"proxyRequest");function hb(e,t,r=!0){!+t&&t!==ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(ke.get(pt.CONFIG_PARAMS.HTTP_PORT),10));let n=Ws[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",Bq),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Ws[t]=e;e.on("unhandled",Bq)}a(hb,"registerServer");function $q(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=[],ke.get(pt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:ke.get(pt.CONFIG_PARAMS.HTTP_PORT),secure:ke.get(pt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),ke.get(pt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:ke.get(pt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a($q,"getPorts");function pb(e,t){for(let{port:r,secure:n}of $q(t))Vq(r,n,t?.isOperationsServer),typeof e=="function"?db[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,hb(e,r,!1)),Dp[r]=fb(db,r),Lce=fb(Pce,r)}a(pb,"httpServer");function Vq(e,t,r){if(!Bi[e]){let n=r?"operationsApi_network":"http",s={noDelay:!0,keepAliveTimeout:ke.get(n+"_keepAliveTimeout"),headersTimeout:ke.get(n+"_headersTimeout"),requestTimeout:ke.get(n+"_timeout")},i=ke.get(n+"_mtls"),o=ke.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let l=ke.get(n+"tls");Object.assign(s,{allowHTTP1:!0,rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:Hq(),maxHeaderSize:ke.get(pt.CONFIG_PARAMS.HTTP_MAXHEADERSIZE),SNICallback:mb(l)})}let c=yce();Bi[e]=(t?Sce:pce)(s,async(l,_)=>{try{let d=performance.now(),E=new Gq(l,_);r&&(E.isOperationsServer=!0);let f=await Dp[e](E);if(!f){if(E._nodeResponse.statusCode)return;f=Yq(E)}if(c?f.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):f.headers?.set?.("Server","HarperDB"),f.status===-1){for(let U of f.headers||[])_.setHeader(U[0],U[1]);return l.baseRequest=E,_.baseResponse=f,Bi[e].emit("unhandled",l,_)}let h=f.status||200,m=performance.now(),S=m-d,g=f.body,T;if(!f.handlesHeaders){let U=f.headers||new xq;g?g.length>=0&&(typeof g=="string"?U.set("Content-Length",Buffer.byteLength(g)):U.set("Content-Length",g.length),T=!0):(U.set("Content-Length","0"),T=!0);let v=`hdb;dur=${S.toFixed(2)}`;f.wasCacheMiss&&(v+=", miss"),Nce(U,"Server-Timing",v,!0),_.writeHead(h,U&&(U[Symbol.iterator]?Array.from(U):U)),T&&_.end(g)}let b=E.handlerPath,N=E.method;if(rd(S,"duration",b,N,f.wasCacheMiss==null?void 0:f.wasCacheMiss?"cache-miss":"cache-hit"),Mq(h<400,"success",b,N),Mq(1,"response_"+h,b,N),!T)if(g?.pipe){g.pipe(_),g.destroy&&_.on("close",()=>{g.destroy()});let U=0;g.on("data",v=>{U+=v.length}),g.on("end",()=>{rd(performance.now()-m,"transfer",b,N),rd(U,"bytes-sent",b,N)})}else g?.then?g.then(U=>{_.end(U)},u):_.end(g)}catch(d){u(d)}function u(d){let E=d.headers;_.writeHead(d.statusCode||500,E&&(E[Symbol.iterator]?Array.from(E):E)),_.end(d.toString()),d.statusCode?d.statusCode===500?kt.warn(d):kt.info(d):kt.error(d)}a(u,"onError")}),i&&(Bi[e].mtlsConfig=i),t&&(Bi[e].on("secureConnection",l=>{l._parent.startTime&&rd(performance.now()-l._parent.startTime,"tls-handshake",e),rd(l.isSessionReused(),"tls-reused",e)}),Bi[e].isSecure=!0,s.SNICallback(null,(l,_)=>{try{dl=_,_&&Bi[e].setSecureContext(_.options)}finally{dl=null}})),hb(Bi[e],e)}return Bi[e]}a(Vq,"getHTTPServer");function fb(e,t){let r=Yq;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a(c=>s(c,o),"next_callback")}}return r}a(fb,"makeCallbackChain");function Yq(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new xq}}a(Yq,"unhandled");function Uce(e,t){pb(e,{requestOnly:!0,...t})}a(Uce,"onRequest");function vce(e,t){let r;if(t.securePort){let n=Object.assign({},ke.get("tls"));t.mtls?.certificateAuthority&&(n.certificateAuthority=t.mtls.certificateAuthority);let s={noDelay:!0,rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,SNICallback:mb(n)};r=Oce(s,e),s.SNICallback(null,(i,o)=>{try{dl=o,o&&r.setSecureContext(o.options)}finally{dl=null}}),Ws[t.securePort]=r}return t.port&&(r=hce({noDelay:!0},e),Ws[t.port]=r),r}a(vce,"onSocket");Object.defineProperty(mce.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.includes("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function Bce(e,t){let r;for(let{port:n,secure:s}of $q(t)){Cp[n]||(Cp[n]=new Rce({server:r=Vq(n,s)}),Cp[n].on("connection",async(c,l)=>{try{let _=new Gq(l);_.isWebSocket=!0;let u=Dp[n](_),d=l.headers["sec-websocket-protocol"]||"",E=lb[n];if(d){let f;for(let h=0;h<E.length;h++){let m=E[h];m.protocol===d&&(f=!0,m.listener(c,_,u))}if(f)return}for(let f=0;f<E.length;f++){let h=E[f];h.protocol||h.listener(c,_,u)}}catch(_){kt.warn("Error handling WebSocket connection",_)}}),Cp[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=lb[n];o||(o=lb[n]=[]),o.push({listener:e,protocol:i}),Dp[n]=fb(db,n)}return r}a(Bce,"onWebSocket");function Bq(e,t){t.writeHead(404),t.end(`Not found
35
- `)}a(Bq,"defaultNotFound");function ub(e){return e.startsWith("-----BEGIN")?e:Tce(e)}a(ub,"readPEM");function mb(e){let t=[];for(let i=0;e[i];i++)t.push(e[i]);t.length||t.push(e);let r=new Map,n,s=!1;for(let i of t){let o=ub(i.privateKey),c=ub(i.certificate),l=i.certificateAuthority&&ub(i.certificateAuthority);if(!o||!c)throw new Error("Missing private key or certificate for secure server");let _={ciphers:i.ciphers,ca:l,ticketKeys:Hq()},u=Ace(_);u.options=_,_.instantiatedContext=u,u.context.setCert(c),u.context.setKey(o,void 0),_.cert=c,_.key=o,u.certStart=c.slice(0,100).toString(),n||(n=u);let d=new Ice(c),E=i.hostname??i.host??i.hostnames??i.hosts??(d.subjectAltName?d.subjectAltName.split(",").map(f=>{let h=f.indexOf(":");return f.slice(h+1)}):[d.subject.match(/CN=(.*)/)?.[1]]);Array.isArray(E)||(E=[E]);for(let f of E)f?(f[0]==="*"&&(s=!0,f=f.slice(1)),r.has(f)||r.set(f,u)):kt.error("No hostname found for certificate at",i.certificate)}return(i,o)=>{let c=i;for(;;){let l=r.get(c);if(l)return kt.debug("Found certificate for",i,l.certStart),o(null,l);if(s&&c){let _=c.indexOf(".",1);_<0?c="":c=c.slice(_)}else break}kt.debug("No certificate found to match",i,"using the first certificate"),o(null,n)}}a(mb,"createSNICallback")});var eF={};$e(eF,{startHTTPThreads:()=>xce,startSocketServer:()=>Ob,updateWorkerIdleness:()=>Zq});async function xce(e=2,t){if(t)Rb(0,1,!0);else{let{loadRootComponents:r}=Pp();if(e===0)return(0,Qs.setMainIsWorker)(!0),await Sb().startServers(),Promise.resolve([]);await r()}Xq();for(let r=0;r<e;r++)Rb(r,e);return Promise.all(Jq)}function Xq(){let e=(0,jq.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),gb=setInterval(()=>{vp.notify(e)},Hce).unref())}function Rb(e,t=1,r){if(Tb++,(0,Qs.startWorker)("server/threads/threadServer.js",{name:ml.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(_){_.type===ml.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});Jq.push(s),await s,fl.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=Up.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=fl.indexOf(n);o>-1&&fl.splice(o,1)}if(a(i,"removeWorker"),El){let o=El;El=[];for(let c of o)zq[c.localPort](null,c)}}}),r){let n=setInterval(()=>{Ab?Ab=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Qs.shutdownWorkers)(),Tb=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function Ob(e=0,t){if(typeof e=="string")try{(0,Bp.existsSync)(e)&&(0,Bp.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Gce:r=qce(t):r=bb;let n=(0,hl.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=zq[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),Ab=!0,r(o,(c,l)=>{if(!c){if(Kq){let u=o._socket||new hl.Socket({handle:o,writable:!0,readable:!0});Kq.deliverSocket(u,e,l),u.resume()}else Tb>0?(El.length===0&&setTimeout(()=>{El.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,El.push(o)):(console.log("start up a dynamic thread to handle request"),Rb(0));hr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:l});else{let u=o._socket||new hl.Socket({handle:o,writable:!0,readable:!0});$ce(u,c,e)}hr(!0,"socket-routed")})};let s=ma();vp.info(`HarperDB ${s.version} Server running on port ${e}`)}return n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function bb(e,t){let r,n=0;for(let s of fl){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Mp)return Mp=i,t(r);n=i}Mp=0,t(r)}function Gce(e,t){let r={};e.getpeername(r);let n=r.address,s=pl.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);bb(e,o=>{pl.set(n,{worker:o,lastUsed:i}),t(o)})}function qce(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new hl.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],_=pl.get(l),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,s(_.worker);bb(n,d=>{pl.set(l,{worker:d,lastUsed:u}),s(d,o)})})}a(r,"findByHeaderAffinity")}function Zq(){Mp=0;for(let e of fl)e.expectedIdle=e.recentELU.idle+Fce,e.requests=1;fl.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function $ce(e,t,r){let n=kce++;t.postMessage({port:r,requestId:n,event:"connection"}),e.on("data",s=>{let i=s.toString("latin1");t.postMessage({port:r,requestId:n,data:i,event:"data"})}).on("close",s=>{t.postMessage({port:r,requestId:n,event:"close",hadError:s})}).on("error",s=>{t.postMessage({port:r,requestId:n,event:"error",error:s})}).on("drain",s=>{t.postMessage({port:r,requestId:n,event:"drain",error:s})}).on("end",()=>{t.postMessage({port:r,requestId:n,event:"end"})}).resume(),Up.set(n,s=>{s.event=="data"&&e.write(Buffer.from(s.data,"latin1")),s.event=="end"&&(e.end(s.data&&Buffer.from(s.data,"latin1")),Up.delete(n)),s.event=="destroy"&&(e.destroy(),Up.delete(n))})}var Qs,hl,ml,vp,Bp,Qq,jq,fl,El,zq,Kq,Tb,Jq,gb,Hce,Ab,Mp,Wq,pl,Fce,Up,kce,Nb=be(()=>{Qs=x(rt()),hl=require("net"),ml=x(L()),vp=x(k()),Bp=require("fs");Ti();Qq=require("worker_threads"),jq=x(la()),fl=[],El=[],zq=[],Tb=0,Jq=[];Qq.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,Qs.onMessageFromWorkers)(e=>{e.type===ml.ITC_EVENT_TYPES.RESTART&&gb&&(clearInterval(gb),Xq())}));Hce=6e5;a(xce,"startHTTPThreads");a(Xq,"licenseWarning");a(Rb,"startHTTPWorker");a(Ob,"startSocketServer");Mp=0;a(bb,"findMostIdleWorker");Wq=36e5,pl=new Map;a(Gce,"findByRemoteAddressAffinity");a(qce,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of pl)r.lastUsed+Wq<e&&pl.delete(t)},Wq).unref();Fce=1e3;a(Zq,"updateWorkerIdleness");(0,Qs.setMonitorListener)(Zq);Up=new Map,kce=1;a($ce,"proxySocket")});var sF=R((kNe,nF)=>{"use strict";var Vce=require("cluster"),ka=X();ka.initSync();var rF=L(),HNe=require("util"),Hi=k(),xNe=require("fs"),Yce=require("fastify"),GNe=ma(),Kce=require("@fastify/cors"),Wce=require("@fastify/compress"),Qce=require("@fastify/static"),jce=OO(),zce=require("path"),{PACKAGE_ROOT:Jce}=L(),Xce=Bn(),Zce=Y(),ele=Ur(),tle=la(),{server:rle}=(Cr(),ae(jo)),{node_request_key:qNe}=(Ip(),ae(cb)),{authHandler:nle,handlePostRequest:sle,serverErrorHandler:ile,reqBodyValidationHandler:ole}=Np(),FNe=require("net"),{registerContentHandlers:ale}=(jc(),ae(Tx)),cle=6e4,lle=1024*1024*1024,ule="TRUE",{CONFIG_PARAMS:id}=rF,Sl;nF.exports={hdbServer:tF,start:tF};async function tF(e){try{Hi.info("In Fastify server"+process.cwd()),Hi.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Hi.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Vce.isMaster,await _le();let t=e.securePort>0;Sl=dle(t),await Sl.ready(),e||(e={}),e.isOperationsServer=!0;try{rle.http(Sl.server,e),Sl.server.closeIdleConnections||await Sl.listen({port:0,host:"::"})}catch(r){throw Sl.close(),Hi.error(r),Hi.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Hi.fatal(t),process.exit(1)}}a(tF,"operationsServer");async function _le(){Hi.trace("Configuring HarperDB process."),Xce.setSchemaDataToGlobal(),await ele.setUsersToGlobal(),await tle.getLicense()}a(_le,"setUp");function dle(e){Hi.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=fle(e),r=Yce(t);r.server.headersTimeout=hle(),r.setErrorHandler(ile);let n=Ele();n&&r.register(Kce,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,_){r.server.emit("unhandled",l.raw,_.raw)}),c()}),r.register(jce),r.register(Wce),r.register(Qce,{root:zce.join(Jce,"studio/build-local")}),ale(r);let s=ka.get(rF.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Zce.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[ole,nle],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),sle(i,o)}),r.get("/health",()=>"HarperDB is running."),Hi.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(dle,"buildServer");function fle(e){let t=ka.get(id.OPERATIONSAPI_NETWORK_TIMEOUT),r=ka.get(id.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:lle,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(fle,"getServerOptions");function Ele(){let e=ka.get(id.OPERATIONSAPI_NETWORK_CORS),t=ka.get(id.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===ule)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(Ele,"getCORSOpts");function hle(){return ka.get(id.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??cle}a(hle,"getHeaderTimeoutConfig")});var Lb={};$e(Lb,{disableNATS:()=>mle,publishToStream:()=>Gp,setNATSReplicator:()=>yb,setPublishToStream:()=>Sle,setSubscription:()=>Db,start:()=>ple});function ple(){od.default.get(ad.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&gle()}function mle(e=!0){lF=e}function Sle(e,t){Gp=e,Db=t}function gle(){if(lF||process.env._DISABLE_NATS)return;let e=Br(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];yb(s,r,i)}}Pb((r,n)=>{yb(r.tableName,r.databaseName,r),n&&_F(r)}),!iF&&(iF=!0)}function yb(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends tr{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Ue],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Ue]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Ue],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Ue],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Ue]})}static defineSchema(i){_F(i)}static subscribe(){let i=new ts;return Db(t,e,i),i}static subscribeOnThisThread(i){return i<(od.default.get(ad.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Tle)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new Hp(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=uF;return i}a(n,"getNATSTransaction")}function _F(e){let t=od.default.get(ad.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Gp(`${wb.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,Cb.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var oF,wb,Cb,aF,cF,od,ad,xp,lF,Gp,Db,Tle,uF,iF,Hp,Ib,dF=be(()=>{Re();Mn();oF=x(gt()),wb=x(Ze()),Cb=x(fi());nu();aF=x(nR()),cF=x(wr()),od=x(X()),ad=x(L()),xp=x(k());a(ple,"start");a(mle,"disableNATS");Gp=oF.publishToStream,Db=aF.setSubscription;a(Sle,"setPublishToStream");Tle=2;a(gle,"assignReplicationSource");a(yb,"setNATSReplicator");a(_F,"publishSchema");Hp=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=od.default.get(ad.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,_;for(let u of i){let d=u.table,E=u.operation=="put"?"upsert":u.operation;l||(xp.trace(`Sending transaction event ${E}`),_=l={operation:E,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,E!=="delete"&&E!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===E?(o.push(u.record),c.push(u.id)):_=_.next={operation:E,table:d,id:u.id,record:u.record},u.expiresAt&&(_.expiresAt=u.expiresAt)}l&&n.push(Gp(`${wb.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,Cb.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(u=>{throw xp.error("An error has occurred trying to replicate transaction",l,u),u.statusCode=504,u}))}return Promise.all(n)}},Ib=class extends Hp{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,cF.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};uF=new Ib});async function mF({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await Mb.get(e,{returnNonexistent:!0});i=new Bb(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await Mb.get(e);o&&o.delete()}i=new Fp(e,t)}return n&&(n.id=e,n.user={username:t?.username},cd.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function Ub(){return qp++,qp>65500&&(qp=1),qp}function vb(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=No.getMatch(n);if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return it(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var EF,Mo,hF,pF,fF,Mb,cd,qp,Fp,Bb,SF=be(()=>{Re();I_();EF=x(wr()),Mo=x(k());ha();hF=x(rt()),pF=x(Sb());Cr();fF=100,Mb=St({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"}]}}]}),cd=St({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,hF.getWorkerIndex)()===0&&(async()=>{await pF.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of cd.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await dt.getUser(r.user.username));try{await vb(r,t,r)}catch{(0,Mo.warn)("Failed to publish will",t)}cd.delete(e.id)}})();a(mF,"getSession");qp=1;a(Ub,"getNextMessageId");Fp=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,_;if(c>-1?(l=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let u=this.subscriptions.find(g=>g.topic===s),d;u?(d=i>0,u.end(),this.subscriptions.splice(this.subscriptions.indexOf(u),1)):d=i===2;let E={search:l,async:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Mo.trace)("Resuming subscription from",s,"from",o);let f=No.getMatch(_);if(!f){let g=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw g.statusCode=404,g}if(E.url=f.relativeURL,E.url.indexOf("+")>-1||E.url.indexOf("#")>-1){let g=E.url.slice(1);if(g.indexOf("#")>-1&&g.indexOf("#")!==g.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(E.isCollection=!0,g.indexOf("+")===g.length-1)E.onlyChildren=!0,E.url="/"+g.slice(0,g.length-1);else{let T=g.split("/"),b;for(let v=0;v<T.length;v++)if(T[v].indexOf("+")>-1)if(T[v]==="+")b=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&b)throw new Error("Filters can not be combined");let N=!0;T[T.length-1]==="#"&&(T.length--,N=!1),b&&(n=a(v=>{let F=v.id;if(!Array.isArray(F)||N&&F.length!==T.length)return!1;for(let M=0;M<T.length;M++)if(T[M]!=="+"&&T[M]!==F[M])return!1;return!0},"filter"));let U=T.indexOf("+");E.url="/"+(U>-1?T.slice(0,U):T).concat("").join("/")}}let h=f.path,m=f.Resource,S=await it(E,async()=>{let g=this.createContext();g.topic=s,g.retainHandling=i;let T=await m.subscribe(E,g);if(!T)return;if(!T[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let b=(async()=>{for await(let N of T)try{let U;if(N.type&&N.type!=="put"&&N.type!=="delete"&&N.type!=="message"&&N.type!=="patch"||n&&!n(N))continue;r?(N.topic=s,U=this.needsAcknowledge(N)):(N.acknowledge?.(),U=Ub());let v=N.id;if(Array.isArray(v)&&(v=Wc(v)),v==null&&(v=""),await this.listener(h+"/"+v,N.value,U,t)===!1)break;this.awaitingAcks?.size>fF?await new Promise(M=>setTimeout(M,this.awaitingAcks.size-fF)):await new Promise(setImmediate)}catch(U){(0,Mo.warn)(U)}})();return T});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=Ub();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return vb(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();it(r,async()=>{try{if(!t){let n=await cd.get(this.sessionId);n?.doesExist()&&await vb(n,n.data,r)}}finally{await cd.delete(this.sessionId)}}).catch(n=>{(0,Mo.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};a(vb,"publish");Bb=class extends Fp{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=Ub(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Mo.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,EF.getNextMonotonicTime)()),(0,Mo.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),Mb.put(this.sessionRecord)}}});var xb={};$e(xb,{bypassAuth:()=>Rle,start:()=>Ale});function Rle(){OF=!0}function Ale({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new AF.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c,l=r?.mtls;return n&&(c=e.ws((_,u,d)=>{if(_.protocol==="mqtt"){o.events.emit("connection",_),$t.debug("Received WebSocket connection for MQTT from",_._socket.remoteAddress);let{onMessage:E,onClose:f}=gF(_,h=>{_.send(h)},u,Promise.resolve(d).then(()=>u?.user),o);_.on("message",E),_.on("close",f),_.on("error",h=>{$t.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let u;if(o.events.emit("connection",_),$t.debug(`Received ${_.getCertificate?"SSL":"TCP"} connection for MQTT from ${_.remoteAddress}`),l){if(_.authorized)try{let f=l.user;if(f!==null){(f===void 0||f==="Common Name"||f==="CN")&&(f=_.getPeerCertificate().subject.CN);try{u=await e.getUser(f,null,null),(0,Tl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&$p.notify({username:u?.username,status:cr.AUTH_AUDIT_STATUS.SUCCESS,type:cr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})}catch(h){throw(0,Tl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&$p.error({username:f,status:cr.AUTH_AUDIT_STATUS.FAILURE,type:cr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:_.remoteAddress}),h}}else $t.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(f){o.events.emit("error",f,_),$t.error(f)}else if(l.required)return $t.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!u&&OF&&_.remoteAddress.includes("127.0.0.1")&&(u=await(0,RF.getSuperUser)(),$t.debug("Auto-authorizing local connection",u?.username));let{onMessage:d,onClose:E}=gF(_,f=>_.write(f),null,u,o);_.on("data",d),_.on("close",E),_.on("error",f=>{$t.info("Socket error",f)})},{port:t,securePort:s,mtls:l})),c}function gF(e,t,r,n,s){TF||(TF=!0,Yu(d=>{kp>0&&d.push({metric:"mqtt-connections",connections:kp,byThread:!0})}));let i;kp++;let o,c={protocolVersion:4},l=(0,Vp.parser)({protocolVersion:5});function _(d){l.parse(d)}a(_,"onMessage");function u(){kp--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),En(!1,"connection","mqtt","disconnect"),$t.debug("MQTT connection was closed",e.remoteAddress))}return a(u,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;let E=d.topic,f=E?.indexOf("/",1),h=f>0?E.slice(0,f):E;hr(d.length,"bytes-received",h,S(d),"mqtt");try{switch(o?.receivedPacket?.(),d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await dt.getUser(d.username,d.password.toString(),r),(0,Tl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&$p.notify({username:n?.username,status:cr.AUTH_AUDIT_STATUS.SUCCESS,type:cr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(M){return(0,Tl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&$p.error({username:d.username,status:cr.AUTH_AUDIT_STATUS.FAILURE,type:cr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",d,e,M),En(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",d,e),En(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let M=e.deserialize||(e.deserialize=Ba(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?M(d.will.payload):void 0,delete d.will.payload}o=mF({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(M){return $t.error(M),s.events.emit("auth-failed",d,e,M),En(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:M.code||5,returnCode:M.code||128})}s.events.emit("connected",o,e),En(!0,"connection","mqtt","connect"),m({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((M,W,z,Z)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",M);let ce=M.indexOf("/",1),_e=ce>0?M.slice(0,ce):M;m({cmd:"publish",topic:M,payload:g(W),messageId:z||Math.floor(Math.random()*1e8),qos:Z.qos},_e);let de=e._socket??e;return de.writableNeedDrain?new Promise(xe=>de.once("drain",xe)):!de.closed}catch(ce){return $t.error(ce),o?.disconnect(),s.sessions.delete(o),!1}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let T=[];for(let M of d.subscriptions){let W;try{let z=await o.addSubscription(M,M.qos>=1);W=z?z.qos||0:c.protocolVersion<5?128:143}catch(z){s.events.emit("error",z,e,M,o),z.statusCode?z.statusCode===500?$t.warn(z):$t.info(z):$t.error(z),W=c.protocolVersion<5?128:z.statusCode===403?135:z.statusCode===404?143:128}T.push(W)}await o.committed,m({cmd:"suback",granted:T,messageId:d.messageId});break;case"unsubscribe":{let M=[];for(let W of d.unsubscriptions)M.push(o.removeSubscription(W)?0:17);m({cmd:"unsuback",granted:M,messageId:d.messageId});break}case"pubrel":m({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let b=d.qos===2?"pubrec":"puback",N=e.deserialize||(e.deserialize=Ba(r?.headers.get?.("content-type"))),v=(d.payload?.length||0)>0?N(d.payload):void 0,F;try{F=await o.publish(d,v)}catch(M){s.events.emit("error",M,e,d,o),$t.warn(M),d.qos>0&&m({cmd:b,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&m({cmd:b,messageId:d.messageId,reasonCode:F===!1?144:0},d.topic);break;case"pubrec":m({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":m({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),En(!0,"connection","mqtt","disconnect"),$t.debug("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(T){s.events.emit("error",T,e,d,o),$t.error(T),m({cmd:"disconnect"})}function m(T,b){let N=(0,Vp.generate)(T,c);t(N),hr(N.length,"bytes-sent",b,S(T),"mqtt")}a(m,"sendPacket");function S(T){return T.qos>0?T.cmd+",qos="+T.qos:T.cmd}a(S,"packetMethodName");function g(T){return Pa(T,r)}a(g,"serialize")}),l.on("error",d=>{$t.warn("MQTT parsing error, closing connection:",d.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:_,onClose:u}}var Vp,RF,Tl,cr,Hb,AF,$p,$t,OF,TF,kp,bF=be(()=>{Vp=require("mqtt-packet");SF();RF=x(Ur());jc();Ti();Cr();Tl=x(X()),cr=x(L()),Hb=x(k()),AF=require("events"),$p=(0,Hb.loggerWithTag)("auth-event"),$t=(0,Hb.loggerWithTag)("mqtt"),OF=(0,Tl.get)(cr.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Rle,"bypassAuth");a(Ale,"start");kp=0;a(gF,"onSocket")});var Gh={};$e(Gh,{component_errors:()=>Rl,loadComponent:()=>Yp,loadComponentDirectories:()=>MF,setErrorReporter:()=>yle});function MF(e,t){t&&(qb=t),e&&(Fb=e);let r=[];if((0,tt.existsSync)(Gb)){let s=(0,tt.readdirSync)(Gb,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,at.join)(Gb,o);r.push(Yp(c,qb,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Yp(n,qb,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{PF=!0})}function yle(e){ld=e}async function Yp(e,t,r,n,s,i){let o=(0,tt.realpathSync)(e);if(!yF.has(o)){yF.set(o,!0),s&&(Fb=s);try{let c;n&&(Rl=new Map);let l=(0,at.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,tt.existsSync)(l)?c=n?(0,LF.getConfigObj)():(0,IF.parseDocument)((0,tt.readFileSync)(l,"utf8"),{simpleKeys:!0}).toJSON():c=kb;let _=(0,at.join)(e,"node_modules","harperdb");try{$a.isMainThread&&(n||(0,tt.existsSync)(_)&&(0,tt.realpathSync)(Ol.PACKAGE_ROOT)!==(0,tt.realpathSync)(_))&&((0,tt.rmSync)(_,{recursive:!0,force:!0}),(0,tt.existsSync)((0,at.join)(e,"node_modules"))||(0,tt.mkdirSync)((0,at.join)(e,"node_modules")),(0,tt.symlinkSync)(Ol.PACKAGE_ROOT,_,"dir"))}catch(E){gl.default.error("Error symlinking harperdb module",E)}let u=[],d=n;for(let E in c){let f=c[E];if(Rl.set(n?E:(0,at.basename)(e),!1),!f)continue;let h,m=f.package;try{if(m){let N=e,U;for(;!(0,tt.existsSync)(U=(0,at.join)(N,"node_modules",E));)if(N=(0,at.dirname)(N),N.length<(0,DF.getHdbBasePath)().length){U=null;break}if(U)h=await Yp(U,t,r,!1),d=!0;else throw new Error(`Unable to find package ${E}:${m}`)}else h=Nle[E];if(!h)continue;u.push(h);let S=a(N=>(N.origin=r,St(N)),"ensureTable"),g=f.network||(f.port||f.securePort)&&f,T=g?.securePort||g?.https&&g.port,b=!g?.https&&g?.port;if($a.isMainThread&&(h=await h.startOnMainThread?.({server:dt,ensureTable:S,port:b,securePort:T,resources:t,...f})||h,n&&g))for(let N of[b,T])try{if(+N&&!NF.includes(N)){let U=$b.get(Ol.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);U&&gl.default.warn("Session affinity is not recommended and may cause memory leaks"),(U||!yp)&&(NF.push(N),Ob(N,U))}}catch(U){console.error("Error listening on socket",N,U,E)}if(t.isWorker&&(h=await h.start?.({server:dt,ensureTable:S,port:b,securePort:T,resources:t,...f})||h),Fb.set(h,!0),(h.handleFile||h.handleDirectory)&&f.files){if(f.files.includes(".."))throw(0,CF.handleHDBError)("Can not reference parent directories");let N=(0,at.join)(e,f.files).replace(/\\/g,"/"),U=N.indexOf("/*");if(U>-1&&f.files!==kb[E]?.files&&!(0,tt.existsSync)(N.slice(0,U)))throw new Error(`The path '${N.slice(0,U)}' does not exist and cannot be used as the base of the resolved 'files' path value '${f.files}'`);let v=(0,at.basename)(e),F=f.path||"/";F=F.startsWith("/")?F:F.startsWith("./")?"/"+v+F.slice(2):F==="."?"/"+v:"/"+v+"/"+F;let M,W,z;if(f.root){let ce=f.root;ce.startsWith("/")&&(ce=ce.slice(1)),ce.endsWith("/")&&(ce=ce.slice(0,-1)),ce+="/",W=(0,at.join)(e,ce)}else(z=N.indexOf("/*"))>-1&&(W=N.slice(0,z+1),M=(0,at.relative)(e,W));let Z=!1;if($a.isMainThread&&h.setupDirectory&&(Z=await h.setupDirectory?.(F,W,t)),t.isWorker&&h.handleDirectory&&(Z=await h.handleDirectory?.(F,W,t)),Z)continue;for(let ce of await(0,wF.default)(N,{onlyFiles:!1,objectMode:!0})){let{path:_e,dirent:de}=ce;d=!0;let xe=(0,at.relative)(e,_e).replace(/\\/g,"/");if(M)if(xe.startsWith(M))xe=xe.slice(M.length+1);else throw new Error(`The root path '${f.root}' does not reference a valid part of the file path '${xe}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let we=F+(F.endsWith("/")?"":"/")+xe;try{if(de.isFile()){let Ge=await ble(_e);$a.isMainThread&&await h.setupFile?.(Ge,we,_e,t),t.isWorker&&await h.handleFile?.(Ge,we,_e,t)}else $a.isMainThread&&await h.setupDirectory?.(we,_e,t),t.isWorker&&await h.handleDirectory?.(we,_e,t)}catch(Ge){Ge.message=`Could not load ${de.isFile()?"file":"directory"} '${_e}'${f.module?" using '"+f.module+"'":""} for application '${e}' due to: ${Ge.message}`,ld?.(Ge),((0,Al.getWorkerIndex)()===0?console:gl.default).error(Ge),t.set(f.path||"/",new ud(Ge)),Rl.set(n?E:(0,at.basename)(e),Ge.message)}}}}catch(S){S.message=`Could not load component '${E}' for application '${(0,at.basename)(e)}' due to: ${S.message}`,ld?.(S),((0,Al.getWorkerIndex)()===0?console:gl.default).error(S),t.set(f.path||"/",new ud(S),null,!0),Rl.set(n?E:(0,at.basename)(e),S.message)}}if($a.isMainThread&&!PF&&i&&(0,Al.watchDir)(e,async()=>MF()),c.extensionModule)return await hf((0,at.join)(e,c.extensionModule));if(!d&&t.isWorker){let E=`${e} did not load any modules, resources, or files, is this a valid component?`;ld?.(new Error(E)),((0,Al.getWorkerIndex)()===0?console:gl.default).error(E),Rl.set((0,at.basename)(e),E)}}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,ld?.(c),t.set("",new ud(c))}}}var tt,at,$a,IF,$b,Ol,wF,Al,gl,CF,DF,Ole,LF,ble,Gb,Fb,PF,qb,Rl,Nle,kb,NF,yF,ld,ud,qh=be(()=>{tt=require("fs"),at=require("path"),$a=require("worker_threads"),IF=require("yaml"),$b=x(X()),Ol=x(L());II();LI();PI();Px();bq();Dq();wF=x(require("fast-glob")),Al=x(rt()),gl=x(k());OS();Cr();CF=x(ie());Mn();Re();Nb();DF=x(X()),Ole=x(sF());Lh();dF();bF();LF=x(Et());Ip();({readFile:ble}=tt.promises),Gb=$b.get(Ol.CONFIG_PARAMS.COMPONENTSROOT),Fb=new Map,Rl=new Map;a(MF,"loadComponentDirectories");Nle={REST:sp,rest:sp,graphqlSchema:AS,jsResource:NS,fastifyRoutes:nb,login:IS,static:sb,operationsApi:Ole,customFunctions:{},http:{},clustering:Lb,authentication:C_,mqtt:xb},kb={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(kb,"static",{value:{files:"web/**"}});NF=[],yF=new Map;a(yle,"setErrorReporter");a(Yp,"loadComponent");ud=class extends tr{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 Pp=R((hye,vF)=>{var{isMainThread:UF}=require("worker_threads"),{getTables:Ile}=(Re(),ae(Ve)),{loadComponentDirectories:wle,loadComponent:Cle}=(qh(),ae(Gh)),{resetResources:Dle}=(I_(),ae(FB)),Lle=GA(),Ple=Et(),{dirname:Mle}=require("path"),{getConnection:Ule}=gt(),vle=X(),Ble=L(),Vb=new Map;async function Hle(e=!1){!UF&&vle.get(Ble.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Ule();try{UF&&await Lle()}catch(n){console.error(n)}let t=Dle();Ile(),t.isWorker=e,await Cle(Mle(Ple.getConfigFilePath()),t,"hdb",!0,Vb),await wle(Vb,t);let r=[];for(let[n]of Vb)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(Hle,"loadRootComponents");vF.exports.loadRootComponents=Hle});var rt=R((mye,vo)=>{"use strict";var{Worker:xle,MessageChannel:Gle,parentPort:js,isMainThread:jb,threadId:qle,workerData:xi}=require("worker_threads"),{PACKAGE_ROOT:Fle}=L(),{join:GF,isAbsolute:kle,extname:$le}=require("path"),{server:qF}=(Cr(),ae(jo)),{watch:Vle,readdir:Yle}=require("fs/promises"),{totalmem:BF}=require("os"),_d=L(),FF=X(),Gi=k(),{randomBytes:Kle}=require("crypto"),{_assignPackageExport:Wle}=require("../index"),Qle=L(),HF=1024*1024,Uo=[],Kn=[],jle=50,zb=1e4,zle="restart",kF="request_thread_info",$F="resource_report",VF="thread_info",YF="added-port",Jle="ack",Yb;Wle("threads",Kn);vo.exports={startWorker:Kb,restartWorkers:Xb,shutdownWorkers:rue,workers:Uo,setMonitorListener:uue,onMessageFromWorkers:nue,onMessageByType:XF,broadcast:iue,broadcastWithAcknowledgement:aue,setChildListenerByType:tue,getWorkerIndex:KF,getWorkerCount:WF,getTicketKeys:jF,setMainIsWorker:Zle,setTerminateTimeout:Xle,restartNumber:xi?.restartNumber||1};Kn.onMessageByType=XF;Kn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Kn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var Jb;function Xle(e){zb=e}a(Xle,"setTerminateTimeout");function KF(){return xi?xi.workerIndex:Jb?0:void 0}a(KF,"getWorkerIndex");function WF(){return xi?xi.workerCount:Jb?1:void 0}a(WF,"getWorkerCount");function Zle(e){Jb=e}a(Zle,"setMainIsWorker");var QF=1,Kp;function jF(){return Kp||(Kp=jb?Kle(48):xi.ticketKeys,Kp)}a(jF,"getTicketKeys");Object.defineProperty(qF,"workerIndex",{get(){return KF()}});Object.defineProperty(qF,"workerCount",{get(){return WF()}});var zF={[kF](e,t){cue(t)},[$F](e,t){lue(t,e)}};function Kb(e,t={}){let r=process.constrainedMemory?.()||BF();r=Math.min(r,BF(),2e4*HF);let n=FF.get(_d.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/HF/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Kn){let _=new Gle;_.existingPort=l,i.push(_),o.push(_.port2)}$le(e)||(e+=".js");let c=new xle(kle(e)?e:GF(Fle,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:QF=t.threadCount,name:t.name,restartNumber:vo.exports.restartNumber,ticketKeys:jF()},transferList:o},t));for(let{port1:l,existingPort:_}of i)_.postMessage({type:YF,port:l,threadId:c.threadId},[l]);return Qp(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>Kb(e,t),c.on("error",l=>{Gi.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{Uo.splice(Uo.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<jle?(t.unexpectedRestarts=c.unexpectedRestarts+1,Kb(e,t)):Gi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{zF[l.type]?.(l,c)}),Uo.push(c),due(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(Kb,"startWorker");var eue=[_d.THREAD_TYPES.HTTP];async function Xb(e=null,t=Math.max(QF>3,1),r=!0){if(jb){if(r){let{loadRootComponents:o}=Pp();await o()}vo.exports.restartNumber++,t<1&&(t=t*Uo.length);let n=[],s=[];for(let o of Uo.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Gi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:vo.exports.restartNumber,type:_d.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=eue.indexOf(o.name)>-1,l=new Promise(_=>{let u=setTimeout(()=>o.terminate(),zb*2).unref();o.on("exit",()=>{clearTimeout(u),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),_()})});if(n.push(l),c&&r){let _=o.startCopy(),u=new Promise(d=>{let E=a(f=>{f.type===Qle.ITC_EVENT_TYPES.CHILD_STARTED&&(Gi.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(u)),_.off("message",E))},"startListener");Gi.trace("Waiting for worker to start",_.threadId),_.on("message",E)});s.push(u),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=bo();r&&(e==="http"||!e)&&FF.get(_d.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else js.postMessage({type:zle,workerType:e})}a(Xb,"restartWorkers");function tue(e,t){zF[e]=t}a(tue,"setChildListenerByType");function rue(e){return Xb(e,1/0,!1)}a(rue,"shutdownWorkers");var JF=[];function nue(e){JF.push(e)}a(nue,"onMessageFromWorkers");var Wb=new Map;function XF(e,t){let r=Wb.get(e);r||Wb.set(e,r=[]),r.push(t)}a(XF,"onMessageByType");var sue=10;async function iue(e){let t=0;for(let r of Kn)try{r.postMessage(e),t++>sue&&(t=0,await new Promise(setImmediate))}catch(n){Gi.error("Unable to send message to worker",n)}}a(iue,"broadcast");var Wp=new Map,oue=1;function aue(e){return new Promise(t=>{let r=0;for(let n of Kn)try{let s=oue++,i=a(()=>{Wp.delete(s),--r===0&&t(),n!==js&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Wp.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of Wp)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Gi.error("Unable to send message to worker",s)}r===0&&t()})}a(aue,"broadcastWithAcknowledgement");function cue(e){e.postMessage({type:VF,workers:ZF()})}a(cue,"sendThreadInfo");function ZF(){let e=Date.now();return Uo.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(ZF,"getChildWorkerInfo");function lue(e,t){e.resources=t,e.resources.updated=Date.now()}a(lue,"recordResourceReport");var Qb;function uue(e){Qb=e}a(uue,"setMonitorListener");var _ue=1e3,xF=!1;function due(){xF||(xF=!0,setInterval(()=>{for(let e of Uo){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}Qb&&Qb()},_ue).unref())}a(due,"startMonitoring");var fue=1e3;if(js){Qp(js);for(let e=0,t=xi.addPorts.length;e<t;e++){let r=xi.addPorts[e];r.threadId=xi.addThreadIds[e],Qp(r)}setInterval(()=>{let e=process.memoryUsage();js.postMessage({type:$F,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},fue).unref(),Yb=a(()=>new Promise((e,t)=>{js.on("message",r),js.postMessage({type:kF});function r(n){n.type===VF&&(js.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else Yb=ZF;vo.exports.getThreadInfo=Yb;function Qp(e,t){Kn.push(e),e.on("message",r=>{if(r.type===YF)r.port.threadId=r.threadId,Qp(r.port);else if(r.type===Jle){let n=Wp.get(r.id);n&&n()}else{for(let s of JF)s(r,e);let n=Wb.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){Gi.error(i)}}}).on("close",()=>{Kn.splice(Kn.indexOf(e),1)}).on("exit",()=>{Kn.splice(Kn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Qp,"addPort");if(jb){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await Yle(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(GF(s,o.name));try{for await(let{filename:o}of Vle(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await Xb(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(o){console.warn("Error trying to watch component directory",s,o)}},"watch_dir");vo.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else js.on("message",async e=>{let{type:t}=e;t===_d.ITC_EVENT_TYPES.SHUTDOWN&&(vo.exports.restartNumber=e.restartNumber,js.unref(),setTimeout(()=>{Gi.warn("Thread did not voluntarily terminate",qle),process.exit(0)},zb).unref())})});var MP={};$e(MP,{AUDIT_STORE_OPTIONS:()=>Ah,createAuditEntry:()=>gf,openAuditStore:()=>Xp,readAuditEntry:()=>Kt,setAuditRetention:()=>hue,transactionKeyEncoder:()=>ck});function Xp(e){let t=e.auditStore=e.openDB(ik.AUDIT_STORE_NAME,Ah);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=jp){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let o=0,c;try{for(let{key:l,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-Zb})){if((_[0]&15)===rN){let u=Kt(_),d=u.tableId;r[d]?.(u.recordId)}if(c=t.remove(l),await new Promise(setImmediate),++o>=Eue){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,Zb/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,Jp.getWorkerIndex)()===(0,Jp.getWorkerCount)()-1&&s(jp),t}function hue(e,t=jp){Zb=e,jp=t}function gf(e,t,r,n,s,i,o){let c=lk[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let l=1;n&&(n>1?bl.setFloat64(0,n):Wn.set($S),l=9),E(0),E(t),d(r),bl.setFloat64(l,e),l+=8,s?d(s):Wn[l++]=0,Wn[n?8:0]=c;let u=Wn.subarray(0,l);if(o)return Buffer.concat([u,o]);return u;function d(f){let h=l;l+=1,l=(0,Nl.writeKey)(f,Wn,l);let m=l-h-1;m>127?m>16383?(sN.error("Key or username was too large for audit entry",f),l=h+1,Wn[h]=0):(Wn.copyWithin(h+2,h+1,l),bl.setUint16(h,m|32768),l++):Wn[h]=m}function E(f){f<128?Wn[l++]=f:f<16384?(bl.setUint16(l,f|32768),l+=2):f<1056964608?(bl.setUint32(l,f|3221225472),l+=4):(Wn[l]=255,bl.setUint32(l+1,f),l+=5)}}function Kt(e){try{let t=e.dataView||(e.dataView=new nN(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,l=t.position+=o,_=t.readFloat64();o=t.readInt();let u=t.position,d=t.position+=o;return{type:lk[n&7],tableId:i,get recordId(){return sk(e,c,l)},version:_,previousLocalTime:r,get user(){return d>u?sk(e,u,d):void 0},getValue(E,f,h){if(n&eN||n&tN&&!f)return E.decoder.decode(e.subarray(t.position));if(n&tN&&h)return iN(E.getEntry(this.recordId),h,E)}}}catch(t){return sN.error("Reading audit entry error",t,e),{}}}function sk(e,t,r){let n=e.subarray(t,r);return(0,Nl.readKey)(n,0,r-t)}var Nl,zp,ik,ok,Jp,ak,sN,Wn,bl,ck,Ah,Zb,Eue,jp,eN,tN,ek,rN,tk,rk,nk,lk,nN,no=be(()=>{Nl=require("ordered-binary"),zp=x(X()),ik=x(_t()),ok=x(L()),Jp=x(rt()),ak=x(Y());uu();sN=x(k());Zp();(0,zp.initSync)();Wn=Buffer.alloc(1024),bl=new DataView(Wn.buffer,Wn.byteOffset,1024),ck={writeKey(e,t,r){return e===lu?(t.set(lu,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Nl.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,Nl.readKey)(e,t,r)}},Ah={encoding:"binary",keyEncoder:ck},Zb=(0,ak.convertToMS)((0,zp.get)(ok.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Eue=1e3,jp=1e4;a(Xp,"openAuditStore");a(hue,"setAuditRetention");eN=16,tN=32,ek=1,rN=2,tk=3,rk=4,nk=5,lk={put:ek|eN,[ek]:"put",delete:rN,[rN]:"delete",message:tk|eN,[tk]:"message",invalidate:rk,[rk]:"invalidate",patch:nk|tN,[nk]:"patch"};a(gf,"createAuditEntry");a(Kt,"readAuditEntry");nN=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(sk,"readKeySafely")});var oN={};$e(oN,{add:()=>em,applyReverse:()=>uk,getRecordAtTime:()=>iN,rebuildUpdateBefore:()=>tm});function em(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function tm(e,t){let r=null;for(let n in e)if(n in t){let s=t[n];if(s?.__op__){let i=e[n];if(i?.__op__)if(i.__op__===s.__op__)r||(r={}),r[n]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[n]=i,em(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function uk(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=pue[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=_k}}function iN(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let l=n.get(i),_=Kt(l);switch(_.type){case"put":s=_.getValue(r);break;case"patch":uk(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let l in s)s[l]===_k&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),_=Kt(l),u;switch(_.type){case"put":u=_.getValue(r);break;case"patch":u=_.getValue(r);break}for(let d in u)o[d]&&(s[d]=u[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var pue,_k,Zp=be(()=>{no();a(em,"add");em.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};pue={add:em};a(tm,"rebuildUpdateBefore");a(uk,"applyReverse");_k={};a(iN,"getRecordAtTime")});function gn(e){return e[Pt]||(e[Pt]=Object.create(null))}function om(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,l,_;if(o.resolve)_={get(){return o.resolve(this,this[Ie])},set(u){return o.set(this,u)},configurable:!0};else{switch(o.type){case"String":l=a(function(u){if(!(typeof u=="string"||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be a string, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"ID":l=a(function(u){if(!(typeof u=="string"||u?.length>0&&u.every?.(d=>typeof d=="string")||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be a string, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"Float":case"Number":l=a(function(u){let d=u?.__op__?u.value:u;if(!(typeof d=="number"||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be a number, attempt to assign ${d}`);gn(this)[c]=u},"set");break;case"Int":l=a(function(u){let d=u?.__op__?u.value:u;if(!(d>>0===d||u==null&&o.nullable!==!1))if(typeof d=="number"&&Math.abs((d>>0)-d)<=1)d=Math.round(d),u?.__op__?u.value=d:u=d;else throw new Qn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"Long":l=a(function(u){let d=u?.__op__?u.value:u;if(!(Math.round(d)===u&&Math.abs(d)<=9007199254740992||u==null&&o.nullable!==!1))if(typeof d=="number"&&Math.abs(d)<=9007199254740992)d=Math.round(d),u?.__op__?u.value=d:u=d;else throw new Qn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"BigInt":l=a(function(u){let d=u?.__op__?u.value:u;if(!(typeof d=="bigint"||u==null&&o.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=BigInt(d),u?.__op__?u.value=d:u=d;else throw new Qn.ClientError(`${c} must be a number, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"Boolean":l=a(function(u){if(!(typeof u=="boolean"||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be a boolean, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"Date":l=a(function(u){if(!(u instanceof Date||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=new Date(u);else throw new Qn.ClientError(`${c} must be a Date, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"Bytes":l=a(function(u){if(!(u instanceof Uint8Array||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"Any":case void 0:l=a(function(u){gn(this)[c]=u},"set");break;default:l=a(function(u){if(!(typeof u=="object"||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be an object, attempt to assign ${u}`);gn(this)[c]=u},"set")}_={get(){let u=this[Pt];if(u&&c in u){let E=u[c];if(E?.__op__){let f=this[pe]?.[c];return E.update(f)}return E}let d=this[pe]?.[c];if(d&&typeof d=="object"){let E=fk(d,o);if(E)return u||(u=this[Pt]=Object.create(null)),u[c]=E}return d},set:l,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let l=this[Pt];return l?.[o]!==void 0?l[o]:this[pe]?.[o]}),i("set",function(o,c){let l=n[o];if(l)return l.set.call(this,c);if(t.sealed)throw new Qn.ClientError("Can not add a property to a sealed table schema");gn(this)[o]=c}),i("deleteProperty",function(o){gn(this)[o]=void 0}),i("toJSON",function(){let o=this[Pt],c;for(let _ in o){c||(c=Object.assign({},this[pe]));let u=o[_];if(u?.__op__){let d=c[_];u=u.update(d)}c[_]=u}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[pe])),Object.assign(c,this)),c||this[pe]}),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 fk(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){if(s?.[pe])throw new Error("Can not track an already tracked object, check for circular references");this[pe]=s}},om(r,t)),new r(e)):new rm(e);case Array:let n=new sm(e.length);n[pe]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=fk(o,t?.elements)),n[s]=o}return n;default:return e}}function _E(e){let t=e[Pt],r;for(let s in t){r||(r=Object.assign({},e[pe]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=_E(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[pe])),Object.assign(r,e)),r||e[pe]}function Ya(e,t=e[Pt]){let r;if(dk.call(e,pe)&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Ya(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[pe]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=oN[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Ya(s);r[n]=s}return r?Object.freeze(r):dk.call(e,pe)?e[pe]:e}function nm(e){let t=e[pe];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Va]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.[pe]===s){if(nm(i))return!0}else return!0}}else{let r=e[Pt];if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s[pe]===i){if(nm(s))return!0}else return!0}else return!0}}return!1}var Qn,Pt,rm,dk,Va,sm,im,dE=be(()=>{Mn();Qn=x(ie());Zp();Pt=Symbol("own-data");a(gn,"getChanges");a(om,"assignTrackedAccessors");a(fk,"trackObject");rm=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[pe])throw new Error("Can not track an already tracked object, check for circular references");this[pe]=t}};om(rm,{});a(_E,"collapseData");dk=Object.prototype.hasOwnProperty;a(Ya,"deepFreeze");a(nm,"hasChanges");Va=Symbol.for("has-array-changes"),sm=class extends Array{static{a(this,"TrackedArray")}[Va];constructor(t){super(t)}splice(...t){return this[Va]=!0,super.splice(...t)}push(...t){return this[Va]=!0,super.push(...t)}pop(){return this[Va]=!0,super.pop()}unshift(...t){return this[Va]=!0,super.unshift(...t)}shift(){return this[Va]=!0,super.shift()}};sm.prototype.constructor=Array;im=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var Eg={};$e(Eg,{CONTEXT:()=>Ie,ID_PROPERTY:()=>Ue,IS_COLLECTION:()=>Ts,MultiPartId:()=>il,RECORD_PROPERTY:()=>pe,Resource:()=>tr,snake_case:()=>Sue,transformForSelect:()=>cm});function Sue(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Ek(e,t){if(dd=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(dd=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new il;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){dd=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function Rn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,_,u;if(r?(o?(u=i,o=o[Ie]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(u=s,c=u[this.primaryKey]??null,o=i[Ie]||i):u=i:(u=s,c=u[Ue]??u[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[Ie]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(l=s,s[Symbol.iterator]){c=[],_=!0;for(let f of s){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let f=c.indexOf("?");if(f>-1){let m=this.parseQuery(c.slice(f+1));l?l=Object.assign(m,l):l=m,c=c.slice(0,f)}let h=this.parsePath(c,o,l);h?.id!==void 0?(h.query&&(l?l=Object.assign(h.query,l):l=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||_?(d=Object.assign({},t),l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),_&&(d.isCollection=!0)):d=t,o.transaction){let f=this.getResource(c,o,d);return f.then?f.then(E):E(f)}else return it(o,()=>{let f=this.getResource(c,o,d);return f.then?f.then(E):E(f)},d);function E(f){if(o.authorize){o.authorize=!1;let h=t.type==="read"?f.allowRead(o.user,l,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,u,o):f.allowUpdate(o.user,u,o):t.type==="create"?f.allowCreate(o.user,u,o):f.allowDelete(o.user,l,o);if(h?.then)return h.then(m=>{if(!m)throw new am(o.user);return typeof u?.then=="function"?u.then(S=>e(f,l,o,S)):e(f,l,o,u)});if(!h)throw new am(o.user)}return typeof u?.then=="function"?u.then(h=>e(f,l,o,h)):e(f,l,o,u)}a(E,"authorizeActionOnResource")}}function An(e,t){let r=new mk.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function aN(e,t,r){let n=e[pe];if(n){let s=e[Pt];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function cm(e,t){let r=t?.propertyResolvers,n=t[Ie],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):aN(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let _=[],u=i(aN(l,r,n));for(let d of e)_.push(u(d));return _},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(E=>E&&typeof E=="object"?c(E):E);let _={},u=i(aN(l,r,n)),d;for(let E of e){let f=u(E);f===void 0&&o&&(f=null),f?.then?(d||(d=[]),d.push(f.then(h=>_[E.name||E]=h))):_[E.name||E]=f}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let u=r[c.name]?.definition?.tableClass;l=s[c.name]=cm(c.select||c,u)}let _=o(c.name);return l(_)}else return o(c);else return c}}a(i,"handleProperty")}var hk,pk,mk,Ie,Ue,Ts,pe,mue,tr,am,dd,il,Mn=be(()=>{hk=require("crypto");nu();pk=require("../index"),mk=x(ie());dE();ha();rp();Ie=Symbol.for("context"),Ue=Symbol.for("primary-key"),Ts=Symbol("is-collection"),pe=Symbol("stored-record"),mue={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},tr=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Ue]=t;let n=r?.[Ie];this[Ie]=n!==void 0?n:r||null}static get=Rn(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let _=cm(l,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Rn(function(t,r,n,s){if(Array.isArray(s)&&t[Ts]){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,_=l.getResource(c[l.primaryKey],n,{async:!0});_.then?i.push(_.then(u=>u.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):An(t,"put")},{hasContent:!0,type:"update"});static patch=Rn(function(t,r,n,s){return t.patch?t.patch(s,r):An(t,"patch")},{hasContent:!0,type:"update"});static delete=Rn(function(t,r,n,s){return t.delete?t.delete(r):An(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,hk.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),n||(n={}),it(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):An(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=Rn(function(t,r,n,s){return t.invalidate?t.invalidate(r):An(t,"delete")},{hasContent:!1,type:"update"});static post=Rn(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=Rn(function(t,r,n,s){return t.connect?t.connect(s,r):An(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Rn(function(t,r,n,s){return t.subscribe?t.subscribe(r):An(t,"subscribe")},{type:"read"});static publish=Rn(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.publish?t.publish(s,r):An(t,"publish")},{hasContent:!0,type:"create"});static search=Rn(function(t,r,n,s){let i=t.search?t.search(r):An(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=cm(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Rn(function(t,r,n,s){return t.search?t.search(s,r):An(t,"search")},{hasContent:!0,type:"read"});static copy=Rn(function(t,r,n,s){return t.copy?t.copy(s,r):An(t,"copy")},{type:"create"});static move=Rn(function(t,r,n,s){return t.move?t.move(s,r):An(t,"move")},{type:"delete"});post(t){if(this[Ts])return this.constructor.create(this[Ue],t,this[Ie]);An(this,"post")}static isCollection(t){return t?.[Ts]}static coerceId(t){return t}static parseQuery(t){return tp(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&mue[o];if(c)r.requestedContentType=c;else if(n)n.property=o;else return{query:{property:o},id:Ek(t,this),isCollection:dd}}let i=Ek(t,this);return dd?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Ie],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let _=l.asMap.get(t);if(s=_?.find(u=>u.constructor===c),s)return s;_||l.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=l.find(_=>_[Ue]===t&&_.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let _=new Map;for(let u of l){let d=u[Ue],E=_.get(d);E?E.push(u):_.set(d,[u])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[Ts]=!0),s}subscribe(t){return new ts}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new ts}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[Ue]}getContext(){return this[Ie]}};tr.prototype[Ie]=null;(0,pk._assignPackageExport)("Resource",tr);a(Sue,"snake_case");am=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(Ek,"pathToId");il=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(Rn,"transactional");a(An,"missingMethod");a(aN,"selectFromObject");a(cm,"transformForSelect")});function gk(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=Tk,Tue(e.primaryStore,e.auditStore)):(c=Sk,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{Rk(Sk[i])})));let l=c[i]||(c[i]=[]);l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now());let _=l[o];_||(_=l[o]=new Map,_.envs=l,_.tableId=o,_.store=e.primaryStore),t=Wc(t);let u=new lN(r);u.startTime=n;let d=_.get(t);return d?d.push(u):(_.set(t,d=[u]),d.tables=_,d.key=t),u.subscriptions=d,u}function Rk(e){if(!e)return;let t=e.auditStore;try{t.resetReadTxn()}catch(n){throw n.message+=" in "+path,n}let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=Kt(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l,_=Wc(i.recordId),u=0;do{let d=o.get(_);if(d){for(let f of d)if(!(u>0&&!(f.includeDescendants&&!(f.onlyChildren&&u>1)))){if(f.startTime>=n){(0,cN.info)("omitting",c,f.startTime,n);continue}try{let h;f.supportsTransactions&&f.txnInProgress!==i.version&&(h=!0,f.txnInProgress||(r?r.push(f):r=[f]),f.txnInProgress=i.version),f.listener(c,i,n,h)}catch(h){console.error(h),(0,cN.info)(h)}}}if(_==null)break;let E=_.lastIndexOf?.("/",_.length-2);E>-1?_=_.slice(0,E):_=null,u++}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function Tue(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let l=Tk[s];if(!l)return;let _=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now(),Rk(l),r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")},"acquiredLock");r.attemptLock("thread-local-writes",_)&&_()})}}var cN,Sk,Tk,lN,Ak=be(()=>{cN=x(k());nu();I_();no();Sk=Object.create(null),Tk=Object.create(null);a(gk,"addSubscription");lN=class extends ts{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(Rk,"notifyFromTransactionData");a(Tue,"listenToCommits")});var qO={};$e(qO,{coerceType:()=>lm,makeTable:()=>dm,setServerUtilities:()=>wue,updateResource:()=>um});function dm(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:_,dbisDB:u,sealed:d}=e,{expirationMS:E,evictionMS:f,audit:h,trackDeletes:m}=e,{attributes:S}=e;S||(S=[]);let g=KS(i,n,l),T=0,b,N,U={},v=Promise.resolve(),F,M,W;for(let Q of S)(Q.assignCreatedTime||Q.name==="__createdtime__")&&(F=Q),(Q.assignUpdatedTime||Q.name==="__updatedtime__")&&(M=Q),Q.expiresAt&&(W=Q),Q.isPrimaryKey&&(U=Q);let z,Z=[],ce=[],_e=1,de=2,xe={},we={},Ge=864e5,Wd,Qd,zi,_y=!1,Jm,Xm,lY=i.getRange({start:!1,end:!1}).constructor,uY=10,_Y=6;h&&Ey();class je extends tr{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=F;static updatedTimeProperty=M;static propertyResolvers;static sources=[];static get expirationMS(){return E}static dbisDB=u;static schemaDefined=_;static sourcedFrom(p,A){A&&(this.sourceOptions=A,(A.expiration||A.eviction||A.scanInterval)&&this.setTTLExpiration(A)),A?.intermediateSource?(p.intermediateSource=!0,this.sources.unshift(p)):this.sources.push(p),N=p.get&&(!p.get.reliesOnPrototype||p.prototype.get);let D=a(P=>{let y=this.sources.slice(0,-1);if(y=y.filter(B=>B[P]&&(!B[P].reliesOnPrototype||B.prototype[P])),y.length>0)if(y.length===1){let B=y[0];return(q,C,G)=>{if(q?.source!==B)return B[P](C,G,q)}}else return(B,q,C)=>{let G=[];for(let H of y){if(B?.source===H)break;G.push(H[P](q,C,B))}return Promise.all(G)}},"getApplyToIntermediateSource"),O=this.sources[this.sources.length-1],I=a(P=>{if(O[P]&&(!O[P].reliesOnPrototype||O.prototype[P]))return(y,B,q)=>{if(!y?.source)return O[P](B,q,y)}},"getApplyToCanonicalSource");return xe={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish")},we={put:D("put"),patch:D("patch"),delete:D("delete"),publish:D("publish"),invalidate:D("invalidate")},(async()=>{let P=!1,y=a(async(B,q)=>{let C=B.value,G=B.table?ft[c][B.table]:je;if(c===Rs.SYSTEM_SCHEMA_NAME&&(B.table===Rs.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||B.table===Rs.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(P=!0),B.id===void 0&&(B.id=C[G.primaryKey],B.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(B));B.source=p;let H=await G.getResource(B.id,q,yl);switch(B.type){case"put":return H._writeUpdate(C,!0,yl);case"patch":return H._writeUpdate(C,!1,yl);case"delete":return H._writeDelete(yl);case"publish":return H._writePublish(C,yl);case"invalidate":return H.invalidate(yl);default:ct.error("Unknown operation",B.type,B.id)}},"writeUpdate");try{let B=p.subscribe;B&&m==null&&(m=!0);let q=p.subscribeOnThisThread?p.subscribeOnThisThread((0,Wa.getWorkerIndex)()):(0,Wa.getWorkerIndex)()===0,C=B&&q&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let G;for await(let H of C)try{if(!(H.type==="transaction"?H.writes[0]:H)){ct.error("Bad subscription event",H);continue}if(H.source=p,G)if(H.beginTxn)G.resolve();else{y(H,G);continue}if(H.type==="end_txn")continue;let fe=it(H,()=>{if(H.type==="transaction"){let se=[];for(let Be of H.writes)try{se.push(y(Be,H))}catch(ue){throw ue.message+=" writing "+JSON.stringify(Be)+" of event "+JSON.stringify(H),ue}return Promise.all(se)}else if(H.type==="define_schema"){let se=this.attributes.slice(0),Be;for(let ue of H.attributes)se.find(Pe=>Pe.name===ue.name)||(se.push(ue),Be=!0);Be&&(St({table:s,database:c,attributes:se,origin:"cluster"}),Td.signalSchemaChange(new gd.SchemaEventMsg(process.pid,Rs.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return H.beginTxn?(G=H,y(H,H),new Promise(se=>{G.resolve=se})):y(H,H)});P&&(await fe,Td.signalUserChange(new gd.UserEventMsg(process.pid))),H.onCommit&&(fe?.then?fe.then(H.onCommit):H.onCommit())}catch(ee){ct.error("error in subscription handler",ee)}}}catch(B){ct.error(B)}})(),this}static get isCaching(){return N}static getResource(p,A,D){let O=super.getResource(p,A,D);if(p!=null){ql(p);try{if(O.hasOwnProperty(pe))return O;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let I=!D?.async||i.cache?.get(p),P=Zn(A),y=P.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Zm(p,A,{transaction:y},I,B=>{if(B?um(O,B):O[pe]=null,A.onlyIfCached&&A.noCacheStore){if(!O.doesExist())throw new jr.ServerError("Entry is not cached",504)}else if(D?.ensureLoaded){let q=eS(p,B,A,O);if(q)return P?.disregardReadTxn(),O[uN]=!0,dN(q,C=>(um(O,C),O))}return O})}catch(I){throw I.message.includes("Unable to serialize object")&&(I.message+=": "+JSON.stringify(p)),I}}return O}ensureLoaded(){let p=eS(this[Ue],this[Qr],this[Ie]);if(p)return this[uN]=!0,dN(p,A=>{this[Qr]=A,this[pe]=A.value,this[md]=A.version})}static setTTLExpiration(p){if(typeof p=="number")E=p*1e3,f||(f=0);else if(p&&typeof p=="object")E=p.expiration*1e3,f=(p.eviction||0)*1e3,Ge=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(E<0)throw new Error("Expiration can not be negative");Ge=Ge||(E+f)/4,Jd()}static enableAuditing(p=!0){h=p,p&&Ey(),je.audit=p}static coerceId(p){return p===""?null:lm(p,U)}static async dropTable(){if(delete ft[c][s],c===o){for(let p of S)u.remove(je.tableName+"/"+p.name),r[p.name]?.drop();u.remove(je.tableName+"/"),i.drop(),await u.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Td.signalSchemaChange(new gd.SchemaEventMsg(process.pid,Rs.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(p){if(typeof p=="string")return this.getProperty(p);if(this[Ts])return this.search(p);if(this[Ue]===null){if(p?.conditions)return this.search(p);let A=je.getRecordCount();return{recordCount:A.recordCount,estimatedRecordRange:A.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[Ie]?.returnNonexistent)return this}allowRead(p,A){let D=zd(p);if(D?.read){if(D.isSuperUser)return!0;let O=D.attribute_permissions,I=A?.select;if(O?.length>0||_y&&I){if(A||(A={}),I){let P=O?.length>0&&_N(O,"read");A.select=I.map(y=>{let B=y.name||y;if(!P||P[B]){let q=zi[B]?.definition?.tableClass;if(q){if(y.name||(y={name:y}),!q.prototype.allowRead.call(null,p,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else A.select=O.filter(P=>P.read&&!zi[P.attribute_name]).map(P=>P.attribute_name);return A}else return!0}}allowUpdate(p,A){let D=zd(p);if(D?.update){let O=D.attribute_permissions;if(O?.length>0){let I=_N(O,"update");for(let P in A)if(!I[P])return!1;for(let P of O){let y=P.attribute_name;!P.update&&!(y in A)&&(A[y]=this.getProperty(y))}}return!0}}allowCreate(p,A){if(this[Ts]){let D=zd(p);if(D?.insert){let O=D.attribute_permissions;if(O?.length>0){let I=_N(O,"insert");for(let P in A)if(!I[P])return!1}else return!0}}else return this.allowUpdate(p,{})}allowDelete(p){return zd(p)?.delete}update(p,A){if(!Zn(this[Ie]))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let O;return typeof p=="object"&&p&&(A?(Object.isFrozen(p)&&(p=Object.assign({},p)),this[pe]={},this[Pt]=p):(O=this[Pt],O&&(p=Object.assign(O,p)),this[Pt]=O=p)),this._writeUpdate(this[Pt],A),this}addTo(p,A){if(typeof A=="number"||typeof A=="bigint")this[fd]===bk?this.set(p,(+this.getProperty(p)||0)+A):(this[fd]||this.update(),this.set(p,new im(A)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,A){if(typeof A=="number")return this.addTo(p,-A);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this[Qr]}invalidate(p){let A=this[Ie],D=this[Ue];ql(D),Zn(this[Ie]).addWrite({key:D,store:i,invalidated:!0,entry:this[Qr],nodeName:this[Ie]?.nodeName,before:xe.invalidate?.bind(this,A,D),beforeIntermediate:we.invalidate?.bind(this,A,D),commit:(I,P)=>{if(P?.version>I)return;let y=null;for(let B in r)y||(y={}),y[B]=this.getProperty(B);g(D,y,this[Qr],I,Ed,h,this[Ie],0,"invalidate")}})}static evict(p,A,D){let O=this.Source,I;if(!((N||h)&&(!A||(I=i.getEntry(p),!I||!A)||I.version!==D))){if(N){if(i.hasLock(p,I.version))return;let P;for(let y in r)P||(P={}),P[y]=A[y];if(P)return g(p,P,I,D,hd,null,null,0,null,!0)}return i.ifVersion(p,D,()=>{jd(p,A,null)}),h?g(p,null,I,D,hd,null,null,0,null,!0):i.remove(p,D)}}lock(){throw new Error("Not yet implemented")}static operation(p,A){return p.table||=s,p.schema||=c,Pk.operation(p,A)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,A,D){let O=this[Ie],I=Zn(O),P=this[Ue];ql(P);let y=this[Qr];this[fd]=A?bk:Nue;let B={key:P,store:i,entry:y,nodeName:O?.nodeName,validate:q=>{p||(p=this[Pt]),A||p&&nm(this[Pt]===p?this:p)?O?.source||(I.checkOverloaded(),this.validate(p,!A),M&&(p[M.name]=M.type==="Date"?new Date(q):M.type==="String"?new Date(q).toISOString():q),A&&(t&&p[t]!==P&&(p[t]=P),F&&(y?.value?p[F.name]=y?.value[F.name]:p[F.name]=F.type==="Date"?new Date(q):F.type==="String"?new Date(q).toISOString():q),p=Ya(p))):I.removeWrite(B)},before:A?xe.put?()=>xe.put(O,P,p):null:xe.patch?()=>xe.patch(O,P,p):xe.put?()=>xe.put(O,P,Ya(this)):null,beforeIntermediate:A?we.put?()=>we.put(O,P,p):null:we.patch?()=>we.patch(O,P,p):we.put?()=>we.put(O,P,Ya(this)):null,commit:(q,C,G)=>{if(G){if(O&&C?.version>(O.lastModified||0)&&(O.lastModified=C.version),this[Qr]=C,C?.value?.[pe])throw new Error("Can not assign a record to a record, check for circular references");A||(this[pe]=C?.value??null)}this[Pt]=void 0,this[md]=q;let H=C?.value,ee=p;if(this[fd]=0,C?.version>=q)if(h){let ue=C.localTime,Pe=C.version;for(;ee&&(ue>q||Pe>=q&&ue>0);){let re=l.get(ue);if(!re)break;let J=Kt(re);if(Pe=J.version,Pe>q){if(J.type==="patch"){let ge=J.getValue(i);ee=tm(ee,ge)}else if(J.type==="put"||J.type==="delete")return}else if(Pe===q)return;ue=J.previousLocalTime}}else{if(A)return;ee=tm(ee,H)}let fe;if(A?fe=ee:(this[pe]=H,fe=A?ee:Ya(this,ee)),this[pe]=fe,fe?.[pe])throw new Error("Can not assign a record to a record, check for circular references");let se;A||(se=p),jd(P,H,fe);let Be=A?"put":"patch";g(P,fe,C,q,0,h,O,O.expiresAt||(E?E+Date.now():0),Be,!1,se),O.expiresAt&&Jd()}};I.addWrite(B)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[Ts]){for await(let A of this.search(p))(await je.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[pe]?this._writeDelete(p):!1}_writeDelete(p){let A=Zn(this[Ie]),D=this[Ue];ql(D);let O=this[Ie];return A.addWrite({key:D,store:i,resource:this,nodeName:O?.nodeName,before:xe.delete?.bind(this,O,D),beforeIntermediate:we.delete?.bind(this,O,D),commit:(I,P,y)=>{let B=P?.value;y&&(O&&P?.version>(O.lastModified||0)&&(O.lastModified=P.version),um(this,P)),!(P?.version>I)&&(jd(this[Ue],B),ct.trace("Write delete entry",D,I),h||m?(g(D,null,this[Qr],I,0,h,this[Ie],0,"delete"),h||Jd()):i.remove(this[Ue]))}}),!0}search(p){let A=this[Ie],D=Zn(A);if(!p)throw new Error("No query provided");let O=p.conditions;O?O.length===void 0&&(O=O[Symbol.iterator]?Array.from(O):[O]):O=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[Ue]&&(O=[{attribute:null,comparator:"prefix",value:this[Ue]}].concat(O));let I,P={};function y(J,ge){let qe;switch(ge){case"and":case void 0:if(J.length<1)throw new Error('An "and" operator requires at least one condition');qe=!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 Is=qe&&{},Ji;for(let ze of J){if(ze.conditions){ze.conditions=y(ze.conditions,ze.operator);continue}let Zt=ze[0]??ze.attribute,Ln=Zt==null?U:Mi(S,Zt);if(Ln){if(qe){let ws=hs(Zt),er=Is[ws];er?(er.push(ze),Ji=!0):Is[ws]=[ze]}(Ln.type||fO[ze.comparator])&&(ze[1]===void 0?ze.value=q(ze.value,Ln):ze[1]=q(ze[1],Ln))}else if(Zt!=null)throw(0,jr.handleHDBError)(new Error,`${Zt} is not a defined attribute`,404)}if(p.enforceExecutionOrder)return J;if(Ji)for(let ze in Is){let Zt=Is[ze],Ln=Zt.length;if(Ln>1)for(let ws=0;ws<Ln;ws++){let er=Zt[ws];if(er.comparator==="ge"||er.comparator==="greater_than_equal")for(let Xi=0;Xi<Ln;Xi++){let ac=Zt[Xi];(ac.comparator==="le"||ac.comparator==="less_than_equal")&&(er.comparator="between",er.value=[er.value,ac.value],J.splice(J.indexOf(ac),1))}if(er.comparator==="equals"||!er.comparator){for(let Xi=0;Xi<Ln;Xi++)if(Xi!==ws){let ac=Zt[Xi];J.splice(J.indexOf(ac),1)}break}}}return J}a(y,"prepareConditions");function B(J,ge){if(p.enforceExecutionOrder)return J;for(let qe of J)qe.conditions&&(qe.conditions=B(qe.conditions,qe.operator));return J.length>1&&ge!=="or"?(0,Dk.sortBy)(J,ep(je)):J}a(B,"orderConditions");function q(J,ge){return Array.isArray(J)?J.map(qe=>lm(qe,ge)):lm(J,ge)}a(q,"coerceTypedValues");let C=p.operator;(O.length>0||C)&&(O=y(O,C));let G=typeof p.sort=="object"&&p.sort,H;if(G&&C!=="or"){let J=G.attribute;if(J==null)throw new jr.ClientError("Sort requires an attribute");if(I=O.find(ge=>hs(ge.attribute)===hs(J)),!I){let ge=Mi(S,J);if(!ge)throw(0,jr.handleHDBError)(new Error,`${Array.isArray(J)?J.join("."):J} is not a defined attribute`,404);if(ge.indexed)I={attribute:J,comparator:"sort"},O.push(I);else if(O.length===0&&!p.allowFullScan)throw(0,jr.handleHDBError)(new Error,`${Array.isArray(J)?J.join("."):J} is not indexed and not combined with any other conditions`,404)}I&&(I.descending=!!G.descending)}O=B(O,C),G&&(I&&O[0]===I?G.next&&(H={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(I&&O.splice(O.indexOf(I),1),H=G));let ee=p.select;if(O.length===0&&(O=[{attribute:t,comparator:"greater_than",value:!0}]),p.explain)return{conditions:O,operator:C,postOrdering:H,selectApplied:!!ee};let fe=D.useReadTxn(),se=EO(O,C,je,fe,p,A,(J,ge)=>dy(J,ee,A,fe,ge),P),Be=p.ensureLoaded!==!1;H||(se=re(se));let ue=je.transformEntryForSelect(ee,A,fe,P,Be,!0),Pe=je.transformToOrderedSelect(se,ee,H,fe,A,ue);function re(J){return p.offset||p.limit!==void 0?J.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0):J}return a(re,"applyOffset"),H&&(Pe=re(Pe)),Pe.onDone=()=>{Pe.onDone=null,D.doneReadTxn()},Pe.selectApplied=!0,Pe.getColumns=()=>{if(ee){let J=[];for(let ge of ee)ge==="*"?J.push(...S.map(qe=>qe.name)):J.push(ge.name||ge);return J}return S.map(J=>J.name)},Pe}static transformToOrderedSelect(p,A,D,O,I,P){let y=new lY;if(D){p=dy(p,A,O,I,null);let B;y.iterate=function(){let C,G=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),H,ee=D.dbOrderedAttribute,fe,se,Be=!0;function ue(re){let J=re.next&&ue(re.next),ge=re.descending;return(qe,Is)=>{let Ji=tS(qe,re.attribute,O),ze=tS(Is,re.attribute,O),Zt=ge?(0,Qa.compareKeys)(ze,Ji):(0,Qa.compareKeys)(Ji,ze);return Zt===0?J?.(qe,Is)||0:Zt}}a(ue,"createComparator");let Pe=ue(D);return{async next(){let re;if(C)if(re=C.next(),re.done){if(H)return y.onDone&&y.onDone(),re}else return{value:await P.call(this,re.value)};B=[],fe&&B.push(fe);do if(re=await G.next(),re.done){if(H=!0,B.length)break;return y.onDone&&y.onDone(),re}else{let J=re.value;if(J?.then&&(J=await J),ee){let ge=tS(J,ee,O);if(Be)Be=!1,se=ge;else if(ge!==se){se=ge,fe=J;break}}B.push(J)}while(!0);return D.isGrouped,B.sort(Pe),C=B[Symbol.iterator](),re=C.next(),re.done?(y.onDone&&y.onDone(),re):{value:await P.call(this,re.value)}},return(){y.onDone&&y.onDone(),G.return()},throw(){y.onDone&&y.onDone(),G.throw()}}};let q=a(C=>{if(typeof A=="object"&&Array.isArray(C.attribute))for(let G=0;G<A.length;G++){let H=A[G],ee;if(H.name===C.attribute[0]){for(ee=H.sort||(H.sort={});ee.next;)ee=ee.next;ee.attribute=C.attribute.slice(1),ee.descending=C.descending}else H===C.attribute[0]&&(A[G]=ee={name:H,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&q(C.next)},"applySortingOnSelect");q(D)}else y.iterate=(p[Symbol.asyncIterator]||p[Symbol.iterator]).bind(p),y=y.map(P);return y}static transformEntryForSelect(p,A,D,O,I,P){if(p&&(p===t||p?.length===1&&p[0]===t)){let C=a(G=>(A?.transaction?.stale&&(A.transaction.stale=!1),G?.key??G),"transform");return p===t?C:p.asArray?G=>[C(G)]:G=>({[t]:C(G)})}let y;I&&N&&!p?.every(C=>{let G;return typeof C=="object"?G=C.name:G=C,r[G]||G===t})&&(y=!0);let B,q=a(function(C){let G;if(A?.transaction?.stale&&(A.transaction.stale=!1),C!=null){if(Jm=C,G=C.value||C.deref?.(),!G&&(C.key===void 0||C.deref)){if(C=Zm(C.key??C,A,{transaction:D,lazy:p?.length<4},this?.isSync,H=>H),C?.then)return C.then(q.bind(this));G=C?.value}if(y&&C?.metadataFlags&(Ed|hd)||C?.expiresAt&&C?.expiresAt<Date.now()){if(A.onlyIfCached&&A.noCacheStore)return{[t]:C.key,message:"This entry has expired"};let H=eS(C.key??C,C,A);if(H?.then)return H.then(q)}}if(G==null)return P?Ka.SKIP:G;if(p&&!(p[0]==="*"&&p.length===1)){let H,ee=a((se,Be)=>{let ue;typeof se=="object"?ue=se.name:ue=se;let Pe=zi?.[ue],re;if(Pe){let J=O?.[ue];if(J)if(J.hasMappings){let qe=Pe.from?G[Pe.from]:hs(C.key);re=J.get(qe),re||(re=[])}else re=J.fromRecord?.(G);else re=Pe(G,A,C);let ge=a(qe=>{if(qe&&typeof qe=="object"){let Is=Pe.definition?.tableClass||je;B||(B={});let Ji=B[ue]||(B[ue]=Is.transformEntryForSelect(ue===se?null:se.select||(Array.isArray(se)?se:null),A,D,J,I));if(Array.isArray(qe)){let ze=[],Zt=Is.transformToOrderedSelect(qe,se.select,typeof se.sort=="object"&&se.sort,A,D,Ji)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Ln=a(er=>{for(;!er.done;){if(er?.then)return er.then(Ln);ze.push(er.value),er=Zt.next()}Be(ze,ue)},"nextValue"),ws=Ln(Zt.next());ws&&(H||(H=[]),H.push(ws));return}else if(qe=Ji.call(this,qe),qe?.then){H||(H=[]),H.push(qe.then(ze=>Be(ze,ue)));return}}Be(qe,ue)},"handleResolvedValue");re?.then?(H||(H=[]),H.push(re.then(ge))):ge(re);return}else re=G[ue],re&&typeof re=="object"&&ue!==se&&(re=je.transformEntryForSelect(se.select||se,A,D,null)({value:re}));Be(re,ue)},"selectAttribute"),fe;if(typeof p=="string")ee(p,se=>{fe=se});else if(Array.isArray(p))if(p.asArray)fe=[],p.forEach((se,Be)=>{se==="*"?p[Be]=G:ee(se,ue=>fe[Be]=ue)});else{fe={};let se=p.forceNulls;for(let Be of p)if(Be==="*")for(let ue in G)fe[ue]=G[ue];else ee(Be,(ue,Pe)=>{ue===void 0&&se&&(ue=null),fe[Pe]=ue})}else throw new jr.ClientError("Invalid select"+p);return H?Promise.all(H).then(()=>fe):fe}return G},"transform");return q}async subscribe(p){if(!l)throw new Error("Can not subscribe to a table without an audit log");h||St({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),p||(p={});let A=!p.rawEvents,D=[],O=gk(je,this[Ue]??null,function(P,y,B,q){try{let C=y.getValue?.(i,A);if(!C&&y.type==="patch"&&A){let H=i.getEntry(P);H?.version===y.version?C=H.value:C=y.getValue?.(i,!0,B),y.type="put"}let G={id:P,timestamp:B,value:C,version:y.version,type:y.type,beginTxn:q};D?D.push(G):this.send(G)}catch(C){ct.error(C)}},p.startTime||0,p),I=(async()=>{this[Ts]&&(O.includeDescendants=!0,p.onlyChildren&&(O.onlyChildren=!0)),p.supportsTransactions&&(O.supportsTransactions=!0);let P=this[Ue],y=p.previousCount;y>1e3&&(y=1e3);let B=p.startTime;if(this[Ts]){if(B){if(y)throw new jr.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:q,value:C}of l.getRange({start:B,exclusiveStart:!0,snapshot:!1})){let G=Kt(C);if(G.tableId!==n)continue;let H=G.recordId;if(P==null||wk(P,H)){let ee=G.getValue(i,A,q);if(O.send({id:H,timestamp:q,value:ee,version:G.version,type:G.type}),O.queue?.length>yk&&await O.waitForDrain()===!1)return}O.startTime=q}}else if(y){let q=[];for(let{key:C,value:G}of l.getRange({start:"z",end:!1,reverse:!0}))try{let H=Kt(G);if(H.tableId!==n)continue;let ee=H.recordId;if(P==null||wk(P,ee)){let fe=H.getValue(i,A,C);if(q.push({id:ee,timestamp:C,value:fe,version:H.version,type:H.type}),--y<=0)break}}catch(H){ct.error("Error getting history entry",C,H)}for(let C=q.length;C>0;)O.send(q[--C]);q[0]&&(O.startTime=q[0].timestamp)}else if(!p.omitCurrent){for(let{key:q,value:C,version:G,localTime:H}of i.getRange({start:P??!1,end:P==null?void 0:[P,Qa.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(C&&(O.send({id:q,timestamp:H,value:C,version:G,type:"put"}),O.queue?.length>yk&&await O.waitForDrain()===!1))return}}else{y&&!B&&(B=0);let q=this[Qr]?.localTime;if(q===YS&&(i.cache?.delete(P),this[Qr]=i.getEntry(P),ct.trace("re-retrieved record",q,this[Qr]?.localTime),q=this[Qr]?.localTime),ct.trace("Subscription from",B,"from",P,q),B<q){let C=[],G=q;do{let H=l.get(G);if(H){p.omitCurrent=!0;let ee=Kt(H),fe=ee.getValue(i,A,G);A&&(ee.type="put"),C.push({id:P,value:fe,timestamp:G,...ee}),G=ee.previousLocalTime}else break;y&&y--}while(G>B&&y!==0);for(let H=C.length;H>0;)O.send(C[--H]);O.startTime=q}!p.omitCurrent&&this.doesExist()&&O.send({id:P,timestamp:q,value:this[pe],version:this[md],type:"put"})}for(let q of D)O.send(q);D=null})();return p.listener&&O.on("data",p.listener),O}doesExist(){return!!(this[pe]||this[fd])}publish(p,A){this._writePublish(p,A)}_writePublish(p,A){let D=Zn(this[Ie]),O=this[Ue]||null;ql(O);let I=this[Ie];D.addWrite({key:O,store:i,entry:this[Qr],nodeName:I?.nodeName,validate:()=>{I?.source||(D.checkOverloaded(),this.validate(p))},before:xe.publish?.bind(this,I,O,p),beforeIntermediate:we.publish?.bind(this,I,O,p),commit:(P,y,B)=>{y===void 0&&m&&!h&&Jd(),g(O,y?.value??null,y,y?.version||P,0,!0,I,y?.expiresAt,"message",!1,p)}})}validate(p,A){let D,O=a((I,P,y)=>{if(P.type&&I!=null)if(A&&I.__op__&&(I=I.value),P.properties){typeof I!="object"&&(D||(D=[])).push(`Value ${gs(I)} in property ${y} must be an object${P.type?" ("+P.type+")":""}`);let B=P.properties;for(let q=0,C=B.length;q<C;q++){let G=B[q],H=O(I[G.name],G,y+"."+G.name);H&&(I[G.name]=H)}if(P.sealed&&I!=null&&typeof I=="object")for(let q in I)B.find(C=>C.name===q)||(D||(D=[])).push(`Property ${q} is not allowed within object in property ${y}`)}else switch(P.type){case"Int":(typeof I!="number"||I>>0!==I)&&(D||(D=[])).push(`Value ${gs(I)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof I!="number"||!(Math.floor(I)===I&&Math.abs(I)<=9007199254740992))&&(D||(D=[])).push(`Value ${gs(I)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof I!="number"&&(D||(D=[])).push(`Value ${gs(I)} in property ${y} must be a number`);break;case"ID":typeof I=="string"||I?.length>0&&I.every?.(B=>typeof B=="string")||(D||(D=[])).push(`Value ${gs(I)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof I!="string"&&(D||(D=[])).push(`Value ${gs(I)} in property ${y} must be a string`);break;case"Boolean":typeof I!="boolean"&&(D||(D=[])).push(`Value ${gs(I)} in property ${y} must be a boolean`);break;case"Date":if(!(I instanceof Date)){if(typeof I=="string"||typeof I=="number")return new Date(I);(D||(D=[])).push(`Value ${gs(I)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof I!="bigint"){if(typeof I=="string"||typeof I=="number")return BigInt(I);(D||(D=[])).push(`Value ${gs(I)} in property ${y} must be a bigint`)}break;case"Bytes":I instanceof Uint8Array||(D||(D=[])).push(`Value ${gs(I)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(I)){if(P.elements)for(let B=0,q=I.length;B<q;B++){let C=I[B],G=O(C,P.elements,y+"[*]");G&&(I[B]=G)}}else(D||(D=[])).push(`Value ${gs(I)} in property ${y} must be a Buffer or Uint8Array`);break}P.nullable===!1&&I==null&&(D||(D=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let I=0,P=S.length;I<P;I++){let y=S[I];if(!y.relationship&&(!A||y.name in p)){let B=O(p[y.name],y,y.name);B&&(p[y.name]=B)}}if(d)for(let I in p)S.find(P=>P.name===I)||(D||(D=[])).push(`Property ${I} is not allowed`);if(D)throw new jr.ClientError(D.join(". "))}getUpdatedTime(){return this[md]}wasLoadedFromSource(){return N?!!this[uN]:void 0}static async addAttributes(p){let A=S.slice(0);for(let D of p){if(!D.name)throw new jr.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new jr.ClientError("Attribute names cannot include backticks or forward slashes");(0,Lk.validateAttribute)(D.name),A.push(D)}return St({table:s,database:c,schemaDefined:_,attributes:A}),je.indexingOperation}static async removeAttributes(p){let A=S.filter(D=>!p.includes(D.name));return St({table:s,database:c,schemaDefined:_,attributes:A}),je.indexingOperation}static getRecordCount(p){let A=i.getStats().entryCount,D=1e3/2,O=performance.now(),I=Math.floor(A/2),P=p?.exactCount,y=0,B=0,q;for(let{value:C}of i.getRange({start:!0,lazy:!0}))if(C!=null&&y++,B++,!P&&B<I&&performance.now()-O>D){q=B;break}if(q){let C=y;y=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:q}))re!=null&&y++;let G=q*2,H=(y+C)/G,ee=Math.pow((y-C+1)/q/2,2)+H*(1-H)/G,fe=Math.max(Math.sqrt(ee)*A,1),se=Math.round(H*A),Be=Math.max(se-1.96*fe,y+C),ue=Math.min(se+1.96*fe,A),Pe=Math.pow(10,Math.round(Math.log10(fe)));return Pe>se&&(Pe=Pe/10),y=Math.round(se/Pe)*Pe,{recordCount:y,estimatedRange:[Math.round(Be),Math.round(ue)]}}return{recordCount:y}}static updatedAttributes(){zi=this.propertyResolvers={$id:(p,A,D)=>({value:D.key}),$updatedtime:(p,A,D)=>D.version,$record:(p,A,D)=>D?{value:p}:p};for(let p of this.attributes){p.resolve=null;let A=p.relationship;if(A)if(p.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),_y=!0,A.to)p.elements?.definition?(zi[p.name]=p.resolve=(D,O,I)=>{let P=D[A.from?A.from:t],y=p.elements.definition.tableClass;return I?sl({attribute:A.to,value:P},Zn(O).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:A.to,value:P}],O).asArray},p.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},p.resolve.definition=p.elements.definition,A.from&&(p.resolve.from=A.from)):console.error(`The one-to-many/many-to-many relationship property "${p.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(A.from){let D=p.definition||p.elements?.definition;D?(zi[p.name]=p.resolve=(O,I,P)=>{let y=O[A.from];if(y!==void 0){if(p.elements){let B,q=y.map(C=>{let G=P?D.tableClass.primaryStore.getEntry(C,{transaction:Zn(I).getReadTxn()}):D.tableClass.get(C,I);return G?.then&&(B=!0),G});return A.filterMissing?B?Promise.all(q).then(C=>C.filter(Ck)):q.filter(Ck):B?Promise.all(q):q}return P?D.tableClass.primaryStore.getEntry(y,{transaction:Zn(I).getReadTxn()}):D.tableClass.get(y,I)}},p.set=(O,I)=>{if(Array.isArray(I)){let P=I.map(y=>y[Ue]||y[D.tableClass.primaryKey]);O[A.from]=P}else{let P=I[Ue]||I[D.tableClass.primaryKey];O[A.from]=P}},p.resolve.definition=p.definition||p.elements?.definition,p.resolve.from=A.from):console.error(`The relationship property "${p.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${p.name}" in table "${s}" must use either "from" or "to" arguments`)}om(this,this)}static async deleteHistory(p=0){let A;for(let{key:D,value:O}of l.getRange({start:0,end:p}))await pd(),Kt(O).tableId===n&&(A=l.remove(D));await A}static async*getHistory(p=0,A=1/0){for(let{key:D,value:O}of l.getRange({start:p,end:A})){await pd();let I=Kt(O);I.tableId===n&&(yield{id:I.recordId,localTime:D,version:I.version,type:I.type,value:I.getValue(i,!0,D),user:I.user})}}static async getHistoryOfRecord(p){let A=[];if(p==null)throw new Error("An id is required");let D=i.getEntry(p);if(!D)return A;let O=D.localTime;if(!O)throw new Error("The entry does not have a local audit time");let I=0;do{await pd();let P=l.get(O);if(P){let y=Kt(P);A.push({id:y.recordId,localTime:O,version:y.version,type:y.type,value:y.getValue(i,!0,O),user:y.user}),O=y.previousLocalTime}else break}while(I<1e3&&O);return A.reverse()}static cleanup(){z?.remove()}}je.updatedAttributes();let dY=je.prototype;return dY[bue]=!0,E&&je.setTTLExpiration(E/1e3),W&&fY(),je;function jd(Q,p,A){let D;for(let O in r){let I=r[O],P=I.isIndexing,y=A?.[O],B=p?.[O];if(y===B&&!P)continue;D=!0;let q=I.indexNulls,C=(0,Sd.getIndexedValues)(y,q),G=(0,Sd.getIndexedValues)(B,q);if(G?.length>0){let H=new Set(G);if(C=C?C.filter(ee=>{if(H.has(ee))H.delete(ee);else return!0}):[],G=Array.from(H),(G.length>0||C.length>0)&&Ok){let ee=G.concat(C).map(fe=>({key:fe,value:Q}));I.prefetch(ee,Ik)}for(let ee=0,fe=G.length;ee<fe;ee++)I.remove(G[ee],Q)}else C?.length>0&&Ok&&I.prefetch(C.map(H=>({key:H,value:Q})),Ik);if(C)for(let H=0,ee=C.length;H<ee;H++)I.put(C[H],Q)}return D}a(jd,"updateIndices");function ql(Q){switch(typeof Q){case"number":return!0;case"string":if(Q.length<659)return!0;if(Q.length>Nk)throw new Error("Primary key size is too large: "+Q.length);break;case"object":if(Q===null)return!0;break;case"bigint":if(Q<2n**64n&&Q>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof Q)}if((0,Qa.writeKey)(Q,yue,0)>Nk)throw new Error("Primary key size is too large: "+Q.length);return!0}a(ql,"checkValidId");function Zm(Q,p,A,D,O){let I=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),A.transaction?.isDone)return O(null,Q);let P=i.getEntry(Q,A);return P&&p&&(P?.version>(p.lastModified||0)&&(p.lastModified=P.version),P?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=P.localTime)),O(P,Q)},"whenPrefetched");return D?I():_e>0?(_e--,I()):new Promise((P,y)=>{_e===0?(_e--,i.prefetch([Q],()=>{B(),q()})):(Z.push(Q),ce.push(q),Z.length>_Y&&(_e--,B()));function B(){if(Z.length>0){let C=ce;i.prefetch(Z,()=>{_e===-1?B():_e++;for(let G of C)G()}),Z=[],ce=[],de>2&&de--}else _e=de,de<uY&&de++}a(B,"prefetch");function q(){try{P(I())}catch(C){y(C)}}a(q,"load")})}a(Zm,"loadLocalRecord");function zd(Q){if(!Q?.role)return;let p=Q.role.permission;if(p.super_user)return Iue;let A=p[c],D,O=A?.tables;if(O)return O[s];if(c==="data"&&(D=p[s])&&!D.tables)return D}a(zd,"getTablePermissions");function eS(Q,p,A,D){if(N){let O;if(A.noCache?O=!0:(p?(!p.value||p.metadataFlags&(Ed|hd)||p.expiresAt&&p.expiresAt<Date.now())&&(O=!0):O=!0,En(!O,"cache-hit",s)),O){let I=fy(Q,p,A).then(P=>(P?.value?.[pe]&&ct.error("Can not assign a record with a record property"),A&&(P?.version>(A.lastModified||0)&&(A.lastModified=P.version),A.lastRefreshed=Date.now()),P));if(A?.onlyIfCached||p?.value&&D?.allowStaleWhileRevalidate?.(p,Q)){if(I.catch(P=>ct.warn(P)),A?.onlyIfCached&&!D.doesExist())throw new jr.ServerError("Entry is not cached",504);return}else return I}}else if(p?.value&&p.expiresAt&&p.expiresAt<Date.now())return je.evict(p.key,p.value,p.version),p.value=null,{then(O){return O(p)}}}a(eS,"ensureLoadedFromSource");function Zn(Q){let p=Q?.transaction;if(p){if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let A=p.next;if(!A)return p=p.next=new Ea,p.lmdbDb=i,p;p=A}while(!0)}else return new lE}a(Zn,"txnForContext");function tS(Q,p,A){if(!Q)return;Jm=Q;let D=Q.value||Q.deref?.()||(Jm=i.getEntry(Q.key))?.value;if(typeof p=="object"){let I=zi,P=D;for(let y=0,B=p.length;y<B;y++){let q=p[y],C=I?.[q];P=C&&P?C(P,A,!0)?.value:P?.[q],I=C?.definition?.tableClass?.propertyResolvers}return P}let O=zi[p];return O?O(D,A):D[p]}a(tS,"getAttributeValue");function dy(Q,p,A,D,O){let I=O?.length,P={transaction:D,lazy:I>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},y;function B(q,C){let G=q?.value;if(!G)return Ka.SKIP;for(let H=0;H<I;H++)if(!y?.includes(H)&&!O[H](G,q))return Ka.SKIP;return C!==void 0&&(q.key=C),q}if(a(B,"processEntry"),I>0||!Q.hasEntries){let q=Q.map(C=>{if(y=null,typeof C=="object"&&C?.key!==void 0)return I>0?B(C):C;if(C==null)return Ka.SKIP;for(let G=0;G<I;G++){let ee=O[G].idFilter;if(ee){if(!ee(C))return Ka.SKIP;y||(y=[]),y.push(G)}}return Zm(C,A,P,!1,B)});return Array.isArray(Q)&&(q=q.filter(C=>C!==Ka.SKIP)),q.hasEntries=!0,q}return Q}a(dy,"transformToEntries");async function fy(Q,p,A){let D=p?.metadataFlags,O=p?.version,I,P;if(!i.attemptLock(Q,O,()=>{clearTimeout(P);let C=i.getEntry(Q);!C||!C.value||C.metadataFlags&(Ed|hd)?I(fy(Q,i.getEntry(Q),A)):I(C)}))return new Promise(C=>{I=C,P=setTimeout(()=>{i.unlock(Q,O)},Oue)});let y=p?.value,B={requestContext:A,replacingRecord:y,replacingVersion:O,noCacheStore:!1,source:null,resourceCache:A?.resourceCache},q=A?.responseHeaders;return new Promise((C,G)=>{let H;dN(it(B,async ee=>{let fe=performance.now(),se,Be,ue;try{for(let ge of je.sources)if(ge.get&&(!ge.get.reliesOnPrototype||ge.prototype.get)&&(B.source=ge,se=await ge.get(Q,B),se))break;ue=D&Ed;let re=B.lastModified||ue&&O;Be=ue||re>O||!y,re||(re=(0,Sd.getNextMonotonicTime)());let J=performance.now()-fe;if(hr(J,"cache-resolution",s,null,"success"),q&&wh(q,"Server-Timing",`cache-resolve;dur=${J.toFixed(2)}`,!0),ee.timestamp=re,E&&!B.expiresAt&&(B.expiresAt=Date.now()+E),se){if(typeof se!="object")throw new Error("Only objects can be cached and stored in tables");typeof se.toJSON=="function"&&(se=se.toJSON()),t&&se[t]!==Q&&(se[t]=Q)}H=!0,C({version:re,value:se})}catch(re){re.message+=` while resolving record ${Q} for ${s}`,y&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(C({version:O,value:y}),ct.trace(re.message,"(returned stale record)")):G(re);let J=performance.now()-fe;hr(J,"cache-resolution",s,null,"fail"),q&&wh(q,"Server-Timing",`cache-resolve;dur=${J.toFixed(2)}`,!0),B.transaction.abort();return}if(A?.noCacheStore||B.noCacheStore){B.transaction.abort();return}Zn(B).addWrite({key:Q,store:i,entry:p,nodeName:"source",commit:(re,J)=>{if(J?.version!==O)return;let ge=jd(Q,y,se);se?(we.put?.(B,Q,se),g(Q,se,J,re,0,h&&Be||null,B,B.expiresAt,"put",!!ue)):(we.delete?.(B,Q),h||m?g(Q,null,J,re,0,h&&Be||null,B,0,"delete",!!ue):i.remove(Q,O))}})}),()=>{i.unlock(Q,O)},ee=>{i.unlock(Q,O),H&&ct.error("Error committing cache update",ee)})})}a(fy,"getFromSource");function Jd(){if(Ge!==Wd&&(Wd=Ge,(0,Wa.getWorkerIndex)()===(0,Wa.getWorkerCount)()-1)){if(Qd&&clearTimeout(Qd),!Ge)return;let Q=new Date;Q.setMonth(0),Q.setDate(1),Q.setHours(0),Q.setMinutes(0),Q.setSeconds(0);let p=Math.ceil((Date.now()-Q.getTime())/Ge)*Ge+Q.getTime(),A=a(D=>{ct.trace(`Scheduled next cleanup scan at ${new Date(D)}ms`),Qd=setTimeout(()=>v=v.then(async()=>{if(A(Math.max(D+Ge,Date.now())),i.rootStore.status!=="open"){clearTimeout(Qd);return}let O=50,I=new Array(O),P=0;ct.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:B,value:q,version:C,expiresAt:G}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let H;q===null&&!h&&C+Aue<Date.now()?H=i.remove(B,C):G&&G+f<Date.now()&&(H=je.evict(B,q,C),y++),H&&(await I[P],I[P]=H.catch(ee=>{ct.error("Cleanup error",ee)}),++P>=O&&(P=0)),await pd()}ct.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){ct.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");A(p)}}a(Jd,"scheduleCleanup");function Ey(){z=l?.addDeleteRemovalCallback(n,Q=>{let p=i.getEntry(Q);p?.value===null&&i.remove(Q,p.version)})}a(Ey,"addDeleteRemoval");function fY(){(0,Wa.getWorkerIndex)()===0&&setInterval(async()=>{if(!Xm){Xm=!0;try{let Q=W.name,p=r[Q];if(!p)throw new Error(`expiresAt attribute ${W} must be indexed`);for(let A of p.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let D of p.getValues(A)){let O=i.getEntry(D);O?.value?O.value[Q]<Date.now()&&je.evict(D,O.value,O.version):i.ifVersion(D,O?.version,()=>p.remove(A,D))}await pd()}}catch(Q){ct.error("Error in evicting old records",Q)}finally{Xm=!1}}},Rue).unref()}a(fY,"runRecordExpirationEviction")}function _N(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function Ik(){}function wue(e){Pk=e}function lm(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;switch(r){case"Int":case"Long":return e==="null"?null:parseInt(e);case"Float":return e==="null"?null:parseFloat(e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":return isNaN(e)?e==="null"?null:(Cue.test(e)||(e+="Z"),new Date(e)):new Date(+e);case void 0:case"Any":return(0,_m.autoCast)(e);default:return e}}function wk(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function dN(e,t,r){return e?.then?e.then(t,r):t(e)}function um(e,t){e[Qr]=t,e[pe]=t?.value??null,e[md]=t?.version}function Ck(e){return e!=null}function gs(e){try{return JSON.stringify(e)}catch{return e}}var Rs,Ka,Sd,Dk,Lk,Rd,jr,Td,gd,ct,Qa,Wa,_m,gue,Pk,Rue,Aue,Ok,Oue,md,bue,Qr,fd,bk,Nue,uN,yl,Ed,hd,yue,Nk,yk,Iue,tIe,Cue,pd,pp=be(()=>{Rs=x(L()),Ka=require("lmdb"),Sd=x(wr()),Dk=require("lodash"),Lk=x(ru());Mn();Bg();Rd=x(X());Ak();jr=x(ie()),Td=x(hi()),gd=x(os());Re();rp();ct=x(k());dE();ha();Qa=require("ordered-binary"),Wa=x(rt());no();_m=x(Y());uu();Ti();Zp();w_();gue=new Uint8Array(9);gue[8]=192;Rue=6e4,Aue=864e5;Rd.initSync();Ok=Rd.get(Rs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Oue=1e4,md=Symbol.for("version"),bue=Symbol.for("incremental-update"),Qr=Symbol("entry"),fd=Symbol("is-saving"),bk=1,Nue=2,uN=Symbol("loaded-from-source"),yl={isNotification:!0,ensureLoaded:!1},Ed=1,hd=8,yue=Buffer.allocUnsafeSlow(8192),Nk=1978,yk=100,Iue={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},tIe=(0,_m.convertToMS)(Rd.get(Rs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(dm,"makeTable");a(_N,"attributesAsObject");a(Ik,"noop");a(wue,"setServerUtilities");Cue=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(lm,"coerceType");a(wk,"isDescendantId");pd=a(()=>new Promise(setImmediate),"rest");a(dN,"when");a(um,"updateResource");a(Ck,"exists");a(gs,"stringify")});var Ve={};$e(Ve,{database:()=>Ic,databases:()=>ft,dropDatabase:()=>Fg,dropTableMeta:()=>Uue,getDatabases:()=>Br,getDefaultCompression:()=>Oh,getTables:()=>Due,onUpdatedTable:()=>Pb,readMetaDb:()=>Ad,resetDatabases:()=>R_,table:()=>St,tables:()=>sn});function Due(){return mm||Br(),sn||{}}function Br(){if(mm)return ft;mm=!0,Cl=new Map;let e=(0,Ot.getHdbBasePath)()&&(0,lt.join)((0,Ot.getHdbBasePath)(),Vt.DATABASES_DIR_NAME),t=(0,Ot.get)(Vt.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Ot.get)(Vt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,On.existsSync)(e)?e:(0,lt.join)((0,Ot.getHdbBasePath)(),Vt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,On.existsSync)(e))for(let r of(0,On.readdirSync)(e,{withFileTypes:!0})){let n=(0,lt.basename)(r.name,".mdb");r.isFile()&&(0,lt.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Ad((0,lt.join)(e,r.name),null,n)}if((0,On.existsSync)((0,wl.getBaseSchemaPath)())){for(let r of(0,On.readdirSync)((0,wl.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,lt.join)((0,wl.getBaseSchemaPath)(),r.name),s=(0,lt.join)((0,wl.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,On.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,lt.extname)(i.name).toLowerCase()===".mdb"){let o=(0,lt.join)(s,i.name);Ad((0,lt.join)(n,i.name),(0,lt.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,On.existsSync)(s))for(let o of(0,On.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,lt.extname)(o.name).toLowerCase()===".mdb"&&Ad((0,lt.join)(s,o.name),(0,lt.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,lt.join)(c.path,(0,lt.basename)(o+".mdb"));(0,On.existsSync)(l)&&Ad(l,o,r,null,!0)}}for(let r in ft){let n=Cl.get(r);if(n){let s=ft[r];r.includes("delete")&&jn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(jn.trace(`delete table class ${i}`),delete s[i])}else if(delete ft[r],r==="data"){for(let s in sn)delete sn[s];delete sn[Sm]}}return Cl=null,ft}}function R_(){mm=!1;for(let[,e]of Bo)e.needsDeletion=!0;Br();for(let[e,t]of Bo)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Bo.delete(e));return ft}function Ad(e,t,r=hN,n,s){let i=new fN.default(e,!1);try{let o=Bo.get(e);o?o.needsDeletion=!1:(o=(0,Em.open)(i),Bo.set(e,o));let c=new ja.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(fm.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,On.existsSync)(n)&&(i.path=n,_=(0,Em.open)(i),_.isLegacy=!0):_=Xp(o));let u=Bk(r),d=u[Sm],E=new Map;for(let{key:f,value:h}of l.getRange({start:!1})){let[m,S]=f.toString().split("/");S===""?S=h.name:S||(S=m,m=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(m);let g=E.get(m);g||E.set(m,g={attributes:[]}),(S==null||h.is_hash_attribute)&&(g.primary=h),S!=null&&g.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:m,primary:S}=h;if(!S){for(let Z of m)if(Z.is_hash_attribute||Z.isPrimaryKey){S=Z;break}if(!S){jn.warn(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(m)}`);continue}}let g=u[f],T={},b=[],N,U,v=typeof S.audit=="boolean"?S.audit:(0,Ot.get)(Vt.CONFIG_PARAMS.LOGGING_AUDITLOG),F=S.trackDeletes,M=S.expiration,W=S.eviction,z=S.sealed;if(g)T=g.indices,b=g.attributes,g.schemaVersion++;else{N=S.tableId,N?N>=(l.get(Il)||0)&&l.putSync(Il,N+1):(S.tableId=N=l.get(Il),N||(N=1),l.putSync(Il,N+1),l.putSync(S.key,S));let Z=new ja.default(!S.is_hash_attribute,S.is_hash_attribute);if(Z.compression=S.compression,Z.compression){let ce=(0,Ot.get)(Vt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||vk;Z.compression.threshold=ce}U=Rf(o.openDB(S.key,Z)),U.rootStore=o,U.tableId=N}for(let Z of m){Z.attribute=Z.name;try{if(!Z.is_hash_attribute&&(Z.indexed||Z.attribute&&!Z.name)){if(!T[Z.name]){let _e=new ja.default(!Z.is_hash_attribute,Z.is_hash_attribute);T[Z.name]=o.openDB(Z.key,_e),T[Z.name].indexNulls=Z.indexNulls}let ce=b.find(_e=>_e.name===Z.name);ce?b.splice(b.indexOf(ce),1,Z):b.push(Z)}}catch(ce){jn.error("Error trying to update attribute",Z,b,T,ce)}}if(!g){g=Hk(u,f,dm({primaryStore:U,auditStore:_,audit:v,sealed:z,expirationMS:M&&M*1e3,evictionMS:W&&W*1e3,trackDeletes:F,tableName:f,tableId:N,primaryKey:S.name,databasePath:s?r+"/"+f:r,databaseName:r,indices:T,attributes:m,schemaDefined:S.schemaDefined,dbisDB:l})),g.schemaVersion=1;for(let Z of pN)Z(g)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Bk(e){let t=ft[e];if(t||(e==="data"?t=ft[e]=sn:e==="system"?Object.defineProperty(ft,"system",{value:t=Object.create(null),configurable:!0}):t=ft[e]=Object.create(null)),Cl&&!Cl.has(e)){let r=new Set;t[Sm]=r,Cl.set(e,r)}return t}function Hk(e,t,r){return e[t]=r,r}function Ic({database:e,table:t}){e||(e=hN),Br();let r=Bk(e),n=(0,lt.join)((0,Ot.getHdbBasePath)(),Vt.DATABASES_DIR_NAME),s=(0,Ot.get)(Vt.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,Ot.get)(Vt.CONFIG_PARAMS.STORAGE_PATH)||((0,On.existsSync)(n)?n:(0,lt.join)((0,Ot.getHdbBasePath)(),Vt.LEGACY_DATABASES_DIR_NAME));let o=(0,lt.join)(n,(i?t:e)+".mdb"),c=Bo.get(o);if(!c){let l=new fN.default(o,!1);c=(0,Em.open)(l),Bo.set(o,c)}return c}async function Fg(e){if(!ft[e])throw new Error("Schema does not exist");let t=ft[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Bo.delete(r.path),r.status==="open"&&(await r.close(),await Od.remove(r.path));if(r||(r=Ic({database:e,table:null}),r.status==="open"&&(await r.close(),await Od.remove(r.path))),e==="data"){for(let n in sn)delete sn[n];delete sn[Sm]}delete ft[e]}function St({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:l,schemaDefined:_,origin:u}){t||(t=hN);let d=Ic({database:t,table:e}),E=ft[t],f=E?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,m,S,g;_==null&&(_=!0);let T=new ja.default(!1);for(let M of i)M.attribute&&!M.name?(M.name=M.attribute,M.indexed=!0):M.attribute=M.name,M.expiresAt&&(M.indexed=!0);let b,N;if(f){if(h=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let M=d.auditStore;M||(M=Xp(d)),m=i.find(ce=>ce.isPrimaryKey)||{},h=m.name,m.is_hash_attribute=m.isPrimaryKey=!0,m.schemaDefined=_,m.compression=Oh(),l&&(m.trackDeletes=!0),o=m.audit=typeof o=="boolean"?o:(0,Ot.get)(Vt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(m.expiration=r),n&&(m.eviction=n),typeof c=="boolean"&&(m.sealed=c),u&&(m.origins?m.origins.includes(u)||m.origins.push(u):m.origins=[u]),jn.trace(`${e} table loading, opening primary store`);let W=new ja.default(!1,!0);W.compression=m.compression;let z=e+"/",Z=Rf(d.openDB(z,W));Z.rootStore=d,g=d.dbisDb=d.openDB(fm.INTERNAL_DBIS_NAME,T),Z.tableId=g.get(Il),Z.tableId||(Z.tableId=1),g.putSync(Il,Z.tableId+1),m.tableId=Z.tableId,f=Hk(E,e,dm({primaryStore:Z,auditStore:M,audit:o,sealed:c,trackDeletes:l,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:Z.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:g})),f.schemaVersion=1,b=!0,F(),g.put(z,m)}S=f.indices,g=g||(d.dbisDb=d.openDB(fm.INTERNAL_DBIS_NAME,T)),f.dbisDB=g;let U=[];for(let{key:M,value:W}of g.getRange({start:!0})){let[z,Z]=M.toString().split("/");if(Z===""&&(Z=W.name),Z){if(z!==e)continue}else continue;let ce=i.find(de=>de.name===Z),_e=!ce?.indexed&&W.indexed&&!W.isPrimaryKey;if((!ce||_e)&&(F(),b=!0,ce||g.remove(M),_e)){let de=f.indices[z];de&&U.push(de)}}let v=[];try{for(let M of i||[]){if(M.relationship)continue;let W=e+"/"+(M.name||"");Object.defineProperty(M,"key",{value:W,configurable:!0});let z=g.get(W);if(M.isPrimaryKey){if(z=z||g.get(W=e+"/")||{},o!==f.audit||c!==c||(+r||void 0)!==(+z.expiration||void 0)||(+n||void 0)!==(+z.eviction||void 0)){let ce=Object.assign({},z);typeof o=="boolean"&&(o&&f.enableAuditing(o),ce.audit=o),r&&(ce.expiration=+r),n&&(ce.eviction=+n),c!==void 0&&(ce.sealed=c),b=!0,F(),g.put(W,ce)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let Z=!z||z.type!==M.type||z.indexed!==M.indexed||z.nullable!==M.nullable||JSON.stringify(z.attributes)!==JSON.stringify(M.attributes)||JSON.stringify(z.elements)!==JSON.stringify(M.elements);if(M.indexed){let ce=new ja.default(!0,!1),_e=d.openDB(W,ce);(Z||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<bd.workerData?.restartNumber)&&(b=!0,F(),z=g.get(W),(Z||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<bd.workerData?.restartNumber)&&(b=!0,M.indexNulls===void 0&&(M.indexNulls=!0),f.primaryStore.getStats().entryCount>0&&(M.lastIndexedKey=z?.lastIndexedKey||!1,M.indexingPID=process.pid,_e.isIndexing=!0,Object.defineProperty(M,"dbi",{value:_e}),v.push(M))),g.put(W,M)),z?.indexNulls&&M.indexNulls===void 0&&(M.indexNulls=!0),_e.indexNulls=M.indexNulls,S[M.name]=_e}else Z&&(b=!0,F(),g.put(W,M))}}finally{N&&N()}if(b&&(f.schemaVersion++,f.updatedAttributes()),jn.trace(`${e} table loading, running index`),v.length>0||U.length>0?f.indexingOperation=Mue(f,v,U):b&&hm.signalSchemaChange(new pm.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=u,b)for(let M of pN)M(f,u!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),jn.trace(`${e} table loaded`),f;function F(){N||d.transactionSync(()=>({then(M){N=M}}))}a(F,"startTxn")}async function Mue(e,t,r){try{let n=e.schemaVersion;await hm.signalSchemaChange(new pm.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let l of r)s=l.drop();let i,o=0,c=t.length;if(await new Promise(l=>setImmediate(l)),c>0){let l=0;for(let{key:_,value:u,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(u){if(l++,s=e.primaryStore.ifVersion(_,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,m=(0,Mk.getIndexedValues)(u[h]);if(m)for(let S=0,g=m.length;S<g;S++)f.dbi.put(m[S],_)}}),s.then(()=>l--,E=>{l--,jn.error(E)}),bd.workerData&&bd.workerData.restartNumber!==Uk.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=_,e.dbisDB.put(E.key,E);if(i)return}l>Lue?await s:l>Pue&&await new Promise(E=>setImmediate(E))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await hm.signalSchemaChange(new pm.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){jn.error("Error in indexing",n)}}function Uue({table:e,database:t}){let r=Ic({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function Pb(e){pN.push(e)}function Oh(){let e=(0,Ot.get)(Vt.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,Ot.get)(Vt.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,Ot.get)(Vt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||vk,n={startingOffset:32};return t&&(n.dictionary=Od.readFileSync(t)),r&&(n.threshold=r),e&&n}var Ot,fm,Em,lt,On,wl,ja,fN,Vt,Od,EN,Mk,hm,pm,bd,jn,Uk,hN,Sm,vk,sn,ft,Il,pN,mm,Bo,Cl,Lue,Pue,Re=be(()=>{Ot=x(X()),fm=x(_t()),Em=require("lmdb"),lt=require("path"),On=require("fs"),wl=x(Je());pp();ja=x(_u()),fN=x(du()),Vt=x(L()),Od=x(require("fs-extra")),EN=require("../index"),Mk=x(wr()),hm=x(hi()),pm=x(os()),bd=require("worker_threads"),jn=x(k()),Uk=x(rt());no();uu();hN="data",Sm=Symbol("defined-tables"),vk=((0,Ot.get)(Vt.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,Ot.initSync)();sn=Object.create(null),ft=Object.create(null);(0,EN._assignPackageExport)("databases",ft);(0,EN._assignPackageExport)("tables",sn);Il=Symbol.for("next-table-id"),pN=[],Bo=new Map;a(Due,"getTables");a(Br,"getDatabases");a(R_,"resetDatabases");a(Ad,"readMetaDb");a(Bk,"ensureDB");a(Hk,"setTable");a(Ic,"database");a(Fg,"dropDatabase");a(St,"table");Lue=1e3,Pue=10;a(Mue,"runIndexing");a(Uue,"dropTableMeta");a(Pb,"onUpdatedTable");a(Oh,"getDefaultCompression")});var Y=R((uIe,Jk)=>{"use strict";var Ho=require("path"),kk=require("fs-extra"),zr=k(),xk=require("fs-extra"),Tm=require("os"),vue=require("net"),Bue=require("recursive-iterator"),mt=L(),Hue=ES(),Gk=require("papaparse"),gm=require("moment"),{inspect:xue}=require("util"),qk=require("is-number"),lIe=require("lodash"),Gue=require("minimist"),que=require("https"),Fue=require("http"),{hdb_errors:Rm}=ie(),kue=/^((\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)))$/,$k=require("util").promisify(setTimeout),$ue=100,Vue=5,Yue="",Kue=4,Fk={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Jk.exports={isEmpty:bn,isEmptyOrZeroLength:zs,arrayHasEmptyValues:jue,arrayHasEmptyOrZeroLengthValues:zue,buildFolderPath:Jue,isBoolean:Vk,errorizeMessage:Wue,stripFileExtension:Zue,autoCast:e_e,autoCastJSON:Yk,autoCastJSONDeep:SN,removeDir:t_e,compareVersions:r_e,isCompatibleDataVersion:n_e,escapeRawValue:s_e,unescapeValue:i_e,stringifyProps:o_e,timeoutPromise:c_e,isClusterOperation:u_e,getClusterUser:d_e,checkGlobalSchemaTable:__e,getHomeDir:Wk,getPropsFilePath:a_e,promisifyPapaParse:f_e,removeBOM:Qk,createEventPromise:E_e,checkProcessRunning:h_e,checkSchemaTableExist:p_e,checkSchemaExists:jk,checkTableExists:zk,getStartOfTomorrowInSeconds:m_e,getLimitKey:S_e,isObject:Xue,isNotEmptyAndHasValue:Que,autoCasterIsNumberCheck:Kk,backtickASTSchemaItems:T_e,isPortTaken:l_e,createForkArgs:g_e,autoCastBoolean:R_e,async_set_timeout:$k,getTableHashAttribute:A_e,doesSchemaExist:O_e,doesTableExist:b_e,stringifyObj:N_e,ms_to_time:y_e,changeExtension:I_e,getEnvCliRootPath:TN,noBootFile:w_e,httpRequest:C_e,transformReq:D_e,convertToMS:L_e,PACKAGE_ROOT:mt.PACKAGE_ROOT};function Wue(e){return e instanceof Error?e:new Error(e)}a(Wue,"errorizeMessage");function bn(e){return e==null}a(bn,"isEmpty");function Que(e){return!bn(e)&&(e||e===0||e===""||Vk(e))}a(Que,"isNotEmptyAndHasValue");function zs(e){return bn(e)||e.length===0||e.size===0}a(zs,"isEmptyOrZeroLength");function jue(e){if(bn(e))return!0;for(let t=0;t<e.length;t++)if(bn(e[t]))return!0;return!1}a(jue,"arrayHasEmptyValues");function zue(e){if(zs(e))return!0;for(let t=0;t<e.length;t++)if(zs(e[t]))return!0;return!1}a(zue,"arrayHasEmptyOrZeroLengthValues");function Jue(...e){try{return e.join(Ho.sep)}catch{console.error(e)}}a(Jue,"buildFolderPath");function Vk(e){return bn(e)?!1:e===!0||e===!1}a(Vk,"isBoolean");function Xue(e){return bn(e)?!1:typeof e=="object"}a(Xue,"isObject");function Zue(e){return zs(e)?Yue:e.slice(0,-Kue)}a(Zue,"stripFileExtension");function e_e(e){return bn(e)||e===""||typeof e!="string"?e:Fk[e]!==void 0?Fk[e]:Kk(e)===!0?Number(e):kue.test(e)?new Date(e):e}a(e_e,"autoCast");function Yk(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Yk,"autoCastJSON");function SN(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let n=e[t],s=SN(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=SN(r);n!==r&&(e[t]=n)}return e}else return Yk(e)}a(SN,"autoCastJSONDeep");function Kk(e){if(e.startsWith("0.")&&qk(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&qk(e))}a(Kk,"autoCasterIsNumberCheck");async function t_e(e){if(zs(e))throw new Error(`Directory path: ${e} does not exist`);try{await xk.emptyDir(e),await xk.remove(e)}catch(t){throw zr.error(`Error removing files in ${e} -- ${t}`),t}}a(t_e,"removeDir");function r_e(e,t){if(zs(e)){zr.info("Invalid current version sent as parameter.");return}if(zs(t)){zr.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let _=0;_<l;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(r_e,"compareVersions");function n_e(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(n_e,"isCompatibleDataVersion");function s_e(e){if(bn(e))return e;let t=String(e);return t==="."?mt.UNICODE_PERIOD:t===".."?mt.UNICODE_PERIOD+mt.UNICODE_PERIOD:t.replace(mt.FORWARD_SLASH_REGEX,mt.UNICODE_FORWARD_SLASH)}a(s_e,"escapeRawValue");function i_e(e){if(bn(e))return e;let t=String(e);return t===mt.UNICODE_PERIOD?".":t===mt.UNICODE_PERIOD+mt.UNICODE_PERIOD?"..":String(e).replace(mt.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(i_e,"unescapeValue");function o_e(e,t){if(bn(e))return zr.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+Tm.EOL}!zs(n)&&n[0]===";"?r+=" "+n+s+Tm.EOL:zs(n)||(r+=n+"="+s+Tm.EOL)}catch{zr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(o_e,"stringifyProps");function Wk(){let e;try{e=Tm.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Wk,"getHomeDir");function a_e(){let e=Ho.join(Wk(),mt.HDB_HOME_DIR_NAME,mt.BOOT_PROPS_FILE_NAME);return kk.existsSync(e)||(e=Ho.join(__dirname,"../","hdb_boot_properties.file")),e}a(a_e,"getPropsFilePath");function c_e(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(c_e,"timeoutPromise");async function l_e(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=vue.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(l_e,"isPortTaken");function u_e(e){try{return mt.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){zr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(u_e,"isClusterOperation");function __e(e,t){let r=(Re(),ae(Ve)).getDatabases();if(!r[e])return Rm.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Rm.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(__e,"checkGlobalSchemaTable");function d_e(e,t){if(bn(t)){zr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(bn(e)||zs(e)){zr.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){zr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){zr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(d_e,"getClusterUser");function f_e(){Gk.parsePromise=function(e,t,r){return new Promise(function(n,s){Gk.parse(e,{header:!0,transformHeader:Qk,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(f_e,"promisifyPapaParse");function Qk(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Qk,"removeBOM");function E_e(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;zr.info(`Got cluster status event response: ${xue(s)}`);try{i.cancel()}catch{zr.error("Error trying to cancel timeout.")}n(s)})})}a(E_e,"createEventPromise");async function h_e(e){let t=!0,r=0;do await $k($ue*r++),(await Hue.findPs(e)).length>0&&(t=!1);while(t&&r<Vue);if(t)throw new Error(`process ${e} was not started`)}a(h_e,"checkProcessRunning");function p_e(e,t){let r=jk(e);if(r)return r;let n=zk(e,t);if(n)return n}a(p_e,"checkSchemaTableExist");function jk(e){let{getDatabases:t}=(Re(),ae(Ve));if(!t()[e])return Rm.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(jk,"checkSchemaExists");function zk(e,t){let{getDatabases:r}=(Re(),ae(Ve));if(!r()[e][t])return Rm.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(zk,"checkTableExists");function m_e(){let e=gm().utc().add(1,mt.MOMENT_DAYS_TAG).startOf(mt.MOMENT_DAYS_TAG).unix(),t=gm().utc().unix();return e-t}a(m_e,"getStartOfTomorrowInSeconds");function S_e(){return gm().utc().format("DD-MM-YYYY")}a(S_e,"getLimitKey");function T_e(e){try{let t=new Bue(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){zr.error("Got an error back ticking items."),zr.error(t)}}a(T_e,"backtickASTSchemaItems");function g_e(e){return[e]}a(g_e,"createForkArgs");function R_e(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(R_e,"autoCastBoolean");function A_e(e,t){let{getDatabases:r}=(Re(),ae(Ve)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(A_e,"getTableHashAttribute");function O_e(e){let{getDatabases:t}=(Re(),ae(Ve));return t()[e]!==void 0}a(O_e,"doesSchemaExist");function b_e(e,t){let{getDatabases:r}=(Re(),ae(Ve));return r()[e]?.[t]!==void 0}a(b_e,"doesTableExist");function N_e(e){try{return JSON.stringify(e)}catch{return e}}a(N_e,"stringifyObj");function y_e(e){let t=gm.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(y_e,"ms_to_time");function I_e(e,t){let r=Ho.basename(e,Ho.extname(e));return Ho.join(Ho.dirname(e),r+t)}a(I_e,"changeExtension");function TN(){if(process.env[mt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[mt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Gue(process.argv);if(e[mt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[mt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(TN,"getEnvCliRootPath");var mN;function w_e(){if(mN)return mN;let e=TN();if(TN()&&kk.pathExistsSync(Ho.join(e,mt.HDB_CONFIG_FILE)))return mN=!0,!0}a(w_e,"noBootFile");function C_e(e,t){let r;return e.protocol==="http:"?r=Fue:r=que,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",l=>{c.body+=l}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(C_e,"httpRequest");function D_e(e){if(!e.schema&&!e.database){e.schema=mt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(D_e,"transformReq");function L_e(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(L_e,"convertToMS")});var X=R((dIe,r$)=>{"use strict";var gN=require("fs-extra"),za=require("path"),Xk=require("os"),P_e=require("properties-reader"),yd=k(),Nd=Y(),Ee=L(),Am=Et(),M_e="Error initializing environment manager",Om="BOOT_PROPS_FILE_PATH",Zk=!1,U_e={[Ee.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},qi={};r$.exports={BOOT_PROPS_FILE_PATH:Om,getHdbBasePath:v_e,setHdbBasePath:B_e,get:e$,initSync:x_e,setProperty:ve,initTestEnvironment:q_e,setCloneVar:G_e};function v_e(){return qi[Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(v_e,"getHdbBasePath");function B_e(e){qi[Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(B_e,"setHdbBasePath");function e$(e){let t=Am.getConfigValue(e);return t===void 0?qi[e]:t}a(e$,"get");function ve(e,t){U_e[e]&&(qi[e]=t),Am.updateConfigObject(e,t)}a(ve,"setProperty");function H_e(){let e;try{e=Nd.getPropsFilePath(),gN.accessSync(e,gN.constants.F_OK|gN.constants.R_OK),Zk=!0;let t=P_e(e);return qi[Ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Ee.HDB_SETTINGS_NAMES.INSTALL_USER),qi[Ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),qi[Om]=e,!0}catch{return yd.trace(`Environment manager found no properties file at ${e}`),!1}}a(H_e,"doesPropFileExist");function x_e(e=!1){try{(Zk||H_e()||Nd.noBootFile())&&!t$&&(Am.initConfig(e),qi[Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Am.getConfigValue(Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){yd.error(M_e),yd.error(t),console.error(t),process.exit(1)}}a(x_e,"initSync");var t$=!1;function G_e(e){t$=e}a(G_e,"setCloneVar");function q_e(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=za.join(__dirname,"../../","unitTests");qi[Om]=za.join(l,"hdb_boot_properties.file"),ve(Ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,za.join(l,"settings.test")),ve(Ee.HDB_SETTINGS_NAMES.INSTALL_USER,Xk.userInfo()?Xk.userInfo().username:void 0),ve(Ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),ve(Ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,za.join(l,"envDir","log")),ve(Ee.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),ve(Ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),ve(Ee.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),ve(Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,za.join(l,"envDir")),ve(Ee.CONFIG_PARAMS.STORAGE_PATH,za.join(l,"envDir")),s&&(ve(Ee.CONFIG_PARAMS.HTTP_SECUREPORT,e$(Ee.CONFIG_PARAMS.HTTP_PORT)),ve(Ee.CONFIG_PARAMS.HTTP_PORT,null)),ve(Ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),ve(Ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),ve(Ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Nd.isEmpty(i)?!1:i),ve(Ee.CONFIG_PARAMS.HTTP_CORS,Nd.isEmpty(i)?!1:i),ve(Ee.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),ve(Ee.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),ve(Ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),ve(Ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),ve(Ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,za.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),ve(Ee.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Nd.isEmpty(c)?!1:c),o&&(ve("CORS_ACCESSLIST",o),ve(Ee.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(ve(Ee.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),ve(Ee.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(ve(Ee.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),ve(Ee.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(ve(Ee.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),ve(Ee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Om}. Please check your boot props and settings files`;yd.fatal(r),yd.error(t)}}a(q_e,"initTestEnvironment")});var i$=R((EIe,s$)=>{"use strict";var Nm=X();Nm.initSync();var bm=L(),{httpRequest:F_e}=Y(),k_e=require("path"),n$=require("fs-extra"),$_e=require("yaml"),V_e={describe_table:!0,describe_all:!0,describe_database:!0,list_users:!0,list_roles:!0,drop_role:!0,add_user:!0,alter_user:!0,drop_user:!0,restart_service:!0,restart:!0,create_database:!0,drop_database:!0,create_table:!0,drop_table:!0,create_attribute:!0,drop_attribute:!0,search_by_id:!0,delete:!0,search_by_value:!0,csv_file_load:!0,csv_url_load:!0,cluster_get_routes:!0,cluster_network:!0,cluster_status:!0,remove_node:!0,add_component:!0,deploy_component:!0,package_component:!0,drop_component:!0,get_components:!0,get_component_file:!0,set_component_file:!0,registration_info:!0,get_fingerprint:!0,set_license:!0,get_job:!0,search_jobs_by_start_date:!0,read_log:!0,read_transaction_log:!0,read_audit_log:!0,delete_transaction_logs_before:!0,purge_stream:!0,delete_records_before:!0,install_node_modules:!0,set_configuration:!0,get_configuration:!0,create_authentication_tokens:!0,refresh_operation_token:!0,system_information:!0,sql:!0};s$.exports={cliOperations:K_e,buildRequest:Y_e};function Y_e(){let e={};for(let t of process.argv){if(V_e[t]){e.operation=t;continue}if(t.includes("=")){let[r,...n]=t.split("=");n=n.join("=");try{n=JSON.parse(n)}catch{}e[r]=n}}return e}a(Y_e,"buildRequest");async function K_e(e){await n$.exists(k_e.join(Nm.get(bm.CONFIG_PARAMS.ROOTPATH),bm.HDB_PID_FILE))||(console.error("HarperDB must be running to perform this operation"),process.exit()),await n$.exists(Nm.get(bm.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))||(console.error("No domain socket found, unable to perform this operation"),process.exit());try{let t=await F_e({method:"POST",protocol:"http:",socketPath:Nm.get(bm.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),headers:{"Content-Type":"application/json"}},e);t=JSON.parse(t.body),e.json?console.log(JSON.stringify(t,null,2)):console.log($_e.stringify(t).trim())}catch(t){let r="Error: ";t?.response?.data?.error?r+=t.response.data.error:t?.response?.data?r+=t?.response?.data:r+=t.message,console.error(r)}}a(K_e,"cliOperations")});var c$=R((pIe,a$)=>{"use strict";var o$=require("semver/functions/major"),W_e=ma(),RN=process.versions&&process.versions.node?process.versions.node:void 0;a$.exports=Q_e;function Q_e(){let e=W_e.engines["minimum-node"];if(RN&&o$(RN)<o$(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${RN}. Please install a version of Node.js that is withing the defined range.`}}a(Q_e,"checkNodeVersion")});var ON=R((SIe,l$)=>{"use strict";var Id=X();Id.initSync();var Dl=require("fs-extra"),AN=require("path"),Ll=L(),j_e=require("crypto"),z_e=require("uuid").v4;l$.exports=J_e;function J_e(){if(Id.getHdbBasePath()!==void 0){let e=AN.join(Id.getHdbBasePath(),Ll.LICENSE_KEY_DIR_NAME,Ll.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=AN.join(Id.getHdbBasePath(),Ll.LICENSE_KEY_DIR_NAME,Ll.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=AN.join(Id.getHdbBasePath(),Ll.LICENSE_KEY_DIR_NAME,Ll.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Dl.accessSync(r),Dl.accessSync(e),Dl.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=z_e(),i=j_e.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Dl.writeFileSync(r,s),Dl.writeFileSync(e,i.privateKey),Dl.writeFileSync(t,i.publicKey)}else throw n}}}a(J_e,"checkJWTTokenExist")});var _$=R((gIe,u$)=>{"use strict";var bN=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};u$.exports={HdbInfoInsertObject:bN}});var E$=R((AIe,f$)=>{"use strict";var d$=L(),NN=class{static{a(this,"UpgradeObject")}constructor(t,r){this[d$.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[d$.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};f$.exports={UpgradeObject:NN}});var ym=R((bIe,p$)=>{"use strict";var zn=require("prompt"),Pl=require("chalk"),h$=k(),As=require("os"),yN=to(),IN=["yes","y"];async function X_e(e){let t=`${As.EOL}`+Pl.bold.green("Your current HarperDB version requires that we complete an update process.")+`${As.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${As.EOL}${As.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${As.EOL}`;zn.override=yN(["CONFIRM_UPGRADE"]),zn.start(),zn.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Pl.magenta(`${As.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await zn.get([r])}catch(s){return h$.error("There was an error when prompting user about an upgrade."),h$.error(s),!1}return IN.includes(n.CONFIRM_UPGRADE)}a(X_e,"forceUpdatePrompt");async function Z_e(e){let t=`${As.EOL}`+Pl.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${As.EOL}`);zn.override=yN(["CONFIRM_DOWNGRADE"]),zn.start(),zn.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Pl.magenta(`${As.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await zn.get([r]);return IN.includes(n.CONFIRM_DOWNGRADE)}a(Z_e,"forceDowngradePrompt");async function ede(){let e=`${As.EOL}`+Pl.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");zn.override=yN(["GENERATE_CERTS"]),zn.start(),zn.message=e;let t={properties:{GENERATE_CERTS:{description:Pl.magenta(`${As.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await zn.get([t]);return IN.includes(r.GENERATE_CERTS)}a(ede,"upgradeCertsPrompt");p$.exports={forceUpdatePrompt:X_e,forceDowngradePrompt:Z_e,upgradeCertsPrompt:ede}});var CN=R((yIe,m$)=>{"use strict";var wN=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};m$.exports=wN});var T$=R((PIe,S$)=>{"use strict";var tde=Y(),rde=Et(),wIe=k(),CIe=require("path"),DIe=require("fs"),LIe=L();S$.exports={getOldPropsValue:nde};function nde(e,t,r=!1){let n=t.getRaw(e);return tde.isNotEmptyAndHasValue(n)?n:r?rde.getDefaultConfig(e):""}a(nde,"getOldPropsValue")});var O$=R((UIe,A$)=>{"use strict";var xo=require("path"),Go=require("fs-extra"),sde=require("properties-reader"),ide=CN(),Mt=k(),{getOldPropsValue:Qe}=T$(),{HDB_SETTINGS_NAMES:oe,CONFIG_PARAMS:Ja}=L(),Xa=Et(),Im=X(),g$=Y(),Js=L(),DN=new ide("3.1.0"),R$=[];function ode(){let e=sde(Im.get(oe.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Mt.info(t);let r=` ;Settings for the HarperDB process.
34
+ `))}},25).unref()}o.close?.(()=>{if(ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&sd()==0)try{Pq(ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,Cp),o.cantCleanupProperly||kt.warn("Had to forcefully exit the thread",Cp),process.exit(0)},5e3).unref()})}if(Fq||process.env.DEV_MODE)try{require("inspector").close()}catch(i){kt.info("Could not close debugger",i)}}}).ref();let e=[];if(Uq&&!Dce)for(let t in Ws){let r=Ws[t];if(isNaN(t)&&sd()==0){gce(t)&&Pq(t),e.push(new Promise((i,o)=>{r.listen({path:t},()=>{i(),kt.info("Domain socket listening on "+t)}).on("error",o)}));continue}let n=ke.get(pt.CONFIG_PARAMS.HTTP_THREADRANGE);if(n){let i=typeof n=="string"?n.split("-"):n,o=sd();if(o<i[0]||o>i[1])continue}let s;try{s=Uq(+t,"::")}catch(i){console.error(`Unable to bind to port ${t}`,i);continue}e.push(new Promise((i,o)=>{r.listen({fd:s},()=>{i(),kt.trace("Listening on port "+t,Cp)}).on("error",o)}))}Promise.all(e).then(()=>{nd?.postMessage({type:pt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(kq,"startServers");db||kq();function hb(e,t,r){let n=e?.read?e:new Ece({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Ws[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Ws[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(kt.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(hb,"deliverSocket");var vq=new Map;function Mce(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=vq.get(s),r){case"connection":i=hb(void 0,t),vq.set(s,i),i.write=(c,l,_)=>(nd.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,l,_)=>(nd.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),nd.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(Mce,"proxyRequest");function pb(e,t,r=!0){!+t&&t!==ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(ke.get(pt.CONFIG_PARAMS.HTTP_PORT),10));let n=Ws[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",Bq),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Ws[t]=e;e.on("unhandled",Bq)}a(pb,"registerServer");function $q(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=[],ke.get(pt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:ke.get(pt.CONFIG_PARAMS.HTTP_PORT),secure:ke.get(pt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),ke.get(pt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:ke.get(pt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a($q,"getPorts");function mb(e,t){for(let{port:r,secure:n}of $q(t))Vq(r,n,t?.isOperationsServer),typeof e=="function"?fb[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,pb(e,r,!1)),Lp[r]=Eb(fb,r),Lce=Eb(Pce,r)}a(mb,"httpServer");function Vq(e,t,r){if(!Bi[e]){let n=r?"operationsApi_network":"http",s={noDelay:!0,keepAliveTimeout:ke.get(n+"_keepAliveTimeout"),headersTimeout:ke.get(n+"_headersTimeout"),requestTimeout:ke.get(n+"_timeout")},i=ke.get(n+"_mtls"),o=ke.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let l=ke.get(n+"tls");Object.assign(s,{allowHTTP1:!0,rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:Hq(),maxHeaderSize:ke.get(pt.CONFIG_PARAMS.HTTP_MAXHEADERSIZE),SNICallback:Sb(l)})}let c=yce();Bi[e]=(t?Sce:pce)(s,async(l,_)=>{try{let d=performance.now(),E=new Gq(l,_);r&&(E.isOperationsServer=!0);let f=await Lp[e](E);if(!f){if(E._nodeResponse.statusCode)return;f=Yq(E)}if(c?f.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):f.headers?.set?.("Server","HarperDB"),f.status===-1){for(let U of f.headers||[])_.setHeader(U[0],U[1]);return l.baseRequest=E,_.baseResponse=f,Bi[e].emit("unhandled",l,_)}let h=f.status||200,m=performance.now(),S=m-d,g=f.body,T;if(!f.handlesHeaders){let U=f.headers||new xq;g?g.length>=0&&(typeof g=="string"?U.set("Content-Length",Buffer.byteLength(g)):U.set("Content-Length",g.length),T=!0):(U.set("Content-Length","0"),T=!0);let v=`hdb;dur=${S.toFixed(2)}`;f.wasCacheMiss&&(v+=", miss"),Nce(U,"Server-Timing",v,!0),_.writeHead(h,U&&(U[Symbol.iterator]?Array.from(U):U)),T&&_.end(g)}let b=E.handlerPath,N=E.method;if(rd(S,"duration",b,N,f.wasCacheMiss==null?void 0:f.wasCacheMiss?"cache-miss":"cache-hit"),Mq(h<400,"success",b,N),Mq(1,"response_"+h,b,N),!T)if(g?.pipe){g.pipe(_),g.destroy&&_.on("close",()=>{g.destroy()});let U=0;g.on("data",v=>{U+=v.length}),g.on("end",()=>{rd(performance.now()-m,"transfer",b,N),rd(U,"bytes-sent",b,N)})}else g?.then?g.then(U=>{_.end(U)},u):_.end(g)}catch(d){u(d)}function u(d){let E=d.headers;_.writeHead(d.statusCode||500,E&&(E[Symbol.iterator]?Array.from(E):E)),_.end(d.toString()),d.statusCode?d.statusCode===500?kt.warn(d):kt.info(d):kt.error(d)}a(u,"onError")}),i&&(Bi[e].mtlsConfig=i),t&&(Bi[e].on("secureConnection",l=>{l._parent.startTime&&rd(performance.now()-l._parent.startTime,"tls-handshake",e),rd(l.isSessionReused(),"tls-reused",e)}),Bi[e].isSecure=!0,s.SNICallback(null,(l,_)=>{try{dl=_,_&&Bi[e].setSecureContext(_.options)}finally{dl=null}})),pb(Bi[e],e)}return Bi[e]}a(Vq,"getHTTPServer");function Eb(e,t){let r=Yq;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a(c=>s(c,o),"next_callback")}}return r}a(Eb,"makeCallbackChain");function Yq(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new xq}}a(Yq,"unhandled");function Uce(e,t){mb(e,{requestOnly:!0,...t})}a(Uce,"onRequest");function vce(e,t){let r;if(t.securePort){let n=Object.assign({},ke.get("tls"));t.mtls?.certificateAuthority&&(n.certificateAuthority=t.mtls.certificateAuthority);let s={noDelay:!0,rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,SNICallback:Sb(n)};r=Oce(s,e),s.SNICallback(null,(i,o)=>{try{dl=o,o&&r.setSecureContext(o.options)}finally{dl=null}}),Ws[t.securePort]=r}return t.port&&(r=hce({noDelay:!0},e),Ws[t.port]=r),r}a(vce,"onSocket");Object.defineProperty(mce.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.includes("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function Bce(e,t){let r;for(let{port:n,secure:s}of $q(t)){Dp[n]||(Dp[n]=new Rce({server:r=Vq(n,s)}),Dp[n].on("connection",async(c,l)=>{try{let _=new Gq(l);_.isWebSocket=!0;let u=Lp[n](_),d=l.headers["sec-websocket-protocol"]||"",E=ub[n];if(d){let f;for(let h=0;h<E.length;h++){let m=E[h];m.protocol===d&&(f=!0,m.listener(c,_,u))}if(f)return}for(let f=0;f<E.length;f++){let h=E[f];h.protocol||h.listener(c,_,u)}}catch(_){kt.warn("Error handling WebSocket connection",_)}}),Dp[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=ub[n];o||(o=ub[n]=[]),o.push({listener:e,protocol:i}),Lp[n]=Eb(fb,n)}return r}a(Bce,"onWebSocket");function Bq(e,t){t.writeHead(404),t.end(`Not found
35
+ `)}a(Bq,"defaultNotFound");function _b(e){return e.startsWith("-----BEGIN")?e:Tce(e)}a(_b,"readPEM");function Sb(e){let t=[];for(let i=0;e[i];i++)t.push(e[i]);t.length||t.push(e);let r=new Map,n,s=!1;for(let i of t){let o=_b(i.privateKey),c=_b(i.certificate),l=i.certificateAuthority&&_b(i.certificateAuthority);if(!o||!c)throw new Error("Missing private key or certificate for secure server");let _={ciphers:i.ciphers,ca:l,ticketKeys:Hq()},u=Ace(_);u.options=_,_.instantiatedContext=u,u.context.setCert(c),u.context.setKey(o,void 0),_.cert=c,_.key=o,u.certStart=c.slice(0,100).toString(),n||(n=u);let d=new Ice(c),E=i.hostname??i.host??i.hostnames??i.hosts??(d.subjectAltName?d.subjectAltName.split(",").map(f=>{let h=f.indexOf(":");return f.slice(h+1)}):[d.subject.match(/CN=(.*)/)?.[1]]);Array.isArray(E)||(E=[E]);for(let f of E)f?(f[0]==="*"&&(s=!0,f=f.slice(1)),r.has(f)||r.set(f,u)):kt.error("No hostname found for certificate at",i.certificate)}return(i,o)=>{let c=i;for(;;){let l=r.get(c);if(l)return kt.debug("Found certificate for",i,l.certStart),o(null,l);if(s&&c){let _=c.indexOf(".",1);_<0?c="":c=c.slice(_)}else break}kt.debug("No certificate found to match",i,"using the first certificate"),o(null,n)}}a(Sb,"createSNICallback")});var eF={};$e(eF,{startHTTPThreads:()=>xce,startSocketServer:()=>bb,updateWorkerIdleness:()=>Zq});async function xce(e=2,t){if(t)Ab(0,1,!0);else{let{loadRootComponents:r}=Mp();if(e===0)return(0,Qs.setMainIsWorker)(!0),await Tb().startServers(),Promise.resolve([]);await r()}Xq();for(let r=0;r<e;r++)Ab(r,e);return Promise.all(Jq)}function Xq(){let e=(0,jq.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),Rb=setInterval(()=>{Bp.notify(e)},Hce).unref())}function Ab(e,t=1,r){if(gb++,(0,Qs.startWorker)("server/threads/threadServer.js",{name:ml.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(_){_.type===ml.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});Jq.push(s),await s,fl.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=vp.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=fl.indexOf(n);o>-1&&fl.splice(o,1)}if(a(i,"removeWorker"),El){let o=El;El=[];for(let c of o)zq[c.localPort](null,c)}}}),r){let n=setInterval(()=>{Ob?Ob=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Qs.shutdownWorkers)(),gb=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function bb(e=0,t){if(typeof e=="string")try{(0,Hp.existsSync)(e)&&(0,Hp.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Gce:r=qce(t):r=Nb;let n=(0,hl.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=zq[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),Ob=!0,r(o,(c,l)=>{if(!c){if(Kq){let u=o._socket||new hl.Socket({handle:o,writable:!0,readable:!0});Kq.deliverSocket(u,e,l),u.resume()}else gb>0?(El.length===0&&setTimeout(()=>{El.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,El.push(o)):(console.log("start up a dynamic thread to handle request"),Ab(0));hr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:l});else{let u=o._socket||new hl.Socket({handle:o,writable:!0,readable:!0});$ce(u,c,e)}hr(!0,"socket-routed")})};let s=ma();Bp.info(`HarperDB ${s.version} Server running on port ${e}`)}return n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function Nb(e,t){let r,n=0;for(let s of fl){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Up)return Up=i,t(r);n=i}Up=0,t(r)}function Gce(e,t){let r={};e.getpeername(r);let n=r.address,s=pl.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);Nb(e,o=>{pl.set(n,{worker:o,lastUsed:i}),t(o)})}function qce(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new hl.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],_=pl.get(l),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,s(_.worker);Nb(n,d=>{pl.set(l,{worker:d,lastUsed:u}),s(d,o)})})}a(r,"findByHeaderAffinity")}function Zq(){Up=0;for(let e of fl)e.expectedIdle=e.recentELU.idle+Fce,e.requests=1;fl.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function $ce(e,t,r){let n=kce++;t.postMessage({port:r,requestId:n,event:"connection"}),e.on("data",s=>{let i=s.toString("latin1");t.postMessage({port:r,requestId:n,data:i,event:"data"})}).on("close",s=>{t.postMessage({port:r,requestId:n,event:"close",hadError:s})}).on("error",s=>{t.postMessage({port:r,requestId:n,event:"error",error:s})}).on("drain",s=>{t.postMessage({port:r,requestId:n,event:"drain",error:s})}).on("end",()=>{t.postMessage({port:r,requestId:n,event:"end"})}).resume(),vp.set(n,s=>{s.event=="data"&&e.write(Buffer.from(s.data,"latin1")),s.event=="end"&&(e.end(s.data&&Buffer.from(s.data,"latin1")),vp.delete(n)),s.event=="destroy"&&(e.destroy(),vp.delete(n))})}var Qs,hl,ml,Bp,Hp,Qq,jq,fl,El,zq,Kq,gb,Jq,Rb,Hce,Ob,Up,Wq,pl,Fce,vp,kce,yb=be(()=>{Qs=x(rt()),hl=require("net"),ml=x(L()),Bp=x(k()),Hp=require("fs");Ti();Qq=require("worker_threads"),jq=x(la()),fl=[],El=[],zq=[],gb=0,Jq=[];Qq.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,Qs.onMessageFromWorkers)(e=>{e.type===ml.ITC_EVENT_TYPES.RESTART&&Rb&&(clearInterval(Rb),Xq())}));Hce=6e5;a(xce,"startHTTPThreads");a(Xq,"licenseWarning");a(Ab,"startHTTPWorker");a(bb,"startSocketServer");Up=0;a(Nb,"findMostIdleWorker");Wq=36e5,pl=new Map;a(Gce,"findByRemoteAddressAffinity");a(qce,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of pl)r.lastUsed+Wq<e&&pl.delete(t)},Wq).unref();Fce=1e3;a(Zq,"updateWorkerIdleness");(0,Qs.setMonitorListener)(Zq);vp=new Map,kce=1;a($ce,"proxySocket")});var sF=R((kNe,nF)=>{"use strict";var Vce=require("cluster"),ka=X();ka.initSync();var rF=L(),HNe=require("util"),Hi=k(),xNe=require("fs"),Yce=require("fastify"),GNe=ma(),Kce=require("@fastify/cors"),Wce=require("@fastify/compress"),Qce=require("@fastify/static"),jce=bO(),zce=require("path"),{PACKAGE_ROOT:Jce}=L(),Xce=Bn(),Zce=Y(),ele=Ur(),tle=la(),{server:rle}=(Cr(),ae(jo)),{node_request_key:qNe}=(wp(),ae(lb)),{authHandler:nle,handlePostRequest:sle,serverErrorHandler:ile,reqBodyValidationHandler:ole}=Np(),FNe=require("net"),{registerContentHandlers:ale}=(jc(),ae(gx)),cle=6e4,lle=1024*1024*1024,ule="TRUE",{CONFIG_PARAMS:id}=rF,Sl;nF.exports={hdbServer:tF,start:tF};async function tF(e){try{Hi.info("In Fastify server"+process.cwd()),Hi.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Hi.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Vce.isMaster,await _le();let t=e.securePort>0;Sl=dle(t),await Sl.ready(),e||(e={}),e.isOperationsServer=!0;try{rle.http(Sl.server,e),Sl.server.closeIdleConnections||await Sl.listen({port:0,host:"::"})}catch(r){throw Sl.close(),Hi.error(r),Hi.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Hi.fatal(t),process.exit(1)}}a(tF,"operationsServer");async function _le(){Hi.trace("Configuring HarperDB process."),Xce.setSchemaDataToGlobal(),await ele.setUsersToGlobal(),await tle.getLicense()}a(_le,"setUp");function dle(e){Hi.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=fle(e),r=Yce(t);r.server.headersTimeout=hle(),r.setErrorHandler(ile);let n=Ele();n&&r.register(Kce,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,_){r.server.emit("unhandled",l.raw,_.raw)}),c()}),r.register(jce),r.register(Wce),r.register(Qce,{root:zce.join(Jce,"studio/build-local")}),ale(r);let s=ka.get(rF.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Zce.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[ole,nle],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),sle(i,o)}),r.get("/health",()=>"HarperDB is running."),Hi.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(dle,"buildServer");function fle(e){let t=ka.get(id.OPERATIONSAPI_NETWORK_TIMEOUT),r=ka.get(id.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:lle,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(fle,"getServerOptions");function Ele(){let e=ka.get(id.OPERATIONSAPI_NETWORK_CORS),t=ka.get(id.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===ule)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(Ele,"getCORSOpts");function hle(){return ka.get(id.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??cle}a(hle,"getHeaderTimeoutConfig")});var Pb={};$e(Pb,{disableNATS:()=>mle,publishToStream:()=>qp,setNATSReplicator:()=>Ib,setPublishToStream:()=>Sle,setSubscription:()=>Lb,start:()=>ple});function ple(){od.default.get(ad.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&gle()}function mle(e=!0){lF=e}function Sle(e,t){qp=e,Lb=t}function gle(){if(lF||process.env._DISABLE_NATS)return;let e=Br(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];Ib(s,r,i)}}Mb((r,n)=>{Ib(r.tableName,r.databaseName,r),n&&_F(r)}),!iF&&(iF=!0)}function Ib(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends tr{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Ue],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Ue]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Ue],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Ue],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Ue]})}static defineSchema(i){_F(i)}static subscribe(){let i=new ts;return Lb(t,e,i),i}static subscribeOnThisThread(i){return i<(od.default.get(ad.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Tle)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new xp(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=uF;return i}a(n,"getNATSTransaction")}function _F(e){let t=od.default.get(ad.default.CONFIG_PARAMS.CLUSTERING_NODENAME);qp(`${Cb.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,Db.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 oF,Cb,Db,aF,cF,od,ad,Gp,lF,qp,Lb,Tle,uF,iF,xp,wb,dF=be(()=>{Re();Mn();oF=x(gt()),Cb=x(Ze()),Db=x(fi());nu();aF=x(sR()),cF=x(wr()),od=x(X()),ad=x(L()),Gp=x(k());a(ple,"start");a(mle,"disableNATS");qp=oF.publishToStream,Lb=aF.setSubscription;a(Sle,"setPublishToStream");Tle=2;a(gle,"assignReplicationSource");a(Ib,"setNATSReplicator");a(_F,"publishSchema");xp=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=od.default.get(ad.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,_;for(let u of i){let d=u.table,E=u.operation=="put"?"upsert":u.operation;l||(Gp.trace(`Sending transaction event ${E}`),_=l={operation:E,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,E!=="delete"&&E!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===E?(o.push(u.record),c.push(u.id)):_=_.next={operation:E,table:d,id:u.id,record:u.record},u.expiresAt&&(_.expiresAt=u.expiresAt)}l&&n.push(qp(`${Cb.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,Db.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(u=>{throw Gp.error("An error has occurred trying to replicate transaction",l,u),u.statusCode=504,u}))}return Promise.all(n)}},wb=class extends xp{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,cF.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};uF=new wb});async function mF({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await Ub.get(e,{returnNonexistent:!0});i=new Hb(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await Ub.get(e);o&&o.delete()}i=new kp(e,t)}return n&&(n.id=e,n.user={username:t?.username},cd.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function vb(){return Fp++,Fp>65500&&(Fp=1),Fp}function Bb(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=No.getMatch(n);if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return it(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var EF,Mo,hF,pF,fF,Ub,cd,Fp,kp,Hb,SF=be(()=>{Re();I_();EF=x(wr()),Mo=x(k());ha();hF=x(rt()),pF=x(Tb());Cr();fF=100,Ub=St({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"}]}}]}),cd=St({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,hF.getWorkerIndex)()===0&&(async()=>{await pF.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of cd.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await dt.getUser(r.user.username));try{await Bb(r,t,r)}catch{(0,Mo.warn)("Failed to publish will",t)}cd.delete(e.id)}})();a(mF,"getSession");Fp=1;a(vb,"getNextMessageId");kp=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,_;if(c>-1?(l=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let u=this.subscriptions.find(g=>g.topic===s),d;u?(d=i>0,u.end(),this.subscriptions.splice(this.subscriptions.indexOf(u),1)):d=i===2;let E={search:l,async:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Mo.trace)("Resuming subscription from",s,"from",o);let f=No.getMatch(_);if(!f){let g=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw g.statusCode=404,g}if(E.url=f.relativeURL,E.url.indexOf("+")>-1||E.url.indexOf("#")>-1){let g=E.url.slice(1);if(g.indexOf("#")>-1&&g.indexOf("#")!==g.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(E.isCollection=!0,g.indexOf("+")===g.length-1)E.onlyChildren=!0,E.url="/"+g.slice(0,g.length-1);else{let T=g.split("/"),b;for(let v=0;v<T.length;v++)if(T[v].indexOf("+")>-1)if(T[v]==="+")b=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&b)throw new Error("Filters can not be combined");let N=!0;T[T.length-1]==="#"&&(T.length--,N=!1),b&&(n=a(v=>{let F=v.id;if(!Array.isArray(F)||N&&F.length!==T.length)return!1;for(let M=0;M<T.length;M++)if(T[M]!=="+"&&T[M]!==F[M])return!1;return!0},"filter"));let U=T.indexOf("+");E.url="/"+(U>-1?T.slice(0,U):T).concat("").join("/")}}let h=f.path,m=f.Resource,S=await it(E,async()=>{let g=this.createContext();g.topic=s,g.retainHandling=i;let T=await m.subscribe(E,g);if(!T)return;if(!T[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let b=(async()=>{for await(let N of T)try{let U;if(N.type&&N.type!=="put"&&N.type!=="delete"&&N.type!=="message"&&N.type!=="patch"||n&&!n(N))continue;r?(N.topic=s,U=this.needsAcknowledge(N)):(N.acknowledge?.(),U=vb());let v=N.id;if(Array.isArray(v)&&(v=Wc(v)),v==null&&(v=""),await this.listener(h+"/"+v,N.value,U,t)===!1)break;this.awaitingAcks?.size>fF?await new Promise(M=>setTimeout(M,this.awaitingAcks.size-fF)):await new Promise(setImmediate)}catch(U){(0,Mo.warn)(U)}})();return T});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=vb();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return Bb(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();it(r,async()=>{try{if(!t){let n=await cd.get(this.sessionId);n?.doesExist()&&await Bb(n,n.data,r)}}finally{await cd.delete(this.sessionId)}}).catch(n=>{(0,Mo.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};a(Bb,"publish");Hb=class extends kp{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=vb(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Mo.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,EF.getNextMonotonicTime)()),(0,Mo.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),Ub.put(this.sessionRecord)}}});var Gb={};$e(Gb,{bypassAuth:()=>Rle,start:()=>Ale});function Rle(){OF=!0}function Ale({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new AF.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c,l=r?.mtls;return n&&(c=e.ws((_,u,d)=>{if(_.protocol==="mqtt"){o.events.emit("connection",_),$t.debug("Received WebSocket connection for MQTT from",_._socket.remoteAddress);let{onMessage:E,onClose:f}=gF(_,h=>{_.send(h)},u,Promise.resolve(d).then(()=>u?.user),o);_.on("message",E),_.on("close",f),_.on("error",h=>{$t.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let u;if(o.events.emit("connection",_),$t.debug(`Received ${_.getCertificate?"SSL":"TCP"} connection for MQTT from ${_.remoteAddress}`),l){if(_.authorized)try{let f=l.user;if(f!==null){(f===void 0||f==="Common Name"||f==="CN")&&(f=_.getPeerCertificate().subject.CN);try{u=await e.getUser(f,null,null),(0,Tl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&Vp.notify({username:u?.username,status:cr.AUTH_AUDIT_STATUS.SUCCESS,type:cr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})}catch(h){throw(0,Tl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&Vp.error({username:f,status:cr.AUTH_AUDIT_STATUS.FAILURE,type:cr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:_.remoteAddress}),h}}else $t.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(f){o.events.emit("error",f,_),$t.error(f)}else if(l.required)return $t.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!u&&OF&&_.remoteAddress.includes("127.0.0.1")&&(u=await(0,RF.getSuperUser)(),$t.debug("Auto-authorizing local connection",u?.username));let{onMessage:d,onClose:E}=gF(_,f=>_.write(f),null,u,o);_.on("data",d),_.on("close",E),_.on("error",f=>{$t.info("Socket error",f)})},{port:t,securePort:s,mtls:l})),c}function gF(e,t,r,n,s){TF||(TF=!0,Yu(d=>{$p>0&&d.push({metric:"mqtt-connections",connections:$p,byThread:!0})}));let i;$p++;let o,c={protocolVersion:4},l=(0,Yp.parser)({protocolVersion:5});function _(d){l.parse(d)}a(_,"onMessage");function u(){$p--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),En(!1,"connection","mqtt","disconnect"),$t.debug("MQTT connection was closed",e.remoteAddress))}return a(u,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;let E=d.topic,f=E?.indexOf("/",1),h=f>0?E.slice(0,f):E;hr(d.length,"bytes-received",h,S(d),"mqtt");try{switch(o?.receivedPacket?.(),d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await dt.getUser(d.username,d.password.toString(),r),(0,Tl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&Vp.notify({username:n?.username,status:cr.AUTH_AUDIT_STATUS.SUCCESS,type:cr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(M){return(0,Tl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&Vp.error({username:d.username,status:cr.AUTH_AUDIT_STATUS.FAILURE,type:cr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",d,e,M),En(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",d,e),En(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let M=e.deserialize||(e.deserialize=Ba(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?M(d.will.payload):void 0,delete d.will.payload}o=mF({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(M){return $t.error(M),s.events.emit("auth-failed",d,e,M),En(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:M.code||5,returnCode:M.code||128})}s.events.emit("connected",o,e),En(!0,"connection","mqtt","connect"),m({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((M,W,z,Z)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",M);let ce=M.indexOf("/",1),_e=ce>0?M.slice(0,ce):M;m({cmd:"publish",topic:M,payload:g(W),messageId:z||Math.floor(Math.random()*1e8),qos:Z.qos},_e);let de=e._socket??e;return de.writableNeedDrain?new Promise(xe=>de.once("drain",xe)):!de.closed}catch(ce){return $t.error(ce),o?.disconnect(),s.sessions.delete(o),!1}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let T=[];for(let M of d.subscriptions){let W;try{let z=await o.addSubscription(M,M.qos>=1);W=z?z.qos||0:c.protocolVersion<5?128:143}catch(z){s.events.emit("error",z,e,M,o),z.statusCode?z.statusCode===500?$t.warn(z):$t.info(z):$t.error(z),W=c.protocolVersion<5?128:z.statusCode===403?135:z.statusCode===404?143:128}T.push(W)}await o.committed,m({cmd:"suback",granted:T,messageId:d.messageId});break;case"unsubscribe":{let M=[];for(let W of d.unsubscriptions)M.push(o.removeSubscription(W)?0:17);m({cmd:"unsuback",granted:M,messageId:d.messageId});break}case"pubrel":m({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let b=d.qos===2?"pubrec":"puback",N=e.deserialize||(e.deserialize=Ba(r?.headers.get?.("content-type"))),v=(d.payload?.length||0)>0?N(d.payload):void 0,F;try{F=await o.publish(d,v)}catch(M){s.events.emit("error",M,e,d,o),$t.warn(M),d.qos>0&&m({cmd:b,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&m({cmd:b,messageId:d.messageId,reasonCode:F===!1?144:0},d.topic);break;case"pubrec":m({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":m({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),En(!0,"connection","mqtt","disconnect"),$t.debug("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(T){s.events.emit("error",T,e,d,o),$t.error(T),m({cmd:"disconnect"})}function m(T,b){let N=(0,Yp.generate)(T,c);t(N),hr(N.length,"bytes-sent",b,S(T),"mqtt")}a(m,"sendPacket");function S(T){return T.qos>0?T.cmd+",qos="+T.qos:T.cmd}a(S,"packetMethodName");function g(T){return Pa(T,r)}a(g,"serialize")}),l.on("error",d=>{$t.warn("MQTT parsing error, closing connection:",d.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:_,onClose:u}}var Yp,RF,Tl,cr,xb,AF,Vp,$t,OF,TF,$p,bF=be(()=>{Yp=require("mqtt-packet");SF();RF=x(Ur());jc();Ti();Cr();Tl=x(X()),cr=x(L()),xb=x(k()),AF=require("events"),Vp=(0,xb.loggerWithTag)("auth-event"),$t=(0,xb.loggerWithTag)("mqtt"),OF=(0,Tl.get)(cr.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Rle,"bypassAuth");a(Ale,"start");$p=0;a(gF,"onSocket")});var Gh={};$e(Gh,{component_errors:()=>Rl,loadComponent:()=>Kp,loadComponentDirectories:()=>MF,setErrorReporter:()=>yle});function MF(e,t){t&&(Fb=t),e&&(kb=e);let r=[];if((0,tt.existsSync)(qb)){let s=(0,tt.readdirSync)(qb,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,at.join)(qb,o);r.push(Kp(c,Fb,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Kp(n,Fb,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{PF=!0})}function yle(e){ld=e}async function Kp(e,t,r,n,s,i){let o=(0,tt.realpathSync)(e);if(!yF.has(o)){yF.set(o,!0),s&&(kb=s);try{let c;n&&(Rl=new Map);let l=(0,at.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,tt.existsSync)(l)?c=n?(0,LF.getConfigObj)():(0,IF.parseDocument)((0,tt.readFileSync)(l,"utf8"),{simpleKeys:!0}).toJSON():c=$b;let _=(0,at.join)(e,"node_modules","harperdb");try{$a.isMainThread&&(n||(0,tt.existsSync)(_)&&(0,tt.realpathSync)(Ol.PACKAGE_ROOT)!==(0,tt.realpathSync)(_))&&((0,tt.rmSync)(_,{recursive:!0,force:!0}),(0,tt.existsSync)((0,at.join)(e,"node_modules"))||(0,tt.mkdirSync)((0,at.join)(e,"node_modules")),(0,tt.symlinkSync)(Ol.PACKAGE_ROOT,_,"dir"))}catch(E){gl.default.error("Error symlinking harperdb module",E)}let u=[],d=n;for(let E in c){let f=c[E];if(Rl.set(n?E:(0,at.basename)(e),!1),!f)continue;let h,m=f.package;try{if(m){let N=e,U;for(;!(0,tt.existsSync)(U=(0,at.join)(N,"node_modules",E));)if(N=(0,at.dirname)(N),N.length<(0,DF.getHdbBasePath)().length){U=null;break}if(U)h=await Kp(U,t,r,!1),d=!0;else throw new Error(`Unable to find package ${E}:${m}`)}else h=Nle[E];if(!h)continue;u.push(h);let S=a(N=>(N.origin=r,St(N)),"ensureTable"),g=f.network||(f.port||f.securePort)&&f,T=g?.securePort||g?.https&&g.port,b=!g?.https&&g?.port;if($a.isMainThread&&(h=await h.startOnMainThread?.({server:dt,ensureTable:S,port:b,securePort:T,resources:t,...f})||h,n&&g))for(let N of[b,T])try{if(+N&&!NF.includes(N)){let U=Vb.get(Ol.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);U&&gl.default.warn("Session affinity is not recommended and may cause memory leaks"),(U||!Ip)&&(NF.push(N),bb(N,U))}}catch(U){console.error("Error listening on socket",N,U,E)}if(t.isWorker&&(h=await h.start?.({server:dt,ensureTable:S,port:b,securePort:T,resources:t,...f})||h),kb.set(h,!0),(h.handleFile||h.handleDirectory)&&f.files){if(f.files.includes(".."))throw(0,CF.handleHDBError)("Can not reference parent directories");let N=(0,at.join)(e,f.files).replace(/\\/g,"/"),U=N.indexOf("/*");if(U>-1&&f.files!==$b[E]?.files&&!(0,tt.existsSync)(N.slice(0,U)))throw new Error(`The path '${N.slice(0,U)}' does not exist and cannot be used as the base of the resolved 'files' path value '${f.files}'`);let v=(0,at.basename)(e),F=f.path||"/";F=F.startsWith("/")?F:F.startsWith("./")?"/"+v+F.slice(2):F==="."?"/"+v:"/"+v+"/"+F;let M,W,z;if(f.root){let ce=f.root;ce.startsWith("/")&&(ce=ce.slice(1)),ce.endsWith("/")&&(ce=ce.slice(0,-1)),ce+="/",W=(0,at.join)(e,ce)}else(z=N.indexOf("/*"))>-1&&(W=N.slice(0,z+1),M=(0,at.relative)(e,W));let Z=!1;if($a.isMainThread&&h.setupDirectory&&(Z=await h.setupDirectory?.(F,W,t)),t.isWorker&&h.handleDirectory&&(Z=await h.handleDirectory?.(F,W,t)),Z)continue;for(let ce of await(0,wF.default)(N,{onlyFiles:!1,objectMode:!0})){let{path:_e,dirent:de}=ce;d=!0;let xe=(0,at.relative)(e,_e).replace(/\\/g,"/");if(M)if(xe.startsWith(M))xe=xe.slice(M.length+1);else throw new Error(`The root path '${f.root}' does not reference a valid part of the file path '${xe}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let we=F+(F.endsWith("/")?"":"/")+xe;try{if(de.isFile()){let Ge=await ble(_e);$a.isMainThread&&await h.setupFile?.(Ge,we,_e,t),t.isWorker&&await h.handleFile?.(Ge,we,_e,t)}else $a.isMainThread&&await h.setupDirectory?.(we,_e,t),t.isWorker&&await h.handleDirectory?.(we,_e,t)}catch(Ge){Ge.message=`Could not load ${de.isFile()?"file":"directory"} '${_e}'${f.module?" using '"+f.module+"'":""} for application '${e}' due to: ${Ge.message}`,ld?.(Ge),((0,Al.getWorkerIndex)()===0?console:gl.default).error(Ge),t.set(f.path||"/",new ud(Ge)),Rl.set(n?E:(0,at.basename)(e),Ge.message)}}}}catch(S){S.message=`Could not load component '${E}' for application '${(0,at.basename)(e)}' due to: ${S.message}`,ld?.(S),((0,Al.getWorkerIndex)()===0?console:gl.default).error(S),t.set(f.path||"/",new ud(S),null,!0),Rl.set(n?E:(0,at.basename)(e),S.message)}}if($a.isMainThread&&!PF&&i&&(0,Al.watchDir)(e,async()=>MF()),c.extensionModule)return await hf((0,at.join)(e,c.extensionModule));if(!d&&t.isWorker){let E=`${e} did not load any modules, resources, or files, is this a valid component?`;ld?.(new Error(E)),((0,Al.getWorkerIndex)()===0?console:gl.default).error(E),Rl.set((0,at.basename)(e),E)}}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,ld?.(c),t.set("",new ud(c))}}}var tt,at,$a,IF,Vb,Ol,wF,Al,gl,CF,DF,Ole,LF,ble,qb,kb,PF,Fb,Rl,Nle,$b,NF,yF,ld,ud,qh=be(()=>{tt=require("fs"),at=require("path"),$a=require("worker_threads"),IF=require("yaml"),Vb=x(X()),Ol=x(L());wI();PI();MI();Mx();bq();Dq();wF=x(require("fast-glob")),Al=x(rt()),gl=x(k());bS();Cr();CF=x(ie());Mn();Re();yb();DF=x(X()),Ole=x(sF());Lh();dF();bF();LF=x(Et());wp();({readFile:ble}=tt.promises),qb=Vb.get(Ol.CONFIG_PARAMS.COMPONENTSROOT),kb=new Map,Rl=new Map;a(MF,"loadComponentDirectories");Nle={REST:sp,rest:sp,graphqlSchema:OS,jsResource:yS,fastifyRoutes:sb,login:wS,static:ib,operationsApi:Ole,customFunctions:{},http:{},clustering:Pb,authentication:C_,mqtt:Gb},$b={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty($b,"static",{value:{files:"web/**"}});NF=[],yF=new Map;a(yle,"setErrorReporter");a(Kp,"loadComponent");ud=class extends tr{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 Mp=R((hye,vF)=>{var{isMainThread:UF}=require("worker_threads"),{getTables:Ile}=(Re(),ae(Ve)),{loadComponentDirectories:wle,loadComponent:Cle}=(qh(),ae(Gh)),{resetResources:Dle}=(I_(),ae(kB)),Lle=qA(),Ple=Et(),{dirname:Mle}=require("path"),{getConnection:Ule}=gt(),vle=X(),Ble=L(),Yb=new Map;async function Hle(e=!1){!UF&&vle.get(Ble.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Ule();try{UF&&await Lle()}catch(n){console.error(n)}let t=Dle();Ile(),t.isWorker=e,await Cle(Mle(Ple.getConfigFilePath()),t,"hdb",!0,Yb),await wle(Yb,t);let r=[];for(let[n]of Yb)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(Hle,"loadRootComponents");vF.exports.loadRootComponents=Hle});var rt=R((mye,vo)=>{"use strict";var{Worker:xle,MessageChannel:Gle,parentPort:js,isMainThread:zb,threadId:qle,workerData:xi}=require("worker_threads"),{PACKAGE_ROOT:Fle}=L(),{join:GF,isAbsolute:kle,extname:$le}=require("path"),{server:qF}=(Cr(),ae(jo)),{watch:Vle,readdir:Yle}=require("fs/promises"),{totalmem:BF}=require("os"),_d=L(),FF=X(),Gi=k(),{randomBytes:Kle}=require("crypto"),{_assignPackageExport:Wle}=require("../index"),Qle=L(),HF=1024*1024,Uo=[],Kn=[],jle=50,Jb=1e4,zle="restart",kF="request_thread_info",$F="resource_report",VF="thread_info",YF="added-port",Jle="ack",Kb;Wle("threads",Kn);vo.exports={startWorker:Wb,restartWorkers:Zb,shutdownWorkers:rue,workers:Uo,setMonitorListener:uue,onMessageFromWorkers:nue,onMessageByType:XF,broadcast:iue,broadcastWithAcknowledgement:aue,setChildListenerByType:tue,getWorkerIndex:KF,getWorkerCount:WF,getTicketKeys:jF,setMainIsWorker:Zle,setTerminateTimeout:Xle,restartNumber:xi?.restartNumber||1};Kn.onMessageByType=XF;Kn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Kn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var Xb;function Xle(e){Jb=e}a(Xle,"setTerminateTimeout");function KF(){return xi?xi.workerIndex:Xb?0:void 0}a(KF,"getWorkerIndex");function WF(){return xi?xi.workerCount:Xb?1:void 0}a(WF,"getWorkerCount");function Zle(e){Xb=e}a(Zle,"setMainIsWorker");var QF=1,Wp;function jF(){return Wp||(Wp=zb?Kle(48):xi.ticketKeys,Wp)}a(jF,"getTicketKeys");Object.defineProperty(qF,"workerIndex",{get(){return KF()}});Object.defineProperty(qF,"workerCount",{get(){return WF()}});var zF={[kF](e,t){cue(t)},[$F](e,t){lue(t,e)}};function Wb(e,t={}){let r=process.constrainedMemory?.()||BF();r=Math.min(r,BF(),2e4*HF);let n=FF.get(_d.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/HF/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Kn){let _=new Gle;_.existingPort=l,i.push(_),o.push(_.port2)}$le(e)||(e+=".js");let c=new xle(kle(e)?e:GF(Fle,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:QF=t.threadCount,name:t.name,restartNumber:vo.exports.restartNumber,ticketKeys:jF()},transferList:o},t));for(let{port1:l,existingPort:_}of i)_.postMessage({type:YF,port:l,threadId:c.threadId},[l]);return jp(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>Wb(e,t),c.on("error",l=>{Gi.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{Uo.splice(Uo.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<jle?(t.unexpectedRestarts=c.unexpectedRestarts+1,Wb(e,t)):Gi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{zF[l.type]?.(l,c)}),Uo.push(c),due(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(Wb,"startWorker");var eue=[_d.THREAD_TYPES.HTTP];async function Zb(e=null,t=Math.max(QF>3,1),r=!0){if(zb){if(r){let{loadRootComponents:o}=Mp();await o()}vo.exports.restartNumber++,t<1&&(t=t*Uo.length);let n=[],s=[];for(let o of Uo.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Gi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:vo.exports.restartNumber,type:_d.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=eue.indexOf(o.name)>-1,l=new Promise(_=>{let u=setTimeout(()=>o.terminate(),Jb*2).unref();o.on("exit",()=>{clearTimeout(u),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),_()})});if(n.push(l),c&&r){let _=o.startCopy(),u=new Promise(d=>{let E=a(f=>{f.type===Qle.ITC_EVENT_TYPES.CHILD_STARTED&&(Gi.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(u)),_.off("message",E))},"startListener");Gi.trace("Waiting for worker to start",_.threadId),_.on("message",E)});s.push(u),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=bo();r&&(e==="http"||!e)&&FF.get(_d.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else js.postMessage({type:zle,workerType:e})}a(Zb,"restartWorkers");function tue(e,t){zF[e]=t}a(tue,"setChildListenerByType");function rue(e){return Zb(e,1/0,!1)}a(rue,"shutdownWorkers");var JF=[];function nue(e){JF.push(e)}a(nue,"onMessageFromWorkers");var Qb=new Map;function XF(e,t){let r=Qb.get(e);r||Qb.set(e,r=[]),r.push(t)}a(XF,"onMessageByType");var sue=10;async function iue(e){let t=0;for(let r of Kn)try{r.postMessage(e),t++>sue&&(t=0,await new Promise(setImmediate))}catch(n){Gi.error("Unable to send message to worker",n)}}a(iue,"broadcast");var Qp=new Map,oue=1;function aue(e){return new Promise(t=>{let r=0;for(let n of Kn)try{let s=oue++,i=a(()=>{Qp.delete(s),--r===0&&t(),n!==js&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Qp.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of Qp)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Gi.error("Unable to send message to worker",s)}r===0&&t()})}a(aue,"broadcastWithAcknowledgement");function cue(e){e.postMessage({type:VF,workers:ZF()})}a(cue,"sendThreadInfo");function ZF(){let e=Date.now();return Uo.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(ZF,"getChildWorkerInfo");function lue(e,t){e.resources=t,e.resources.updated=Date.now()}a(lue,"recordResourceReport");var jb;function uue(e){jb=e}a(uue,"setMonitorListener");var _ue=1e3,xF=!1;function due(){xF||(xF=!0,setInterval(()=>{for(let e of Uo){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}jb&&jb()},_ue).unref())}a(due,"startMonitoring");var fue=1e3;if(js){jp(js);for(let e=0,t=xi.addPorts.length;e<t;e++){let r=xi.addPorts[e];r.threadId=xi.addThreadIds[e],jp(r)}setInterval(()=>{let e=process.memoryUsage();js.postMessage({type:$F,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},fue).unref(),Kb=a(()=>new Promise((e,t)=>{js.on("message",r),js.postMessage({type:kF});function r(n){n.type===VF&&(js.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else Kb=ZF;vo.exports.getThreadInfo=Kb;function jp(e,t){Kn.push(e),e.on("message",r=>{if(r.type===YF)r.port.threadId=r.threadId,jp(r.port);else if(r.type===Jle){let n=Qp.get(r.id);n&&n()}else{for(let s of JF)s(r,e);let n=Qb.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){Gi.error(i)}}}).on("close",()=>{Kn.splice(Kn.indexOf(e),1)}).on("exit",()=>{Kn.splice(Kn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(jp,"addPort");if(zb){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await Yle(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(GF(s,o.name));try{for await(let{filename:o}of Vle(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await Zb(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(o){console.warn("Error trying to watch component directory",s,o)}},"watch_dir");vo.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else js.on("message",async e=>{let{type:t}=e;t===_d.ITC_EVENT_TYPES.SHUTDOWN&&(vo.exports.restartNumber=e.restartNumber,js.unref(),setTimeout(()=>{Gi.warn("Thread did not voluntarily terminate",qle),process.exit(0)},Jb).unref())})});var UP={};$e(UP,{AUDIT_STORE_OPTIONS:()=>Ah,createAuditEntry:()=>gf,openAuditStore:()=>Zp,readAuditEntry:()=>Kt,setAuditRetention:()=>hue,transactionKeyEncoder:()=>ck});function Zp(e){let t=e.auditStore=e.openDB(ik.AUDIT_STORE_NAME,Ah);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=zp){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let o=0,c;try{for(let{key:l,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-eN})){if((_[0]&15)===nN){let u=Kt(_),d=u.tableId;r[d]?.(u.recordId)}if(c=t.remove(l),await new Promise(setImmediate),++o>=Eue){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,eN/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,Xp.getWorkerIndex)()===(0,Xp.getWorkerCount)()-1&&s(zp),t}function hue(e,t=zp){eN=e,zp=t}function gf(e,t,r,n,s,i,o){let c=lk[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let l=1;n&&(n>1?bl.setFloat64(0,n):Wn.set(VS),l=9),E(0),E(t),d(r),bl.setFloat64(l,e),l+=8,s?d(s):Wn[l++]=0,Wn[n?8:0]=c;let u=Wn.subarray(0,l);if(o)return Buffer.concat([u,o]);return u;function d(f){let h=l;l+=1,l=(0,Nl.writeKey)(f,Wn,l);let m=l-h-1;m>127?m>16383?(iN.error("Key or username was too large for audit entry",f),l=h+1,Wn[h]=0):(Wn.copyWithin(h+2,h+1,l),bl.setUint16(h,m|32768),l++):Wn[h]=m}function E(f){f<128?Wn[l++]=f:f<16384?(bl.setUint16(l,f|32768),l+=2):f<1056964608?(bl.setUint32(l,f|3221225472),l+=4):(Wn[l]=255,bl.setUint32(l+1,f),l+=5)}}function Kt(e){try{let t=e.dataView||(e.dataView=new sN(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,l=t.position+=o,_=t.readFloat64();o=t.readInt();let u=t.position,d=t.position+=o;return{type:lk[n&7],tableId:i,get recordId(){return sk(e,c,l)},version:_,previousLocalTime:r,get user(){return d>u?sk(e,u,d):void 0},getValue(E,f,h){if(n&tN||n&rN&&!f)return E.decoder.decode(e.subarray(t.position));if(n&rN&&h)return oN(E.getEntry(this.recordId),h,E)}}}catch(t){return iN.error("Reading audit entry error",t,e),{}}}function sk(e,t,r){let n=e.subarray(t,r);return(0,Nl.readKey)(n,0,r-t)}var Nl,Jp,ik,ok,Xp,ak,iN,Wn,bl,ck,Ah,eN,Eue,zp,tN,rN,ek,nN,tk,rk,nk,lk,sN,no=be(()=>{Nl=require("ordered-binary"),Jp=x(X()),ik=x(_t()),ok=x(L()),Xp=x(rt()),ak=x(Y());uu();iN=x(k());em();(0,Jp.initSync)();Wn=Buffer.alloc(1024),bl=new DataView(Wn.buffer,Wn.byteOffset,1024),ck={writeKey(e,t,r){return e===lu?(t.set(lu,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Nl.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,Nl.readKey)(e,t,r)}},Ah={encoding:"binary",keyEncoder:ck},eN=(0,ak.convertToMS)((0,Jp.get)(ok.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Eue=1e3,zp=1e4;a(Zp,"openAuditStore");a(hue,"setAuditRetention");tN=16,rN=32,ek=1,nN=2,tk=3,rk=4,nk=5,lk={put:ek|tN,[ek]:"put",delete:nN,[nN]:"delete",message:tk|tN,[tk]:"message",invalidate:rk,[rk]:"invalidate",patch:nk|rN,[nk]:"patch"};a(gf,"createAuditEntry");a(Kt,"readAuditEntry");sN=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(sk,"readKeySafely")});var aN={};$e(aN,{add:()=>tm,applyReverse:()=>uk,getRecordAtTime:()=>oN,rebuildUpdateBefore:()=>rm});function tm(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function rm(e,t){let r=null;for(let n in e)if(n in t){let s=t[n];if(s?.__op__){let i=e[n];if(i?.__op__)if(i.__op__===s.__op__)r||(r={}),r[n]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[n]=i,tm(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function uk(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=pue[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=_k}}function oN(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let l=n.get(i),_=Kt(l);switch(_.type){case"put":s=_.getValue(r);break;case"patch":uk(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let l in s)s[l]===_k&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),_=Kt(l),u;switch(_.type){case"put":u=_.getValue(r);break;case"patch":u=_.getValue(r);break}for(let d in u)o[d]&&(s[d]=u[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var pue,_k,em=be(()=>{no();a(tm,"add");tm.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};pue={add:tm};a(rm,"rebuildUpdateBefore");a(uk,"applyReverse");_k={};a(oN,"getRecordAtTime")});function gn(e){return e[Pt]||(e[Pt]=Object.create(null))}function am(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,l,_;if(o.resolve)_={get(){return o.resolve(this,this[Ie])},set(u){return o.set(this,u)},configurable:!0};else{switch(o.type){case"String":l=a(function(u){if(!(typeof u=="string"||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be a string, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"ID":l=a(function(u){if(!(typeof u=="string"||u?.length>0&&u.every?.(d=>typeof d=="string")||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be a string, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"Float":case"Number":l=a(function(u){let d=u?.__op__?u.value:u;if(!(typeof d=="number"||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be a number, attempt to assign ${d}`);gn(this)[c]=u},"set");break;case"Int":l=a(function(u){let d=u?.__op__?u.value:u;if(!(d>>0===d||u==null&&o.nullable!==!1))if(typeof d=="number"&&Math.abs((d>>0)-d)<=1)d=Math.round(d),u?.__op__?u.value=d:u=d;else throw new Qn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"Long":l=a(function(u){let d=u?.__op__?u.value:u;if(!(Math.round(d)===u&&Math.abs(d)<=9007199254740992||u==null&&o.nullable!==!1))if(typeof d=="number"&&Math.abs(d)<=9007199254740992)d=Math.round(d),u?.__op__?u.value=d:u=d;else throw new Qn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"BigInt":l=a(function(u){let d=u?.__op__?u.value:u;if(!(typeof d=="bigint"||u==null&&o.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=BigInt(d),u?.__op__?u.value=d:u=d;else throw new Qn.ClientError(`${c} must be a number, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"Boolean":l=a(function(u){if(!(typeof u=="boolean"||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be a boolean, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"Date":l=a(function(u){if(!(u instanceof Date||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=new Date(u);else throw new Qn.ClientError(`${c} must be a Date, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"Bytes":l=a(function(u){if(!(u instanceof Uint8Array||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"Any":case void 0:l=a(function(u){gn(this)[c]=u},"set");break;default:l=a(function(u){if(!(typeof u=="object"||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be an object, attempt to assign ${u}`);gn(this)[c]=u},"set")}_={get(){let u=this[Pt];if(u&&c in u){let E=u[c];if(E?.__op__){let f=this[pe]?.[c];return E.update(f)}return E}let d=this[pe]?.[c];if(d&&typeof d=="object"){let E=fk(d,o);if(E)return u||(u=this[Pt]=Object.create(null)),u[c]=E}return d},set:l,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let l=this[Pt];return l?.[o]!==void 0?l[o]:this[pe]?.[o]}),i("set",function(o,c){let l=n[o];if(l)return l.set.call(this,c);if(t.sealed)throw new Qn.ClientError("Can not add a property to a sealed table schema");gn(this)[o]=c}),i("deleteProperty",function(o){gn(this)[o]=void 0}),i("toJSON",function(){let o=this[Pt],c;for(let _ in o){c||(c=Object.assign({},this[pe]));let u=o[_];if(u?.__op__){let d=c[_];u=u.update(d)}c[_]=u}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[pe])),Object.assign(c,this)),c||this[pe]}),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 fk(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){if(s?.[pe])throw new Error("Can not track an already tracked object, check for circular references");this[pe]=s}},am(r,t)),new r(e)):new nm(e);case Array:let n=new im(e.length);n[pe]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=fk(o,t?.elements)),n[s]=o}return n;default:return e}}function _E(e){let t=e[Pt],r;for(let s in t){r||(r=Object.assign({},e[pe]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=_E(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[pe])),Object.assign(r,e)),r||e[pe]}function Ya(e,t=e[Pt]){let r;if(dk.call(e,pe)&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Ya(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[pe]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=aN[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Ya(s);r[n]=s}return r?Object.freeze(r):dk.call(e,pe)?e[pe]:e}function sm(e){let t=e[pe];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Va]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.[pe]===s){if(sm(i))return!0}else return!0}}else{let r=e[Pt];if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s[pe]===i){if(sm(s))return!0}else return!0}else return!0}}return!1}var Qn,Pt,nm,dk,Va,im,om,dE=be(()=>{Mn();Qn=x(ie());em();Pt=Symbol("own-data");a(gn,"getChanges");a(am,"assignTrackedAccessors");a(fk,"trackObject");nm=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[pe])throw new Error("Can not track an already tracked object, check for circular references");this[pe]=t}};am(nm,{});a(_E,"collapseData");dk=Object.prototype.hasOwnProperty;a(Ya,"deepFreeze");a(sm,"hasChanges");Va=Symbol.for("has-array-changes"),im=class extends Array{static{a(this,"TrackedArray")}[Va];constructor(t){super(t)}splice(...t){return this[Va]=!0,super.splice(...t)}push(...t){return this[Va]=!0,super.push(...t)}pop(){return this[Va]=!0,super.pop()}unshift(...t){return this[Va]=!0,super.unshift(...t)}shift(){return this[Va]=!0,super.shift()}};im.prototype.constructor=Array;om=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var hg={};$e(hg,{CONTEXT:()=>Ie,ID_PROPERTY:()=>Ue,IS_COLLECTION:()=>Ts,MultiPartId:()=>il,RECORD_PROPERTY:()=>pe,Resource:()=>tr,snake_case:()=>Sue,transformForSelect:()=>lm});function Sue(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Ek(e,t){if(dd=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(dd=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new il;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){dd=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function Rn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,_,u;if(r?(o?(u=i,o=o[Ie]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(u=s,c=u[this.primaryKey]??null,o=i[Ie]||i):u=i:(u=s,c=u[Ue]??u[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[Ie]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(l=s,s[Symbol.iterator]){c=[],_=!0;for(let f of s){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let f=c.indexOf("?");if(f>-1){let m=this.parseQuery(c.slice(f+1));l?l=Object.assign(m,l):l=m,c=c.slice(0,f)}let h=this.parsePath(c,o,l);h?.id!==void 0?(h.query&&(l?l=Object.assign(h.query,l):l=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||_?(d=Object.assign({},t),l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),_&&(d.isCollection=!0)):d=t,o.transaction){let f=this.getResource(c,o,d);return f.then?f.then(E):E(f)}else return it(o,()=>{let f=this.getResource(c,o,d);return f.then?f.then(E):E(f)},d);function E(f){if(o.authorize){o.authorize=!1;let h=t.type==="read"?f.allowRead(o.user,l,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,u,o):f.allowUpdate(o.user,u,o):t.type==="create"?f.allowCreate(o.user,u,o):f.allowDelete(o.user,l,o);if(h?.then)return h.then(m=>{if(!m)throw new cm(o.user);return typeof u?.then=="function"?u.then(S=>e(f,l,o,S)):e(f,l,o,u)});if(!h)throw new cm(o.user)}return typeof u?.then=="function"?u.then(h=>e(f,l,o,h)):e(f,l,o,u)}a(E,"authorizeActionOnResource")}}function An(e,t){let r=new mk.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function cN(e,t,r){let n=e[pe];if(n){let s=e[Pt];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function lm(e,t){let r=t?.propertyResolvers,n=t[Ie],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):cN(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let _=[],u=i(cN(l,r,n));for(let d of e)_.push(u(d));return _},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(E=>E&&typeof E=="object"?c(E):E);let _={},u=i(cN(l,r,n)),d;for(let E of e){let f=u(E);f===void 0&&o&&(f=null),f?.then?(d||(d=[]),d.push(f.then(h=>_[E.name||E]=h))):_[E.name||E]=f}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let u=r[c.name]?.definition?.tableClass;l=s[c.name]=lm(c.select||c,u)}let _=o(c.name);return l(_)}else return o(c);else return c}}a(i,"handleProperty")}var hk,pk,mk,Ie,Ue,Ts,pe,mue,tr,cm,dd,il,Mn=be(()=>{hk=require("crypto");nu();pk=require("../index"),mk=x(ie());dE();ha();rp();Ie=Symbol.for("context"),Ue=Symbol.for("primary-key"),Ts=Symbol("is-collection"),pe=Symbol("stored-record"),mue={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},tr=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Ue]=t;let n=r?.[Ie];this[Ie]=n!==void 0?n:r||null}static get=Rn(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let _=lm(l,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Rn(function(t,r,n,s){if(Array.isArray(s)&&t[Ts]){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,_=l.getResource(c[l.primaryKey],n,{async:!0});_.then?i.push(_.then(u=>u.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):An(t,"put")},{hasContent:!0,type:"update"});static patch=Rn(function(t,r,n,s){return t.patch?t.patch(s,r):An(t,"patch")},{hasContent:!0,type:"update"});static delete=Rn(function(t,r,n,s){return t.delete?t.delete(r):An(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,hk.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),n||(n={}),it(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):An(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=Rn(function(t,r,n,s){return t.invalidate?t.invalidate(r):An(t,"delete")},{hasContent:!1,type:"update"});static post=Rn(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=Rn(function(t,r,n,s){return t.connect?t.connect(s,r):An(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Rn(function(t,r,n,s){return t.subscribe?t.subscribe(r):An(t,"subscribe")},{type:"read"});static publish=Rn(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.publish?t.publish(s,r):An(t,"publish")},{hasContent:!0,type:"create"});static search=Rn(function(t,r,n,s){let i=t.search?t.search(r):An(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=lm(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Rn(function(t,r,n,s){return t.search?t.search(s,r):An(t,"search")},{hasContent:!0,type:"read"});static copy=Rn(function(t,r,n,s){return t.copy?t.copy(s,r):An(t,"copy")},{type:"create"});static move=Rn(function(t,r,n,s){return t.move?t.move(s,r):An(t,"move")},{type:"delete"});post(t){if(this[Ts])return this.constructor.create(this[Ue],t,this[Ie]);An(this,"post")}static isCollection(t){return t?.[Ts]}static coerceId(t){return t}static parseQuery(t){return tp(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&mue[o];if(c)r.requestedContentType=c;else if(n)n.property=o;else return{query:{property:o},id:Ek(t,this),isCollection:dd}}let i=Ek(t,this);return dd?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Ie],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let _=l.asMap.get(t);if(s=_?.find(u=>u.constructor===c),s)return s;_||l.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=l.find(_=>_[Ue]===t&&_.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let _=new Map;for(let u of l){let d=u[Ue],E=_.get(d);E?E.push(u):_.set(d,[u])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[Ts]=!0),s}subscribe(t){return new ts}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new ts}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[Ue]}getContext(){return this[Ie]}};tr.prototype[Ie]=null;(0,pk._assignPackageExport)("Resource",tr);a(Sue,"snake_case");cm=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(Ek,"pathToId");il=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(Rn,"transactional");a(An,"missingMethod");a(cN,"selectFromObject");a(lm,"transformForSelect")});function gk(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=Tk,Tue(e.primaryStore,e.auditStore)):(c=Sk,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{Rk(Sk[i])})));let l=c[i]||(c[i]=[]);l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now());let _=l[o];_||(_=l[o]=new Map,_.envs=l,_.tableId=o,_.store=e.primaryStore),t=Wc(t);let u=new uN(r);u.startTime=n;let d=_.get(t);return d?d.push(u):(_.set(t,d=[u]),d.tables=_,d.key=t),u.subscriptions=d,u}function Rk(e){if(!e)return;let t=e.auditStore;try{t.resetReadTxn()}catch(n){throw n.message+=" in "+path,n}let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=Kt(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l,_=Wc(i.recordId),u=0;do{let d=o.get(_);if(d){for(let f of d)if(!(u>0&&!(f.includeDescendants&&!(f.onlyChildren&&u>1)))){if(f.startTime>=n){(0,lN.info)("omitting",c,f.startTime,n);continue}try{let h;f.supportsTransactions&&f.txnInProgress!==i.version&&(h=!0,f.txnInProgress||(r?r.push(f):r=[f]),f.txnInProgress=i.version),f.listener(c,i,n,h)}catch(h){console.error(h),(0,lN.info)(h)}}}if(_==null)break;let E=_.lastIndexOf?.("/",_.length-2);E>-1?_=_.slice(0,E):_=null,u++}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function Tue(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let l=Tk[s];if(!l)return;let _=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now(),Rk(l),r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")},"acquiredLock");r.attemptLock("thread-local-writes",_)&&_()})}}var lN,Sk,Tk,uN,Ak=be(()=>{lN=x(k());nu();I_();no();Sk=Object.create(null),Tk=Object.create(null);a(gk,"addSubscription");uN=class extends ts{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(Rk,"notifyFromTransactionData");a(Tue,"listenToCommits")});var FO={};$e(FO,{coerceType:()=>um,makeTable:()=>fm,setServerUtilities:()=>wue,updateResource:()=>_m});function fm(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:_,dbisDB:u,sealed:d}=e,{expirationMS:E,evictionMS:f,audit:h,trackDeletes:m}=e,{attributes:S}=e;S||(S=[]);let g=WS(i,n,l),T=0,b,N,U={},v=Promise.resolve(),F,M,W;for(let Q of S)(Q.assignCreatedTime||Q.name==="__createdtime__")&&(F=Q),(Q.assignUpdatedTime||Q.name==="__updatedtime__")&&(M=Q),Q.expiresAt&&(W=Q),Q.isPrimaryKey&&(U=Q);let z,Z=[],ce=[],_e=1,de=2,xe={},we={},Ge=864e5,Wd,Qd,zi,dy=!1,Xm,Zm,lY=i.getRange({start:!1,end:!1}).constructor,uY=10,_Y=6;h&&hy();class je extends tr{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=F;static updatedTimeProperty=M;static propertyResolvers;static sources=[];static get expirationMS(){return E}static dbisDB=u;static schemaDefined=_;static sourcedFrom(p,A){A&&(this.sourceOptions=A,(A.expiration||A.eviction||A.scanInterval)&&this.setTTLExpiration(A)),A?.intermediateSource?(p.intermediateSource=!0,this.sources.unshift(p)):this.sources.push(p),N=p.get&&(!p.get.reliesOnPrototype||p.prototype.get);let D=a(P=>{let y=this.sources.slice(0,-1);if(y=y.filter(B=>B[P]&&(!B[P].reliesOnPrototype||B.prototype[P])),y.length>0)if(y.length===1){let B=y[0];return(q,C,G)=>{if(q?.source!==B)return B[P](C,G,q)}}else return(B,q,C)=>{let G=[];for(let H of y){if(B?.source===H)break;G.push(H[P](q,C,B))}return Promise.all(G)}},"getApplyToIntermediateSource"),O=this.sources[this.sources.length-1],I=a(P=>{if(O[P]&&(!O[P].reliesOnPrototype||O.prototype[P]))return(y,B,q)=>{if(!y?.source)return O[P](B,q,y)}},"getApplyToCanonicalSource");return xe={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish")},we={put:D("put"),patch:D("patch"),delete:D("delete"),publish:D("publish"),invalidate:D("invalidate")},(async()=>{let P=!1,y=a(async(B,q)=>{let C=B.value,G=B.table?ft[c][B.table]:je;if(c===Rs.SYSTEM_SCHEMA_NAME&&(B.table===Rs.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||B.table===Rs.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(P=!0),B.id===void 0&&(B.id=C[G.primaryKey],B.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(B));B.source=p;let H=await G.getResource(B.id,q,yl);switch(B.type){case"put":return H._writeUpdate(C,!0,yl);case"patch":return H._writeUpdate(C,!1,yl);case"delete":return H._writeDelete(yl);case"publish":return H._writePublish(C,yl);case"invalidate":return H.invalidate(yl);default:ct.error("Unknown operation",B.type,B.id)}},"writeUpdate");try{let B=p.subscribe;B&&m==null&&(m=!0);let q=p.subscribeOnThisThread?p.subscribeOnThisThread((0,Wa.getWorkerIndex)()):(0,Wa.getWorkerIndex)()===0,C=B&&q&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let G;for await(let H of C)try{if(!(H.type==="transaction"?H.writes[0]:H)){ct.error("Bad subscription event",H);continue}if(H.source=p,G)if(H.beginTxn)G.resolve();else{y(H,G);continue}if(H.type==="end_txn")continue;let fe=it(H,()=>{if(H.type==="transaction"){let se=[];for(let Be of H.writes)try{se.push(y(Be,H))}catch(ue){throw ue.message+=" writing "+JSON.stringify(Be)+" of event "+JSON.stringify(H),ue}return Promise.all(se)}else if(H.type==="define_schema"){let se=this.attributes.slice(0),Be;for(let ue of H.attributes)se.find(Pe=>Pe.name===ue.name)||(se.push(ue),Be=!0);Be&&(St({table:s,database:c,attributes:se,origin:"cluster"}),Td.signalSchemaChange(new gd.SchemaEventMsg(process.pid,Rs.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return H.beginTxn?(G=H,y(H,H),new Promise(se=>{G.resolve=se})):y(H,H)});P&&(await fe,Td.signalUserChange(new gd.UserEventMsg(process.pid))),H.onCommit&&(fe?.then?fe.then(H.onCommit):H.onCommit())}catch(ee){ct.error("error in subscription handler",ee)}}}catch(B){ct.error(B)}})(),this}static get isCaching(){return N}static getResource(p,A,D){let O=super.getResource(p,A,D);if(p!=null){ql(p);try{if(O.hasOwnProperty(pe))return O;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let I=!D?.async||i.cache?.get(p),P=Zn(A),y=P.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return eS(p,A,{transaction:y},I,B=>{if(B?_m(O,B):O[pe]=null,A.onlyIfCached&&A.noCacheStore){if(!O.doesExist())throw new jr.ServerError("Entry is not cached",504)}else if(D?.ensureLoaded){let q=tS(p,B,A,O);if(q)return P?.disregardReadTxn(),O[_N]=!0,fN(q,C=>(_m(O,C),O))}return O})}catch(I){throw I.message.includes("Unable to serialize object")&&(I.message+=": "+JSON.stringify(p)),I}}return O}ensureLoaded(){let p=tS(this[Ue],this[Qr],this[Ie]);if(p)return this[_N]=!0,fN(p,A=>{this[Qr]=A,this[pe]=A.value,this[md]=A.version})}static setTTLExpiration(p){if(typeof p=="number")E=p*1e3,f||(f=0);else if(p&&typeof p=="object")E=p.expiration*1e3,f=(p.eviction||0)*1e3,Ge=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(E<0)throw new Error("Expiration can not be negative");Ge=Ge||(E+f)/4,Jd()}static enableAuditing(p=!0){h=p,p&&hy(),je.audit=p}static coerceId(p){return p===""?null:um(p,U)}static async dropTable(){if(delete ft[c][s],c===o){for(let p of S)u.remove(je.tableName+"/"+p.name),r[p.name]?.drop();u.remove(je.tableName+"/"),i.drop(),await u.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Td.signalSchemaChange(new gd.SchemaEventMsg(process.pid,Rs.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(p){if(typeof p=="string")return this.getProperty(p);if(this[Ts])return this.search(p);if(this[Ue]===null){if(p?.conditions)return this.search(p);let A=je.getRecordCount();return{recordCount:A.recordCount,estimatedRecordRange:A.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[Ie]?.returnNonexistent)return this}allowRead(p,A){let D=zd(p);if(D?.read){if(D.isSuperUser)return!0;let O=D.attribute_permissions,I=A?.select;if(O?.length>0||dy&&I){if(A||(A={}),I){let P=O?.length>0&&dN(O,"read");A.select=I.map(y=>{let B=y.name||y;if(!P||P[B]){let q=zi[B]?.definition?.tableClass;if(q){if(y.name||(y={name:y}),!q.prototype.allowRead.call(null,p,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else A.select=O.filter(P=>P.read&&!zi[P.attribute_name]).map(P=>P.attribute_name);return A}else return!0}}allowUpdate(p,A){let D=zd(p);if(D?.update){let O=D.attribute_permissions;if(O?.length>0){let I=dN(O,"update");for(let P in A)if(!I[P])return!1;for(let P of O){let y=P.attribute_name;!P.update&&!(y in A)&&(A[y]=this.getProperty(y))}}return!0}}allowCreate(p,A){if(this[Ts]){let D=zd(p);if(D?.insert){let O=D.attribute_permissions;if(O?.length>0){let I=dN(O,"insert");for(let P in A)if(!I[P])return!1}else return!0}}else return this.allowUpdate(p,{})}allowDelete(p){return zd(p)?.delete}update(p,A){if(!Zn(this[Ie]))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let O;return typeof p=="object"&&p&&(A?(Object.isFrozen(p)&&(p=Object.assign({},p)),this[pe]={},this[Pt]=p):(O=this[Pt],O&&(p=Object.assign(O,p)),this[Pt]=O=p)),this._writeUpdate(this[Pt],A),this}addTo(p,A){if(typeof A=="number"||typeof A=="bigint")this[fd]===bk?this.set(p,(+this.getProperty(p)||0)+A):(this[fd]||this.update(),this.set(p,new om(A)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,A){if(typeof A=="number")return this.addTo(p,-A);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this[Qr]}invalidate(p){let A=this[Ie],D=this[Ue];ql(D),Zn(this[Ie]).addWrite({key:D,store:i,invalidated:!0,entry:this[Qr],nodeName:this[Ie]?.nodeName,before:xe.invalidate?.bind(this,A,D),beforeIntermediate:we.invalidate?.bind(this,A,D),commit:(I,P)=>{if(P?.version>I)return;let y=null;for(let B in r)y||(y={}),y[B]=this.getProperty(B);g(D,y,this[Qr],I,Ed,h,this[Ie],0,"invalidate")}})}static evict(p,A,D){let O=this.Source,I;if(!((N||h)&&(!A||(I=i.getEntry(p),!I||!A)||I.version!==D))){if(N){if(i.hasLock(p,I.version))return;let P;for(let y in r)P||(P={}),P[y]=A[y];if(P)return g(p,P,I,D,hd,null,null,0,null,!0)}return i.ifVersion(p,D,()=>{jd(p,A,null)}),h?g(p,null,I,D,hd,null,null,0,null,!0):i.remove(p,D)}}lock(){throw new Error("Not yet implemented")}static operation(p,A){return p.table||=s,p.schema||=c,Pk.operation(p,A)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,A,D){let O=this[Ie],I=Zn(O),P=this[Ue];ql(P);let y=this[Qr];this[fd]=A?bk:Nue;let B={key:P,store:i,entry:y,nodeName:O?.nodeName,validate:q=>{p||(p=this[Pt]),A||p&&sm(this[Pt]===p?this:p)?O?.source||(I.checkOverloaded(),this.validate(p,!A),M&&(p[M.name]=M.type==="Date"?new Date(q):M.type==="String"?new Date(q).toISOString():q),A&&(t&&p[t]!==P&&(p[t]=P),F&&(y?.value?p[F.name]=y?.value[F.name]:p[F.name]=F.type==="Date"?new Date(q):F.type==="String"?new Date(q).toISOString():q),p=Ya(p))):I.removeWrite(B)},before:A?xe.put?()=>xe.put(O,P,p):null:xe.patch?()=>xe.patch(O,P,p):xe.put?()=>xe.put(O,P,Ya(this)):null,beforeIntermediate:A?we.put?()=>we.put(O,P,p):null:we.patch?()=>we.patch(O,P,p):we.put?()=>we.put(O,P,Ya(this)):null,commit:(q,C,G)=>{if(G){if(O&&C?.version>(O.lastModified||0)&&(O.lastModified=C.version),this[Qr]=C,C?.value?.[pe])throw new Error("Can not assign a record to a record, check for circular references");A||(this[pe]=C?.value??null)}this[Pt]=void 0,this[md]=q;let H=C?.value,ee=p;if(this[fd]=0,C?.version>=q)if(h){let ue=C.localTime,Pe=C.version;for(;ee&&(ue>q||Pe>=q&&ue>0);){let re=l.get(ue);if(!re)break;let J=Kt(re);if(Pe=J.version,Pe>q){if(J.type==="patch"){let ge=J.getValue(i);ee=rm(ee,ge)}else if(J.type==="put"||J.type==="delete")return}else if(Pe===q)return;ue=J.previousLocalTime}}else{if(A)return;ee=rm(ee,H)}let fe;if(A?fe=ee:(this[pe]=H,fe=A?ee:Ya(this,ee)),this[pe]=fe,fe?.[pe])throw new Error("Can not assign a record to a record, check for circular references");let se;A||(se=p),jd(P,H,fe);let Be=A?"put":"patch";g(P,fe,C,q,0,h,O,O.expiresAt||(E?E+Date.now():0),Be,!1,se),O.expiresAt&&Jd()}};I.addWrite(B)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[Ts]){for await(let A of this.search(p))(await je.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[pe]?this._writeDelete(p):!1}_writeDelete(p){let A=Zn(this[Ie]),D=this[Ue];ql(D);let O=this[Ie];return A.addWrite({key:D,store:i,resource:this,nodeName:O?.nodeName,before:xe.delete?.bind(this,O,D),beforeIntermediate:we.delete?.bind(this,O,D),commit:(I,P,y)=>{let B=P?.value;y&&(O&&P?.version>(O.lastModified||0)&&(O.lastModified=P.version),_m(this,P)),!(P?.version>I)&&(jd(this[Ue],B),ct.trace("Write delete entry",D,I),h||m?(g(D,null,this[Qr],I,0,h,this[Ie],0,"delete"),h||Jd()):i.remove(this[Ue]))}}),!0}search(p){let A=this[Ie],D=Zn(A);if(!p)throw new Error("No query provided");let O=p.conditions;O?O.length===void 0&&(O=O[Symbol.iterator]?Array.from(O):[O]):O=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[Ue]&&(O=[{attribute:null,comparator:"prefix",value:this[Ue]}].concat(O));let I,P={};function y(J,ge){let qe;switch(ge){case"and":case void 0:if(J.length<1)throw new Error('An "and" operator requires at least one condition');qe=!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 Is=qe&&{},Ji;for(let ze of J){if(ze.conditions){ze.conditions=y(ze.conditions,ze.operator);continue}let Zt=ze[0]??ze.attribute,Ln=Zt==null?U:Mi(S,Zt);if(Ln){if(qe){let ws=hs(Zt),er=Is[ws];er?(er.push(ze),Ji=!0):Is[ws]=[ze]}(Ln.type||EO[ze.comparator])&&(ze[1]===void 0?ze.value=q(ze.value,Ln):ze[1]=q(ze[1],Ln))}else if(Zt!=null)throw(0,jr.handleHDBError)(new Error,`${Zt} is not a defined attribute`,404)}if(p.enforceExecutionOrder)return J;if(Ji)for(let ze in Is){let Zt=Is[ze],Ln=Zt.length;if(Ln>1)for(let ws=0;ws<Ln;ws++){let er=Zt[ws];if(er.comparator==="ge"||er.comparator==="greater_than_equal")for(let Xi=0;Xi<Ln;Xi++){let ac=Zt[Xi];(ac.comparator==="le"||ac.comparator==="less_than_equal")&&(er.comparator="between",er.value=[er.value,ac.value],J.splice(J.indexOf(ac),1))}if(er.comparator==="equals"||!er.comparator){for(let Xi=0;Xi<Ln;Xi++)if(Xi!==ws){let ac=Zt[Xi];J.splice(J.indexOf(ac),1)}break}}}return J}a(y,"prepareConditions");function B(J,ge){if(p.enforceExecutionOrder)return J;for(let qe of J)qe.conditions&&(qe.conditions=B(qe.conditions,qe.operator));return J.length>1&&ge!=="or"?(0,Dk.sortBy)(J,ep(je)):J}a(B,"orderConditions");function q(J,ge){return Array.isArray(J)?J.map(qe=>um(qe,ge)):um(J,ge)}a(q,"coerceTypedValues");let C=p.operator;(O.length>0||C)&&(O=y(O,C));let G=typeof p.sort=="object"&&p.sort,H;if(G&&C!=="or"){let J=G.attribute;if(J==null)throw new jr.ClientError("Sort requires an attribute");if(I=O.find(ge=>hs(ge.attribute)===hs(J)),!I){let ge=Mi(S,J);if(!ge)throw(0,jr.handleHDBError)(new Error,`${Array.isArray(J)?J.join("."):J} is not a defined attribute`,404);if(ge.indexed)I={attribute:J,comparator:"sort"},O.push(I);else if(O.length===0&&!p.allowFullScan)throw(0,jr.handleHDBError)(new Error,`${Array.isArray(J)?J.join("."):J} is not indexed and not combined with any other conditions`,404)}I&&(I.descending=!!G.descending)}O=B(O,C),G&&(I&&O[0]===I?G.next&&(H={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(I&&O.splice(O.indexOf(I),1),H=G));let ee=p.select;if(O.length===0&&(O=[{attribute:t,comparator:"greater_than",value:!0}]),p.explain)return{conditions:O,operator:C,postOrdering:H,selectApplied:!!ee};let fe=D.useReadTxn(),se=hO(O,C,je,fe,p,A,(J,ge)=>fy(J,ee,A,fe,ge),P),Be=p.ensureLoaded!==!1;H||(se=re(se));let ue=je.transformEntryForSelect(ee,A,fe,P,Be,!0),Pe=je.transformToOrderedSelect(se,ee,H,fe,A,ue);function re(J){return p.offset||p.limit!==void 0?J.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0):J}return a(re,"applyOffset"),H&&(Pe=re(Pe)),Pe.onDone=()=>{Pe.onDone=null,D.doneReadTxn()},Pe.selectApplied=!0,Pe.getColumns=()=>{if(ee){let J=[];for(let ge of ee)ge==="*"?J.push(...S.map(qe=>qe.name)):J.push(ge.name||ge);return J}return S.map(J=>J.name)},Pe}static transformToOrderedSelect(p,A,D,O,I,P){let y=new lY;if(D){p=fy(p,A,O,I,null);let B;y.iterate=function(){let C,G=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),H,ee=D.dbOrderedAttribute,fe,se,Be=!0;function ue(re){let J=re.next&&ue(re.next),ge=re.descending;return(qe,Is)=>{let Ji=rS(qe,re.attribute,O),ze=rS(Is,re.attribute,O),Zt=ge?(0,Qa.compareKeys)(ze,Ji):(0,Qa.compareKeys)(Ji,ze);return Zt===0?J?.(qe,Is)||0:Zt}}a(ue,"createComparator");let Pe=ue(D);return{async next(){let re;if(C)if(re=C.next(),re.done){if(H)return y.onDone&&y.onDone(),re}else return{value:await P.call(this,re.value)};B=[],fe&&B.push(fe);do if(re=await G.next(),re.done){if(H=!0,B.length)break;return y.onDone&&y.onDone(),re}else{let J=re.value;if(J?.then&&(J=await J),ee){let ge=rS(J,ee,O);if(Be)Be=!1,se=ge;else if(ge!==se){se=ge,fe=J;break}}B.push(J)}while(!0);return D.isGrouped,B.sort(Pe),C=B[Symbol.iterator](),re=C.next(),re.done?(y.onDone&&y.onDone(),re):{value:await P.call(this,re.value)}},return(){y.onDone&&y.onDone(),G.return()},throw(){y.onDone&&y.onDone(),G.throw()}}};let q=a(C=>{if(typeof A=="object"&&Array.isArray(C.attribute))for(let G=0;G<A.length;G++){let H=A[G],ee;if(H.name===C.attribute[0]){for(ee=H.sort||(H.sort={});ee.next;)ee=ee.next;ee.attribute=C.attribute.slice(1),ee.descending=C.descending}else H===C.attribute[0]&&(A[G]=ee={name:H,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&q(C.next)},"applySortingOnSelect");q(D)}else y.iterate=(p[Symbol.asyncIterator]||p[Symbol.iterator]).bind(p),y=y.map(P);return y}static transformEntryForSelect(p,A,D,O,I,P){if(p&&(p===t||p?.length===1&&p[0]===t)){let C=a(G=>(A?.transaction?.stale&&(A.transaction.stale=!1),G?.key??G),"transform");return p===t?C:p.asArray?G=>[C(G)]:G=>({[t]:C(G)})}let y;I&&N&&!p?.every(C=>{let G;return typeof C=="object"?G=C.name:G=C,r[G]||G===t})&&(y=!0);let B,q=a(function(C){let G;if(A?.transaction?.stale&&(A.transaction.stale=!1),C!=null){if(Xm=C,G=C.value||C.deref?.(),!G&&(C.key===void 0||C.deref)){if(C=eS(C.key??C,A,{transaction:D,lazy:p?.length<4},this?.isSync,H=>H),C?.then)return C.then(q.bind(this));G=C?.value}if(y&&C?.metadataFlags&(Ed|hd)||C?.expiresAt&&C?.expiresAt<Date.now()){if(A.onlyIfCached&&A.noCacheStore)return{[t]:C.key,message:"This entry has expired"};let H=tS(C.key??C,C,A);if(H?.then)return H.then(q)}}if(G==null)return P?Ka.SKIP:G;if(p&&!(p[0]==="*"&&p.length===1)){let H,ee=a((se,Be)=>{let ue;typeof se=="object"?ue=se.name:ue=se;let Pe=zi?.[ue],re;if(Pe){let J=O?.[ue];if(J)if(J.hasMappings){let qe=Pe.from?G[Pe.from]:hs(C.key);re=J.get(qe),re||(re=[])}else re=J.fromRecord?.(G);else re=Pe(G,A,C);let ge=a(qe=>{if(qe&&typeof qe=="object"){let Is=Pe.definition?.tableClass||je;B||(B={});let Ji=B[ue]||(B[ue]=Is.transformEntryForSelect(ue===se?null:se.select||(Array.isArray(se)?se:null),A,D,J,I));if(Array.isArray(qe)){let ze=[],Zt=Is.transformToOrderedSelect(qe,se.select,typeof se.sort=="object"&&se.sort,A,D,Ji)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Ln=a(er=>{for(;!er.done;){if(er?.then)return er.then(Ln);ze.push(er.value),er=Zt.next()}Be(ze,ue)},"nextValue"),ws=Ln(Zt.next());ws&&(H||(H=[]),H.push(ws));return}else if(qe=Ji.call(this,qe),qe?.then){H||(H=[]),H.push(qe.then(ze=>Be(ze,ue)));return}}Be(qe,ue)},"handleResolvedValue");re?.then?(H||(H=[]),H.push(re.then(ge))):ge(re);return}else re=G[ue],re&&typeof re=="object"&&ue!==se&&(re=je.transformEntryForSelect(se.select||se,A,D,null)({value:re}));Be(re,ue)},"selectAttribute"),fe;if(typeof p=="string")ee(p,se=>{fe=se});else if(Array.isArray(p))if(p.asArray)fe=[],p.forEach((se,Be)=>{se==="*"?p[Be]=G:ee(se,ue=>fe[Be]=ue)});else{fe={};let se=p.forceNulls;for(let Be of p)if(Be==="*")for(let ue in G)fe[ue]=G[ue];else ee(Be,(ue,Pe)=>{ue===void 0&&se&&(ue=null),fe[Pe]=ue})}else throw new jr.ClientError("Invalid select"+p);return H?Promise.all(H).then(()=>fe):fe}return G},"transform");return q}async subscribe(p){if(!l)throw new Error("Can not subscribe to a table without an audit log");h||St({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),p||(p={});let A=!p.rawEvents,D=[],O=gk(je,this[Ue]??null,function(P,y,B,q){try{let C=y.getValue?.(i,A);if(!C&&y.type==="patch"&&A){let H=i.getEntry(P);H?.version===y.version?C=H.value:C=y.getValue?.(i,!0,B),y.type="put"}let G={id:P,timestamp:B,value:C,version:y.version,type:y.type,beginTxn:q};D?D.push(G):this.send(G)}catch(C){ct.error(C)}},p.startTime||0,p),I=(async()=>{this[Ts]&&(O.includeDescendants=!0,p.onlyChildren&&(O.onlyChildren=!0)),p.supportsTransactions&&(O.supportsTransactions=!0);let P=this[Ue],y=p.previousCount;y>1e3&&(y=1e3);let B=p.startTime;if(this[Ts]){if(B){if(y)throw new jr.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:q,value:C}of l.getRange({start:B,exclusiveStart:!0,snapshot:!1})){let G=Kt(C);if(G.tableId!==n)continue;let H=G.recordId;if(P==null||wk(P,H)){let ee=G.getValue(i,A,q);if(O.send({id:H,timestamp:q,value:ee,version:G.version,type:G.type}),O.queue?.length>yk&&await O.waitForDrain()===!1)return}O.startTime=q}}else if(y){let q=[];for(let{key:C,value:G}of l.getRange({start:"z",end:!1,reverse:!0}))try{let H=Kt(G);if(H.tableId!==n)continue;let ee=H.recordId;if(P==null||wk(P,ee)){let fe=H.getValue(i,A,C);if(q.push({id:ee,timestamp:C,value:fe,version:H.version,type:H.type}),--y<=0)break}}catch(H){ct.error("Error getting history entry",C,H)}for(let C=q.length;C>0;)O.send(q[--C]);q[0]&&(O.startTime=q[0].timestamp)}else if(!p.omitCurrent){for(let{key:q,value:C,version:G,localTime:H}of i.getRange({start:P??!1,end:P==null?void 0:[P,Qa.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(C&&(O.send({id:q,timestamp:H,value:C,version:G,type:"put"}),O.queue?.length>yk&&await O.waitForDrain()===!1))return}}else{y&&!B&&(B=0);let q=this[Qr]?.localTime;if(q===KS&&(i.cache?.delete(P),this[Qr]=i.getEntry(P),ct.trace("re-retrieved record",q,this[Qr]?.localTime),q=this[Qr]?.localTime),ct.trace("Subscription from",B,"from",P,q),B<q){let C=[],G=q;do{let H=l.get(G);if(H){p.omitCurrent=!0;let ee=Kt(H),fe=ee.getValue(i,A,G);A&&(ee.type="put"),C.push({id:P,value:fe,timestamp:G,...ee}),G=ee.previousLocalTime}else break;y&&y--}while(G>B&&y!==0);for(let H=C.length;H>0;)O.send(C[--H]);O.startTime=q}!p.omitCurrent&&this.doesExist()&&O.send({id:P,timestamp:q,value:this[pe],version:this[md],type:"put"})}for(let q of D)O.send(q);D=null})();return p.listener&&O.on("data",p.listener),O}doesExist(){return!!(this[pe]||this[fd])}publish(p,A){this._writePublish(p,A)}_writePublish(p,A){let D=Zn(this[Ie]),O=this[Ue]||null;ql(O);let I=this[Ie];D.addWrite({key:O,store:i,entry:this[Qr],nodeName:I?.nodeName,validate:()=>{I?.source||(D.checkOverloaded(),this.validate(p))},before:xe.publish?.bind(this,I,O,p),beforeIntermediate:we.publish?.bind(this,I,O,p),commit:(P,y,B)=>{y===void 0&&m&&!h&&Jd(),g(O,y?.value??null,y,y?.version||P,0,!0,I,y?.expiresAt,"message",!1,p)}})}validate(p,A){let D,O=a((I,P,y)=>{if(P.type&&I!=null)if(A&&I.__op__&&(I=I.value),P.properties){typeof I!="object"&&(D||(D=[])).push(`Value ${gs(I)} in property ${y} must be an object${P.type?" ("+P.type+")":""}`);let B=P.properties;for(let q=0,C=B.length;q<C;q++){let G=B[q],H=O(I[G.name],G,y+"."+G.name);H&&(I[G.name]=H)}if(P.sealed&&I!=null&&typeof I=="object")for(let q in I)B.find(C=>C.name===q)||(D||(D=[])).push(`Property ${q} is not allowed within object in property ${y}`)}else switch(P.type){case"Int":(typeof I!="number"||I>>0!==I)&&(D||(D=[])).push(`Value ${gs(I)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof I!="number"||!(Math.floor(I)===I&&Math.abs(I)<=9007199254740992))&&(D||(D=[])).push(`Value ${gs(I)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof I!="number"&&(D||(D=[])).push(`Value ${gs(I)} in property ${y} must be a number`);break;case"ID":typeof I=="string"||I?.length>0&&I.every?.(B=>typeof B=="string")||(D||(D=[])).push(`Value ${gs(I)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof I!="string"&&(D||(D=[])).push(`Value ${gs(I)} in property ${y} must be a string`);break;case"Boolean":typeof I!="boolean"&&(D||(D=[])).push(`Value ${gs(I)} in property ${y} must be a boolean`);break;case"Date":if(!(I instanceof Date)){if(typeof I=="string"||typeof I=="number")return new Date(I);(D||(D=[])).push(`Value ${gs(I)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof I!="bigint"){if(typeof I=="string"||typeof I=="number")return BigInt(I);(D||(D=[])).push(`Value ${gs(I)} in property ${y} must be a bigint`)}break;case"Bytes":I instanceof Uint8Array||(D||(D=[])).push(`Value ${gs(I)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(I)){if(P.elements)for(let B=0,q=I.length;B<q;B++){let C=I[B],G=O(C,P.elements,y+"[*]");G&&(I[B]=G)}}else(D||(D=[])).push(`Value ${gs(I)} in property ${y} must be a Buffer or Uint8Array`);break}P.nullable===!1&&I==null&&(D||(D=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let I=0,P=S.length;I<P;I++){let y=S[I];if(!y.relationship&&(!A||y.name in p)){let B=O(p[y.name],y,y.name);B&&(p[y.name]=B)}}if(d)for(let I in p)S.find(P=>P.name===I)||(D||(D=[])).push(`Property ${I} is not allowed`);if(D)throw new jr.ClientError(D.join(". "))}getUpdatedTime(){return this[md]}wasLoadedFromSource(){return N?!!this[_N]:void 0}static async addAttributes(p){let A=S.slice(0);for(let D of p){if(!D.name)throw new jr.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new jr.ClientError("Attribute names cannot include backticks or forward slashes");(0,Lk.validateAttribute)(D.name),A.push(D)}return St({table:s,database:c,schemaDefined:_,attributes:A}),je.indexingOperation}static async removeAttributes(p){let A=S.filter(D=>!p.includes(D.name));return St({table:s,database:c,schemaDefined:_,attributes:A}),je.indexingOperation}static getRecordCount(p){let A=i.getStats().entryCount,D=1e3/2,O=performance.now(),I=Math.floor(A/2),P=p?.exactCount,y=0,B=0,q;for(let{value:C}of i.getRange({start:!0,lazy:!0}))if(C!=null&&y++,B++,!P&&B<I&&performance.now()-O>D){q=B;break}if(q){let C=y;y=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:q}))re!=null&&y++;let G=q*2,H=(y+C)/G,ee=Math.pow((y-C+1)/q/2,2)+H*(1-H)/G,fe=Math.max(Math.sqrt(ee)*A,1),se=Math.round(H*A),Be=Math.max(se-1.96*fe,y+C),ue=Math.min(se+1.96*fe,A),Pe=Math.pow(10,Math.round(Math.log10(fe)));return Pe>se&&(Pe=Pe/10),y=Math.round(se/Pe)*Pe,{recordCount:y,estimatedRange:[Math.round(Be),Math.round(ue)]}}return{recordCount:y}}static updatedAttributes(){zi=this.propertyResolvers={$id:(p,A,D)=>({value:D.key}),$updatedtime:(p,A,D)=>D.version,$record:(p,A,D)=>D?{value:p}:p};for(let p of this.attributes){p.resolve=null;let A=p.relationship;if(A)if(p.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),dy=!0,A.to)p.elements?.definition?(zi[p.name]=p.resolve=(D,O,I)=>{let P=D[A.from?A.from:t],y=p.elements.definition.tableClass;return I?sl({attribute:A.to,value:P},Zn(O).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:A.to,value:P}],O).asArray},p.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},p.resolve.definition=p.elements.definition,A.from&&(p.resolve.from=A.from)):console.error(`The one-to-many/many-to-many relationship property "${p.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(A.from){let D=p.definition||p.elements?.definition;D?(zi[p.name]=p.resolve=(O,I,P)=>{let y=O[A.from];if(y!==void 0){if(p.elements){let B,q=y.map(C=>{let G=P?D.tableClass.primaryStore.getEntry(C,{transaction:Zn(I).getReadTxn()}):D.tableClass.get(C,I);return G?.then&&(B=!0),G});return A.filterMissing?B?Promise.all(q).then(C=>C.filter(Ck)):q.filter(Ck):B?Promise.all(q):q}return P?D.tableClass.primaryStore.getEntry(y,{transaction:Zn(I).getReadTxn()}):D.tableClass.get(y,I)}},p.set=(O,I)=>{if(Array.isArray(I)){let P=I.map(y=>y[Ue]||y[D.tableClass.primaryKey]);O[A.from]=P}else{let P=I[Ue]||I[D.tableClass.primaryKey];O[A.from]=P}},p.resolve.definition=p.definition||p.elements?.definition,p.resolve.from=A.from):console.error(`The relationship property "${p.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${p.name}" in table "${s}" must use either "from" or "to" arguments`)}am(this,this)}static async deleteHistory(p=0){let A;for(let{key:D,value:O}of l.getRange({start:0,end:p}))await pd(),Kt(O).tableId===n&&(A=l.remove(D));await A}static async*getHistory(p=0,A=1/0){for(let{key:D,value:O}of l.getRange({start:p,end:A})){await pd();let I=Kt(O);I.tableId===n&&(yield{id:I.recordId,localTime:D,version:I.version,type:I.type,value:I.getValue(i,!0,D),user:I.user})}}static async getHistoryOfRecord(p){let A=[];if(p==null)throw new Error("An id is required");let D=i.getEntry(p);if(!D)return A;let O=D.localTime;if(!O)throw new Error("The entry does not have a local audit time");let I=0;do{await pd();let P=l.get(O);if(P){let y=Kt(P);A.push({id:y.recordId,localTime:O,version:y.version,type:y.type,value:y.getValue(i,!0,O),user:y.user}),O=y.previousLocalTime}else break}while(I<1e3&&O);return A.reverse()}static cleanup(){z?.remove()}}je.updatedAttributes();let dY=je.prototype;return dY[bue]=!0,E&&je.setTTLExpiration(E/1e3),W&&fY(),je;function jd(Q,p,A){let D;for(let O in r){let I=r[O],P=I.isIndexing,y=A?.[O],B=p?.[O];if(y===B&&!P)continue;D=!0;let q=I.indexNulls,C=(0,Sd.getIndexedValues)(y,q),G=(0,Sd.getIndexedValues)(B,q);if(G?.length>0){let H=new Set(G);if(C=C?C.filter(ee=>{if(H.has(ee))H.delete(ee);else return!0}):[],G=Array.from(H),(G.length>0||C.length>0)&&Ok){let ee=G.concat(C).map(fe=>({key:fe,value:Q}));I.prefetch(ee,Ik)}for(let ee=0,fe=G.length;ee<fe;ee++)I.remove(G[ee],Q)}else C?.length>0&&Ok&&I.prefetch(C.map(H=>({key:H,value:Q})),Ik);if(C)for(let H=0,ee=C.length;H<ee;H++)I.put(C[H],Q)}return D}a(jd,"updateIndices");function ql(Q){switch(typeof Q){case"number":return!0;case"string":if(Q.length<659)return!0;if(Q.length>Nk)throw new Error("Primary key size is too large: "+Q.length);break;case"object":if(Q===null)return!0;break;case"bigint":if(Q<2n**64n&&Q>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof Q)}if((0,Qa.writeKey)(Q,yue,0)>Nk)throw new Error("Primary key size is too large: "+Q.length);return!0}a(ql,"checkValidId");function eS(Q,p,A,D,O){let I=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),A.transaction?.isDone)return O(null,Q);let P=i.getEntry(Q,A);return P&&p&&(P?.version>(p.lastModified||0)&&(p.lastModified=P.version),P?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=P.localTime)),O(P,Q)},"whenPrefetched");return D?I():_e>0?(_e--,I()):new Promise((P,y)=>{_e===0?(_e--,i.prefetch([Q],()=>{B(),q()})):(Z.push(Q),ce.push(q),Z.length>_Y&&(_e--,B()));function B(){if(Z.length>0){let C=ce;i.prefetch(Z,()=>{_e===-1?B():_e++;for(let G of C)G()}),Z=[],ce=[],de>2&&de--}else _e=de,de<uY&&de++}a(B,"prefetch");function q(){try{P(I())}catch(C){y(C)}}a(q,"load")})}a(eS,"loadLocalRecord");function zd(Q){if(!Q?.role)return;let p=Q.role.permission;if(p.super_user)return Iue;let A=p[c],D,O=A?.tables;if(O)return O[s];if(c==="data"&&(D=p[s])&&!D.tables)return D}a(zd,"getTablePermissions");function tS(Q,p,A,D){if(N){let O;if(A.noCache?O=!0:(p?(!p.value||p.metadataFlags&(Ed|hd)||p.expiresAt&&p.expiresAt<Date.now())&&(O=!0):O=!0,En(!O,"cache-hit",s)),O){let I=Ey(Q,p,A).then(P=>(P?.value?.[pe]&&ct.error("Can not assign a record with a record property"),A&&(P?.version>(A.lastModified||0)&&(A.lastModified=P.version),A.lastRefreshed=Date.now()),P));if(A?.onlyIfCached||p?.value&&D?.allowStaleWhileRevalidate?.(p,Q)){if(I.catch(P=>ct.warn(P)),A?.onlyIfCached&&!D.doesExist())throw new jr.ServerError("Entry is not cached",504);return}else return I}}else if(p?.value&&p.expiresAt&&p.expiresAt<Date.now())return je.evict(p.key,p.value,p.version),p.value=null,{then(O){return O(p)}}}a(tS,"ensureLoadedFromSource");function Zn(Q){let p=Q?.transaction;if(p){if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let A=p.next;if(!A)return p=p.next=new Ea,p.lmdbDb=i,p;p=A}while(!0)}else return new lE}a(Zn,"txnForContext");function rS(Q,p,A){if(!Q)return;Xm=Q;let D=Q.value||Q.deref?.()||(Xm=i.getEntry(Q.key))?.value;if(typeof p=="object"){let I=zi,P=D;for(let y=0,B=p.length;y<B;y++){let q=p[y],C=I?.[q];P=C&&P?C(P,A,!0)?.value:P?.[q],I=C?.definition?.tableClass?.propertyResolvers}return P}let O=zi[p];return O?O(D,A):D[p]}a(rS,"getAttributeValue");function fy(Q,p,A,D,O){let I=O?.length,P={transaction:D,lazy:I>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},y;function B(q,C){let G=q?.value;if(!G)return Ka.SKIP;for(let H=0;H<I;H++)if(!y?.includes(H)&&!O[H](G,q))return Ka.SKIP;return C!==void 0&&(q.key=C),q}if(a(B,"processEntry"),I>0||!Q.hasEntries){let q=Q.map(C=>{if(y=null,typeof C=="object"&&C?.key!==void 0)return I>0?B(C):C;if(C==null)return Ka.SKIP;for(let G=0;G<I;G++){let ee=O[G].idFilter;if(ee){if(!ee(C))return Ka.SKIP;y||(y=[]),y.push(G)}}return eS(C,A,P,!1,B)});return Array.isArray(Q)&&(q=q.filter(C=>C!==Ka.SKIP)),q.hasEntries=!0,q}return Q}a(fy,"transformToEntries");async function Ey(Q,p,A){let D=p?.metadataFlags,O=p?.version,I,P;if(!i.attemptLock(Q,O,()=>{clearTimeout(P);let C=i.getEntry(Q);!C||!C.value||C.metadataFlags&(Ed|hd)?I(Ey(Q,i.getEntry(Q),A)):I(C)}))return new Promise(C=>{I=C,P=setTimeout(()=>{i.unlock(Q,O)},Oue)});let y=p?.value,B={requestContext:A,replacingRecord:y,replacingVersion:O,noCacheStore:!1,source:null,resourceCache:A?.resourceCache},q=A?.responseHeaders;return new Promise((C,G)=>{let H;fN(it(B,async ee=>{let fe=performance.now(),se,Be,ue;try{for(let ge of je.sources)if(ge.get&&(!ge.get.reliesOnPrototype||ge.prototype.get)&&(B.source=ge,se=await ge.get(Q,B),se))break;ue=D&Ed;let re=B.lastModified||ue&&O;Be=ue||re>O||!y,re||(re=(0,Sd.getNextMonotonicTime)());let J=performance.now()-fe;if(hr(J,"cache-resolution",s,null,"success"),q&&wh(q,"Server-Timing",`cache-resolve;dur=${J.toFixed(2)}`,!0),ee.timestamp=re,E&&!B.expiresAt&&(B.expiresAt=Date.now()+E),se){if(typeof se!="object")throw new Error("Only objects can be cached and stored in tables");typeof se.toJSON=="function"&&(se=se.toJSON()),t&&se[t]!==Q&&(se[t]=Q)}H=!0,C({version:re,value:se})}catch(re){re.message+=` while resolving record ${Q} for ${s}`,y&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(C({version:O,value:y}),ct.trace(re.message,"(returned stale record)")):G(re);let J=performance.now()-fe;hr(J,"cache-resolution",s,null,"fail"),q&&wh(q,"Server-Timing",`cache-resolve;dur=${J.toFixed(2)}`,!0),B.transaction.abort();return}if(A?.noCacheStore||B.noCacheStore){B.transaction.abort();return}Zn(B).addWrite({key:Q,store:i,entry:p,nodeName:"source",commit:(re,J)=>{if(J?.version!==O)return;let ge=jd(Q,y,se);se?(we.put?.(B,Q,se),g(Q,se,J,re,0,h&&Be||null,B,B.expiresAt,"put",!!ue)):(we.delete?.(B,Q),h||m?g(Q,null,J,re,0,h&&Be||null,B,0,"delete",!!ue):i.remove(Q,O))}})}),()=>{i.unlock(Q,O)},ee=>{i.unlock(Q,O),H&&ct.error("Error committing cache update",ee)})})}a(Ey,"getFromSource");function Jd(){if(Ge!==Wd&&(Wd=Ge,(0,Wa.getWorkerIndex)()===(0,Wa.getWorkerCount)()-1)){if(Qd&&clearTimeout(Qd),!Ge)return;let Q=new Date;Q.setMonth(0),Q.setDate(1),Q.setHours(0),Q.setMinutes(0),Q.setSeconds(0);let p=Math.ceil((Date.now()-Q.getTime())/Ge)*Ge+Q.getTime(),A=a(D=>{ct.trace(`Scheduled next cleanup scan at ${new Date(D)}ms`),Qd=setTimeout(()=>v=v.then(async()=>{if(A(Math.max(D+Ge,Date.now())),i.rootStore.status!=="open"){clearTimeout(Qd);return}let O=50,I=new Array(O),P=0;ct.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:B,value:q,version:C,expiresAt:G}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let H;q===null&&!h&&C+Aue<Date.now()?H=i.remove(B,C):G&&G+f<Date.now()&&(H=je.evict(B,q,C),y++),H&&(await I[P],I[P]=H.catch(ee=>{ct.error("Cleanup error",ee)}),++P>=O&&(P=0)),await pd()}ct.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){ct.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");A(p)}}a(Jd,"scheduleCleanup");function hy(){z=l?.addDeleteRemovalCallback(n,Q=>{let p=i.getEntry(Q);p?.value===null&&i.remove(Q,p.version)})}a(hy,"addDeleteRemoval");function fY(){(0,Wa.getWorkerIndex)()===0&&setInterval(async()=>{if(!Zm){Zm=!0;try{let Q=W.name,p=r[Q];if(!p)throw new Error(`expiresAt attribute ${W} must be indexed`);for(let A of p.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let D of p.getValues(A)){let O=i.getEntry(D);O?.value?O.value[Q]<Date.now()&&je.evict(D,O.value,O.version):i.ifVersion(D,O?.version,()=>p.remove(A,D))}await pd()}}catch(Q){ct.error("Error in evicting old records",Q)}finally{Zm=!1}}},Rue).unref()}a(fY,"runRecordExpirationEviction")}function dN(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function Ik(){}function wue(e){Pk=e}function um(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;switch(r){case"Int":case"Long":return e==="null"?null:parseInt(e);case"Float":return e==="null"?null:parseFloat(e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":return isNaN(e)?e==="null"?null:(Cue.test(e)||(e+="Z"),new Date(e)):new Date(+e);case void 0:case"Any":return(0,dm.autoCast)(e);default:return e}}function wk(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function fN(e,t,r){return e?.then?e.then(t,r):t(e)}function _m(e,t){e[Qr]=t,e[pe]=t?.value??null,e[md]=t?.version}function Ck(e){return e!=null}function gs(e){try{return JSON.stringify(e)}catch{return e}}var Rs,Ka,Sd,Dk,Lk,Rd,jr,Td,gd,ct,Qa,Wa,dm,gue,Pk,Rue,Aue,Ok,Oue,md,bue,Qr,fd,bk,Nue,_N,yl,Ed,hd,yue,Nk,yk,Iue,tIe,Cue,pd,pp=be(()=>{Rs=x(L()),Ka=require("lmdb"),Sd=x(wr()),Dk=require("lodash"),Lk=x(ru());Mn();Hg();Rd=x(X());Ak();jr=x(ie()),Td=x(hi()),gd=x(os());Re();rp();ct=x(k());dE();ha();Qa=require("ordered-binary"),Wa=x(rt());no();dm=x(Y());uu();Ti();em();w_();gue=new Uint8Array(9);gue[8]=192;Rue=6e4,Aue=864e5;Rd.initSync();Ok=Rd.get(Rs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Oue=1e4,md=Symbol.for("version"),bue=Symbol.for("incremental-update"),Qr=Symbol("entry"),fd=Symbol("is-saving"),bk=1,Nue=2,_N=Symbol("loaded-from-source"),yl={isNotification:!0,ensureLoaded:!1},Ed=1,hd=8,yue=Buffer.allocUnsafeSlow(8192),Nk=1978,yk=100,Iue={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},tIe=(0,dm.convertToMS)(Rd.get(Rs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(fm,"makeTable");a(dN,"attributesAsObject");a(Ik,"noop");a(wue,"setServerUtilities");Cue=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(um,"coerceType");a(wk,"isDescendantId");pd=a(()=>new Promise(setImmediate),"rest");a(fN,"when");a(_m,"updateResource");a(Ck,"exists");a(gs,"stringify")});var Ve={};$e(Ve,{database:()=>Ic,databases:()=>ft,dropDatabase:()=>kg,dropTableMeta:()=>Uue,getDatabases:()=>Br,getDefaultCompression:()=>Oh,getTables:()=>Due,onUpdatedTable:()=>Mb,readMetaDb:()=>Ad,resetDatabases:()=>R_,table:()=>St,tables:()=>sn});function Due(){return Sm||Br(),sn||{}}function Br(){if(Sm)return ft;Sm=!0,Cl=new Map;let e=(0,Ot.getHdbBasePath)()&&(0,lt.join)((0,Ot.getHdbBasePath)(),Vt.DATABASES_DIR_NAME),t=(0,Ot.get)(Vt.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Ot.get)(Vt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,On.existsSync)(e)?e:(0,lt.join)((0,Ot.getHdbBasePath)(),Vt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,On.existsSync)(e))for(let r of(0,On.readdirSync)(e,{withFileTypes:!0})){let n=(0,lt.basename)(r.name,".mdb");r.isFile()&&(0,lt.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Ad((0,lt.join)(e,r.name),null,n)}if((0,On.existsSync)((0,wl.getBaseSchemaPath)())){for(let r of(0,On.readdirSync)((0,wl.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,lt.join)((0,wl.getBaseSchemaPath)(),r.name),s=(0,lt.join)((0,wl.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,On.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,lt.extname)(i.name).toLowerCase()===".mdb"){let o=(0,lt.join)(s,i.name);Ad((0,lt.join)(n,i.name),(0,lt.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,On.existsSync)(s))for(let o of(0,On.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,lt.extname)(o.name).toLowerCase()===".mdb"&&Ad((0,lt.join)(s,o.name),(0,lt.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,lt.join)(c.path,(0,lt.basename)(o+".mdb"));(0,On.existsSync)(l)&&Ad(l,o,r,null,!0)}}for(let r in ft){let n=Cl.get(r);if(n){let s=ft[r];r.includes("delete")&&jn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(jn.trace(`delete table class ${i}`),delete s[i])}else if(delete ft[r],r==="data"){for(let s in sn)delete sn[s];delete sn[Tm]}}return Cl=null,ft}}function R_(){Sm=!1;for(let[,e]of Bo)e.needsDeletion=!0;Br();for(let[e,t]of Bo)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Bo.delete(e));return ft}function Ad(e,t,r=pN,n,s){let i=new EN.default(e,!1);try{let o=Bo.get(e);o?o.needsDeletion=!1:(o=(0,hm.open)(i),Bo.set(e,o));let c=new ja.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(Em.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,On.existsSync)(n)&&(i.path=n,_=(0,hm.open)(i),_.isLegacy=!0):_=Zp(o));let u=Bk(r),d=u[Tm],E=new Map;for(let{key:f,value:h}of l.getRange({start:!1})){let[m,S]=f.toString().split("/");S===""?S=h.name:S||(S=m,m=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(m);let g=E.get(m);g||E.set(m,g={attributes:[]}),(S==null||h.is_hash_attribute)&&(g.primary=h),S!=null&&g.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:m,primary:S}=h;if(!S){for(let Z of m)if(Z.is_hash_attribute||Z.isPrimaryKey){S=Z;break}if(!S){jn.warn(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(m)}`);continue}}let g=u[f],T={},b=[],N,U,v=typeof S.audit=="boolean"?S.audit:(0,Ot.get)(Vt.CONFIG_PARAMS.LOGGING_AUDITLOG),F=S.trackDeletes,M=S.expiration,W=S.eviction,z=S.sealed;if(g)T=g.indices,b=g.attributes,g.schemaVersion++;else{N=S.tableId,N?N>=(l.get(Il)||0)&&l.putSync(Il,N+1):(S.tableId=N=l.get(Il),N||(N=1),l.putSync(Il,N+1),l.putSync(S.key,S));let Z=new ja.default(!S.is_hash_attribute,S.is_hash_attribute);if(Z.compression=S.compression,Z.compression){let ce=(0,Ot.get)(Vt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||vk;Z.compression.threshold=ce}U=Rf(o.openDB(S.key,Z)),U.rootStore=o,U.tableId=N}for(let Z of m){Z.attribute=Z.name;try{if(!Z.is_hash_attribute&&(Z.indexed||Z.attribute&&!Z.name)){if(!T[Z.name]){let _e=new ja.default(!Z.is_hash_attribute,Z.is_hash_attribute);T[Z.name]=o.openDB(Z.key,_e),T[Z.name].indexNulls=Z.indexNulls}let ce=b.find(_e=>_e.name===Z.name);ce?b.splice(b.indexOf(ce),1,Z):b.push(Z)}}catch(ce){jn.error("Error trying to update attribute",Z,b,T,ce)}}if(!g){g=Hk(u,f,fm({primaryStore:U,auditStore:_,audit:v,sealed:z,expirationMS:M&&M*1e3,evictionMS:W&&W*1e3,trackDeletes:F,tableName:f,tableId:N,primaryKey:S.name,databasePath:s?r+"/"+f:r,databaseName:r,indices:T,attributes:m,schemaDefined:S.schemaDefined,dbisDB:l})),g.schemaVersion=1;for(let Z of mN)Z(g)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Bk(e){let t=ft[e];if(t||(e==="data"?t=ft[e]=sn:e==="system"?Object.defineProperty(ft,"system",{value:t=Object.create(null),configurable:!0}):t=ft[e]=Object.create(null)),Cl&&!Cl.has(e)){let r=new Set;t[Tm]=r,Cl.set(e,r)}return t}function Hk(e,t,r){return e[t]=r,r}function Ic({database:e,table:t}){e||(e=pN),Br();let r=Bk(e),n=(0,lt.join)((0,Ot.getHdbBasePath)(),Vt.DATABASES_DIR_NAME),s=(0,Ot.get)(Vt.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,Ot.get)(Vt.CONFIG_PARAMS.STORAGE_PATH)||((0,On.existsSync)(n)?n:(0,lt.join)((0,Ot.getHdbBasePath)(),Vt.LEGACY_DATABASES_DIR_NAME));let o=(0,lt.join)(n,(i?t:e)+".mdb"),c=Bo.get(o);if(!c){let l=new EN.default(o,!1);c=(0,hm.open)(l),Bo.set(o,c)}return c}async function kg(e){if(!ft[e])throw new Error("Schema does not exist");let t=ft[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Bo.delete(r.path),r.status==="open"&&(await r.close(),await Od.remove(r.path));if(r||(r=Ic({database:e,table:null}),r.status==="open"&&(await r.close(),await Od.remove(r.path))),e==="data"){for(let n in sn)delete sn[n];delete sn[Tm]}delete ft[e]}function St({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:l,schemaDefined:_,origin:u}){t||(t=pN);let d=Ic({database:t,table:e}),E=ft[t],f=E?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,m,S,g;_==null&&(_=!0);let T=new ja.default(!1);for(let M of i)M.attribute&&!M.name?(M.name=M.attribute,M.indexed=!0):M.attribute=M.name,M.expiresAt&&(M.indexed=!0);let b,N;if(f){if(h=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let M=d.auditStore;M||(M=Zp(d)),m=i.find(ce=>ce.isPrimaryKey)||{},h=m.name,m.is_hash_attribute=m.isPrimaryKey=!0,m.schemaDefined=_,m.compression=Oh(),l&&(m.trackDeletes=!0),o=m.audit=typeof o=="boolean"?o:(0,Ot.get)(Vt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(m.expiration=r),n&&(m.eviction=n),typeof c=="boolean"&&(m.sealed=c),u&&(m.origins?m.origins.includes(u)||m.origins.push(u):m.origins=[u]),jn.trace(`${e} table loading, opening primary store`);let W=new ja.default(!1,!0);W.compression=m.compression;let z=e+"/",Z=Rf(d.openDB(z,W));Z.rootStore=d,g=d.dbisDb=d.openDB(Em.INTERNAL_DBIS_NAME,T),Z.tableId=g.get(Il),Z.tableId||(Z.tableId=1),g.putSync(Il,Z.tableId+1),m.tableId=Z.tableId,f=Hk(E,e,fm({primaryStore:Z,auditStore:M,audit:o,sealed:c,trackDeletes:l,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:Z.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:g})),f.schemaVersion=1,b=!0,F(),g.put(z,m)}S=f.indices,g=g||(d.dbisDb=d.openDB(Em.INTERNAL_DBIS_NAME,T)),f.dbisDB=g;let U=[];for(let{key:M,value:W}of g.getRange({start:!0})){let[z,Z]=M.toString().split("/");if(Z===""&&(Z=W.name),Z){if(z!==e)continue}else continue;let ce=i.find(de=>de.name===Z),_e=!ce?.indexed&&W.indexed&&!W.isPrimaryKey;if((!ce||_e)&&(F(),b=!0,ce||g.remove(M),_e)){let de=f.indices[z];de&&U.push(de)}}let v=[];try{for(let M of i||[]){if(M.relationship)continue;let W=e+"/"+(M.name||"");Object.defineProperty(M,"key",{value:W,configurable:!0});let z=g.get(W);if(M.isPrimaryKey){if(z=z||g.get(W=e+"/")||{},o!==f.audit||c!==c||(+r||void 0)!==(+z.expiration||void 0)||(+n||void 0)!==(+z.eviction||void 0)){let ce=Object.assign({},z);typeof o=="boolean"&&(o&&f.enableAuditing(o),ce.audit=o),r&&(ce.expiration=+r),n&&(ce.eviction=+n),c!==void 0&&(ce.sealed=c),b=!0,F(),g.put(W,ce)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let Z=!z||z.type!==M.type||z.indexed!==M.indexed||z.nullable!==M.nullable||JSON.stringify(z.attributes)!==JSON.stringify(M.attributes)||JSON.stringify(z.elements)!==JSON.stringify(M.elements);if(M.indexed){let ce=new ja.default(!0,!1),_e=d.openDB(W,ce);(Z||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<bd.workerData?.restartNumber)&&(b=!0,F(),z=g.get(W),(Z||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<bd.workerData?.restartNumber)&&(b=!0,M.indexNulls===void 0&&(M.indexNulls=!0),f.primaryStore.getStats().entryCount>0&&(M.lastIndexedKey=z?.lastIndexedKey||!1,M.indexingPID=process.pid,_e.isIndexing=!0,Object.defineProperty(M,"dbi",{value:_e}),v.push(M))),g.put(W,M)),z?.indexNulls&&M.indexNulls===void 0&&(M.indexNulls=!0),_e.indexNulls=M.indexNulls,S[M.name]=_e}else Z&&(b=!0,F(),g.put(W,M))}}finally{N&&N()}if(b&&(f.schemaVersion++,f.updatedAttributes()),jn.trace(`${e} table loading, running index`),v.length>0||U.length>0?f.indexingOperation=Mue(f,v,U):b&&pm.signalSchemaChange(new mm.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=u,b)for(let M of mN)M(f,u!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),jn.trace(`${e} table loaded`),f;function F(){N||d.transactionSync(()=>({then(M){N=M}}))}a(F,"startTxn")}async function Mue(e,t,r){try{let n=e.schemaVersion;await pm.signalSchemaChange(new mm.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let l of r)s=l.drop();let i,o=0,c=t.length;if(await new Promise(l=>setImmediate(l)),c>0){let l=0;for(let{key:_,value:u,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(u){if(l++,s=e.primaryStore.ifVersion(_,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,m=(0,Mk.getIndexedValues)(u[h]);if(m)for(let S=0,g=m.length;S<g;S++)f.dbi.put(m[S],_)}}),s.then(()=>l--,E=>{l--,jn.error(E)}),bd.workerData&&bd.workerData.restartNumber!==Uk.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=_,e.dbisDB.put(E.key,E);if(i)return}l>Lue?await s:l>Pue&&await new Promise(E=>setImmediate(E))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await pm.signalSchemaChange(new mm.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){jn.error("Error in indexing",n)}}function Uue({table:e,database:t}){let r=Ic({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function Mb(e){mN.push(e)}function Oh(){let e=(0,Ot.get)(Vt.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,Ot.get)(Vt.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,Ot.get)(Vt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||vk,n={startingOffset:32};return t&&(n.dictionary=Od.readFileSync(t)),r&&(n.threshold=r),e&&n}var Ot,Em,hm,lt,On,wl,ja,EN,Vt,Od,hN,Mk,pm,mm,bd,jn,Uk,pN,Tm,vk,sn,ft,Il,mN,Sm,Bo,Cl,Lue,Pue,Re=be(()=>{Ot=x(X()),Em=x(_t()),hm=require("lmdb"),lt=require("path"),On=require("fs"),wl=x(Je());pp();ja=x(_u()),EN=x(du()),Vt=x(L()),Od=x(require("fs-extra")),hN=require("../index"),Mk=x(wr()),pm=x(hi()),mm=x(os()),bd=require("worker_threads"),jn=x(k()),Uk=x(rt());no();uu();pN="data",Tm=Symbol("defined-tables"),vk=((0,Ot.get)(Vt.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,Ot.initSync)();sn=Object.create(null),ft=Object.create(null);(0,hN._assignPackageExport)("databases",ft);(0,hN._assignPackageExport)("tables",sn);Il=Symbol.for("next-table-id"),mN=[],Bo=new Map;a(Due,"getTables");a(Br,"getDatabases");a(R_,"resetDatabases");a(Ad,"readMetaDb");a(Bk,"ensureDB");a(Hk,"setTable");a(Ic,"database");a(kg,"dropDatabase");a(St,"table");Lue=1e3,Pue=10;a(Mue,"runIndexing");a(Uue,"dropTableMeta");a(Mb,"onUpdatedTable");a(Oh,"getDefaultCompression")});var Y=R((uIe,Jk)=>{"use strict";var Ho=require("path"),kk=require("fs-extra"),zr=k(),xk=require("fs-extra"),gm=require("os"),vue=require("net"),Bue=require("recursive-iterator"),mt=L(),Hue=hS(),Gk=require("papaparse"),Rm=require("moment"),{inspect:xue}=require("util"),qk=require("is-number"),lIe=require("lodash"),Gue=require("minimist"),que=require("https"),Fue=require("http"),{hdb_errors:Am}=ie(),kue=/^((\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)))$/,$k=require("util").promisify(setTimeout),$ue=100,Vue=5,Yue="",Kue=4,Fk={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Jk.exports={isEmpty:bn,isEmptyOrZeroLength:zs,arrayHasEmptyValues:jue,arrayHasEmptyOrZeroLengthValues:zue,buildFolderPath:Jue,isBoolean:Vk,errorizeMessage:Wue,stripFileExtension:Zue,autoCast:e_e,autoCastJSON:Yk,autoCastJSONDeep:TN,removeDir:t_e,compareVersions:r_e,isCompatibleDataVersion:n_e,escapeRawValue:s_e,unescapeValue:i_e,stringifyProps:o_e,timeoutPromise:c_e,isClusterOperation:u_e,getClusterUser:d_e,checkGlobalSchemaTable:__e,getHomeDir:Wk,getPropsFilePath:a_e,promisifyPapaParse:f_e,removeBOM:Qk,createEventPromise:E_e,checkProcessRunning:h_e,checkSchemaTableExist:p_e,checkSchemaExists:jk,checkTableExists:zk,getStartOfTomorrowInSeconds:m_e,getLimitKey:S_e,isObject:Xue,isNotEmptyAndHasValue:Que,autoCasterIsNumberCheck:Kk,backtickASTSchemaItems:T_e,isPortTaken:l_e,createForkArgs:g_e,autoCastBoolean:R_e,async_set_timeout:$k,getTableHashAttribute:A_e,doesSchemaExist:O_e,doesTableExist:b_e,stringifyObj:N_e,ms_to_time:y_e,changeExtension:I_e,getEnvCliRootPath:gN,noBootFile:w_e,httpRequest:C_e,transformReq:D_e,convertToMS:L_e,PACKAGE_ROOT:mt.PACKAGE_ROOT};function Wue(e){return e instanceof Error?e:new Error(e)}a(Wue,"errorizeMessage");function bn(e){return e==null}a(bn,"isEmpty");function Que(e){return!bn(e)&&(e||e===0||e===""||Vk(e))}a(Que,"isNotEmptyAndHasValue");function zs(e){return bn(e)||e.length===0||e.size===0}a(zs,"isEmptyOrZeroLength");function jue(e){if(bn(e))return!0;for(let t=0;t<e.length;t++)if(bn(e[t]))return!0;return!1}a(jue,"arrayHasEmptyValues");function zue(e){if(zs(e))return!0;for(let t=0;t<e.length;t++)if(zs(e[t]))return!0;return!1}a(zue,"arrayHasEmptyOrZeroLengthValues");function Jue(...e){try{return e.join(Ho.sep)}catch{console.error(e)}}a(Jue,"buildFolderPath");function Vk(e){return bn(e)?!1:e===!0||e===!1}a(Vk,"isBoolean");function Xue(e){return bn(e)?!1:typeof e=="object"}a(Xue,"isObject");function Zue(e){return zs(e)?Yue:e.slice(0,-Kue)}a(Zue,"stripFileExtension");function e_e(e){return bn(e)||e===""||typeof e!="string"?e:Fk[e]!==void 0?Fk[e]:Kk(e)===!0?Number(e):kue.test(e)?new Date(e):e}a(e_e,"autoCast");function Yk(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Yk,"autoCastJSON");function TN(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let n=e[t],s=TN(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=TN(r);n!==r&&(e[t]=n)}return e}else return Yk(e)}a(TN,"autoCastJSONDeep");function Kk(e){if(e.startsWith("0.")&&qk(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&qk(e))}a(Kk,"autoCasterIsNumberCheck");async function t_e(e){if(zs(e))throw new Error(`Directory path: ${e} does not exist`);try{await xk.emptyDir(e),await xk.remove(e)}catch(t){throw zr.error(`Error removing files in ${e} -- ${t}`),t}}a(t_e,"removeDir");function r_e(e,t){if(zs(e)){zr.info("Invalid current version sent as parameter.");return}if(zs(t)){zr.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let _=0;_<l;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(r_e,"compareVersions");function n_e(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(n_e,"isCompatibleDataVersion");function s_e(e){if(bn(e))return e;let t=String(e);return t==="."?mt.UNICODE_PERIOD:t===".."?mt.UNICODE_PERIOD+mt.UNICODE_PERIOD:t.replace(mt.FORWARD_SLASH_REGEX,mt.UNICODE_FORWARD_SLASH)}a(s_e,"escapeRawValue");function i_e(e){if(bn(e))return e;let t=String(e);return t===mt.UNICODE_PERIOD?".":t===mt.UNICODE_PERIOD+mt.UNICODE_PERIOD?"..":String(e).replace(mt.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(i_e,"unescapeValue");function o_e(e,t){if(bn(e))return zr.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+gm.EOL}!zs(n)&&n[0]===";"?r+=" "+n+s+gm.EOL:zs(n)||(r+=n+"="+s+gm.EOL)}catch{zr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(o_e,"stringifyProps");function Wk(){let e;try{e=gm.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Wk,"getHomeDir");function a_e(){let e=Ho.join(Wk(),mt.HDB_HOME_DIR_NAME,mt.BOOT_PROPS_FILE_NAME);return kk.existsSync(e)||(e=Ho.join(__dirname,"../","hdb_boot_properties.file")),e}a(a_e,"getPropsFilePath");function c_e(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(c_e,"timeoutPromise");async function l_e(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=vue.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(l_e,"isPortTaken");function u_e(e){try{return mt.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){zr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(u_e,"isClusterOperation");function __e(e,t){let r=(Re(),ae(Ve)).getDatabases();if(!r[e])return Am.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Am.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(__e,"checkGlobalSchemaTable");function d_e(e,t){if(bn(t)){zr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(bn(e)||zs(e)){zr.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){zr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){zr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(d_e,"getClusterUser");function f_e(){Gk.parsePromise=function(e,t,r){return new Promise(function(n,s){Gk.parse(e,{header:!0,transformHeader:Qk,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(f_e,"promisifyPapaParse");function Qk(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Qk,"removeBOM");function E_e(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;zr.info(`Got cluster status event response: ${xue(s)}`);try{i.cancel()}catch{zr.error("Error trying to cancel timeout.")}n(s)})})}a(E_e,"createEventPromise");async function h_e(e){let t=!0,r=0;do await $k($ue*r++),(await Hue.findPs(e)).length>0&&(t=!1);while(t&&r<Vue);if(t)throw new Error(`process ${e} was not started`)}a(h_e,"checkProcessRunning");function p_e(e,t){let r=jk(e);if(r)return r;let n=zk(e,t);if(n)return n}a(p_e,"checkSchemaTableExist");function jk(e){let{getDatabases:t}=(Re(),ae(Ve));if(!t()[e])return Am.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(jk,"checkSchemaExists");function zk(e,t){let{getDatabases:r}=(Re(),ae(Ve));if(!r()[e][t])return Am.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(zk,"checkTableExists");function m_e(){let e=Rm().utc().add(1,mt.MOMENT_DAYS_TAG).startOf(mt.MOMENT_DAYS_TAG).unix(),t=Rm().utc().unix();return e-t}a(m_e,"getStartOfTomorrowInSeconds");function S_e(){return Rm().utc().format("DD-MM-YYYY")}a(S_e,"getLimitKey");function T_e(e){try{let t=new Bue(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){zr.error("Got an error back ticking items."),zr.error(t)}}a(T_e,"backtickASTSchemaItems");function g_e(e){return[e]}a(g_e,"createForkArgs");function R_e(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(R_e,"autoCastBoolean");function A_e(e,t){let{getDatabases:r}=(Re(),ae(Ve)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(A_e,"getTableHashAttribute");function O_e(e){let{getDatabases:t}=(Re(),ae(Ve));return t()[e]!==void 0}a(O_e,"doesSchemaExist");function b_e(e,t){let{getDatabases:r}=(Re(),ae(Ve));return r()[e]?.[t]!==void 0}a(b_e,"doesTableExist");function N_e(e){try{return JSON.stringify(e)}catch{return e}}a(N_e,"stringifyObj");function y_e(e){let t=Rm.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(y_e,"ms_to_time");function I_e(e,t){let r=Ho.basename(e,Ho.extname(e));return Ho.join(Ho.dirname(e),r+t)}a(I_e,"changeExtension");function gN(){if(process.env[mt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[mt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Gue(process.argv);if(e[mt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[mt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(gN,"getEnvCliRootPath");var SN;function w_e(){if(SN)return SN;let e=gN();if(gN()&&kk.pathExistsSync(Ho.join(e,mt.HDB_CONFIG_FILE)))return SN=!0,!0}a(w_e,"noBootFile");function C_e(e,t){let r;return e.protocol==="http:"?r=Fue:r=que,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",l=>{c.body+=l}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(C_e,"httpRequest");function D_e(e){if(!e.schema&&!e.database){e.schema=mt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(D_e,"transformReq");function L_e(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(L_e,"convertToMS")});var X=R((dIe,r$)=>{"use strict";var RN=require("fs-extra"),za=require("path"),Xk=require("os"),P_e=require("properties-reader"),yd=k(),Nd=Y(),Ee=L(),Om=Et(),M_e="Error initializing environment manager",bm="BOOT_PROPS_FILE_PATH",Zk=!1,U_e={[Ee.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},qi={};r$.exports={BOOT_PROPS_FILE_PATH:bm,getHdbBasePath:v_e,setHdbBasePath:B_e,get:e$,initSync:x_e,setProperty:ve,initTestEnvironment:q_e,setCloneVar:G_e};function v_e(){return qi[Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(v_e,"getHdbBasePath");function B_e(e){qi[Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(B_e,"setHdbBasePath");function e$(e){let t=Om.getConfigValue(e);return t===void 0?qi[e]:t}a(e$,"get");function ve(e,t){U_e[e]&&(qi[e]=t),Om.updateConfigObject(e,t)}a(ve,"setProperty");function H_e(){let e;try{e=Nd.getPropsFilePath(),RN.accessSync(e,RN.constants.F_OK|RN.constants.R_OK),Zk=!0;let t=P_e(e);return qi[Ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Ee.HDB_SETTINGS_NAMES.INSTALL_USER),qi[Ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),qi[bm]=e,!0}catch{return yd.trace(`Environment manager found no properties file at ${e}`),!1}}a(H_e,"doesPropFileExist");function x_e(e=!1){try{(Zk||H_e()||Nd.noBootFile())&&!t$&&(Om.initConfig(e),qi[Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Om.getConfigValue(Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){yd.error(M_e),yd.error(t),console.error(t),process.exit(1)}}a(x_e,"initSync");var t$=!1;function G_e(e){t$=e}a(G_e,"setCloneVar");function q_e(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=za.join(__dirname,"../../","unitTests");qi[bm]=za.join(l,"hdb_boot_properties.file"),ve(Ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,za.join(l,"settings.test")),ve(Ee.HDB_SETTINGS_NAMES.INSTALL_USER,Xk.userInfo()?Xk.userInfo().username:void 0),ve(Ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),ve(Ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,za.join(l,"envDir","log")),ve(Ee.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),ve(Ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),ve(Ee.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),ve(Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,za.join(l,"envDir")),ve(Ee.CONFIG_PARAMS.STORAGE_PATH,za.join(l,"envDir")),s&&(ve(Ee.CONFIG_PARAMS.HTTP_SECUREPORT,e$(Ee.CONFIG_PARAMS.HTTP_PORT)),ve(Ee.CONFIG_PARAMS.HTTP_PORT,null)),ve(Ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),ve(Ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),ve(Ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Nd.isEmpty(i)?!1:i),ve(Ee.CONFIG_PARAMS.HTTP_CORS,Nd.isEmpty(i)?!1:i),ve(Ee.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),ve(Ee.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),ve(Ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),ve(Ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),ve(Ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,za.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),ve(Ee.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Nd.isEmpty(c)?!1:c),o&&(ve("CORS_ACCESSLIST",o),ve(Ee.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(ve(Ee.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),ve(Ee.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(ve(Ee.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),ve(Ee.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(ve(Ee.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),ve(Ee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${bm}. Please check your boot props and settings files`;yd.fatal(r),yd.error(t)}}a(q_e,"initTestEnvironment")});var i$=R((EIe,s$)=>{"use strict";var ym=X();ym.initSync();var Nm=L(),{httpRequest:F_e}=Y(),k_e=require("path"),n$=require("fs-extra"),$_e=require("yaml"),V_e={describe_table:!0,describe_all:!0,describe_database:!0,list_users:!0,list_roles:!0,drop_role:!0,add_user:!0,alter_user:!0,drop_user:!0,restart_service:!0,restart:!0,create_database:!0,drop_database:!0,create_table:!0,drop_table:!0,create_attribute:!0,drop_attribute:!0,search_by_id:!0,delete:!0,search_by_value:!0,csv_file_load:!0,csv_url_load:!0,cluster_get_routes:!0,cluster_network:!0,cluster_status:!0,remove_node:!0,add_component:!0,deploy_component:!0,package_component:!0,drop_component:!0,get_components:!0,get_component_file:!0,set_component_file:!0,registration_info:!0,get_fingerprint:!0,set_license:!0,get_job:!0,search_jobs_by_start_date:!0,read_log:!0,read_transaction_log:!0,read_audit_log:!0,delete_transaction_logs_before:!0,purge_stream:!0,delete_records_before:!0,install_node_modules:!0,set_configuration:!0,get_configuration:!0,create_authentication_tokens:!0,refresh_operation_token:!0,system_information:!0,sql:!0};s$.exports={cliOperations:K_e,buildRequest:Y_e};function Y_e(){let e={};for(let t of process.argv){if(V_e[t]){e.operation=t;continue}if(t.includes("=")){let[r,...n]=t.split("=");n=n.join("=");try{n=JSON.parse(n)}catch{}e[r]=n}}return e}a(Y_e,"buildRequest");async function K_e(e){await n$.exists(k_e.join(ym.get(Nm.CONFIG_PARAMS.ROOTPATH),Nm.HDB_PID_FILE))||(console.error("HarperDB must be running to perform this operation"),process.exit()),await n$.exists(ym.get(Nm.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))||(console.error("No domain socket found, unable to perform this operation"),process.exit());try{let t=await F_e({method:"POST",protocol:"http:",socketPath:ym.get(Nm.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),headers:{"Content-Type":"application/json"}},e);t=JSON.parse(t.body),e.json?console.log(JSON.stringify(t,null,2)):console.log($_e.stringify(t).trim())}catch(t){let r="Error: ";t?.response?.data?.error?r+=t.response.data.error:t?.response?.data?r+=t?.response?.data:r+=t.message,console.error(r)}}a(K_e,"cliOperations")});var c$=R((pIe,a$)=>{"use strict";var o$=require("semver/functions/major"),W_e=ma(),AN=process.versions&&process.versions.node?process.versions.node:void 0;a$.exports=Q_e;function Q_e(){let e=W_e.engines["minimum-node"];if(AN&&o$(AN)<o$(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${AN}. Please install a version of Node.js that is withing the defined range.`}}a(Q_e,"checkNodeVersion")});var bN=R((SIe,l$)=>{"use strict";var Id=X();Id.initSync();var Dl=require("fs-extra"),ON=require("path"),Ll=L(),j_e=require("crypto"),z_e=require("uuid").v4;l$.exports=J_e;function J_e(){if(Id.getHdbBasePath()!==void 0){let e=ON.join(Id.getHdbBasePath(),Ll.LICENSE_KEY_DIR_NAME,Ll.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=ON.join(Id.getHdbBasePath(),Ll.LICENSE_KEY_DIR_NAME,Ll.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=ON.join(Id.getHdbBasePath(),Ll.LICENSE_KEY_DIR_NAME,Ll.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Dl.accessSync(r),Dl.accessSync(e),Dl.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=z_e(),i=j_e.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Dl.writeFileSync(r,s),Dl.writeFileSync(e,i.privateKey),Dl.writeFileSync(t,i.publicKey)}else throw n}}}a(J_e,"checkJWTTokenExist")});var _$=R((gIe,u$)=>{"use strict";var NN=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};u$.exports={HdbInfoInsertObject:NN}});var E$=R((AIe,f$)=>{"use strict";var d$=L(),yN=class{static{a(this,"UpgradeObject")}constructor(t,r){this[d$.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[d$.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};f$.exports={UpgradeObject:yN}});var Im=R((bIe,p$)=>{"use strict";var zn=require("prompt"),Pl=require("chalk"),h$=k(),As=require("os"),IN=to(),wN=["yes","y"];async function X_e(e){let t=`${As.EOL}`+Pl.bold.green("Your current HarperDB version requires that we complete an update process.")+`${As.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${As.EOL}${As.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${As.EOL}`;zn.override=IN(["CONFIRM_UPGRADE"]),zn.start(),zn.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Pl.magenta(`${As.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await zn.get([r])}catch(s){return h$.error("There was an error when prompting user about an upgrade."),h$.error(s),!1}return wN.includes(n.CONFIRM_UPGRADE)}a(X_e,"forceUpdatePrompt");async function Z_e(e){let t=`${As.EOL}`+Pl.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${As.EOL}`);zn.override=IN(["CONFIRM_DOWNGRADE"]),zn.start(),zn.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Pl.magenta(`${As.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await zn.get([r]);return wN.includes(n.CONFIRM_DOWNGRADE)}a(Z_e,"forceDowngradePrompt");async function ede(){let e=`${As.EOL}`+Pl.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");zn.override=IN(["GENERATE_CERTS"]),zn.start(),zn.message=e;let t={properties:{GENERATE_CERTS:{description:Pl.magenta(`${As.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await zn.get([t]);return wN.includes(r.GENERATE_CERTS)}a(ede,"upgradeCertsPrompt");p$.exports={forceUpdatePrompt:X_e,forceDowngradePrompt:Z_e,upgradeCertsPrompt:ede}});var DN=R((yIe,m$)=>{"use strict";var CN=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};m$.exports=CN});var T$=R((PIe,S$)=>{"use strict";var tde=Y(),rde=Et(),wIe=k(),CIe=require("path"),DIe=require("fs"),LIe=L();S$.exports={getOldPropsValue:nde};function nde(e,t,r=!1){let n=t.getRaw(e);return tde.isNotEmptyAndHasValue(n)?n:r?rde.getDefaultConfig(e):""}a(nde,"getOldPropsValue")});var O$=R((UIe,A$)=>{"use strict";var xo=require("path"),Go=require("fs-extra"),sde=require("properties-reader"),ide=DN(),Mt=k(),{getOldPropsValue:Qe}=T$(),{HDB_SETTINGS_NAMES:oe,CONFIG_PARAMS:Ja}=L(),Xa=Et(),wm=X(),g$=Y(),Js=L(),LN=new ide("3.1.0"),R$=[];function ode(){let e=sde(wm.get(oe.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Mt.info(t);let r=` ;Settings for the HarperDB process.
36
36
 
37
37
  ;The directory selected during install where the database files reside.
38
38
  ${oe.HDB_ROOT_KEY} = ${Qe(oe.HDB_ROOT_KEY,e)}
@@ -101,12 +101,12 @@ ${oe.CUSTOM_FUNCTIONS_PORT_KEY} = ${Xa.getDefaultConfig(Ja.HTTP_PORT)}
101
101
  ${oe.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${xo.join(Qe(oe.HDB_ROOT_KEY,e),"custom_functions")}
102
102
  ;Set the max number of processes HarperDB will start for the Custom Functions server
103
103
  ${oe.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Xa.getDefaultConfig(Ja.HTTP_THREADS)}
104
- `,n=Im.get("settings_path"),s=xo.dirname(n),i=xo.join(s,"3_1_0_upgrade_settings.bak");try{Mt.info(`Backing up old settings file to: ${i}`),Go.copySync(n,i)}catch(c){throw Mt.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Mt.info("New settings file values for 3.1.0 upgrade:",r),Mt.info(`Creating new/upgraded settings file at '${n}'`),Go.writeFileSync(n,r),Mt.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),Mt.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Mt.error(c),Go.copySync(i,n),c}Im.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),Mt.info(o),o}a(ode,"updateSettingsFile_3_1_0");function ade(){let e=xo.join(g$.getHomeDir(),Js.HDB_HOME_DIR_NAME,Js.LICENSE_KEY_DIR_NAME,Js.LICENSE_FILE_NAME),t=xo.join(g$.getHomeDir(),Js.HDB_HOME_DIR_NAME,Js.LICENSE_KEY_DIR_NAME,Js.REG_KEY_FILE_NAME),r=xo.join(Im.getHdbBasePath(),Js.LICENSE_KEY_DIR_NAME,Js.LICENSE_FILE_NAME),n=xo.join(r,Js.LICENSE_FILE_NAME),s=xo.join(r,Js.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Mt.info(i);let o="Creating .license directory";console.log(o),Mt.info(o),Go.mkdirpSync(r);try{Go.accessSync(e);try{let c="Moving licence file";console.log(c),Mt.info(c),Go.moveSync(e,n);let l="License file successfully moved.";console.log(l),Mt.info(l)}catch{let l="moving license file failed";console.error(l),Mt.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Mt.warn(l)}try{Go.accessSync(t);try{let c="Moving registration file";console.log(c),Mt.info(c),Go.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Mt.info(l)}catch{let l="moving registration file failed";console.error(l),Mt.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Mt.warn(l)}}a(ade,"moveLicenseFiles");DN.sync_functions.push(ode);DN.sync_functions.push(ade);R$.push(DN);A$.exports=R$});var w$=R((BIe,I$)=>{"use strict";var Nn=Ye(),{insertRecords:cde}=Zo(),lde=wr(),qo=_t(),ude=Y(),Fi=k(),_de=Y(),Xs=require("fs-extra"),ki=require("path"),dde=require("cli-progress"),wd=require("assert"),fde=require("pino"),Ede=X();I$.exports=hde;var wm,b$,Cm,LN,Ar,Cd=!1;async function hde(e=!0){return wm=Ede.getHdbBasePath(),b$=ki.join(wm,"schema"),Cm=ki.join(wm,"4_0_0_upgrade_tmp"),LN=ki.join(wm,"transactions"),console.info("Reindexing upgrade started for schemas"),Fi.notify("Reindexing upgrade started for schemas"),await N$(b$,!1,e),await Xs.pathExists(LN)&&(console.info(`
104
+ `,n=wm.get("settings_path"),s=xo.dirname(n),i=xo.join(s,"3_1_0_upgrade_settings.bak");try{Mt.info(`Backing up old settings file to: ${i}`),Go.copySync(n,i)}catch(c){throw Mt.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Mt.info("New settings file values for 3.1.0 upgrade:",r),Mt.info(`Creating new/upgraded settings file at '${n}'`),Go.writeFileSync(n,r),Mt.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),Mt.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Mt.error(c),Go.copySync(i,n),c}wm.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),Mt.info(o),o}a(ode,"updateSettingsFile_3_1_0");function ade(){let e=xo.join(g$.getHomeDir(),Js.HDB_HOME_DIR_NAME,Js.LICENSE_KEY_DIR_NAME,Js.LICENSE_FILE_NAME),t=xo.join(g$.getHomeDir(),Js.HDB_HOME_DIR_NAME,Js.LICENSE_KEY_DIR_NAME,Js.REG_KEY_FILE_NAME),r=xo.join(wm.getHdbBasePath(),Js.LICENSE_KEY_DIR_NAME,Js.LICENSE_FILE_NAME),n=xo.join(r,Js.LICENSE_FILE_NAME),s=xo.join(r,Js.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Mt.info(i);let o="Creating .license directory";console.log(o),Mt.info(o),Go.mkdirpSync(r);try{Go.accessSync(e);try{let c="Moving licence file";console.log(c),Mt.info(c),Go.moveSync(e,n);let l="License file successfully moved.";console.log(l),Mt.info(l)}catch{let l="moving license file failed";console.error(l),Mt.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Mt.warn(l)}try{Go.accessSync(t);try{let c="Moving registration file";console.log(c),Mt.info(c),Go.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Mt.info(l)}catch{let l="moving registration file failed";console.error(l),Mt.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Mt.warn(l)}}a(ade,"moveLicenseFiles");LN.sync_functions.push(ode);LN.sync_functions.push(ade);R$.push(LN);A$.exports=R$});var w$=R((BIe,I$)=>{"use strict";var Nn=Ye(),{insertRecords:cde}=Zo(),lde=wr(),qo=_t(),ude=Y(),Fi=k(),_de=Y(),Xs=require("fs-extra"),ki=require("path"),dde=require("cli-progress"),wd=require("assert"),fde=require("pino"),Ede=X();I$.exports=hde;var Cm,b$,Dm,PN,Ar,Cd=!1;async function hde(e=!0){return Cm=Ede.getHdbBasePath(),b$=ki.join(Cm,"schema"),Dm=ki.join(Cm,"4_0_0_upgrade_tmp"),PN=ki.join(Cm,"transactions"),console.info("Reindexing upgrade started for schemas"),Fi.notify("Reindexing upgrade started for schemas"),await N$(b$,!1,e),await Xs.pathExists(PN)&&(console.info(`
105
105
 
106
- Reindexing upgrade started for transaction logs`),Fi.notify("Reindexing upgrade started for transaction logs"),await N$(LN,!0,e)),Fi.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Cd?", but errors occurred":"")}a(hde,"reindexUpgrade");async function N$(e,t,r){let n=await Xs.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=ki.join(e,o.toString());if(o===".DS_Store")continue;let l=await Xs.readdir(c),_=l.length;for(let u=0;u<_;u++){let d=l[u];if(d!==".DS_Store"&&Xs.statSync(ki.join(c,d)).isDirectory())try{await pde(o,d,t),Ar.info(`Reindexing started for ${o}.${d}`),Fi.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await Sde(o,d,c,t,r),Ar.info(`Reindexing completed for ${o}.${d}`),Fi.notify(`Reindexing completed for ${o}.${d}`)}catch(E){Cd=!0,E.schema_path=c,E.table_name=d,Fi.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Fi.error(E),Ar.error(E),console.error(E)}}}if(!Cd)try{await Xs.rm(Cm,{recursive:!0})}catch{}}a(N$,"processTables");async function pde(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=ki.join(Cm,s);await Xs.ensureDir(Cm),await Xs.writeFile(i,""),Ar=fde({level:"debug",formatters:{bindings(){}}},i)}a(pde,"initPinoLogger");var mde=20;async function Sde(e,t,r,n,s){let i;try{i=await Nn.openEnvironment(r,t,n)}catch(T){if(T.message==="MDB_INVALID: File is not an LMDB file"){Fi.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),Ar.error(T);return}throw T}let o=Rde(i.dbis),c=Nn.openDBI(i,o),l=Object.keys(i.dbis),_=Nn.statDBI(i,o);Ar.info(`Old environment stats: ${JSON.stringify(_)}`);let u=new dde.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});u.start(_.entryCount,0,{});let d=await Nn.createEnvironment(r,t,!1);Nn.createDBI(d,o,!1,!0);let E=[];try{for(let T of c.getRange({start:!1}))T.value=Object.assign({},T.value),E.push(T),n||e==="system"&&(t==="hdb_schema"&&(T.key=T.key.toString(),T.value.name=T.value.name.toString()),t==="hdb_table"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.name=T.value.name.toString()),t==="hdb_attribute"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.table=T.value.table.toString(),T.value.attribute=T.value.attribute.toString())),E.length>mde&&await f();await f()}catch(T){throw Cd=!0,Ar.error(T),T}async function f(){let T,b=E.map(({value:U})=>U);n?T=await Promise.all(b.map(U=>Tde(d,U))):T=await cde(d,o,l.filter(U=>U!=="__blob__"),b,!1);for(let U=0,v=E.length;U<v;U++){let{key:F,value:M}=E[U];Ar.info(`Record hash value: ${F} hash: ${o}`);let W;n?W=T[U]:W=T.written_hashes.indexOf(F)>-1,wd(W,!0),gde(d,o,M[o],n),Ar.info(`Insert success, written hashes: ${T.written_hashes}`),u.increment()}E=[],u.value/u.total*100%10===0&&Fi.notify(`${e}.${t} ${u.value}/${u.total} records inserted`),Ar.info(`${u.value}/${u.total} records inserted`)}a(f,"finishOutstanding"),u.stop();let h=Nn.statDBI(i,o),m=Nn.statDBI(d,o);if(Ar.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${m.entryCount}`),wd.deepStrictEqual(h.entryCount,m.entryCount),await Nn.closeEnvironment(i),await Nn.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let T=ki.join(r,t),b=ki.join(T,"data.mdb"),N=ki.join(T,"lock.mdb");await Xs.unlink(b),await Xs.unlink(N),await Xs.rmdir(T),Ar.info(`Deleted old environment files from schema folder: ${b}, ${N}`)}let S=await Nn.openEnvironment(r,t),g=Nn.statDBI(S,o);Ar.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify(g)}`),wd.deepStrictEqual(g.entryCount,m.entryCount),await Nn.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(Sde,"processTable");async function Tde(e,t){Nn.initializeDBIs(e,qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,qo.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),_de.isEmpty(t.user_name)||e.dbis[qo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[qo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(Tde,"insertTransaction");function gde(e,t,r,n){let i=e.dbis[t].get(r);wd.deepStrictEqual(typeof i,"object");let o;if(n){let c={[qo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[qo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,l]of o)if(c!==t&&e.dbis[c]!==void 0&&!ude.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let _=0,u=l.length;_<u;_++){let d=l[_];y$(e,c,d,r)}else y$(e,c,l,r)}a(gde,"validateIndices");function y$(e,t,r,n){try{let s=!1,i=lde.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||Ar.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),wd.deepStrictEqual(s,!0)}catch(s){Cd=!0,Ar.error(s),console.error(s)}}a(y$,"validateIndex");function Rde(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(Rde,"getHashDBI")});var Lm=R((xIe,D$)=>{"use strict";var Ade=require("mkcert"),Dm=require("path"),PN=require("fs-extra"),MN=k(),Ode=X(),UN=L(),Ml=CT(),bde=to(),Nde=Et();D$.exports={generateKeys:yde,updateConfigCert:C$};async function yde(){let e=Ode.getHdbBasePath(),t=Dm.join(e,UN.LICENSE_KEY_DIR_NAME),r=await Ade.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:3650,caKey:Ml.CERTIFICATE_VALUES.key,caCert:Ml.CERTIFICATE_VALUES.cert}),n=Dm.join(t,Ml.CERTIFICATE_PEM_NAME),s=Dm.join(t,Ml.PRIVATEKEY_PEM_NAME),i=Dm.join(t,Ml.CA_PEM_NAME);try{await PN.writeFile(n,r.cert)}catch(o){throw MN.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await PN.writeFile(s,r.key)}catch(o){throw MN.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await PN.writeFile(i,Ml.CERTIFICATE_VALUES.cert)}catch(o){throw MN.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}C$(n,s,i)}a(yde,"generateKeys");function C$(e,t,r){let n=bde(Object.keys(UN.CONFIG_PARAM_MAP),!0),s=UN.CONFIG_PARAMS,i={[s.CLUSTERING_TLS_CERTIFICATE]:n[s.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?n[s.CLUSTERING_TLS_CERTIFICATE]:e,[s.CLUSTERING_TLS_PRIVATEKEY]:n[s.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?n[s.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[s.CLUSTERING_TLS_CERT_AUTH]:n[s.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?n[s.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[s.TLS_CERTIFICATE]:n[s.TLS_CERTIFICATE.toLowerCase()]?n[s.TLS_CERTIFICATE.toLowerCase()]:e,[s.TLS_PRIVATEKEY]:n[s.TLS_PRIVATEKEY.toLowerCase()]?n[s.TLS_PRIVATEKEY.toLowerCase()]:t,[s.TLS_CERTIFICATEAUTHORITY]:n[s.TLS_CERTIFICATEAUTHORITY.toLowerCase()]?n[s.TLS_CERTIFICATEAUTHORITY.toLowerCase()]:r};n[s.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_CERTIFICATE]=n[s.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),n[s.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_PRIVATEKEY]=n[s.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),n[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=n[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),Nde.updateConfigValue(void 0,void 0,i,!1,!0)}a(C$,"updateConfigCert")});var v$=R((FIe,U$)=>{"use strict";var Pm=require("path"),Fo=require("fs-extra"),Ide=CN(),Za=k(),L$=Et(),vN=X(),Os=L(),Mm=Y(),wde=require("properties-reader"),Cde=as(),Dde=GE(),Lde=ur(),qIe=require("util"),Pde=Lde.searchByValue,Mde=Pr(),Ude=oh(),vde=Ze(),Bde=w$(),P$=Lm(),Hde=ym(),Pd=new Ide("4.0.0"),M$=[],Dd,Ld;async function xde(){try{if(await Hde.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Dd){let t=Mm.changeExtension(Dd,".bak");await Fo.move(Dd,t)}if(Ld){let t=Mm.changeExtension(Ld,".bak");await Fo.move(Ld,t)}await P$.generateKeys()}else console.log("Using existing certificates."),P$.updateConfigCert(Dd,Ld,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(xde,"generateNewKeys");async function Gde(){console.log("Updating HarperDB nodes."),Za.info("Updating HarperDB nodes.");let e=[];try{let t=new Cde(Os.SYSTEM_SCHEMA_NAME,Os.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await Pde(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!vde.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let u=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(u),u}let l={host:c.host,port:c.port};e.push(l);let _=[];for(let u=0,d=c.subscriptions.length;u<d;u++){let E=c.subscriptions[u],f=E.channel.split(":");_.push({schema:f[0],table:f[1],publish:E.publish,subscribe:E.subscribe})}n.push({name:c.name,subscriptions:_,system_info:{hdb_version:Os.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(Mm.isEmptyOrZeroLength(n))return;let s=new Dde(Os.SYSTEM_SCHEMA_NAME,Os.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await Mde.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{Ude.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(Gde,"updateNodes");async function qde(){let e=vN.get(Os.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(Pm.join("config","settings.js"))){Za.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),Za.info(t);let r=Pm.dirname(e),n=vN.get(Os.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=Pm.join(n,"backup","4_0_0_upgrade_settings.bak"),i=Pm.join(n,Os.HDB_CONFIG_FILE);try{Za.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Fo.copySync(e,s)}catch(d){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),d}try{Za.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),Za.info("Updating env variables with new settings values");let d=L$.initOldConfig(e);Dd=d[Os.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],Ld=d[Os.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],L$.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=Mm.getPropsFilePath();Fo.accessSync(o,Fo.constants.F_OK|Fo.constants.R_OK);let l=wde(o).get(Os.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
107
- install_user = ${l}`;try{Fo.writeFileSync(o,_)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{vN.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let u="New settings file for 4.0.0 upgrade successfully created.";try{Fo.removeSync(r),console.log(u),Za.info(u)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(qde,"updateSettingsFile_4_0_0");Pd.async_functions.push(qde);Pd.async_functions.push(xde);Pd.async_functions.push(Bde);Pd.async_functions.push(Gde);M$.push(Pd);U$.exports=M$});var BN=R(($Ie,G$)=>{"use strict";var ec=Y(),Fde=L(),B$=k(),{DATA_VERSION:kde,UPGRADE_VERSION:$de}=Fde.UPGRADE_JSON_FIELD_NAMES_ENUM,H$=O$(),Um=v$(),tc=new Map;H$&&H$.forEach(e=>{tc.set(e.version,e)});Um&&Um.forEach(e=>{tc.set(e.version,e)});Um&&Um.forEach(e=>{tc.set(e.version,e)});function Vde(){return[...tc.keys()].sort(ec.compareVersions)}a(Vde,"getSortedVersions");function x$(e){let t=e[kde],r=e[$de];return ec.isEmptyOrZeroLength(t)||ec.isEmptyOrZeroLength(r)?(B$.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),B$.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...tc.keys()].sort(ec.compareVersions).filter(function(n){return ec.compareVersions(n,t)>0&&ec.compareVersions(n,r)<=0})}a(x$,"getVersionsForUpgrade");function Yde(e){return x$(e).length>0}a(Yde,"hasUpgradesRequired");function Kde(e){return ec.isEmptyOrZeroLength(e)?null:tc.has(e)?tc.get(e):null}a(Kde,"getDirectiveByVersion");G$.exports={getSortedVersions:Vde,getDirectiveByVersion:Kde,getVersionsForUpgrade:x$,hasUpgradesRequired:Yde}});var Md=R((YIe,V$)=>{"use strict";var Wde=require("util"),HN=require("chalk"),Qde=require("os"),F$=Pr(),jde=ur(),yn=L(),k$=_$(),GN=bT(),{UpgradeObject:q$}=E$(),{forceDowngradePrompt:zde}=ym(),Jde=Ri(),vm=k(),Ul=Y(),qN=Bn(),Xde=(Re(),ae(Ve)),Zde=BN(),efe=Wde.promisify(qN.setSchemaDataToGlobal),tfe=jde.searchByValue,rfe="info_id",nfe="2.9.9",sfe="3.0.0";async function ife(e){let t=new k$.HdbInfoInsertObject(1,e,e),r=new GN.InsertObject(yn.OPERATIONS_ENUM.INSERT,yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,yn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return qN.setSchemaDataToGlobal(),F$.insert(r)}a(ife,"insertHdbInstallInfo");async function xN(e){let t,r=await $$(),n=new Map([[0,{}]]);for(let c of r)n.set(c.info_id,c);let i=Math.max.apply(null,[...n.keys()])+1;t=new k$.HdbInfoInsertObject(i,e,e);let o=new GN.InsertObject(yn.OPERATIONS_ENUM.INSERT,yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,yn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await efe(),F$.insert(o)}a(xN,"insertHdbUpgradeInfo");async function $$(){let e=new GN.NoSQLSeachObject(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,rfe,yn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await tfe(e))}catch(r){console.error(r)}return t}a($$,"getAllHdbInfoRecords");async function ofe(){let e=await $$();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(ofe,"getLatestHdbInfoRecord");async function afe(){vm.info("Checking if HDB software has been updated");try{let e=Jde.version(),t=await ofe(),r;if(Ul.isEmpty(t))r=nfe;else if(r=t.data_version_num,Ul.compareVersions(r.toString(),e.toString())>0){if(!Ul.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(HN.yellow(`This instance's data was last run on version ${r}`)),console.error(HN.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${Qde.EOL}${yn.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Ul.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(HN.yellow(`This instance's data was last run on version ${r}`)),await zde(new q$(r,e))?await xN(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(qN.setSchemaDataToGlobal(),cfe(r),e.toString()===r.toString())return;let n=new q$(r,e);if(Zde.hasUpgradesRequired(n))return n;Ul.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await xN(n.upgrade_version),vm.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw vm.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),vm.fatal(e),e}}a(afe,"getVersionUpdateInfo");function cfe(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${yn.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in Xde.databases.system))throw console.log(t),new Error(t);if(!Ul.isEmpty(e)&&e<sfe)throw console.log(t),new Error(t)}a(cfe,"checkIfInstallIsSupported");V$.exports={insertHdbInstallInfo:ife,insertHdbUpgradeInfo:xN,getVersionUpdateInfo:afe}});var j$=R((WIe,Q$)=>{"use strict";var FN=require("joi"),{boolean:lfe,string:Y$,number:ufe}=FN.types(),K$=require("fs-extra"),Ud=L(),W$=require("path"),_fe=nt();Q$.exports=dfe;function dfe(e){let t=Y$.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=FN.object({[Ud.INSTALL_PROMPTS.ROOTPATH]:FN.custom(ffe),[Ud.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:ufe.min(0).allow("null",null),[Ud.INSTALL_PROMPTS.TC_AGREEMENT]:Y$.valid("yes","YES","Yes"),[Ud.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Ud.INSTALL_PROMPTS.CLUSTERING_ENABLED]:lfe});return _fe.validateBySchema(e,r)}a(dfe,"installValidator");function ffe(e,t){if(K$.existsSync(W$.join(e,"system/hdb_user/data.mdb"))||K$.existsSync(W$.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(ffe,"validateRootAvailable")});var VN=R((jIe,z$)=>{"use strict";var{mkdirpSync:Efe}=require("fs-extra"),Zs=require("path"),vl=L(),$N=k(),hfe=Hn(),kN=_i(),pfe=Je();z$.exports=mfe;async function mfe(e){$N.trace("Mounting HarperDB"),bs(e),bs(Zs.join(e,"backup")),bs(Zs.join(e,"trash")),bs(Zs.join(e,"keys")),bs(Zs.join(e,"keys",vl.LICENSE_FILE_NAME)),bs(Zs.join(e,"log")),bs(Zs.join(e,"doc")),bs(Zs.join(e,"database")),bs(Zs.join(e,vl.TRANSACTIONS_DIR_NAME)),bs(Zs.join(e,"clustering","leaf")),bs(Zs.join(e,"components")),await Sfe()}a(mfe,"mountHdb");async function Sfe(){let e=Uu(),t=Object.keys(kN);for(let r=0;r<t.length;r++){let n=t[r],s=kN[n].hash_attribute;try{pfe.initSystemSchemaPaths(vl.SYSTEM_SCHEMA_NAME,n);let i=new e(vl.SYSTEM_SCHEMA_NAME,n,s);i.attributes=kN[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,await hfe.createTable(n,i)}catch(i){throw $N.error(`issue creating environment for ${vl.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(Sfe,"createLMDBTables");function bs(e){Efe(e,{mode:vl.HDB_FILE_PERMISSIONS}),$N.info(`Directory ${e} created`)}a(bs,"makeDirectory")});var Hm=R((JIe,cV)=>{"use strict";var KN=require("os"),eV=require("inquirer"),Jn=require("fs-extra"),Tfe=require("properties-reader"),rc=require("chalk"),ri=require("path"),gfe=require("human-readable-ids").hri,Rfe=require("ora"),Afe=require("yaml"),Ut=k(),Vo=X(),vd=Y(),Bm=to(),tV=Md(),rV=Ri(),ne=L(),Ofe=j$(),bfe=VN(),WN=Et(),Nfe=Ur(),yfe=BE(),Ife=ON(),wfe=Bn(),Cfe=require("util").promisify,Dfe=Cfe(wfe.setSchemaDataToGlobal),Lfe=Lm(),Bl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Or=a(e=>rc.magenta.bold(e),"HDB_PROMPT_MSG"),Pfe="https://harperdb.io/legal/end-user-license-agreement",Yo=KN.EOL,ko="",Mfe="yes",J$="Starting HarperDB install...",X$="HarperDB installation was successful.",Z$="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Ufe="An out of date version of HarperDB is already installed.",YN="It appears that HarperDB is already installed. Exiting install...",vfe="Aborting install",Bfe=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),Hfe=new RegExp(/^[^\s.,*>]+$/),xfe=KN.homedir(),Gfe=ri.join(xfe,ne.HDB_ROOT_DIR_NAME),qfe=9925,Ffe="HDB_ADMIN",kfe="CLUSTER_USER",Jr={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},Ko=Bm([ne.INSTALL_PROMPTS.HDB_CONFIG]),ti,nV=!1,sV=!1;cV.exports={install:iV,updateConfigEnv:Zfe,setIgnoreExisting:eEe};iV.createSuperUser=aV;async function iV(){console.log(Or(Yo+J$+Yo)),Ut.notify(J$);let e;Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]&&(e=$fe());let t=Yfe();Object.assign(t,e);let r=Ofe(t);if(r)throw r.message;await Kfe(),await Wfe(t);let n=await Vfe(t);n[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT]&&(n[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]=null),ti=n[ne.INSTALL_PROMPTS.ROOTPATH],Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]&&ri.dirname(Ko[ne.INSTALL_PROMPTS.HDB_CONFIG])===ti&&(nV=!0),!Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]&&await Jn.pathExists(ri.join(ti,ne.HDB_CONFIG_FILE))&&(console.error(YN),process.exit());let s=Rfe({prefixText:Or("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),vd.isEmpty(ti))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Vo.setHdbBasePath(ti),await bfe(ti),await Qfe(),await jfe(n),Ut.initLogSettings(!0),await aV(n),await Jfe(n),await Lfe.generateKeys(),await Xfe(),Ife(),s.stop(),console.log(Or(Yo+X$+Yo)),Ut.notify(X$)}a(iV,"install");function $fe(){let e=Afe.parseDocument(Jn.readFileSync(Ko[ne.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=WN.flattenConfig(e.toJSON());return t[ne.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[ne.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a($fe,"getConfigFromFile");async function Vfe(e){Ut.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Bl,when:$o(e[ne.INSTALL_PROMPTS.ROOTPATH],Jr.DESTINATION),name:ne.INSTALL_PROMPTS.ROOTPATH,prefix:ko,default:Gfe,validate:async s=>ei(s)?ei(s):await Jn.pathExists(ri.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,message:Or(Jr.DESTINATION)},{type:"input",transformer:Bl,when:$o(e[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]??e[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT],Jr.HDB_PORT),name:ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:ko,default:qfe,validate:s=>Bfe.test(s)?!0:"Invalid port.",message:Or(Jr.HDB_PORT)},{type:"input",transformer:Bl,when:$o(e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Jr.HDB_USERNAME),name:ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:ko,default:Ffe,validate:s=>ei(s)?ei(s):(t=s,!0),message:Or(Jr.HDB_USERNAME)},{type:"password",when:$o(e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Jr.HDB_PASS),name:ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:ko,validate:s=>ei(s)?ei(s):!0,message:Or(Jr.HDB_PASS)}];if(vd.autoCastBoolean(e[ne.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Bl,when:$o(e[ne.INSTALL_PROMPTS.CLUSTERING_NODENAME],Jr.NODE_NAME),name:ne.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:ko,default:gfe.random(),validate:i=>Hfe.test(i)?!0:"Invalid node name, must not contain ., * or >",message:Or(Jr.NODE_NAME)},{type:"input",transformer:Bl,when:$o(e[ne.INSTALL_PROMPTS.CLUSTERING_USER],Jr.CLUSTER_USERNAME),name:ne.INSTALL_PROMPTS.CLUSTERING_USER,prefix:ko,default:kfe,validate:i=>ei(i)?ei(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:Or(Jr.CLUSTER_USERNAME)},{type:"password",when:$o(e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Jr.CLUSTER_PASS),name:ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:ko,validate:i=>ei(i)?ei(i):!0,message:Or(Jr.CLUSTER_PASS)}];r.push(...s)}let n=await eV.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}a(Vfe,"installPrompts");function $o(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Or(t)} ${rc.gray("[hidden]")}`),Ut.trace(`${Or(t)} [hidden]`)):(console.log(`${Or(t)} ${e}`),Ut.trace(`${Or(t)} ${e}`)),!1):!0}a($o,"displayCmdEnvVar");function ei(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(ei,"checkForEmptyValue");function Yfe(){let e=Object.keys(ne.INSTALL_PROMPTS),t=Bm(e),r=Bm(Object.keys(ne.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=ne.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(Yfe,"checkForPromptOverride");async function Kfe(){Ut.trace("Checking for existing install.");let e=vd.getPropsFilePath(),t=await Jn.pathExists(e),r;if(t){Ut.trace(`Install found an existing boot prop file at:${e}`);let n=Tfe(e),s=WN.getConfigValue(ne.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(ne.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Jn.pathExists(s)}if(!t&&vd.noBootFile()&&(r=!0),r&&!sV){if(Ut.trace(`Install found existing HDB config at:${e}`),await tV.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${rV.version()}. Exiting install...`;console.log(Yo+rc.magenta.bold(Ufe)),console.log(rc.magenta.bold(s)),Ut.error(s)}else console.log(Yo+rc.magenta.bold(YN)),Ut.error(YN);process.exit(0)}}a(Kfe,"checkForExistingInstall");async function Wfe(e){Ut.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Pfe}${Yo}and can be viewed by typing or copying and pasting the URL into your web browser.${Yo}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:ko,transformer:Bl,when:$o(e[ne.INSTALL_PROMPTS.TC_AGREEMENT],t),name:ne.INSTALL_PROMPTS.TC_AGREEMENT,message:Or(t),validate:s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:rc.yellow("Please enter 'yes' or 'no'")},n=await eV.prompt([r]);n[ne.INSTALL_PROMPTS.TC_AGREEMENT]&&n[ne.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Mfe&&(console.log(rc.yellow(Z$)),Ut.error(Z$),process.exit(0))}a(Wfe,"termsAgreement");async function Qfe(){let e=ri.join(ti,ne.HDB_CONFIG_FILE),t;try{t=KN.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
108
- install_user = ${t}`,n=vd.getHomeDir(),s=ri.join(n,ne.HDB_HOME_DIR_NAME),i=ri.join(s,ne.LICENSE_KEY_DIR_NAME);try{Jn.mkdirpSync(s,{mode:ne.HDB_FILE_PERMISSIONS}),Jn.mkdirpSync(i,{mode:ne.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${ne.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=ri.join(s,ne.BOOT_PROPS_FILE_NAME);try{await Jn.writeFile(o,r)}catch(c){throw Ut.error(`There was an error creating the boot file at path: ${o}`),c}Vo.setProperty(ne.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Vo.setProperty(ne.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Vo.setProperty(Vo.BOOT_PROPS_FILE_PATH,o)}}a(Qfe,"createBootPropertiesFile");async function jfe(e){Ut.trace("Creating HarperDB config file");let t=Bm(Object.keys(ne.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]||WN.createConfigFile(t),Vo.initSync()}catch(r){zfe(r)}}a(jfe,"createConfigFile");function zfe(e){Ut.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(vfe);let t=ri.resolve(Vo.get(Vo.BOOT_PROPS_FILE_PATH),"../");t&&Jn.removeSync(t),ti&&(nV?Jn.readdirSync(ti,{withFileTypes:!0}).forEach(n=>{let s=ri.join(n.path,n.name);s!==Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]&&Jn.removeSync(s)}):Jn.removeSync(ti)),process.exit(1)}a(zfe,"rollbackInstall");async function oV(e,t){Ut.trace("Creating admin user"),await Dfe();let r;try{r=await yfe.addRole(e)}catch(n){if(n.message.includes("already exists"))t=void 0;else throw n.message+="Error creating role",n}if(t)try{t.role=r.role,await Nfe.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(oV,"createAdminUser");async function aV(e){Ut.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await oV(t,r),delete e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(aV,"createSuperUser");async function Jfe(e){Ut.trace("Creating Cluster user.");let t;e[ne.INSTALL_PROMPTS.CLUSTERING_USER]&&e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[ne.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await oV({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[ne.INSTALL_PROMPTS.CLUSTERING_USER],delete e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(Jfe,"createClusterUser");async function Xfe(){let e=rV.version();if(e)await tV.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(Xfe,"insertHdbVersionInfo");function Zfe(e){Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]=e}a(Zfe,"updateConfigEnv");function eEe(e){sV=e}a(eEe,"setIgnoreExisting")});var _V=R((ZIe,uV)=>{"use strict";var QN=Y(),In=k(),lV=BN();uV.exports={processDirectives:tEe};async function tEe(e){console.log("Starting upgrade process...");let t=lV.getVersionsForUpgrade(e),r=sEe(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;In.notify(c),console.log(c);let l=[],_=[];try{l=rEe(o.sync_functions)}catch(u){throw In.error(`Error while running an upgrade script for ${o.version}`),u}try{_=await nEe(o.async_functions)}catch(u){throw In.error(`Error while running an upgrade script for ${o.version}`),u}n.push(...l,..._)}return n}a(tEe,"processDirectives");function rEe(e){if(QN.isEmptyOrZeroLength(e))return In.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return In.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(In.info(`Running function ${r.name}`),!(r instanceof Function)){In.info("Variable being processed is not a function");continue}let n=r();In.info(n),t.push(n)}return t}a(rEe,"runSyncFunctions");async function nEe(e){if(QN.isEmptyOrZeroLength(e))return In.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return In.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(In.info(`Running function ${s.name}`),!(s instanceof Function)){In.info("Variable being processed is not a function");continue}let i=await s();In.info(i),t.push(i)}return t}a(nEe,"runAsyncFunctions");function sEe(e){if(QN.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=lV.getDirectiveByVersion(r);n&&t.push(n)}return t}a(sEe,"getUpgradeDirectivesToInstall")});var JN=R((twe,mV)=>{"use strict";var xm=X();xm.initSync();var hV=require("chalk"),dV=require("fs-extra"),Vi=k(),$i=L(),fV=Ri(),iEe=_V(),jN=Y(),pV=Md(),oEe=ym(),EV=ES(),aEe=Bn(),cEe=require("util").promisify,lEe=cEe(aEe.setSchemaDataToGlobal),zN,{UPGRADE_VERSION:Gm}=$i.UPGRADE_JSON_FIELD_NAMES_ENUM;mV.exports={upgrade:uEe};async function uEe(e){await lEe(),zN===void 0&&(zN=Yc()),dV.existsSync(xm.get(xm.BOOT_PROPS_FILE_PATH))||(Bd("The hdb_boot_properties file was not found. Please install HDB.",$i.LOG_LEVELS.ERROR),process.exit(1)),dV.existsSync(xm.get($i.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(Bd("The hdb settings file was not found. Please make sure HDB is installed.",$i.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await pV.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),Bd(`This version of HarperDB is ${fV.version()}`,$i.LOG_LEVELS.INFO);let r=t[Gm]?t[Gm]:fV.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${$i.HDB_SUPPORT_ADDRESS}`),Vi.notify("Missing new version field from upgrade info object"),process.exit(1)),await _Ee();let n,s=0;try{n=await oEe.forceUpdatePrompt(t)}catch(i){Vi.error("There was an error when prompting user about upgrade."),Vi.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Vi.info(`Starting upgrade to version ${r}`),await dEe(t),Bd(`HarperDB was successfully upgraded to version ${t[Gm]}`,$i.LOG_LEVELS.INFO)}a(uEe,"upgrade");async function _Ee(){let e=!1,t=await EV.findPs($i.HDB_PROC_NAME);if(jN.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await EV.findPs("hdb_express");jN.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await zN.list();jN.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(hV.red(r)),Vi.error(r),process.exit(1)}}a(_Ee,"checkIfRunning");async function dEe(e){try{await iEe.processDirectives(e)}catch(t){throw Bd("There was an error during the data upgrade. Please check the logs.",$i.LOG_LEVELS.ERROR),t}try{await pV.insertHdbUpgradeInfo(e[Gm])}catch(t){Vi.error("Error updating the 'hdb_info' system table."),Vi.error(t)}}a(dEe,"runUpgrade");function Bd(e,t=void 0){t||(t=Vi.info),Vi[t](e),console.log(hV.magenta(e))}a(Bd,"printToLogAndConsole")});var AV=R((nwe,RV)=>{"use strict";var{promises:ZN,createReadStream:fEe,createWriteStream:EEe}=require("fs"),{createGzip:hEe}=require("zlib"),{promisify:pEe}=require("util"),{pipeline:mEe}=require("stream"),SEe=pEe(mEe),TEe=require("path"),sc=X();sc.initSync();var nc=k(),{CONFIG_PARAMS:Hd,ITC_EVENT_TYPES:gEe}=L(),{onMessageFromWorkers:REe}=rt(),AEe=6e4,OEe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",bEe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",XN,TV;RV.exports=gV;REe(e=>{e.type===gEe.RESTART&&(sc.initSync(!0),clearInterval(TV),sc.get(Hd.LOGGING_ROTATION_ENABLED)&&gV())});async function gV(){try{let e=nc.getLogFilePath(),t=sc.get(Hd.LOGGING_ROTATION_MAXSIZE),r=sc.get(Hd.LOGGING_ROTATION_INTERVAL);if(!t&&!r){nc.error(OEe);return}let n=sc.get(Hd.LOGGING_ROTATION_PATH);if(!n){nc.error(bEe);return}let s;if(t){let o=t.slice(-1),c=t.slice(0,-1);o==="G"?s=c*1e9:o==="M"?s=c*1e6:s=c*1e3}let i;if(r){let o=r.slice(-1),c=r.slice(0,-1);o==="D"?i=c*1440:o==="H"?i=c*60:i=c}XN=Date.now()/6e4,nc.trace("Log rotate enabled, maxSize:",t,"interval:",r),TV=setInterval(async()=>{if(s){let o;o=await ZN.stat(e),o.size>=s&&await SV(e,n)}i&&Date.now()/6e4-XN>=i&&(await SV(e,n),XN=Date.now()/6e4)},AEe).unref()}catch(e){nc.error(e)}}a(gV,"logRotator");async function SV(e,t){let r=sc.get(Hd.LOGGING_ROTATION_COMPRESS),n=TEe.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await SEe(fEe(e),hEe(),EEe(n)),await ZN.unlink(e)):await ZN.rename(e,n),nc.closeLogFile(),nc.notify(`hdb.log rotated, old log moved to ${n}`)}a(SV,"moveLogFile")});var ic=R((fwe,DV)=>{"use strict";var Xr=X();Xr.initSync();var iwe=bo(),bt=L(),si=k(),Yi=require("fs-extra"),Wo=require("path"),NEe=require("systeminformation"),yEe=ON(),{install:IEe}=Hm(),ey=require("chalk"),wEe=ma(),Ki=Y(),bV=Et(),NV=to(),OV=fh(),CEe=JN(),DEe=AV(),{compactOnStart:LEe}=(Rh(),ae(gh)),PEe=require("minimist"),{PACKAGE_ROOT:MEe}=L(),{startHTTPThreads:UEe,startSocketServer:owe,mostIdleRouting:awe,remoteAffinityRouting:cwe}=(Nb(),ae(eF)),vEe=Md(),{isMainThread:BEe}=require("worker_threads"),lwe=_i(),uwe=Ei(),_we=Tg(),dwe=Uu(),qm=L(),ni,Hl,yV=!1,HEe="Upgrade complete. Starting HarperDB.",xEe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",GEe="HarperDB not found, starting install process.",qEe="There was an error during install, check install_log.log for more details. Exiting.",FEe="HarperDB successfully started.";function kEe(){if(!yV){let e=a(()=>{Yi.removeSync(Wo.join(Xr.get(bt.CONFIG_PARAMS.ROOTPATH),bt.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(kEe,"addExitListeners");async function IV(e=!1,t=!1){if(console.log(ey.magenta("Starting HarperDB...")),await CV()===!1){console.log(GEe);try{await IEe()}catch(o){console.error(qEe,o),si.error(o),process.exit(1)}}if(!e){let o=NV(Object.keys(bt.CONFIG_PARAM_MAP),!0);!Ki.isEmpty(o)&&!Ki.isEmptyOrZeroLength(Object.keys(o))&&bV.updateConfigValue(void 0,void 0,o,!0,!0)}let r,n=Hl?.service==="clustering";Hl?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Yi.readFile(Wo.join(Xr.get(bt.CONFIG_PARAMS.ROOTPATH),bt.HDB_PID_FILE),"utf8")),c=await NEe.processes();for(let l of c.list)if(l.pid===o){n?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}ni===void 0&&(ni=Yc()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Xr.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await OV.generateNatsConfig(),await ni.startClusteringProcesses(!0),process.exit()),kEe(),await Yi.writeFile(Wo.join(Xr.get(qm.CONFIG_PARAMS.ROOTPATH),qm.HDB_PID_FILE),`${process.pid}`),si.info("HarperDB PID",process.pid);let s;try{let o=await vEe.getVersionUpdateInfo();o!==void 0&&(s=o[bt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await CEe.upgrade(o),console.log(HEe))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`,o),si.error(o)):(console.error(xEe,o),si.error(o)),process.exit(1)}yEe(),YEe(),Ki.autoCastBoolean(Xr.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&BEe&&await OV.generateNatsConfig(t)}a(IV,"initialize");async function $Ee(e=!1){try{Hl=PEe(process.argv),Hl.ROOTPATH&&bV.updateConfigObject("settings_path",Wo.join(Hl.ROOTPATH,bt.HDB_CONFIG_FILE)),await IV(e,!0),Xr.get(bt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await LEe();let t=process.env.IS_SCRIPTED_SERVICE&&!Hl.service;Ki.autoCastBoolean(Xr.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await ni.startClusteringProcesses(),await ni.startClusteringThreads()),await UEe(process.env.DEV_MODE?1:Xr.get(qm.CONFIG_PARAMS.THREADS_COUNT)??Xr.get(qm.CONFIG_PARAMS.THREADS)),Xr.get(bt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await DEe(),t||wV()}catch(t){console.error(t),si.error(t),process.exit(1)}}a($Ee,"main");function wV(){si.suppressLogging(()=>{console.log(ey.magenta(""+Yi.readFileSync(Wo.join(MEe,"utility/install/ascii_logo.txt")))),console.log(ey.magenta(`|------------- HarperDB ${wEe.version} successfully started ------------|`))}),si.notify(FEe)}a(wV,"started");async function VEe(e=!0){yV=!e;try{ni===void 0&&(ni=Yc()),ni.enterPM2Mode(),await IV(),Ki.autoCastBoolean(Xr.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await ni.startClusteringProcesses(),await ni.startService(bt.PROCESS_DESCRIPTORS.HDB),wV(),e&&process.exit(0)}catch(t){console.error(t),si.error(t),process.exit(1)}}a(VEe,"launch");function YEe(){let e=Wo.join(Xr.get(bt.CONFIG_PARAMS.ROOTPATH),bt.LICENSE_KEY_DIR_NAME,bt.LICENSE_FILE_NAME),t=Wo.join(e,bt.LICENSE_FILE_NAME),r=Wo.join(e,bt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=NV(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Ki.isEmpty(n)||Ki.isEmpty(s))return;Yi.mkdirpSync(e),Yi.writeFileSync(r,n),Yi.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),si.error(s)}}a(YEe,"writeLicenseFromVars");DV.exports={launch:VEe,main:$Ee,isHdbInstalled:CV};async function CV(){try{await Yi.stat(Ki.getPropsFilePath()),await Yi.stat(Xr.get(bt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Ki.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw si.error(`Error checking for HDB install - ${e}`),e}return!0}a(CV,"isHdbInstalled")});var iy=R((hwe,WV)=>{"use strict";var LV=require("os"),$m=require("https"),PV=require("http"),Yt=require("fs-extra"),MV=require("yaml"),KEe=require("human-readable-ids").hri,{pipeline:UV}=require("stream/promises"),{createWriteStream:Vm,ensureDir:Ym}=require("fs-extra"),{join:Cn}=require("path"),FV=require("lodash"),WEe=require("minimist"),kd=require("path"),QEe=require("properties-reader"),Ns=X(),jEe=gi(),kV=k(),ty=Et(),{restart:zEe}=bo(),Km=Y(),JEe=to(),vV=gt(),XEe=Bn(),{main:$V,launch:ZEe}=ic(),{install:ehe,updateConfigEnv:the,setIgnoreExisting:ny}=Hm(),VV=VN(),Zr=L(),rhe=Ri(),nhe=Md(),{SYSTEM_TABLE_NAMES:BV,SYSTEM_SCHEMA_NAME:she,CONFIG_PARAMS:xd,OPERATIONS_ENUM:Dn}=Zr,ihe=1e4,ohe="clone-node-config.yaml",sy=[BV.ROLE_TABLE_NAME,BV.USER_TABLE_NAME],ahe={clustering_nodename:!0,clustering_leafserver_streams_path:!0,clustering_tls_certificate:!0,clustering_tls_privatekey:!0,clustering_tls_certificateauthority:!0,logging_file:!0,logging_root:!0,logging_rotation_path:!0,operationsapi_network_domainsocket:!0,operationsapi_tls_certificate:!0,operationsapi_tls_privatekey:!0,operationsapi_tls_certificateauthority:!0,rootpath:!0,storage_path:!0,storage_audit_path:!0,databases:!0,mqtt_network_mtls_certificateauthority:!0,componentsroot:!0,tls_certificate:!0,tls_privatekey:!0,tls_certificateauthority:!0},lr={HDB_LEADER_USERNAME:"HDB_LEADER_USERNAME",HDB_LEADER_PASSWORD:"HDB_LEADER_PASSWORD",HDB_LEADER_URL:"HDB_LEADER_URL",HDB_LEADER_CLUSTERING_HOST:"HDB_LEADER_CLUSTERING_HOST",HDB_LEADER_CLUSTERING_PORT:"HDB_LEADER_CLUSTERING_PORT",HDB_CLONE_CLUSTERING_HOST:"HDB_CLONE_CLUSTERING_HOST",HDB_FULLY_CONNECTED:"HDB_FULLY_CONNECTED",HDB_CLONE_OVERTOP:"HDB_CLONE_OVERTOP",CLUSTERING_NODENAME:"CLUSTERING_NODENAME"},ji=WEe(process.argv),Gd=ji[lr.HDB_LEADER_USERNAME]??process.env[lr.HDB_LEADER_USERNAME],qd=ji[lr.HDB_LEADER_PASSWORD]??process.env[lr.HDB_LEADER_PASSWORD],Fd=ji[lr.HDB_LEADER_URL]??process.env[lr.HDB_LEADER_URL],km=ji[lr.HDB_LEADER_CLUSTERING_HOST]??process.env[lr.HDB_LEADER_CLUSTERING_HOST],HV=ji[lr.HDB_CLONE_CLUSTERING_HOST]??process.env[lr.HDB_CLONE_CLUSTERING_HOST],che=(ji[lr.HDB_FULLY_CONNECTED]??process.env[lr.HDB_FULLY_CONNECTED])==="true",YV=(ji[lr.HDB_CLONE_OVERTOP]??process.env[lr.HDB_CLONE_OVERTOP])==="true",xV=ji[lr.CLUSTERING_NODENAME]??process.env[lr.CLUSTERING_NODENAME],lhe=ji[xd.CLONED.toUpperCase()]??process.env[xd.CLONED.toUpperCase()],ry,en,Qi={},GV,Wi,ii={},ut,xl,vt,wn,ys,Gl=!1,Qm=!1;WV.exports=a(async function(t=!1){if(console.info(`Starting clone node form leader node: ${Fd}`),delete process.env.HDB_LEADER_URL,vt=Km.getEnvCliRootPath(),!vt)try{let s=Cn(LV.homedir(),Zr.HDB_HOME_DIR_NAME,Zr.BOOT_PROPS_FILE_NAME);if(await Yt.pathExists(s)){let i=QEe(s);vt=kd.parse(i.get(Zr.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)).dir}}catch{throw new Error("There was an error setting the clone default root path. Please set ROOTPATH using an environment or CLI variable.")}vt?await Yt.pathExists(vt)?console.log(`Existing HarperDB install found at ${vt}. Clone node will only clone items that do not already exist on clone.`):(console.log(`No HarperDB install found at ${vt} starting fresh clone`),Gl=!0):(console.log("No HarperDB install found, starting fresh clone"),Gl=!0),vt||(vt=Cn(LV.homedir(),Zr.HDB_ROOT_DIR_NAME),console.log("Using default root path",vt));let r;try{r=Cn(vt,ohe),en=MV.parseDocument(await Yt.readFile(r,"utf8"),{simpleKeys:!0}).toJSON(),console.log("Clone config file found")}catch{}let n=Cn(vt,Zr.HDB_CONFIG_FILE);if(await Yt.pathExists(n))try{GV=MV.parseDocument(await Yt.readFile(n,"utf8"),{simpleKeys:!0}).toJSON(),Qi=ty.flattenConfig(GV)}catch(s){console.error("Error reading existing harperdb-config.yaml on clone",s)}if(Qi?.cloned&&lhe!=="false")return console.log("Instance marked as cloned, clone will not run"),Ns.setCloneVar(!1),Ns.initSync(),$V();xV?xl=xV:Qi[Zr.CONFIG_PARAMS.CLUSTERING_NODENAME.toLowerCase()]?xl=Qi[Zr.CONFIG_PARAMS.CLUSTERING_NODENAME.toLowerCase()]:xl=en?.clustering?.nodeName??KEe.random(),await uhe(),Ns.setCloneVar(!1),Ns.setHdbBasePath(vt),Yt.ensureDir(Ns.get(Zr.CONFIG_PARAMS.LOGGING_ROOT)),kV.initLogSettings(),await _he(),Qm||await dhe(),await hhe(t),ry&&km&&await phe(),console.info(`
109
- Successfully cloned node: `+Fd),t&&process.exit()},"cloneNode");async function uhe(){console.info("Cloning configuration"),Wi=await Wm({operation:Dn.GET_CONFIGURATION}),Wi=await JSON.parse(Wi.body),ry=Wi?.clustering?.enabled,ii=ty.flattenConfig(Wi);let e=Wi?.clustering?.hubServer?.cluster?.network?.port,t=en?.componentConfig?.exclude,r={cloned:!0,clustering_nodename:xl,rootpath:vt};for(let s in ii)if(!(ii[s]!==null&&typeof ii[s]=="object"&&!(ii[s]instanceof Array)||ahe[s])){if(s.includes("_package")||s.includes("_port")){if(ii[s]?.includes?.("hdb/components"))continue;if(t){let i=!1;for(let o of t)if(s.includes(o.name)){i=!0;break}if(i)continue}}Qi[s]||(s==="clustering_hubserver_cluster_network_routes"&&km&&e&&(Array.isArray(ii[s])||(ii[s]=[]),ii[s].push({host:km,port:e})),r[s]=ii[s])}for(let s in Qi)s!=="databases"&&typeof Qi[s]=="object"&&!(Qi[s]instanceof Array)||(r[s]=Qi[s]);let n=JEe(Object.keys(Zr.CONFIG_PARAM_MAP),!0);if(Object.assign(r,n),ty.createConfigFile(r,!0),Ns.initSync(!0),ry&&km&&HV){let s={host:HV,port:Ns.get(xd.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT)};console.log("Setting clustering route on leader:",s),await Wm({operation:"cluster_set_routes",server:"hub",routes:[s]})}}a(uhe,"cloneConfig");async function _he(){process.env.HDB_FETCH==="true"?(await Ehe(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await fhe()}a(_he,"cloneDatabases");async function dhe(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=vt,!Gd)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=Gd,!qd)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=qd,process.env.OPERATIONSAPI_NETWORK_PORT=Ns.get(xd.OPERATIONSAPI_NETWORK_PORT),the(kd.join(vt,Zr.HDB_CONFIG_FILE)),ny(!0),await ehe()}a(dhe,"installHDB");function oi(e){return Ns.get(Zr.CONFIG_PARAMS.DATABASES)?.[e]?.path||Ns.get(xd.STORAGE_PATH)||kd.join(vt,Zr.DATABASES_DIR_NAME)}a(oi,"getDBPath");async function fhe(){let e=oi("system"),t=Cn(e,"system.mdb");if(Gl||!await Yt.exists(t)||YV){console.info("Cloning system database"),await Ym(e);let r=Vm(t,{overwrite:!0}),n={operation:Dn.GET_BACKUP,database:"system",tables:sy},s=await qV(n,r);await Yt.utimes(t,Date.now(),new Date(s.date)),Gl||(await VV(vt),await KV(),ny(!0))}else Qm=!0,console.log("Not cloning system database due to it already existing on clone");ut=await Wm({operation:Dn.DESCRIBE_ALL}),ut=await JSON.parse(ut.body),wn=en?.databaseConfig?.excludeDatabases,wn=wn?wn.reduce((r,n)=>({...r,[n.database]:!0}),{}):{};for(let r in ut)await Yt.exists(kd.join(oi(r),r+".mdb"))&&(console.log(`Not cloning database ${r} due to it already existing on clone`),wn[r]=!0);ys=en?.databaseConfig?.excludeTables,ys=ys?ys.reduce((r,n)=>({...r,[n.database==null?null:n.database+n.table]:!0}),{}):{};for(let r in ut){if(wn[r]){ut[r]="excluded";continue}if(FV.isEmpty(ut[r]))continue;let n=[],s=!1;for(let u in ut[r])ys[r+u]?(s=!0,ut[r][u]="excluded"):n.push(u);if(n.length===0)return;let i;s?(console.info(`Cloning database: ${r} tables: ${n}`),i={operation:Dn.GET_BACKUP,database:r,tables:n}):(console.info(`Cloning database: ${r}`),i={operation:Dn.GET_BACKUP,database:r});let o=oi(r);await Ym(o);let c=Cn(o,r+".mdb"),l=Vm(c,{overwrite:!0}),_=await qV(i,l);await Yt.utimes(c,Date.now(),new Date(_.date))}}a(fhe,"cloneTablesHttp");async function Ehe(){let e=oi("system"),t=Cn(e,"system.mdb");if(Gl||!await Yt.exists(t)||YV){console.info("Cloning system database using fetch");let r={operation:Dn.GET_BACKUP,database:"system",tables:sy},n=await Fm(r,!0),s=oi("system");await Ym(s);let i=Cn(s,"system.mdb");await UV(n.body,Vm(i,{overwrite:!0})),await Yt.utimes(i,Date.now(),new Date(n.headers.get("date"))),Gl||(await VV(vt),await KV(),ny(!0))}else Qm=!0,console.log("Not cloning system database due to it already existing on clone");ut=await Fm({operation:Dn.DESCRIBE_ALL}),ut=await ut.json(),wn=en?.databaseConfig?.excludeDatabases,wn=wn?wn.reduce((r,n)=>({...r,[n.database]:!0}),{}):{};for(let r in ut)await Yt.exists(kd.join(oi(r),r+".mdb"))&&(console.log(`Not cloning database ${r} due to it already existing on clone`),wn[r]=!0);ys=en?.databaseConfig?.excludeTables,ys=ys?ys.reduce((r,n)=>({...r,[n.database==null?null:n.database+n.table]:!0}),{}):{};for(let r in ut){if(wn[r]){ut[r]="excluded";continue}if(FV.isEmpty(ut[r]))continue;let n=[],s=!1;for(let u in ut[r])ys[r+u]?(s=!0,ut[r][u]="excluded"):n.push(u);if(n.length===0)return;let i;s?(console.info(`Cloning database: ${r} tables: ${n}`),i=await Fm({operation:Dn.GET_BACKUP,database:r,tables:n},!0)):(console.info(`Cloning database: ${r}`),i=await Fm({operation:Dn.GET_BACKUP,database:r},!0));let o=oi(r);await Ym(o);let c=new Date(i.headers.get("date")),l=Cn(o,`${c.getTime()}-${r}.mdb`);await UV(i.body,Vm(l,{overwrite:!0}));let _=Cn(o,r+".mdb");await Yt.rename(l,_),await Yt.utimes(_,Date.now(),c)}}a(Ehe,"cloneTablesFetch");async function Fm(e,t=!1){let r=en?.httpsRejectUnauthorized??!1,n=new $m.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(Gd+":"+qd).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(Fd,{method:"POST",headers:i,body:JSON.stringify(e),agent:n,compress:!0});if(o.ok)return o;throw console.error(`HTTP Error Response: ${o.status} ${o.statusText}`),new Error(await o.text())}a(Fm,"leaderHttpReqFetch");async function hhe(e){let t=await jEe.getHDBProcessInfo();t.clustering.length===0||t.core.length===0?e?await ZEe(!1):await $V():(console.info(await zEe({operation:Dn.RESTART})),await Km.async_set_timeout(ihe)),e&&await Km.async_set_timeout(2e3)}a(hhe,"startHDB");async function phe(){console.info("Clustering cloned tables");let e=en?.clusteringConfig?.subscribeToLeaderNode!==!1,t=en?.clusteringConfig?.publishToLeaderNode!==!1;await XEe.setSchemaDataToGlobalAsync();let r=c_(),n=await Wm({operation:Dn.CLUSTER_STATUS});n=await JSON.parse(n.body);let s=[];if(!Qm){let l=await Yt.stat(Cn(oi("system"),"system.mdb"));for(let _ of sy)s.push({schema:she,table:_,subscribe:e,publish:t,start_time:l.mtime.toISOString()})}let i=en?.clusteringConfig?.excludeDatabases;i=i?i.reduce((l,_)=>({...l,[_.database]:!0}),{}):{};let o=en?.clusteringConfig?.excludeTables;o=o?o.reduce((l,_)=>({...l,[_.database==null?null:_.database+_.table]:!0}),{}):{};for(let l in ut){if(ut[l]==="excluded"||i[l])continue;let _=await Yt.stat(Cn(oi(l),l+".mdb"));_.mtime.setSeconds(_.mtime.getSeconds()-10);for(let u in ut[l])ut[l][u]==="excluded"||o[l+u]||s.push({schema:l,table:u,subscribe:e,publish:t,start_time:_.mtime.toISOString()})}await vV.createTableStreams(s),kV.info("Sending add_node request to node:",Wi?.clustering?.nodeName,"with subscriptions:",s);let c;if(che&&n.connections.length>0){let l=eh(),_=[{node_name:Wi?.clustering?.nodeName,subscriptions:s}],u=!1;xl=Ns.get(Zr.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let d of n.connections){if(d.node_name===xl)continue;let E={node_name:d.node_name,subscriptions:[]};for(let f of d.subscriptions){if(wn[f.schema]||ys[f.schema+f.table]||i[f.schema]||o[f.schema+f.table])continue;u=!0;let h=await Yt.stat(Cn(oi(f.schema),f.schema+".mdb"));h.mtime.setSeconds(h.mtime.getSeconds()-10),f.start_time=h.mtime.toISOString(),E.subscriptions.push(f)}_.push(E)}u&&(c=await l({operation:Dn.CONFIGURE_CLUSTER,connections:_}),console.info(JSON.stringify(c)))}!c&&s.length>0&&await r({operation:Dn.ADD_NODE,node_name:Wi?.clustering?.nodeName,subscriptions:s},!0),await vV.closeConnection()}a(phe,"clusterTables");async function Wm(e){let t=new $m.Agent({rejectUnauthorized:en?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(Gd+":"+qd).toString("base64"),"Content-Type":"application/json"},s=new URL(Fd),i={protocol:s.protocol,host:s.hostname,method:"POST",headers:n};return s.protocol==="https:"&&(i.agent=t),s.port&&(i.port=s.port),await Km.httpRequest(i,e)}a(Wm,"leaderHttpReq");async function qV(e,t){let r=new $m.Agent({rejectUnauthorized:en?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(Gd+":"+qd).toString("base64"),"Content-Type":"application/json"},i=new URL(Fd),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:s};return i.protocol==="https:"&&(o.agent=r,PV=$m),i.port&&(o.port=i.port),new Promise((c,l)=>{let _=PV.request(o,u=>{u.statusCode!==200&&l("Request to leader node failed with code: "+u.statusCode),u.pipe(t),u.on("end",()=>{t.close(),c(u.headers)})});_.on("error",u=>{l(u)}),_.write(JSON.stringify(e)),_.end()})}a(qV,"leaderHttpStream");async function KV(){let e=rhe.version();if(e)await nhe.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(KV,"insertHdbVersionInfo")});var jV=R((mwe,QV)=>{var mhe=Hm(),She=k();QV.exports=The;async function The(){try{await mhe.install()}catch(e){console.error("There was an error during the install."),console.error(e),She.error(e),process.exit(1)}}a(The,"install")});var XV=R((Twe,JV)=>{"use strict";var ghe=ch(),Rhe=k(),zV="Registration failed.";async function Ahe(){let e;try{e=await ghe.register()}catch(t){return Rhe.error(`Registration error ${t}`),zV}return e||zV}a(Ahe,"register");JV.exports={register:Ahe}});var rY=R((Rwe,tY)=>{"use strict";var Ohe=k(),bhe=L(),Nhe=require("util"),yhe=require("child_process"),ZV=Nhe.promisify(yhe.exec),Ihe=gi(),$d=Yc(),eY="Stopping HarperDB.";tY.exports=whe;async function whe(){if(console.log(eY),Ohe.notify(eY),await $d.isServiceRegistered(bhe.HDB_PROC_DESCRIPTOR)){$d.enterPM2Mode();let r=await $d.getUniqueServicesList();for(let n in r)await $d.stop(n)}await $d.kill();let t=await Ihe.getHDBProcessInfo();t.clustering.forEach(r=>{ZV(`kill ${r.pid}`)}),t.core.forEach(r=>{ZV(`kill ${r.pid}`)})}a(whe,"stop")});var oY=R((Owe,iY)=>{"use strict";var ay=require("fs-extra"),cy=require("path"),oy=require("yaml"),Vd=gt(),Yd=L(),nY=Ze(),ly=k(),Che=Ur(),Dhe=sh(),Lhe=rh(),Phe=gi(),sY=X(),{isHdbInstalled:Mhe}=ic();sY.initSync();var Xn={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},tn={LEAF:"leaf server",HUB:"hub server"},jm;iY.exports=Uhe;async function Uhe(){let e={harperdb:{status:Xn.STOPPED}};if(!await Mhe()){e.harperdb.status=Xn.NOT_INSTALLED,console.log(oy.stringify(e));return}jm=sY.get(Yd.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await ay.readFile(cy.join(jm,Yd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Yd.NODE_ERROR_CODES.ENOENT){ly.info("`harperdb status` did not find a hdb.pid file"),e.harperdb.status=Xn.STOPPED,console.log(oy.stringify(e));return}throw n}let r=await Phe.getHDBProcessInfo();for(let n of r.core)if(n.pid===t){e.harperdb.status=Xn.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await vhe(r),e.clustering[tn.HUB].status===Xn.RUNNING&&e.clustering[tn.LEAF].status===Xn.RUNNING){let n=[],s=await Dhe({});for(let o of s.nodes){let c={};for(let l in o)c[l.replace("_"," ")]=o[l];n.push(c)}e.clustering.network=n;let i=await Lhe.clusterStatus();e.clustering.replication={"node name":i.node_name,"is enabled":i.is_enabled,connections:[]};for(let o of i.connections){let c={};c["node name"]=o?.node_name,c.status=o?.status,c.ports={clustering:o?.ports?.clustering,"operations api":o?.ports?.operations_api},c["latency ms"]=o?.latency_ms,c.uptime=o?.uptime,c.subscriptions=o?.subscriptions,c["system info"]={"hdb version":o?.system_info?.hdb_version,"node version":o?.system_info?.node_version,platform:o?.system_info?.platform},e.clustering.replication.connections.push(c)}await Vd.closeConnection()}console.log(oy.stringify(e)),process.exit()}a(Uhe,"status");async function vhe(e){let t={[tn.HUB]:{},[tn.LEAF]:{}};if(e.clustering.length===0)return t[tn.HUB].status=Xn.STOPPED,t[tn.LEAF].status=Xn.STOPPED,t;let{port:r}=Vd.getServerConfig(Yd.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:n,decrypt_hash:s}=await Che.getClusterUser();try{(await Vd.createConnection(r,n,s,!1)).close(),t[tn.HUB].status=Xn.RUNNING}catch{t[tn.HUB].status=Xn.ERRORED}let{port:i}=Vd.getServerConfig(Yd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await Vd.createConnection(i,n,s,!1)).close(),t[tn.LEAF].status=Xn.RUNNING}catch{t[tn.LEAF].status=Xn.ERRORED}try{t[tn.HUB].pid=Number.parseInt(await ay.readFile(cy.join(jm,"clustering",nY.PID_FILES.HUB),"utf8"))}catch(o){ly.error(o),t[tn.HUB].pid=void 0}try{t[tn.LEAF].pid=Number.parseInt(await ay.readFile(cy.join(jm,"clustering",nY.PID_FILES.LEAF),"utf8"))}catch(o){ly.error(o),t[tn.LEAF].pid=void 0}return t}a(vhe,"getHubLeafStatus")});var zm=process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL");zm&&X().setCloneVar(!0);var Kd=require("fs"),aY=require("path"),oc=k(),cY=i$(),Bhe=Ri(),Hhe=c$(),uy=L(),{SERVICE_ACTIONS_ENUM:br,PACKAGE_ROOT:xhe}=uy;Ghe();function Ghe(){let e=Hhe();if(e)if(e.error){console.error(e.error),oc.error(e.error);return}else e.warn&&(console.warn(e.warn),oc.warn(e.warn));let t;Kd.readdir(aY.join(xhe,"bin"),r=>{if(r)return oc.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let n;zm||(n=cY.buildRequest(),n.operation&&(t=br.OPERATION));let s;switch(t){case br.OPERATION:oc.trace("calling cli operations with:",n),cY.cliOperations(n).then();break;case br.DEV:process.env.DEV_MODE=!0;case br.RUN:let i=process.argv[3];i&&i[0]!=="-"&&(Kd.existsSync(i)||(console.error(`The folder ${i} does not exist`),process.exit(1)),Kd.statSync(i).isDirectory()||(console.error(`The path ${i} is not a folder`),process.exit(1)),i=Kd.realpathSync(i),Kd.existsSync(aY.join(i,uy.HDB_CONFIG_FILE))?process.env.ROOTPATH=i:process.env.RUN_HDB_APP=i),ic().main();break;case br.START:zm?iy()(!0).catch(S=>{console.log(S)}):s=ic().launch();break;case br.INSTALL:jV()().then(()=>ic().main(!0)).catch(m=>{console.error(m)});break;case br.REGISTER:XV().register().then(m=>{console.log(m)}).catch(m=>{console.error(m)});break;case br.STOP:rY()().then(()=>{process.exit(0)}).catch(m=>{console.error(m)});break;case br.RESTART:bo().restart({}).then().catch(m=>{oc.error(m),console.error(`There was an error restarting HarperDB. ${m}`),process.exit(1)});break;case br.VERSION:Bhe.printVersion();break;case br.UPGRADE:oc.setLogLevel(uy.LOG_LEVELS.INFO),JN().upgrade(null).then(()=>{console.log("Your instance of HarperDB is up to date!")}).catch(m=>{oc.error(`Got an error during upgrade ${m}`)});break;case br.STATUS:oY()().then().catch(m=>{console.error(m)});break;case br.RENEWCERTS:let{generateKeys:E}=Lm();E().then(()=>{console.log("Successfully renewed self-signed certificates")}).catch(()=>{console.error(r)});break;case br.COPYDB:let f=process.argv[3],h=process.argv[4];(Rh(),ae(gh)).copyDb(f,h);break;case void 0:zm?iy()().catch(S=>{console.log(S)}):ic().main();break;default:console.warn(`The "${t}" command is not understood.`);case br.HELP:console.log(`
106
+ Reindexing upgrade started for transaction logs`),Fi.notify("Reindexing upgrade started for transaction logs"),await N$(PN,!0,e)),Fi.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Cd?", but errors occurred":"")}a(hde,"reindexUpgrade");async function N$(e,t,r){let n=await Xs.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=ki.join(e,o.toString());if(o===".DS_Store")continue;let l=await Xs.readdir(c),_=l.length;for(let u=0;u<_;u++){let d=l[u];if(d!==".DS_Store"&&Xs.statSync(ki.join(c,d)).isDirectory())try{await pde(o,d,t),Ar.info(`Reindexing started for ${o}.${d}`),Fi.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await Sde(o,d,c,t,r),Ar.info(`Reindexing completed for ${o}.${d}`),Fi.notify(`Reindexing completed for ${o}.${d}`)}catch(E){Cd=!0,E.schema_path=c,E.table_name=d,Fi.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Fi.error(E),Ar.error(E),console.error(E)}}}if(!Cd)try{await Xs.rm(Dm,{recursive:!0})}catch{}}a(N$,"processTables");async function pde(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=ki.join(Dm,s);await Xs.ensureDir(Dm),await Xs.writeFile(i,""),Ar=fde({level:"debug",formatters:{bindings(){}}},i)}a(pde,"initPinoLogger");var mde=20;async function Sde(e,t,r,n,s){let i;try{i=await Nn.openEnvironment(r,t,n)}catch(T){if(T.message==="MDB_INVALID: File is not an LMDB file"){Fi.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),Ar.error(T);return}throw T}let o=Rde(i.dbis),c=Nn.openDBI(i,o),l=Object.keys(i.dbis),_=Nn.statDBI(i,o);Ar.info(`Old environment stats: ${JSON.stringify(_)}`);let u=new dde.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});u.start(_.entryCount,0,{});let d=await Nn.createEnvironment(r,t,!1);Nn.createDBI(d,o,!1,!0);let E=[];try{for(let T of c.getRange({start:!1}))T.value=Object.assign({},T.value),E.push(T),n||e==="system"&&(t==="hdb_schema"&&(T.key=T.key.toString(),T.value.name=T.value.name.toString()),t==="hdb_table"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.name=T.value.name.toString()),t==="hdb_attribute"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.table=T.value.table.toString(),T.value.attribute=T.value.attribute.toString())),E.length>mde&&await f();await f()}catch(T){throw Cd=!0,Ar.error(T),T}async function f(){let T,b=E.map(({value:U})=>U);n?T=await Promise.all(b.map(U=>Tde(d,U))):T=await cde(d,o,l.filter(U=>U!=="__blob__"),b,!1);for(let U=0,v=E.length;U<v;U++){let{key:F,value:M}=E[U];Ar.info(`Record hash value: ${F} hash: ${o}`);let W;n?W=T[U]:W=T.written_hashes.indexOf(F)>-1,wd(W,!0),gde(d,o,M[o],n),Ar.info(`Insert success, written hashes: ${T.written_hashes}`),u.increment()}E=[],u.value/u.total*100%10===0&&Fi.notify(`${e}.${t} ${u.value}/${u.total} records inserted`),Ar.info(`${u.value}/${u.total} records inserted`)}a(f,"finishOutstanding"),u.stop();let h=Nn.statDBI(i,o),m=Nn.statDBI(d,o);if(Ar.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${m.entryCount}`),wd.deepStrictEqual(h.entryCount,m.entryCount),await Nn.closeEnvironment(i),await Nn.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let T=ki.join(r,t),b=ki.join(T,"data.mdb"),N=ki.join(T,"lock.mdb");await Xs.unlink(b),await Xs.unlink(N),await Xs.rmdir(T),Ar.info(`Deleted old environment files from schema folder: ${b}, ${N}`)}let S=await Nn.openEnvironment(r,t),g=Nn.statDBI(S,o);Ar.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify(g)}`),wd.deepStrictEqual(g.entryCount,m.entryCount),await Nn.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(Sde,"processTable");async function Tde(e,t){Nn.initializeDBIs(e,qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,qo.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),_de.isEmpty(t.user_name)||e.dbis[qo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[qo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(Tde,"insertTransaction");function gde(e,t,r,n){let i=e.dbis[t].get(r);wd.deepStrictEqual(typeof i,"object");let o;if(n){let c={[qo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[qo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,l]of o)if(c!==t&&e.dbis[c]!==void 0&&!ude.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let _=0,u=l.length;_<u;_++){let d=l[_];y$(e,c,d,r)}else y$(e,c,l,r)}a(gde,"validateIndices");function y$(e,t,r,n){try{let s=!1,i=lde.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||Ar.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),wd.deepStrictEqual(s,!0)}catch(s){Cd=!0,Ar.error(s),console.error(s)}}a(y$,"validateIndex");function Rde(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(Rde,"getHashDBI")});var Pm=R((xIe,D$)=>{"use strict";var Ade=require("mkcert"),Lm=require("path"),MN=require("fs-extra"),UN=k(),Ode=X(),vN=L(),Ml=DT(),bde=to(),Nde=Et();D$.exports={generateKeys:yde,updateConfigCert:C$};async function yde(){let e=Ode.getHdbBasePath(),t=Lm.join(e,vN.LICENSE_KEY_DIR_NAME),r=await Ade.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:3650,caKey:Ml.CERTIFICATE_VALUES.key,caCert:Ml.CERTIFICATE_VALUES.cert}),n=Lm.join(t,Ml.CERTIFICATE_PEM_NAME),s=Lm.join(t,Ml.PRIVATEKEY_PEM_NAME),i=Lm.join(t,Ml.CA_PEM_NAME);try{await MN.writeFile(n,r.cert)}catch(o){throw UN.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await MN.writeFile(s,r.key)}catch(o){throw UN.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await MN.writeFile(i,Ml.CERTIFICATE_VALUES.cert)}catch(o){throw UN.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}C$(n,s,i)}a(yde,"generateKeys");function C$(e,t,r){let n=bde(Object.keys(vN.CONFIG_PARAM_MAP),!0),s=vN.CONFIG_PARAMS,i={[s.CLUSTERING_TLS_CERTIFICATE]:n[s.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?n[s.CLUSTERING_TLS_CERTIFICATE]:e,[s.CLUSTERING_TLS_PRIVATEKEY]:n[s.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?n[s.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[s.CLUSTERING_TLS_CERT_AUTH]:n[s.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?n[s.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[s.TLS_CERTIFICATE]:n[s.TLS_CERTIFICATE.toLowerCase()]?n[s.TLS_CERTIFICATE.toLowerCase()]:e,[s.TLS_PRIVATEKEY]:n[s.TLS_PRIVATEKEY.toLowerCase()]?n[s.TLS_PRIVATEKEY.toLowerCase()]:t,[s.TLS_CERTIFICATEAUTHORITY]:n[s.TLS_CERTIFICATEAUTHORITY.toLowerCase()]?n[s.TLS_CERTIFICATEAUTHORITY.toLowerCase()]:r};n[s.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_CERTIFICATE]=n[s.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),n[s.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_PRIVATEKEY]=n[s.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),n[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=n[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),Nde.updateConfigValue(void 0,void 0,i,!1,!0)}a(C$,"updateConfigCert")});var v$=R((FIe,U$)=>{"use strict";var Mm=require("path"),Fo=require("fs-extra"),Ide=DN(),Za=k(),L$=Et(),BN=X(),Os=L(),Um=Y(),wde=require("properties-reader"),Cde=as(),Dde=GE(),Lde=ur(),qIe=require("util"),Pde=Lde.searchByValue,Mde=Pr(),Ude=oh(),vde=Ze(),Bde=w$(),P$=Pm(),Hde=Im(),Pd=new Ide("4.0.0"),M$=[],Dd,Ld;async function xde(){try{if(await Hde.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Dd){let t=Um.changeExtension(Dd,".bak");await Fo.move(Dd,t)}if(Ld){let t=Um.changeExtension(Ld,".bak");await Fo.move(Ld,t)}await P$.generateKeys()}else console.log("Using existing certificates."),P$.updateConfigCert(Dd,Ld,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(xde,"generateNewKeys");async function Gde(){console.log("Updating HarperDB nodes."),Za.info("Updating HarperDB nodes.");let e=[];try{let t=new Cde(Os.SYSTEM_SCHEMA_NAME,Os.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await Pde(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!vde.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let u=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(u),u}let l={host:c.host,port:c.port};e.push(l);let _=[];for(let u=0,d=c.subscriptions.length;u<d;u++){let E=c.subscriptions[u],f=E.channel.split(":");_.push({schema:f[0],table:f[1],publish:E.publish,subscribe:E.subscribe})}n.push({name:c.name,subscriptions:_,system_info:{hdb_version:Os.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(Um.isEmptyOrZeroLength(n))return;let s=new Dde(Os.SYSTEM_SCHEMA_NAME,Os.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await Mde.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{Ude.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(Gde,"updateNodes");async function qde(){let e=BN.get(Os.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(Mm.join("config","settings.js"))){Za.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),Za.info(t);let r=Mm.dirname(e),n=BN.get(Os.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=Mm.join(n,"backup","4_0_0_upgrade_settings.bak"),i=Mm.join(n,Os.HDB_CONFIG_FILE);try{Za.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Fo.copySync(e,s)}catch(d){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),d}try{Za.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),Za.info("Updating env variables with new settings values");let d=L$.initOldConfig(e);Dd=d[Os.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],Ld=d[Os.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],L$.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=Um.getPropsFilePath();Fo.accessSync(o,Fo.constants.F_OK|Fo.constants.R_OK);let l=wde(o).get(Os.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
107
+ install_user = ${l}`;try{Fo.writeFileSync(o,_)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{BN.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let u="New settings file for 4.0.0 upgrade successfully created.";try{Fo.removeSync(r),console.log(u),Za.info(u)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(qde,"updateSettingsFile_4_0_0");Pd.async_functions.push(qde);Pd.async_functions.push(xde);Pd.async_functions.push(Bde);Pd.async_functions.push(Gde);M$.push(Pd);U$.exports=M$});var HN=R(($Ie,G$)=>{"use strict";var ec=Y(),Fde=L(),B$=k(),{DATA_VERSION:kde,UPGRADE_VERSION:$de}=Fde.UPGRADE_JSON_FIELD_NAMES_ENUM,H$=O$(),vm=v$(),tc=new Map;H$&&H$.forEach(e=>{tc.set(e.version,e)});vm&&vm.forEach(e=>{tc.set(e.version,e)});vm&&vm.forEach(e=>{tc.set(e.version,e)});function Vde(){return[...tc.keys()].sort(ec.compareVersions)}a(Vde,"getSortedVersions");function x$(e){let t=e[kde],r=e[$de];return ec.isEmptyOrZeroLength(t)||ec.isEmptyOrZeroLength(r)?(B$.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),B$.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...tc.keys()].sort(ec.compareVersions).filter(function(n){return ec.compareVersions(n,t)>0&&ec.compareVersions(n,r)<=0})}a(x$,"getVersionsForUpgrade");function Yde(e){return x$(e).length>0}a(Yde,"hasUpgradesRequired");function Kde(e){return ec.isEmptyOrZeroLength(e)?null:tc.has(e)?tc.get(e):null}a(Kde,"getDirectiveByVersion");G$.exports={getSortedVersions:Vde,getDirectiveByVersion:Kde,getVersionsForUpgrade:x$,hasUpgradesRequired:Yde}});var Md=R((YIe,V$)=>{"use strict";var Wde=require("util"),xN=require("chalk"),Qde=require("os"),F$=Pr(),jde=ur(),yn=L(),k$=_$(),qN=NT(),{UpgradeObject:q$}=E$(),{forceDowngradePrompt:zde}=Im(),Jde=Ri(),Bm=k(),Ul=Y(),FN=Bn(),Xde=(Re(),ae(Ve)),Zde=HN(),efe=Wde.promisify(FN.setSchemaDataToGlobal),tfe=jde.searchByValue,rfe="info_id",nfe="2.9.9",sfe="3.0.0";async function ife(e){let t=new k$.HdbInfoInsertObject(1,e,e),r=new qN.InsertObject(yn.OPERATIONS_ENUM.INSERT,yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,yn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return FN.setSchemaDataToGlobal(),F$.insert(r)}a(ife,"insertHdbInstallInfo");async function GN(e){let t,r=await $$(),n=new Map([[0,{}]]);for(let c of r)n.set(c.info_id,c);let i=Math.max.apply(null,[...n.keys()])+1;t=new k$.HdbInfoInsertObject(i,e,e);let o=new qN.InsertObject(yn.OPERATIONS_ENUM.INSERT,yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,yn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await efe(),F$.insert(o)}a(GN,"insertHdbUpgradeInfo");async function $$(){let e=new qN.NoSQLSeachObject(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,rfe,yn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await tfe(e))}catch(r){console.error(r)}return t}a($$,"getAllHdbInfoRecords");async function ofe(){let e=await $$();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(ofe,"getLatestHdbInfoRecord");async function afe(){Bm.info("Checking if HDB software has been updated");try{let e=Jde.version(),t=await ofe(),r;if(Ul.isEmpty(t))r=nfe;else if(r=t.data_version_num,Ul.compareVersions(r.toString(),e.toString())>0){if(!Ul.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(xN.yellow(`This instance's data was last run on version ${r}`)),console.error(xN.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${Qde.EOL}${yn.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Ul.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(xN.yellow(`This instance's data was last run on version ${r}`)),await zde(new q$(r,e))?await GN(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(FN.setSchemaDataToGlobal(),cfe(r),e.toString()===r.toString())return;let n=new q$(r,e);if(Zde.hasUpgradesRequired(n))return n;Ul.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await GN(n.upgrade_version),Bm.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw Bm.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Bm.fatal(e),e}}a(afe,"getVersionUpdateInfo");function cfe(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${yn.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in Xde.databases.system))throw console.log(t),new Error(t);if(!Ul.isEmpty(e)&&e<sfe)throw console.log(t),new Error(t)}a(cfe,"checkIfInstallIsSupported");V$.exports={insertHdbInstallInfo:ife,insertHdbUpgradeInfo:GN,getVersionUpdateInfo:afe}});var j$=R((WIe,Q$)=>{"use strict";var kN=require("joi"),{boolean:lfe,string:Y$,number:ufe}=kN.types(),K$=require("fs-extra"),Ud=L(),W$=require("path"),_fe=nt();Q$.exports=dfe;function dfe(e){let t=Y$.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=kN.object({[Ud.INSTALL_PROMPTS.ROOTPATH]:kN.custom(ffe),[Ud.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:ufe.min(0).allow("null",null),[Ud.INSTALL_PROMPTS.TC_AGREEMENT]:Y$.valid("yes","YES","Yes"),[Ud.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Ud.INSTALL_PROMPTS.CLUSTERING_ENABLED]:lfe});return _fe.validateBySchema(e,r)}a(dfe,"installValidator");function ffe(e,t){if(K$.existsSync(W$.join(e,"system/hdb_user/data.mdb"))||K$.existsSync(W$.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(ffe,"validateRootAvailable")});var YN=R((jIe,z$)=>{"use strict";var{mkdirpSync:Efe}=require("fs-extra"),Zs=require("path"),vl=L(),VN=k(),hfe=Hn(),$N=_i(),pfe=Je();z$.exports=mfe;async function mfe(e){VN.trace("Mounting HarperDB"),bs(e),bs(Zs.join(e,"backup")),bs(Zs.join(e,"trash")),bs(Zs.join(e,"keys")),bs(Zs.join(e,"keys",vl.LICENSE_FILE_NAME)),bs(Zs.join(e,"log")),bs(Zs.join(e,"doc")),bs(Zs.join(e,"database")),bs(Zs.join(e,vl.TRANSACTIONS_DIR_NAME)),bs(Zs.join(e,"clustering","leaf")),bs(Zs.join(e,"components")),await Sfe()}a(mfe,"mountHdb");async function Sfe(){let e=Uu(),t=Object.keys($N);for(let r=0;r<t.length;r++){let n=t[r],s=$N[n].hash_attribute;try{pfe.initSystemSchemaPaths(vl.SYSTEM_SCHEMA_NAME,n);let i=new e(vl.SYSTEM_SCHEMA_NAME,n,s);i.attributes=$N[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,await hfe.createTable(n,i)}catch(i){throw VN.error(`issue creating environment for ${vl.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(Sfe,"createLMDBTables");function bs(e){Efe(e,{mode:vl.HDB_FILE_PERMISSIONS}),VN.info(`Directory ${e} created`)}a(bs,"makeDirectory")});var xm=R((JIe,cV)=>{"use strict";var WN=require("os"),eV=require("inquirer"),Jn=require("fs-extra"),Tfe=require("properties-reader"),rc=require("chalk"),ri=require("path"),gfe=require("human-readable-ids").hri,Rfe=require("ora"),Afe=require("yaml"),Ut=k(),Vo=X(),vd=Y(),Hm=to(),tV=Md(),rV=Ri(),ne=L(),Ofe=j$(),bfe=YN(),QN=Et(),Nfe=Ur(),yfe=BE(),Ife=bN(),wfe=Bn(),Cfe=require("util").promisify,Dfe=Cfe(wfe.setSchemaDataToGlobal),Lfe=Pm(),Bl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Or=a(e=>rc.magenta.bold(e),"HDB_PROMPT_MSG"),Pfe="https://harperdb.io/legal/end-user-license-agreement",Yo=WN.EOL,ko="",Mfe="yes",J$="Starting HarperDB install...",X$="HarperDB installation was successful.",Z$="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Ufe="An out of date version of HarperDB is already installed.",KN="It appears that HarperDB is already installed. Exiting install...",vfe="Aborting install",Bfe=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),Hfe=new RegExp(/^[^\s.,*>]+$/),xfe=WN.homedir(),Gfe=ri.join(xfe,ne.HDB_ROOT_DIR_NAME),qfe=9925,Ffe="HDB_ADMIN",kfe="CLUSTER_USER",Jr={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},Ko=Hm([ne.INSTALL_PROMPTS.HDB_CONFIG]),ti,nV=!1,sV=!1;cV.exports={install:iV,updateConfigEnv:Zfe,setIgnoreExisting:eEe};iV.createSuperUser=aV;async function iV(){console.log(Or(Yo+J$+Yo)),Ut.notify(J$);let e;Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]&&(e=$fe());let t=Yfe();Object.assign(t,e);let r=Ofe(t);if(r)throw r.message;await Kfe(),await Wfe(t);let n=await Vfe(t);n[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT]&&(n[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]=null),ti=n[ne.INSTALL_PROMPTS.ROOTPATH],Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]&&ri.dirname(Ko[ne.INSTALL_PROMPTS.HDB_CONFIG])===ti&&(nV=!0),!Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]&&await Jn.pathExists(ri.join(ti,ne.HDB_CONFIG_FILE))&&(console.error(KN),process.exit());let s=Rfe({prefixText:Or("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),vd.isEmpty(ti))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Vo.setHdbBasePath(ti),await bfe(ti),await Qfe(),await jfe(n),Ut.initLogSettings(!0),await aV(n),await Jfe(n),await Lfe.generateKeys(),await Xfe(),Ife(),s.stop(),console.log(Or(Yo+X$+Yo)),Ut.notify(X$)}a(iV,"install");function $fe(){let e=Afe.parseDocument(Jn.readFileSync(Ko[ne.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=QN.flattenConfig(e.toJSON());return t[ne.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[ne.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a($fe,"getConfigFromFile");async function Vfe(e){Ut.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Bl,when:$o(e[ne.INSTALL_PROMPTS.ROOTPATH],Jr.DESTINATION),name:ne.INSTALL_PROMPTS.ROOTPATH,prefix:ko,default:Gfe,validate:async s=>ei(s)?ei(s):await Jn.pathExists(ri.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,message:Or(Jr.DESTINATION)},{type:"input",transformer:Bl,when:$o(e[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]??e[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT],Jr.HDB_PORT),name:ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:ko,default:qfe,validate:s=>Bfe.test(s)?!0:"Invalid port.",message:Or(Jr.HDB_PORT)},{type:"input",transformer:Bl,when:$o(e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Jr.HDB_USERNAME),name:ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:ko,default:Ffe,validate:s=>ei(s)?ei(s):(t=s,!0),message:Or(Jr.HDB_USERNAME)},{type:"password",when:$o(e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Jr.HDB_PASS),name:ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:ko,validate:s=>ei(s)?ei(s):!0,message:Or(Jr.HDB_PASS)}];if(vd.autoCastBoolean(e[ne.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Bl,when:$o(e[ne.INSTALL_PROMPTS.CLUSTERING_NODENAME],Jr.NODE_NAME),name:ne.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:ko,default:gfe.random(),validate:i=>Hfe.test(i)?!0:"Invalid node name, must not contain ., * or >",message:Or(Jr.NODE_NAME)},{type:"input",transformer:Bl,when:$o(e[ne.INSTALL_PROMPTS.CLUSTERING_USER],Jr.CLUSTER_USERNAME),name:ne.INSTALL_PROMPTS.CLUSTERING_USER,prefix:ko,default:kfe,validate:i=>ei(i)?ei(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:Or(Jr.CLUSTER_USERNAME)},{type:"password",when:$o(e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Jr.CLUSTER_PASS),name:ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:ko,validate:i=>ei(i)?ei(i):!0,message:Or(Jr.CLUSTER_PASS)}];r.push(...s)}let n=await eV.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}a(Vfe,"installPrompts");function $o(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Or(t)} ${rc.gray("[hidden]")}`),Ut.trace(`${Or(t)} [hidden]`)):(console.log(`${Or(t)} ${e}`),Ut.trace(`${Or(t)} ${e}`)),!1):!0}a($o,"displayCmdEnvVar");function ei(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(ei,"checkForEmptyValue");function Yfe(){let e=Object.keys(ne.INSTALL_PROMPTS),t=Hm(e),r=Hm(Object.keys(ne.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=ne.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(Yfe,"checkForPromptOverride");async function Kfe(){Ut.trace("Checking for existing install.");let e=vd.getPropsFilePath(),t=await Jn.pathExists(e),r;if(t){Ut.trace(`Install found an existing boot prop file at:${e}`);let n=Tfe(e),s=QN.getConfigValue(ne.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(ne.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Jn.pathExists(s)}if(!t&&vd.noBootFile()&&(r=!0),r&&!sV){if(Ut.trace(`Install found existing HDB config at:${e}`),await tV.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${rV.version()}. Exiting install...`;console.log(Yo+rc.magenta.bold(Ufe)),console.log(rc.magenta.bold(s)),Ut.error(s)}else console.log(Yo+rc.magenta.bold(KN)),Ut.error(KN);process.exit(0)}}a(Kfe,"checkForExistingInstall");async function Wfe(e){Ut.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Pfe}${Yo}and can be viewed by typing or copying and pasting the URL into your web browser.${Yo}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:ko,transformer:Bl,when:$o(e[ne.INSTALL_PROMPTS.TC_AGREEMENT],t),name:ne.INSTALL_PROMPTS.TC_AGREEMENT,message:Or(t),validate:s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:rc.yellow("Please enter 'yes' or 'no'")},n=await eV.prompt([r]);n[ne.INSTALL_PROMPTS.TC_AGREEMENT]&&n[ne.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Mfe&&(console.log(rc.yellow(Z$)),Ut.error(Z$),process.exit(0))}a(Wfe,"termsAgreement");async function Qfe(){let e=ri.join(ti,ne.HDB_CONFIG_FILE),t;try{t=WN.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
108
+ install_user = ${t}`,n=vd.getHomeDir(),s=ri.join(n,ne.HDB_HOME_DIR_NAME),i=ri.join(s,ne.LICENSE_KEY_DIR_NAME);try{Jn.mkdirpSync(s,{mode:ne.HDB_FILE_PERMISSIONS}),Jn.mkdirpSync(i,{mode:ne.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${ne.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=ri.join(s,ne.BOOT_PROPS_FILE_NAME);try{await Jn.writeFile(o,r)}catch(c){throw Ut.error(`There was an error creating the boot file at path: ${o}`),c}Vo.setProperty(ne.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Vo.setProperty(ne.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Vo.setProperty(Vo.BOOT_PROPS_FILE_PATH,o)}}a(Qfe,"createBootPropertiesFile");async function jfe(e){Ut.trace("Creating HarperDB config file");let t=Hm(Object.keys(ne.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]||QN.createConfigFile(t),Vo.initSync()}catch(r){zfe(r)}}a(jfe,"createConfigFile");function zfe(e){Ut.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(vfe);let t=ri.resolve(Vo.get(Vo.BOOT_PROPS_FILE_PATH),"../");t&&Jn.removeSync(t),ti&&(nV?Jn.readdirSync(ti,{withFileTypes:!0}).forEach(n=>{let s=ri.join(n.path,n.name);s!==Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]&&Jn.removeSync(s)}):Jn.removeSync(ti)),process.exit(1)}a(zfe,"rollbackInstall");async function oV(e,t){Ut.trace("Creating admin user"),await Dfe();let r;try{r=await yfe.addRole(e)}catch(n){if(n.message.includes("already exists"))t=void 0;else throw n.message+="Error creating role",n}if(t)try{t.role=r.role,await Nfe.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(oV,"createAdminUser");async function aV(e){Ut.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await oV(t,r),delete e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(aV,"createSuperUser");async function Jfe(e){Ut.trace("Creating Cluster user.");let t;e[ne.INSTALL_PROMPTS.CLUSTERING_USER]&&e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[ne.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await oV({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[ne.INSTALL_PROMPTS.CLUSTERING_USER],delete e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(Jfe,"createClusterUser");async function Xfe(){let e=rV.version();if(e)await tV.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(Xfe,"insertHdbVersionInfo");function Zfe(e){Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]=e}a(Zfe,"updateConfigEnv");function eEe(e){sV=e}a(eEe,"setIgnoreExisting")});var _V=R((ZIe,uV)=>{"use strict";var jN=Y(),In=k(),lV=HN();uV.exports={processDirectives:tEe};async function tEe(e){console.log("Starting upgrade process...");let t=lV.getVersionsForUpgrade(e),r=sEe(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;In.notify(c),console.log(c);let l=[],_=[];try{l=rEe(o.sync_functions)}catch(u){throw In.error(`Error while running an upgrade script for ${o.version}`),u}try{_=await nEe(o.async_functions)}catch(u){throw In.error(`Error while running an upgrade script for ${o.version}`),u}n.push(...l,..._)}return n}a(tEe,"processDirectives");function rEe(e){if(jN.isEmptyOrZeroLength(e))return In.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return In.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(In.info(`Running function ${r.name}`),!(r instanceof Function)){In.info("Variable being processed is not a function");continue}let n=r();In.info(n),t.push(n)}return t}a(rEe,"runSyncFunctions");async function nEe(e){if(jN.isEmptyOrZeroLength(e))return In.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return In.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(In.info(`Running function ${s.name}`),!(s instanceof Function)){In.info("Variable being processed is not a function");continue}let i=await s();In.info(i),t.push(i)}return t}a(nEe,"runAsyncFunctions");function sEe(e){if(jN.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=lV.getDirectiveByVersion(r);n&&t.push(n)}return t}a(sEe,"getUpgradeDirectivesToInstall")});var XN=R((twe,mV)=>{"use strict";var Gm=X();Gm.initSync();var hV=require("chalk"),dV=require("fs-extra"),Vi=k(),$i=L(),fV=Ri(),iEe=_V(),zN=Y(),pV=Md(),oEe=Im(),EV=hS(),aEe=Bn(),cEe=require("util").promisify,lEe=cEe(aEe.setSchemaDataToGlobal),JN,{UPGRADE_VERSION:qm}=$i.UPGRADE_JSON_FIELD_NAMES_ENUM;mV.exports={upgrade:uEe};async function uEe(e){await lEe(),JN===void 0&&(JN=Yc()),dV.existsSync(Gm.get(Gm.BOOT_PROPS_FILE_PATH))||(Bd("The hdb_boot_properties file was not found. Please install HDB.",$i.LOG_LEVELS.ERROR),process.exit(1)),dV.existsSync(Gm.get($i.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(Bd("The hdb settings file was not found. Please make sure HDB is installed.",$i.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await pV.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),Bd(`This version of HarperDB is ${fV.version()}`,$i.LOG_LEVELS.INFO);let r=t[qm]?t[qm]:fV.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${$i.HDB_SUPPORT_ADDRESS}`),Vi.notify("Missing new version field from upgrade info object"),process.exit(1)),await _Ee();let n,s=0;try{n=await oEe.forceUpdatePrompt(t)}catch(i){Vi.error("There was an error when prompting user about upgrade."),Vi.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Vi.info(`Starting upgrade to version ${r}`),await dEe(t),Bd(`HarperDB was successfully upgraded to version ${t[qm]}`,$i.LOG_LEVELS.INFO)}a(uEe,"upgrade");async function _Ee(){let e=!1,t=await EV.findPs($i.HDB_PROC_NAME);if(zN.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await EV.findPs("hdb_express");zN.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await JN.list();zN.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(hV.red(r)),Vi.error(r),process.exit(1)}}a(_Ee,"checkIfRunning");async function dEe(e){try{await iEe.processDirectives(e)}catch(t){throw Bd("There was an error during the data upgrade. Please check the logs.",$i.LOG_LEVELS.ERROR),t}try{await pV.insertHdbUpgradeInfo(e[qm])}catch(t){Vi.error("Error updating the 'hdb_info' system table."),Vi.error(t)}}a(dEe,"runUpgrade");function Bd(e,t=void 0){t||(t=Vi.info),Vi[t](e),console.log(hV.magenta(e))}a(Bd,"printToLogAndConsole")});var AV=R((nwe,RV)=>{"use strict";var{promises:ey,createReadStream:fEe,createWriteStream:EEe}=require("fs"),{createGzip:hEe}=require("zlib"),{promisify:pEe}=require("util"),{pipeline:mEe}=require("stream"),SEe=pEe(mEe),TEe=require("path"),sc=X();sc.initSync();var nc=k(),{CONFIG_PARAMS:Hd,ITC_EVENT_TYPES:gEe}=L(),{onMessageFromWorkers:REe}=rt(),AEe=6e4,OEe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",bEe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",ZN,TV;RV.exports=gV;REe(e=>{e.type===gEe.RESTART&&(sc.initSync(!0),clearInterval(TV),sc.get(Hd.LOGGING_ROTATION_ENABLED)&&gV())});async function gV(){try{let e=nc.getLogFilePath(),t=sc.get(Hd.LOGGING_ROTATION_MAXSIZE),r=sc.get(Hd.LOGGING_ROTATION_INTERVAL);if(!t&&!r){nc.error(OEe);return}let n=sc.get(Hd.LOGGING_ROTATION_PATH);if(!n){nc.error(bEe);return}let s;if(t){let o=t.slice(-1),c=t.slice(0,-1);o==="G"?s=c*1e9:o==="M"?s=c*1e6:s=c*1e3}let i;if(r){let o=r.slice(-1),c=r.slice(0,-1);o==="D"?i=c*1440:o==="H"?i=c*60:i=c}ZN=Date.now()/6e4,nc.trace("Log rotate enabled, maxSize:",t,"interval:",r),TV=setInterval(async()=>{if(s){let o;o=await ey.stat(e),o.size>=s&&await SV(e,n)}i&&Date.now()/6e4-ZN>=i&&(await SV(e,n),ZN=Date.now()/6e4)},AEe).unref()}catch(e){nc.error(e)}}a(gV,"logRotator");async function SV(e,t){let r=sc.get(Hd.LOGGING_ROTATION_COMPRESS),n=TEe.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await SEe(fEe(e),hEe(),EEe(n)),await ey.unlink(e)):await ey.rename(e,n),nc.closeLogFile(),nc.notify(`hdb.log rotated, old log moved to ${n}`)}a(SV,"moveLogFile")});var ic=R((fwe,DV)=>{"use strict";var Xr=X();Xr.initSync();var iwe=bo(),bt=L(),si=k(),Yi=require("fs-extra"),Wo=require("path"),NEe=require("systeminformation"),yEe=bN(),{install:IEe}=xm(),ty=require("chalk"),wEe=ma(),Ki=Y(),bV=Et(),NV=to(),OV=fh(),CEe=XN(),DEe=AV(),{compactOnStart:LEe}=(Rh(),ae(gh)),PEe=require("minimist"),{PACKAGE_ROOT:MEe}=L(),{startHTTPThreads:UEe,startSocketServer:owe,mostIdleRouting:awe,remoteAffinityRouting:cwe}=(yb(),ae(eF)),vEe=Md(),{isMainThread:BEe}=require("worker_threads"),lwe=_i(),uwe=Ei(),_we=gg(),dwe=Uu(),Fm=L(),ni,Hl,yV=!1,HEe="Upgrade complete. Starting HarperDB.",xEe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",GEe="HarperDB not found, starting install process.",qEe="There was an error during install, check install_log.log for more details. Exiting.",FEe="HarperDB successfully started.";function kEe(){if(!yV){let e=a(()=>{Yi.removeSync(Wo.join(Xr.get(bt.CONFIG_PARAMS.ROOTPATH),bt.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(kEe,"addExitListeners");async function IV(e=!1,t=!1){if(console.log(ty.magenta("Starting HarperDB...")),await CV()===!1){console.log(GEe);try{await IEe()}catch(o){console.error(qEe,o),si.error(o),process.exit(1)}}if(!e){let o=NV(Object.keys(bt.CONFIG_PARAM_MAP),!0);!Ki.isEmpty(o)&&!Ki.isEmptyOrZeroLength(Object.keys(o))&&bV.updateConfigValue(void 0,void 0,o,!0,!0)}let r,n=Hl?.service==="clustering";Hl?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Yi.readFile(Wo.join(Xr.get(bt.CONFIG_PARAMS.ROOTPATH),bt.HDB_PID_FILE),"utf8")),c=await NEe.processes();for(let l of c.list)if(l.pid===o){n?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}ni===void 0&&(ni=Yc()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Xr.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await OV.generateNatsConfig(),await ni.startClusteringProcesses(!0),process.exit()),kEe(),await Yi.writeFile(Wo.join(Xr.get(Fm.CONFIG_PARAMS.ROOTPATH),Fm.HDB_PID_FILE),`${process.pid}`),si.info("HarperDB PID",process.pid);let s;try{let o=await vEe.getVersionUpdateInfo();o!==void 0&&(s=o[bt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await CEe.upgrade(o),console.log(HEe))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`,o),si.error(o)):(console.error(xEe,o),si.error(o)),process.exit(1)}yEe(),YEe(),Ki.autoCastBoolean(Xr.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&BEe&&await OV.generateNatsConfig(t)}a(IV,"initialize");async function $Ee(e=!1){try{Hl=PEe(process.argv),Hl.ROOTPATH&&bV.updateConfigObject("settings_path",Wo.join(Hl.ROOTPATH,bt.HDB_CONFIG_FILE)),await IV(e,!0),Xr.get(bt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await LEe();let t=process.env.IS_SCRIPTED_SERVICE&&!Hl.service;Ki.autoCastBoolean(Xr.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await ni.startClusteringProcesses(),await ni.startClusteringThreads()),await UEe(process.env.DEV_MODE?1:Xr.get(Fm.CONFIG_PARAMS.THREADS_COUNT)??Xr.get(Fm.CONFIG_PARAMS.THREADS)),Xr.get(bt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await DEe(),t||wV()}catch(t){console.error(t),si.error(t),process.exit(1)}}a($Ee,"main");function wV(){si.suppressLogging(()=>{console.log(ty.magenta(""+Yi.readFileSync(Wo.join(MEe,"utility/install/ascii_logo.txt")))),console.log(ty.magenta(`|------------- HarperDB ${wEe.version} successfully started ------------|`))}),si.notify(FEe)}a(wV,"started");async function VEe(e=!0){yV=!e;try{ni===void 0&&(ni=Yc()),ni.enterPM2Mode(),await IV(),Ki.autoCastBoolean(Xr.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await ni.startClusteringProcesses(),await ni.startService(bt.PROCESS_DESCRIPTORS.HDB),wV(),e&&process.exit(0)}catch(t){console.error(t),si.error(t),process.exit(1)}}a(VEe,"launch");function YEe(){let e=Wo.join(Xr.get(bt.CONFIG_PARAMS.ROOTPATH),bt.LICENSE_KEY_DIR_NAME,bt.LICENSE_FILE_NAME),t=Wo.join(e,bt.LICENSE_FILE_NAME),r=Wo.join(e,bt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=NV(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Ki.isEmpty(n)||Ki.isEmpty(s))return;Yi.mkdirpSync(e),Yi.writeFileSync(r,n),Yi.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),si.error(s)}}a(YEe,"writeLicenseFromVars");DV.exports={launch:VEe,main:$Ee,isHdbInstalled:CV};async function CV(){try{await Yi.stat(Ki.getPropsFilePath()),await Yi.stat(Xr.get(bt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Ki.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw si.error(`Error checking for HDB install - ${e}`),e}return!0}a(CV,"isHdbInstalled")});var oy=R((hwe,WV)=>{"use strict";var LV=require("os"),Vm=require("https"),PV=require("http"),Yt=require("fs-extra"),MV=require("yaml"),KEe=require("human-readable-ids").hri,{pipeline:UV}=require("stream/promises"),{createWriteStream:Ym,ensureDir:Km}=require("fs-extra"),{join:Cn}=require("path"),FV=require("lodash"),WEe=require("minimist"),kd=require("path"),QEe=require("properties-reader"),Ns=X(),jEe=gi(),kV=k(),ry=Et(),{restart:zEe}=bo(),Wm=Y(),JEe=to(),vV=gt(),XEe=Bn(),{main:$V,launch:ZEe}=ic(),{install:ehe,updateConfigEnv:the,setIgnoreExisting:sy}=xm(),VV=YN(),Zr=L(),rhe=Ri(),nhe=Md(),{SYSTEM_TABLE_NAMES:BV,SYSTEM_SCHEMA_NAME:she,CONFIG_PARAMS:xd,OPERATIONS_ENUM:Dn}=Zr,ihe=1e4,ohe="clone-node-config.yaml",iy=[BV.ROLE_TABLE_NAME,BV.USER_TABLE_NAME],ahe={clustering_nodename:!0,clustering_leafserver_streams_path:!0,clustering_tls_certificate:!0,clustering_tls_privatekey:!0,clustering_tls_certificateauthority:!0,logging_file:!0,logging_root:!0,logging_rotation_path:!0,operationsapi_network_domainsocket:!0,operationsapi_tls_certificate:!0,operationsapi_tls_privatekey:!0,operationsapi_tls_certificateauthority:!0,rootpath:!0,storage_path:!0,storage_audit_path:!0,databases:!0,mqtt_network_mtls_certificateauthority:!0,componentsroot:!0,tls_certificate:!0,tls_privatekey:!0,tls_certificateauthority:!0},lr={HDB_LEADER_USERNAME:"HDB_LEADER_USERNAME",HDB_LEADER_PASSWORD:"HDB_LEADER_PASSWORD",HDB_LEADER_URL:"HDB_LEADER_URL",HDB_LEADER_CLUSTERING_HOST:"HDB_LEADER_CLUSTERING_HOST",HDB_LEADER_CLUSTERING_PORT:"HDB_LEADER_CLUSTERING_PORT",HDB_CLONE_CLUSTERING_HOST:"HDB_CLONE_CLUSTERING_HOST",HDB_FULLY_CONNECTED:"HDB_FULLY_CONNECTED",HDB_CLONE_OVERTOP:"HDB_CLONE_OVERTOP",CLUSTERING_NODENAME:"CLUSTERING_NODENAME"},ji=WEe(process.argv),Gd=ji[lr.HDB_LEADER_USERNAME]??process.env[lr.HDB_LEADER_USERNAME],qd=ji[lr.HDB_LEADER_PASSWORD]??process.env[lr.HDB_LEADER_PASSWORD],Fd=ji[lr.HDB_LEADER_URL]??process.env[lr.HDB_LEADER_URL],$m=ji[lr.HDB_LEADER_CLUSTERING_HOST]??process.env[lr.HDB_LEADER_CLUSTERING_HOST],HV=ji[lr.HDB_CLONE_CLUSTERING_HOST]??process.env[lr.HDB_CLONE_CLUSTERING_HOST],che=(ji[lr.HDB_FULLY_CONNECTED]??process.env[lr.HDB_FULLY_CONNECTED])==="true",YV=(ji[lr.HDB_CLONE_OVERTOP]??process.env[lr.HDB_CLONE_OVERTOP])==="true",xV=ji[lr.CLUSTERING_NODENAME]??process.env[lr.CLUSTERING_NODENAME],lhe=ji[xd.CLONED.toUpperCase()]??process.env[xd.CLONED.toUpperCase()],ny,en,Qi={},GV,Wi,ii={},ut,xl,vt,wn,ys,Gl=!1,jm=!1;WV.exports=a(async function(t=!1){if(console.info(`Starting clone node form leader node: ${Fd}`),delete process.env.HDB_LEADER_URL,vt=Wm.getEnvCliRootPath(),!vt)try{let s=Cn(LV.homedir(),Zr.HDB_HOME_DIR_NAME,Zr.BOOT_PROPS_FILE_NAME);if(await Yt.pathExists(s)){let i=QEe(s);vt=kd.parse(i.get(Zr.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)).dir}}catch{throw new Error("There was an error setting the clone default root path. Please set ROOTPATH using an environment or CLI variable.")}vt?await Yt.pathExists(vt)?console.log(`Existing HarperDB install found at ${vt}. Clone node will only clone items that do not already exist on clone.`):(console.log(`No HarperDB install found at ${vt} starting fresh clone`),Gl=!0):(console.log("No HarperDB install found, starting fresh clone"),Gl=!0),vt||(vt=Cn(LV.homedir(),Zr.HDB_ROOT_DIR_NAME),console.log("Using default root path",vt));let r;try{r=Cn(vt,ohe),en=MV.parseDocument(await Yt.readFile(r,"utf8"),{simpleKeys:!0}).toJSON(),console.log("Clone config file found")}catch{}let n=Cn(vt,Zr.HDB_CONFIG_FILE);if(await Yt.pathExists(n))try{GV=MV.parseDocument(await Yt.readFile(n,"utf8"),{simpleKeys:!0}).toJSON(),Qi=ry.flattenConfig(GV)}catch(s){console.error("Error reading existing harperdb-config.yaml on clone",s)}if(Qi?.cloned&&lhe!=="false")return console.log("Instance marked as cloned, clone will not run"),Ns.setCloneVar(!1),Ns.initSync(),$V();xV?xl=xV:Qi[Zr.CONFIG_PARAMS.CLUSTERING_NODENAME.toLowerCase()]?xl=Qi[Zr.CONFIG_PARAMS.CLUSTERING_NODENAME.toLowerCase()]:xl=en?.clustering?.nodeName??KEe.random(),await uhe(),Ns.setCloneVar(!1),Ns.setHdbBasePath(vt),Yt.ensureDir(Ns.get(Zr.CONFIG_PARAMS.LOGGING_ROOT)),kV.initLogSettings(),await _he(),jm||await dhe(),await hhe(t),ny&&$m&&await phe(),console.info(`
109
+ Successfully cloned node: `+Fd),t&&process.exit()},"cloneNode");async function uhe(){console.info("Cloning configuration"),Wi=await Qm({operation:Dn.GET_CONFIGURATION}),Wi=await JSON.parse(Wi.body),ny=Wi?.clustering?.enabled,ii=ry.flattenConfig(Wi);let e=Wi?.clustering?.hubServer?.cluster?.network?.port,t=en?.componentConfig?.exclude,r={cloned:!0,clustering_nodename:xl,rootpath:vt};for(let s in ii)if(!(ii[s]!==null&&typeof ii[s]=="object"&&!(ii[s]instanceof Array)||ahe[s])){if(s.includes("_package")||s.includes("_port")){if(ii[s]?.includes?.("hdb/components"))continue;if(t){let i=!1;for(let o of t)if(s.includes(o.name)){i=!0;break}if(i)continue}}Qi[s]||(s==="clustering_hubserver_cluster_network_routes"&&$m&&e&&(Array.isArray(ii[s])||(ii[s]=[]),ii[s].push({host:$m,port:e})),r[s]=ii[s])}for(let s in Qi)s!=="databases"&&typeof Qi[s]=="object"&&!(Qi[s]instanceof Array)||(r[s]=Qi[s]);let n=JEe(Object.keys(Zr.CONFIG_PARAM_MAP),!0);if(Object.assign(r,n),ry.createConfigFile(r,!0),Ns.initSync(!0),ny&&$m&&HV){let s={host:HV,port:Ns.get(xd.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT)};console.log("Setting clustering route on leader:",s),await Qm({operation:"cluster_set_routes",server:"hub",routes:[s]})}}a(uhe,"cloneConfig");async function _he(){process.env.HDB_FETCH==="true"?(await Ehe(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await fhe()}a(_he,"cloneDatabases");async function dhe(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=vt,!Gd)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=Gd,!qd)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=qd,process.env.OPERATIONSAPI_NETWORK_PORT=Ns.get(xd.OPERATIONSAPI_NETWORK_PORT),the(kd.join(vt,Zr.HDB_CONFIG_FILE)),sy(!0),await ehe()}a(dhe,"installHDB");function oi(e){return Ns.get(Zr.CONFIG_PARAMS.DATABASES)?.[e]?.path||Ns.get(xd.STORAGE_PATH)||kd.join(vt,Zr.DATABASES_DIR_NAME)}a(oi,"getDBPath");async function fhe(){let e=oi("system"),t=Cn(e,"system.mdb");if(Gl||!await Yt.exists(t)||YV){console.info("Cloning system database"),await Km(e);let r=Ym(t,{overwrite:!0}),n={operation:Dn.GET_BACKUP,database:"system",tables:iy},s=await qV(n,r);await Yt.utimes(t,Date.now(),new Date(s.date)),Gl||(await VV(vt),await KV(),sy(!0))}else jm=!0,console.log("Not cloning system database due to it already existing on clone");ut=await Qm({operation:Dn.DESCRIBE_ALL}),ut=await JSON.parse(ut.body),wn=en?.databaseConfig?.excludeDatabases,wn=wn?wn.reduce((r,n)=>({...r,[n.database]:!0}),{}):{};for(let r in ut)await Yt.exists(kd.join(oi(r),r+".mdb"))&&(console.log(`Not cloning database ${r} due to it already existing on clone`),wn[r]=!0);ys=en?.databaseConfig?.excludeTables,ys=ys?ys.reduce((r,n)=>({...r,[n.database==null?null:n.database+n.table]:!0}),{}):{};for(let r in ut){if(wn[r]){ut[r]="excluded";continue}if(FV.isEmpty(ut[r]))continue;let n=[],s=!1;for(let u in ut[r])ys[r+u]?(s=!0,ut[r][u]="excluded"):n.push(u);if(n.length===0)return;let i;s?(console.info(`Cloning database: ${r} tables: ${n}`),i={operation:Dn.GET_BACKUP,database:r,tables:n}):(console.info(`Cloning database: ${r}`),i={operation:Dn.GET_BACKUP,database:r});let o=oi(r);await Km(o);let c=Cn(o,r+".mdb"),l=Ym(c,{overwrite:!0}),_=await qV(i,l);await Yt.utimes(c,Date.now(),new Date(_.date))}}a(fhe,"cloneTablesHttp");async function Ehe(){let e=oi("system"),t=Cn(e,"system.mdb");if(Gl||!await Yt.exists(t)||YV){console.info("Cloning system database using fetch");let r={operation:Dn.GET_BACKUP,database:"system",tables:iy},n=await km(r,!0),s=oi("system");await Km(s);let i=Cn(s,"system.mdb");await UV(n.body,Ym(i,{overwrite:!0})),await Yt.utimes(i,Date.now(),new Date(n.headers.get("date"))),Gl||(await VV(vt),await KV(),sy(!0))}else jm=!0,console.log("Not cloning system database due to it already existing on clone");ut=await km({operation:Dn.DESCRIBE_ALL}),ut=await ut.json(),wn=en?.databaseConfig?.excludeDatabases,wn=wn?wn.reduce((r,n)=>({...r,[n.database]:!0}),{}):{};for(let r in ut)await Yt.exists(kd.join(oi(r),r+".mdb"))&&(console.log(`Not cloning database ${r} due to it already existing on clone`),wn[r]=!0);ys=en?.databaseConfig?.excludeTables,ys=ys?ys.reduce((r,n)=>({...r,[n.database==null?null:n.database+n.table]:!0}),{}):{};for(let r in ut){if(wn[r]){ut[r]="excluded";continue}if(FV.isEmpty(ut[r]))continue;let n=[],s=!1;for(let u in ut[r])ys[r+u]?(s=!0,ut[r][u]="excluded"):n.push(u);if(n.length===0)return;let i;s?(console.info(`Cloning database: ${r} tables: ${n}`),i=await km({operation:Dn.GET_BACKUP,database:r,tables:n},!0)):(console.info(`Cloning database: ${r}`),i=await km({operation:Dn.GET_BACKUP,database:r},!0));let o=oi(r);await Km(o);let c=new Date(i.headers.get("date")),l=Cn(o,`${c.getTime()}-${r}.mdb`);await UV(i.body,Ym(l,{overwrite:!0}));let _=Cn(o,r+".mdb");await Yt.rename(l,_),await Yt.utimes(_,Date.now(),c)}}a(Ehe,"cloneTablesFetch");async function km(e,t=!1){let r=en?.httpsRejectUnauthorized??!1,n=new Vm.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(Gd+":"+qd).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(Fd,{method:"POST",headers:i,body:JSON.stringify(e),agent:n,compress:!0});if(o.ok)return o;throw console.error(`HTTP Error Response: ${o.status} ${o.statusText}`),new Error(await o.text())}a(km,"leaderHttpReqFetch");async function hhe(e){let t=await jEe.getHDBProcessInfo();t.clustering.length===0||t.core.length===0?e?await ZEe(!1):await $V():(console.info(await zEe({operation:Dn.RESTART})),await Wm.async_set_timeout(ihe)),e&&await Wm.async_set_timeout(2e3)}a(hhe,"startHDB");async function phe(){console.info("Clustering cloned tables");let e=en?.clusteringConfig?.subscribeToLeaderNode!==!1,t=en?.clusteringConfig?.publishToLeaderNode!==!1;await XEe.setSchemaDataToGlobalAsync();let r=c_(),n=await Qm({operation:Dn.CLUSTER_STATUS});n=await JSON.parse(n.body);let s=[];if(!jm){let l=await Yt.stat(Cn(oi("system"),"system.mdb"));for(let _ of iy)s.push({schema:she,table:_,subscribe:e,publish:t,start_time:l.mtime.toISOString()})}let i=en?.clusteringConfig?.excludeDatabases;i=i?i.reduce((l,_)=>({...l,[_.database]:!0}),{}):{};let o=en?.clusteringConfig?.excludeTables;o=o?o.reduce((l,_)=>({...l,[_.database==null?null:_.database+_.table]:!0}),{}):{};for(let l in ut){if(ut[l]==="excluded"||i[l])continue;let _=await Yt.stat(Cn(oi(l),l+".mdb"));_.mtime.setSeconds(_.mtime.getSeconds()-10);for(let u in ut[l])ut[l][u]==="excluded"||o[l+u]||s.push({schema:l,table:u,subscribe:e,publish:t,start_time:_.mtime.toISOString()})}await vV.createTableStreams(s),kV.info("Sending add_node request to node:",Wi?.clustering?.nodeName,"with subscriptions:",s);let c;if(che&&n.connections.length>0){let l=eh(),_=[{node_name:Wi?.clustering?.nodeName,subscriptions:s}],u=!1;xl=Ns.get(Zr.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let d of n.connections){if(d.node_name===xl)continue;let E={node_name:d.node_name,subscriptions:[]};for(let f of d.subscriptions){if(wn[f.schema]||ys[f.schema+f.table]||i[f.schema]||o[f.schema+f.table])continue;u=!0;let h=await Yt.stat(Cn(oi(f.schema),f.schema+".mdb"));h.mtime.setSeconds(h.mtime.getSeconds()-10),f.start_time=h.mtime.toISOString(),E.subscriptions.push(f)}_.push(E)}u&&(c=await l({operation:Dn.CONFIGURE_CLUSTER,connections:_}),console.info(JSON.stringify(c)))}!c&&s.length>0&&await r({operation:Dn.ADD_NODE,node_name:Wi?.clustering?.nodeName,subscriptions:s},!0),await vV.closeConnection()}a(phe,"clusterTables");async function Qm(e){let t=new Vm.Agent({rejectUnauthorized:en?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(Gd+":"+qd).toString("base64"),"Content-Type":"application/json"},s=new URL(Fd),i={protocol:s.protocol,host:s.hostname,method:"POST",headers:n};return s.protocol==="https:"&&(i.agent=t),s.port&&(i.port=s.port),await Wm.httpRequest(i,e)}a(Qm,"leaderHttpReq");async function qV(e,t){let r=new Vm.Agent({rejectUnauthorized:en?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(Gd+":"+qd).toString("base64"),"Content-Type":"application/json"},i=new URL(Fd),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:s};return i.protocol==="https:"&&(o.agent=r,PV=Vm),i.port&&(o.port=i.port),new Promise((c,l)=>{let _=PV.request(o,u=>{u.statusCode!==200&&l("Request to leader node failed with code: "+u.statusCode),u.pipe(t),u.on("end",()=>{t.close(),c(u.headers)})});_.on("error",u=>{l(u)}),_.write(JSON.stringify(e)),_.end()})}a(qV,"leaderHttpStream");async function KV(){let e=rhe.version();if(e)await nhe.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(KV,"insertHdbVersionInfo")});var jV=R((mwe,QV)=>{var mhe=xm(),She=k();QV.exports=The;async function The(){try{await mhe.install()}catch(e){console.error("There was an error during the install."),console.error(e),She.error(e),process.exit(1)}}a(The,"install")});var XV=R((Twe,JV)=>{"use strict";var ghe=ch(),Rhe=k(),zV="Registration failed.";async function Ahe(){let e;try{e=await ghe.register()}catch(t){return Rhe.error(`Registration error ${t}`),zV}return e||zV}a(Ahe,"register");JV.exports={register:Ahe}});var rY=R((Rwe,tY)=>{"use strict";var Ohe=k(),bhe=L(),Nhe=require("util"),yhe=require("child_process"),ZV=Nhe.promisify(yhe.exec),Ihe=gi(),$d=Yc(),eY="Stopping HarperDB.";tY.exports=whe;async function whe(){if(console.log(eY),Ohe.notify(eY),await $d.isServiceRegistered(bhe.HDB_PROC_DESCRIPTOR)){$d.enterPM2Mode();let r=await $d.getUniqueServicesList();for(let n in r)await $d.stop(n)}await $d.kill();let t=await Ihe.getHDBProcessInfo();t.clustering.forEach(r=>{ZV(`kill ${r.pid}`)}),t.core.forEach(r=>{ZV(`kill ${r.pid}`)})}a(whe,"stop")});var oY=R((Owe,iY)=>{"use strict";var cy=require("fs-extra"),ly=require("path"),ay=require("yaml"),Vd=gt(),Yd=L(),nY=Ze(),uy=k(),Che=Ur(),Dhe=sh(),Lhe=rh(),Phe=gi(),sY=X(),{isHdbInstalled:Mhe}=ic();sY.initSync();var Xn={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},tn={LEAF:"leaf server",HUB:"hub server"},zm;iY.exports=Uhe;async function Uhe(){let e={harperdb:{status:Xn.STOPPED}};if(!await Mhe()){e.harperdb.status=Xn.NOT_INSTALLED,console.log(ay.stringify(e));return}zm=sY.get(Yd.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await cy.readFile(ly.join(zm,Yd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Yd.NODE_ERROR_CODES.ENOENT){uy.info("`harperdb status` did not find a hdb.pid file"),e.harperdb.status=Xn.STOPPED,console.log(ay.stringify(e));return}throw n}let r=await Phe.getHDBProcessInfo();for(let n of r.core)if(n.pid===t){e.harperdb.status=Xn.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await vhe(r),e.clustering[tn.HUB].status===Xn.RUNNING&&e.clustering[tn.LEAF].status===Xn.RUNNING){let n=[],s=await Dhe({});for(let o of s.nodes){let c={};for(let l in o)c[l.replace("_"," ")]=o[l];n.push(c)}e.clustering.network=n;let i=await Lhe.clusterStatus();e.clustering.replication={"node name":i.node_name,"is enabled":i.is_enabled,connections:[]};for(let o of i.connections){let c={};c["node name"]=o?.node_name,c.status=o?.status,c.ports={clustering:o?.ports?.clustering,"operations api":o?.ports?.operations_api},c["latency ms"]=o?.latency_ms,c.uptime=o?.uptime,c.subscriptions=o?.subscriptions,c["system info"]={"hdb version":o?.system_info?.hdb_version,"node version":o?.system_info?.node_version,platform:o?.system_info?.platform},e.clustering.replication.connections.push(c)}await Vd.closeConnection()}console.log(ay.stringify(e)),process.exit()}a(Uhe,"status");async function vhe(e){let t={[tn.HUB]:{},[tn.LEAF]:{}};if(e.clustering.length===0)return t[tn.HUB].status=Xn.STOPPED,t[tn.LEAF].status=Xn.STOPPED,t;let{port:r}=Vd.getServerConfig(Yd.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:n,decrypt_hash:s}=await Che.getClusterUser();try{(await Vd.createConnection(r,n,s,!1)).close(),t[tn.HUB].status=Xn.RUNNING}catch{t[tn.HUB].status=Xn.ERRORED}let{port:i}=Vd.getServerConfig(Yd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await Vd.createConnection(i,n,s,!1)).close(),t[tn.LEAF].status=Xn.RUNNING}catch{t[tn.LEAF].status=Xn.ERRORED}try{t[tn.HUB].pid=Number.parseInt(await cy.readFile(ly.join(zm,"clustering",nY.PID_FILES.HUB),"utf8"))}catch(o){uy.error(o),t[tn.HUB].pid=void 0}try{t[tn.LEAF].pid=Number.parseInt(await cy.readFile(ly.join(zm,"clustering",nY.PID_FILES.LEAF),"utf8"))}catch(o){uy.error(o),t[tn.LEAF].pid=void 0}return t}a(vhe,"getHubLeafStatus")});var Jm=process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL");Jm&&X().setCloneVar(!0);var Kd=require("fs"),aY=require("path"),oc=k(),cY=i$(),Bhe=Ri(),Hhe=c$(),_y=L(),{SERVICE_ACTIONS_ENUM:br,PACKAGE_ROOT:xhe}=_y;Ghe();function Ghe(){let e=Hhe();if(e)if(e.error){console.error(e.error),oc.error(e.error);return}else e.warn&&(console.warn(e.warn),oc.warn(e.warn));let t;Kd.readdir(aY.join(xhe,"bin"),r=>{if(r)return oc.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let n;Jm||(n=cY.buildRequest(),n.operation&&(t=br.OPERATION));let s;switch(t){case br.OPERATION:oc.trace("calling cli operations with:",n),cY.cliOperations(n).then();break;case br.DEV:process.env.DEV_MODE=!0;case br.RUN:let i=process.argv[3];i&&i[0]!=="-"&&(Kd.existsSync(i)||(console.error(`The folder ${i} does not exist`),process.exit(1)),Kd.statSync(i).isDirectory()||(console.error(`The path ${i} is not a folder`),process.exit(1)),i=Kd.realpathSync(i),Kd.existsSync(aY.join(i,_y.HDB_CONFIG_FILE))?process.env.ROOTPATH=i:process.env.RUN_HDB_APP=i),ic().main();break;case br.START:Jm?oy()(!0).catch(S=>{console.log(S)}):s=ic().launch();break;case br.INSTALL:jV()().then(()=>ic().main(!0)).catch(m=>{console.error(m)});break;case br.REGISTER:XV().register().then(m=>{console.log(m)}).catch(m=>{console.error(m)});break;case br.STOP:rY()().then(()=>{process.exit(0)}).catch(m=>{console.error(m)});break;case br.RESTART:bo().restart({}).then().catch(m=>{oc.error(m),console.error(`There was an error restarting HarperDB. ${m}`),process.exit(1)});break;case br.VERSION:Bhe.printVersion();break;case br.UPGRADE:oc.setLogLevel(_y.LOG_LEVELS.INFO),XN().upgrade(null).then(()=>{console.log("Your instance of HarperDB is up to date!")}).catch(m=>{oc.error(`Got an error during upgrade ${m}`)});break;case br.STATUS:oY()().then().catch(m=>{console.error(m)});break;case br.RENEWCERTS:let{generateKeys:E}=Pm();E().then(()=>{console.log("Successfully renewed self-signed certificates")}).catch(()=>{console.error(r)});break;case br.COPYDB:let f=process.argv[3],h=process.argv[4];(Rh(),ae(gh)).copyDb(f,h);break;case void 0:Jm?oy()().catch(S=>{console.log(S)}):ic().main();break;default:console.warn(`The "${t}" command is not understood.`);case br.HELP:console.log(`
110
110
  Usage: harperdb [command]
111
111
 
112
112
  With no command, harperdb will simply run HarperDB (in the foreground)