harperdb 4.3.44 → 4.3.46

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,23 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var hY=Object.create;var Vl=Object.defineProperty;var pY=Object.getOwnPropertyDescriptor;var mY=Object.getOwnPropertyNames;var SY=Object.getPrototypeOf,TY=Object.prototype.hasOwnProperty;var a=(e,t)=>Vl(e,"name",{value:t,configurable:!0});var be=(e,t)=>()=>(e&&(t=e(e=0)),t);var g=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),$e=(e,t)=>{for(var r in t)Vl(e,r,{get:t[r],enumerable:!0})},Sy=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of mY(t))!TY.call(e,s)&&s!==r&&Vl(e,s,{get:()=>t[s],enumerable:!(n=pY(t,s))||n.enumerable});return e};var x=(e,t,r)=>(r=e!=null?hY(SY(e)):{},Sy(t||!e||!e.__esModule?Vl(r,"default",{value:e,enumerable:!0}):r,e)),ae=e=>Sy(Vl({},"__esModule",{value:!0}),e);var Ry=g((Vhe,gy)=>{var gY=require("fast-glob"),{statSync:oS,existsSync:aS,readFileSync:RY,writeFileSync:AY}=require("fs"),{spawnSync:OY,spawn:bY,execFileSync:$he}=require("child_process"),{isMainThread:NY}=require("worker_threads"),{join:eo,relative:Ty}=require("path"),{PACKAGE_ROOT:es}=L(),{tmpdir:yY,platform:IY}=require("os");require("source-map-support").install();var wY=["resources","server","dataLayer","components"],Yl="ts-build",cS,CY=__filename.endsWith("tsBuild.js");if(CY){if(NY){let r;try{oS(eo(es,Yl)),r=!0}catch{}if(r)for(let n of gY.sync(wY.map(s=>s+"/**/*.ts"),{cwd:es})){let s=0,i=0;try{s=oS(eo(es,n)).mtimeMs-5e3,i=oS(eo(es,Yl,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."),cS=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),cS=!0;if(cS){let n=eo(es,"node_modules/.bin/tsc");IY()==="win32"&&(n+=".cmd");let s=OY(n,{cwd:es});if(s.stdout?.length&&console.log(s.stdout.toString()),s.stderr?.length&&console.log(s.stderr.toString()),r){let i=eo(yY(),"harperdb-tsc.pid"),o;if(aS(i))try{process.kill(+RY(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=bY(n,["--watch"],{cwd:es,detached:!0,stdio:"ignore"});AY(i,c.pid.toString()),c.unref()}}}}let e=gy.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=Ty(es,n[0]),o;i.startsWith(Yl)?o=eo(es,Ty(Yl,i)):o=eo(es,Yl,i);let c=eo(o,r),l=c+".js";if(aS(l))return l;if(c.includes(".")&&aS(c))return c}return t(r,n,s)}}});var L=g((Whe,vy)=>{"use strict";var Pn=require("path"),DY=require("fs"),{relative:Yhe,join:Khe}=Pn,{existsSync:LY}=DY;function PY(){let e=__dirname;for(;!LY(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(PY,"getHDBPackageRoot");var to=PY(),Ay="js",Zd=Ay,MY="harperdb-config.yaml",UY="defaultConfig.yaml",vY="hdb",Oy=`harperdb.${Zd}`,by=`customFunctionsServer.${Zd}`,BY=`restartHdb.${Zd}`,uS="HarperDB",Xd="Custom Functions",ef="Clustering Hub",tf="Clustering Leaf",HY="Clustering Ingest Service",xY="Clustering Reply Service",GY="foreground.pid",qY="hdb.pid",FY="data",kY={HDB:uS,CLUSTERING_HUB:ef,CLUSTERING_LEAF:tf,CLUSTERING_INGEST_SERVICE:HY,CLUSTERING_REPLY_SERVICE:xY,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"},$Y={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},VY={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},YY={harperdb:uS,"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"},KY={CLUSTERING_HUB_PROC_DESCRIPTOR:ef,CLUSTERING_LEAF_PROC_DESCRIPTOR:tf},lS={HDB:Pn.join(to,"server/harperdb"),CUSTOM_FUNCTIONS:Pn.join(to,"server/customFunctions"),CLUSTERING_HUB:Pn.join(to,"server/nats"),CLUSTERING_LEAF:Pn.join(to,"server/nats")},WY={HDB:Pn.join(lS.HDB,Oy),CUSTOM_FUNCTIONS:Pn.join(lS.CUSTOM_FUNCTIONS,by)},QY={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Pn.join(to,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Pn.join(to,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Pn.join(to,"launchServiceScripts/launchUpdateNodes4-0-0.js")},jY={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Ny="support@harperdb.io",zY="customer-success@harperdb.io",yy=1,JY=4141,Iy="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",XY="https://www.harperdb.io/product",ZY=`For support, please submit a request at ${Iy} or contact ${Ny}`,wy=`For license support, please contact ${zY}`,e1="None of the specified records were found.",t1="hash attribute not found",r1=`Your current license only supports ${yy} role. ${wy}`,n1="Your current license only supports 3 connections to a node.",s1="127.0.0.1",i1=1,o1=/^\.$/,a1=/^\.\.$/,c1="U+002E",l1=/\//g,u1="U+002F",_1=/U\+002F/g,d1=/^U\+002E$/,f1=/^U\+002EU\+002E$/,E1="d",h1=999999,p1="*",m1="--max-old-space-size=",S1="system",T1="__hdb_hash",g1=".harperdb",R1=".hdb",A1="keys",O1="hdb_boot_properties.file",b1=".updateConfig.json",N1="SIGTSTP",y1=24,I1=6e4,w1=448,C1="blob",D1="trash",L1="database",P1="schema",M1="transactions",U1=".count",v1="id",B1="PROCESS_NAME",Cy={SETTINGS_PATH_KEY:"settings_path"},Dy=require("lodash"),H1={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",OPERATIONSAPI_NETWORK_SECUREPORT:"OPERATIONSAPI_NETWORK_SECUREPORT",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},x1={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},G1={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},q1={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"},F1={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:",k1={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"},$1={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"},V1="060493.ks",Y1=".license",K1={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"},W1={CSV:".csv",JSON:".json"},Q1={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},j1={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Kl={};Kl[te.INSERT]=te.INSERT;Kl[te.UPDATE]=te.UPDATE;Kl[te.UPSERT]=te.UPSERT;Kl[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 z1={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"},J1={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Ly={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"},X1=Dy.invert(Ly),Z1={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",THREADS_HEAPSNAPSHOTNEARLIMIT:"threads_heapSnapshotNearLimit",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",STORAGE_SKIPCOMPACTTABLES:"storage_skipCompactTables",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"},Py={settings_path:Cy.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];Py[t.toLowerCase()]=t}var eK={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},tK={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"},rK={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"},nK={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},sK={VERSION_DEFAULT:"2.2.0"},iK={DEVELOPMENT:8192,DEFAULT:512},oK={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"},aK={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"},cK={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},My={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},lK=Symbol("metadata"),uK="__clustering__",_K=Object.values(My),dK=15984864e5,Uy={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},fK=Dy.invert(Uy),EK={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"},hK=111,pK=`\r
3
- `,mK={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},SK=["*","%"],TK="unauthorized_access",gK="func_val",RK={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},AK={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},OK={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update"},bK={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},NK={HTTP:"http"},yK={STOPPED:"stopped",ONLINE:"online"},IK="3.x.x",wK={SUCCESS:"success",FAILURE:"failure"},CK={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};vy.exports={LOCAL_HARPERDB_OPERATIONS:Fe,HDB_SUPPORT_ADDRESS:Ny,HDB_SUPPORT_URL:Iy,HDB_PRICING_URL:XY,SUPPORT_HELP_MSG:ZY,LICENSE_HELP_MSG:wy,HDB_PROC_NAME:Oy,HDB_PROC_DESCRIPTOR:uS,CLUSTERING_LEAF_PROC_DESCRIPTOR:tf,CLUSTERING_HUB_PROC_DESCRIPTOR:ef,SYSTEM_SCHEMA_NAME:S1,HASH_FOLDER_NAME:T1,HDB_HOME_DIR_NAME:g1,UPDATE_FILE_NAME:b1,LICENSE_KEY_DIR_NAME:A1,BOOT_PROPS_FILE_NAME:O1,JOB_TYPE_ENUM:tK,JOB_STATUS_ENUM:K1,SYSTEM_TABLE_NAMES:q1,SYSTEM_TABLE_HASH_ATTRIBUTES:F1,OPERATIONS_ENUM:te,VALID_S3_FILE_TYPES:W1,S3_BUCKET_AUTH_KEYS:Q1,VALID_SQL_OPS_ENUM:j1,GEO_CONVERSION_ENUM:J1,HDB_SETTINGS_NAMES:Ly,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:X1,SERVICE_ACTIONS_ENUM:z1,CLUSTER_MESSAGE_TYPE_ENUM:rK,CLUSTER_CONNECTION_DIRECTION_ENUM:nK,CLUSTER_EVENTS_DEFS_ENUM:oK,PERIOD_REGEX:o1,DOUBLE_PERIOD_REGEX:a1,UNICODE_PERIOD:c1,FORWARD_SLASH_REGEX:l1,UNICODE_FORWARD_SLASH:u1,ESCAPED_FORWARD_SLASH_REGEX:_1,ESCAPED_PERIOD_REGEX:d1,ESCAPED_DOUBLE_PERIOD_REGEX:f1,REG_KEY_FILE_NAME:V1,RESTART_TIMEOUT_MS:I1,HDB_FILE_PERMISSIONS:w1,DATABASES_DIR_NAME:L1,LEGACY_DATABASES_DIR_NAME:P1,TRANSACTIONS_DIR_NAME:M1,LIMIT_COUNT_NAME:U1,ID_ATTRIBUTE_STRING:v1,INSERT_MODULE_ENUM:x1,UPGRADE_JSON_FIELD_NAMES_ENUM:G1,RESTART_CODE:N1,RESTART_CODE_NUM:y1,CLUSTER_OPERATIONS:Kl,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:$1,HDB_INTERNAL_SC_CHANNEL_PREFIX:rn,INTERNAL_SC_CHANNELS:k1,CLUSTERING_MESSAGE_TYPES:EK,HDB_FILE_SUFFIX:R1,BLOB_FOLDER_NAME:C1,HDB_TRASH_DIR:D1,ORIGINATOR_SET_VALUE:hK,LICENSE_VALUES:sK,RAM_ALLOCATION_ENUM:iK,TIME_STAMP_NAMES_ENUM:My,TIME_STAMP_NAMES:_K,PERMS_UPDATE_RELEASE_TIMESTAMP:dK,SEARCH_NOT_FOUND_MESSAGE:e1,SEARCH_ATTRIBUTE_NOT_FOUND:t1,LICENSE_ROLE_DENIED_RESPONSE:r1,LICENSE_MAX_CONNS_REACHED:n1,BASIC_LICENSE_MAX_NON_CU_ROLES:yy,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:JY,VALUE_SEARCH_COMPARATORS:Uy,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:fK,LICENSE_FILE_NAME:Y1,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:aK,NEW_LINE:pK,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:i1,MOMENT_DAYS_TAG:E1,API_TURNOVER_SEC:h1,LOOPBACK:s1,CODE_EXTENSION:Zd,WILDCARD_SEARCH_VALUE:p1,NODE_ERROR_CODES:cK,JAVASCRIPT_EXTENSION:Ay,PERMS_CRUD_ENUM:mK,UNAUTHORIZED_PERMISSION_NAME:TK,SEARCH_WILDCARDS:SK,FUNC_VAL:gK,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:RK,JWT_ENUM:AK,CLUSTERING_FLAG:uK,ITC_EVENT_TYPES:OK,CUSTOM_FUNCTION_PROC_NAME:by,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Xd,SERVICES:bK,THREAD_TYPES:NK,MEM_SETTING_KEY:m1,HDB_RESTART_SCRIPT:BY,PROCESS_DESCRIPTORS:kY,SERVICE_SERVERS:WY,SERVICE_SERVERS_CWD:lS,PROCESS_DESCRIPTORS_VALIDATE:YY,LAUNCH_SERVICE_SCRIPTS:QY,LOG_LEVELS:VY,PROCESS_NAME_ENV_PROP:B1,LOG_NAMES:$Y,PM2_PROCESS_STATUSES:yK,CONFIG_PARAM_MAP:Py,CONFIG_PARAMS:w,HDB_CONFIG_FILE:MY,HDB_DEFAULT_CONFIG_FILE:UY,ROLE_TYPES_ENUM:jY,BOOT_PROP_PARAMS:Cy,INSTALL_PROMPTS:H1,HDB_ROOT_DIR_NAME:vY,CLUSTERING_PROCESSES:KY,FOREGROUND_PID_FILE:GY,PACKAGE_ROOT:to,PRE_4_0_0_VERSION:IK,DATABASES_PARAM_CONFIG:eK,METADATA_PROPERTY:lK,AUTH_AUDIT_STATUS:wK,AUTH_AUDIT_TYPES:CK,HDB_PID_FILE:qY,DEFAULT_DATABASE_NAME:FY,LEGACY_CONFIG_PARAMS:Z1};Ry()});var ro=g((jhe,xy)=>{"use strict";var By=require("minimist");xy.exports=DK;function DK(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=Hy(process.env),n=Hy(By(process.argv))):(r=process.env,n=By(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(DK,"assignCMDENVVariables");function Hy(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(Hy,"objKeysToLowerCase")});var k=g((Jhe,mS)=>{"use strict";var jo=require("fs-extra"),{workerData:LK,threadId:PK}=require("worker_threads"),ci=require("path"),Fy=require("yaml"),ky=require("properties-reader"),Nt=L(),Gy=ro(),MK=require("os"),{PACKAGE_ROOT:dS}=L(),{_assignPackageExport:UK}=require("../index"),Ql={};for(let e in console)Ql[e]||(Ql[e]=console[e]);var yr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},$y={STDOUT:"stdOut",STDERR:"stdErr"},vK=ci.join(dS,"logs"),BK=ci.join(dS,"config/yaml/",Nt.HDB_DEFAULT_CONFIG_FILE),HK=1e4,ai,Cs,Nr,rf,nf,jl,uc,Wl;Wl===void 0&&Vy();mS.exports={notify:Wy,fatal:Qy,error:zl,warn:pS,info:sf,debug:hS,trace:ES,setLogLevel:VK,log_level:Nr,loggerWithTag:xK,suppressLogging:GK,initLogSettings:Vy,setupConsoleLogging:Yy,logCustomLevel:kK,closeLogFile:fS,getLogFilePath:()=>jl,OUTPUTS:$y,AuthAuditLog:WK};UK("logger",mS.exports);function Vy(e=!1){try{if(Wl===void 0||e){fS();let t=$K(),r=Gy(["ROOTPATH"]);try{Wl=ky(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!jo.pathExistsSync(ci.join(r.ROOTPATH,Nt.HDB_CONFIG_FILE)))throw n}({level:Nr,config_log_path:nf,to_file:ai,to_stream:Cs}=YK(r.ROOTPATH?ci.join(r.ROOTPATH,Nt.HDB_CONFIG_FILE):Wl.get("settings_path"))),rf=Nt.LOG_NAMES.HDB,jl=ci.join(nf,rf)}}catch(t){if(Wl=void 0,t.code===Nt.NODE_ERROR_CODES.ENOENT||t.code===Nt.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=Gy(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}=KK();ai=ai===void 0?s:ai,ai=qy(ai),Cs=Cs===void 0?i:Cs,Cs=qy(Cs),Nr=Nr===void 0?n:Nr,nf=vK,rf=Nt.LOG_NAMES.INSTALL,jl=ci.join(nf,rf);return}throw zl("Error initializing log settings"),zl(t),t}process.env.DEV_MODE&&(Cs=!0),Yy()}a(Vy,"initLogSettings");var _S=!0;function Yy(){lc("error",zl),lc("warn",pS),lc("log",sf),lc("info",sf),lc("debug",hS),lc("trace",ES)}a(Yy,"setupConsoleLogging");function lc(e,t){console[e]=function(...r){if(_S&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Ql[e](...r)}}a(lc,"logConsole");function xK(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Wy),fatal:r(Qy),error:r(zl),warn:r(pS),info:r(sf),debug:r(hS),trace:r(ES)};function r(n){return function(...s){return n(t,...s)}}}a(xK,"loggerWithTag");function GK(e){try{_S=!1,e()}finally{_S=!0}}a(GK,"suppressLogging");var qK=LK?.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||qK+"/"+PK);c<s;c++){let _=t[c];if(_ instanceof Error&&_.stack)n+=_.stack,Object.keys(_).length>0&&(n+=`
2
+ "use strict";var f1=Object.create;var $l=Object.defineProperty;var E1=Object.getOwnPropertyDescriptor;var h1=Object.getOwnPropertyNames;var p1=Object.getPrototypeOf,m1=Object.prototype.hasOwnProperty;var a=(e,t)=>$l(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),Ve=(e,t)=>{for(var r in t)$l(e,r,{get:t[r],enumerable:!0})},Sy=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of h1(t))!m1.call(e,s)&&s!==r&&$l(e,s,{get:()=>t[s],enumerable:!(n=E1(t,s))||n.enumerable});return e};var x=(e,t,r)=>(r=e!=null?f1(p1(e)):{},Sy(t||!e||!e.__esModule?$l(r,"default",{value:e,enumerable:!0}):r,e)),ae=e=>Sy($l({},"__esModule",{value:!0}),e);var Ry=R((khe,gy)=>{var S1=require("fast-glob"),{statSync:oS,existsSync:aS,readFileSync:T1,writeFileSync:g1}=require("fs"),{spawnSync:R1,spawn:A1,execFileSync:Fhe}=require("child_process"),{isMainThread:O1}=require("worker_threads"),{join:Zi,relative:Ty}=require("path"),{PACKAGE_ROOT:es}=D(),{tmpdir:b1,platform:N1}=require("os");require("source-map-support").install();var y1=["resources","server","dataLayer","components"],Yl="ts-build",cS,I1=__filename.endsWith("tsBuild.js");if(I1){if(O1){let r;try{oS(Zi(es,Yl)),r=!0}catch{}if(r)for(let n of S1.sync(y1.map(s=>s+"/**/*.ts"),{cwd:es})){let s=0,i=0;try{s=oS(Zi(es,n)).mtimeMs-5e3,i=oS(Zi(es,Yl,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."),cS=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),cS=!0;if(cS){let n=Zi(es,"node_modules/.bin/tsc");N1()==="win32"&&(n+=".cmd");let s=R1(n,{cwd:es});if(s.stdout?.length&&console.log(s.stdout.toString()),s.stderr?.length&&console.log(s.stderr.toString()),r){let i=Zi(b1(),"harperdb-tsc.pid"),o;if(aS(i))try{process.kill(+T1(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=A1(n,["--watch"],{cwd:es,detached:!0,stdio:"ignore"});g1(i,c.pid.toString()),c.unref()}}}}let e=gy.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=Ty(es,n[0]),o;i.startsWith(Yl)?o=Zi(es,Ty(Yl,i)):o=Zi(es,Yl,i);let c=Zi(o,r),l=c+".js";if(aS(l))return l;if(c.includes(".")&&aS(c))return c}return t(r,n,s)}}});var D=R((Yhe,vy)=>{"use strict";var Pn=require("path"),w1=require("fs"),{relative:Vhe,join:$he}=Pn,{existsSync:C1}=w1;function L1(){let e=__dirname;for(;!C1(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(L1,"getHDBPackageRoot");var eo=L1(),Ay="js",Zd=Ay,D1="harperdb-config.yaml",P1="defaultConfig.yaml",M1="hdb",Oy=`harperdb.${Zd}`,by=`customFunctionsServer.${Zd}`,U1=`restartHdb.${Zd}`,uS="HarperDB",Xd="Custom Functions",ef="Clustering Hub",tf="Clustering Leaf",v1="Clustering Ingest Service",B1="Clustering Reply Service",H1="foreground.pid",x1="hdb.pid",G1="data",q1={HDB:uS,CLUSTERING_HUB:ef,CLUSTERING_LEAF:tf,CLUSTERING_INGEST_SERVICE:v1,CLUSTERING_REPLY_SERVICE:B1,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"},F1={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},k1={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},V1={harperdb:uS,"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"},$1={CLUSTERING_HUB_PROC_DESCRIPTOR:ef,CLUSTERING_LEAF_PROC_DESCRIPTOR:tf},lS={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")},Y1={HDB:Pn.join(lS.HDB,Oy),CUSTOM_FUNCTIONS:Pn.join(lS.CUSTOM_FUNCTIONS,by)},K1={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")},W1={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Ny="support@harperdb.io",Q1="customer-success@harperdb.io",yy=1,j1=4141,Iy="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",z1="https://www.harperdb.io/product",J1=`For support, please submit a request at ${Iy} or contact ${Ny}`,wy=`For license support, please contact ${Q1}`,X1="None of the specified records were found.",Z1="hash attribute not found",eY=`Your current license only supports ${yy} role. ${wy}`,tY="Your current license only supports 3 connections to a node.",rY="127.0.0.1",nY=1,sY=/^\.$/,iY=/^\.\.$/,oY="U+002E",aY=/\//g,cY="U+002F",lY=/U\+002F/g,uY=/^U\+002E$/,_Y=/^U\+002EU\+002E$/,dY="d",fY=999999,EY="*",hY="--max-old-space-size=",pY="system",mY="__hdb_hash",SY=".harperdb",TY=".hdb",gY="keys",RY="hdb_boot_properties.file",AY=".updateConfig.json",OY="SIGTSTP",bY=24,NY=6e4,yY=448,IY="blob",wY="trash",CY="database",LY="schema",DY="transactions",PY=".count",MY="id",UY="PROCESS_NAME",Cy={SETTINGS_PATH_KEY:"settings_path"},Ly=require("lodash"),vY={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"},BY={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},HY={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},xY={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"},GY={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:",qY={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"},FY={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"},kY="060493.ks",VY=".license",$Y={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"},YY={CSV:".csv",JSON:".json"},KY={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},WY={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Kl={};Kl[te.INSERT]=te.INSERT;Kl[te.UPDATE]=te.UPDATE;Kl[te.UPSERT]=te.UPSERT;Kl[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 QY={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"},jY={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Dy={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"},zY=Ly.invert(Dy),JY={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",THREADS_HEAPSNAPSHOTNEARLIMIT:"threads_heapSnapshotNearLimit",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",STORAGE_SKIPCOMPACTTABLES:"storage_skipCompactTables",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"},Py={settings_path:Cy.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];Py[t.toLowerCase()]=t}var XY={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},ZY={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"},eK={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"},tK={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},rK={VERSION_DEFAULT:"2.2.0"},nK={DEVELOPMENT:8192,DEFAULT:512},sK={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"},iK={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"},oK={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},My={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},aK=Symbol("metadata"),cK="__clustering__",lK=Object.values(My),uK=15984864e5,Uy={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},_K=Ly.invert(Uy),dK={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"},fK=111,EK=`\r
3
+ `,hK={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},pK=["*","%"],mK="unauthorized_access",SK="func_val",TK={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},gK={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},RK={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update"},AK={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},OK={HTTP:"http"},bK={STOPPED:"stopped",ONLINE:"online"},NK="3.x.x",yK={SUCCESS:"success",FAILURE:"failure"},IK={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};vy.exports={LOCAL_HARPERDB_OPERATIONS:Fe,HDB_SUPPORT_ADDRESS:Ny,HDB_SUPPORT_URL:Iy,HDB_PRICING_URL:z1,SUPPORT_HELP_MSG:J1,LICENSE_HELP_MSG:wy,HDB_PROC_NAME:Oy,HDB_PROC_DESCRIPTOR:uS,CLUSTERING_LEAF_PROC_DESCRIPTOR:tf,CLUSTERING_HUB_PROC_DESCRIPTOR:ef,SYSTEM_SCHEMA_NAME:pY,HASH_FOLDER_NAME:mY,HDB_HOME_DIR_NAME:SY,UPDATE_FILE_NAME:AY,LICENSE_KEY_DIR_NAME:gY,BOOT_PROPS_FILE_NAME:RY,JOB_TYPE_ENUM:ZY,JOB_STATUS_ENUM:$Y,SYSTEM_TABLE_NAMES:xY,SYSTEM_TABLE_HASH_ATTRIBUTES:GY,OPERATIONS_ENUM:te,VALID_S3_FILE_TYPES:YY,S3_BUCKET_AUTH_KEYS:KY,VALID_SQL_OPS_ENUM:WY,GEO_CONVERSION_ENUM:jY,HDB_SETTINGS_NAMES:Dy,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:zY,SERVICE_ACTIONS_ENUM:QY,CLUSTER_MESSAGE_TYPE_ENUM:eK,CLUSTER_CONNECTION_DIRECTION_ENUM:tK,CLUSTER_EVENTS_DEFS_ENUM:sK,PERIOD_REGEX:sY,DOUBLE_PERIOD_REGEX:iY,UNICODE_PERIOD:oY,FORWARD_SLASH_REGEX:aY,UNICODE_FORWARD_SLASH:cY,ESCAPED_FORWARD_SLASH_REGEX:lY,ESCAPED_PERIOD_REGEX:uY,ESCAPED_DOUBLE_PERIOD_REGEX:_Y,REG_KEY_FILE_NAME:kY,RESTART_TIMEOUT_MS:NY,HDB_FILE_PERMISSIONS:yY,DATABASES_DIR_NAME:CY,LEGACY_DATABASES_DIR_NAME:LY,TRANSACTIONS_DIR_NAME:DY,LIMIT_COUNT_NAME:PY,ID_ATTRIBUTE_STRING:MY,INSERT_MODULE_ENUM:BY,UPGRADE_JSON_FIELD_NAMES_ENUM:HY,RESTART_CODE:OY,RESTART_CODE_NUM:bY,CLUSTER_OPERATIONS:Kl,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:FY,HDB_INTERNAL_SC_CHANNEL_PREFIX:rn,INTERNAL_SC_CHANNELS:qY,CLUSTERING_MESSAGE_TYPES:dK,HDB_FILE_SUFFIX:TY,BLOB_FOLDER_NAME:IY,HDB_TRASH_DIR:wY,ORIGINATOR_SET_VALUE:fK,LICENSE_VALUES:rK,RAM_ALLOCATION_ENUM:nK,TIME_STAMP_NAMES_ENUM:My,TIME_STAMP_NAMES:lK,PERMS_UPDATE_RELEASE_TIMESTAMP:uK,SEARCH_NOT_FOUND_MESSAGE:X1,SEARCH_ATTRIBUTE_NOT_FOUND:Z1,LICENSE_ROLE_DENIED_RESPONSE:eY,LICENSE_MAX_CONNS_REACHED:tY,BASIC_LICENSE_MAX_NON_CU_ROLES:yy,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:j1,VALUE_SEARCH_COMPARATORS:Uy,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:_K,LICENSE_FILE_NAME:VY,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:iK,NEW_LINE:EK,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:nY,MOMENT_DAYS_TAG:dY,API_TURNOVER_SEC:fY,LOOPBACK:rY,CODE_EXTENSION:Zd,WILDCARD_SEARCH_VALUE:EY,NODE_ERROR_CODES:oK,JAVASCRIPT_EXTENSION:Ay,PERMS_CRUD_ENUM:hK,UNAUTHORIZED_PERMISSION_NAME:mK,SEARCH_WILDCARDS:pK,FUNC_VAL:SK,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:TK,JWT_ENUM:gK,CLUSTERING_FLAG:cK,ITC_EVENT_TYPES:RK,CUSTOM_FUNCTION_PROC_NAME:by,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Xd,SERVICES:AK,THREAD_TYPES:OK,MEM_SETTING_KEY:hY,HDB_RESTART_SCRIPT:U1,PROCESS_DESCRIPTORS:q1,SERVICE_SERVERS:Y1,SERVICE_SERVERS_CWD:lS,PROCESS_DESCRIPTORS_VALIDATE:V1,LAUNCH_SERVICE_SCRIPTS:K1,LOG_LEVELS:k1,PROCESS_NAME_ENV_PROP:UY,LOG_NAMES:F1,PM2_PROCESS_STATUSES:bK,CONFIG_PARAM_MAP:Py,CONFIG_PARAMS:w,HDB_CONFIG_FILE:D1,HDB_DEFAULT_CONFIG_FILE:P1,ROLE_TYPES_ENUM:W1,BOOT_PROP_PARAMS:Cy,INSTALL_PROMPTS:vY,HDB_ROOT_DIR_NAME:M1,CLUSTERING_PROCESSES:$1,FOREGROUND_PID_FILE:H1,PACKAGE_ROOT:eo,PRE_4_0_0_VERSION:NK,DATABASES_PARAM_CONFIG:XY,METADATA_PROPERTY:aK,AUTH_AUDIT_STATUS:yK,AUTH_AUDIT_TYPES:IK,HDB_PID_FILE:x1,DEFAULT_DATABASE_NAME:G1,LEGACY_CONFIG_PARAMS:JY};Ry()});var to=R((Whe,xy)=>{"use strict";var By=require("minimist");xy.exports=wK;function wK(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=Hy(process.env),n=Hy(By(process.argv))):(r=process.env,n=By(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(wK,"assignCMDENVVariables");function Hy(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(Hy,"objKeysToLowerCase")});var k=R((jhe,mS)=>{"use strict";var Qo=require("fs-extra"),{workerData:CK,threadId:LK}=require("worker_threads"),ci=require("path"),Fy=require("yaml"),ky=require("properties-reader"),Nt=D(),Gy=to(),DK=require("os"),{PACKAGE_ROOT:dS}=D(),{_assignPackageExport:PK}=require("../index"),Ql={};for(let e in console)Ql[e]||(Ql[e]=console[e]);var yr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Vy={STDOUT:"stdOut",STDERR:"stdErr"},MK=ci.join(dS,"logs"),UK=ci.join(dS,"config/yaml/",Nt.HDB_DEFAULT_CONFIG_FILE),vK=1e4,ai,Cs,Nr,rf,nf,jl,lc,Wl;Wl===void 0&&$y();mS.exports={notify:Wy,fatal:Qy,error:zl,warn:pS,info:sf,debug:hS,trace:ES,setLogLevel:kK,log_level:Nr,loggerWithTag:BK,suppressLogging:HK,initLogSettings:$y,setupConsoleLogging:Yy,logCustomLevel:qK,closeLogFile:fS,getLogFilePath:()=>jl,OUTPUTS:Vy,AuthAuditLog:YK};PK("logger",mS.exports);function $y(e=!1){try{if(Wl===void 0||e){fS();let t=FK(),r=Gy(["ROOTPATH"]);try{Wl=ky(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):Wl.get("settings_path"))),rf=Nt.LOG_NAMES.HDB,jl=ci.join(nf,rf)}}catch(t){if(Wl=void 0,t.code===Nt.NODE_ERROR_CODES.ENOENT||t.code===Nt.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=Gy(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}=$K();ai=ai===void 0?s:ai,ai=qy(ai),Cs=Cs===void 0?i:Cs,Cs=qy(Cs),Nr=Nr===void 0?n:Nr,nf=MK,rf=Nt.LOG_NAMES.INSTALL,jl=ci.join(nf,rf);return}throw zl("Error initializing log settings"),zl(t),t}process.env.DEV_MODE&&(Cs=!0),Yy()}a($y,"initLogSettings");var _S=!0;function Yy(){cc("error",zl),cc("warn",pS),cc("log",sf),cc("info",sf),cc("debug",hS),cc("trace",ES)}a(Yy,"setupConsoleLogging");function cc(e,t){console[e]=function(...r){if(_S&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Ql[e](...r)}}a(cc,"logConsole");function BK(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Wy),fatal:r(Qy),error:r(zl),warn:r(pS),info:r(sf),debug:r(hS),trace:r(ES)};function r(n){return function(...s){return n(t,...s)}}}a(BK,"loggerWithTag");function HK(e){try{_S=!1,e()}finally{_S=!0}}a(HK,"suppressLogging");var xK=CK?.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||xK+"/"+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 Jl(e){ai&&Ky(e),Cs&&process.stdout.write(e)}a(Jl,"logStdOut");function of(e){ai&&Ky(e),Cs&&process.stderr.write(e)}a(of,"logStdErr");function Ky(e){FK(),uc?jo.appendFileSync(uc,e):Ql.log(e)}a(Ky,"logToFile");function fS(){try{jo.closeSync(uc)}catch{}uc=null}a(fS,"closeLogFile");function FK(){if(!uc){try{if(!jl)debugger;uc=jo.openSync(jl,"a")}catch(e){Ql.error(e)}setTimeout(()=>{fS()},HK).unref()}}a(FK,"openLogFile");function sf(...e){yr[Nr]<=yr.info&&Jl(li("info",e))}a(sf,"info");function ES(...e){yr[Nr]<=yr.trace&&Jl(li("trace",e))}a(ES,"trace");function zl(...e){yr[Nr]<=yr.error&&of(li("error",e))}a(zl,"error");function hS(...e){yr[Nr]<=yr.debug&&Jl(li("debug",e))}a(hS,"debug");function Wy(...e){yr[Nr]<=yr.notify&&Jl(li("notify",e))}a(Wy,"notify");function Qy(...e){yr[Nr]<=yr.fatal&&of(li("fatal",e))}a(Qy,"fatal");function pS(...e){yr[Nr]<=yr.warn&&of(li("warn",e))}a(pS,"warn");function kK(e,t,...r){t===$y.STDERR?of(li(e,r)):Jl(li(e,r))}a(kK,"logCustomLevel");function $K(){let e;try{e=MK.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ci.join(e,Nt.HDB_HOME_DIR_NAME,Nt.BOOT_PROPS_FILE_NAME);return jo.existsSync(t)||(t=ci.join(dS,"utility/hdb_boot_properties.file")),t}a($K,"getPropsFilePath");function VK(e){Nr=e}a(VK,"setLogLevel");function qy(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(qy,"autoCastBoolean");function YK(e){try{if(e.includes("config/settings.js")){let o=ky(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=Fy.parseDocument(jo.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(YK,"getLogConfig");function KK(){try{let e=Fy.parseDocument(jo.readFileSync(BK,"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(KK,"getDefaultConfig");function WK(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(WK,"AuthAuditLog")});var SS=g((Zhe,jy)=>{"use strict";var QK=require("util"),jK=require("path"),zK=require("child_process"),JK=QK.promisify(zK.execFile),XK=1e3*1e3*10;jy.exports={findPs:ZK};async function ZK(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await JK("ps",["wwxo",`pid,${r}`],{maxBuffer:XK});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:jK.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(ZK,"findPs")});var _t=g((tpe,Jy)=>{"use strict";var eW="__dbis__",tW="__txns__",rW="__environment_name__",nW="__dbi_defintion__",sW={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"},iW=["__createdtime__","__updatedtime__"],oW="\uFFFF",zy={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},aW=Object.values(zy);Jy.exports={AUDIT_STORE_NAME:tW,INTERNAL_DBIS_NAME:eW,DBI_DEFINITION_NAME:nW,SEARCH_TYPES:sW,TIMESTAMP_NAMES:iW,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:rW,TRANSACTIONS_DBI_NAMES_ENUM:zy,TRANSACTIONS_DBIS:aW,OVERFLOW_MARKER:oW}});var nn=g((rpe,oI)=>{"use strict";var Xy=L(),Zy=_t(),eI={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},tI=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),rI={500:tI("There was an error processing your request."),400:"Invalid request"},cW=rI[eI.INTERNAL_SERVER_ERROR],lW={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.`},uW={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},_W={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"},dW={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"},fW={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Xy.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 ${Xy.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"},nI={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"},EW={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."},hW={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`},pW={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"},mW={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},SW={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`},sI={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.`},iI={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}`},TW={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."},gW={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},RW={...nI,..._W,...lW,...EW,...hW,...pW,...mW,...SW,...fW,...sI,...iI,...TW,...gW,...uW};oI.exports={CHECK_LOGS_WRAPPER:tI,HDB_ERROR_MSGS:RW,DEFAULT_ERROR_MSGS:rI,DEFAULT_ERROR_RESP:cW,HTTP_STATUS_CODES:eI,LMDB_ERRORS_ENUM:dW,AUTHENTICATION_ERROR_MSGS:nI,VALIDATION_ERROR_MSGS:sI,ITC_ERRORS:iI}});var ie=g((spe,lI)=>{"use strict";var _c=nn(),AW=k(),OW=L(),af=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,aI),this.statusCode=n||_c.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(_c.DEFAULT_ERROR_MSGS[n]?_c.DEFAULT_ERROR_MSGS[n]:_c.DEFAULT_ERROR_MSGS[_c.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&&AW[s](i)}},TS=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}},gS=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function aI(e,t,r,n=OW.LOG_LEVELS.ERROR,s=null,i=!1){if(cI(e))return e;let o=new af(e,t,r,n,s);return i&&delete o.stack,o}a(aI,"handleHDBError");function cI(e){return e.__proto__.constructor.name===af.name}a(cI,"isHDBError");lI.exports={isHDBError:cI,handleHDBError:aI,ClientError:TS,ServerError:gS,hdb_errors:_c}});var Je=g((ope,pI)=>{"use strict";var ru=L(),bW=Y(),Ir=X(),nu=require("path"),NW=require("minimist"),uI=require("fs-extra"),_I=require("lodash");Ir.initSync();var{CONFIG_PARAMS:no,DATABASES_PARAM_CONFIG:Xl,SYSTEM_SCHEMA_NAME:cf}=ru,Zl,eu,tu;function dI(){if(Zl!==void 0)return Zl;if(Ir.getHdbBasePath()!==void 0)return Zl=Ir.get(no.STORAGE_PATH)||nu.join(Ir.getHdbBasePath(),ru.DATABASES_DIR_NAME),Zl}a(dI,"getBaseSchemaPath");function fI(){if(eu!==void 0)return eu;if(Ir.getHdbBasePath()!==void 0)return eu=hI(cf),eu}a(fI,"getSystemSchemaPath");function EI(){if(tu!==void 0)return tu;if(Ir.getHdbBasePath()!==void 0)return tu=Ir.get(ru.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||nu.join(Ir.getHdbBasePath(),ru.TRANSACTIONS_DIR_NAME),tu}a(EI,"getTransactionAuditStoreBasePath");function yW(e,t){let r=Ir.get(no.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||nu.join(EI(),e.toString())}a(yW,"getTransactionAuditStorePath");function hI(e,t){e=e.toString(),t=t&&t.toString();let r=Ir.get(ru.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||nu.join(dI(),e)}a(hI,"getSchemaPath");function IW(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,NW(process.argv));let n=r[no.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!bW.isObject(n))throw o;i=n}for(let o of i){let c=o[cf];if(!c)continue;let l=Ir.get(no.DATABASES);l=l??{};let _=c?.tables?.[t]?.[Xl.PATH];if(_)return _I.set(l,[cf,Xl.TABLES,t,Xl.PATH],_),Ir.setProperty(no.DATABASES,l),_;let u=c?.[Xl.PATH];if(u)return _I.set(l,[cf,Xl.PATH],u),Ir.setProperty(no.DATABASES,l),u}}let s=r[no.STORAGE_PATH.toUpperCase()];if(s){if(!uI.pathExistsSync(s))throw new Error(s+" does not exist");let i=nu.join(s,e);return uI.mkdirsSync(i),Ir.setProperty(no.STORAGE_PATH,s),i}return fI()}a(IW,"initSystemSchemaPaths");function wW(){Zl=void 0,eu=void 0,tu=void 0}a(wW,"resetPaths");pI.exports={getBaseSchemaPath:dI,getSystemSchemaPath:fI,getTransactionAuditStorePath:yW,getTransactionAuditStoreBasePath:EI,getSchemaPath:hI,initSystemSchemaPaths:IW,resetPaths:wW}});var wr=g((upe,RI)=>{"use strict";var CW=nn().LMDB_ERRORS_ENUM,cpe=require("lmdb"),DW=_t(),lpe=require("buffer").Buffer,{OVERFLOW_MARKER:mI,MAX_SEARCH_KEY_LENGTH:lf}=DW,SI=["number","string","symbol","boolean","bigint"];function LW(e){if(e=e?.primaryStore||e,!e)throw new Error(CW.ENV_REQUIRED)}a(LW,"validateEnv");function PW(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(PW,"stringifyData");function MW(e){return e instanceof Date?e.valueOf():e}a(MW,"convertKeyValueToWrite");function UW(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(SI.includes(typeof e))return e.length>lf?[e.slice(0,lf)+mI]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(SI.includes(typeof i))i.length>lf?r.push(i.slice(0,lf)+mI):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(UW,"getIndexedValues");var uf=0,TI=0;function gI(){TI=Date.now()-performance.now()}a(gI,"adjustStartTime");gI();var vW=6e4;setInterval(gI,vW).unref();function BW(){let e=performance.now()+TI;return e>uf?(uf=e,e):(uf+=488e-6,uf)}a(BW,"getNextMonotonicTime");RI.exports={validateEnv:LW,stringifyData:PW,convertKeyValueToWrite:MW,getNextMonotonicTime:BW,getIndexedValues:UW}});var su=g((dpe,AI)=>{"use strict";var HW=L().OPERATIONS_ENUM,RS=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=HW.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};AI.exports=RS});var iu=g((hpe,yI)=>{"use strict";var Epe=su(),_f=L(),AS=Y(),OI=k(),xW=require("uuid"),{handleHDBError:df,hdb_errors:GW}=ie(),{HDB_ERROR_MSGS:ff,HTTP_STATUS_CODES:Ef}=GW;yI.exports=bI;function bI(e,t,r){for(let s=0;s<t.length;s++)NI(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];qW(i,r,e.operation)}}a(bI,"processRows");bI.validateAttribute=NI;function NI(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(AS.isEmptyOrZeroLength(e)||AS.isEmpty(e.trim()))throw df(new Error,ff.ATTR_NAME_NULLISH_ERR,Ef.BAD_REQUEST,void 0,void 0,!0)}a(NI,"validateAttribute");function qW(e,t,r){if(!e.hasOwnProperty(t)||AS.isEmptyOrZeroLength(e[t])){if(r===_f.OPERATIONS_ENUM.INSERT||r===_f.OPERATIONS_ENUM.UPSERT){e[t]=xW.v4();return}throw OI.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 OI.error(e),df(new Error,ff.HASH_VAL_LENGTH_ERR,Ef.BAD_REQUEST,void 0,void 0,!0)}a(qW,"validateHash")});var II,ts,OS,ou=be(()=>{II=require("events"),ts=class extends II.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new OS;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)}},OS=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 zo={};$e(zo,{server:()=>dt});var wI,dt,Cr=be(()=>{wI=require("../index"),dt={};(0,wI._assignPackageExport)("server",dt)});var yS={};$e(yS,{loadGQLSchema:()=>$W,start:()=>NS,startOnMainThread:()=>kW});function NS({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 T=S.name.value,R=[],N={table:null,database:null,properties:R};E.set(T,N);for(let v of S.directives){if(v.name.value==="table"){for(let q of v.arguments)N[q.name.value]=q.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=T),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,f.push(N)}if(v.name.value==="sealed"&&(N.sealed=!0),v.name.value==="export"){N.export=!0;for(let q of v.arguments)q.name.value==="name"&&(N.export={name:q.value.value})}}let b=!1;for(let v of S.fields){let q=U(v.type);q.name=v.name.value,R.push(q);for(let M of v.directives)if(M.name.value==="primaryKey")b?console.warn("Can not define two attributes as a primary key"):(q.isPrimaryKey=!0,b=!0);else if(M.name.value==="indexed")q.indexed=!0;else if(M.name.value==="relationship"){let W={};for(let z of M.arguments)W[z.name.value]=z.value.value;q.relationship=W}else if(M.name.value==="createdTime")q.assignCreatedTime=!0;else if(M.name.value==="updatedTime")q.assignUpdatedTime=!0;else if(M.name.value==="expiresAt")q.expiresAt=!0;else if(M.name.value==="allow"){let W=q.authorizedRoles=[];for(let z of M.arguments)z.name.value==="role"&&W.push(z.value.value)}}N.type=T,T==="Query"&&(h=N)}function m(S){let T=E.get(S.type);T?(Object.defineProperty(S,"properties",{value:T.properties}),Object.defineProperty(S,"definition",{value:T})):S.type==="array"?m(S.elements):FW.includes(S.type)||(0,CI.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 T of S.properties)m(T);for(let S of f)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,bS.dirname)(n),S.tableClass):i.set((0,bS.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var bS,CI,FW,kW,$W,DI=be(()=>{bS=require("path");Re();CI=x(rt()),FW=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(NS,"start");kW=NS,$W=NS({ensureTable:St}).handleFile});async function hf(e){let t=(0,MI.pathToFileURL)(e).toString();return VW?(au||(au=YW(WW)),(await(await au).import(t)).namespace):import(t)}async function YW(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),au=new Compartment({console,Math,Date,fetch:KW,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,PI.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,LI.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),au}function KW(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 WW(){return{Resource:tr,tables:sn}}var LI,PI,MI,VW,au,IS=be(()=>{Mn();Re();LI=require("fs/promises"),PI=require("path"),MI=require("url"),VW=!1;a(hf,"secureImport");a(YW,"getCompartment");a(KW,"secureOnlyFetch");a(WW,"getGlobalVars")});var CS={};$e(CS,{handleFile:()=>QW});async function QW(e,t,r,n){let s=new Map,i=await hf(r);c(i.default)&&n.set((0,wS.dirname)(t),i.default),o(i,(0,wS.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 wS,UI=be(()=>{IS();wS=require("path");a(QW,"handleFile")});var LS={};$e(LS,{start:()=>jW});function jW({resources:e}){e.set("login",DS),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var DS,vI=be(()=>{Mn();a(jW,"start");DS=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 kI={};$e(kI,{parse:()=>MS,streamAsJSON:()=>cu,stringify:()=>Jo});function cu(e){return new PS({value:e})}function BI(e){return console.error(e),JSON.stringify(e.toString())}function HI(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Jo(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===qI)return FI(e);if(t.resolution)return t.resolution.then(()=>Jo(e));throw t}}function FI(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+=FI(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Jo(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function MS(e){return XW.test(e)?zW.parse(e):JSON.parse(e)}var xI,GI,zW,JW,qI,PS,XW,US=be(()=>{xI=require("stream"),GI=x(require("json-bigint-fixes")),zW=(0,GI.default)({useNativeBigInt:!0}),JW=1e4,qI={};BigInt.prototype.toJSON=function(){throw qI};a(cu,"streamAsJSON");PS=class extends xI.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),BI)}catch(s){yield BI(s)}else yield Jo(t)}else yield Jo(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);HI(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>JW?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 HI(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(BI,"handleError");a(HI,"when");a(Jo,"stringify");a(FI,"jsStringify");XW=/[[,:]\s*-?\d{16,}/;a(MS,"parse")});var tw=g((Lpe,ew)=>{"use strict";var vS=require("recursive-iterator"),ZW=require("alasql"),BS=require("clone"),$I=Y(),{handleHDBError:VI,hdb_errors:eQ}=ie(),{HDB_ERROR_MSGS:YI,HTTP_STATUS_CODES:KI}=eQ,{getDatabases:tQ}=(Re(),ae(Ve)),rQ=["DISTINCT_ARRAY"],WI=Symbol("validateTables"),HS=Symbol("validateTable"),Dpe=Symbol("getAllColumns"),QI=Symbol("validateAllColumns"),pf=Symbol("findColumn"),jI=Symbol("validateOrderBy"),lu=Symbol("validateSegment"),xS=Symbol("validateColumn"),zI=Symbol("setColumnsForTable"),JI=Symbol("checkColumnsForAsterisk"),XI=Symbol("validateGroupBy"),ZI=Symbol("hasColumns"),GS=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[WI](),this[JI](),this[QI]()}[WI](){if(this[ZI]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[HS](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[HS](t.table)})}}[ZI](){let t=!1,r=new vS(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[HS](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=tQ();if(!r[t.databaseid])throw VI(new Error,YI.SCHEMA_NOT_FOUND(t.databaseid),KI.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw VI(new Error,YI.TABLE_NOT_FOUND(t.databaseid,t.tableid),KI.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=BS(s);i.table=BS(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 vS(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[zI](r.tableid)}[zI](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new ZW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[QI](){this[lu](this.statement.columns,!1),this[lu](this.statement.joins,!1),this[lu](this.statement.where,!1),this[XI](this.statement.group,!1),this[lu](this.statement.order,!0)}[lu](t,r){if(!t)return;let n=new vS(t),s=[];for(let{node:i,path:o}of n)!$I.isEmpty(i)&&!$I.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[jI](i):s.push(this[xS](i)));return s}[XI](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&rQ.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=BS(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`}[jI](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[xS](t)}[xS](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]}};ew.exports=GS});var nw=g((Mpe,rw)=>{"use strict";var qS=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")}};rw.exports=qS});var iw=g((vpe,sw)=>{"use strict";var FS=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};sw.exports=FS});var lw={};$e(lw,{HAS_EXPIRATION:()=>QS,LAST_TIMESTAMP_PLACEHOLDER:()=>du,LOCAL_TIMESTAMP:()=>nQ,METADATA:()=>uu,NO_TIMESTAMP:()=>$S,PENDING_LOCAL_TIME:()=>jS,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>WS,RecordEncoder:()=>KS,TIMESTAMP_ASSIGN_LAST:()=>iQ,TIMESTAMP_ASSIGN_NEW:()=>aw,TIMESTAMP_ASSIGN_PREVIOUS:()=>cw,TIMESTAMP_PLACEHOLDER:()=>mf,TIMESTAMP_RECORD_PREVIOUS:()=>VS,getUpdateRecord:()=>zS,handleLocalTimeForGets:()=>Rf});function aQ(){return _u[0]=_u[0]^64,sQ.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?.[uu];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?.[uu]>=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[uu];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,Xo.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<Xo.length;l++){let _=Xo[l].deref();(!_||_.isDone||_.isCommitted)&&Xo.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function zS(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",E,f){if(E||l==null?dc=i?.localTime?VS|cw:$S:dc=l?i?.localTime?VS|16384:aw|16384:$S,u>0&&(c|=QS),Tf=c,YS=u,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:dc>0},m;try{E&&(h.ifVersion=m=i?.version??null);let S=e.put(n,s,h);if(l){let T=_?.user?.username;if(f&&(Sf=e.encoder.encode(f)),E&&i?.localTime){let R=i?.localTime,N=r.get(R);if(N){let b=Kt(N).previousLocalTime;return r.put(R,gf(o,t,n,b,T,d,Sf),{ifVersion:m}),S}}r.put(du,gf(o,t,n,i?.localTime?1:0,T,d,Sf),{append:d!=="invalidate",instructedWrite:!0,ifVersion:m})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var ow,kS,mf,du,WS,nQ,uu,_u,sQ,$S,aw,iQ,cw,VS,QS,jS,oQ,Sf,dc,Tf,YS,KS,Xo,fu=be(()=>{ow=require("msgpackr");so();kS=x(k()),mf=new Uint8Array([1,1,1,1,4,64,0,0]),du=new Uint8Array([1,1,1,1,1,0,0,0]),WS=new Uint8Array([1,1,1,1,3,64,0,0]),nQ=Symbol("local-timestamp"),uu=Symbol("metadata"),_u=new Uint8Array(8),sQ=new DataView(_u.buffer,0,8),$S=0,aw=0,iQ=1,cw=3,VS=4,QS=16,jS=1,dc=0,Tf=-1,YS=0,KS=class extends ow.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(dc||Tf>=0){let i=0,o=dc;o&&(i+=8,dc=0);let c=Tf,l=YS;c>=0&&(i+=2,Tf=-1,l&&(i+=8,YS=0));let _=oQ=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(_u,0,c),c+=8;else for(let d=0;d<8;d++)_u[d]=t[c++];l=aQ(),i=t[c]}let _;i<32&&(o=i,c+=2,o&QS&&(_=(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,[uu]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(aQ,"getTimestamp");a(Rf,"handleLocalTimeForGets");Xo=[];setInterval(()=>{for(let e=0;e<Xo.length;e++){let t=Xo[e].deref();!t||t.isDone||t.isCommitted?Xo.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(kS.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):kS.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(zS,"getUpdateRecord")});var Eu=g((qpe,_w)=>{"use strict";var uw=X(),cQ=L(),{RecordEncoder:lQ}=(fu(),ae(lw)),Gpe=require("fs");uw.initSync();var uQ=uw.get(cQ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,JS=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=uQ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:lQ})}};_w.exports=JS});var hu=g((kpe,dw)=>{"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)}};dw.exports=Af;Af.MAX_DBS=1e4});var Ye=g((Vpe,Aw)=>{"use strict";var ZS=require("lmdb"),rs=require("fs-extra"),an=require("path"),Of=wr(),hw=k(),Dr=nn().LMDB_ERRORS_ENUM,bf=iw(),eT=Eu(),pw=hu(),io=_t(),fw=L(),{table:_Q,resetDatabases:dQ}=(Re(),ae(Ve)),Ew=X(),ns=io.INTERNAL_DBIS_NAME,mw=io.DBI_DEFINITION_NAME,fQ="data.mdb",EQ="lock.mdb",pu=".mdb",hQ="-lock",XS=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=vn(t,r),this.key_type=this.dbi[io.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[io.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 tT(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+pu);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,fQ),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(tT,"validateEnvironmentPath");function yf(e,t){if(Of.validateEnv(e),t===void 0)throw new Error(Dr.DBI_NAME_REQUIRED)}a(yf,"validateEnvDBIName");async function pQ(e,t,r=!1,n=!1){Nf(e,t);let s=an.basename(e);t=t.toString();let i=Ew.get(fw.CONFIG_PARAMS.DATABASES);i||Ew.setProperty(fw.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await tT(e,t,n),Sw(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 pw(n?c:c+pu,!1),_=ZS.open(l);_.dbis=Object.create(null);let u=new eT(!1);_.openDB(ns,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=rT(e,t,r);return _[io.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(pQ,"createEnvironment");async function mQ(e,t,r,n=!0){Nf(e,t),t=t.toString();let s=an.join(e,t);return _Q({table:t,database:an.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(mQ,"copyEnvironment");async function Sw(e,t,r=!1){Nf(e,t),t=t.toString();let n=rT(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 tT(e,t),i=an.join(e,t+pu),o=s!=i,c=new pw(s,o),l=ZS.open(c);l.dbis=Object.create(null);let _=gw(l);for(let u=0;u<_.length;u++)vn(l,_[u]);return l[io.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(Sw,"openEnvironment");async function SQ(e,t,r=!1){Nf(e,t),t=t.toString();let n=an.join(e,t+pu),s=await tT(e,t);if(global.lmdb_map!==void 0){let i=rT(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Tw(o),delete global.lmdb_map[i]}}await rs.remove(s),await rs.remove(s===n?s+hQ:an.join(an.dirname(s),EQ))}a(SQ,"deleteEnvironment");async function Tw(e){Of.validateEnv(e);let t=e[io.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Tw,"closeEnvironment");function rT(e,t,r=!1){let s=`${an.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(rT,"getCachedEnvironmentName");function TQ(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{hw.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(TQ,"listDBIDefinitions");function gw(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(gw,"listDBIs");function gQ(e,t){let n=vn(e,ns).getEntry(t),s=new bf;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{hw.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(gQ,"getDBIDefinition");function Rw(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 eT(r,n===!0),o=e.openDB(t,i),c=new bf(r===!0,n);return o[mw]=c,vn(e,ns).putSync(t,c),e.dbis[t]=o,o}throw s}}a(Rw,"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=gQ(e,t):r=new bf,r===void 0)throw new Error(Dr.DBI_DOES_NOT_EXIST);let n;try{let s=new eT(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[mw]=r,e.dbis[t]=n,n}a(vn,"openDBI");function RQ(e,t){yf(e,t),t=t.toString();let r=vn(e,t),n=r.getStats();return r[io.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(RQ,"statDBI");async function AQ(e,t){try{let r=an.join(e,t+pu);return(await rs.stat(r)).size}catch{throw new Error(Dr.INVALID_ENVIRONMENT)}}a(AQ,"environmentDataSize");function OQ(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(OQ,"dropDBI");function bQ(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)Rw(e,i,i!==t,i===t),n=!0;else throw o}}n&&dQ()}a(bQ,"initializeDBIs");Aw.exports={openDBI:vn,openEnvironment:Sw,createEnvironment:pQ,listDBIs:gw,listDBIDefinitions:TQ,createDBI:Rw,dropDBI:OQ,statDBI:RQ,deleteEnvironment:SQ,initializeDBIs:bQ,TransactionCursor:XS,environmentDataSize:AQ,copyEnvironment:mQ,closeEnvironment:Tw}});var bw=g((Kpe,Ow)=>{"use strict";var nT=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};Ow.exports=nT});var yw=g((Qpe,Nw)=>{"use strict";var sT=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}};Nw.exports=sT});var ww=g((zpe,Iw)=>{"use strict";var iT=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};Iw.exports=iT});var ea=g((tme,Lw)=>{"use strict";var NQ=Ye(),yQ=bw(),IQ=yw(),wQ=ww(),Ds=wr(),mu=nn().LMDB_ERRORS_ENUM,CQ=_t(),ui=L(),DQ=Y(),LQ=require("uuid"),Xpe=require("lmdb"),{handleHDBError:PQ,hdb_errors:MQ}=ie(),{OVERFLOW_MARKER:Zpe,MAX_SEARCH_KEY_LENGTH:eme}=CQ,Cw=X();Cw.initSync();var If=Cw.get(ui.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),oT=ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Zo=ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function UQ(e,t,r,n,s=Ds.getNextMonotonicTime()){uT(e,t,r,n),aT(e,t,r);let i=new yQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];Dw(_,!0,s);let u=vQ(e,t,r,_),d=_[t];o.push(u),c.push(d)}return cT(o,c,n,i,s)}a(UQ,"insertRecords");function vQ(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[Zo])})}a(vQ,"insertRecord");function BQ(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(BQ,"removeSkippedRecords");function Dw(e,t,r){let n=r>0;(n||!Number.isInteger(e[Zo]))&&(e[Zo]=r||(r=Ds.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[oT]))&&(e[oT]=r||Ds.getNextMonotonicTime()):delete e[oT]}a(Dw,"setTimestamps");function aT(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),NQ.initializeDBIs(e,t,r)}a(aT,"initializeTransaction");async function HQ(e,t,r,n,s=Ds.getNextMonotonicTime()){uT(e,t,r,n),aT(e,t,r);let i=new IQ,o=[],c=[],l=[];for(let _=0;_<n.length;_++){let u=n[_],d=u[t],E;try{E=lT(e,t,u,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(E),l.push(d)}return cT(c,l,n,i,s,o)}a(HQ,"updateRecords");async function xQ(e,t,r,n,s=Ds.getNextMonotonicTime()){try{uT(e,t,r,n)}catch(l){throw PQ(l,l.message,MQ.HTTP_STATUS_CODES.BAD_REQUEST)}aT(e,t,r);let i=new wQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l],u;DQ.isEmpty(_[t])?(u=LQ.v4(),_[t]=u):u=_[t];let d=lT(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return cT(o,c,n,i,s)}a(xQ,"upsertRecords");async function cT(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(),BQ(r,i),n}a(cT,"finalizeWrite");function lT(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(Dw(r,!u,o),Number.isInteger(r[Zo])&&_[Zo]>r[Zo])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 T=_[h];if(typeof m=="function"){let N=m([[_]]);Array.isArray(N)&&(m=N[0][ui.FUNC_VAL],r[h]=m)}if(m===T)continue;let R=Ds.getIndexedValues(T);if(R){If&&S.prefetch(R.map(N=>({key:N,value:n})),wf);for(let N=0,b=R.length;N<b;N++)S.remove(R[N],n)}if(R=Ds.getIndexedValues(m),R){If&&S.prefetch(R.map(N=>({key:N,value:n})),wf);for(let N=0,b=R.length;N<b;N++)S.put(R[N],n)}}let f=Object.assign({},_,r);c.put(n,f,f[Zo])},"do_put");return l?d=c.ifVersion(n,l.version,E):d=c.ifNoExists(n,E),d.then(f=>f?!0:lT(e,t,r,n,s,i,o))}a(lT,"updateUpsertRecord");function GQ(e,t,r){if(Ds.validateEnv(e),t===void 0)throw new Error(mu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(mu.WRITE_ATTRIBUTES_REQUIRED):new Error(mu.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(GQ,"validateBasic");function uT(e,t,r,n){if(GQ(e,t,r),!Array.isArray(n))throw n===void 0?new Error(mu.RECORDS_REQUIRED):new Error(mu.RECORDS_MUST_BE_ARRAY)}a(uT,"validateWrite");function wf(){}a(wf,"noop");Lw.exports={insertRecords:UQ,updateRecords:HQ,upsertRecords:xQ}});var _i=g((nme,qQ)=>{qQ.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",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=g((sme,Uw)=>{"use strict";var Mw=Y(),Pw=L(),fc=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ls=require("joi"),oo={schema_format:{pattern:fc,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},FQ=Ls.alternatives(Ls.string().min(1).max(oo.schema_length.maximum).pattern(fc).messages({"string.pattern.base":"{:#label} "+oo.schema_format.message}),Ls.number(),Ls.array()).required(),kQ=Ls.alternatives(Ls.string().min(1).max(oo.schema_length.maximum).pattern(fc).messages({"string.pattern.base":"{:#label} "+oo.schema_format.message}),Ls.number()),$Q=Ls.alternatives(Ls.string().min(1).max(oo.schema_length.maximum).pattern(fc).messages({"string.pattern.base":"{:#label} "+oo.schema_format.message}),Ls.number()).required();function VQ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>oo.schema_length.maximum?`'${e}' maximum of 250 characters`:fc.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(VQ,"checkValidTable");function YQ(e,t){return Mw.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(YQ,"validateSchemaExists");function KQ(e,t){let r=t.state.ancestors[0].schema;return Mw.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(KQ,"validateTableExists");function WQ(e,t){return e.toLowerCase()===Pw.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Pw.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(WQ,"validateSchemaName");Uw.exports={common_validators:oo,schema_regex:fc,hdb_schema_table:FQ,validateSchemaExists:YQ,validateTableExists:KQ,validateSchemaName:WQ,checkValidTable:VQ,hdb_database:kQ,hdb_table:$Q}});var nt=g((ome,vw)=>{"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};vw.exports={validateObject:QQ,validateObjectAsync:jQ,validateBySchema:zQ};function QQ(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(QQ,"validateObject");async function jQ(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(jQ,"validateObjectAsync");function zQ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(zQ,"validateBySchema")});var Cf=g((cme,Bw)=>{var{common_validators:Ms}=Ps(),Tu=nt(),Su="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 gu(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(gu,"makeAttributesStrings");function JQ(e){return e=gu(e),yt.table.presence=!1,yt.attribute.presence=!1,yt.hash_attribute.presence=!1,Tu.validateObject(e,yt)}a(JQ,"schema_object");function XQ(e){return e=gu(e),yt.table.presence={message:Su},yt.attribute.presence=!1,yt.hash_attribute.presence=!1,Tu.validateObject(e,yt)}a(XQ,"table_object");function ZQ(e){return e=gu(e),yt.table.presence={message:Su},yt.attribute.presence=!1,Tu.validateObject(e,yt)}a(ZQ,"create_table_object");function ej(e){return e=gu(e),yt.table.presence={message:Su},yt.attribute.presence={message:Su},yt.hash_attribute.presence=!1,Tu.validateObject(e,yt)}a(ej,"attribute_object");function tj(e){return e=gu(e),yt.table.presence={message:Su},yt.attribute.presence=!1,yt.hash_attribute.presence=!1,Tu.validateObject(e,yt)}a(tj,"describe_table");function rj(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(rj,"validateTableResidence");Bw.exports={schema_object:JQ,create_table_object:ZQ,table_object:XQ,attribute_object:ej,describe_table:tj,validateTableResidence:rj}});var xw=g((ume,Hw)=>{"use strict";var nj=require("uuid"),_T=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||nj.v4(),this.schema_table=`${this.schema}.${this.table}`}};Hw.exports=_T});var Df=g((dme,Gw)=>{"use strict";var sj=xw(),dT=class extends sj{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}};Gw.exports=dT});var Fw=g((Eme,qw)=>{"use strict";qw.exports=oj;var ij="inserted";function oj(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===ij?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(oj,"returnObject")});var Lf=g((pme,Kw)=>{"use strict";var aj=L(),fT=Ye(),cj=ea(),{getSystemSchemaPath:lj,getSchemaPath:uj}=Je(),_j=_i(),dj=Cf(),fj=Df(),Ej=Fw(),{handleHDBError:kw,hdb_errors:Vw}=ie(),$w=Y(),{HTTP_STATUS_CODES:hj}=Vw,ET=_j.hdb_attribute,Yw=[];for(let e=0;e<ET.attributes.length;e++)Yw.push(ET.attributes[e].attribute);var pj="inserted";Kw.exports=mj;async function mj(e){let t=dj.attribute_object(e);if(t)throw kw(new Error,t.message,Vw.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&$w.checkGlobalSchemaTable(e.schema,e.table);if(r)throw kw(new Error,r,hj.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=$w.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 fj(e.schema,e.table,e.attribute,e.id);try{let i=await fT.openEnvironment(uj(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}`);fT.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await fT.openEnvironment(lj(),aj.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await cj.insertRecords(o,ET.hash_attribute,Yw,[s]);return Ej(pj,c,{records:[s]},l)}catch(i){throw i}}a(mj,"lmdbCreateAttribute")});var pT=g((Sme,Qw)=>{var{hdb_table:Sj,hdb_database:Ww}=Ps(),Tj=nt(),hT=require("joi"),gj={undefined:"undefined",null:"null"},Rj=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||gj[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"),Aj=hT.object({database:Ww,schema:Ww,table:Sj,records:hT.array().items(hT.object().custom(Rj)).required()});Qw.exports=function(e){return Tj.validateBySchema(e,Aj)}});var Ru=g((Rme,zw)=>{"use strict";var di=Y(),jw=k(),gme=pT(),{getDatabases:Oj}=(Re(),ae(Ve)),{ClientError:ta}=ie();zw.exports=bj;function bj(e){if(di.isEmpty(e))throw new ta("invalid update parameters defined.");if(di.isEmptyOrZeroLength(e.schema))throw new ta("invalid schema specified.");if(di.isEmptyOrZeroLength(e.table))throw new ta("invalid table specified.");if(!Array.isArray(e.records))throw new ta("records must be an array");let t=Oj()[e.schema]?.[e.table];if(di.isEmpty(t))throw new ta(`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 jw.error("a valid hash attribute must be provided with update record:",o),new ta("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 jw.error(`a valid hash value must be provided with ${e.operation} record:`,o),new ta(`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(bj,"insertUpdateValidate")});var Xw=g((Ome,Jw)=>{"use strict";var mT=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};Jw.exports=mT});var tC=g((Nme,eC)=>{"use strict";var ST=Ye(),Nj=k(),Zw=nn().LMDB_ERRORS_ENUM;eC.exports=yj;async function yj(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 ST.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 ST.closeEnvironment(global.lmdb_map[n]),await ST.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){Nj.error(t)}}a(yj,"cleanLMDBMap")});var fi=g((Ime,iC)=>{"use strict";var Au=require("crypto"),Ij=X(),{CONFIG_PARAMS:wj}=L(),nC="aes-256-cbc",Cj=32,Dj=16,TT=64,sC=32,Lj=TT+sC,rC=new Map;iC.exports={encrypt:Pj,decrypt:Mj,createNatsTableStreamName:Uj};function Pj(e){let t=Au.randomBytes(Cj),r=Au.randomBytes(Dj),n=Au.createCipheriv(nC,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(Pj,"encrypt");function Mj(e){let t=e.substr(0,TT),r=e.substr(TT,sC),n=e.substr(Lj,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Au.createDecipheriv(nC,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Mj,"decrypt");function Uj(e,t){let r=Ij.get(wj.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=rC.get(r);return n||(n=Au.createHash("md5").update(r).digest("hex"),rC.set(r,n)),n}a(Uj,"createNatsTableStreamName")});var Ei=g((Dme,aC)=>{"use strict";var Cme=ur(),Ou=k(),oC=Cf(),vj=fi(),Pf=Y(),{handleHDBError:Mf,hdb_errors:Bj}=ie(),{HDB_ERROR_MSGS:Uf,HTTP_STATUS_CODES:gT}=Bj,Hj=X();Hj.initSync();var{getDatabases:RT}=(Re(),ae(Ve)),xj=require("fs-extra");aC.exports={describeAll:Gj,describeTable:vf,describeSchema:qj};async function Gj(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=RT(),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){Ou.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 Ou.error("Got an error in describeAll"),Ou.error(t),Mf(new Error,Uf.DESCRIBE_ALL_ERR)}}a(Gj,"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=oC.describe_table(e);if(i)throw i;let c=RT()[r];if(!c)throw Mf(new Error,Uf.SCHEMA_NOT_FOUND(e.schema),gT.NOT_FOUND);let l=c[n];if(!l)throw Mf(new Error,Uf.TABLE_NOT_FOUND(e.schema,e.table),gT.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 xj.stat(l.primaryStore.env.path)).size}catch(f){Ou.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=vj.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){Ou.warn(`unable to stat table dbi due to ${f}`)}return E}a(vf,"descTable");async function qj(e){Pf.transformReq(e);let t=oC.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=RT()[n];if(!i)throw Mf(new Error,Uf.SCHEMA_NOT_FOUND(e.schema),gT.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(qj,"describeSchema")});var Bn=g((Ume,dC)=>{var Fj=_i(),{callbackify:lC,promisify:kj}=require("util"),{getDatabases:uC}=(Re(),ae(Ve));dC.exports={setSchemaDataToGlobal:cC,getTableSchema:$j,getSystemSchema:Vj,setSchemaDataToGlobalAsync:kj(cC)};var _C=Ei(),Pme=lC(_C.describeAll),Mme=lC(_C.describeTable);function cC(e){global.hdb_schema=uC(),e&&e()}a(cC,"setSchemaDataToGlobal");function $j(e,t,r){let n=uC()[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($j,"getTableSchema");function Vj(){return Fj}a(Vj,"getSystemSchema")});var Pr=g((Bme,pC)=>{"use strict";var Hf=pT(),rr=Y(),Yj=require("util"),xf=Hn(),Kj=Bn(),fC=k(),{handleHDBError:ra,hdb_errors:Wj}=ie(),{HTTP_STATUS_CODES:na}=Wj,Qj=Yj.promisify(Kj.getTableSchema),jj="updated",EC="inserted",hC="upserted";pC.exports={insert:Jj,update:Xj,upsert:Zj,validation:zj,flush:ez};async function zj(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 Qj(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 fC.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 fC.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(zj,"validation");async function Jj(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Hf(e);if(t)throw ra(new Error,t.message,na.BAD_REQUEST);rr.transformReq(e);let r=rr.checkSchemaTableExist(e.schema,e.table);if(r)throw ra(new Error,r,na.BAD_REQUEST);let n=await xf.createRecords(e);return Bf(EC,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(Jj,"insertData");async function Xj(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Hf(e);if(t)throw ra(new Error,t.message,na.BAD_REQUEST);rr.transformReq(e);let r=rr.checkSchemaTableExist(e.schema,e.table);if(r)throw ra(new Error,r,na.BAD_REQUEST);let n=await xf.updateRecords(e);return rr.isEmpty(n.existing_rows)?Bf(jj,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(Xj,"updateData");async function Zj(e){if(e.operation!=="upsert")throw ra(new Error,"invalid operation, must be upsert",na.INTERNAL_SERVER_ERROR);let t=Hf(e);if(t)throw ra(new Error,t.message,na.BAD_REQUEST);rr.transformReq(e);let r=rr.checkSchemaTableExist(e.schema,e.table);if(r)throw ra(new Error,r,na.BAD_REQUEST);let n=await xf.upsertRecords(e);return Bf(hC,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(Zj,"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===EC?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===hC?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Bf,"returnObject");function ez(e){return rr.transformReq(e),xf.flush(e.schema,e.table)}a(ez,"flush")});var OT=g((xme,TC)=>{var tz=nt(),AT=require("joi"),{hdb_table:rz,hdb_database:mC}=Ps(),SC={schema:mC,database:mC,table:rz},nz={date:AT.date().iso().required()},sz={timestamp:AT.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};TC.exports=function(e,t){let r=t==="timestamp"?{...SC,...sz}:{...SC,...nz},n=AT.object(r);return tz.validateBySchema(e,n)}});var AC=g((Gme,RC)=>{var iz=nt(),bT=require("joi"),{hdb_table:oz,hdb_database:gC}=Ps(),az=bT.object({schema:gC,database:gC,table:oz,hash_values:bT.array().required(),ids:bT.array()});RC.exports=function(e){return iz.validateBySchema(e,az)}});var wT=g((qme,OC)=>{"use strict";var NT=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}},yT=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}},IT=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};OC.exports={InsertObject:NT,NoSQLSeachObject:yT,DeleteResponseObject:IT}});var oa=g((kme,wC)=>{"use strict";var NC=OT(),cz=AC(),sa=Y(),bC=require("moment"),yC=k(),{promisify:lz,callbackify:uz}=require("util"),ia=L(),_z=Bn(),CT=lz(_z.getTableSchema),DT=Hn(),{DeleteResponseObject:dz}=wT(),{handleHDBError:ao,hdb_errors:fz}=ie(),{HDB_ERROR_MSGS:Gf,HTTP_STATUS_CODES:co}=fz,Ez="records successfully deleted",hz=uz(IC);wC.exports={delete:hz,deleteRecord:IC,deleteFilesBefore:pz,deleteAuditLogsBefore:mz};async function pz(e){let t=NC(e,"date");if(t)throw ao(t,t.message,co.BAD_REQUEST,void 0,void 0,!0);if(sa.transformReq(e),!bC(e.date,bC.ISO_8601).isValid())throw ao(new Error,Gf.INVALID_DATE,co.BAD_REQUEST,ia.LOG_LEVELS.ERROR,Gf.INVALID_DATE,!0);let n=sa.checkSchemaTableExist(e.schema,e.table);if(n)throw ao(new Error,n,co.NOT_FOUND,ia.LOG_LEVELS.ERROR,n,!0);let s=await DT.deleteRecordsBefore(e);if(await CT(e.schema,e.table),yC.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(pz,"deleteFilesBefore");async function mz(e){let t=NC(e,"timestamp");if(t)throw ao(t,t.message,co.BAD_REQUEST,void 0,void 0,!0);if(sa.transformReq(e),isNaN(e.timestamp))throw ao(new Error,Gf.INVALID_VALUE("Timestamp"),co.BAD_REQUEST,ia.LOG_LEVELS.ERROR,Gf.INVALID_VALUE("Timestamp"),!0);let r=sa.checkSchemaTableExist(e.schema,e.table);if(r)throw ao(new Error,r,co.NOT_FOUND,ia.LOG_LEVELS.ERROR,r,!0);let n=await DT.deleteAuditLogsBefore(e);return await CT(e.schema,e.table),yC.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(mz,"deleteAuditLogsBefore");async function IC(e){e.ids&&(e.hash_values=e.ids);let t=cz(e);if(t)throw ao(t,t.message,co.BAD_REQUEST,void 0,void 0,!0);sa.transformReq(e);let r=sa.checkSchemaTableExist(e.schema,e.table);if(r)throw ao(new Error,r,co.NOT_FOUND,ia.LOG_LEVELS.ERROR,r,!0);try{await CT(e.schema,e.table);let n=await DT.deleteRecords(e);return sa.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Ez}`),n}catch(n){if(n.message===ia.SEARCH_NOT_FOUND_MESSAGE){let s=new dz;return s.message=ia.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(IC,"deleteRecord")});var qf=g((Vme,LC)=>{var Sz=require("crypto"),CC=9;function Tz(e){let t=Rz(CC),r=DC(e+t);return t+r}a(Tz,"createHash");function gz(e,t){let r=e?.substr(0,CC),n=r+DC(t+r);return e===n}a(gz,"validateHash");function Rz(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(Rz,"generateSalt");function DC(e){return Sz.createHash("md5").update(e).digest("hex")}a(DC,"md5");LC.exports={hash:Tz,validate:gz}});var MC=g((Kme,PC)=>{var LT=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 Az(e){return _r.password.presence=!0,_r.username.presence=!0,_r.role.presence=!0,_r.active.presence=!0,LT.validateObject(e,_r)}a(Az,"addUserValidation");function Oz(e){return _r.password.presence=!1,_r.username.presence=!0,_r.role.presence=!1,_r.active.presence=!1,LT.validateObject(e,_r)}a(Oz,"alterUserValidation");function bz(e){return _r.password.presence=!1,_r.username.presence=!0,_r.role.presence=!1,_r.active.presence=!1,LT.validateObject(e,_r)}a(bz,"dropUserValidation");PC.exports={addUserValidation:Az,alterUserValidation:Oz,dropUserValidation:bz}});var Ze=g((jme,vC)=>{"use strict";var{platform:Qme}=require("os"),Nz="nats-server.zip",PT="nats-server",yz=process.platform==="win32"?`${PT}.exe`:PT,Iz=/^[^\s.,*>]+$/,UC="__request__",wz=a(e=>`${e}.${UC}`,"REQUEST_SUBJECT"),Cz={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Dz={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Lz={HUB:"hub.pid",LEAF:"leaf.pid"},Pz={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Mz={SUCCESS:"success",ERROR:"error"},Uz={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},vz={TXN:"txn",MSGID:"msgid"},Ec={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Bz={[Ec.ERR]:1,[Ec.WRN]:2,[Ec.INF]:3,[Ec.DBG]:4,[Ec.TRC]:5},Hz={debug:"-D",trace:"-DVV"};vC.exports={NATS_SERVER_ZIP:Nz,NATS_SERVER_NAME:PT,NATS_BINARY_NAME:yz,PID_FILES:Lz,NATS_CONFIG_FILES:Dz,SERVER_SUFFIX:Pz,NATS_TERM_CONSTRAINTS_RX:Iz,REQUEST_SUFFIX:UC,UPDATE_REMOTE_RESPONSE_STATUSES:Mz,CLUSTER_STATUS_STATUSES:Uz,REQUEST_SUBJECT:wz,SUBJECT_PREFIXES:vz,MSG_HEADERS:Cz,LOG_LEVELS:Ec,LOG_LEVEL_FLAGS:Hz,LOG_LEVEL_HIERARCHY:Bz}});var MT=g((Jme,BC)=>{"use strict";var xz={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 Jl(e){ai&&Ky(e),Cs&&process.stdout.write(e)}a(Jl,"logStdOut");function of(e){ai&&Ky(e),Cs&&process.stderr.write(e)}a(of,"logStdErr");function Ky(e){GK(),lc?Qo.appendFileSync(lc,e):Ql.log(e)}a(Ky,"logToFile");function fS(){try{Qo.closeSync(lc)}catch{}lc=null}a(fS,"closeLogFile");function GK(){if(!lc){try{if(!jl)debugger;lc=Qo.openSync(jl,"a")}catch(e){Ql.error(e)}setTimeout(()=>{fS()},vK).unref()}}a(GK,"openLogFile");function sf(...e){yr[Nr]<=yr.info&&Jl(li("info",e))}a(sf,"info");function ES(...e){yr[Nr]<=yr.trace&&Jl(li("trace",e))}a(ES,"trace");function zl(...e){yr[Nr]<=yr.error&&of(li("error",e))}a(zl,"error");function hS(...e){yr[Nr]<=yr.debug&&Jl(li("debug",e))}a(hS,"debug");function Wy(...e){yr[Nr]<=yr.notify&&Jl(li("notify",e))}a(Wy,"notify");function Qy(...e){yr[Nr]<=yr.fatal&&of(li("fatal",e))}a(Qy,"fatal");function pS(...e){yr[Nr]<=yr.warn&&of(li("warn",e))}a(pS,"warn");function qK(e,t,...r){t===Vy.STDERR?of(li(e,r)):Jl(li(e,r))}a(qK,"logCustomLevel");function FK(){let e;try{e=DK.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(dS,"utility/hdb_boot_properties.file")),t}a(FK,"getPropsFilePath");function kK(e){Nr=e}a(kK,"setLogLevel");function qy(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(qy,"autoCastBoolean");function VK(e){try{if(e.includes("config/settings.js")){let o=ky(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=Fy.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 $K(){try{let e=Fy.parseDocument(Qo.readFileSync(UK,"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($K,"getDefaultConfig");function YK(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}a(YK,"AuthAuditLog")});var SS=R((Jhe,jy)=>{"use strict";var KK=require("util"),WK=require("path"),QK=require("child_process"),jK=KK.promisify(QK.execFile),zK=1e3*1e3*10;jy.exports={findPs:JK};async function JK(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await jK("ps",["wwxo",`pid,${r}`],{maxBuffer:zK});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:WK.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(JK,"findPs")});var _t=R((Zhe,Jy)=>{"use strict";var XK="__dbis__",ZK="__txns__",eW="__environment_name__",tW="__dbi_defintion__",rW={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"},nW=["__createdtime__","__updatedtime__"],sW="\uFFFF",zy={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},iW=Object.values(zy);Jy.exports={AUDIT_STORE_NAME:ZK,INTERNAL_DBIS_NAME:XK,DBI_DEFINITION_NAME:tW,SEARCH_TYPES:rW,TIMESTAMP_NAMES:nW,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:eW,TRANSACTIONS_DBI_NAMES_ENUM:zy,TRANSACTIONS_DBIS:iW,OVERFLOW_MARKER:sW}});var nn=R((epe,oI)=>{"use strict";var Xy=D(),Zy=_t(),eI={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},tI=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),rI={500:tI("There was an error processing your request."),400:"Invalid request"},oW=rI[eI.INTERNAL_SERVER_ERROR],aW={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.`},cW={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},lW={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"},uW={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"},_W={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Xy.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 ${Xy.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"},nI={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"},dW={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."},fW={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`},EW={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"},hW={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},pW={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`},sI={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.`},iI={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}`},mW={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."},SW={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},TW={...nI,...lW,...aW,...dW,...fW,...EW,...hW,...pW,..._W,...sI,...iI,...mW,...SW,...cW};oI.exports={CHECK_LOGS_WRAPPER:tI,HDB_ERROR_MSGS:TW,DEFAULT_ERROR_MSGS:rI,DEFAULT_ERROR_RESP:oW,HTTP_STATUS_CODES:eI,LMDB_ERRORS_ENUM:uW,AUTHENTICATION_ERROR_MSGS:nI,VALIDATION_ERROR_MSGS:sI,ITC_ERRORS:iI}});var ie=R((rpe,lI)=>{"use strict";var uc=nn(),gW=k(),RW=D(),af=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,aI),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&&gW[s](i)}},TS=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}},gS=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function aI(e,t,r,n=RW.LOG_LEVELS.ERROR,s=null,i=!1){if(cI(e))return e;let o=new af(e,t,r,n,s);return i&&delete o.stack,o}a(aI,"handleHDBError");function cI(e){return e.__proto__.constructor.name===af.name}a(cI,"isHDBError");lI.exports={isHDBError:cI,handleHDBError:aI,ClientError:TS,ServerError:gS,hdb_errors:uc}});var Je=R((spe,pI)=>{"use strict";var ru=D(),AW=Y(),Ir=X(),nu=require("path"),OW=require("minimist"),uI=require("fs-extra"),_I=require("lodash");Ir.initSync();var{CONFIG_PARAMS:ro,DATABASES_PARAM_CONFIG:Xl,SYSTEM_SCHEMA_NAME:cf}=ru,Zl,eu,tu;function dI(){if(Zl!==void 0)return Zl;if(Ir.getHdbBasePath()!==void 0)return Zl=Ir.get(ro.STORAGE_PATH)||nu.join(Ir.getHdbBasePath(),ru.DATABASES_DIR_NAME),Zl}a(dI,"getBaseSchemaPath");function fI(){if(eu!==void 0)return eu;if(Ir.getHdbBasePath()!==void 0)return eu=hI(cf),eu}a(fI,"getSystemSchemaPath");function EI(){if(tu!==void 0)return tu;if(Ir.getHdbBasePath()!==void 0)return tu=Ir.get(ru.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||nu.join(Ir.getHdbBasePath(),ru.TRANSACTIONS_DIR_NAME),tu}a(EI,"getTransactionAuditStoreBasePath");function bW(e,t){let r=Ir.get(ro.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||nu.join(EI(),e.toString())}a(bW,"getTransactionAuditStorePath");function hI(e,t){e=e.toString(),t=t&&t.toString();let r=Ir.get(ru.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||nu.join(dI(),e)}a(hI,"getSchemaPath");function NW(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,OW(process.argv));let n=r[ro.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!AW.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]?.[Xl.PATH];if(_)return _I.set(l,[cf,Xl.TABLES,t,Xl.PATH],_),Ir.setProperty(ro.DATABASES,l),_;let u=c?.[Xl.PATH];if(u)return _I.set(l,[cf,Xl.PATH],u),Ir.setProperty(ro.DATABASES,l),u}}let s=r[ro.STORAGE_PATH.toUpperCase()];if(s){if(!uI.pathExistsSync(s))throw new Error(s+" does not exist");let i=nu.join(s,e);return uI.mkdirsSync(i),Ir.setProperty(ro.STORAGE_PATH,s),i}return fI()}a(NW,"initSystemSchemaPaths");function yW(){Zl=void 0,eu=void 0,tu=void 0}a(yW,"resetPaths");pI.exports={getBaseSchemaPath:dI,getSystemSchemaPath:fI,getTransactionAuditStorePath:bW,getTransactionAuditStoreBasePath:EI,getSchemaPath:hI,initSystemSchemaPaths:NW,resetPaths:yW}});var wr=R((cpe,RI)=>{"use strict";var IW=nn().LMDB_ERRORS_ENUM,ope=require("lmdb"),wW=_t(),ape=require("buffer").Buffer,{OVERFLOW_MARKER:mI,MAX_SEARCH_KEY_LENGTH:lf}=wW,SI=["number","string","symbol","boolean","bigint"];function CW(e){if(e=e?.primaryStore||e,!e)throw new Error(IW.ENV_REQUIRED)}a(CW,"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 DW(e){return e instanceof Date?e.valueOf():e}a(DW,"convertKeyValueToWrite");function PW(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(SI.includes(typeof e))return e.length>lf?[e.slice(0,lf)+mI]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(SI.includes(typeof i))i.length>lf?r.push(i.slice(0,lf)+mI):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(PW,"getIndexedValues");var uf=0,TI=0;function gI(){TI=Date.now()-performance.now()}a(gI,"adjustStartTime");gI();var MW=6e4;setInterval(gI,MW).unref();function UW(){let e=performance.now()+TI;return e>uf?(uf=e,e):(uf+=488e-6,uf)}a(UW,"getNextMonotonicTime");RI.exports={validateEnv:CW,stringifyData:LW,convertKeyValueToWrite:DW,getNextMonotonicTime:UW,getIndexedValues:PW}});var su=R((upe,AI)=>{"use strict";var vW=D().OPERATIONS_ENUM,RS=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=vW.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};AI.exports=RS});var iu=R((fpe,yI)=>{"use strict";var dpe=su(),_f=D(),AS=Y(),OI=k(),BW=require("uuid"),{handleHDBError:df,hdb_errors:HW}=ie(),{HDB_ERROR_MSGS:ff,HTTP_STATUS_CODES:Ef}=HW;yI.exports=bI;function bI(e,t,r){for(let s=0;s<t.length;s++)NI(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];xW(i,r,e.operation)}}a(bI,"processRows");bI.validateAttribute=NI;function NI(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(AS.isEmptyOrZeroLength(e)||AS.isEmpty(e.trim()))throw df(new Error,ff.ATTR_NAME_NULLISH_ERR,Ef.BAD_REQUEST,void 0,void 0,!0)}a(NI,"validateAttribute");function xW(e,t,r){if(!e.hasOwnProperty(t)||AS.isEmptyOrZeroLength(e[t])){if(r===_f.OPERATIONS_ENUM.INSERT||r===_f.OPERATIONS_ENUM.UPSERT){e[t]=BW.v4();return}throw OI.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 OI.error(e),df(new Error,ff.HASH_VAL_LENGTH_ERR,Ef.BAD_REQUEST,void 0,void 0,!0)}a(xW,"validateHash")});var II,ts,OS,ou=be(()=>{II=require("events"),ts=class extends II.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new OS;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)}},OS=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={};Ve(jo,{server:()=>dt});var wI,dt,Cr=be(()=>{wI=require("../index"),dt={};(0,wI._assignPackageExport)("server",dt)});var yS={};Ve(yS,{loadGQLSchema:()=>FW,start:()=>NS,startOnMainThread:()=>qW});function NS({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 P=function(v){if(v.kind==="NonNullType"){let W=P(v.type);return W.nullable=!1,W}if(v.kind==="ListType")return{type:"array",elements:P(v.type)};let U={type:v.name?.value};return Object.defineProperty(U,"location",{value:v.loc.startToken}),U};a(P,"getProperty");let T=S.name.value,g=[],N={table:null,database:null,properties:g};E.set(T,N);for(let v of S.directives){if(v.name.value==="table"){for(let q of v.arguments)N[q.name.value]=q.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=T),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,f.push(N)}if(v.name.value==="sealed"&&(N.sealed=!0),v.name.value==="export"){N.export=!0;for(let q of v.arguments)q.name.value==="name"&&(N.export={name:q.value.value})}}let A=!1;for(let v of S.fields){let q=P(v.type);q.name=v.name.value,g.push(q);for(let U of v.directives)if(U.name.value==="primaryKey")A?console.warn("Can not define two attributes as a primary key"):(q.isPrimaryKey=!0,A=!0);else if(U.name.value==="indexed")q.indexed=!0;else if(U.name.value==="relationship"){let W={};for(let z of U.arguments)W[z.name.value]=z.value.value;q.relationship=W}else if(U.name.value==="createdTime")q.assignCreatedTime=!0;else if(U.name.value==="updatedTime")q.assignUpdatedTime=!0;else if(U.name.value==="expiresAt")q.expiresAt=!0;else if(U.name.value==="allow"){let W=q.authorizedRoles=[];for(let z of U.arguments)z.name.value==="role"&&W.push(z.value.value)}}N.type=T,T==="Query"&&(h=N)}function m(S){let T=E.get(S.type);T?(Object.defineProperty(S,"properties",{value:T.properties}),Object.defineProperty(S,"definition",{value:T})):S.type==="array"?m(S.elements):GW.includes(S.type)||(0,CI.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 T of S.properties)m(T);for(let S of f)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,bS.dirname)(n),S.tableClass):i.set((0,bS.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var bS,CI,GW,qW,FW,LI=be(()=>{bS=require("path");Re();CI=x(rt()),GW=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(NS,"start");qW=NS,FW=NS({ensureTable:St}).handleFile});async function hf(e){let t=(0,MI.pathToFileURL)(e).toString();return kW?(au||(au=VW(YW)),(await(await au).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"}),au=new Compartment({console,Math,Date,fetch:$W,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,PI.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,DI.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),au}function $W(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 YW(){return{Resource:tr,tables:sn}}var DI,PI,MI,kW,au,IS=be(()=>{Mn();Re();DI=require("fs/promises"),PI=require("path"),MI=require("url"),kW=!1;a(hf,"secureImport");a(VW,"getCompartment");a($W,"secureOnlyFetch");a(YW,"getGlobalVars")});var CS={};Ve(CS,{handleFile:()=>KW});async function KW(e,t,r,n){let s=new Map,i=await hf(r);c(i.default)&&n.set((0,wS.dirname)(t),i.default),o(i,(0,wS.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 wS,UI=be(()=>{IS();wS=require("path");a(KW,"handleFile")});var DS={};Ve(DS,{start:()=>WW});function WW({resources:e}){e.set("login",LS),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var LS,vI=be(()=>{Mn();a(WW,"start");LS=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 kI={};Ve(kI,{parse:()=>MS,streamAsJSON:()=>cu,stringify:()=>zo});function cu(e){return new PS({value:e})}function BI(e){return console.error(e),JSON.stringify(e.toString())}function HI(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===qI)return FI(e);if(t.resolution)return t.resolution.then(()=>zo(e));throw t}}function FI(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+=FI(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 MS(e){return zW.test(e)?QW.parse(e):JSON.parse(e)}var xI,GI,QW,jW,qI,PS,zW,US=be(()=>{xI=require("stream"),GI=x(require("json-bigint-fixes")),QW=(0,GI.default)({useNativeBigInt:!0}),jW=1e4,qI={};BigInt.prototype.toJSON=function(){throw qI};a(cu,"streamAsJSON");PS=class extends xI.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),BI)}catch(s){yield BI(s)}else yield zo(t)}else yield zo(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);HI(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>jW?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 HI(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(BI,"handleError");a(HI,"when");a(zo,"stringify");a(FI,"jsStringify");zW=/[[,:]\s*-?\d{16,}/;a(MS,"parse")});var tw=R((Cpe,ew)=>{"use strict";var vS=require("recursive-iterator"),JW=require("alasql"),BS=require("clone"),VI=Y(),{handleHDBError:$I,hdb_errors:XW}=ie(),{HDB_ERROR_MSGS:YI,HTTP_STATUS_CODES:KI}=XW,{getDatabases:ZW}=(Re(),ae($e)),eQ=["DISTINCT_ARRAY"],WI=Symbol("validateTables"),HS=Symbol("validateTable"),wpe=Symbol("getAllColumns"),QI=Symbol("validateAllColumns"),pf=Symbol("findColumn"),jI=Symbol("validateOrderBy"),lu=Symbol("validateSegment"),xS=Symbol("validateColumn"),zI=Symbol("setColumnsForTable"),JI=Symbol("checkColumnsForAsterisk"),XI=Symbol("validateGroupBy"),ZI=Symbol("hasColumns"),GS=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[WI](),this[JI](),this[QI]()}[WI](){if(this[ZI]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[HS](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[HS](t.table)})}}[ZI](){let t=!1,r=new vS(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[HS](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=ZW();if(!r[t.databaseid])throw $I(new Error,YI.SCHEMA_NOT_FOUND(t.databaseid),KI.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw $I(new Error,YI.TABLE_NOT_FOUND(t.databaseid,t.tableid),KI.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=BS(s);i.table=BS(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 vS(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[zI](r.tableid)}[zI](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new JW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[QI](){this[lu](this.statement.columns,!1),this[lu](this.statement.joins,!1),this[lu](this.statement.where,!1),this[XI](this.statement.group,!1),this[lu](this.statement.order,!0)}[lu](t,r){if(!t)return;let n=new vS(t),s=[];for(let{node:i,path:o}of n)!VI.isEmpty(i)&&!VI.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[jI](i):s.push(this[xS](i)));return s}[XI](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&eQ.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=BS(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`}[jI](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[xS](t)}[xS](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]}};ew.exports=GS});var nw=R((Dpe,rw)=>{"use strict";var qS=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")}};rw.exports=qS});var iw=R((Mpe,sw)=>{"use strict";var FS=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};sw.exports=FS});var lw={};Ve(lw,{HAS_EXPIRATION:()=>QS,LAST_TIMESTAMP_PLACEHOLDER:()=>du,LOCAL_TIMESTAMP:()=>tQ,METADATA:()=>uu,NO_TIMESTAMP:()=>VS,PENDING_LOCAL_TIME:()=>jS,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>WS,RecordEncoder:()=>KS,TIMESTAMP_ASSIGN_LAST:()=>nQ,TIMESTAMP_ASSIGN_NEW:()=>aw,TIMESTAMP_ASSIGN_PREVIOUS:()=>cw,TIMESTAMP_PLACEHOLDER:()=>mf,TIMESTAMP_RECORD_PREVIOUS:()=>$S,getUpdateRecord:()=>zS,handleLocalTimeForGets:()=>Rf});function iQ(){return _u[0]=_u[0]^64,rQ.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?.[uu];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?.[uu]>=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?.[uu];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 zS(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",E,f){if(E||l==null?_c=i?.localTime?$S|cw:VS:_c=l?i?.localTime?$S|16384:aw|16384:VS,u>0&&(c|=QS),Tf=c,YS=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 T=_?.user?.username;if(f&&(Sf=e.encoder.encode(f)),E&&i?.localTime){let g=i?.localTime,N=r.get(g);if(N){let A=Kt(N).previousLocalTime;return r.put(g,gf(o,t,n,A,T,d,Sf),{ifVersion:m}),S}}r.put(du,gf(o,t,n,i?.localTime?1:0,T,d,Sf),{append:d!=="invalidate",instructedWrite:!0,ifVersion:m})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var ow,kS,mf,du,WS,tQ,uu,_u,rQ,VS,aw,nQ,cw,$S,QS,jS,sQ,Sf,_c,Tf,YS,KS,Jo,fu=be(()=>{ow=require("msgpackr");no();kS=x(k()),mf=new Uint8Array([1,1,1,1,4,64,0,0]),du=new Uint8Array([1,1,1,1,1,0,0,0]),WS=new Uint8Array([1,1,1,1,3,64,0,0]),tQ=Symbol("local-timestamp"),uu=Symbol("metadata"),_u=new Uint8Array(8),rQ=new DataView(_u.buffer,0,8),VS=0,aw=0,nQ=1,cw=3,$S=4,QS=16,jS=1,_c=0,Tf=-1,YS=0,KS=class extends ow.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=YS;c>=0&&(i+=2,Tf=-1,l&&(i+=8,YS=0));let _=sQ=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(_u,0,c),c+=8;else for(let d=0;d<8;d++)_u[d]=t[c++];l=iQ(),i=t[c]}let _;i<32&&(o=i,c+=2,o&QS&&(_=(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,[uu]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(iQ,"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?(kS.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):kS.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(zS,"getUpdateRecord")});var Eu=R((xpe,_w)=>{"use strict";var uw=X(),oQ=D(),{RecordEncoder:aQ}=(fu(),ae(lw)),Hpe=require("fs");uw.initSync();var cQ=uw.get(oQ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,JS=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=cQ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:aQ})}};_w.exports=JS});var hu=R((qpe,dw)=>{"use strict";var on=X(),Un=D();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)}};dw.exports=Af;Af.MAX_DBS=1e4});var Ye=R((kpe,Aw)=>{"use strict";var ZS=require("lmdb"),rs=require("fs-extra"),an=require("path"),Of=wr(),hw=k(),Lr=nn().LMDB_ERRORS_ENUM,bf=iw(),eT=Eu(),pw=hu(),so=_t(),fw=D(),{table:lQ,resetDatabases:uQ}=(Re(),ae($e)),Ew=X(),ns=so.INTERNAL_DBIS_NAME,mw=so.DBI_DEFINITION_NAME,_Q="data.mdb",dQ="lock.mdb",pu=".mdb",fQ="-lock",XS=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(Lr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Lr.ENV_NAME_REQUIRED)}a(Nf,"pathEnvNameValidation");async function tT(e,t,r=!0){try{await rs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Lr.INVALID_BASE_PATH):n}try{let n=an.join(e,t+pu);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,_Q),rs.constants.R_OK|rs.constants.F_OK),an.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Lr.INVALID_ENVIRONMENT)}else throw new Error(Lr.INVALID_ENVIRONMENT);throw n}}a(tT,"validateEnvironmentPath");function yf(e,t){if(Of.validateEnv(e),t===void 0)throw new Error(Lr.DBI_NAME_REQUIRED)}a(yf,"validateEnvDBIName");async function EQ(e,t,r=!1,n=!1){Nf(e,t);let s=an.basename(e);t=t.toString();let i=Ew.get(fw.CONFIG_PARAMS.DATABASES);i||Ew.setProperty(fw.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await tT(e,t,n),Sw(e,t,r)}catch(o){if(o.message===Lr.INVALID_ENVIRONMENT){let c=an.join(e,t);await rs.mkdirp(n?c:e);let l=new pw(n?c:c+pu,!1),_=ZS.open(l);_.dbis=Object.create(null);let u=new eT(!1);_.openDB(ns,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=rT(e,t,r);return _[so.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(EQ,"createEnvironment");async function hQ(e,t,r,n=!0){Nf(e,t),t=t.toString();let s=an.join(e,t);return lQ({table:t,database:an.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(hQ,"copyEnvironment");async function Sw(e,t,r=!1){Nf(e,t),t=t.toString();let n=rT(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 tT(e,t),i=an.join(e,t+pu),o=s!=i,c=new pw(s,o),l=ZS.open(c);l.dbis=Object.create(null);let _=gw(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(Sw,"openEnvironment");async function pQ(e,t,r=!1){Nf(e,t),t=t.toString();let n=an.join(e,t+pu),s=await tT(e,t);if(global.lmdb_map!==void 0){let i=rT(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Tw(o),delete global.lmdb_map[i]}}await rs.remove(s),await rs.remove(s===n?s+fQ:an.join(an.dirname(s),dQ))}a(pQ,"deleteEnvironment");async function Tw(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(Tw,"closeEnvironment");function rT(e,t,r=!1){let s=`${an.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(rT,"getCachedEnvironmentName");function mQ(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{hw.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(mQ,"listDBIDefinitions");function gw(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(gw,"listDBIs");function SQ(e,t){let n=vn(e,ns).getEntry(t),s=new bf;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{hw.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(SQ,"getDBIDefinition");function Rw(e,t,r,n=!r){if(yf(e,t),t=t.toString(),t===ns)throw new Error(Lr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return vn(e,t)}catch(s){if(s.message===Lr.DBI_DOES_NOT_EXIST){let i=new eT(r,n===!0),o=e.openDB(t,i),c=new bf(r===!0,n);return o[mw]=c,vn(e,ns).putSync(t,c),e.dbis[t]=o,o}throw s}}a(Rw,"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=SQ(e,t):r=new bf,r===void 0)throw new Error(Lr.DBI_DOES_NOT_EXIST);let n;try{let s=new eT(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(Lr.DBI_DOES_NOT_EXIST):s}return n[mw]=r,e.dbis[t]=n,n}a(vn,"openDBI");function TQ(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(TQ,"statDBI");async function gQ(e,t){try{let r=an.join(e,t+pu);return(await rs.stat(r)).size}catch{throw new Error(Lr.INVALID_ENVIRONMENT)}}a(gQ,"environmentDataSize");function RQ(e,t){if(yf(e,t),t=t.toString(),t===ns)throw new Error(Lr.CANNOT_DROP_INTERNAL_DBIS_NAME);vn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],vn(e,ns).removeSync(t)}a(RQ,"dropDBI");function AQ(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===Lr.DBI_DOES_NOT_EXIST)Rw(e,i,i!==t,i===t),n=!0;else throw o}}n&&uQ()}a(AQ,"initializeDBIs");Aw.exports={openDBI:vn,openEnvironment:Sw,createEnvironment:EQ,listDBIs:gw,listDBIDefinitions:mQ,createDBI:Rw,dropDBI:RQ,statDBI:TQ,deleteEnvironment:pQ,initializeDBIs:AQ,TransactionCursor:XS,environmentDataSize:gQ,copyEnvironment:hQ,closeEnvironment:Tw}});var bw=R(($pe,Ow)=>{"use strict";var nT=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};Ow.exports=nT});var yw=R((Kpe,Nw)=>{"use strict";var sT=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}};Nw.exports=sT});var ww=R((Qpe,Iw)=>{"use strict";var iT=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};Iw.exports=iT});var Zo=R((Zpe,Dw)=>{"use strict";var OQ=Ye(),bQ=bw(),NQ=yw(),yQ=ww(),Ls=wr(),mu=nn().LMDB_ERRORS_ENUM,IQ=_t(),ui=D(),wQ=Y(),CQ=require("uuid"),zpe=require("lmdb"),{handleHDBError:LQ,hdb_errors:DQ}=ie(),{OVERFLOW_MARKER:Jpe,MAX_SEARCH_KEY_LENGTH:Xpe}=IQ,Cw=X();Cw.initSync();var If=Cw.get(ui.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),oT=ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Xo=ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function PQ(e,t,r,n,s=Ls.getNextMonotonicTime()){uT(e,t,r,n),aT(e,t,r);let i=new bQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];Lw(_,!0,s);let u=MQ(e,t,r,_),d=_[t];o.push(u),c.push(d)}return cT(o,c,n,i,s)}a(PQ,"insertRecords");function MQ(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=Ls.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(MQ,"insertRecord");function UQ(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(UQ,"removeSkippedRecords");function Lw(e,t,r){let n=r>0;(n||!Number.isInteger(e[Xo]))&&(e[Xo]=r||(r=Ls.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[oT]))&&(e[oT]=r||Ls.getNextMonotonicTime()):delete e[oT]}a(Lw,"setTimestamps");function aT(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),OQ.initializeDBIs(e,t,r)}a(aT,"initializeTransaction");async function vQ(e,t,r,n,s=Ls.getNextMonotonicTime()){uT(e,t,r,n),aT(e,t,r);let i=new NQ,o=[],c=[],l=[];for(let _=0;_<n.length;_++){let u=n[_],d=u[t],E;try{E=lT(e,t,u,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(E),l.push(d)}return cT(c,l,n,i,s,o)}a(vQ,"updateRecords");async function BQ(e,t,r,n,s=Ls.getNextMonotonicTime()){try{uT(e,t,r,n)}catch(l){throw LQ(l,l.message,DQ.HTTP_STATUS_CODES.BAD_REQUEST)}aT(e,t,r);let i=new yQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l],u;wQ.isEmpty(_[t])?(u=CQ.v4(),_[t]=u):u=_[t];let d=lT(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return cT(o,c,n,i,s)}a(BQ,"upsertRecords");async function cT(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||Ls.getNextMonotonicTime(),UQ(r,i),n}a(cT,"finalizeWrite");function lT(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(Lw(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 T=_[h];if(typeof m=="function"){let N=m([[_]]);Array.isArray(N)&&(m=N[0][ui.FUNC_VAL],r[h]=m)}if(m===T)continue;let g=Ls.getIndexedValues(T);if(g){If&&S.prefetch(g.map(N=>({key:N,value:n})),wf);for(let N=0,A=g.length;N<A;N++)S.remove(g[N],n)}if(g=Ls.getIndexedValues(m),g){If&&S.prefetch(g.map(N=>({key:N,value:n})),wf);for(let N=0,A=g.length;N<A;N++)S.put(g[N],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:lT(e,t,r,n,s,i,o))}a(lT,"updateUpsertRecord");function HQ(e,t,r){if(Ls.validateEnv(e),t===void 0)throw new Error(mu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(mu.WRITE_ATTRIBUTES_REQUIRED):new Error(mu.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(HQ,"validateBasic");function uT(e,t,r,n){if(HQ(e,t,r),!Array.isArray(n))throw n===void 0?new Error(mu.RECORDS_REQUIRED):new Error(mu.RECORDS_MUST_BE_ARRAY)}a(uT,"validateWrite");function wf(){}a(wf,"noop");Dw.exports={insertRecords:PQ,updateRecords:vQ,upsertRecords:BQ}});var _i=R((tme,xQ)=>{xQ.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,Uw)=>{"use strict";var Mw=Y(),Pw=D(),dc=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ds=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"}},GQ=Ds.alternatives(Ds.string().min(1).max(io.schema_length.maximum).pattern(dc).messages({"string.pattern.base":"{:#label} "+io.schema_format.message}),Ds.number(),Ds.array()).required(),qQ=Ds.alternatives(Ds.string().min(1).max(io.schema_length.maximum).pattern(dc).messages({"string.pattern.base":"{:#label} "+io.schema_format.message}),Ds.number()),FQ=Ds.alternatives(Ds.string().min(1).max(io.schema_length.maximum).pattern(dc).messages({"string.pattern.base":"{:#label} "+io.schema_format.message}),Ds.number()).required();function kQ(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(kQ,"checkValidTable");function VQ(e,t){return Mw.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(VQ,"validateSchemaExists");function $Q(e,t){let r=t.state.ancestors[0].schema;return Mw.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a($Q,"validateTableExists");function YQ(e,t){return e.toLowerCase()===Pw.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Pw.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(YQ,"validateSchemaName");Uw.exports={common_validators:io,schema_regex:dc,hdb_schema_table:GQ,validateSchemaExists:VQ,validateTableExists:$Q,validateSchemaName:YQ,checkValidTable:kQ,hdb_database:qQ,hdb_table:FQ}});var nt=R((sme,vw)=>{"use strict";var Dr=require("validate.js");Dr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Dr.validators.type.checks[t](e)?null:` must be a '${t}' value`};Dr.validators.type.checks={Object:function(e){return Dr.isObject(e)&&!Dr.isArray(e)},Array:Dr.isArray,Integer:Dr.isInteger,Number:Dr.isNumber,String:Dr.isString,Date:Dr.isDate,Boolean:function(e){return typeof e=="boolean"}};Dr.validators.hasValidFileExt=function(e,t){return Dr.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};vw.exports={validateObject:KQ,validateObjectAsync:WQ,validateBySchema:QQ};function KQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Dr(e,t,{format:"flat"});return r?new Error(r):null}a(KQ,"validateObject");async function WQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Dr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(WQ,"validateObjectAsync");function QQ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(QQ,"validateBySchema")});var Cf=R((ome,Bw)=>{var{common_validators:Ms}=Ps(),Tu=nt(),Su="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 gu(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(gu,"makeAttributesStrings");function jQ(e){return e=gu(e),yt.table.presence=!1,yt.attribute.presence=!1,yt.hash_attribute.presence=!1,Tu.validateObject(e,yt)}a(jQ,"schema_object");function zQ(e){return e=gu(e),yt.table.presence={message:Su},yt.attribute.presence=!1,yt.hash_attribute.presence=!1,Tu.validateObject(e,yt)}a(zQ,"table_object");function JQ(e){return e=gu(e),yt.table.presence={message:Su},yt.attribute.presence=!1,Tu.validateObject(e,yt)}a(JQ,"create_table_object");function XQ(e){return e=gu(e),yt.table.presence={message:Su},yt.attribute.presence={message:Su},yt.hash_attribute.presence=!1,Tu.validateObject(e,yt)}a(XQ,"attribute_object");function ZQ(e){return e=gu(e),yt.table.presence={message:Su},yt.attribute.presence=!1,yt.hash_attribute.presence=!1,Tu.validateObject(e,yt)}a(ZQ,"describe_table");function ej(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(ej,"validateTableResidence");Bw.exports={schema_object:jQ,create_table_object:JQ,table_object:zQ,attribute_object:XQ,describe_table:ZQ,validateTableResidence:ej}});var xw=R((cme,Hw)=>{"use strict";var tj=require("uuid"),_T=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||tj.v4(),this.schema_table=`${this.schema}.${this.table}`}};Hw.exports=_T});var Lf=R((ume,Gw)=>{"use strict";var rj=xw(),dT=class extends rj{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}};Gw.exports=dT});var Fw=R((dme,qw)=>{"use strict";qw.exports=sj;var nj="inserted";function sj(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===nj?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(sj,"returnObject")});var Df=R((Eme,Kw)=>{"use strict";var ij=D(),fT=Ye(),oj=Zo(),{getSystemSchemaPath:aj,getSchemaPath:cj}=Je(),lj=_i(),uj=Cf(),_j=Lf(),dj=Fw(),{handleHDBError:kw,hdb_errors:$w}=ie(),Vw=Y(),{HTTP_STATUS_CODES:fj}=$w,ET=lj.hdb_attribute,Yw=[];for(let e=0;e<ET.attributes.length;e++)Yw.push(ET.attributes[e].attribute);var Ej="inserted";Kw.exports=hj;async function hj(e){let t=uj.attribute_object(e);if(t)throw kw(new Error,t.message,$w.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&Vw.checkGlobalSchemaTable(e.schema,e.table);if(r)throw kw(new Error,r,fj.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Vw.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 _j(e.schema,e.table,e.attribute,e.id);try{let i=await fT.openEnvironment(cj(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}`);fT.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await fT.openEnvironment(aj(),ij.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await oj.insertRecords(o,ET.hash_attribute,Yw,[s]);return dj(Ej,c,{records:[s]},l)}catch(i){throw i}}a(hj,"lmdbCreateAttribute")});var pT=R((pme,Qw)=>{var{hdb_table:pj,hdb_database:Ww}=Ps(),mj=nt(),hT=require("joi"),Sj={undefined:"undefined",null:"null"},Tj=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||Sj[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"),gj=hT.object({database:Ww,schema:Ww,table:pj,records:hT.array().items(hT.object().custom(Tj)).required()});Qw.exports=function(e){return mj.validateBySchema(e,gj)}});var Ru=R((Tme,zw)=>{"use strict";var di=Y(),jw=k(),Sme=pT(),{getDatabases:Rj}=(Re(),ae($e)),{ClientError:ea}=ie();zw.exports=Aj;function Aj(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=Rj()[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 jw.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 jw.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(Aj,"insertUpdateValidate")});var Xw=R((Rme,Jw)=>{"use strict";var mT=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};Jw.exports=mT});var tC=R((Ome,eC)=>{"use strict";var ST=Ye(),Oj=k(),Zw=nn().LMDB_ERRORS_ENUM;eC.exports=bj;async function bj(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 ST.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 ST.closeEnvironment(global.lmdb_map[n]),await ST.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){Oj.error(t)}}a(bj,"cleanLMDBMap")});var fi=R((Nme,iC)=>{"use strict";var Au=require("crypto"),Nj=X(),{CONFIG_PARAMS:yj}=D(),nC="aes-256-cbc",Ij=32,wj=16,TT=64,sC=32,Cj=TT+sC,rC=new Map;iC.exports={encrypt:Lj,decrypt:Dj,createNatsTableStreamName:Pj};function Lj(e){let t=Au.randomBytes(Ij),r=Au.randomBytes(wj),n=Au.createCipheriv(nC,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 Dj(e){let t=e.substr(0,TT),r=e.substr(TT,sC),n=e.substr(Cj,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Au.createDecipheriv(nC,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Dj,"decrypt");function Pj(e,t){let r=Nj.get(yj.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=rC.get(r);return n||(n=Au.createHash("md5").update(r).digest("hex"),rC.set(r,n)),n}a(Pj,"createNatsTableStreamName")});var oo=R((wme,aC)=>{"use strict";var Ime=ur(),Ou=k(),oC=Cf(),Mj=fi(),Pf=Y(),{handleHDBError:Mf,hdb_errors:Uj}=ie(),{HDB_ERROR_MSGS:Uf,HTTP_STATUS_CODES:gT}=Uj,vj=X();vj.initSync();var{getDatabases:RT}=(Re(),ae($e)),Bj=require("fs-extra");aC.exports={describeAll:Hj,describeTable:vf,describeSchema:xj};async function Hj(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=RT(),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){Ou.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 Ou.error("Got an error in describeAll"),Ou.error(t),Mf(new Error,Uf.DESCRIBE_ALL_ERR)}}a(Hj,"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=oC.describe_table(e);if(i)throw i;let c=RT()[r];if(!c)throw Mf(new Error,Uf.SCHEMA_NOT_FOUND(e.schema),gT.NOT_FOUND);let l=c[n];if(!l)throw Mf(new Error,Uf.TABLE_NOT_FOUND(e.schema,e.table),gT.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 Bj.stat(l.primaryStore.env.path)).size}catch(f){Ou.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=Mj.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){Ou.warn(`unable to stat table dbi due to ${f}`)}return E}a(vf,"descTable");async function xj(e){Pf.transformReq(e);let t=oC.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=RT()[n];if(!i)throw Mf(new Error,Uf.SCHEMA_NOT_FOUND(e.schema),gT.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(xj,"describeSchema")});var Bn=R((Pme,dC)=>{var Gj=_i(),{callbackify:lC,promisify:qj}=require("util"),{getDatabases:uC}=(Re(),ae($e));dC.exports={setSchemaDataToGlobal:cC,getTableSchema:Fj,getSystemSchema:kj,setSchemaDataToGlobalAsync:qj(cC)};var _C=oo(),Lme=lC(_C.describeAll),Dme=lC(_C.describeTable);function cC(e){global.hdb_schema=uC(),e&&e()}a(cC,"setSchemaDataToGlobal");function Fj(e,t,r){let n=uC()[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(Fj,"getTableSchema");function kj(){return Gj}a(kj,"getSystemSchema")});var Pr=R((Ume,pC)=>{"use strict";var Hf=pT(),rr=Y(),Vj=require("util"),xf=Hn(),$j=Bn(),fC=k(),{handleHDBError:ta,hdb_errors:Yj}=ie(),{HTTP_STATUS_CODES:ra}=Yj,Kj=Vj.promisify($j.getTableSchema),Wj="updated",EC="inserted",hC="upserted";pC.exports={insert:jj,update:zj,upsert:Jj,validation:Qj,flush:Xj};async function Qj(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 Kj(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 fC.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 fC.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(Qj,"validation");async function jj(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(EC,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(jj,"insertData");async function zj(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(Wj,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(zj,"updateData");async function Jj(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(hC,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(Jj,"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===EC?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===hC?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Bf,"returnObject");function Xj(e){return rr.transformReq(e),xf.flush(e.schema,e.table)}a(Xj,"flush")});var OT=R((Bme,TC)=>{var Zj=nt(),AT=require("joi"),{hdb_table:ez,hdb_database:mC}=Ps(),SC={schema:mC,database:mC,table:ez},tz={date:AT.date().iso().required()},rz={timestamp:AT.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};TC.exports=function(e,t){let r=t==="timestamp"?{...SC,...rz}:{...SC,...tz},n=AT.object(r);return Zj.validateBySchema(e,n)}});var AC=R((Hme,RC)=>{var nz=nt(),bT=require("joi"),{hdb_table:sz,hdb_database:gC}=Ps(),iz=bT.object({schema:gC,database:gC,table:sz,hash_values:bT.array().required(),ids:bT.array()});RC.exports=function(e){return nz.validateBySchema(e,iz)}});var wT=R((xme,OC)=>{"use strict";var NT=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}},yT=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}},IT=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};OC.exports={InsertObject:NT,NoSQLSeachObject:yT,DeleteResponseObject:IT}});var ia=R((qme,wC)=>{"use strict";var NC=OT(),oz=AC(),na=Y(),bC=require("moment"),yC=k(),{promisify:az,callbackify:cz}=require("util"),sa=D(),lz=Bn(),CT=az(lz.getTableSchema),LT=Hn(),{DeleteResponseObject:uz}=wT(),{handleHDBError:ao,hdb_errors:_z}=ie(),{HDB_ERROR_MSGS:Gf,HTTP_STATUS_CODES:co}=_z,dz="records successfully deleted",fz=cz(IC);wC.exports={delete:fz,deleteRecord:IC,deleteFilesBefore:Ez,deleteAuditLogsBefore:hz};async function Ez(e){let t=NC(e,"date");if(t)throw ao(t,t.message,co.BAD_REQUEST,void 0,void 0,!0);if(na.transformReq(e),!bC(e.date,bC.ISO_8601).isValid())throw ao(new Error,Gf.INVALID_DATE,co.BAD_REQUEST,sa.LOG_LEVELS.ERROR,Gf.INVALID_DATE,!0);let n=na.checkSchemaTableExist(e.schema,e.table);if(n)throw ao(new Error,n,co.NOT_FOUND,sa.LOG_LEVELS.ERROR,n,!0);let s=await LT.deleteRecordsBefore(e);if(await CT(e.schema,e.table),yC.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(Ez,"deleteFilesBefore");async function hz(e){let t=NC(e,"timestamp");if(t)throw ao(t,t.message,co.BAD_REQUEST,void 0,void 0,!0);if(na.transformReq(e),isNaN(e.timestamp))throw ao(new Error,Gf.INVALID_VALUE("Timestamp"),co.BAD_REQUEST,sa.LOG_LEVELS.ERROR,Gf.INVALID_VALUE("Timestamp"),!0);let r=na.checkSchemaTableExist(e.schema,e.table);if(r)throw ao(new Error,r,co.NOT_FOUND,sa.LOG_LEVELS.ERROR,r,!0);let n=await LT.deleteAuditLogsBefore(e);return await CT(e.schema,e.table),yC.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(hz,"deleteAuditLogsBefore");async function IC(e){e.ids&&(e.hash_values=e.ids);let t=oz(e);if(t)throw ao(t,t.message,co.BAD_REQUEST,void 0,void 0,!0);na.transformReq(e);let r=na.checkSchemaTableExist(e.schema,e.table);if(r)throw ao(new Error,r,co.NOT_FOUND,sa.LOG_LEVELS.ERROR,r,!0);try{await CT(e.schema,e.table);let n=await LT.deleteRecords(e);return na.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${dz}`),n}catch(n){if(n.message===sa.SEARCH_NOT_FOUND_MESSAGE){let s=new uz;return s.message=sa.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(IC,"deleteRecord")});var qf=R((kme,DC)=>{var pz=require("crypto"),CC=9;function mz(e){let t=Tz(CC),r=LC(e+t);return t+r}a(mz,"createHash");function Sz(e,t){let r=e?.substr(0,CC),n=r+LC(t+r);return e===n}a(Sz,"validateHash");function Tz(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(Tz,"generateSalt");function LC(e){return pz.createHash("md5").update(e).digest("hex")}a(LC,"md5");DC.exports={hash:mz,validate:Sz}});var MC=R(($me,PC)=>{var DT=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 gz(e){return _r.password.presence=!0,_r.username.presence=!0,_r.role.presence=!0,_r.active.presence=!0,DT.validateObject(e,_r)}a(gz,"addUserValidation");function Rz(e){return _r.password.presence=!1,_r.username.presence=!0,_r.role.presence=!1,_r.active.presence=!1,DT.validateObject(e,_r)}a(Rz,"alterUserValidation");function Az(e){return _r.password.presence=!1,_r.username.presence=!0,_r.role.presence=!1,_r.active.presence=!1,DT.validateObject(e,_r)}a(Az,"dropUserValidation");PC.exports={addUserValidation:gz,alterUserValidation:Rz,dropUserValidation:Az}});var Ze=R((Wme,vC)=>{"use strict";var{platform:Kme}=require("os"),Oz="nats-server.zip",PT="nats-server",bz=process.platform==="win32"?`${PT}.exe`:PT,Nz=/^[^\s.,*>]+$/,UC="__request__",yz=a(e=>`${e}.${UC}`,"REQUEST_SUBJECT"),Iz={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},wz={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Cz={HUB:"hub.pid",LEAF:"leaf.pid"},Lz={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Dz={SUCCESS:"success",ERROR:"error"},Pz={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Mz={TXN:"txn",MSGID:"msgid"},fc={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Uz={[fc.ERR]:1,[fc.WRN]:2,[fc.INF]:3,[fc.DBG]:4,[fc.TRC]:5},vz={debug:"-D",trace:"-DVV"};vC.exports={NATS_SERVER_ZIP:Oz,NATS_SERVER_NAME:PT,NATS_BINARY_NAME:bz,PID_FILES:Cz,NATS_CONFIG_FILES:wz,SERVER_SUFFIX:Lz,NATS_TERM_CONSTRAINTS_RX:Nz,REQUEST_SUFFIX:UC,UPDATE_REMOTE_RESPONSE_STATUSES:Dz,CLUSTER_STATUS_STATUSES:Pz,REQUEST_SUBJECT:yz,SUBJECT_PREFIXES:Mz,MSG_HEADERS:Iz,LOG_LEVELS:fc,LOG_LEVEL_FLAGS:vz,LOG_LEVEL_HIERARCHY:Uz}});var MT=R((jme,BC)=>{"use strict";var Bz={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
- `)},Gz="certificate.pem",qz="privateKey.pem",Fz="ca.pem";BC.exports={CERTIFICATE_VALUES:xz,CERTIFICATE_PEM_NAME:Gz,PRIVATEKEY_PEM_NAME:qz,CA_PEM_NAME:Fz}});var UT=g((Zme,kC)=>{"use strict";var qC=require("fs-extra"),le=require("joi"),kz=require("os"),{boolean:ye,string:dr,number:st,array:Ff}=le.types(),{totalmem:HC}=require("os"),aa=require("path"),$z=k(),kf=Y(),Xme=MT(),xC=L(),Vz=nt(),GC="log",Yz="components",Kz="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Wz="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Qz="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",jz="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",zz="rootPath config parameter is undefined",Jz="clustering.enabled config parameter is undefined",ca=st.min(0).required(),$f=Ff.items({host:dr.required(),port:ca}).empty(null),Us,FC=!1;kC.exports={configValidator:Xz,routesValidator:sJ,route_constraints:$f};function Xz(e,t=!1){if(FC=t,Us=e.rootPath,kf.isEmpty(Us))throw zz;let r=ye.required(),n=st.min(0).max(1e3).empty(null).default(nJ),s=dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(bu),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(bu),l=le.custom(eJ).empty(null).default(bu),_=e.clustering?.enabled;if(kf.isEmpty(_))throw Jz;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:ca,routes:$f}).required()}).required(),leafNodes:le.object({network:le.object({port:ca}).required()}).required(),network:le.object({port:ca}).required()}).required(),leafServer:le.object({network:le.object({port:ca,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(rJ).optional().empty(null),maxSize:dr.custom(tJ).optional().empty(null),path:dr.optional().empty(null).default(bu)}).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(bu),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:ca,securePort:ca,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(Xz,"configValidator");function Zz(e){return FC||qC.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Zz,"doesPathExist");function eJ(e,t){le.assert(e,dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Zz(e);if(r)return t.message(r)}a(eJ,"validatePath");function tJ(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Kz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Qz):e}a(tJ,"validateRotationMaxSize");function rJ(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Wz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(jz):e}a(rJ,"validateRotationInterval");function nJ(e,t){let r=t.state.path.join("."),n=kz.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||HC();return i=Math.round(Math.min(i,HC())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),$z.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(nJ,"setDefaultThreads");function bu(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 aa.join(Us,Yz);case"logging.root":return aa.join(Us,GC);case"clustering.leafServer.streams.path":return aa.join(Us,"clustering","leaf");case"storage.path":let n=aa.join(Us,xC.LEGACY_DATABASES_DIR_NAME);return qC.existsSync(n)?n:aa.join(Us,xC.DATABASES_DIR_NAME);case"logging.rotation.path":return aa.join(Us,GC);case"operationsApi.network.domainSocket":return r==null?null:aa.join(Us,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(bu,"setDefaultRoot");function sJ(e){let t=le.object({routes:$f});return Vz.validateBySchema({routes:e},t)}a(sJ,"routesValidator")});var Et=g((rSe,JC)=>{"use strict";var ln=L(),Wt=Y(),Bt=k(),{configValidator:iJ,routesValidator:$C}=UT(),Mr=require("fs-extra"),oJ=require("yaml"),ss=require("path"),aJ=require("is-number"),YC=require("properties-reader"),cJ=require("lodash"),{handleHDBError:lJ}=ie(),{HTTP_STATUS_CODES:uJ,HDB_ERROR_MSGS:Vf}=nn(),tSe=require("minimist"),{server:_J}=(Cr(),ae(zo)),{DATABASES_PARAM_CONFIG:Nu,CONFIG_PARAMS:cn,CONFIG_PARAM_MAP:is}=ln,dJ="Unable to get config value because config is uninitialized",fJ="Config successfully initialized",EJ="Error backing up config file",hJ="Empty parameter sent to getConfigValue",KC=ss.join(ln.PACKAGE_ROOT,"config","yaml",ln.HDB_DEFAULT_CONFIG_FILE),pJ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",VC={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},Yf,Ht,Kf;JC.exports={createConfigFile:mJ,getDefaultConfig:SJ,getConfigValue:QC,initConfig:BT,flattenConfig:hc,updateConfigValue:jC,updateConfigObject:gJ,getConfiguration:OJ,setConfiguration:bJ,readConfigFile:xT,getClusteringRoutes:NJ,initOldConfig:zC,getConfigFromFile:yJ,getConfigFilePath:la,addConfig:IJ,deleteConfigFromFile:wJ,getConfigObj:CJ};function mJ(e,t=!1){let r=lo(KC);Yf=hc(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=vT(l,e[c]);l==="rootPath"&&u?.endsWith("/")&&(u=u.slice(0,-1));try{r.setIn([..._],u)}catch(d){Bt.error(d)}}}n&&WC(r,n),HT(r,t);let s=r.toJSON();Ht=hc(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(mJ,"createConfigFile");function WC(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(Nu.TABLES))for(let i in n[s][Nu.TABLES])for(let o in n[s][Nu.TABLES][i]){let c=n[s][Nu.TABLES][i][o],l=[cn.DATABASES,s,Nu.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(WC,"setSchemasConfig");function SJ(e){if(Yf===void 0){let r=lo(KC);Yf=hc(r.toJSON())}let t=is[e.toLowerCase()];if(t!==void 0)return Yf[t.toLowerCase()]}a(SJ,"getDefaultConfig");function QC(e){if(e==null){Bt.error(hJ);return}if(Ht===void 0){Bt.trace(dJ);return}let t=is[e.toLowerCase()];if(t!==void 0)return Ht[t.toLowerCase()]}a(QC,"getConfigValue");function la(e=Wt.getPropsFilePath()){let t=Wt.getEnvCliRootPath();return t?ss.join(t,ln.HDB_CONFIG_FILE):YC(e).get(ln.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(la,"getConfigFilePath");function BT(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=la(t),n;if(r.includes("config/settings.js"))try{zC(r);return}catch(i){if(i.code!==ln.NODE_ERROR_CODES.ENOENT)throw i}try{n=lo(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}`)}TJ(n,r),HT(n);let s=n.toJSON();if(_J.config=s,Ht=hc(s),Ht.logging_rotation_rotate)for(let i in VC)Ht[i]&&Bt.error(`Config ${VC[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Bt.trace(fJ)}}a(BT,"initConfig");function TJ(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(TJ,"checkForUpdatedConfig");function HT(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=iJ(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(HT,"validateConfig");function gJ(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(gJ,"updateConfigObject");function jC(e,t,r=void 0,n=!1,s=!1,i=!1){Ht===void 0&&BT();let o=QC(is.hdb_root),c=ss.join(o,ln.HDB_CONFIG_FILE),l=lo(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=vT(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=vT(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(T){Bt.error(T)}}}_&&WC(l,_),HT(l);let u=l.getIn(["rootPath"]),d=ss.join(u,ln.HDB_CONFIG_FILE);n===!0&&RJ(c,u),Mr.writeFileSync(d,String(l)),s&&(Ht=hc(l.toJSON())),Bt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(jC,"updateConfigValue");function RJ(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(EJ),Bt.error(r)}}a(RJ,"backupConfigFile");var AJ=["databases"];function hc(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])&&!AJ.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(hc,"flattenConfig");function vT(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(aJ(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(vT,"castConfigValue");function OJ(){let e=Wt.getPropsFilePath(),t=la(e);return lo(t).toJSON()}a(OJ,"getConfiguration");async function bJ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return jC(void 0,void 0,s,!0),pJ}catch(i){throw typeof i=="string"||i instanceof String?lJ(i,i,uJ.BAD_REQUEST,void 0,void 0,!0):i}}a(bJ,"setConfiguration");function xT(){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=la(e);return lo(t).toJSON()}a(xT,"readConfigFile");function lo(e){return oJ.parseDocument(Mr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(lo,"parseYamlDoc");function NJ(){let e=xT(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Wt.isEmptyOrZeroLength(t)?[]:t;let r=$C(t);if(r)throw Vf.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Wt.isEmptyOrZeroLength(n)?[]:n;let s=$C(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(NJ,"getClusteringRoutes");function zC(e){let t=YC(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(zC,"initOldConfig");function yJ(e){let t=xT();return cJ.get(t,e.replaceAll("_","."))}a(yJ,"getConfigFromFile");async function IJ(e,t){let r=lo(la());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Mr.writeFile(la(),String(r))}a(IJ,"addConfig");function wJ(e){let t=la(Wt.getPropsFilePath()),r=lo(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ss.join(n,ln.HDB_CONFIG_FILE);Mr.writeFileSync(s,String(r))}a(wJ,"deleteConfigFromFile");function CJ(){return Kf||(BT(),Kf)}a(CJ,"getConfigObj")});var ZC=g((sSe,XC)=>{"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}},GT=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}};XC.exports={BaseLicense:Qf,ExtendedLicense:GT}});var ua=g((oSe,iD)=>{"use strict";var mc=require("fs-extra"),tD=qf(),rD=require("crypto"),DJ=require("moment"),LJ=require("uuid").v4,fr=k(),FT=require("path"),PJ=Y(),uo=L(),{totalmem:eD}=require("os"),MJ=ZC().ExtendedLicense,pc="invalid license key format",UJ="061183",vJ="mofi25",BJ="aes-256-cbc",HJ=16,xJ=32,nD=X();nD.initSync();var qT;iD.exports={validateLicense:sD,generateFingerPrint:qJ,licenseSearch:VT,getLicense:$J,checkMemoryLimit:VJ};function kT(){return FT.join(nD.getHdbBasePath(),uo.LICENSE_KEY_DIR_NAME,uo.LICENSE_FILE_NAME)}a(kT,"getLicenseDirPath");function GJ(){let e=kT();return FT.join(e,uo.LICENSE_FILE_NAME)}a(GJ,"getLicenseFilePath");function $T(){let e=kT();return FT.join(e,uo.REG_KEY_FILE_NAME)}a($T,"getFingerPrintFilePath");async function qJ(){let e=$T();try{return await mc.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await FJ();throw fr.error(`Error writing fingerprint file to ${e}`),fr.error(t),new Error("There was an error generating the fingerprint")}}a(qJ,"generateFingerPrint");async function FJ(){let e=LJ(),t=tD.hash(e),r=$T();try{await mc.mkdirp(kT()),await mc.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(FJ,"writeFingerprint");function sD(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:uo.RAM_ALLOCATION_ENUM.DEFAULT,version:uo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return fr.error("empty license key passed to validate."),r;let n=$T(),s=!1;try{s=mc.statSync(n)}catch(i){fr.error(i)}if(s){let i;try{i=mc.readFileSync(n,"utf8")}catch{fr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(vJ),c=o[1];c=Buffer.concat([Buffer.from(c)],HJ);let l=Buffer.concat([Buffer.from(i)],xJ),_=rD.createDecipheriv(BJ,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=kJ(o[0],i);if(f)u=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(pc),fr.error(pc),new Error(pc)}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(pc),fr.error(pc),new Error(pc)}else r.exp_date=u;r.exp_date<DJ().valueOf()&&(r.valid_date=!1),tD.validate(o[1],`${UJ}${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(sD,"validateLicense");function kJ(e,t){try{let r=rD.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(kJ,"checkOldLicense");function VT(){let e=new MJ,t=[];try{t=mc.readFileSync(GJ(),"utf-8").split(uo.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(PJ.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=sD(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=uo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return qT=e,e}a(VT,"licenseSearch");async function $J(){return qT||await VT(),qT}a($J,"getLicense");function VJ(){let e=VT().ram_allocation,t=process.constrainedMemory?.()||eD();if(t=Math.round(Math.min(t,eD())/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(VJ,"checkMemoryLimit")});var Ur=g((_Se,RD)=>{"use strict";var lD="username is required",uD="nothing to update, must supply active, role or password to update",_D="password cannot be an empty string",dD="If role is specified, it cannot be empty.",fD="active must be true or false";RD.exports={addUser:ZJ,alterUser:e2,dropUser:r2,getSuperUser:o2,userInfo:n2,listUsers:zf,listUsersExternal:s2,setUsersToGlobal:Tc,findAndValidateUser:TD,getClusterUser:a2,USERNAME_REQUIRED:lD,ALTERUSER_NOTHING_TO_UPDATE:uD,EMPTY_PASSWORD:_D,EMPTY_ROLE:dD,ACTIVE_BOOLEAN:fD};var ED=Pr(),YJ=oa(),WT=qf(),hD=MC(),pD=ur(),QT=hi(),un=Y(),mD=require("validate.js"),Ne=k(),{promisify:KJ}=require("util"),jT=fi(),oD=L(),aD=Ze(),WJ=Et(),cSe=X(),lSe=ua(),QJ=_i(),{table:uSe}=(Re(),ae(Ve)),{handleHDBError:vs,hdb_errors:jJ}=ie(),{HTTP_STATUS_CODES:Bs,AUTHENTICATION_ERROR_MSGS:YT,HDB_ERROR_MSGS:Sc}=jJ,{UserEventMsg:zT}=os(),KT=require("lodash"),{server:JT}=(Cr(),ae(zo)),zJ=k();JT.getUser=(e,t)=>TD(e,t,t!=null);var SD={username:!0,active:!0,role:!0,password:!0},cD=new Map,jf=pD.searchByValue,JJ=pD.searchByHash,XJ=KJ(YJ.delete);async function ZJ(e){let t=mD.cleanAttributes(e,SD),r=hD.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,Sc.ROLE_NAME_NOT_FOUND(t.role),Bs.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw vs(new Error,Sc.DUP_ROLES_FOUND(t.role),Bs.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=jT.encrypt(t.password)),t.password=WT.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await ED.insert(i)}catch(l){throw Ne.error("There was an error searching for a user."),Ne.error(l),l}Ne.debug(o);try{await Tc()}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,Sc.USER_ALREADY_EXISTS(t.username),Bs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],QT.signalUserChange(new zT(process.pid)),`${c.username} successfully added`}a(ZJ,"addUser");async function e2(e){let t=mD.cleanAttributes(e,SD);if(un.isEmptyOrZeroLength(t.username))throw new Error(lD);if(un.isEmptyOrZeroLength(t.password)&&un.isEmptyOrZeroLength(t.role)&&un.isEmptyOrZeroLength(t.active))throw new Error(uD);if(!un.isEmpty(t.password)&&un.isEmptyOrZeroLength(t.password.trim()))throw new Error(_D);if(!un.isEmpty(t.active)&&!un.isBoolean(t.active))throw new Error(fD);let r=t2(t.username);if(!un.isEmpty(t.password)&&!un.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=jT.encrypt(t.password)),t.password=WT.hash(t.password)),t.role==="")throw new Error(dD);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=Sc.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=Sc.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 ED.update(n)}catch(i){throw Ne.error("Error during update."),Ne.error(i),i}try{await Tc()}catch(i){throw Ne.error("Got an error setting users to global"),Ne.error(i),i}return QT.signalUserChange(new zT(process.pid)),s}a(e2,"alterUser");function t2(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(t2,"isClusterUser");async function r2(e){try{let t=hD.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,Sc.USER_NOT_EXIST(e.username),Bs.NOT_FOUND,void 0,void 0,!0);let n;try{n=await XJ(r)}catch(s){throw Ne.error("Got an error deleting a user."),Ne.error(s),s}Ne.debug(n);try{await Tc()}catch(s){throw Ne.error("Got an error setting users to global."),Ne.error(s),s}return QT.signalUserChange(new zT(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(r2,"dropUser");async function n2(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 JJ(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(n2,"userInfo");async function s2(){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(s2,"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],i2(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 i2(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(QJ)){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(i2,"appendSystemTablesToRole");async function Tc(){try{let e=await zf();global.hdb_users=e}catch(e){throw Ne.error(e),e}}a(Tc,"setUsersToGlobal");async function TD(e,t,r=!0){global.hdb_users||await Tc();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw vs(new Error,YT.GENERIC_AUTH_FAIL,Bs.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw vs(new Error,YT.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(cD.get(t)===n.password)return s;if(WT.validate(n.password,t))cD.set(t,n.password);else throw vs(new Error,YT.GENERIC_AUTH_FAIL,Bs.UNAUTHORIZED,void 0,void 0,!0)}return s}a(TD,"findAndValidateUser");async function o2(){global.hdb_users||await Tc();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(o2,"getSuperUser");async function a2(){let e=await zf(),t=WJ.getConfigFromFile(oD.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!un.isEmpty(r)&&r?.role?.role===oD.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=jT.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+aD.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+aD.SERVER_SUFFIX.ADMIN,r}a(a2,"getClusterUser");var gD=[];JT.invalidateUser=function(e){for(let t of gD)try{t(e)}catch(r){zJ.error("Error invalidating user",r)}};JT.onInvalidatedUser=function(e){gD.push(e)}});var Iu=g((hSe,ND)=>{"use strict";var _a=k(),_n=L(),c2=tC(),fSe=Bn(),ESe=Ei(),l2=Ur(),{validateEvent:AD}=os(),yu=Hn(),u2=require("process"),{resetDatabases:_2}=(Re(),ae(Ve)),d2={[_n.ITC_EVENT_TYPES.SCHEMA]:f2,[_n.ITC_EVENT_TYPES.USER]:bD};async function f2(e){let t=AD(e);if(t){_a.error(t);return}_a.trace("ITC schemaHandler received schema event:",e),await c2(e.message),await E2(e.message)}a(f2,"schemaHandler");async function E2(e){try{yu.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),yu.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),yu.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=_2();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){_a.error(t)}}a(E2,"syncSchemaMetadata");var OD=[];async function bD(e){try{try{yu.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),yu.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){_a.warn(r)}let t=AD(e);if(t){_a.error(t);return}_a.trace(`ITC userHandler ${_n.HDB_ITC_CLIENT_PREFIX}${u2.pid} received user event:`,e),await l2.setUsersToGlobal();for(let r of OD)r()}catch(t){_a.error(t)}}a(bD,"userHandler");bD.addListener=function(e){OD.push(e)};ND.exports=d2});var os=g((RSe,ID)=>{"use strict";var mSe=k(),XT=Y(),h2=L(),{ITC_ERRORS:wu}=nn(),{parentPort:SSe,threadId:p2,isMainThread:m2,workerData:TSe}=require("worker_threads"),{onMessageFromWorkers:S2,broadcast:gSe,broadcastWithAcknowledgement:T2}=rt();ID.exports={sendItcEvent:g2,validateEvent:yD,SchemaEventMsg:R2,UserEventMsg:A2};var Jf;S2(async(e,t)=>{Jf=Jf||Iu(),yD(e),Jf[e.type]&&await Jf[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function g2(e){return!m2&&e.message&&(e.message.originator=p2),T2(e)}a(g2,"sendItcEvent");function yD(e){if(typeof e!="object")return wu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||XT.isEmpty(e.type))return wu.MISSING_TYPE;if(!e.hasOwnProperty("message")||XT.isEmpty(e.message))return wu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||XT.isEmpty(e.message.originator))return wu.MISSING_ORIGIN;if(h2.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return wu.INVALID_EVENT(e.type)}a(yD,"validateEvent");function R2(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(R2,"SchemaEventMsg");function A2(e){this.originator=e}a(A2,"UserEventMsg")});var hi=g((bSe,LD)=>{"use strict";var wD=L(),OSe=Y(),Xf=k(),CD=Xw(),gc,{sendItcEvent:DD}=os();function O2(e){try{Xf.trace("signalSchemaChange called with message:",e),gc=gc||Iu();let t=new CD(wD.ITC_EVENT_TYPES.SCHEMA,e);return gc.schema(t),DD(t)}catch(t){Xf.error(t)}}a(O2,"signalSchemaChange");function b2(e){try{Xf.trace("signalUserChange called with message:",e),gc=gc||Iu();let t=new CD(wD.ITC_EVENT_TYPES.USER,e);return gc.user(t),DD(t)}catch(t){Xf.error(t)}}a(b2,"signalUserChange");LD.exports={signalSchemaChange:O2,signalUserChange:b2}});var Zf=g((ySe,MD)=>{"use strict";var PD=Y(),N2=L(),y2=k(),I2=Lf(),w2=Df(),C2=hi(),{SchemaEventMsg:D2}=os(),L2="already exists in";MD.exports=P2;async function P2(e,t,r){if(PD.isEmptyOrZeroLength(r))return r;let n=[];PD.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 M2(e,t.schema,t.name,i)})),s}a(P2,"lmdbCheckForNewAttributes");async function M2(e,t,r,n){let s=new w2(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await U2(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(L2))y2.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(M2,"createNewAttribute");async function U2(e){let t;return t=await I2(e),C2.signalSchemaChange(new D2(process.pid,N2.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(U2,"createAttribute")});var Rc=g((wSe,UD)=>{"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}};UD.exports=ZT});var BD=g((DSe,vD)=>{"use strict";var v2=Rc(),B2=L().OPERATIONS_ENUM,eg=class extends v2{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(B2.INSERT,r,n,s,i),this.records=t}};vD.exports=eg});var xD=g((PSe,HD)=>{"use strict";var H2=Rc(),x2=L().OPERATIONS_ENUM,tg=class extends H2{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(x2.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};HD.exports=tg});var qD=g((USe,GD)=>{"use strict";var G2=Rc(),q2=L().OPERATIONS_ENUM,rg=class extends G2{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(q2.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};GD.exports=rg});var kD=g((BSe,FD)=>{"use strict";var F2=Rc(),k2=L().OPERATIONS_ENUM,ng=class extends F2{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(k2.DELETE,n,s,t,i),this.original_records=r}};FD.exports=ng});var Cu=g((GSe,KD)=>{"use strict";var xSe=require("path"),$D=Ye(),$2=BD(),V2=xD(),Y2=qD(),K2=kD(),Ac=_t(),VD=Y(),{CONFIG_PARAMS:W2}=L(),YD=X();YD.initSync();var eE=L().OPERATIONS_ENUM,{getTransactionAuditStorePath:Q2}=Je();KD.exports=j2;async function j2(e,t){if(YD.get(W2.LOGGING_AUDITLOG)===!1)return;let r=Q2(e.schema,e.table),n=await $D.openEnvironment(r,e.table,!0),s=z2(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){$D.initializeDBIs(n,Ac.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ac.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Ac.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Ac.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),VD.isEmpty(s.user_name)||n.dbis[Ac.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Ac.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(j2,"writeTransaction");function z2(e,t){let r=VD.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===eE.INSERT)return new $2(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.UPDATE)return new V2(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.UPSERT)return new Y2(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.DELETE)return new K2(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(z2,"createTransactionObject")});var sg=g((kSe,WD)=>{"use strict";var J2=Ru(),FSe=su(),Du=L(),X2=iu(),Z2=ea().insertRecords,e4=Ye(),t4=k(),r4=Zf(),{getSchemaPath:n4}=Je(),s4=Cu();WD.exports=i4;async function i4(e){try{let{schema_table:t,attributes:r}=J2(e);X2(e,r,t.hash_attribute),e.schema!==Du.SYSTEM_SCHEMA_NAME&&(r.includes(Du.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Du.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Du.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Du.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await r4(e.hdb_auth_header,t,r),s=n4(e.schema,e.table),i=await e4.openEnvironment(s,e.table),o=await Z2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await s4(e,o)}catch(c){t4.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(i4,"lmdbCreateRecords")});var zD=g((VSe,jD)=>{"use strict";var QD=L(),o4=sg(),a4=su(),c4=require("fs-extra"),{getSchemaPath:l4}=Je();jD.exports=u4;async function u4(e){let t=[{name:e.schema,createddate:Date.now()}],r=new a4(QD.SYSTEM_SCHEMA_NAME,QD.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await o4(r),await c4.mkdirp(l4(e.schema))}a(u4,"lmdbCreateSchema")});var XD=g((KSe,JD)=>{"use strict";var ig=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=ig});var rL=g((JSe,tL)=>{"use strict";var ZD=Ye(),og=wr(),ag=nn().LMDB_ERRORS_ENUM,_4=_t(),eL=k(),QSe=Y(),d4=require("lmdb"),f4=XD(),E4=L(),{OVERFLOW_MARKER:jSe,MAX_SEARCH_KEY_LENGTH:zSe}=_4,h4=E4.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function p4(e,t,r,n){if(og.validateEnv(e),t===void 0)throw new Error(ag.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ag.IDS_REQUIRED):new Error(ag.IDS_MUST_BE_ITERABLE);try{let s=ZD.listDBIs(e);ZD.initializeDBIs(e,t,s);let i=new f4,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[h4]>n){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,d4.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let T=s[S];if(!h.hasOwnProperty(T)||T===t)continue;let R=e.dbis[T],N=h[T];if(N!=null)try{let b=og.getIndexedValues(N);if(b)for(let U=0,v=b.length;U<v;U++)R.remove(b[U],o)}catch{eL.warn(`cannot delete from attribute: ${T}, ${N}:${o}`)}}});c.push(m),l.push(o),i.original_records.push(h)}catch(h){eL.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=og.getNextMonotonicTime(),i}catch(s){throw s}}a(p4,"deleteRecords");tL.exports={deleteRecords:p4}});var Lu=g((ZSe,sL)=>{"use strict";var Oc=Y(),m4=rL(),S4=Ye(),{getSchemaPath:T4}=Je(),g4=Cu(),R4=k();sL.exports=A4;async function A4(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Oc.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Oc.isEmptyOrZeroLength(e.hash_values)&&!Oc.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Oc.isEmpty(l)||e.hash_values.push(l)}}if(Oc.isEmptyOrZeroLength(e.hash_values))return nL([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Oc.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=T4(e.schema,e.table),i=await S4.openEnvironment(s,e.table),o=await m4.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await g4(e,o)}catch(c){R4.error(`unable to write transaction due to ${c.message}`)}return nL(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(A4,"lmdbDeleteRecords");function nL(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(nL,"createDeleteResponse")});var lg=g((rTe,iL)=>{"use strict";var O4=L(),tTe=wr();function cg(e,t){let r=Object.create(null);if(t.length===1&&O4.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(cg,"parseRow");function b4(e,t,r,n){let s=cg(r,e);n.push(s)}a(b4,"searchAll");function N4(e,t,r,n){let s=cg(r,e);n[t]=s}a(N4,"searchAllToMap");function y4(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(y4,"iterateDBI");function da(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(da,"pushResults");function I4(e,t,r,n,s,i){t.toString().endsWith(e)&&da(t,r,n,s,i)}a(I4,"endsWith");function w4(e,t,r,n,s,i){t.toString().includes(e)&&da(t,r,n,s,i)}a(w4,"contains");function C4(e,t,r,n,s,i){t>e&&da(t,r,n,s,i)}a(C4,"greaterThanCompare");function D4(e,t,r,n,s,i){t>=e&&da(t,r,n,s,i)}a(D4,"greaterThanEqualCompare");function L4(e,t,r,n,s,i){t<e&&da(t,r,n,s,i)}a(L4,"lessThanCompare");function P4(e,t,r,n,s,i){t<=e&&da(t,r,n,s,i)}a(P4,"lessThanEqualCompare");iL.exports={parseRow:cg,searchAll:b4,searchAllToMap:N4,iterateDBI:y4,endsWith:I4,contains:w4,greaterThanCompare:C4,greaterThanEqualCompare:D4,lessThanCompare:L4,lessThanEqualCompare:P4,pushResults:da}});var bc=g((aTe,dL)=>{"use strict";var _o=Ye(),sTe=k(),dn=wr(),tE=_t(),Tt=nn().LMDB_ERRORS_ENUM,iTe=Y(),M4=L(),rE=lg(),{parseRow:U4}=rE,oTe=require("lmdb"),{OVERFLOW_MARKER:oL,MAX_SEARCH_KEY_LENGTH:v4}=tE;function aL(e,t,r,n=!1,s=void 0,i=void 0){return fa(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(aL,"iterateFullIndex");function Pu(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return fa(e,t,r,(u,d,E,f)=>{let R={transaction:u,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!_,exclusiveStart:i===!0?_:l};return f===r?(R.values=!1,d.getRange(R).map(N=>({value:N}))):d.getRange(R)})}a(Pu,"iterateRangeBetween");function fa(e,t,r,n){let s=e.database||e,i=_o.openDBI(s,r);i[tE.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&_o.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(fa,"setupTransaction");function cL(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(oL)){if(!s)if(r)s=_o.openDBI(e,r);else{let l=_o.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=_o.openDBI(e,l[_]),!s[tE.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(cL,"getOverflowCheck");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);return fa(e,t,t,(o,c,l)=>(nE(r),r=Mu(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>U4(_.value,r))))}a(B4,"searchAll");function H4(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=Mu(e.database||e,r);let o=new Map;for(let{key:c,value:l}of aL(e,t,t,n,s,i))o.set(c,rE.parseRow(l,r));return o}a(H4,"searchAllToMap");function x4(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=aL(e,void 0,t,r,n,s),c=o.transaction,l=cL(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(x4,"iterateDBI");function G4(e,t){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);return _o.statDBI(e,t).entryCount}a(G4,"countAll");function q4(e,t,r,n,s=!1,i=void 0,o=void 0){return fo(e,r,n),fa(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(q4,"equals");function F4(e,t,r){return fo(e,t,r),_o.openDBI(e,t).getValuesCount(r)}a(F4,"count");function k4(e,t,r,n,s=!1,i=void 0,o=void 0){return fo(e,r,n),fa(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(k4,"startsWith");function $4(e,t,r,n,s=!1,i=void 0,o=void 0){return lL(e,t,r,n,s,i,o,!0)}a($4,"endsWith");function lL(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return fo(e,r,n),fa(e,null,r,(l,_,u,d)=>{let E=cL(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(oL)?_.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(lL,"contains");function V4(e,t,r,n,s=!1,i=void 0,o=void 0){fo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Pu(e,t,r,n,l,s,i,o,!0,!1)}a(V4,"greaterThan");function Y4(e,t,r,n,s=!1,i=void 0,o=void 0){fo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Pu(e,t,r,n,l,s,i,o,!1,!1)}a(Y4,"greaterThanEqual");function K4(e,t,r,n,s=!1,i=void 0,o=void 0){fo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Pu(e,t,r,l,n,s,i,o,!1,!0)}a(K4,"lessThan");function W4(e,t,r,n,s=!1,i=void 0,o=void 0){fo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Pu(e,t,r,l,n,s,i,o,!1,!1)}a(W4,"lessThanEqual");function Q4(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 Pu(e,t,r,n,s,i,o,c)}a(Q4,"between");function j4(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=Mu(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(j4,"searchByHash");function z4(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(z4,"checkHashExists");function J4(e,t,r,n,s=[]){return _L(e,t,r,n,s),uL(e,t,r,n,s).map(i=>i[1])}a(J4,"batchSearchByHash");function X4(e,t,r,n,s=[]){_L(e,t,r,n,s);let i=new Map;for(let[o,c]of uL(e,t,r,n,s))i.set(o,c);return i}a(X4,"batchSearchByHashToMap");function uL(e,t,r,n,s=[]){return fa(e,t,t,(i,o,c)=>{r=Mu(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(uL,"batchHashSearch");function _L(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(_L,"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 fo(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>v4)throw new Error(Tt.SEARCH_VALUE_TOO_LARGE)}a(fo,"validateComparisonFunctions");function Mu(e,t){return t.length===1&&M4.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=_o.listDBIs(e)),t}a(Mu,"setGetWholeRowAttributes");dL.exports={searchAll:B4,searchAllToMap:H4,count:F4,countAll:G4,equals:q4,startsWith:k4,endsWith:$4,contains:lL,searchByHash:j4,setGetWholeRowAttributes:Mu,batchSearchByHash:J4,batchSearchByHashToMap:X4,checkHashExists:z4,iterateDBI:x4,greaterThan:V4,greaterThanEqual:Y4,lessThan:K4,lessThanEqual:W4,between:Q4}});var Nc=g((lTe,mL)=>{var fL=require("lodash"),EL=nt(),me=require("joi"),Z4=Y(),{hdb_schema_table:Uu,checkValidTable:hL,hdb_table:pL,hdb_database:sE}=Ps(),{handleHDBError:e3,hdb_errors:t3}=ie(),{getDatabases:r3}=(Re(),ae(Ve)),{HTTP_STATUS_CODES:n3}=t3,s3=me.object({database:sE,schema:sE,table:pL,search_attribute:Uu,search_value:me.any().required(),get_attributes:me.array().min(1).items(me.alternatives(Uu,me.object())).optional(),desc:me.bool(),limit:me.number().integer().min(1),offset:me.number().integer().min(0)}),i3=me.object({database:sE,schema:sE,table:pL,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(Uu,me.object())).optional(),sort:me.object({attribute:me.alternatives(Uu,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(Uu,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()});mL.exports=function(e,t){let r=null;switch(t){case"value":r=EL.validateBySchema(e,s3);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(hL("database",e.schema)),i(hL("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=EL.validateBySchema(e,i3);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Z4.checkGlobalSchemaTable(e.schema,e.table);if(s)return e3(new Error,s,n3.NOT_FOUND);let o=r3()[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 _=fL.filter(c,u=>u!=="*"&&!u.startsWith?.("$")&&u.attribute!=="*"&&!Array.isArray(u)&&!u.name&&!fL.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 ug=g((_Te,SL)=>{"use strict";var o3=Ye(),a3=Nc(),{getSchemaPath:c3}=Je();SL.exports=l3;function l3(e){let t=a3(e,"hashes");if(t)throw t;let r=c3(e.schema,e.table);return o3.openEnvironment(r,e.table)}a(l3,"initialize")});var _g=g((fTe,TL)=>{"use strict";var u3=bc(),_3=ug();TL.exports=d3;async function d3(e){let t=await _3(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return u3.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(d3,"lmdbGetDataByHash")});var yc=g((hTe,gL)=>{"use strict";var dg=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};gL.exports=dg});var AL=g((STe,RL)=>{"use strict";var mTe=yc(),f3=bc(),E3=ug();RL.exports=h3;async function h3(e){let t=await E3(e),r=global.hdb_schema[e.schema][e.table];return f3.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(h3,"lmdbSearchByHash")});var as=g((gTe,OL)=>{"use strict";var fg=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}};OL.exports=fg});var iE=g((ATe,CL)=>{"use strict";var Er=bc(),p3=Ye(),m3=Y(),Se=_t(),Ea=L(),S3=_i(),bL=nn().LMDB_ERRORS_ENUM,{getSchemaPath:T3}=Je(),pi=Ea.SEARCH_WILDCARDS;async function g3(e,t,r){let n;e.schema===Ea.SYSTEM_SCHEMA_NAME?n=S3[e.table]:n=global.hdb_schema[e.schema][e.table];let s=wL(e,n.hash_attribute,r,t);return yL(e,s,n.hash_attribute,r)}a(g3,"prepSearch");async function yL(e,t,r,n){let s=T3(e.schema,e.table),i=await p3.openEnvironment(s,e.table),o=IL(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(R3(e,r)===!1){let u=e.search_attribute;if(u===r)return n?NL(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[u]:E.key}),"toObject");return n?NL(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(yL,"executeSearch");function IL(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(IL,"searchByType");function NL(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(NL,"createMapFromIterable");function R3(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(R3,"checkToFetchMore");function wL(e,t,r,n){if(m3.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(bL.UNKNOWN_SEARCH_TYPE)}else switch(n){case Ea.VALUE_SEARCH_COMPARATORS.BETWEEN:return Se.SEARCH_TYPES.BETWEEN;case Ea.VALUE_SEARCH_COMPARATORS.GREATER:return Se.SEARCH_TYPES.GREATER_THAN;case Ea.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Se.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ea.VALUE_SEARCH_COMPARATORS.LESS:return Se.SEARCH_TYPES.LESS_THAN;case Ea.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Se.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(bL.UNKNOWN_SEARCH_TYPE)}}a(wL,"createSearchTypeFromSearchObject");CL.exports={executeSearch:yL,createSearchTypeFromSearchObject:wL,prepSearch:g3,searchByType:IL}});var LL=g((NTe,DL)=>{"use strict";var bTe=as(),A3=Nc(),O3=Y(),b3=L(),N3=iE();DL.exports=y3;function y3(e,t){if(!O3.isEmpty(t)&&b3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=A3(e,"value");if(n)throw n;return N3.prepSearch(e,t,!0)}a(y3,"lmdbGetDataByValue")});var vu=g((wTe,PL)=>{"use strict";var ITe=as(),I3=Nc(),w3=Y(),C3=L(),D3=iE();PL.exports=L3;async function L3(e,t){if(!w3.isEmpty(t)&&C3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=I3(e,"value");if(n)throw n;return D3.prepSearch(e,t,!1)}a(L3,"lmdbSearchByValue")});var UL=g((LTe,ML)=>{"use strict";var DTe=_t(),Eg=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}},hg=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},pg=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};ML.exports={SearchByConditionsObject:Eg,SearchCondition:hg,SortAttribute:pg}});var GL=g((vTe,xL)=>{"use strict";var MTe=UL().SearchByConditionsObject,P3=as(),M3=Nc(),mg=bc(),oE=_t(),{Resource:UTe}=(Mn(),ae(Sg)),HL=iE(),U3=lg(),v3=require("lodash"),{getSchemaPath:B3}=Je(),vL=Ye(),{handleHDBError:H3,hdb_errors:x3}=ie(),{HTTP_STATUS_CODES:G3}=x3,q3=1e8;xL.exports=F3;async function F3(e){let t=M3(e,"conditions");if(t)throw H3(t,t.message,G3.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=B3(e.schema,e.table),n=await vL.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)vL.openDBI(n,_.search_attribute);let i=v3.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===oE.SEARCH_TYPES.EQUALS?_.estimated_count=mg.count(n,_.search_attribute,_.search_value):u===oE.SEARCH_TYPES.CONTAINS||u===oE.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=q3}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await BL(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(HL.filterByType),d=u.length,E=mg.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=>U3.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await BL(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=mg.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(F3,"lmdbSearchByConditions");async function BL(e,t,r,n){let s=new P3(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,HL.searchByType(e,s,i,n).map(o=>o.value)}a(BL,"executeConditionSearch")});var Bu=g((HTe,qL)=>{"use strict";var k3=L().OPERATIONS_ENUM,Tg=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=k3.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};qL.exports=Tg});var gg=g((GTe,QL)=>{"use strict";var VL=as(),YL=Bu(),KL=vu(),WL=Lu(),vr=L(),FL=Y(),kL=Ye(),{getTransactionAuditStorePath:$3,getSchemaPath:V3}=Je(),$L=k();QL.exports=Y3;async function Y3(e){try{if(FL.isEmpty(global.hdb_schema[e.schema])||FL.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await K3(e),await W3(e);let t=V3(e.schema,e.table);try{await kL.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")$L.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=$3(e.schema,e.table);await kL.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")$L.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Y3,"lmdbDropTable");async function K3(e){let t=new VL(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 KL(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 YL(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await WL(s)}a(K3,"deleteAttributesFromSystem");async function W3(e){let t=new VL(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 KL(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 YL(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await WL(s)}catch(i){throw i}}a(W3,"dropTableFromSystem")});var zL=g((FTe,jL)=>{"use strict";var Q3=require("fs-extra"),j3=as(),z3=yc(),J3=Bu(),X3=gg(),Z3=Lu(),eX=_g(),tX=vu(),mi=L(),{getSchemaPath:rX}=Je(),{handleHDBError:nX,hdb_errors:sX}=ie(),{HDB_ERROR_MSGS:iX,HTTP_STATUS_CODES:oX}=sX;jL.exports=aX;async function aX(e){let t;try{t=await cX(e.schema);let r=new j3(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 tX(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await X3(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new J3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Z3(s);let i=rX(t);await Q3.remove(i)}catch(r){throw r}}a(aX,"lmdbDropSchema");async function cX(e){let t=new z3(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 eX(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw nX(new Error,iX.SCHEMA_NOT_FOUND(e),oX.NOT_FOUND,void 0,void 0,!0);return n}a(cX,"validateDropSchema")});var Hu=g(($Te,JL)=>{"use strict";var Rg=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};JL.exports=Rg});var Og=g((KTe,XL)=>{"use strict";var lX=require("fs-extra"),aE=Ye(),{getTransactionAuditStorePath:uX}=Je(),Ag=_t(),YTe=Hu();XL.exports=_X;async function _X(e){let t;try{let r=uX(e.schema,e.table);await lX.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,Ag.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),aE.createDBI(t,Ag.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),aE.createDBI(t,Ag.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(_X,"createTransactionsAuditEnvironment")});var rP=g((QTe,tP)=>{"use strict";var bg=L(),ZL=Ye(),dX=ea(),{getSystemSchemaPath:fX,getSchemaPath:EX}=Je(),hX=_i(),pX=Lf(),Ng=Df(),mX=k(),SX=Og(),Ig=hX.hdb_table,eP=[];for(let e=0;e<Ig.attributes.length;e++)eP.push(Ig.attributes[e].attribute);tP.exports=TX;async function TX(e,t){let r=EX(t.schema,t.table),n=new Ng(t.schema,t.table,bg.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Ng(t.schema,t.table,bg.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Ng(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(fX(),bg.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await dX.insertRecords(o,Ig.hash_attribute,eP,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await yg(n),await yg(s),await yg(i)}await SX(t)}catch(o){throw o}}a(TX,"lmdbCreateTable");async function yg(e){try{await pX(e)}catch(t){mX.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(yg,"createAttribute")});var sP=g((zTe,nP)=>{"use strict";var gX=Ru(),RX=iu(),AX=Zf(),xu=L(),OX=ea().updateRecords,bX=Ye(),{getSchemaPath:NX}=Je(),yX=Cu(),IX=k();nP.exports=wX;async function wX(e){try{let{schema_table:t,attributes:r}=gX(e);RX(e,r,t.hash_attribute),e.schema!==xu.SYSTEM_SCHEMA_NAME&&(r.includes(xu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(xu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(xu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(xu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await AX(e.hdb_auth_header,t,r),s=NX(e.schema,e.table),i=await bX.openEnvironment(s,e.table),o=await OX(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await yX(e,o)}catch(c){IX.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(wX,"lmdbUpdateRecords")});var oP=g((XTe,iP)=>{"use strict";var CX=L().OPERATIONS_ENUM,wg=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=CX.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};iP.exports=wg});var cP=g((tge,aP)=>{"use strict";var ege=oP(),DX=Ru(),LX=iu(),PX=Zf(),Gu=L(),MX=ea().upsertRecords,UX=Ye(),{getSchemaPath:vX}=Je(),BX=Cu(),HX=k(),{handleHDBError:xX,hdb_errors:GX}=ie();aP.exports=qX;async function qX(e){let t;try{t=DX(e)}catch(l){throw xX(l,l.message,GX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;LX(e,n,r.hash_attribute),e.schema!==Gu.SYSTEM_SCHEMA_NAME&&(n.includes(Gu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Gu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Gu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Gu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await PX(e.hdb_auth_header,r,n),i=vX(e.schema,e.table),o=await UX.openEnvironment(i,e.table),c=await MX(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await BX(e,c)}catch(l){HX.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(qX,"lmdbUpsertRecords")});var uP=g((nge,lP)=>{"use strict";var Cg=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};lP.exports=Cg});var dP=g((ige,_P)=>{"use strict";var Dg=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}};_P.exports=Dg});var hP=g((cge,EP)=>{"use strict";var Lg=Ye(),{getTransactionAuditStorePath:FX}=Je(),age=uP(),qu=_t(),kX=Y(),fP=dP(),$X=require("util").promisify,VX=$X(setTimeout),YX=1e4,KX=100;EP.exports=WX;async function WX(e){let t=FX(e.schema,e.table),r=await Lg.openEnvironment(t,e.table,!0),n=Lg.listDBIs(r);Lg.initializeDBIs(r,qu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new fP;do s=await QX(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 VX(KX);while(s.transactions_deleted>0);return i}a(WX,"deleteAuditLogsBefore");async function QX(e,t){let r=new fP;try{let n=e.dbis[qu.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[qu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];kX.isEmpty(c)||(s=e.dbis[qu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[qu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>YX)break}return await s,r}catch(n){throw n}}a(QX,"deleteTransactions")});var mP=g((uge,pP)=>{"use strict";var Pg=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};pP.exports=Pg});var TP=g((fge,SP)=>{"use strict";var jX=as(),zX=Bu(),dge=mP(),Hs=L(),JX=Y(),Mg=Ye(),XX=_i(),ZX=vu(),eZ=Lu(),{getSchemaPath:tZ}=Je();SP.exports=rZ;async function rZ(e,t=!0){let r;e.schema===Hs.SYSTEM_SCHEMA_NAME?r=XX[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await sZ(e),s=tZ(e.schema,e.table),i=await Mg.openEnvironment(s,e.table);return t===!0&&await nZ(e,i,r.hash_attribute),Mg.dropDBI(i,e.attribute),n}a(rZ,"lmdbDropAttribute");async function nZ(e,t,r){let n=Mg.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(nZ,"removeAttributeFromAllObjects");async function sZ(e){let t=new jX(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 ZX(t)).filter(o=>o[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(JX.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 zX(Hs.SYSTEM_SCHEMA_NAME,Hs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return eZ(i)}a(sZ,"dropAttributeFromSystem")});var NP=g((pge,bP)=>{"use strict";var Ug=Ye(),Ic=_t(),hge=wr(),vg=L(),gP=Y(),{getTransactionAuditStorePath:iZ}=Je(),oZ=bc(),cE=Rc(),aZ=k();bP.exports=cZ;async function cZ(e){let t=iZ(e.schema,e.table),r=await Ug.openEnvironment(t,e.table,!0),n=Ug.listDBIs(r);Ug.initializeDBIs(r,Ic.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case vg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return RP(r,e.search_values);case vg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,uZ(r,e.search_values,s);case vg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return lZ(r,e.search_values);default:return RP(r)}}a(cZ,"readAuditLog");function RP(e,t=[0,Date.now()]){gP.isEmpty(t[0])&&(t[0]=0),gP.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Ic.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(RP,"searchTransactionsByTimestamp");function lZ(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[Ic.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,OP(e,i))}return Object.fromEntries(r)}a(lZ,"searchTransactionsByUsername");function uZ(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=oZ.equals(e,Ic.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ic.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=OP(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);AP(l,"records",r,u,o),AP(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(uZ,"searchTransactionsByHashValues");function AP(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(AP,"loopRecords");function OP(e,t){let r=[];try{let n=e.dbis[Ic.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){aZ.warn(i)}return r}catch(n){throw n}}a(OP,"batchSearchTransactions")});var IP=g((gge,yP)=>{"use strict";var{getSchemaPath:Sge}=Je(),Tge=Ye(),{database:_Z}=(Re(),ae(Ve));yP.exports={writeTransaction:dZ};async function dZ(e,t,r){return _Z({database:e,table:t}).transaction(r)}a(dZ,"writeTransaction")});var LP=g((Age,DP)=>{"use strict";var{getSchemaPath:wP}=Je(),CP=Ye();DP.exports={flush:fZ,resetReadTxn:EZ};async function fZ(e,t){return(await CP.openEnvironment(wP(e,t),t.toString())).flushed}a(fZ,"flush");async function EZ(e,t){try{(await CP.openEnvironment(wP(e,t),t.toString())).resetReadTxn()}catch{}}a(EZ,"resetReadTxn")});var vP=g((bge,UP)=>{"use strict";var{Readable:hZ}=require("stream"),{getDatabases:pZ}=(Re(),ae(Ve)),{readSync:mZ,openSync:SZ,createReadStream:PP}=require("fs"),{open:TZ}=require("lmdb"),MP=Eu(),gZ=hu(),{AUDIT_STORE_OPTIONS:RZ}=(so(),ae(BP)),{INTERNAL_DBIS_NAME:AZ,AUDIT_STORE_NAME:OZ}=_t();UP.exports=NZ;var Bg=32768,bZ=100;async function NZ(e){let t=e.database||e.schema||"data",r=pZ()[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=TZ({noSync:!0,maxDbs:gZ.MAX_DBS}),E,f=d.openDB(AZ,new MP(!1)),h=u.useReadTransaction(),m=0,S=a(async function(R,N){N.encoding="binary",N.encoder=void 0;let b=d.openDB(R,N),U=u.openDB(R,N);for(let{key:v,version:q,value:M}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=b.put(v,M,q),m++%bZ===0&&(await new Promise(W=>setTimeout(W,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:R,value:N}of u.getRange({transaction:h,start:!1}))if(s.some(b=>R.startsWith?.(b+"/"))){f.put(R,N);let[,b]=R.split("/"),U=!b,v=new MP(!U,U);await S(R,v)}e.include_audit&&await S(OZ,Object.assign({},RZ)),await E;let T=PP(d.path);return T.headers=l(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=SZ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Bg);mZ(c,_,0,Bg),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=PP(null,{fd:c,start:Bg}),E=new hZ.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(NZ,"getBackup")});var GP=g((yge,xP)=>{"use strict";var yZ=k(),{handleHDBError:IZ}=ie(),wZ=nw(),CZ=Lf(),DZ=sg(),LZ=zD(),PZ=Lu(),MZ=_g(),UZ=AL(),vZ=LL(),BZ=vu(),HZ=GL(),xZ=zL(),GZ=rP(),qZ=sP(),FZ=cP(),kZ=hP(),$Z=gg(),VZ=TP(),YZ=NP(),KZ=IP(),HP=LP(),WZ=vP(),Hg=class extends wZ{static{a(this,"LMDBBridge")}async searchByConditions(t){return HZ(t)}async getDataByHash(t){return await MZ(t)}async searchByHash(t){return await UZ(t)}async getDataByValue(t,r){return await vZ(t,r)}async searchByValue(t){return await BZ(t)}async createSchema(t){return await LZ(t)}async dropSchema(t){return await xZ(t)}async createTable(t,r){return await GZ(t,r)}async dropTable(t){return await $Z(t)}async createAttribute(t){return await CZ(t)}async createRecords(t){return await DZ(t)}async updateRecords(t){return await qZ(t)}async upsertRecords(t){try{return await FZ(t)}catch(r){throw IZ(r,null,null,yZ.ERR,r)}}async deleteRecords(t){return await PZ(t)}async dropAttribute(t){return await VZ(t)}async deleteAuditLogsBefore(t){return await kZ(t)}async readAuditLog(t){return await YZ(t)}writeTransaction(t,r,n){return KZ.writeTransaction(t,r,n)}flush(t,r){return HP.flush(t,r)}resetReadTxn(t,r){return HP.resetReadTxn(t,r)}getBackup(t){return WZ(t)}};xP.exports=Hg});function JZ(){zZ=setInterval(function(){for(let e of xg)if(e.stale){let t=e[Ie]?.url;$P.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},jZ).unref()}var Gg,kP,$P,VP,YP,KP,qP,xg,QZ,Fu,FP,ha,lE,jZ,zZ,qg=be(()=>{Gg=x(wr()),kP=x(ie()),$P=x(k());Mn();VP=x(X()),YP=x(L()),KP=x(Y()),qP=100,xg=new Set,QZ=(0,KP.convertToMS)(VP.get(YP.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,ha=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),xg.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(xg.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Fu&&!this.overloadChecked&&performance.now()-FP>QZ)throw new kP.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,Gg.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 T=S[f===0?"before":"beforeIntermediate"];if(T){let R=T();h?h.push?h.push(R):h=[h,R]:h=R}}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)<qP>>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 Fu||(Fu=s,FP=performance.now(),Fu.then(()=>{Fu=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)+qP/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 ha{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Gg.getNextMonotonicTime)())}getReadTxn(){}},jZ=3e4;a(JZ,"startMonitoringTxns");JZ()});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 ha;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 WP,pa=be(()=>{WP=require("../index");Mn();qg();a(it,"transaction");(0,WP._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 tM={};$e(tM,{ResourceBridge:()=>$g});function Vg({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 jP(e,t){let r=xs(e),n=Vg(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||ZZ,r=Br()[t];if(!r)throw(0,cs.handleHDBError)(new Error,XZ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function zP(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 XP,uE,cs,ZP,ls,Fg,kg,eM,XZ,ZZ,e5,t5,QP,$g,rM=be(()=>{"use strict";XP=x(GP()),uE=x(Nc()),cs=x(ie());Re();ZP=x(Ru()),ls=x(L()),Fg=x(hi()),kg=x(os()),eM=x(Y());pa();dE();({HDB_ERROR_MSGS:XZ}=cs.hdb_errors),ZZ="data",e5=1e4,t5=10,$g=class extends XP.default{static{a(this,"ResourceBridge")}constructor(t){super(t),QP=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:Vg(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 wc({database:t.schema,table:null}),Fg.signalSchemaChange(new kg.SchemaEventMsg(process.pid,ls.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Yg(t.schema),Fg.signalSchemaChange(new kg.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,QP.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 zP(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,eM.async_set_timeout)(t5),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%e5===0&&await _();return l.length>0&&await _(),s?zP(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 jP(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of jP(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:Vg(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,t.cleanup_deleted_records)}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(Vg,"getSelect");a(jP,"getRecords");a(xs,"getTable");a(zP,"createDeleteResponse");a(JP,"groupRecordsInHistory")});var Hn=g((Fge,nM)=>{"use strict";var{ResourceBridge:r5}=(rM(),ae(tM)),n5=X();n5.initSync();var fE;function s5(){return fE||(fE=new r5,fE)}a(s5,"getBridge");nM.exports=s5()});var aM=g(($ge,oM)=>{"use strict";var sM=require("lodash"),ku=require("mathjs"),i5=require("jsonata"),iM=Y();oM.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?sM.uniqWith(e,sM.isEqual):e,searchJSON:o5,mad:$u.bind(null,ku.mad),mean:$u.bind(null,ku.mean),mode:$u.bind(null,ku.mode),prod:$u.bind(null,ku.prod),median:$u.bind(null,ku.median)};function $u(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($u,"aggregateFunction");function o5(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(iM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),iM.isEmpty(this.__ala__.res[r])){let n=i5(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(o5,"searchJSON")});var lM=g((Yge,cM)=>{"use strict";var It=require("moment"),Kg="YYYY-MM-DDTHH:mm:ss.SSSZZ";It.suppressDeprecationWarnings=!0;cM.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 fM=g((Kge,dM)=>{"use strict";var a5=require("@turf/area"),c5=require("@turf/length"),l5=require("@turf/circle"),u5=require("@turf/difference"),_5=require("@turf/distance"),d5=require("@turf/boolean-contains"),f5=require("@turf/boolean-equal"),E5=require("@turf/boolean-disjoint"),h5=require("@turf/helpers"),uM=L(),Ae=Y(),Si=k();dM.exports={geoArea:p5,geoLength:m5,geoCircle:S5,geoDifference:T5,geoDistance:_M,geoNear:g5,geoContains:R5,geoEqual:A5,geoCrosses:O5,geoConvert:b5};function p5(e){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return a5.default(e)}catch(t){return Si.trace(t,e),NaN}}a(p5,"geoArea");function m5(e,t){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return c5.default(e,{units:t||"kilometers"})}catch(r){return Si.trace(r,e),NaN}}a(m5,"geoLength");function S5(e,t,r){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return l5.default(e,t,{units:r||"kilometers"})}catch(n){return Si.trace(n,e,t),NaN}}a(S5,"geoCircle");function T5(e,t){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return u5(e,t)}catch(r){return Si.trace(r,e,t),NaN}}a(T5,"geoDifference");function _M(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 _5.default(e,t,{units:r||"kilometers"})}catch(n){return Si.trace(n,e,t),NaN}}a(_M,"geoDistance");function g5(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 _M(e,t,n)<=r}catch(s){return Si.trace(s,e,t),!1}}a(g5,"geoNear");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,"geoContains");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,"geoEqual");function O5(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!E5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(O5,"geoCrosses");function b5(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(uM.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(uM.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ae.autoCastJSON(e)),h5[t](e,r)}a(b5,"geoConvert")});var EE=g((Qge,EM)=>{var ma=aM(),fn=lM(),Gs=fM();EM.exports=e=>{e.aggr.mad=e.aggr.MAD=ma.mad,e.aggr.mean=e.aggr.MEAN=ma.mean,e.aggr.mode=e.aggr.MODE=ma.mode,e.aggr.prod=e.aggr.PROD=ma.prod,e.aggr.median=e.aggr.MEDIAN=ma.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ma.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ma.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 SM=g((jge,mM)=>{"use strict";var Vu=require("lodash"),Hr=require("alasql");Hr.options.cache=!1;var N5=EE(),hM=require("clone"),hE=require("recursive-iterator"),he=k(),Me=Y(),Cc=Hn(),y5=L(),{hdb_errors:I5}=ie(),{getDatabases:pM}=(Re(),ae(Ve)),w5="IS NULL",us="There was a problem performing this search. Please check the logs and try again.";N5(Hr);var Wg=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(hM(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Vu.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=pM()[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(y5.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&&Vu.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(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(hM(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(w5)>-1&&this.tables.forEach(s=>{let i={columnid:pM()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Vu.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!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 Cc.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 Cc.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 Cc.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 Cc.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=Vu.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,T=m.length;S<T;S++){let R=m[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[R]}})}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=Vu.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw 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 Cc.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(I5.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 Cc.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)}};mM.exports=Wg});var ur=g((Jge,TM)=>{"use strict";var C5=tw();TM.exports={searchByConditions:L5,searchByHash:P5,searchByValue:M5,search:U5};var Qg=Hn(),{transformReq:jg}=Y(),D5=SM();async function L5(e){return jg(e),Qg.searchByConditions(e)}a(L5,"searchByConditions");async function P5(e){jg(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Qg.searchByHash(e))r&&t.push(r);return t}a(P5,"searchByHash");async function M5(e){jg(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Qg.searchByValue(e))t.push(r);return t}a(M5,"searchByValue");function U5(e,t){try{let r=new C5(e);r.validate(),new D5(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(U5,"search")});var pE=g((Zge,gM)=>{"use strict";var v5=Hn();gM.exports={writeTransaction:B5};function B5(e,t,r){return v5.writeTransaction(e,t,r)}a(B5,"writeTransaction")});var bM=g((rRe,OM)=>{"use strict";var H5=ur(),x5=Bn(),RM=k(),G5=Pr(),tRe=pE(),q5=require("clone"),Jg=require("alasql"),F5=EE(),AM=require("util"),k5=AM.promisify(x5.getTableSchema),$5=AM.promisify(H5.search),V5=L(),zg=Y();F5(Jg);OM.exports={update:K5};var Y5="There was a problem performing this update. Please check the logs and try again.";async function K5({statement:e,hdb_user:t}){let r=await k5(e.table.databaseid,e.table.tableid),n=W5(e.columns);zg.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=q5(s),c=zg.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=Jg.parse(l).statements[0],u=await $5(_),d=Q5(n,u);return j5(o,d,t)}a(K5,"update");function W5(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Jg.compile(`SELECT ${r.expression.toString()} AS [${V5.FUNC_VAL}] FROM ?`)}),t}catch(t){throw RM.error(t),new Error(Y5)}}a(W5,"createUpdateRecord");function Q5(e,t){return zg.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Q5,"buildUpdateRecords");async function j5(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await G5.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){RM.error(`Error delete new_attributes from update response: ${i}`)}return s}a(j5,"updateRecords")});var yM=g((oRe,NM)=>{var z5=require("alasql"),J5=ur(),X5=k(),Z5=Hn(),Zg=require("util"),Xg=Y(),e8=L(),t8=Bn(),sRe=pE(),iRe=Pr(),r8="record",n8="successfully deleted",s8=Zg.callbackify(c8),i8=Zg.promisify(J5.search),o8=Zg.promisify(t8.getTableSchema);NM.exports={convertDelete:s8};function a8(e){return`${e.deleted_hashes.length} ${r8}${e.deleted_hashes.length===1?"":"s"} ${n8}`}a(a8,"generateReturnMessage");async function c8({statement:e,hdb_user:t}){let r=await o8(e.table.databaseid,e.table.tableid);Xg.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Xg.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=z5.parse(o).statements[0],l={operation:e8.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await i8(c);let _=await Z5.deleteRecords(l);return Xg.isEmptyOrZeroLength(_.message)&&(_.message=a8(_)),delete _.txn_time,_}catch(_){throw X5.error(_),_.hdb_code?_.message:_}}a(c8,"convertDelete")});var LM=g((cRe,DM)=>{"use strict";var l8=Ei(),{hdb_errors:IM}=ie(),{getDatabases:wM}=(Re(),ae(Ve));DM.exports={checkSchemaExists:CM,checkSchemaTableExists:u8,schema_describe:l8};async function CM(e){if(!wM()[e])return IM.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(CM,"checkSchemaExists");async function u8(e,t){let r=await CM(e);if(r)return r;if(!wM()[e][t])return IM.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(u8,"checkSchemaTableExists")});var Sa=g((uRe,_8)=>{_8.exports={name:"harperdb",version:"4.3.44",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.2.6",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.30.1","mqtt-packet":"~8.2.1",msgpackr:"1.11.2",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.3",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 ju={};$e(ju,{addAnalyticsListener:()=>Qu,recordAction:()=>hr,recordActionBinary:()=>En,setAnalyticsEnabled:()=>d8});function d8(e){qM=e}function hr(e,t,r,n,s){if(!qM)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||f8()}function En(e,t,r,n,s){hr(!!e,t,r,n,s)}function Qu(e){$M.push(e)}function f8(){mE=performance.now(),setTimeout(async()=>{let e=performance.now()-mE;mE=0;let t=[],r={time:Date.now(),period:e,threadId:Ta.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 VM){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 YM()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Ta.threadId,byThread:!0,...n});for(let s of $M)s(t);TE=new Map,Ta.parentPort?Ta.parentPort.postMessage({type:kM,report:r}):QM({report:r})},FM).unref()}async function E8(e,t=6e4){let r=rR(),n=KM(),s=new Promise(m=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,Yu.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,Yu.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),m(T-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:T,threadId:R}=S;for(let N of T||[]){let{path:b,method:U,type:v,metric:q,count:M,total:W,distribution:z,threads:Z,...ce}=N;M||(M=1);let _e=q+(b?"-"+b:"");U!==void 0&&(_e+="-"+U),v!==void 0&&(_e+="-"+v);let de=c.get(_e);if(de){if(de.threads){let we=de.threads[R];if(we)de=we;else{de.threads[R]=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},N),delete de.distribution,c.set(_e,de),de.byThread&&(de.threads=[],de.threads[R]=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 YM()}for(let m of _){let{path:S,method:T,type:R,metric:N,count:b,total:U,distribution:v,threads:q,...M}=m;q=q.filter(W=>W);for(let W in M){if(typeof m[W]!="number")continue;let z=0;for(let Z of q){let ce=Z[W];typeof ce=="number"&&(z+=ce)}m[W]=z}m.count=q.length,delete m.threads,delete m.byThread}for(let[m,S]of l){let T=c.get(m);S.sort((we,Ge)=>we.value>Ge.value?1:-1);let R=T.count-1,N=[],b=0,U=0,v;for(let we of VM){let Ge=R*we;for(;b<Ge;)v=S[U++],b+=v.count,U===1&&b--;let Wd=S[U>1?U-2:0];v||(v=S[0]),N.push(v.value-(v.value-Wd.value)*(b-Ge)/v.count)}let[q,M,W,z,Z,ce,_e,de,xe]=N;Object.assign(T,{p1:q,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(T=>{T||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-PM,active:h-MM,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(m,S,{append:!0}).then(T=>{T||n.primaryStore.put(m,S)})}PM=f,MM=h}async function UM(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function rR(){return vM||(vM=St({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function KM(){return BM||(BM=St({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function m8(){WM=!0;let e=(0,Wu.get)(tR.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await E8(FM,e),await UM(rR(),h8),await UM(KM(),p8)},Math.min(e/2,2147483647)).unref()}function QM(e,t){let r=e.report;r.threadId=t?.threadId||Ta.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(HM+=n.mean*n.count);r.totalBytesProcessed=HM,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(xM.get(t))}),xM.set(t,t.performance.eventLoopUtilization())),r.id=(0,SE.getNextMonotonicTime)(),rR().primaryStore.put(r.id,r),WM||m8(),S8&&(jM=g8(r))}async function g8(e){if(await jM,!Eo){let r=(0,Ku.dirname)((0,Yu.getLogFilePath)());try{Eo=await(0,eR.open)((0,Ku.join)(r,"analytics.log"),"r+")}catch{Eo=await(0,eR.open)((0,Ku.join)(r,"analytics.log"),"w+")}}let t=(await Eo.stat()).size;if(t>T8){let r=Buffer.alloc(t);await Eo.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Eo.write(r,{position:0}),await Eo.truncate(r.length),t=r.length}await Eo.write(JSON.stringify(e)+`
11
- `,t)}var Ta,GM,Yu,Ku,eR,SE,Wu,tR,TE,qM,mE,FM,kM,$M,VM,PM,MM,YM,h8,p8,vM,BM,WM,HM,xM,S8,jM,Eo,T8,Ti=be(()=>{Ta=require("worker_threads"),GM=x(rt());Re();Yu=x(k()),Ku=require("path"),eR=require("fs/promises"),SE=x(wr()),Wu=x(X()),tR=x(L());Cr();(0,Wu.initSync)();TE=new Map,qM=(0,Wu.get)(tR.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(d8,"setAnalyticsEnabled");a(hr,"recordAction");dt.recordAnalytics=hr;a(En,"recordActionBinary");mE=0,FM=1e3,kM="analytics-report",$M=[];a(Qu,"addAnalyticsListener");VM=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(f8,"sendAnalytics");a(E8,"aggregation");PM=0,MM=0,YM=a(()=>new Promise(setImmediate),"rest");a(UM,"cleanup");h8=36e5,p8=31536e6;a(rR,"getRawAnalyticsTable");a(KM,"getAnalyticsTable");(0,GM.setChildListenerByType)(kM,QM);a(m8,"startScheduledTasks");HM=0,xM=new Map,S8=!1;a(QM,"recordAnalytics");T8=1e6;a(g8,"logAnalytics")});var aR=g((ORe,aU)=>{"use strict";var{decode:R8}=require("msgpackr"),{isMainThread:gRe,parentPort:RRe,threadId:ARe}=require("worker_threads"),AE=gt(),Dc=Ze(),iR=L(),pr=k(),sR=X(),A8=L(),{onMessageByType:O8}=rt(),ZM=fi(),{recordAction:zM,recordActionBinary:b8}=(Ti(),ae(ju)),{publishToStream:N8}=AE,{ConsumerEvents:JM}=require("nats"),y8=ur(),{promisify:I8}=require("util"),eU=I8(setTimeout),OE=1e4,bE,RE,w8,C8,tU,zu=new Map,Lc=new Map;aU.exports={initialize:rU,ingestConsumer:oR,setSubscription:D8,setIgnoreOrigin:M8,getDatabaseSubscriptions:P8,updateConsumer:nU};async function rU(){O8(iR.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await nU(n)}),tU=!0,pr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await AE.getNATSReferences();bE=e,RE=e.info.server_name,w8=t,C8=r}a(rU,"initialize");async function nU(e){if(e.status==="start"){let{js:t,jsm:r}=await sU(e.node_domain_name);oR(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=zu.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?.(),zu.set(e.stream_name+e.node_domain_name,"close")),Lc.get(e.node_domain_name)==="failed"&&Lc.set(e.node_domain_name,"close")}}a(nU,"updateConsumer");var NE=new Map;function D8(e,t,r){let n=NE.get(e);n||NE.set(e,n=new Map),n.set(t,r),tU||rU().then(L8)}a(D8,"setSubscription");async function L8(){let e=await y8.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Dc.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions)if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await sU(r),!n))break;let{schema:o,table:c}=i,l=ZM.createNatsTableStreamName(o,c);oR(l,n,s,r)}}}a(L8,"accessConsumers");async function sU(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(Lc.get(e)==="close")break;Lc.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 eU(i)}return{js:t,jsm:r}}a(sU,"connectToRemoteJS");function P8(){return NE}a(P8,"getDatabaseSubscriptions");var iU;function M8(e){iU=e}a(M8,"setIgnoreOrigin");var oU=100,XM=new Array(oU),gE=0;async function oR(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(Lc.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 eU(u)}let c=!1,l;for(;!c;){if(zu.get(e+n)==="close"||Lc.get(n)==="close"){zu.delete(e+n),c=!0;continue}l=await i.consume({max_messages:sR.get(iR.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),zu.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 XM[gE],XM[gE]=U8(u).catch(d=>{pr.error(d)}),++gE>=oU&&(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(oR,"ingestConsumer");async function U8(e){let t=R8(e.data);zM(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=sR.get(iR.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Dc.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Dc.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Dc.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!iU),b8(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Dc.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(Dc.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let m=new Promise(U=>h=U),{timestamp:S,user:T,node_name:R}=E||{},N=NE.get(c)?.get(_);if(!N)throw new Error(`Missing table for replication message: ${_}`);if(o==="define_schema")t.type=o,t.onCommit=h,N.send(t);else if(u.length===1&&!l)N.send({type:nR(o),value:u[0],id:d?.[0],expiresAt:f,timestamp:S,table:_,onCommit:h,user:T,nodeName:R});else{let U=u.map((v,q)=>({type:nR(o),value:v,expiresAt:f,id:d?.[q],table:_}));for(;l;)U.push({type:nR(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;N.send({type:"transaction",writes:U,table:_,timestamp:S,onCommit:h,user:T,nodeName:R})}sR.get(A8.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&N8(e.subject.split(".").slice(0,-1).join("."),ZM.createNatsTableStreamName(c,_),e.headers,e.data),await m;let b=Date.now()-S;S&&zM(b,"replication-latency",e.subject,o,"ingest")}catch(o){pr.error(o)}e.ack()}a(U8,"messageProcessor");function nR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(nR,"convertOperation")});var gt=g((DRe,bU)=>{"use strict";var Qt=X();Qt.initSync();var v8=require("fs-extra"),B8=require("semver"),Zu=require("path"),{monotonicFactory:H8}=require("ulidx"),lU=H8(),x8=require("util"),uU=require("child_process"),G8=x8.promisify(uU.exec),q8=uU.spawn,nr=Ze(),Ce=L(),yE=Y(),_s=k(),IE=fi(),F8=pE(),Ju=Et(),{broadcast:k8,onMessageByType:$8,getWorkerIndex:V8}=rt(),{isMainThread:_U}=require("worker_threads"),{Encoder:Y8,decode:_R}=require("msgpackr"),dU=new Y8,{isEmpty:Oa}=yE,fU=Ur(),NRe=48*36e11;_U&&$8(Ce.ITC_EVENT_TYPES.RESTART,()=>{mr=void 0,Aa=void 0});var{connect:K8,StorageType:W8,RetentionPolicy:Q8,AckPolicy:dR,DeliverPolicy:fR,DiscardPolicy:j8,NatsConnection:yRe,JetStreamManager:IRe,JetStreamClient:wRe,StringCodec:CRe,JSONCodec:z8,createInbox:ER,headers:J8,ErrorCode:cU}=require("nats"),{PACKAGE_ROOT:X8}=L(),Z8=Sa(),{recordAction:e6}=(Ti(),ae(ju)),EU=z8(),t6="clustering",r6=Z8.engines[nr.NATS_SERVER_NAME],n6=Zu.join(X8,"dependencies"),uR=Zu.join(n6,`${process.platform}-${process.arch}`,nr.NATS_BINARY_NAME),cR,lR,Xu,ga,Ra;bU.exports={runCommand:hU,checkNATSServerInstalled:s6,createConnection:hR,getConnection:e_,getJetStreamManager:t_,getJetStream:mU,getNATSReferences:qs,getServerList:o6,createLocalStream:pR,listStreams:SU,deleteLocalStream:a6,getServerConfig:Pc,listRemoteStreams:c6,viewStream:l6,viewStreamIterator:u6,publishToStream:_6,request:E6,reloadNATS:mR,reloadNATSHub:h6,reloadNATSLeaf:p6,extractServerName:f6,requestErrorHandler:m6,createLocalTableStream:AU,createTableStreams:g6,purgeTableStream:OU,purgeSchemaTableStreams:R6,getStreamInfo:A6,updateLocalStreams:b6,closeConnection:i6,getJsmServerName:wE,addNatsMsgHeader:TU,clearClientCache:pU,updateRemoteConsumer:S6,createConsumer:gU,updateConsumerIterator:T6};async function hU(e,t=void 0){let{stdout:r,stderr:n}=await G8(e,{cwd:t});if(n)throw new Error(n.replace(`
9
+ `)},Hz="certificate.pem",xz="privateKey.pem",Gz="ca.pem";BC.exports={CERTIFICATE_VALUES:Bz,CERTIFICATE_PEM_NAME:Hz,PRIVATEKEY_PEM_NAME:xz,CA_PEM_NAME:Gz}});var UT=R((Jme,kC)=>{"use strict";var qC=require("fs-extra"),le=require("joi"),qz=require("os"),{boolean:ye,string:dr,number:st,array:Ff}=le.types(),{totalmem:HC}=require("os"),oa=require("path"),Fz=k(),kf=Y(),zme=MT(),xC=D(),kz=nt(),GC="log",Vz="components",$z="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Yz="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Kz="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",Wz="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",Qz="rootPath config parameter is undefined",jz="clustering.enabled config parameter is undefined",aa=st.min(0).required(),Vf=Ff.items({host:dr.required(),port:aa}).empty(null),Us,FC=!1;kC.exports={configValidator:zz,routesValidator:rJ,route_constraints:Vf};function zz(e,t=!1){if(FC=t,Us=e.rootPath,kf.isEmpty(Us))throw Qz;let r=ye.required(),n=st.min(0).max(1e3).empty(null).default(tJ),s=dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(bu),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(bu),l=le.custom(Xz).empty(null).default(bu),_=e.clustering?.enabled;if(kf.isEmpty(_))throw jz;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:Vf}).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:Vf}).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(eJ).optional().empty(null),maxSize:dr.custom(Zz).optional().empty(null),path:dr.optional().empty(null).default(bu)}).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(bu),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(zz,"configValidator");function Jz(e){return FC||qC.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Jz,"doesPathExist");function Xz(e,t){le.assert(e,dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Jz(e);if(r)return t.message(r)}a(Xz,"validatePath");function Zz(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message($z);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Kz):e}a(Zz,"validateRotationMaxSize");function eJ(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Yz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Wz):e}a(eJ,"validateRotationInterval");function tJ(e,t){let r=t.state.path.join("."),n=qz.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||HC();return i=Math.round(Math.min(i,HC())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),Fz.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(tJ,"setDefaultThreads");function bu(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,GC);case"clustering.leafServer.streams.path":return oa.join(Us,"clustering","leaf");case"storage.path":let n=oa.join(Us,xC.LEGACY_DATABASES_DIR_NAME);return qC.existsSync(n)?n:oa.join(Us,xC.DATABASES_DIR_NAME);case"logging.rotation.path":return oa.join(Us,GC);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(bu,"setDefaultRoot");function rJ(e){let t=le.object({routes:Vf});return kz.validateBySchema({routes:e},t)}a(rJ,"routesValidator")});var Et=R((eSe,JC)=>{"use strict";var ln=D(),Wt=Y(),Bt=k(),{configValidator:nJ,routesValidator:VC}=UT(),Mr=require("fs-extra"),sJ=require("yaml"),ss=require("path"),iJ=require("is-number"),YC=require("properties-reader"),oJ=require("lodash"),{handleHDBError:aJ}=ie(),{HTTP_STATUS_CODES:cJ,HDB_ERROR_MSGS:$f}=nn(),Zme=require("minimist"),{server:lJ}=(Cr(),ae(jo)),{DATABASES_PARAM_CONFIG:Nu,CONFIG_PARAMS:cn,CONFIG_PARAM_MAP:is}=ln,uJ="Unable to get config value because config is uninitialized",_J="Config successfully initialized",dJ="Error backing up config file",fJ="Empty parameter sent to getConfigValue",KC=ss.join(ln.PACKAGE_ROOT,"config","yaml",ln.HDB_DEFAULT_CONFIG_FILE),EJ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",$C={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:hJ,getDefaultConfig:pJ,getConfigValue:QC,initConfig:BT,flattenConfig:Ec,updateConfigValue:jC,updateConfigObject:SJ,getConfiguration:RJ,setConfiguration:AJ,readConfigFile:xT,getClusteringRoutes:OJ,initOldConfig:zC,getConfigFromFile:bJ,getConfigFilePath:ca,addConfig:NJ,deleteConfigFromFile:yJ,getConfigObj:IJ};function hJ(e,t=!1){let r=lo(KC);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=vT(l,e[c]);l==="rootPath"&&u?.endsWith("/")&&(u=u.slice(0,-1));try{r.setIn([..._],u)}catch(d){Bt.error(d)}}}n&&WC(r,n),HT(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(hJ,"createConfigFile");function WC(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(Nu.TABLES))for(let i in n[s][Nu.TABLES])for(let o in n[s][Nu.TABLES][i]){let c=n[s][Nu.TABLES][i][o],l=[cn.DATABASES,s,Nu.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(WC,"setSchemasConfig");function pJ(e){if(Yf===void 0){let r=lo(KC);Yf=Ec(r.toJSON())}let t=is[e.toLowerCase()];if(t!==void 0)return Yf[t.toLowerCase()]}a(pJ,"getDefaultConfig");function QC(e){if(e==null){Bt.error(fJ);return}if(Ht===void 0){Bt.trace(uJ);return}let t=is[e.toLowerCase()];if(t!==void 0)return Ht[t.toLowerCase()]}a(QC,"getConfigValue");function ca(e=Wt.getPropsFilePath()){let t=Wt.getEnvCliRootPath();return t?ss.join(t,ln.HDB_CONFIG_FILE):YC(e).get(ln.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ca,"getConfigFilePath");function BT(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{zC(r);return}catch(i){if(i.code!==ln.NODE_ERROR_CODES.ENOENT)throw i}try{n=lo(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}`)}mJ(n,r),HT(n);let s=n.toJSON();if(lJ.config=s,Ht=Ec(s),Ht.logging_rotation_rotate)for(let i in $C)Ht[i]&&Bt.error(`Config ${$C[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Bt.trace(_J)}}a(BT,"initConfig");function mJ(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(mJ,"checkForUpdatedConfig");function HT(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=nJ(r,t);if(n.error)throw $f.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(HT,"validateConfig");function SJ(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(SJ,"updateConfigObject");function jC(e,t,r=void 0,n=!1,s=!1,i=!1){Ht===void 0&&BT();let o=QC(is.hdb_root),c=ss.join(o,ln.HDB_CONFIG_FILE),l=lo(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=vT(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=vT(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(T){Bt.error(T)}}}_&&WC(l,_),HT(l);let u=l.getIn(["rootPath"]),d=ss.join(u,ln.HDB_CONFIG_FILE);n===!0&&TJ(c,u),Mr.writeFileSync(d,String(l)),s&&(Ht=Ec(l.toJSON())),Bt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(jC,"updateConfigValue");function TJ(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(dJ),Bt.error(r)}}a(TJ,"backupConfigFile");var gJ=["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])&&!gJ.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 vT(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(iJ(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(vT,"castConfigValue");function RJ(){let e=Wt.getPropsFilePath(),t=ca(e);return lo(t).toJSON()}a(RJ,"getConfiguration");async function AJ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return jC(void 0,void 0,s,!0),EJ}catch(i){throw typeof i=="string"||i instanceof String?aJ(i,i,cJ.BAD_REQUEST,void 0,void 0,!0):i}}a(AJ,"setConfiguration");function xT(){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 lo(t).toJSON()}a(xT,"readConfigFile");function lo(e){return sJ.parseDocument(Mr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(lo,"parseYamlDoc");function OJ(){let e=xT(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Wt.isEmptyOrZeroLength(t)?[]:t;let r=VC(t);if(r)throw $f.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Wt.isEmptyOrZeroLength(n)?[]:n;let s=VC(n);if(s)throw $f.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 $f.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(OJ,"getClusteringRoutes");function zC(e){let t=YC(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(zC,"initOldConfig");function bJ(e){let t=xT();return oJ.get(t,e.replaceAll("_","."))}a(bJ,"getConfigFromFile");async function NJ(e,t){let r=lo(ca());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Mr.writeFile(ca(),String(r))}a(NJ,"addConfig");function yJ(e){let t=ca(Wt.getPropsFilePath()),r=lo(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ss.join(n,ln.HDB_CONFIG_FILE);Mr.writeFileSync(s,String(r))}a(yJ,"deleteConfigFromFile");function IJ(){return Kf||(BT(),Kf)}a(IJ,"getConfigObj")});var ZC=R((rSe,XC)=>{"use strict";var Wf=D(),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}},GT=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}};XC.exports={BaseLicense:Qf,ExtendedLicense:GT}});var la=R((sSe,iL)=>{"use strict";var pc=require("fs-extra"),tL=qf(),rL=require("crypto"),wJ=require("moment"),CJ=require("uuid").v4,fr=k(),FT=require("path"),LJ=Y(),uo=D(),{totalmem:eL}=require("os"),DJ=ZC().ExtendedLicense,hc="invalid license key format",PJ="061183",MJ="mofi25",UJ="aes-256-cbc",vJ=16,BJ=32,nL=X();nL.initSync();var qT;iL.exports={validateLicense:sL,generateFingerPrint:xJ,licenseSearch:$T,getLicense:FJ,checkMemoryLimit:kJ};function kT(){return FT.join(nL.getHdbBasePath(),uo.LICENSE_KEY_DIR_NAME,uo.LICENSE_FILE_NAME)}a(kT,"getLicenseDirPath");function HJ(){let e=kT();return FT.join(e,uo.LICENSE_FILE_NAME)}a(HJ,"getLicenseFilePath");function VT(){let e=kT();return FT.join(e,uo.REG_KEY_FILE_NAME)}a(VT,"getFingerPrintFilePath");async function xJ(){let e=VT();try{return await pc.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await GJ();throw fr.error(`Error writing fingerprint file to ${e}`),fr.error(t),new Error("There was an error generating the fingerprint")}}a(xJ,"generateFingerPrint");async function GJ(){let e=CJ(),t=tL.hash(e),r=VT();try{await pc.mkdirp(kT()),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(GJ,"writeFingerprint");function sL(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:uo.RAM_ALLOCATION_ENUM.DEFAULT,version:uo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return fr.error("empty license key passed to validate."),r;let n=VT(),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(MJ),c=o[1];c=Buffer.concat([Buffer.from(c)],vJ);let l=Buffer.concat([Buffer.from(i)],BJ),_=rL.createDecipheriv(UJ,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=qJ(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<wJ().valueOf()&&(r.valid_date=!1),tL.validate(o[1],`${PJ}${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(sL,"validateLicense");function qJ(e,t){try{let r=rL.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(qJ,"checkOldLicense");function $T(){let e=new DJ,t=[];try{t=pc.readFileSync(HJ(),"utf-8").split(uo.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=sL(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=uo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return qT=e,e}a($T,"licenseSearch");async function FJ(){return qT||await $T(),qT}a(FJ,"getLicense");function kJ(){let e=$T().ram_allocation,t=process.constrainedMemory?.()||eL();if(t=Math.round(Math.min(t,eL())/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(kJ,"checkMemoryLimit")});var Ur=R((lSe,RL)=>{"use strict";var lL="username is required",uL="nothing to update, must supply active, role or password to update",_L="password cannot be an empty string",dL="If role is specified, it cannot be empty.",fL="active must be true or false";RL.exports={addUser:JJ,alterUser:XJ,dropUser:e2,getSuperUser:s2,userInfo:t2,listUsers:zf,listUsersExternal:r2,setUsersToGlobal:Sc,findAndValidateUser:TL,getClusterUser:i2,USERNAME_REQUIRED:lL,ALTERUSER_NOTHING_TO_UPDATE:uL,EMPTY_PASSWORD:_L,EMPTY_ROLE:dL,ACTIVE_BOOLEAN:fL};var EL=Pr(),VJ=ia(),WT=qf(),hL=MC(),pL=ur(),QT=Ei(),un=Y(),mL=require("validate.js"),Ne=k(),{promisify:$J}=require("util"),jT=fi(),oL=D(),aL=Ze(),YJ=Et(),oSe=X(),aSe=la(),KJ=_i(),{table:cSe}=(Re(),ae($e)),{handleHDBError:vs,hdb_errors:WJ}=ie(),{HTTP_STATUS_CODES:Bs,AUTHENTICATION_ERROR_MSGS:YT,HDB_ERROR_MSGS:mc}=WJ,{UserEventMsg:zT}=os(),KT=require("lodash"),{server:JT}=(Cr(),ae(jo)),QJ=k();JT.getUser=(e,t)=>TL(e,t,t!=null);var SL={username:!0,active:!0,role:!0,password:!0},cL=new Map,jf=pL.searchByValue,jJ=pL.searchByHash,zJ=$J(VJ.delete);async function JJ(e){let t=mL.cleanAttributes(e,SL),r=hL.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=jT.encrypt(t.password)),t.password=WT.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await EL.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],QT.signalUserChange(new zT(process.pid)),`${c.username} successfully added`}a(JJ,"addUser");async function XJ(e){let t=mL.cleanAttributes(e,SL);if(un.isEmptyOrZeroLength(t.username))throw new Error(lL);if(un.isEmptyOrZeroLength(t.password)&&un.isEmptyOrZeroLength(t.role)&&un.isEmptyOrZeroLength(t.active))throw new Error(uL);if(!un.isEmpty(t.password)&&un.isEmptyOrZeroLength(t.password.trim()))throw new Error(_L);if(!un.isEmpty(t.active)&&!un.isBoolean(t.active))throw new Error(fL);let r=ZJ(t.username);if(!un.isEmpty(t.password)&&!un.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=jT.encrypt(t.password)),t.password=WT.hash(t.password)),t.role==="")throw new Error(dL);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 EL.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 QT.signalUserChange(new zT(process.pid)),s}a(XJ,"alterUser");function ZJ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(ZJ,"isClusterUser");async function e2(e){try{let t=hL.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 zJ(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 QT.signalUserChange(new zT(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(e2,"dropUser");async function t2(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 jJ(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(t2,"userInfo");async function r2(){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(r2,"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],n2(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 n2(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(KJ)){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(n2,"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 TL(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,YT.GENERIC_AUTH_FAIL,Bs.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw vs(new Error,YT.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(cL.get(t)===n.password)return s;if(WT.validate(n.password,t))cL.set(t,n.password);else throw vs(new Error,YT.GENERIC_AUTH_FAIL,Bs.UNAUTHORIZED,void 0,void 0,!0)}return s}a(TL,"findAndValidateUser");async function s2(){global.hdb_users||await Sc();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(s2,"getSuperUser");async function i2(){let e=await zf(),t=YJ.getConfigFromFile(oL.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!un.isEmpty(r)&&r?.role?.role===oL.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=jT.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+aL.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+aL.SERVER_SUFFIX.ADMIN,r}a(i2,"getClusterUser");var gL=[];JT.invalidateUser=function(e){for(let t of gL)try{t(e)}catch(r){QJ.error("Error invalidating user",r)}};JT.onInvalidatedUser=function(e){gL.push(e)}});var Iu=R((fSe,NL)=>{"use strict";var ua=k(),_n=D(),o2=tC(),_Se=Bn(),dSe=oo(),a2=Ur(),{validateEvent:AL}=os(),yu=Hn(),c2=require("process"),{resetDatabases:l2}=(Re(),ae($e)),u2={[_n.ITC_EVENT_TYPES.SCHEMA]:_2,[_n.ITC_EVENT_TYPES.USER]:bL};async function _2(e){let t=AL(e);if(t){ua.error(t);return}ua.trace("ITC schemaHandler received schema event:",e),await o2(e.message),await d2(e.message)}a(_2,"schemaHandler");async function d2(e){try{yu.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),yu.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),yu.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=l2();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ua.error(t)}}a(d2,"syncSchemaMetadata");var OL=[];async function bL(e){try{try{yu.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),yu.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ua.warn(r)}let t=AL(e);if(t){ua.error(t);return}ua.trace(`ITC userHandler ${_n.HDB_ITC_CLIENT_PREFIX}${c2.pid} received user event:`,e),await a2.setUsersToGlobal();for(let r of OL)r()}catch(t){ua.error(t)}}a(bL,"userHandler");bL.addListener=function(e){OL.push(e)};NL.exports=u2});var os=R((TSe,IL)=>{"use strict";var hSe=k(),XT=Y(),f2=D(),{ITC_ERRORS:wu}=nn(),{parentPort:pSe,threadId:E2,isMainThread:h2,workerData:mSe}=require("worker_threads"),{onMessageFromWorkers:p2,broadcast:SSe,broadcastWithAcknowledgement:m2}=rt();IL.exports={sendItcEvent:S2,validateEvent:yL,SchemaEventMsg:T2,UserEventMsg:g2};var Jf;p2(async(e,t)=>{Jf=Jf||Iu(),yL(e),Jf[e.type]&&await Jf[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function S2(e){return!h2&&e.message&&(e.message.originator=E2),m2(e)}a(S2,"sendItcEvent");function yL(e){if(typeof e!="object")return wu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||XT.isEmpty(e.type))return wu.MISSING_TYPE;if(!e.hasOwnProperty("message")||XT.isEmpty(e.message))return wu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||XT.isEmpty(e.message.originator))return wu.MISSING_ORIGIN;if(f2.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return wu.INVALID_EVENT(e.type)}a(yL,"validateEvent");function T2(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(T2,"SchemaEventMsg");function g2(e){this.originator=e}a(g2,"UserEventMsg")});var Ei=R((ASe,DL)=>{"use strict";var wL=D(),RSe=Y(),Xf=k(),CL=Xw(),Tc,{sendItcEvent:LL}=os();function R2(e){try{Xf.trace("signalSchemaChange called with message:",e),Tc=Tc||Iu();let t=new CL(wL.ITC_EVENT_TYPES.SCHEMA,e);return Tc.schema(t),LL(t)}catch(t){Xf.error(t)}}a(R2,"signalSchemaChange");function A2(e){try{Xf.trace("signalUserChange called with message:",e),Tc=Tc||Iu();let t=new CL(wL.ITC_EVENT_TYPES.USER,e);return Tc.user(t),LL(t)}catch(t){Xf.error(t)}}a(A2,"signalUserChange");DL.exports={signalSchemaChange:R2,signalUserChange:A2}});var Zf=R((bSe,ML)=>{"use strict";var PL=Y(),O2=D(),b2=k(),N2=Df(),y2=Lf(),I2=Ei(),{SchemaEventMsg:w2}=os(),C2="already exists in";ML.exports=L2;async function L2(e,t,r){if(PL.isEmptyOrZeroLength(r))return r;let n=[];PL.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 D2(e,t.schema,t.name,i)})),s}a(L2,"lmdbCheckForNewAttributes");async function D2(e,t,r,n){let s=new y2(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await P2(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(C2))b2.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(D2,"createNewAttribute");async function P2(e){let t;return t=await N2(e),I2.signalSchemaChange(new w2(process.pid,O2.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(P2,"createAttribute")});var gc=R((ySe,UL)=>{"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}};UL.exports=ZT});var BL=R((wSe,vL)=>{"use strict";var M2=gc(),U2=D().OPERATIONS_ENUM,eg=class extends M2{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(U2.INSERT,r,n,s,i),this.records=t}};vL.exports=eg});var xL=R((LSe,HL)=>{"use strict";var v2=gc(),B2=D().OPERATIONS_ENUM,tg=class extends v2{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(B2.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};HL.exports=tg});var qL=R((PSe,GL)=>{"use strict";var H2=gc(),x2=D().OPERATIONS_ENUM,rg=class extends H2{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(x2.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};GL.exports=rg});var kL=R((USe,FL)=>{"use strict";var G2=gc(),q2=D().OPERATIONS_ENUM,ng=class extends G2{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(q2.DELETE,n,s,t,i),this.original_records=r}};FL.exports=ng});var Cu=R((HSe,KL)=>{"use strict";var BSe=require("path"),VL=Ye(),F2=BL(),k2=xL(),V2=qL(),$2=kL(),Rc=_t(),$L=Y(),{CONFIG_PARAMS:Y2}=D(),YL=X();YL.initSync();var eE=D().OPERATIONS_ENUM,{getTransactionAuditStorePath:K2}=Je();KL.exports=W2;async function W2(e,t){if(YL.get(Y2.LOGGING_AUDITLOG)===!1)return;let r=K2(e.schema,e.table),n=await VL.openEnvironment(r,e.table,!0),s=Q2(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){VL.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),$L.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(W2,"writeTransaction");function Q2(e,t){let r=$L.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===eE.INSERT)return new F2(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.UPDATE)return new k2(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 $2(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Q2,"createTransactionObject")});var sg=R((qSe,WL)=>{"use strict";var j2=Ru(),GSe=su(),Lu=D(),z2=iu(),J2=Zo().insertRecords,X2=Ye(),Z2=k(),e4=Zf(),{getSchemaPath:t4}=Je(),r4=Cu();WL.exports=n4;async function n4(e){try{let{schema_table:t,attributes:r}=j2(e);z2(e,r,t.hash_attribute),e.schema!==Lu.SYSTEM_SCHEMA_NAME&&(r.includes(Lu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Lu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Lu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Lu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await e4(e.hdb_auth_header,t,r),s=t4(e.schema,e.table),i=await X2.openEnvironment(s,e.table),o=await J2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await r4(e,o)}catch(c){Z2.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(n4,"lmdbCreateRecords")});var zL=R((kSe,jL)=>{"use strict";var QL=D(),s4=sg(),i4=su(),o4=require("fs-extra"),{getSchemaPath:a4}=Je();jL.exports=c4;async function c4(e){let t=[{name:e.schema,createddate:Date.now()}],r=new i4(QL.SYSTEM_SCHEMA_NAME,QL.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await s4(r),await o4.mkdirp(a4(e.schema))}a(c4,"lmdbCreateSchema")});var XL=R(($Se,JL)=>{"use strict";var ig=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}};JL.exports=ig});var rD=R((jSe,tD)=>{"use strict";var ZL=Ye(),og=wr(),ag=nn().LMDB_ERRORS_ENUM,l4=_t(),eD=k(),KSe=Y(),u4=require("lmdb"),_4=XL(),d4=D(),{OVERFLOW_MARKER:WSe,MAX_SEARCH_KEY_LENGTH:QSe}=l4,f4=d4.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function E4(e,t,r,n){if(og.validateEnv(e),t===void 0)throw new Error(ag.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ag.IDS_REQUIRED):new Error(ag.IDS_MUST_BE_ITERABLE);try{let s=ZL.listDBIs(e);ZL.initializeDBIs(e,t,s);let i=new _4,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[f4]>n){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,u4.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let T=s[S];if(!h.hasOwnProperty(T)||T===t)continue;let g=e.dbis[T],N=h[T];if(N!=null)try{let A=og.getIndexedValues(N);if(A)for(let P=0,v=A.length;P<v;P++)g.remove(A[P],o)}catch{eD.warn(`cannot delete from attribute: ${T}, ${N}:${o}`)}}});c.push(m),l.push(o),i.original_records.push(h)}catch(h){eD.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=og.getNextMonotonicTime(),i}catch(s){throw s}}a(E4,"deleteRecords");tD.exports={deleteRecords:E4}});var Du=R((JSe,sD)=>{"use strict";var Ac=Y(),h4=rD(),p4=Ye(),{getSchemaPath:m4}=Je(),S4=Cu(),T4=k();sD.exports=g4;async function g4(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 nD([],[]);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=m4(e.schema,e.table),i=await p4.openEnvironment(s,e.table),o=await h4.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await S4(e,o)}catch(c){T4.error(`unable to write transaction due to ${c.message}`)}return nD(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(g4,"lmdbDeleteRecords");function nD(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(nD,"createDeleteResponse")});var lg=R((eTe,iD)=>{"use strict";var R4=D(),ZSe=wr();function cg(e,t){let r=Object.create(null);if(t.length===1&&R4.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(cg,"parseRow");function A4(e,t,r,n){let s=cg(r,e);n.push(s)}a(A4,"searchAll");function O4(e,t,r,n){let s=cg(r,e);n[t]=s}a(O4,"searchAllToMap");function b4(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(b4,"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 N4(e,t,r,n,s,i){t.toString().endsWith(e)&&_a(t,r,n,s,i)}a(N4,"endsWith");function y4(e,t,r,n,s,i){t.toString().includes(e)&&_a(t,r,n,s,i)}a(y4,"contains");function I4(e,t,r,n,s,i){t>e&&_a(t,r,n,s,i)}a(I4,"greaterThanCompare");function w4(e,t,r,n,s,i){t>=e&&_a(t,r,n,s,i)}a(w4,"greaterThanEqualCompare");function C4(e,t,r,n,s,i){t<e&&_a(t,r,n,s,i)}a(C4,"lessThanCompare");function L4(e,t,r,n,s,i){t<=e&&_a(t,r,n,s,i)}a(L4,"lessThanEqualCompare");iD.exports={parseRow:cg,searchAll:A4,searchAllToMap:O4,iterateDBI:b4,endsWith:N4,contains:y4,greaterThanCompare:I4,greaterThanEqualCompare:w4,lessThanCompare:C4,lessThanEqualCompare:L4,pushResults:_a}});var Oc=R((iTe,dD)=>{"use strict";var _o=Ye(),rTe=k(),dn=wr(),tE=_t(),Tt=nn().LMDB_ERRORS_ENUM,nTe=Y(),D4=D(),rE=lg(),{parseRow:P4}=rE,sTe=require("lmdb"),{OVERFLOW_MARKER:oD,MAX_SEARCH_KEY_LENGTH:M4}=tE;function aD(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(aD,"iterateFullIndex");function Pu(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 g={transaction:u,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!_,exclusiveStart:i===!0?_:l};return f===r?(g.values=!1,d.getRange(g).map(N=>({value:N}))):d.getRange(g)})}a(Pu,"iterateRangeBetween");function da(e,t,r,n){let s=e.database||e,i=_o.openDBI(s,r);i[tE.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&_o.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 cD(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(oD)){if(!s)if(r)s=_o.openDBI(e,r);else{let l=_o.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=_o.openDBI(e,l[_]),!s[tE.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(cD,"getOverflowCheck");function U4(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=Mu(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>P4(_.value,r))))}a(U4,"searchAll");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);nE(r),r=Mu(e.database||e,r);let o=new Map;for(let{key:c,value:l}of aD(e,t,t,n,s,i))o.set(c,rE.parseRow(l,r));return o}a(v4,"searchAllToMap");function B4(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=aD(e,void 0,t,r,n,s),c=o.transaction,l=cD(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(B4,"iterateDBI");function H4(e,t){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);return _o.statDBI(e,t).entryCount}a(H4,"countAll");function x4(e,t,r,n,s=!1,i=void 0,o=void 0){return fo(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(x4,"equals");function G4(e,t,r){return fo(e,t,r),_o.openDBI(e,t).getValuesCount(r)}a(G4,"count");function q4(e,t,r,n,s=!1,i=void 0,o=void 0){return fo(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(q4,"startsWith");function F4(e,t,r,n,s=!1,i=void 0,o=void 0){return lD(e,t,r,n,s,i,o,!0)}a(F4,"endsWith");function lD(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return fo(e,r,n),da(e,null,r,(l,_,u,d)=>{let E=cD(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(oD)?_.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(lD,"contains");function k4(e,t,r,n,s=!1,i=void 0,o=void 0){fo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Pu(e,t,r,n,l,s,i,o,!0,!1)}a(k4,"greaterThan");function V4(e,t,r,n,s=!1,i=void 0,o=void 0){fo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Pu(e,t,r,n,l,s,i,o,!1,!1)}a(V4,"greaterThanEqual");function $4(e,t,r,n,s=!1,i=void 0,o=void 0){fo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Pu(e,t,r,l,n,s,i,o,!1,!0)}a($4,"lessThan");function Y4(e,t,r,n,s=!1,i=void 0,o=void 0){fo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Pu(e,t,r,l,n,s,i,o,!1,!1)}a(Y4,"lessThanEqual");function K4(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 Pu(e,t,r,n,s,i,o,c)}a(K4,"between");function W4(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=Mu(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(W4,"searchByHash");function Q4(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(Q4,"checkHashExists");function j4(e,t,r,n,s=[]){return _D(e,t,r,n,s),uD(e,t,r,n,s).map(i=>i[1])}a(j4,"batchSearchByHash");function z4(e,t,r,n,s=[]){_D(e,t,r,n,s);let i=new Map;for(let[o,c]of uD(e,t,r,n,s))i.set(o,c);return i}a(z4,"batchSearchByHashToMap");function uD(e,t,r,n,s=[]){return da(e,t,t,(i,o,c)=>{r=Mu(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(uD,"batchHashSearch");function _D(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(_D,"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 fo(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>M4)throw new Error(Tt.SEARCH_VALUE_TOO_LARGE)}a(fo,"validateComparisonFunctions");function Mu(e,t){return t.length===1&&D4.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=_o.listDBIs(e)),t}a(Mu,"setGetWholeRowAttributes");dD.exports={searchAll:U4,searchAllToMap:v4,count:G4,countAll:H4,equals:x4,startsWith:q4,endsWith:F4,contains:lD,searchByHash:W4,setGetWholeRowAttributes:Mu,batchSearchByHash:j4,batchSearchByHashToMap:z4,checkHashExists:Q4,iterateDBI:B4,greaterThan:k4,greaterThanEqual:V4,lessThan:$4,lessThanEqual:Y4,between:K4}});var bc=R((aTe,mD)=>{var fD=require("lodash"),ED=nt(),me=require("joi"),J4=Y(),{hdb_schema_table:Uu,checkValidTable:hD,hdb_table:pD,hdb_database:sE}=Ps(),{handleHDBError:X4,hdb_errors:Z4}=ie(),{getDatabases:e3}=(Re(),ae($e)),{HTTP_STATUS_CODES:t3}=Z4,r3=me.object({database:sE,schema:sE,table:pD,search_attribute:Uu,search_value:me.any().required(),get_attributes:me.array().min(1).items(me.alternatives(Uu,me.object())).optional(),desc:me.bool(),limit:me.number().integer().min(1),offset:me.number().integer().min(0)}),n3=me.object({database:sE,schema:sE,table:pD,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(Uu,me.object())).optional(),sort:me.object({attribute:me.alternatives(Uu,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(Uu,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()});mD.exports=function(e,t){let r=null;switch(t){case"value":r=ED.validateBySchema(e,r3);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(hD("database",e.schema)),i(hD("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=ED.validateBySchema(e,n3);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=J4.checkGlobalSchemaTable(e.schema,e.table);if(s)return X4(new Error,s,t3.NOT_FOUND);let o=e3()[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 _=fD.filter(c,u=>u!=="*"&&!u.startsWith?.("$")&&u.attribute!=="*"&&!Array.isArray(u)&&!u.name&&!fD.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 ug=R((lTe,SD)=>{"use strict";var s3=Ye(),i3=bc(),{getSchemaPath:o3}=Je();SD.exports=a3;function a3(e){let t=i3(e,"hashes");if(t)throw t;let r=o3(e.schema,e.table);return s3.openEnvironment(r,e.table)}a(a3,"initialize")});var _g=R((_Te,TD)=>{"use strict";var c3=Oc(),l3=ug();TD.exports=u3;async function u3(e){let t=await l3(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return c3.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(u3,"lmdbGetDataByHash")});var Nc=R((fTe,gD)=>{"use strict";var dg=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};gD.exports=dg});var AD=R((pTe,RD)=>{"use strict";var hTe=Nc(),_3=Oc(),d3=ug();RD.exports=f3;async function f3(e){let t=await d3(e),r=global.hdb_schema[e.schema][e.table];return _3.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(f3,"lmdbSearchByHash")});var as=R((STe,OD)=>{"use strict";var fg=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}};OD.exports=fg});var iE=R((gTe,CD)=>{"use strict";var Er=Oc(),E3=Ye(),h3=Y(),Se=_t(),fa=D(),p3=_i(),bD=nn().LMDB_ERRORS_ENUM,{getSchemaPath:m3}=Je(),hi=fa.SEARCH_WILDCARDS;async function S3(e,t,r){let n;e.schema===fa.SYSTEM_SCHEMA_NAME?n=p3[e.table]:n=global.hdb_schema[e.schema][e.table];let s=wD(e,n.hash_attribute,r,t);return yD(e,s,n.hash_attribute,r)}a(S3,"prepSearch");async function yD(e,t,r,n){let s=m3(e.schema,e.table),i=await E3.openEnvironment(s,e.table),o=ID(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(T3(e,r)===!1){let u=e.search_attribute;if(u===r)return n?ND(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[u]:E.key}),"toObject");return n?ND(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(yD,"executeSearch");function ID(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(ID,"searchByType");function ND(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(ND,"createMapFromIterable");function T3(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(T3,"checkToFetchMore");function wD(e,t,r,n){if(h3.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),hi.indexOf(s)>-1)return r===!0?Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Se.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(hi[0])<0&&s.indexOf(hi[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(hi.indexOf(i)>=0&&hi.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Se.SEARCH_TYPES.CONTAINS;if(hi.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Se.SEARCH_TYPES.ENDS_WITH;if(hi.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Se.SEARCH_TYPES.STARTS_WITH;if(s.includes(hi[0])||s.includes(hi[1]))return Se.SEARCH_TYPES.EQUALS;throw new Error(bD.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(bD.UNKNOWN_SEARCH_TYPE)}}a(wD,"createSearchTypeFromSearchObject");CD.exports={executeSearch:yD,createSearchTypeFromSearchObject:wD,prepSearch:S3,searchByType:ID}});var DD=R((OTe,LD)=>{"use strict";var ATe=as(),g3=bc(),R3=Y(),A3=D(),O3=iE();LD.exports=b3;function b3(e,t){if(!R3.isEmpty(t)&&A3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=g3(e,"value");if(n)throw n;return O3.prepSearch(e,t,!0)}a(b3,"lmdbGetDataByValue")});var vu=R((yTe,PD)=>{"use strict";var NTe=as(),N3=bc(),y3=Y(),I3=D(),w3=iE();PD.exports=C3;async function C3(e,t){if(!y3.isEmpty(t)&&I3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=N3(e,"value");if(n)throw n;return w3.prepSearch(e,t,!1)}a(C3,"lmdbSearchByValue")});var UD=R((CTe,MD)=>{"use strict";var wTe=_t(),Eg=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}},hg=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},pg=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};MD.exports={SearchByConditionsObject:Eg,SearchCondition:hg,SortAttribute:pg}});var GD=R((MTe,xD)=>{"use strict";var DTe=UD().SearchByConditionsObject,L3=as(),D3=bc(),mg=Oc(),oE=_t(),{Resource:PTe}=(Mn(),ae(Sg)),HD=iE(),P3=lg(),M3=require("lodash"),{getSchemaPath:U3}=Je(),vD=Ye(),{handleHDBError:v3,hdb_errors:B3}=ie(),{HTTP_STATUS_CODES:H3}=B3,x3=1e8;xD.exports=G3;async function G3(e){let t=D3(e,"conditions");if(t)throw v3(t,t.message,H3.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=U3(e.schema,e.table),n=await vD.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)vD.openDBI(n,_.search_attribute);let i=M3.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===oE.SEARCH_TYPES.EQUALS?_.estimated_count=mg.count(n,_.search_attribute,_.search_value):u===oE.SEARCH_TYPES.CONTAINS||u===oE.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=x3}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await BD(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(HD.filterByType),d=u.length,E=mg.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=>P3.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await BD(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=mg.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(G3,"lmdbSearchByConditions");async function BD(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,HD.searchByType(e,s,i,n).map(o=>o.value)}a(BD,"executeConditionSearch")});var Bu=R((vTe,qD)=>{"use strict";var q3=D().OPERATIONS_ENUM,Tg=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=q3.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};qD.exports=Tg});var gg=R((HTe,QD)=>{"use strict";var $D=as(),YD=Bu(),KD=vu(),WD=Du(),vr=D(),FD=Y(),kD=Ye(),{getTransactionAuditStorePath:F3,getSchemaPath:k3}=Je(),VD=k();QD.exports=V3;async function V3(e){try{if(FD.isEmpty(global.hdb_schema[e.schema])||FD.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await $3(e),await Y3(e);let t=k3(e.schema,e.table);try{await kD.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")VD.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=F3(e.schema,e.table);await kD.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")VD.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(V3,"lmdbDropTable");async function $3(e){let t=new $D(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 KD(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 YD(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await WD(s)}a($3,"deleteAttributesFromSystem");async function Y3(e){let t=new $D(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 KD(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 YD(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await WD(s)}catch(i){throw i}}a(Y3,"dropTableFromSystem")});var zD=R((GTe,jD)=>{"use strict";var K3=require("fs-extra"),W3=as(),Q3=Nc(),j3=Bu(),z3=gg(),J3=Du(),X3=_g(),Z3=vu(),pi=D(),{getSchemaPath:eX}=Je(),{handleHDBError:tX,hdb_errors:rX}=ie(),{HDB_ERROR_MSGS:nX,HTTP_STATUS_CODES:sX}=rX;jD.exports=iX;async function iX(e){let t;try{t=await oX(e.schema);let r=new W3(pi.SYSTEM_SCHEMA_NAME,pi.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,pi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[pi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await Z3(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await z3(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new j3(pi.SYSTEM_SCHEMA_NAME,pi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await J3(s);let i=eX(t);await K3.remove(i)}catch(r){throw r}}a(iX,"lmdbDropSchema");async function oX(e){let t=new Q3(pi.SYSTEM_SCHEMA_NAME,pi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[pi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await X3(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw tX(new Error,nX.SCHEMA_NOT_FOUND(e),sX.NOT_FOUND,void 0,void 0,!0);return n}a(oX,"validateDropSchema")});var Hu=R((FTe,JD)=>{"use strict";var Rg=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};JD.exports=Rg});var Og=R(($Te,XD)=>{"use strict";var aX=require("fs-extra"),aE=Ye(),{getTransactionAuditStorePath:cX}=Je(),Ag=_t(),VTe=Hu();XD.exports=lX;async function lX(e){let t;try{let r=cX(e.schema,e.table);await aX.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,Ag.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),aE.createDBI(t,Ag.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),aE.createDBI(t,Ag.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(lX,"createTransactionsAuditEnvironment")});var rP=R((KTe,tP)=>{"use strict";var bg=D(),ZD=Ye(),uX=Zo(),{getSystemSchemaPath:_X,getSchemaPath:dX}=Je(),fX=_i(),EX=Df(),Ng=Lf(),hX=k(),pX=Og(),Ig=fX.hdb_table,eP=[];for(let e=0;e<Ig.attributes.length;e++)eP.push(Ig.attributes[e].attribute);tP.exports=mX;async function mX(e,t){let r=dX(t.schema,t.table),n=new Ng(t.schema,t.table,bg.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Ng(t.schema,t.table,bg.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Ng(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await ZD.createEnvironment(r,t.table),e!==void 0){let o=await ZD.openEnvironment(_X(),bg.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await uX.insertRecords(o,Ig.hash_attribute,eP,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await yg(n),await yg(s),await yg(i)}await pX(t)}catch(o){throw o}}a(mX,"lmdbCreateTable");async function yg(e){try{await EX(e)}catch(t){hX.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(yg,"createAttribute")});var sP=R((QTe,nP)=>{"use strict";var SX=Ru(),TX=iu(),gX=Zf(),xu=D(),RX=Zo().updateRecords,AX=Ye(),{getSchemaPath:OX}=Je(),bX=Cu(),NX=k();nP.exports=yX;async function yX(e){try{let{schema_table:t,attributes:r}=SX(e);TX(e,r,t.hash_attribute),e.schema!==xu.SYSTEM_SCHEMA_NAME&&(r.includes(xu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(xu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(xu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(xu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await gX(e.hdb_auth_header,t,r),s=OX(e.schema,e.table),i=await AX.openEnvironment(s,e.table),o=await RX(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await bX(e,o)}catch(c){NX.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(yX,"lmdbUpdateRecords")});var oP=R((zTe,iP)=>{"use strict";var IX=D().OPERATIONS_ENUM,wg=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=IX.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};iP.exports=wg});var cP=R((ZTe,aP)=>{"use strict";var XTe=oP(),wX=Ru(),CX=iu(),LX=Zf(),Gu=D(),DX=Zo().upsertRecords,PX=Ye(),{getSchemaPath:MX}=Je(),UX=Cu(),vX=k(),{handleHDBError:BX,hdb_errors:HX}=ie();aP.exports=xX;async function xX(e){let t;try{t=wX(e)}catch(l){throw BX(l,l.message,HX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;CX(e,n,r.hash_attribute),e.schema!==Gu.SYSTEM_SCHEMA_NAME&&(n.includes(Gu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Gu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Gu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Gu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await LX(e.hdb_auth_header,r,n),i=MX(e.schema,e.table),o=await PX.openEnvironment(i,e.table),c=await DX(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await UX(e,c)}catch(l){vX.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(xX,"lmdbUpsertRecords")});var uP=R((tge,lP)=>{"use strict";var Cg=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};lP.exports=Cg});var dP=R((nge,_P)=>{"use strict";var Lg=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}};_P.exports=Lg});var hP=R((oge,EP)=>{"use strict";var Dg=Ye(),{getTransactionAuditStorePath:GX}=Je(),ige=uP(),qu=_t(),qX=Y(),fP=dP(),FX=require("util").promisify,kX=FX(setTimeout),VX=1e4,$X=100;EP.exports=YX;async function YX(e){let t=GX(e.schema,e.table),r=await Dg.openEnvironment(t,e.table,!0),n=Dg.listDBIs(r);Dg.initializeDBIs(r,qu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new fP;do s=await KX(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 kX($X);while(s.transactions_deleted>0);return i}a(YX,"deleteAuditLogsBefore");async function KX(e,t){let r=new fP;try{let n=e.dbis[qu.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[qu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];qX.isEmpty(c)||(s=e.dbis[qu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[qu.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(KX,"deleteTransactions")});var mP=R((cge,pP)=>{"use strict";var Pg=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};pP.exports=Pg});var TP=R((_ge,SP)=>{"use strict";var WX=as(),QX=Bu(),uge=mP(),Hs=D(),jX=Y(),Mg=Ye(),zX=_i(),JX=vu(),XX=Du(),{getSchemaPath:ZX}=Je();SP.exports=eZ;async function eZ(e,t=!0){let r;e.schema===Hs.SYSTEM_SCHEMA_NAME?r=zX[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await rZ(e),s=ZX(e.schema,e.table),i=await Mg.openEnvironment(s,e.table);return t===!0&&await tZ(e,i,r.hash_attribute),Mg.dropDBI(i,e.attribute),n}a(eZ,"lmdbDropAttribute");async function tZ(e,t,r){let n=Mg.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(tZ,"removeAttributeFromAllObjects");async function rZ(e){let t=new WX(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 JX(t)).filter(o=>o[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(jX.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 QX(Hs.SYSTEM_SCHEMA_NAME,Hs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return XX(i)}a(rZ,"dropAttributeFromSystem")});var NP=R((Ege,bP)=>{"use strict";var Ug=Ye(),yc=_t(),fge=wr(),vg=D(),gP=Y(),{getTransactionAuditStorePath:nZ}=Je(),sZ=Oc(),cE=gc(),iZ=k();bP.exports=oZ;async function oZ(e){let t=nZ(e.schema,e.table),r=await Ug.openEnvironment(t,e.table,!0),n=Ug.listDBIs(r);Ug.initializeDBIs(r,yc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case vg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return RP(r,e.search_values);case vg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,cZ(r,e.search_values,s);case vg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return aZ(r,e.search_values);default:return RP(r)}}a(oZ,"readAuditLog");function RP(e,t=[0,Date.now()]){gP.isEmpty(t[0])&&(t[0]=0),gP.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(RP,"searchTransactionsByTimestamp");function aZ(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,OP(e,i))}return Object.fromEntries(r)}a(aZ,"searchTransactionsByUsername");function cZ(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=sZ.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=OP(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);AP(l,"records",r,u,o),AP(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(cZ,"searchTransactionsByHashValues");function AP(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(AP,"loopRecords");function OP(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){iZ.warn(i)}return r}catch(n){throw n}}a(OP,"batchSearchTransactions")});var IP=R((Sge,yP)=>{"use strict";var{getSchemaPath:pge}=Je(),mge=Ye(),{database:lZ}=(Re(),ae($e));yP.exports={writeTransaction:uZ};async function uZ(e,t,r){return lZ({database:e,table:t}).transaction(r)}a(uZ,"writeTransaction")});var DP=R((gge,LP)=>{"use strict";var{getSchemaPath:wP}=Je(),CP=Ye();LP.exports={flush:_Z,resetReadTxn:dZ};async function _Z(e,t){return(await CP.openEnvironment(wP(e,t),t.toString())).flushed}a(_Z,"flush");async function dZ(e,t){try{(await CP.openEnvironment(wP(e,t),t.toString())).resetReadTxn()}catch{}}a(dZ,"resetReadTxn")});var vP=R((Age,UP)=>{"use strict";var{Readable:fZ}=require("stream"),{getDatabases:EZ}=(Re(),ae($e)),{readSync:hZ,openSync:pZ,createReadStream:PP}=require("fs"),{open:mZ}=require("lmdb"),MP=Eu(),SZ=hu(),{AUDIT_STORE_OPTIONS:TZ}=(no(),ae(BP)),{INTERNAL_DBIS_NAME:gZ,AUDIT_STORE_NAME:RZ}=_t();UP.exports=OZ;var Bg=32768,AZ=100;async function OZ(e){let t=e.database||e.schema||"data",r=EZ()[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=mZ({noSync:!0,maxDbs:SZ.MAX_DBS}),E,f=d.openDB(gZ,new MP(!1)),h=u.useReadTransaction(),m=0,S=a(async function(g,N){N.encoding="binary",N.encoder=void 0;let A=d.openDB(g,N),P=u.openDB(g,N);for(let{key:v,version:q,value:U}of P.getRange({start:null,transaction:h,versions:P.useVersions}))E=A.put(v,U,q),m++%AZ===0&&(await new Promise(W=>setTimeout(W,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:g,value:N}of u.getRange({transaction:h,start:!1}))if(s.some(A=>g.startsWith?.(A+"/"))){f.put(g,N);let[,A]=g.split("/"),P=!A,v=new MP(!P,P);await S(g,v)}e.include_audit&&await S(RZ,Object.assign({},TZ)),await E;let T=PP(d.path);return T.headers=l(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=pZ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Bg);hZ(c,_,0,Bg),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=PP(null,{fd:c,start:Bg}),E=new fZ.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(OZ,"getBackup")});var GP=R((bge,xP)=>{"use strict";var bZ=k(),{handleHDBError:NZ}=ie(),yZ=nw(),IZ=Df(),wZ=sg(),CZ=zL(),LZ=Du(),DZ=_g(),PZ=AD(),MZ=DD(),UZ=vu(),vZ=GD(),BZ=zD(),HZ=rP(),xZ=sP(),GZ=cP(),qZ=hP(),FZ=gg(),kZ=TP(),VZ=NP(),$Z=IP(),HP=DP(),YZ=vP(),Hg=class extends yZ{static{a(this,"LMDBBridge")}async searchByConditions(t){return vZ(t)}async getDataByHash(t){return await DZ(t)}async searchByHash(t){return await PZ(t)}async getDataByValue(t,r){return await MZ(t,r)}async searchByValue(t){return await UZ(t)}async createSchema(t){return await CZ(t)}async dropSchema(t){return await BZ(t)}async createTable(t,r){return await HZ(t,r)}async dropTable(t){return await FZ(t)}async createAttribute(t){return await IZ(t)}async createRecords(t){return await wZ(t)}async updateRecords(t){return await xZ(t)}async upsertRecords(t){try{return await GZ(t)}catch(r){throw NZ(r,null,null,bZ.ERR,r)}}async deleteRecords(t){return await LZ(t)}async dropAttribute(t){return await kZ(t)}async deleteAuditLogsBefore(t){return await qZ(t)}async readAuditLog(t){return await VZ(t)}writeTransaction(t,r,n){return $Z.writeTransaction(t,r,n)}flush(t,r){return HP.flush(t,r)}resetReadTxn(t,r){return HP.resetReadTxn(t,r)}getBackup(t){return YZ(t)}};xP.exports=Hg});function jZ(){QZ=setInterval(function(){for(let e of xg)if(e.stale){let t=e[Ie]?.url;VP.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},WZ).unref()}var Gg,kP,VP,$P,YP,KP,qP,xg,KZ,Fu,FP,Ea,lE,WZ,QZ,qg=be(()=>{Gg=x(wr()),kP=x(ie()),VP=x(k());Mn();$P=x(X()),YP=x(D()),KP=x(Y()),qP=100,xg=new Set,KZ=(0,KP.convertToMS)($P.get(YP.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),xg.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(xg.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Fu&&!this.overloadChecked&&performance.now()-FP>KZ)throw new kP.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,Gg.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 T=S[f===0?"before":"beforeIntermediate"];if(T){let g=T();h?h.push?h.push(g):h=[h,g]:h=g}}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)<qP>>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 Fu||(Fu=s,FP=performance.now(),Fu.then(()=>{Fu=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)+qP/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,Gg.getNextMonotonicTime)())}getReadTxn(){}},WZ=3e4;a(jZ,"startMonitoringTxns");jZ()});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 WP,ha=be(()=>{WP=require("../index");Mn();qg();a(it,"transaction");(0,WP._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 tM={};Ve(tM,{ResourceBridge:()=>Vg});function $g({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 jP(e,t){let r=xs(e),n=$g(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||JZ,r=Br()[t];if(!r)throw(0,cs.handleHDBError)(new Error,zZ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function zP(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 XP,uE,cs,ZP,ls,Fg,kg,eM,zZ,JZ,XZ,ZZ,QP,Vg,rM=be(()=>{"use strict";XP=x(GP()),uE=x(bc()),cs=x(ie());Re();ZP=x(Ru()),ls=x(D()),Fg=x(Ei()),kg=x(os()),eM=x(Y());ha();dE();({HDB_ERROR_MSGS:zZ}=cs.hdb_errors),JZ="data",XZ=1e4,ZZ=10,Vg=class extends XP.default{static{a(this,"ResourceBridge")}constructor(t){super(t),QP=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:$g(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}),Fg.signalSchemaChange(new kg.SchemaEventMsg(process.pid,ls.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Yg(t.schema),Fg.signalSchemaChange(new kg.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,QP.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 zP(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,eM.async_set_timeout)(ZZ),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%XZ===0&&await _();return l.length>0&&await _(),s?zP(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 jP(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of jP(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:$g(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,t.cleanup_deleted_records)}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($g,"getSelect");a(jP,"getRecords");a(xs,"getTable");a(zP,"createDeleteResponse");a(JP,"groupRecordsInHistory")});var Hn=R((Gge,nM)=>{"use strict";var{ResourceBridge:e5}=(rM(),ae(tM)),t5=X();t5.initSync();var fE;function r5(){return fE||(fE=new e5,fE)}a(r5,"getBridge");nM.exports=r5()});var aM=R((Fge,oM)=>{"use strict";var sM=require("lodash"),ku=require("mathjs"),n5=require("jsonata"),iM=Y();oM.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?sM.uniqWith(e,sM.isEqual):e,searchJSON:s5,mad:Vu.bind(null,ku.mad),mean:Vu.bind(null,ku.mean),mode:Vu.bind(null,ku.mode),prod:Vu.bind(null,ku.prod),median:Vu.bind(null,ku.median)};function Vu(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Vu,"aggregateFunction");function s5(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(iM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),iM.isEmpty(this.__ala__.res[r])){let n=n5(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(s5,"searchJSON")});var lM=R((Vge,cM)=>{"use strict";var It=require("moment"),Kg="YYYY-MM-DDTHH:mm:ss.SSSZZ";It.suppressDeprecationWarnings=!0;cM.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 fM=R(($ge,dM)=>{"use strict";var i5=require("@turf/area"),o5=require("@turf/length"),a5=require("@turf/circle"),c5=require("@turf/difference"),l5=require("@turf/distance"),u5=require("@turf/boolean-contains"),_5=require("@turf/boolean-equal"),d5=require("@turf/boolean-disjoint"),f5=require("@turf/helpers"),uM=D(),Ae=Y(),mi=k();dM.exports={geoArea:E5,geoLength:h5,geoCircle:p5,geoDifference:m5,geoDistance:_M,geoNear:S5,geoContains:T5,geoEqual:g5,geoCrosses:R5,geoConvert:A5};function E5(e){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return i5.default(e)}catch(t){return mi.trace(t,e),NaN}}a(E5,"geoArea");function h5(e,t){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return o5.default(e,{units:t||"kilometers"})}catch(r){return mi.trace(r,e),NaN}}a(h5,"geoLength");function p5(e,t,r){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return a5.default(e,t,{units:r||"kilometers"})}catch(n){return mi.trace(n,e,t),NaN}}a(p5,"geoCircle");function m5(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 c5(e,t)}catch(r){return mi.trace(r,e,t),NaN}}a(m5,"geoDifference");function _M(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 l5.default(e,t,{units:r||"kilometers"})}catch(n){return mi.trace(n,e,t),NaN}}a(_M,"geoDistance");function S5(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 _M(e,t,n)<=r}catch(s){return mi.trace(s,e,t),!1}}a(S5,"geoNear");function T5(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 u5.default(e,t)}catch(r){return mi.trace(r,e,t),!1}}a(T5,"geoContains");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 mi.trace(r,e,t),!1}}a(g5,"geoEqual");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 mi.trace(r,e,t),!1}}a(R5,"geoCrosses");function A5(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(uM.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(uM.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ae.autoCastJSON(e)),f5[t](e,r)}a(A5,"geoConvert")});var EE=R((Kge,EM)=>{var pa=aM(),fn=lM(),Gs=fM();EM.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 SM=R((Wge,mM)=>{"use strict";var $u=require("lodash"),Hr=require("alasql");Hr.options.cache=!1;var O5=EE(),hM=require("clone"),hE=require("recursive-iterator"),he=k(),Me=Y(),wc=Hn(),b5=D(),{hdb_errors:N5}=ie(),{getDatabases:pM}=(Re(),ae($e)),y5="IS NULL",us="There was a problem performing this search. Please check the logs and try again.";O5(Hr);var Wg=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(hM(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=$u.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=pM()[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(b5.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&&$u.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(hM(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(y5)>-1&&this.tables.forEach(s=>{let i={columnid:pM()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=$u.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=$u.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,T=m.length;S<T;S++){let g=m[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[g]}})}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=$u.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(N5.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)}};mM.exports=Wg});var ur=R((jge,TM)=>{"use strict";var I5=tw();TM.exports={searchByConditions:C5,searchByHash:L5,searchByValue:D5,search:P5};var Qg=Hn(),{transformReq:jg}=Y(),w5=SM();async function C5(e){return jg(e),Qg.searchByConditions(e)}a(C5,"searchByConditions");async function L5(e){jg(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Qg.searchByHash(e))r&&t.push(r);return t}a(L5,"searchByHash");async function D5(e){jg(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Qg.searchByValue(e))t.push(r);return t}a(D5,"searchByValue");function P5(e,t){try{let r=new I5(e);r.validate(),new w5(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(P5,"search")});var pE=R((Jge,gM)=>{"use strict";var M5=Hn();gM.exports={writeTransaction:U5};function U5(e,t,r){return M5.writeTransaction(e,t,r)}a(U5,"writeTransaction")});var bM=R((eRe,OM)=>{"use strict";var v5=ur(),B5=Bn(),RM=k(),H5=Pr(),Zge=pE(),x5=require("clone"),Jg=require("alasql"),G5=EE(),AM=require("util"),q5=AM.promisify(B5.getTableSchema),F5=AM.promisify(v5.search),k5=D(),zg=Y();G5(Jg);OM.exports={update:$5};var V5="There was a problem performing this update. Please check the logs and try again.";async function $5({statement:e,hdb_user:t}){let r=await q5(e.table.databaseid,e.table.tableid),n=Y5(e.columns);zg.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=x5(s),c=zg.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=Jg.parse(l).statements[0],u=await F5(_),d=K5(n,u);return W5(o,d,t)}a($5,"update");function Y5(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Jg.compile(`SELECT ${r.expression.toString()} AS [${k5.FUNC_VAL}] FROM ?`)}),t}catch(t){throw RM.error(t),new Error(V5)}}a(Y5,"createUpdateRecord");function K5(e,t){return zg.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(K5,"buildUpdateRecords");async function W5(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await H5.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){RM.error(`Error delete new_attributes from update response: ${i}`)}return s}a(W5,"updateRecords")});var yM=R((sRe,NM)=>{var Q5=require("alasql"),j5=ur(),z5=k(),J5=Hn(),Zg=require("util"),Xg=Y(),X5=D(),Z5=Bn(),rRe=pE(),nRe=Pr(),e8="record",t8="successfully deleted",r8=Zg.callbackify(o8),n8=Zg.promisify(j5.search),s8=Zg.promisify(Z5.getTableSchema);NM.exports={convertDelete:r8};function i8(e){return`${e.deleted_hashes.length} ${e8}${e.deleted_hashes.length===1?"":"s"} ${t8}`}a(i8,"generateReturnMessage");async function o8({statement:e,hdb_user:t}){let r=await s8(e.table.databaseid,e.table.tableid);Xg.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Xg.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Q5.parse(o).statements[0],l={operation:X5.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await n8(c);let _=await J5.deleteRecords(l);return Xg.isEmptyOrZeroLength(_.message)&&(_.message=i8(_)),delete _.txn_time,_}catch(_){throw z5.error(_),_.hdb_code?_.message:_}}a(o8,"convertDelete")});var DM=R((oRe,LM)=>{"use strict";var a8=oo(),{hdb_errors:IM}=ie(),{getDatabases:wM}=(Re(),ae($e));LM.exports={checkSchemaExists:CM,checkSchemaTableExists:c8,schema_describe:a8};async function CM(e){if(!wM()[e])return IM.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(CM,"checkSchemaExists");async function c8(e,t){let r=await CM(e);if(r)return r;if(!wM()[e][t])return IM.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(c8,"checkSchemaTableExists")});var ma=R((cRe,l8)=>{l8.exports={name:"harperdb",version:"4.3.46",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.4.1",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.11.2",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.3",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 ju={};Ve(ju,{addAnalyticsListener:()=>Qu,recordAction:()=>hr,recordActionBinary:()=>En,setAnalyticsEnabled:()=>u8});function u8(e){qM=e}function hr(e,t,r,n,s){if(!qM)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||_8()}function En(e,t,r,n,s){hr(!!e,t,r,n,s)}function Qu(e){VM.push(e)}function _8(){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 $M){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 YM()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Sa.threadId,byThread:!0,...n});for(let s of VM)s(t);TE=new Map,Sa.parentPort?Sa.parentPort.postMessage({type:kM,report:r}):QM({report:r})},FM).unref()}async function d8(e,t=6e4){let r=rR(),n=KM(),s=new Promise(m=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,Yu.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,Yu.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),m(T-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:T,threadId:g}=S;for(let N of T||[]){let{path:A,method:P,type:v,metric:q,count:U,total:W,distribution:z,threads:Z,...ce}=N;U||(U=1);let _e=q+(A?"-"+A:"");P!==void 0&&(_e+="-"+P),v!==void 0&&(_e+="-"+v);let de=c.get(_e);if(de){if(de.threads){let we=de.threads[g];if(we)de=we;else{de.threads[g]=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*U)/(xe+U))}de.count+=U,W>=0&&(de.total+=W,de.ratio=de.total/de.count)}else de=Object.assign({period:t},N),delete de.distribution,c.set(_e,de),de.byThread&&(de.threads=[],de.threads[g]=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 YM()}for(let m of _){let{path:S,method:T,type:g,metric:N,count:A,total:P,distribution:v,threads:q,...U}=m;q=q.filter(W=>W);for(let W in U){if(typeof m[W]!="number")continue;let z=0;for(let Z of q){let ce=Z[W];typeof ce=="number"&&(z+=ce)}m[W]=z}m.count=q.length,delete m.threads,delete m.byThread}for(let[m,S]of l){let T=c.get(m);S.sort((we,Ge)=>we.value>Ge.value?1:-1);let g=T.count-1,N=[],A=0,P=0,v;for(let we of $M){let Ge=g*we;for(;A<Ge;)v=S[P++],A+=v.count,P===1&&A--;let Wd=S[P>1?P-2:0];v||(v=S[0]),N.push(v.value-(v.value-Wd.value)*(A-Ge)/v.count)}let[q,U,W,z,Z,ce,_e,de,xe]=N;Object.assign(T,{p1:q,p10:U,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(T=>{T||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-PM,active:h-MM,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(m,S,{append:!0}).then(T=>{T||n.primaryStore.put(m,S)})}PM=f,MM=h}async function UM(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function rR(){return vM||(vM=St({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function KM(){return BM||(BM=St({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function h8(){WM=!0;let e=(0,Wu.get)(tR.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await d8(FM,e),await UM(rR(),f8),await UM(KM(),E8)},Math.min(e/2,2147483647)).unref()}function QM(e,t){let r=e.report;r.threadId=t?.threadId||Sa.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(HM+=n.mean*n.count);r.totalBytesProcessed=HM,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(xM.get(t))}),xM.set(t,t.performance.eventLoopUtilization())),r.id=(0,SE.getNextMonotonicTime)(),rR().primaryStore.put(r.id,r),WM||h8(),p8&&(jM=S8(r))}async function S8(e){if(await jM,!Eo){let r=(0,Ku.dirname)((0,Yu.getLogFilePath)());try{Eo=await(0,eR.open)((0,Ku.join)(r,"analytics.log"),"r+")}catch{Eo=await(0,eR.open)((0,Ku.join)(r,"analytics.log"),"w+")}}let t=(await Eo.stat()).size;if(t>m8){let r=Buffer.alloc(t);await Eo.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Eo.write(r,{position:0}),await Eo.truncate(r.length),t=r.length}await Eo.write(JSON.stringify(e)+`
11
+ `,t)}var Sa,GM,Yu,Ku,eR,SE,Wu,tR,TE,qM,mE,FM,kM,VM,$M,PM,MM,YM,f8,E8,vM,BM,WM,HM,xM,p8,jM,Eo,m8,Si=be(()=>{Sa=require("worker_threads"),GM=x(rt());Re();Yu=x(k()),Ku=require("path"),eR=require("fs/promises"),SE=x(wr()),Wu=x(X()),tR=x(D());Cr();(0,Wu.initSync)();TE=new Map,qM=(0,Wu.get)(tR.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(u8,"setAnalyticsEnabled");a(hr,"recordAction");dt.recordAnalytics=hr;a(En,"recordActionBinary");mE=0,FM=1e3,kM="analytics-report",VM=[];a(Qu,"addAnalyticsListener");$M=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(_8,"sendAnalytics");a(d8,"aggregation");PM=0,MM=0,YM=a(()=>new Promise(setImmediate),"rest");a(UM,"cleanup");f8=36e5,E8=31536e6;a(rR,"getRawAnalyticsTable");a(KM,"getAnalyticsTable");(0,GM.setChildListenerByType)(kM,QM);a(h8,"startScheduledTasks");HM=0,xM=new Map,p8=!1;a(QM,"recordAnalytics");m8=1e6;a(S8,"logAnalytics")});var aR=R((RRe,aU)=>{"use strict";var{decode:T8}=require("msgpackr"),{isMainThread:SRe,parentPort:TRe,threadId:gRe}=require("worker_threads"),AE=gt(),Cc=Ze(),iR=D(),pr=k(),sR=X(),g8=D(),{onMessageByType:R8}=rt(),ZM=fi(),{recordAction:zM,recordActionBinary:A8}=(Si(),ae(ju)),{publishToStream:O8}=AE,{ConsumerEvents:JM}=require("nats"),b8=ur(),{promisify:N8}=require("util"),eU=N8(setTimeout),OE=1e4,bE,RE,y8,I8,tU,zu=new Map,Lc=new Map;aU.exports={initialize:rU,ingestConsumer:oR,setSubscription:w8,setIgnoreOrigin:D8,getDatabaseSubscriptions:L8,updateConsumer:nU};async function rU(){R8(iR.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await nU(n)}),tU=!0,pr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await AE.getNATSReferences();bE=e,RE=e.info.server_name,y8=t,I8=r}a(rU,"initialize");async function nU(e){if(e.status==="start"){let{js:t,jsm:r}=await sU(e.node_domain_name);oR(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=zu.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?.(),zu.set(e.stream_name+e.node_domain_name,"close")),Lc.get(e.node_domain_name)==="failed"&&Lc.set(e.node_domain_name,"close")}}a(nU,"updateConsumer");var NE=new Map;function w8(e,t,r){let n=NE.get(e);n||NE.set(e,n=new Map),n.set(t,r),tU||rU().then(C8)}a(w8,"setSubscription");async function C8(){let e=await b8.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 sU(r),!n))break;let{schema:o,table:c}=i,l=ZM.createNatsTableStreamName(o,c);oR(l,n,s,r)}}}a(C8,"accessConsumers");async function sU(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(Lc.get(e)==="close")break;Lc.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 eU(i)}return{js:t,jsm:r}}a(sU,"connectToRemoteJS");function L8(){return NE}a(L8,"getDatabaseSubscriptions");var iU;function D8(e){iU=e}a(D8,"setIgnoreOrigin");var oU=100,XM=new Array(oU),gE=0;async function oR(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(Lc.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 eU(u)}let c=!1,l;for(;!c;){if(zu.get(e+n)==="close"||Lc.get(n)==="close"){zu.delete(e+n),c=!0;continue}l=await i.consume({max_messages:sR.get(iR.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),zu.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 XM[gE],XM[gE]=P8(u).catch(d=>{pr.error(d)}),++gE>=oU&&(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(oR,"ingestConsumer");async function P8(e){let t=T8(e.data);zM(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=sR.get(iR.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&&!iU),A8(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(P=>P?.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(P=>h=P),{timestamp:S,user:T,node_name:g}=E||{},N=NE.get(c)?.get(_);if(!N)throw new Error(`Missing table for replication message: ${_}`);if(o==="define_schema")t.type=o,t.onCommit=h,N.send(t);else if(u.length===1&&!l)N.send({type:nR(o),value:u[0],id:d?.[0],expiresAt:f,timestamp:S,table:_,onCommit:h,user:T,nodeName:g});else{let P=u.map((v,q)=>({type:nR(o),value:v,expiresAt:f,id:d?.[q],table:_}));for(;l;)P.push({type:nR(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;N.send({type:"transaction",writes:P,table:_,timestamp:S,onCommit:h,user:T,nodeName:g})}sR.get(g8.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&O8(e.subject.split(".").slice(0,-1).join("."),ZM.createNatsTableStreamName(c,_),e.headers,e.data),await m;let A=Date.now()-S;S&&zM(A,"replication-latency",e.subject,o,"ingest")}catch(o){pr.error(o)}e.ack()}a(P8,"messageProcessor");function nR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(nR,"convertOperation")});var gt=R((wRe,bU)=>{"use strict";var Qt=X();Qt.initSync();var M8=require("fs-extra"),U8=require("semver"),Zu=require("path"),{monotonicFactory:v8}=require("ulidx"),lU=v8(),B8=require("util"),uU=require("child_process"),H8=B8.promisify(uU.exec),x8=uU.spawn,nr=Ze(),Ce=D(),yE=Y(),_s=k(),IE=fi(),G8=pE(),Ju=Et(),{broadcast:q8,onMessageByType:F8,getWorkerIndex:k8}=rt(),{isMainThread:_U}=require("worker_threads"),{Encoder:V8,decode:_R}=require("msgpackr"),dU=new V8,{isEmpty:Aa}=yE,fU=Ur(),ORe=48*36e11;_U&&F8(Ce.ITC_EVENT_TYPES.RESTART,()=>{mr=void 0,Ra=void 0});var{connect:$8,StorageType:Y8,RetentionPolicy:K8,AckPolicy:dR,DeliverPolicy:fR,DiscardPolicy:W8,NatsConnection:bRe,JetStreamManager:NRe,JetStreamClient:yRe,StringCodec:IRe,JSONCodec:Q8,createInbox:ER,headers:j8,ErrorCode:cU}=require("nats"),{PACKAGE_ROOT:z8}=D(),J8=ma(),{recordAction:X8}=(Si(),ae(ju)),EU=Q8(),Z8="clustering",e6=J8.engines[nr.NATS_SERVER_NAME],t6=Zu.join(z8,"dependencies"),uR=Zu.join(t6,`${process.platform}-${process.arch}`,nr.NATS_BINARY_NAME),cR,lR,Xu,Ta,ga;bU.exports={runCommand:hU,checkNATSServerInstalled:r6,createConnection:hR,getConnection:e_,getJetStreamManager:t_,getJetStream:mU,getNATSReferences:qs,getServerList:s6,createLocalStream:pR,listStreams:SU,deleteLocalStream:i6,getServerConfig:Dc,listRemoteStreams:o6,viewStream:a6,viewStreamIterator:c6,publishToStream:l6,request:d6,reloadNATS:mR,reloadNATSHub:f6,reloadNATSLeaf:E6,extractServerName:_6,requestErrorHandler:h6,createLocalTableStream:AU,createTableStreams:S6,purgeTableStream:OU,purgeSchemaTableStreams:T6,getStreamInfo:g6,updateLocalStreams:A6,closeConnection:n6,getJsmServerName:wE,addNatsMsgHeader:TU,clearClientCache:pU,updateRemoteConsumer:p6,createConsumer:gU,updateConsumerIterator:m6};async function hU(e,t=void 0){let{stdout:r,stderr:n}=await H8(e,{cwd:t});if(n)throw new Error(n.replace(`
12
12
  `,""));return r.replace(`
13
- `,"")}a(hU,"runCommand");async function s6(){try{await v8.access(uR)}catch{return!1}let e=await hU(`${uR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return B8.eq(t,r6)}a(s6,"checkNATSServerInstalled");async function hR(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await fU.getClusterUser();if(Oa(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 K8({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&&pU()}),i}a(hR,"createConnection");function pU(){mr=void 0,ga=void 0,Ra=void 0,Aa=void 0}a(pU,"clearClientCache");async function i6(){mr&&(await mr.drain(),mr=void 0,ga=void 0,Ra=void 0,Aa=void 0)}a(i6,"closeConnection");var mr,Aa;async function e_(){return Aa||(Aa=hR(Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),mr=await Aa),mr||Aa}a(e_,"getConnection");async function t_(){if(ga)return ga;Oa(mr)&&await e_();let{domain:e}=Pc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Oa(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ga=await mr.jetstreamManager({domain:e,timeout:6e4}),ga}a(t_,"getJetStreamManager");async function mU(){if(Ra)return Ra;Oa(mr)&&await e_();let{domain:e}=Pc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Oa(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ra=mr.jetstream({domain:e,timeout:6e4}),Ra}a(mU,"getJetStream");async function qs(){let e=mr||await e_(),t=ga||await t_(),r=Ra||await mU();return{connection:e,jsm:t,js:r}}a(qs,"getNATSReferences");async function o6(e){let t=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await fU.getClusterUser(),s=await hR(t,r,n),i=ER(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=EU.decode(u.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await yE.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(o6,"getServerList");async function pR(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:W8.File,retention:Q8.Limits,subjects:t,discard:j8.Old,max_msgs:s,max_bytes:i,max_age:n})}a(pR,"createLocalStream");async function SU(){let{jsm:e}=await qs(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(SU,"listStreams");async function a6(e){let{jsm:t}=await qs();await t.streams.delete(e)}a(a6,"deleteLocalStream");async function c6(e){let{connection:t}=await qs(),r=[],n=ER(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(EU.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(c6,"listRemoteStreams");async function l6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await qs(),i=lU(),o={durable_name:i,ack_policy:dR.Explicit};t&&(o.deliver_policy=fR.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=_R(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(l6,"viewStream");async function*u6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await qs(),i=lU(),o={durable_name:i,ack_policy:dR.Explicit};t&&(o.deliver_policy=fR.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=_R(_.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(u6,"viewStreamIterator");async function _6(e,t,r,n){_s.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=TU(n,r);let{js:s}=await qs(),i=await wE(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:dU.encode(n);try{_s.trace(`publishToStream publishing to subject: ${o}`),e6(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 RU(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 pR(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(_6,"publishToStream");function TU(e,t){t===void 0&&(t=J8());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(TU,"addNatsMsgHeader");function Pc(e){e=e.toLowerCase();let t=Zu.join(Qt.get(Ce.CONFIG_PARAMS.ROOTPATH),t6);if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Oa(lR)&&(lR={port:Ju.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Ju.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}),lR;if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Oa(cR)&&(cR={port:Ju.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Ju.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+nr.SERVER_SUFFIX.LEAF,config_file:nr.NATS_CONFIG_FILES.LEAF_SERVER,domain:Ju.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+nr.SERVER_SUFFIX.LEAF,pid_file_path:Zu.join(t,nr.PID_FILES.LEAF),hdb_nats_path:t}),cR;_s.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Pc,"getServerConfig");async function gU(e,t,r,n){try{await e.consumers.add(t,{ack_policy:dR.Explicit,durable_name:r,deliver_policy:fR.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(gU,"createConsumer");async function d6(e,t,r){await e.consumers.delete(t,r)}a(d6,"removeConsumer");function f6(e){return e.split(".")[1]}a(f6,"extractServerName");async function E6(e,t,r=6e4,n=ER()){if(!yE.isObject(t))throw new Error("data param must be an object");let s=dU.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 _R(c.data)}a(E6,"request");function mR(e){return new Promise(async(t,r)=>{let n=q8(uR,["--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(mR,"reloadNATS");async function h6(){let{pid_file_path:e}=Pc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await mR(e)}a(h6,"reloadNATSHub");async function p6(){let{pid_file_path:e}=Pc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await mR(e)}a(p6,"reloadNATSLeaf");function m6(e,t,r){let n;switch(e.code){case cU.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case cU.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(m6,"requestErrorHandler");async function S6(e,t){let r=t+nr.SERVER_SUFFIX.LEAF,{connection:n}=await qs(),{jsm:s}=await y6(r),{schema:i,table:o}=e,c=IE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await RU(async()=>{if(e.subscribe===!0)await gU(s,c,n.info.server_name,l);else try{await d6(s,c,n.info.server_name)}catch(_){_s.trace(_)}})}a(S6,"updateRemoteConsumer");async function T6(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(!_U&&V8()<Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=aR();await c(o)}await k8(o),n==="stop"&&await yE.async_set_timeout(1e3)}a(T6,"updateConsumerIterator");function RU(e){return F8.writeTransaction(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(RU,"exclusiveLock");async function AU(e,t){let r=IE.createNatsTableStreamName(e,t),n=await wE(),s=O6(e,t,n);await pR(r,[s])}a(AU,"createLocalTableStream");async function g6(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await AU(n,s)}}a(g6,"createTableStreams");async function OU(e,t,r=void 0){if(Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=IE.createNatsTableStreamName(e,t),{domain:s}=Pc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await e_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")_s.warn(n);else throw n}}a(OU,"purgeTableStream");async function R6(e,t){if(Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await OU(e,t[r])}a(R6,"purgeSchemaTableStreams");async function A6(e){return(await t_()).streams.info(e)}a(A6,"getStreamInfo");function O6(e,t,r){return`${nr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(O6,"createSubjectName");async function wE(){if(Xu)return Xu;if(Xu=(await t_())?.nc?.info?.server_name,Xu===void 0)throw new Error("Unable to get jetstream manager server name");return Xu}a(wE,"getJsmServerName");async function b6(){let e=await t_(),t=await wE(),r=await SU();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=N6(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(b6,"updateLocalStreams");function N6(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(N6,"updateStreamLimits");async function y6(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(y6,"connectToRemoteJS")});var PE=g((MRe,wU)=>{"use strict";var Mc=Cf(),Uc=LM(),I6=k(),w6=require("uuid").v4,PRe=require("clone"),DE=hi(),vc=L(),C6=require("util"),ho=Hn(),{handleHDBError:xr,hdb_errors:D6}=ie(),{HDB_ERROR_MSGS:CE,HTTP_STATUS_CODES:Gr}=D6,{SchemaEventMsg:LE}=os(),NU=gt(),{getDatabases:L6}=(Re(),ae(Ve)),{transformReq:Bc}=Y();wU.exports={createSchema:P6,createSchemaStructure:yU,createTable:M6,createTableStructure:IU,createAttribute:x6,dropSchema:U6,dropTable:v6,dropAttribute:B6,getBackup:G6};async function P6(e){let t=await yU(e);return DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema)),t}a(P6,"createSchema");async function yU(e){let t=Mc.schema_object(e);if(t)throw xr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);if(Bc(e),!await Uc.checkSchemaExists(e.schema))throw xr(new Error,CE.SCHEMA_EXISTS_ERR(e.schema),Gr.BAD_REQUEST,vc.LOG_LEVELS.ERROR,CE.SCHEMA_EXISTS_ERR(e.schema),!0);return await ho.createSchema(e),`database '${e.schema}' successfully created`}a(yU,"createSchemaStructure");async function M6(e){return Bc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await IU(e)}a(M6,"createTable");async function IU(e){let t=Mc.create_table_object(e);if(t)throw xr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);if(Mc.validateTableResidence(e.residence),!await Uc.checkSchemaTableExists(e.schema,e.table))throw xr(new Error,CE.TABLE_EXISTS_ERR(e.schema,e.table),Gr.BAD_REQUEST,vc.LOG_LEVELS.ERROR,CE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:w6(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ho.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 ho.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(IU,"createTableStructure");async function U6(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Mc.schema_object(e),n=t??r;if(n)throw xr(n,n.message,Gr.BAD_REQUEST,void 0,void 0,!0);Bc(e);let s=await Uc.checkSchemaExists(e.schema);if(s)throw xr(new Error,s,Gr.NOT_FOUND,vc.LOG_LEVELS.ERROR,s,!0);let i=await Uc.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ho.dropSchema(e),DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema)),await NU.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(U6,"dropSchema");async function v6(e){let t=Mc.table_object(e);if(t)throw xr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);Bc(e);let r=await Uc.checkSchemaTableExists(e.schema,e.table);if(r)throw xr(new Error,r,Gr.NOT_FOUND,vc.LOG_LEVELS.ERROR,r,!0);return await ho.dropTable(e),await NU.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(v6,"dropTable");async function B6(e){let t=Mc.attribute_object(e);if(t)throw xr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);Bc(e);let r=await Uc.checkSchemaTableExists(e.schema,e.table);if(r)throw xr(new Error,r,Gr.NOT_FOUND,vc.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(vc.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 ho.dropAttribute(e),H6(e),DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw I6.error(`Got an error deleting attribute ${C6.inspect(e)}.`),n}}a(B6,"dropAttribute");function H6(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(H6,"dropAttributeFromGlobal");async function x6(e){Bc(e);let t=L6()[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 ho.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(x6,"createAttribute");function G6(e){return ho.getBackup(e)}a(G6,"getBackup")});var DU=g((vRe,CU)=>{"use strict";var{OPERATIONS_ENUM:q6}=L(),SR=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=q6.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};CU.exports=SR});var TR=g((xRe,vU)=>{"use strict";var F6=Hn(),HRe=DU(),ME=Y(),UE=L(),k6=X(),{handleHDBError:LU,hdb_errors:$6}=ie(),{HDB_ERROR_MSGS:PU,HTTP_STATUS_CODES:MU}=$6,V6=Object.values(UE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),UU="To use this operation audit log must be enabled in harperdb-config.yaml";vU.exports=Y6;async function Y6(e){if(ME.isEmpty(e.schema))throw new Error(PU.SCHEMA_REQUIRED_ERR);if(ME.isEmpty(e.table))throw new Error(PU.TABLE_REQUIRED_ERR);if(!k6.get(UE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw LU(new Error,UU,MU.BAD_REQUEST,UE.LOG_LEVELS.ERROR,UU,!0);let t=ME.checkSchemaTableExist(e.schema,e.table);if(t)throw LU(new Error,t,MU.NOT_FOUND,UE.LOG_LEVELS.ERROR,t,!0);if(!ME.isEmpty(e.search_type)&&V6.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await F6.readAuditLog(e)}a(Y6,"readAuditLog")});var HU=g((qRe,BU)=>{"use strict";var{OPERATIONS_ENUM:K6}=L(),gR=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=K6.GET_BACKUP,this.schema=t,this.table=r}};BU.exports=gR});var qU=g((VRe,GU)=>{"use strict";var W6=Hn(),kRe=HU(),RR=Y(),Q6=L(),$Re=X(),{handleHDBError:j6,hdb_errors:z6}=ie(),{HDB_ERROR_MSGS:xU,HTTP_STATUS_CODES:J6}=z6;GU.exports=X6;async function X6(e){if(RR.isEmpty(e.schema))throw new Error(xU.SCHEMA_REQUIRED_ERR);if(RR.isEmpty(e.table))throw new Error(xU.TABLE_REQUIRED_ERR);let t=RR.checkSchemaTableExist(e.schema,e.table);if(t)throw j6(new Error,t,J6.NOT_FOUND,Q6.LOG_LEVELS.ERROR,t,!0);return await W6.getBackup(read_audit_log_object)}a(X6,"getBackup")});var KU=g((KRe,YU)=>{var po=require("validate.js"),kU=nt(),Hc=L(),{handleHDBError:Z6,hdb_errors:e9}=ie(),{HDB_ERROR_MSGS:Rt,HTTP_STATUS_CODES:t9}=e9,AR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),r9={STRUCTURE_USER:"structure_user"},FU=Object.values(Hc.ROLE_TYPES_ENUM),n9="attribute_permissions",s9="attribute_name",{PERMS_CRUD_ENUM:xc}=Hc,i9=[n9,...Object.values(xc)],$U=[xc.READ,xc.INSERT,xc.UPDATE],o9=[s9,...$U];function a9(e){let t=AR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,VU(e,t)}a(a9,"addRoleValidation");function c9(e){let t=AR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,VU(e,t)}a(c9,"alterRoleValidation");function l9(e){let t=AR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,kU.validateObject(e,t)}a(l9,"dropRoleValidation");var u9=["operation","role","id","permission","hdb_user","hdb_auth_header"];function VU(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)u9.includes(n[o])||s.push(n[o]);s.length>0&&wt(Rt.INVALID_ROLE_JSON_KEYS(s),r);let i=kU.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{wt(o,r)}),e.permission){let o=_9(e);o&&wt(o,r),FU.forEach(c=>{e.permission[c]&&!po.isBoolean(e.permission[c])&&wt(Rt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(FU.indexOf(o)<0){if(o===r9.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=>{i9.includes(u)||wt(Rt.INVALID_PERM_KEY(u),r,o,l)}),Object.values(xc).forEach(u=>{po.isDefined(_[u])?po.isBoolean(_[u])||wt(Rt.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):wt(Rt.TABLE_PERM_MISSING(u),r,o,l)}),po.isDefined(_.attribute_permissions)){if(!po.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=>{!o9.includes(m)&&m!==xc.DELETE&&wt(Rt.INVALID_ATTR_PERM_KEY(m),r,o,l)}),!po.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}$U.forEach(m=>{po.isDefined(f[m])?po.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 d9(r)}a(VU,"customValidate");YU.exports={addRoleValidation:a9,alterRoleValidation:c9,dropRoleValidation:l9};function _9(e){let{operation:t,permission:r}=e;if(t===Hc.OPERATIONS_ENUM.ADD_ROLE||t===Hc.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?Hc.ROLE_TYPES_ENUM.SUPER_USER:Hc.ROLE_TYPES_ENUM.CLUSTER_USER;return Rt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(_9,"validateNoSUPerms");function d9(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 Z6(new Error,n,t9.BAD_REQUEST)}else return null}a(d9,"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=g((QRe,zU)=>{"use strict";var WU=Pr(),QU=ur(),f9=oa(),bR=KU(),NR=hi(),E9=require("uuid").v4,h9=require("util"),vE=L(),p9=Y(),yR=QU.searchByValue,m9=QU.searchByHash,S9=h9.promisify(f9.delete),T9=as(),g9=yc(),{hdb_errors:R9,handleHDBError:ba}=ie(),{HDB_ERROR_MSGS:jU,HTTP_STATUS_CODES:r_}=R9,{UserEventMsg:IR}=os();zU.exports={addRole:A9,alterRole:O9,dropRole:b9,listRoles:N9};function OR(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(OR,"scrubRoleDetails");async function A9(e){let t=bR.addRoleValidation(e);if(t)throw t;e=OR(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 yR(r)||[])}catch(i){throw ba(i)}if(n&&n.length>0)throw ba(new Error,jU.ROLE_ALREADY_EXISTS(e.role),r_.CONFLICT,void 0,void 0,!0);e.id||(e.id=E9());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await WU.insert(s),NR.signalUserChange(new IR(process.pid)),e=OR(e),e}a(A9,"addRole");async function O9(e){let t=bR.alterRoleValidation(e);if(t)throw t;e=OR(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await WU.update(r)}catch(s){throw ba(s)}if(n&&n?.message==="updated 0 of 1 records")throw ba(new Error,"Invalid role id",r_.BAD_REQUEST,void 0,void 0,!0);return await NR.signalUserChange(new IR(process.pid)),e}a(O9,"alterRole");async function b9(e){let t=bR.dropRoleValidation(e);if(t)throw ba(new Error,t,r_.BAD_REQUEST,void 0,void 0,!0);let r=new g9(vE.SYSTEM_SCHEMA_NAME,vE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await m9(r));if(n.length===0)throw ba(new Error,jU.ROLE_NOT_FOUND,r_.NOT_FOUND,void 0,void 0,!0);let s=new T9(vE.SYSTEM_SCHEMA_NAME,vE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await yR(s)),o=!1;if(p9.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw ba(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,r_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await S9(c),NR.signalUserChange(new IR(process.pid)),`${n[0].role} successfully deleted`}a(b9,"dropRole");async function N9(){return yR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(N9,"listRoles")});var ev=g((zRe,ZU)=>{"use strict";var y9=X(),mo=require("joi"),I9=nt(),JU=require("moment"),w9=require("fs-extra"),wR=require("path"),C9=require("lodash"),n_=L(),{LOG_LEVELS:Na}=L(),D9="YYYY-MM-DD hh:mm:ss",L9=wR.resolve(__dirname,"../logs");ZU.exports=function(e){return I9.validateBySchema(e,P9)};var P9=mo.object({from:mo.custom(XU),until:mo.custom(XU),level:mo.valid(Na.NOTIFY,Na.FATAL,Na.ERROR,Na.WARN,Na.INFO,Na.DEBUG,Na.TRACE),order:mo.valid("asc","desc"),limit:mo.number().min(1),start:mo.number().min(0),log_name:mo.custom(M9)});function XU(e,t){if(JU(e,JU.ISO_8601).format(D9)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(XU,"validateDatetime");function M9(e,t){if(C9.invert(n_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=y9.get(n_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?n_.LOG_NAMES.HDB:e,i=s===n_.LOG_NAMES.INSTALL?wR.join(L9,n_.LOG_NAMES.INSTALL):wR.join(n,s);return w9.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(M9,"validateReadLogPath")});var DR=g((XRe,rv)=>{"use strict";var HE=L(),U9=k(),v9=X(),B9=ev(),CR=require("path"),tv=require("fs-extra"),{once:H9}=require("events"),{handleHDBError:x9,hdb_errors:G9}=ie(),{PACKAGE_ROOT:q9}=L(),F9=CR.join(q9,"logs"),k9=1e3,$9=200;rv.exports=V9;async function V9(e){let t=B9(e);if(t)throw x9(t,t.message,G9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=v9.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?CR.join(F9,HE.LOG_NAMES.INSTALL):CR.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?k9: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(tv.statSync(s).size-(h+5)*$9,0));let S=tv.createReadStream(s,{start:m});S.on("error",v=>{U9.error(v)});let T=0,R=[],N="",b;S.on("data",v=>{let q=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;v=N+v;let M=0,W;for(;(W=q.exec(v))&&!S.destroyed;){b&&(b.message=v.slice(M,W.index),U(b));let[z,Z,ce]=W,_e=ce.split("] ["),de=_e[0],xe=_e[1];_e.splice(0,2),b={timestamp:Z,thread:de,level:xe,tags:_e,message:""},M=W.index+z.length}N=v.slice(M)}),S.on("end",v=>{S.destroyed||b&&(b.message=N.trim(),U(b))}),S.resume();function U(v){let q,M,W;switch(!0){case(i&&c&&_):q=new Date(v.timestamp),M=new Date(l),W=new Date(u),v.level===o&&q>=M&&q<=W&&T<f?T++:v.level===o&&q>=M&&q<=W&&(So(v,E,R),T++,T===h&&S.destroy());break;case(i&&c):q=new Date(v.timestamp),M=new Date(l),v.level===o&&q>=M&&T<f?T++:v.level===o&&q>=M&&(So(v,E,R),T++,T===h&&S.destroy());break;case(i&&_):q=new Date(v.timestamp),W=new Date(u),v.level===o&&q<=W&&T<f?T++:v.level===o&&q<=W&&(So(v,E,R),T++,T===h&&S.destroy());break;case(c&&_):q=new Date(v.timestamp),M=new Date(l),W=new Date(u),q>=M&&q<=W&&T<f?T++:q>=M&&q<=W&&(So(v,E,R),T++,T===h&&S.destroy());break;case i:v.level===o&&T<f?T++:v.level===o&&(So(v,E,R),T++,T===h&&S.destroy());break;case c:q=new Date(v.timestamp),M=new Date(l),q>=M&&T<f?T++:q>=M&&T>=f&&(So(v,E,R),T++,T===h&&S.destroy());break;case _:q=new Date(v.timestamp),W=new Date(u),q<=W&&T<f?T++:q<=W&&T>=f&&(So(v,E,R),T++,T===h&&S.destroy());break;default:T<f?T++:(So(v,E,R),T++,T===h&&S.destroy())}}return a(U,"onLogMessage"),await H9(S,"close"),R}a(V9,"readLog");function So(e,t,r){t==="desc"?Y9(e,r):t==="asc"?K9(e,r):r.push(e)}a(So,"pushLineToResult");function Y9(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(Y9,"insertDescending");function K9(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(K9,"insertAscending")});var xE=g((nAe,ov)=>{"use strict";var LR=require("joi"),{string:s_,boolean:nv,date:W9}=LR.types(),Q9=nt(),{validateSchemaExists:eAe,validateTableExists:tAe,validateSchemaName:rAe}=Ps(),j9=L(),z9=Ze(),sv=X();sv.initSync();var J9=s_.invalid(sv.get(j9.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(z9.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(),iv={operation:s_.valid("add_node","update_node","set_node_replication"),node_name:J9,subscriptions:LR.array().items({table:s_.optional(),schema:s_.optional(),database:s_.optional(),subscribe:nv.required(),publish:nv.required().custom(Z9),start_time:W9.iso()}).min(1).required()};function X9(e){return Q9.validateBySchema(e,LR.object(iv))}a(X9,"addUpdateNodeValidator");function Z9(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(Z9,"checkForFalsy");ov.exports={addUpdateNodeValidator:X9,validation_schema:iv}});var cv=g((iAe,av)=>{var e7=nt(),t7={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};av.exports=function(e){return e7.validateObject(e,t7)}});var GE=g((oAe,lv)=>{"use strict";var r7=L().OPERATIONS_ENUM,PR=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=r7.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};lv.exports=PR});var _v=g((cAe,uv)=>{"use strict";var n7={OPERATION:"operation",REFRESH:"refresh"},MR=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},UR=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};uv.exports={JWTTokens:MR,TOKEN_TYPE_ENUM:n7,JWTRSAKeys:UR}});var a_=g((uAe,hv)=>{"use strict";var o_=require("jsonwebtoken"),vR=require("fs-extra"),BR=Y(),xn=L(),{handleHDBError:qr,hdb_errors:s7}=ie(),{HTTP_STATUS_CODES:Fr,AUTHENTICATION_ERROR_MSGS:kr}=s7,i_=k(),dv=qf(),GR=Ur(),i7=Pr().update,o7=GE(),a7=hi(),{UserEventMsg:c7}=os(),To=X();To.initSync();var HR=require("path"),{JWTTokens:l7,JWTRSAKeys:u7,TOKEN_TYPE_ENUM:qE}=_v(),_7=To.get(xn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?To.get(xn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",d7=To.get(xn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?To.get(xn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",FE="RS256",xR;hv.exports={createTokens:f7,validateOperationToken:h7,refreshOperationToken:E7,validateRefreshToken:Ev};async function f7(e){if(BR.isEmpty(e)||typeof e!="object")throw qr(new Error,kr.INVALID_AUTH_OBJECT,Fr.BAD_REQUEST,void 0,void 0,!0);if(BR.isEmpty(e.username))throw qr(new Error,kr.USERNAME_REQUIRED,Fr.BAD_REQUEST,void 0,void 0,!0);if(BR.isEmpty(e.password))throw qr(new Error,kr.PASSWORD_REQUIRED,Fr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await GR.findAndValidateUser(e.username,e.password),!t)throw qr(new Error,kr.INVALID_CREDENTIALS,Fr.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw i_.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 fv(i,r.private_key,r.passphrase),c=await o_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:d7,algorithm:FE,subject:qE.REFRESH}),l=dv.hash(c),_=new o7(xn.SYSTEM_SCHEMA_NAME,xn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await i7(_)}catch(E){i_.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 a7.signalUserChange(new c7(process.pid)),new l7(o,c)}a(f7,"createTokens");async function fv(e,t,r){return await o_.sign(e,{key:t,passphrase:r},{expiresIn:_7,algorithm:FE,subject:qE.OPERATION})}a(fv,"signOperationToken");async function kE(){if(xR===void 0)try{let e=HR.join(To.getHdbBasePath(),xn.LICENSE_KEY_DIR_NAME,xn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=HR.join(To.getHdbBasePath(),xn.LICENSE_KEY_DIR_NAME,xn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=HR.join(To.getHdbBasePath(),xn.LICENSE_KEY_DIR_NAME,xn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await vR.readFile(e)).toString(),s=(await vR.readFile(t)).toString(),i=(await vR.readFile(r)).toString();xR=new u7(i,s,n)}catch(e){throw i_.error(e),qr(new Error,kr.NO_ENCRYPTION_KEYS,Fr.INTERNAL_SERVER_ERROR)}return xR}a(kE,"getJWTRSAKeys");async function E7(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 Ev(e.refresh_token);let t=await kE(),r=await o_.decode(e.refresh_token);return{operation_token:await fv({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(E7,"refreshOperationToken");async function h7(e){try{let t=await kE(),r=await o_.verify(e,t.public_key,{algorithms:FE,subject:qE.OPERATION});return await GR.findAndValidateUser(r.username,void 0,!1)}catch(t){throw i_.warn(t),t.name&&t.name==="TokenExpiredError"?qr(new Error,kr.TOKEN_EXPIRED,Fr.FORBIDDEN):qr(new Error,kr.INVALID_TOKEN,Fr.UNAUTHORIZED)}}a(h7,"validateOperationToken");async function Ev(e){let t;try{let r=await kE(),n=await o_.verify(e,r.public_key,{algorithms:FE,subject:qE.REFRESH});t=await GR.findAndValidateUser(n.username,void 0,!1)}catch(r){throw i_.warn(r),r.name&&r.name==="TokenExpiredError"?qr(new Error,kr.TOKEN_EXPIRED,Fr.FORBIDDEN):qr(new Error,kr.INVALID_TOKEN,Fr.UNAUTHORIZED)}if(!dv.validate(t.refresh_token,e))throw qr(new Error,kr.INVALID_TOKEN,Fr.UNAUTHORIZED);return t}a(Ev,"validateRefreshToken")});var qR=g((fAe,Sv)=>{"use strict";var p7=cv(),Gc=require("passport"),m7=require("passport-local").Strategy,S7=require("passport-http").BasicStrategy,T7=require("util"),g7=Ur(),mv=T7.callbackify(g7.findAndValidateUser),dAe=nn(),R7=L(),pv=a_();Gc.use(new m7(function(e,t,r){mv(e,t,r)}));Gc.use(new S7(function(e,t,r){mv(e,t,r)}));Gc.serializeUser(function(e,t){t(null,e)});Gc.deserializeUser(function(e,t){t(null,e)});function A7(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":Gc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===R7.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?pv.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):pv.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Gc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(A7,"authorize");function O7(e,t){let r=p7(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(O7,"checkPermissions");Sv.exports={authorize:A7,checkPermissions:O7}});var qc=g((hAe,Tv)=>{"use strict";var FR=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},kR=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};Tv.exports={Node:FR,NodeSubscription:kR}});var Rv=g((mAe,gv)=>{"use strict";var b7=L().OPERATIONS_ENUM,$R=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=b7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};gv.exports=$R});var c_=g((TAe,Av)=>{"use strict";var VR=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},YR=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)}};Av.exports={RemotePayloadObject:VR,RemotePayloadSubscription:YR}});var bv=g((RAe,Ov)=>{"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}};Ov.exports=KR});var Iv=g((yAe,yv)=>{"use strict";var N7=bv(),OAe=_t(),Nv=Ye(),y7=k(),{getSchemaPath:bAe,getTransactionAuditStorePath:NAe}=Je(),{getDatabases:I7}=(Re(),ae(Ve));yv.exports=w7;async function w7(e){let t=new N7;try{let r=I7()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await Nv.environmentDataSize(schema_path,e.name),o=await Nv.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){y7.warn(`unable to stat table dbi due to ${r}`)}return t}a(w7,"lmdbGetTableSize")});var Cv=g((wAe,wv)=>{"use strict";var WR=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}};wv.exports=WR});var gi=g((UAe,Mv)=>{"use strict";var C7=require("fs-extra"),D7=require("path"),Sr=require("systeminformation"),go=k(),Dv=gt(),DAe=Ze(),VE=L(),L7=Iv(),P7=Ei(),{getThreadInfo:Lv}=rt(),sA=X();sA.initSync();var M7=Cv(),{openEnvironment:LAe}=Ye(),{getSchemaPath:PAe}=Je(),{database:MAe,databases:QR}=(Re(),ae(Ve)),$E;Mv.exports={getHDBProcessInfo:XR,getNetworkInfo:eA,getDiskInfo:ZR,getMemoryInfo:JR,getCPUInfo:zR,getTimeInfo:jR,getSystemInformation:tA,systemInformation:U7,getTableSize:rA,getMetrics:nA};function jR(){return Sr.time()}a(jR,"getTimeInfo");async function zR(){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:T,...R}=await Sr.currentLoad();return R.cpus=[],T.forEach(N=>{let{raw_load:b,raw_load_idle:U,raw_load_irq:v,raw_load_nice:q,raw_load_system:M,raw_load_user:W,...z}=N;R.cpus.push(z)}),u.current_load=R,u}catch(e){return go.error(`error in getCPUInfo: ${e}`),{}}}a(zR,"getCPUInfo");async function JR(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Sr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return go.error(`error in getMemoryInfo: ${e}`),{}}}a(JR,"getMemoryInfo");async function XR(){let e={core:[],clustering:[]};try{let t=await Sr.processes(),r;try{r=Number.parseInt(await C7.readFile(D7.join(sA.get(VE.CONFIG_PARAMS.ROOTPATH),VE.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===VE.NODE_ERROR_CODES.ENOENT)go.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 go.error(`error in getHDBProcessInfo: ${t}`),e}}a(XR,"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 go.error(`error in getDiskInfo: ${t}`),e}}a(ZR,"getDiskInfo");async function eA(){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 go.error(`error in getNetworkInfo: ${t}`),e}}a(eA,"getNetworkInfo");async function tA(){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 go.error(`error in getSystemInformation: ${t}`),e}}a(tA,"getSystemInformation");async function rA(){let e=[],t=await P7.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await L7(n));return e}a(rA,"getTableSize");async function nA(){let e={};for(let t in QR){let r=e[t]={},n=r.tables={};for(let s in QR[t])try{let i=QR[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){go.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(nA,"getMetrics");async function Pv(){if(sA.get(VE.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await Dv.getNATSReferences(),t=await Dv.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(Pv,"getNatsStreamInfo");async function U7(e){let t=new M7;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await tA(),t.time=jR(),t.cpu=await zR(),t.memory=await JR(),t.disk=await ZR(),t.network=await eA(),t.harperdb_processes=await XR(),t.table_size=await rA(),t.metrics=await nA(),t.threads=await Lv(),t.replication=await Pv(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await tA();break;case"time":t.time=jR();break;case"cpu":t.cpu=await zR();break;case"memory":t.memory=await JR();break;case"disk":t.disk=await ZR();break;case"network":t.network=await eA();break;case"harperdb_processes":t.harperdb_processes=await XR();break;case"table_size":t.table_size=await rA();break;case"database_metrics":case"metrics":t.metrics=await nA();break;case"threads":t.threads=await Lv();break;case"replication":t.replication=await Pv();break;default:break}return t}a(U7,"systemInformation")});var Ri=g((BAe,Uv)=>{"use strict";Uv.exports={version:v7,printVersion:B7};var YE=Sa();function v7(){if(YE)return YE.version}a(v7,"version");function B7(){YE&&console.log(`HarperDB Version ${YE.version}`)}a(B7,"printVersion")});var Ai=g((qAe,xv)=>{"use strict";var H7=Pr(),iA=Y(),x7=require("util"),ya=L(),vv=X();vv.initSync();var G7=qR(),Bv=ur(),{Node:xAe,NodeSubscription:GAe}=qc(),q7=yc(),F7=Rv(),{RemotePayloadObject:k7,RemotePayloadSubscription:$7}=c_(),{handleHDBError:V7,hdb_errors:Y7}=ie(),{HTTP_STATUS_CODES:K7,HDB_ERROR_MSGS:W7}=Y7,Q7=as(),j7=gi(),z7=Ri(),{getDatabases:J7}=(Re(),ae(Ve)),X7=x7.promisify(G7.authorize),Z7=Bv.searchByHash,eee=Bv.searchByValue;xv.exports={authHeaderToUser:tee,isEmpty:ree,getNodeRecord:nee,upsertNodeRecord:see,buildNodePayloads:iee,checkClusteringEnabled:oee,getAllNodeRecords:aee,getSystemInfo:cee,reverseSubscription:Hv};async function tee(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await X7(t,null),e}a(tee,"authHeaderToUser");function ree(e){return e==null}a(ree,"isEmpty");async function nee(e){let t=new q7(ya.SYSTEM_SCHEMA_NAME,ya.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Z7(t)}a(nee,"getNodeRecord");async function see(e){let t=new F7(ya.SYSTEM_SCHEMA_NAME,ya.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return H7.upsert(t)}a(see,"upsertNodeRecord");function Hv(e){if(iA.isEmpty(e.subscribe)||iA.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(Hv,"reverseSubscription");function iee(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=iA.getTableHashAttribute(l,_),{subscribe:d,publish:E}=Hv(c),f=J7()[l]?.[_],h=new $7(l,_,u,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);s.push(h)}return new k7(r,t,s,n)}a(iee,"buildNodePayloads");function oee(){if(!vv.get(ya.CONFIG_PARAMS.CLUSTERING_ENABLED))throw V7(new Error,W7.CLUSTERING_NOT_ENABLED,K7.BAD_REQUEST,void 0,void 0,!0)}a(oee,"checkClusteringEnabled");async function aee(){let e=new Q7(ya.SYSTEM_SCHEMA_NAME,ya.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await eee(e))}a(aee,"getAllNodeRecords");async function cee(){let e=await j7.getSystemInformation();return{hdb_version:z7.version(),node_version:e.node_version,platform:e.platform}}a(cee,"getSystemInfo")});var oA=g((kAe,Kv)=>{"use strict";var KE=gt(),Gv=Y(),qv=Ze(),Fv=L(),WE=k(),kv=PE(),lee=Hu(),{RemotePayloadObject:uee}=c_(),{handleHDBError:$v,hdb_errors:_ee}=ie(),{HTTP_STATUS_CODES:Vv}=_ee,{NodeSubscription:Yv}=qc();Kv.exports=dee;async function dee(e,t){let r;try{r=await KE.request(`${t}.${qv.REQUEST_SUFFIX}`,new uee(Fv.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 $v(new Error,c,Vv.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===qv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw $v(new Error,o,Vv.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===Fv.SYSTEM_SCHEMA_NAME){await KE.createLocalTableStream(l,c);let h=new Yv(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=Gv.doesSchemaExist(l),u=n[l]!==void 0,d=c?Gv.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 kv.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 lee(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await kv.createTable(h)}await KE.createLocalTableStream(l,c);let f=new Yv(l,c,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:s}}a(dee,"reviewSubscriptions")});var __=g((VAe,jv)=>{"use strict";var{handleHDBError:QE,hdb_errors:fee}=ie(),{HTTP_STATUS_CODES:jE}=fee,{addUpdateNodeValidator:Eee}=xE(),zE=k(),Qv=L(),Wv=Ze(),hee=Y(),l_=gt(),u_=Ai(),pee=X(),mee=oA(),{Node:See,NodeSubscription:Tee}=qc(),{broadcast:gee}=rt(),Ree="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Aee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Oee=pee.get(Qv.CONFIG_PARAMS.CLUSTERING_NODENAME);jv.exports=bee;async function bee(e,t=!1){zE.trace("addNode called with:",e),u_.checkClusteringEnabled();let r=Eee(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 u_.getNodeRecord(n);if(!hee.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 mee(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Ree,o;let c=u_.buildNodePayloads(s,Oee,Qv.OPERATIONS_ENUM.ADD_NODE,await u_.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 Tee(f.schema,f.table,f.publish,f.subscribe))}zE.trace("addNode sending remote payload:",c);let _;try{_=await l_.request(`${n}.${Wv.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 l_.updateRemoteConsumer(m,n)}let E=l_.requestErrorHandler(d,"add_node",n);throw QE(new Error,E,jE.INTERNAL_SERVER_ERROR,"error",E)}if(_.status===Wv.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 l_.updateRemoteConsumer(f,n),f.subscribe===!0&&await l_.updateConsumerIterator(f.schema,f.table,n,"start")}let u=new See(n,l,_.system_info);return await u_.upsertNodeRecord(u),gee({type:"nats_update"}),i.length>0?o.message=Aee:o.message=`Successfully added '${n}' to manifest`,o}a(bee,"addNode")});var lA=g((WAe,Xv)=>{"use strict";var{handleHDBError:aA,hdb_errors:Nee}=ie(),{HTTP_STATUS_CODES:cA}=Nee,{addUpdateNodeValidator:yee}=xE(),d_=k(),Jv=L(),zv=Ze(),KAe=Y(),f_=gt(),E_=Ai(),Iee=X(),{cloneDeep:wee}=require("lodash"),Cee=oA(),{Node:Dee,NodeSubscription:Lee}=qc(),{broadcast:Pee}=rt(),Mee="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Uee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",vee=Iee.get(Jv.CONFIG_PARAMS.CLUSTERING_NODENAME);Xv.exports=Bee;async function Bee(e){d_.trace("updateNode called with:",e),E_.checkClusteringEnabled();let t=yee(e);if(t)throw aA(t,t.message,cA.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await E_.getNodeRecord(r);s.length>0&&(n=wee(s));let{added:i,skipped:o}=await Cee(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Mee,c;let l=E_.buildNodePayloads(i,vee,Jv.OPERATIONS_ENUM.UPDATE_NODE,await E_.getSystemInfo());for(let u=0,d=i.length;u<d;u++){let E=i[u];d_.trace(`updateNode updating work stream for node: ${r} subscription:`,E),i[u].start_time===void 0&&delete i[u].start_time}d_.trace("updateNode sending remote payload:",l);let _;try{_=await f_.request(`${r}.${zv.REQUEST_SUFFIX}`,l)}catch(u){d_.error(`updateNode received error from request: ${u}`);let d=f_.requestErrorHandler(u,"update_node",r);throw aA(new Error,d,cA.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===zv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw aA(new Error,u,cA.INTERNAL_SERVER_ERROR,"error",u)}d_.trace(_);for(let u=0,d=i.length;u<d;u++){let E=i[u];await f_.updateRemoteConsumer(E,r),E.subscribe===!0?await f_.updateConsumerIterator(E.schema,E.table,r,"start"):await f_.updateConsumerIterator(E.schema,E.table,r,"stop")}return n||(n=[new Dee(r,[],_.system_info)]),await Hee(n[0],i,_.system_info),o.length>0?c.message=Uee:c.message=`Successfully updated '${r}'`,c}a(Bee,"updateNode");async function Hee(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 Lee(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await E_.upsertNodeRecord(n),Pee({type:"nats_update"})}a(Hee,"updateNodeTable")});var n0=g((jAe,r0)=>{"use strict";var t0=require("joi"),{string:Zv}=t0.types(),xee=nt(),e0=L(),Gee=X(),qee=Ze();r0.exports=Fee;function Fee(e){let t=Zv.invalid(Gee.get(e0.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(qee.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=t0.object({operation:Zv.valid(e0.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return xee.validateBySchema(e,r)}a(Fee,"removeNodeValidator")});var XE=g((JAe,c0)=>{"use strict";var{handleHDBError:s0,hdb_errors:kee}=ie(),{HTTP_STATUS_CODES:i0}=kee,$ee=n0(),h_=k(),o0=Ai(),Vee=Y(),JE=L(),a0=Ze(),uA=gt(),Yee=X(),{RemotePayloadObject:Kee}=c_(),{NodeSubscription:Wee}=qc(),Qee=Bu(),jee=oa(),{broadcast:zee}=rt(),Jee=Yee.get(JE.CONFIG_PARAMS.CLUSTERING_NODENAME);c0.exports=Xee;async function Xee(e){h_.trace("removeNode called with:",e),o0.checkClusteringEnabled();let t=$ee(e);if(t)throw s0(t,t.message,i0.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await o0.getNodeRecord(r);if(Vee.isEmptyOrZeroLength(n))throw s0(new Error,`Node '${r}' was not found.`,i0.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Kee(JE.OPERATIONS_ENUM.REMOVE_NODE,Jee,[]),i,o=!1;for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];u.subscribe===!0&&await uA.updateConsumerIterator(u.schema,u.table,r,"stop");try{await uA.updateRemoteConsumer(new Wee(u.schema,u.table,!1,!1),r)}catch(d){h_.error(d)}}try{i=await uA.request(`${r}.${a0.REQUEST_SUFFIX}`,s),h_.trace("Remove node reply from remote node:",r,i)}catch(l){h_.error("removeNode received error from request:",l),o=!0}let c=new Qee(JE.SYSTEM_SCHEMA_NAME,JE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await jee.deleteRecord(c),zee({type:"nats_update"}),i?.status===a0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(h_.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(Xee,"removeNode")});var _0=g((ZAe,u0)=>{"use strict";var l0=require("joi"),{string:Zee,array:ete}=l0.types(),tte=nt(),rte=xE();u0.exports=nte;function nte(e){let t=l0.object({operation:Zee.valid("configure_cluster").required(),connections:ete.items(rte.validation_schema).required()});return tte.validateBySchema(e,t)}a(nte,"configureClusterValidator")});var eh=g((tOe,p0)=>{"use strict";var ste=L(),ZE=k(),ite=Y(),ote=XE(),ate=__(),d0=Ai(),cte=_0(),{handleHDBError:f0,hdb_errors:lte}=ie(),{HTTP_STATUS_CODES:E0}=lte,ute="Configure cluster complete.",_te="Failed to configure the cluster. Check the logs for more details.",dte="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";p0.exports=fte;async function fte(e){ZE.trace("configure cluster called with:",e),d0.checkClusteringEnabled();let t=cte(e);if(t)throw f0(t,t.message,E0.BAD_REQUEST,void 0,void 0,!0);let r=await d0.getAllNodeRecords(),n=[];for(let u=0,d=r.length;u<d;u++){let E=await h0(ote,{operation:ste.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 h0(ate,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(ite.isEmptyOrZeroLength(o))return{message:ute,connections:c};if(l)return{message:dte,failed_nodes:o,connections:c};throw f0(new Error,_te,E0.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(fte,"configureCluster");async function h0(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(h0,"functionWrapper")});var g0=g((nOe,T0)=>{"use strict";var p_=require("joi"),Ete=nt(),{validateSchemaExists:m0,validateTableExists:hte,validateSchemaName:S0}=Ps(),pte=p_.object({operation:p_.string().valid("purge_stream"),schema:p_.string().custom(m0).custom(S0).optional(),database:p_.string().custom(m0).custom(S0).optional(),table:p_.string().custom(hte).required()});function mte(e){return Ete.validateBySchema(e,pte)}a(mte,"purgeStreamValidator");T0.exports=mte});var _A=g((iOe,R0)=>{"use strict";var{handleHDBError:Ste,hdb_errors:Tte}=ie(),{HTTP_STATUS_CODES:gte}=Tte,Rte=g0(),Ate=gt(),Ote=Ai();R0.exports=bte;async function bte(e){e.schema=e.schema??e.database;let t=Rte(e);if(t)throw Ste(t,t.message,gte.BAD_REQUEST,void 0,void 0,!0);Ote.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Ate.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(bte,"purgeStream")});var rh=g((aOe,I0)=>{"use strict";var fA=Ai(),Nte=gt(),b0=X(),th=L(),Ia=Ze(),yte=Y(),dA=k(),{RemotePayloadObject:Ite}=c_(),{ErrorCode:A0}=require("nats"),O0=b0.get(th.CONFIG_PARAMS.CLUSTERING_ENABLED),N0=b0.get(th.CONFIG_PARAMS.CLUSTERING_NODENAME);I0.exports={clusterStatus:wte,buildNodeStatus:y0};async function wte(){let e={node_name:N0,is_enabled:O0,connections:[]};if(!O0)return e;let t=await fA.getAllNodeRecords();if(yte.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(y0(t[n],e.connections));return await Promise.allSettled(r),e}a(wte,"clusterStatus");async function y0(e,t){let r=e.name,n=new Ite(th.OPERATIONS_ENUM.CLUSTER_STATUS,N0,void 0,await fA.getSystemInfo()),s,i,o=Ia.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Nte.request(Ia.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Ia.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ia.CLUSTER_STATUS_STATUSES.CLOSED,dA.error(`Error getting node status from ${r} `,s))}catch(l){dA.warn(`Error getting node status from ${r}`,l),l.code===A0.NoResponders?o=Ia.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===A0.Timeout?o=Ia.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ia.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Cte(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 fA.upsertNodeRecord(l)}catch(l){dA.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(y0,"buildNodeStatus");function Cte(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(Cte,"NodeStatusObject")});var sh=g((lOe,w0)=>{"use strict";var{handleHDBError:Dte,hdb_errors:Lte}=ie(),{HTTP_STATUS_CODES:Pte}=Lte,Mte=gt(),Ute=Ai(),EA=Y(),nh=require("joi"),vte=nt(),Bte=2e3,Hte=nh.object({timeout:nh.number().min(1),connected_nodes:nh.boolean(),routes:nh.boolean()});w0.exports=xte;async function xte(e){Ute.checkClusteringEnabled();let t=vte.validateBySchema(e,Hte);if(t)throw Dte(t,t.message,Pte.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||EA.autoCastBoolean(n),o=s===void 0||EA.autoCastBoolean(s),c={nodes:[]},l=await Mte.getServerList(r??Bte),_={};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:EA.autoCast(m.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(xte,"clusterNetwork")});var P0=g((_Oe,L0)=>{"use strict";var hA=require("joi"),C0=nt(),{route_constraints:D0}=UT();L0.exports={setRoutesValidator:Gte,deleteRoutesValidator:qte};function Gte(e){let t=hA.object({server:hA.valid("hub","leaf").required(),routes:D0.required()});return C0.validateBySchema(e,t)}a(Gte,"setRoutesValidator");function qte(e){let t=hA.object({routes:D0.required()});return C0.validateBySchema(e,t)}a(qte,"deleteRoutesValidator")});var oh=g((fOe,B0)=>{"use strict";var wa=Et(),pA=Y(),ih=L(),M0=P0(),{handleHDBError:U0,hdb_errors:Fte}=ie(),{HTTP_STATUS_CODES:v0}=Fte,kte="cluster routes successfully set",$te="cluster routes successfully deleted";B0.exports={setRoutes:Vte,getRoutes:Yte,deleteRoutes:Kte};function Vte(e){let t=M0.setRoutesValidator(e);if(t)throw U0(t,t.message,v0.BAD_REQUEST,void 0,void 0,!0);let r=wa.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=pA.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"?wa.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):wa.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:kte,set:o,skipped:i}}a(Vte,"setRoutes");function Yte(){let e=wa.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Yte,"getRoutes");function Kte(e){let t=M0.deleteRoutesValidator(e);if(t)throw U0(t,t.message,v0.BAD_REQUEST,void 0,void 0,!0);let r=wa.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=pA.isEmptyOrZeroLength(n)?null:n,wa.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=pA.isEmptyOrZeroLength(s)?null:s,wa.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:$te,deleted:i,skipped:o}}a(Kte,"deleteRoutes")});var x0=g((hOe,H0)=>{"use strict";var m_=require("alasql"),Ca=require("recursive-iterator"),ds=k(),Wte=Y(),S_=L(),mA=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,jte(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=>S_.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!S_.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][S_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Qte(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(_=>!S_.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new m_.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 Qte(e){return e.filter(t=>t[S_.PERMS_CRUD_ENUM.READ])}a(Qte,"filterReadRestrictedAttrs");function jte(e,t,r,n,s){zte(e,t,r,n,s)}a(jte,"interpretAST");function T_(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(T_,"addSchemaTableToMap");function zte(e,t,r,n,s){if(!e){ds.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof m_.yy.Insert?ere(e,t,r):e instanceof m_.yy.Select?Jte(e,t,r,n,s):e instanceof m_.yy.Update?Xte(e,t,r):e instanceof m_.yy.Delete?Zte(e,t,r):ds.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(zte,"getRecordAttributesAST");function Jte(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(Wte.isEmptyOrZeroLength(i)){ds.error("No schema specified");return}e.from.forEach(c=>{T_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),T_(c.table,t,r,n,s)});let o=new Ca(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 Ca(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 Ca(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 Ca(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(Jte,"getSelectAttributes");function Xte(e,t,r){if(!e){ds.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Ca(e.columns),s=e.table.databaseid;T_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&SA(e.table.tableid,s,i.columnid,t,r)}a(Xte,"getUpdateAttributes");function Zte(e,t,r){if(!e){ds.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Ca(e.where),s=e.table.databaseid;T_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&SA(e.table.tableid,s,i.columnid,t,r)}a(Zte,"getDeleteAttributes");function ere(e,t,r){if(!e){ds.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Ca(e.columns),s=e.into.databaseid;T_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&SA(e.into.tableid,s,i.columnid,t,r)}a(ere,"getInsertAttributes");function SA(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(SA,"pushAttribute");H0.exports=mA});var ch=g((mOe,k0)=>{var ah=ua(),G0=require("chalk"),hn=k(),q0=require("prompt"),{promisify:tre}=require("util"),TA=L(),rre=require("fs-extra"),nre=require("path"),sre=Y(),ire=Ri(),F0=X();F0.initSync();var ore=require("moment"),are=tre(q0.get),cre=nre.join(F0.getHdbBasePath(),TA.LICENSE_KEY_DIR_NAME,TA.LICENSE_FILE_NAME,TA.LICENSE_FILE_NAME);k0.exports={getFingerprint:ure,setLicense:lre,parseLicense:gA,register:_re,getRegistrationInfo:fre};async function lre(e){if(e&&e.key&&e.company){try{hn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await gA(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(lre,"setLicense");async function ure(){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(ure,"getFingerprint");async function gA(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 rre.writeFile(cre,JSON.stringify({license_key:e,company:t}))}catch(n){throw hn.error("Failed to write License"),n}return"Registration successful."}a(gA,"parseLicense");async function _re(){let e=await dre();return gA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(_re,"register");async function dre(){let e=await ah.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:G0.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:G0.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{q0.start()}catch(n){hn.error(n)}let r;try{r=await are(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(dre,"promptForRegistration");async function fre(){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(sre.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=ire.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=ore.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(fre,"getRegistrationInfo")});var V0=g((TOe,$0)=>{"use strict";var Ere=Ze(),RA=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+Ere.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"}};$0.exports=RA});var W0=g((ROe,K0)=>{"use strict";var Y0=Ze(),AA=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+Y0.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+Y0.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"}};K0.exports=AA});var j0=g((OOe,Q0)=>{"use strict";var OA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};Q0.exports=OA});var J0=g((NOe,z0)=>{"use strict";var hre=Ze(),bA=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+hre.SERVER_SUFFIX.ADMIN,this.password=r}};z0.exports=bA});var fh=g((IOe,eB)=>{"use strict";var Fc=require("path"),_h=require("fs-extra"),pre=V0(),mre=W0(),Sre=j0(),Tre=J0(),NA=Ur(),$c=Y(),$r=Et(),uh=L(),g_=Ze(),{CONFIG_PARAMS:At}=uh,Vc=k(),R_=X(),X0=fi(),yA=gt(),kc="clustering",gre=1e4,Z0=50;eB.exports={generateNatsConfig:Are,removeNatsConfig:Ore,getHubConfigPath:Rre};function Rre(){let e=R_.get(At.ROOTPATH);return Fc.join(e,kc,g_.NATS_CONFIG_FILES.HUB_SERVER)}a(Rre,"getHubConfigPath");async function Are(e=!1,t=void 0){R_.initSync();let r=R_.get(At.ROOTPATH),n=Fc.join(r,kc,g_.PID_FILES.HUB),s=Fc.join(r,kc,g_.PID_FILES.LEAF),i=$r.getConfigFromFile(At.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Fc.join(r,kc,g_.NATS_CONFIG_FILES.HUB_SERVER),c=Fc.join(r,kc,g_.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 yA.checkNATSServerInstalled()||dh("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await NA.listUsers(),S=$r.getConfigFromFile(At.CLUSTERING_USER),T=await NA.getClusterUser();($c.isEmpty(T)||T.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 R=[],N=[];for(let[z,Z]of m.entries())Z.role?.role===uh.ROLE_TYPES_ENUM.CLUSTER_USER&&Z.active&&(R.push(new Tre(Z.username,X0.decrypt(Z.hash))),N.push(new Sre(Z.username,X0.decrypt(Z.hash))));let b=[],{hub_routes:U}=$r.getClusteringRoutes();if(!$c.isEmptyOrZeroLength(U))for(let z of U)b.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${z.host}:${z.port}`);let v=new pre($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),b,R,N);u==null&&(delete v.tls.ca_file,delete v.leafnodes.tls.ca_file),t=$c.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===uh.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await _h.writeJson(o,v),Vc.trace(`Hub server config written to ${o}`));let q=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,M=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,W=new mre($r.getConfigFromFile(At.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,s,i,[q],[M],R,N,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),Vc.trace(`Leaf server config written to ${c}`))}a(Are,"generateNatsConfig");async function lh(e){let t=R_.get(e);return $c.isEmpty(t)&&dh(`port undefined for '${e}'`),await $c.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}`;Vc.error(t),console.error(t),process.exit(1)}a(dh,"generateNatsConfigError");async function Ore(e){let{port:t,config_file:r}=yA.getServerConfig(e),{username:n,decrypt_hash:s}=await NA.getClusterUser(),i=0,o=2e3;for(;i<Z0;){try{let u=await yA.createConnection(t,n,s,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Vc.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&&Vc.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await $c.async_set_timeout(_)}let c="0".repeat(gre),l=Fc.join(R_.get(At.ROOTPATH),kc,r);await _h.writeFile(l,c),await _h.remove(l),Vc.notify(e,"started.")}a(Ore,"removeNatsConfig")});var oB=g((COe,iB)=>{"use strict";var pn=X(),bre=ua(),Te=L(),A_=Ze(),Oi=require("path"),{PACKAGE_ROOT:hh}=L(),tB=X(),Eh=Y(),Yc="/dev/null",Nre=Oi.join(hh,"launchServiceScripts"),rB=Oi.join(hh,"utility/scripts"),yre=Oi.join(rB,Te.HDB_RESTART_SCRIPT),nB=Oi.resolve(hh,"dependencies",`${process.platform}-${process.arch}`,A_.NATS_BINARY_NAME);function sB(){let t=bre.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(sB,"generateMainServerConfig");var Ire=9930;function wre(){pn.initSync(!0);let e=pn.get(Te.CONFIG_PARAMS.ROOTPATH),t=Oi.join(e,"clustering",A_.NATS_CONFIG_FILES.HUB_SERVER),r=Oi.join(pn.get(Te.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Te.LOG_NAMES.HDB),n=tB.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=A_.LOG_LEVEL_FLAGS[pn.get(Te.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Ire?"-"+n:""),script:nB,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=Yc,i.error_file=Yc),i}a(wre,"generateNatsHubServerConfig");var Cre=9940;function Dre(){pn.initSync(!0);let e=pn.get(Te.CONFIG_PARAMS.ROOTPATH),t=Oi.join(e,"clustering",A_.NATS_CONFIG_FILES.LEAF_SERVER),r=Oi.join(pn.get(Te.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Te.LOG_NAMES.HDB),n=tB.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=A_.LOG_LEVEL_FLAGS[pn.get(Te.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Cre?"-"+n:""),script:nB,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=Yc,i.error_file=Yc),i}a(Dre,"generateNatsLeafServerConfig");function Lre(){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:Nre,autorestart:!1};return pn.get(Te.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Yc,t.error_file=Yc),t}a(Lre,"generateClusteringUpgradeV4ServiceConfig");function Pre(){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:rB},script:yre}}a(Pre,"generateRestart");function Mre(){return{apps:[sB()]}}a(Mre,"generateAllServiceConfigs");iB.exports={generateAllServiceConfigs:Mre,generateMainServerConfig:sB,generateRestart:Pre,generateNatsHubServerConfig:wre,generateNatsLeafServerConfig:Dre,generateClusteringUpgradeV4ServiceConfig:Lre}});var Kc=g((POe,gB)=>{"use strict";var He=L(),Ure=Y(),Ni=fh(),ph=gt(),bi=Ze(),Ro=oB(),mh=X(),Ao=k(),vre=Ai(),{startWorker:aB,onMessageFromWorkers:Bre}=rt(),Hre=gi(),LOe=require("util"),xre=require("child_process"),Gre=require("fs"),{execFile:qre}=xre,De;gB.exports={enterPM2Mode:Fre,start:Oo,stop:IA,reload:lB,restart:uB,list:wA,describe:fB,connect:yi,kill:Kre,startAllServices:Wre,startService:CA,getUniqueServicesList:EB,restartAllServices:Qre,isServiceRegistered:hB,reloadStopStart:pB,restartHdb:dB,deleteProcess:Vre,startClusteringProcesses:SB,startClusteringThreads:TB,isHdbRestartRunning:Yre,isClusteringRunning:zre,stopClustering:jre,reloadClustering:Jre,expectedRestartOfChildren:_B};var O_=!1;Bre(e=>{e.type==="restart"&&mh.initSync(!0)});function Fre(){O_=!0}a(Fre,"enterPM2Mode");function yi(){return De||(De=require("pm2")),new Promise((e,t)=>{De.connect((r,n)=>{Ao.setupConsoleLogging(),r&&t(r),e(n)})})}a(yi,"connect");var Tr,kre=10,cB;function Oo(e,t=!1){if(O_)return $re(e);let r=qre(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),!cB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<kre&&(Gre.existsSync(Ni.getHubConfigPath())?Oo(e):(await Ni.generateNatsConfig(!0),Oo(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?Ao.OUTPUTS.STDERR:Ao.OUTPUTS.STDOUT;Ao.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?Ao.OUTPUTS.STDERR:Ao.OUTPUTS.STDOUT;Ao.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(()=>{cB=!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(Oo,"start");function $re(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($re,"startWithPM2");function IA(e){if(!O_){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(IA,"stop");function lB(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(lB,"reload");function uB(e){if(!O_){_B();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(uB,"restart");function _B(){for(let e of Tr||[])e.config&&(e.config.restarts=0)}a(_B,"expectedRestartOfChildren");function Vre(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(Vre,"deleteProcess");async function dB(){await Oo(Ro.generateRestart())}a(dB,"restartHdb");async function Yre(){let e=await wA();for(let t in e)if(e[t].name===He.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Yre,"isHdbRestartRunning");function wA(){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(wA,"list");function fB(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(fB,"describe");function Kre(){if(!O_){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(Kre,"kill");async function Wre(){try{await SB(),await TB(),await Oo(Ro.generateAllServiceConfigs())}catch(e){throw De?.disconnect(),e}}a(Wre,"startAllServices");async function CA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case He.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Ro.generateMainServerConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Ro.generateNatsIngestServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Ro.generateNatsReplyServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Ro.generateNatsHubServerConfig(),await Oo(r,t),await Ni.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Ro.generateNatsLeafServerConfig(),await Oo(r,t),await Ni.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Ro.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Oo(r)}catch(r){throw De?.disconnect(),r}}a(CA,"startService");async function EB(){try{let e=await wA(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw De?.disconnect(),e}}a(EB,"getUniqueServicesList");async function Qre(e=[]){try{let t=!1,r=await EB();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===He.PROCESS_DESCRIPTORS.HDB?t=!0:await uB(o))}t&&await pB(He.PROCESS_DESCRIPTORS.HDB)}catch(t){throw De?.disconnect(),t}}a(Qre,"restartAllServices");async function hB(e){if(Tr?.find(r=>r.name===e))return!0;let t=await Hre.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(hB,"isServiceRegistered");async function pB(e){let t=mh.get(He.CONFIG_PARAMS.THREADS_COUNT)??mh.get(He.CONFIG_PARAMS.THREADS),r=await fB(e),n=Ure.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await IA(e),await CA(e)):e===He.PROCESS_DESCRIPTORS.HDB?await dB():await lB(e)}a(pB,"reloadStopStart");var mB;async function SB(e=!1){for(let t in He.CLUSTERING_PROCESSES){let r=He.CLUSTERING_PROCESSES[t];await CA(r,e)}}a(SB,"startClusteringProcesses");async function TB(){mB=aB(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 vre.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===He.PRE_4_0_0_VERSION){Ao.info("Starting clustering upgrade 4.0.0 process"),aB(He.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(TB,"startClusteringThreads");async function jre(){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 mB.terminate();else{let t=He.CLUSTERING_PROCESSES[e];await IA(t)}}a(jre,"stopClustering");async function zre(){for(let e in He.CLUSTERING_PROCESSES){let t=He.CLUSTERING_PROCESSES[e];if(await hB(t)===!1)return!1}return!0}a(zre,"isClusteringRunning");async function Jre(){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(Jre,"reloadClustering")});var Rh={};$e(Rh,{compactOnStart:()=>Xre,copyDb:()=>yB});async function Xre(){bo.notify("Running compact on start"),console.log("Running compact on start");let e=(0,Th.get)(Ii.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,Ii.DATABASES_DIR_NAME,n+"-copy.mdb"),c=0;try{c=await RB(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){bo.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await yB(n,o),console.log("Backing up",n,"to",i),await(0,Da.move)(s,i,{overwrite:!0})}try{b_()}catch(n){bo.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Da.move)(i,s,{overwrite:!0}),await(0,Da.remove)((0,Sh.join)(e,Ii.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));try{b_()}catch(n){bo.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){bo.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,DA.updateConfigValue)(Ii.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,Da.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw b_(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await RB(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
- Total record count before compaction: ${i}, total after: ${c}.
15
- Database backup has not been removed and can be found here: ${s}`;bo.error(l),console.error(l)}(0,Th.get)(Ii.CONFIG_PARAMS.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,Da.remove)(s))}(0,DA.updateConfigValue)(Ii.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1)}async function RB(e){let t=await(0,NB.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function yB(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,AB.open)(new OB.default(t)),c=o.openDB(gh.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,T;if(m&&(S=h.compression,T=bh(),T?h.compression=T:delete h.compression,S?.dictionary?.toString()===T?.dictionary?.toString()&&(S=null,T=null)),c.put(f,h),!(m||h.indexed)||(0,Th.get)(Ii.CONFIG_PARAMS.STORAGE_SKIPCOMPACTTABLES)?.includes(f.slice(0,-1)))continue;let N=new bB.default(!m,m);N.encoding="binary",N.compression=S;let b=n.openDB(f,N);b.decoder=null,b.decoderCopies=!1,b.encoding="binary",N.compression=T;let U=o.openDB(f,N);U.encoder=null,console.log("copying",f,"from",e,"to",t),await E(b,U,m,u)}let d=n.openDB(gh.AUDIT_STORE_NAME,Oh);console.log("copying audit log"),E(i,d,!1,u);async function E(f,h,m,S){let T=0,R=0,N=1e7,b=null;for(;N-- >0;)try{for(let U of f.getKeys({start:b,transaction:S}))try{b=U;let{value:v,version:q}=f.getEntry(U,{transaction:S});l=h.put(U,v,m?q:void 0),T++,S.openTimer&&(S.openTimer=0),R+=(U?.length||10)+v.length,_++>5e3&&(await l,console.log("copied",T,"entries",R,"bytes"),_=0)}catch(v){console.error("Error copying record",typeof U=="symbol"?"symbol":U,"from",e,"to",t,v)}console.log("finish copying, copied",T,"entries",R,"bytes");return}catch{if(typeof b=="string"){if(b==="z")return console.error("Reached end of dbi",b,"for",e,"to",t);b=b.slice(0,-2)+"z"}else if(typeof b=="number")b++;else return console.error("Unknown key type",b,"for",e,"to",t)}}a(E,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{u.done(),o.close()}}var AB,Sh,Da,Th,OB,bB,gh,Ii,NB,DA,bo,Ah=be(()=>{Re();AB=require("lmdb"),Sh=require("path"),Da=require("fs-extra"),Th=x(X()),OB=x(hu()),bB=x(Eu()),gh=x(_t()),Ii=x(L());so();NB=x(Ei()),DA=x(Et()),bo=x(k());a(Xre,"compactOnStart");a(RB,"getTotalDBRecordCount");a(yB,"copyDb")});var No=g((GOe,PB)=>{"use strict";var Zre=require("minimist"),{isMainThread:MA,parentPort:LA,threadId:HOe}=require("worker_threads"),ot=L(),{PROCESS_DESCRIPTORS_VALIDATE:N_}=ot,Fs=k(),UA=Y(),yh=fh(),Nh=gt(),xOe=Ze(),CB=Et(),Es=Kc(),IB=gi(),{compactOnStart:ene}=(Ah(),ae(Rh)),tne=ro(),{restartWorkers:Ih,onMessageByType:rne}=rt(),{handleHDBError:nne,hdb_errors:sne}=ie(),{HTTP_STATUS_CODES:ine}=sne,I_=X();I_.initSync();var y_=`Restarting HarperDB. This may take up to ${ot.RESTART_TIMEOUT_MS/1e3} seconds.`,one="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",wB="Clustering is not enabled so cannot be restarted",ane="Invalid service",Wc,Gn;PB.exports={restart:DB,restartService:vA};MA&&rne(ot.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await vA({service:e.workerType}):DB({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function DB(e){Gn=Object.keys(e).length===0,Wc=await Es.isServiceRegistered(ot.HDB_PROC_DESCRIPTOR);let t=Zre(process.argv);if(t.service){await vA(t);return}if(Gn&&!Wc){console.error(one);return}if(Gn&&console.log(y_),Wc){Es.enterPM2Mode(),Fs.notify(y_);let r=tne(Object.keys(ot.CONFIG_PARAM_MAP),!0);return UA.isEmptyOrZeroLength(Object.keys(r))||CB.updateConfigValue(void 0,void 0,r,!0,!0),cne(),y_}return MA?(Fs.notify(y_),I_.get(ot.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await ene(),setTimeout(()=>{Ih()},50)):LA.postMessage({type:ot.ITC_EVENT_TYPES.RESTART}),y_}a(DB,"restart");async function vA(e){let{service:t}=e;if(ot.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw nne(new Error,ane,ine.BAD_REQUEST,void 0,void 0,!0);if(Es.expectedRestartOfChildren(),Wc=await Es.isServiceRegistered(ot.HDB_PROC_DESCRIPTOR),!MA)return LA.postMessage({type:ot.ITC_EVENT_TYPES.RESTART,workerType:t}),new Promise(n=>{LA.on("message",s=>{s.type==="restart-complete"&&n()})});let r;switch(t){case N_.clustering:if(!I_.get(ot.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=wB;break}Gn&&console.log("Restarting clustering"),Fs.notify("Restarting clustering"),await LB();break;case N_.clustering_config:case N_["clustering config"]:if(!I_.get(ot.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=wB;break}Gn&&console.log("Restarting clustering_config"),Fs.notify("Restarting clustering_config"),await Es.reloadClustering();break;case"custom_functions":case"custom functions":case N_.harperdb:case N_.http_workers:if(Gn&&!Wc){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 Ih("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(vA,"restartService");async function cne(){await LB(),await Es.restart(ot.HDB_PROC_DESCRIPTOR),await UA.async_set_timeout(2e3),I_.get(ot.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await PA(),Gn&&(await Nh.closeConnection(),process.exit(0))}a(cne,"restartPM2Mode");async function LB(){if(!CB.getConfigFromFile(ot.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await IB.getHDBProcessInfo()).clustering.length===0)Fs.trace("Clustering not running, restart will start clustering services"),await yh.generateNatsConfig(!0),await Es.startClusteringProcesses(),await Es.startClusteringThreads(),await PA(),Gn&&await Nh.closeConnection();else{await yh.generateNatsConfig(!0),Wc?(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 IB.getHDBProcessInfo()).clustering.forEach(s=>{Fs.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await UA.async_set_timeout(3e3),await PA(),await Nh.updateLocalStreams(),Gn&&await Nh.closeConnection(),Fs.trace("Restart clustering restarting ingest and reply service threads");let t=Ih(ot.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Ih(ot.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(LB,"restartClustering");async function PA(){await yh.removeNatsConfig(ot.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await yh.removeNatsConfig(ot.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(PA,"removeNatsConfig")});var $B=g((kOe,kB)=>{"use strict";var FOe=require("lodash"),Vr=L(),{handleHDBError:MB,hdb_errors:lne}=ie(),{HDB_ERROR_MSGS:une,HTTP_STATUS_CODES:_ne}=lne,BA=k();kB.exports={getRolePermissions:fne};var La=Object.create(null),dne=a(e=>({key:e,perms:{}}),"perms_template_obj"),HB=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),xB=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"),HA=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...xB(t,r,n,s)}),"table_perms_template"),UB=a((e,t=xB())=>({attribute_name:e,describe:FB(t),[w_]:t[w_],[xA]:t[xA],[GA]:t[GA]}),"attr_perms_template"),vB=a((e,t=!1)=>({attribute_name:e,describe:t,[w_]:t}),"timestamp_attr_perms_template"),{READ:w_,INSERT:xA,UPDATE:GA}=Vr.PERMS_CRUD_ENUM,GB=Object.values(Vr.PERMS_CRUD_ENUM),qB=[w_,xA,GA];function fne(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(La[t]&&La[t].key===n)return La[t].perms;let s=Ene(e,r);return La[t]?La[t].key=n:La[t]=dne(n),La[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 BA.error(n),BA.debug(r),MB(new Error,une.OUTDATED_PERMS_TRANSLATION_ERROR,_ne.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
16
- ${r.stack}`;throw BA.error(n),MB(new Error)}}}a(fne,"getRolePermissions");function Ene(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]=hne(t[i]);return}r[i]=HB(),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],_=pne(c,l);r[i].describe||GB.forEach(u=>{_[u]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=HA()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=HA()})}),r}a(Ene,"translateRolePermissions");function hne(e){let t=HB(!0);return Object.keys(e).forEach(r=>{t.tables[r]=HA(!0,!0,!0,!0,!0)}),t}a(hne,"createStructureUserPermissions");function pne(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=vB(d,u[w_])),_[d]=E,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=UB(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let u=i[_];u.describe=FB(u),s.attribute_permissions.push(u),c||mne(u,l)}else if(_!==o){let u;Vr.TIME_STAMP_NAMES.includes(_)?u=vB(_):u=UB(_),s.attribute_permissions.push(u)}}),c||s.attribute_permissions.push(l),s.describe=BB(s),s}else return e.describe=BB(e),e}a(pne,"getTableAttrPerms");function BB(e){return GB.filter(t=>e[t]).length>0}a(BB,"getSchemaTableDescribePerm");function FB(e){return qB.filter(t=>e[t]).length>0}a(FB,"getAttributeDescribePerm");function mne(e,t){qB.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(mne,"checkForHashPerms")});var VB={};$e(VB,{Resources:()=>wh,keyArrayToString:()=>Qc,resetResources:()=>Sne,resources:()=>yo});function Sne(){return yo=new wh}function Qc(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var wh,yo,C_=be(()=>{pa();wh=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(Sne,"resetResources");a(Qc,"keyArrayToString")});var YB={};$e(YB,{Headers:()=>Io,appendHeader:()=>Ch});function Ch(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var Io,D_=be(()=>{Io=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(Ch,"appendHeader")});var L_={};$e(L_,{authentication:()=>ZB,bypassAuth:()=>Nne,login:()=>Ine,logout:()=>wne,start:()=>yne});function Nne(){XB=!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?Ane?Rne:[]:gne?Tne:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h=new Io([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Dh&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Dh&&o.push("Access-Control-Allow-Credentials","true")}}let l,_;if(Dh){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 WB.get(l);break}e.session=_||(_={})}let u=a((f,h,m)=>{let S=new jc.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?KB.notify(S):KB.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,jc.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=Pa.get(n),!d){let f=n.indexOf(" "),h=n.slice(0,f),m=n.slice(f+1),S,T;try{switch(h){case"Basic":let R=atob(m),N=R.indexOf(":");S=R.slice(0,N),T=R.slice(N+1),d=S||T?await dt.getUser(S,T,e):null;break;case"Bearer":try{d=await(0,Lh.validateOperationToken)(m)}catch(b){if(b.message==="invalid token")try{return await(0,Lh.validateRefreshToken)(m),c({status:-1})}catch{throw b}}break}}catch(R){return bne&&(Pa.get(m)||(Pa.set(m,m),u(S,jt.AUTH_AUDIT_STATUS.FAILURE,h))),c({status:401,body:Ma({error:R.message},e)})}Pa.set(n,d),One&&u(d.username,jt.AUTH_AUDIT_STATUS.SUCCESS,h)}e.user=d}else _?.user?e.user=await dt.getUser(_.user,null,e):(XB&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,jB.getSuperUser)());Dh&&(e.session.update=function(f){if(!l){l=(0,zB.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,WB.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")&&yo.loginPath?(E.status=302,E.headers.set("Location",yo.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 Io);for(let d=0;d<_;){let E=o[d++];u.set(E,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function yne({server:e,port:t}){e.http(ZB,{port:t||"all"}),QB||(QB=!0,setInterval(()=>{Pa=new Map},qn.get(jt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),JB.user.addListener(()=>{Pa=new Map}))}async function Ine(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 wne(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var jB,Lh,zB,qn,jt,jc,JB,KB,Tne,gne,Rne,Ane,WB,Dh,XB,One,bne,Pa,QB,Ph=be(()=>{jB=x(Ur());Cr();C_();Lh=x(a_());Re();zB=require("uuid"),qn=x(X()),jt=x(L()),jc=x(k()),JB=x(Iu());D_();zc();KB=(0,jc.loggerWithTag)("auth-event");qn.initSync();Tne=qn.get(jt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),gne=qn.get(jt.CONFIG_PARAMS.HTTP_CORS),Rne=qn.get(jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Ane=qn.get(jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),WB=St({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Dh=qn.get(jt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,XB=qn.get(jt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,One=qn.get(jt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,bne=qn.get(jt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Pa=new Map;dt.onInvalidatedUser(()=>{Pa=new Map});a(Nne,"bypassAuth");a(ZB,"authentication");a(yne,"start");a(Ine,"login");a(wne,"logout")});var oH=g((ZOe,iH)=>{"use strict";var Le=require("joi"),eH=require("fs-extra"),tH=require("path"),Ci=nt(),rH=X(),nH=L(),sH=k(),{hdb_errors:Cne}=ie(),{HDB_ERROR_MSGS:gr}=Cne,wi=/^[a-zA-Z0-9-_]+$/;iH.exports={getDropCustomFunctionValidator:Lne,setCustomFunctionValidator:Pne,addComponentValidator:Bne,dropCustomFunctionProjectValidator:Hne,packageComponentValidator:xne,deployComponentValidator:Gne,setComponentFileValidator:Mne,getComponentFileValidator:vne,dropComponentFileValidator:Une};function Mh(e,t,r){try{let n=rH.get(nH.CONFIG_PARAMS.COMPONENTSROOT),s=tH.join(n,t);return eH.existsSync(s)?e?t:r.message(gr.PROJECT_EXISTS):e?r.message(gr.NO_PROJECT):t}catch(n){return sH.error(n),r.message(gr.VALIDATION_ERR)}}a(Mh,"checkProjectExists");function P_(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(P_,"checkFilePath");function Dne(e,t,r,n){try{let s=rH.get(nH.CONFIG_PARAMS.COMPONENTSROOT),i=tH.join(s,e,t,r+".js");return eH.existsSync(i)?r:n.message(gr.NO_FILE)}catch(s){return sH.error(s),n.message(gr.VALIDATION_ERR)}}a(Dne,"checkFileExists");function Lne(e){let t=Le.object({project:Le.string().pattern(wi).custom(Mh.bind(null,!0)).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME}),type:Le.string().valid("helpers","routes").required(),file:Le.string().pattern(wi).custom(Dne.bind(null,e.project,e.type)).custom(P_).required().messages({"string.pattern.base":gr.BAD_FILE_NAME})});return Ci.validateBySchema(e,t)}a(Lne,"getDropCustomFunctionValidator");function Pne(e){let t=Le.object({project:Le.string().pattern(wi).custom(Mh.bind(null,!0)).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME}),type:Le.string().valid("helpers","routes").required(),file:Le.string().custom(P_).required(),function_content:Le.string().required()});return Ci.validateBySchema(e,t)}a(Pne,"setCustomFunctionValidator");function Mne(e){let t=Le.object({project:Le.string().pattern(wi).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME}),file:Le.string().custom(P_).required(),payload:Le.string().allow("").optional(),encoding:Le.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ci.validateBySchema(e,t)}a(Mne,"setComponentFileValidator");function Une(e){let t=Le.object({project:Le.string().pattern(wi).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME}),file:Le.string().custom(P_).optional()});return Ci.validateBySchema(e,t)}a(Une,"dropComponentFileValidator");function vne(e){let t=Le.object({project:Le.string().required(),file:Le.string().custom(P_).required(),encoding:Le.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ci.validateBySchema(e,t)}a(vne,"getComponentFileValidator");function Bne(e){let t=Le.object({project:Le.string().pattern(wi).custom(Mh.bind(null,!1)).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME})});return Ci.validateBySchema(e,t)}a(Bne,"addComponentValidator");function Hne(e){let t=Le.object({project:Le.string().pattern(wi).custom(Mh.bind(null,!0)).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME})});return Ci.validateBySchema(e,t)}a(Hne,"dropCustomFunctionProjectValidator");function xne(e){let t=Le.object({project:Le.string().pattern(wi).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME}),skip_node_modules:Le.boolean()});return Ci.validateBySchema(e,t)}a(xne,"packageComponentValidator");function Gne(e){let t=Le.object({project:Le.string().pattern(wi).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 Ci.validateBySchema(e,t)}a(Gne,"deployComponentValidator")});var Hh=g((tbe,fH)=>{"use strict";var Uh=require("joi"),vh=require("path"),aH=require("fs-extra"),{exec:qne}=require("child_process"),Fne=require("util"),cH=Fne.promisify(qne),M_=L(),{handleHDBError:Jc,hdb_errors:kne}=ie(),{HTTP_STATUS_CODES:Xc}=kne,U_=X(),$ne=nt(),Zc=k();U_.initSync();var qA=U_.get(M_.CONFIG_PARAMS.COMPONENTSROOT),lH="npm install --omit=dev --json",Vne=`${lH} --dry-run`;fH.exports={installModules:Qne,auditModules:jne,installAllRootModules:Yne,uninstallRootModule:Kne,linkHarperdb:Wne};async function Yne(e=!1){await Bh(),await v_(e?"npm install --ignore-scripts":"npm install",U_.get(M_.CONFIG_PARAMS.ROOTPATH))}a(Yne,"installAllRootModules");async function Kne(e){await v_(`npm uninstall ${e}`,U_.get(M_.CONFIG_PARAMS.ROOTPATH))}a(Kne,"uninstallRootModule");async function Wne(){await Bh(),await v_(`npm link ${M_.PACKAGE_ROOT}`,U_.get(M_.CONFIG_PARAMS.ROOTPATH))}a(Wne,"linkHarperdb");async function v_(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await cH(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
13
+ `,"")}a(hU,"runCommand");async function r6(){try{await M8.access(uR)}catch{return!1}let e=await hU(`${uR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return U8.eq(t,e6)}a(r6,"checkNATSServerInstalled");async function hR(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await fU.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 $8({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&&pU()}),i}a(hR,"createConnection");function pU(){mr=void 0,Ta=void 0,ga=void 0,Ra=void 0}a(pU,"clearClientCache");async function n6(){mr&&(await mr.drain(),mr=void 0,Ta=void 0,ga=void 0,Ra=void 0)}a(n6,"closeConnection");var mr,Ra;async function e_(){return Ra||(Ra=hR(Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),mr=await Ra),mr||Ra}a(e_,"getConnection");async function t_(){if(Ta)return Ta;Aa(mr)&&await e_();let{domain:e}=Dc(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(t_,"getJetStreamManager");async function mU(){if(ga)return ga;Aa(mr)&&await e_();let{domain:e}=Dc(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(mU,"getJetStream");async function qs(){let e=mr||await e_(),t=Ta||await t_(),r=ga||await mU();return{connection:e,jsm:t,js:r}}a(qs,"getNATSReferences");async function s6(e){let t=Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await fU.getClusterUser(),s=await hR(t,r,n),i=ER(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=EU.decode(u.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await yE.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(s6,"getServerList");async function pR(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:Y8.File,retention:K8.Limits,subjects:t,discard:W8.Old,max_msgs:s,max_bytes:i,max_age:n})}a(pR,"createLocalStream");async function SU(){let{jsm:e}=await qs(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(SU,"listStreams");async function i6(e){let{jsm:t}=await qs();await t.streams.delete(e)}a(i6,"deleteLocalStream");async function o6(e){let{connection:t}=await qs(),r=[],n=ER(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(EU.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(o6,"listRemoteStreams");async function a6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await qs(),i=lU(),o={durable_name:i,ack_policy:dR.Explicit};t&&(o.deliver_policy=fR.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=_R(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(a6,"viewStream");async function*c6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await qs(),i=lU(),o={durable_name:i,ack_policy:dR.Explicit};t&&(o.deliver_policy=fR.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=_R(_.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(c6,"viewStreamIterator");async function l6(e,t,r,n){_s.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=TU(n,r);let{js:s}=await qs(),i=await wE(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:dU.encode(n);try{_s.trace(`publishToStream publishing to subject: ${o}`),X8(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 RU(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 pR(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(l6,"publishToStream");function TU(e,t){t===void 0&&(t=j8());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(TU,"addNatsMsgHeader");function Dc(e){e=e.toLowerCase();let t=Zu.join(Qt.get(Ce.CONFIG_PARAMS.ROOTPATH),Z8);if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Aa(lR)&&(lR={port:Ju.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Ju.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}),lR;if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Aa(cR)&&(cR={port:Ju.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Ju.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+nr.SERVER_SUFFIX.LEAF,config_file:nr.NATS_CONFIG_FILES.LEAF_SERVER,domain:Ju.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+nr.SERVER_SUFFIX.LEAF,pid_file_path:Zu.join(t,nr.PID_FILES.LEAF),hdb_nats_path:t}),cR;_s.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Dc,"getServerConfig");async function gU(e,t,r,n){try{await e.consumers.add(t,{ack_policy:dR.Explicit,durable_name:r,deliver_policy:fR.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(gU,"createConsumer");async function u6(e,t,r){await e.consumers.delete(t,r)}a(u6,"removeConsumer");function _6(e){return e.split(".")[1]}a(_6,"extractServerName");async function d6(e,t,r=6e4,n=ER()){if(!yE.isObject(t))throw new Error("data param must be an object");let s=dU.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 _R(c.data)}a(d6,"request");function mR(e){return new Promise(async(t,r)=>{let n=x8(uR,["--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(mR,"reloadNATS");async function f6(){let{pid_file_path:e}=Dc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await mR(e)}a(f6,"reloadNATSHub");async function E6(){let{pid_file_path:e}=Dc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await mR(e)}a(E6,"reloadNATSLeaf");function h6(e,t,r){let n;switch(e.code){case cU.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case cU.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(h6,"requestErrorHandler");async function p6(e,t){let r=t+nr.SERVER_SUFFIX.LEAF,{connection:n}=await qs(),{jsm:s}=await b6(r),{schema:i,table:o}=e,c=IE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await RU(async()=>{if(e.subscribe===!0)await gU(s,c,n.info.server_name,l);else try{await u6(s,c,n.info.server_name)}catch(_){_s.trace(_)}})}a(p6,"updateRemoteConsumer");async function m6(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(!_U&&k8()<Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=aR();await c(o)}await q8(o),n==="stop"&&await yE.async_set_timeout(1e3)}a(m6,"updateConsumerIterator");function RU(e){return G8.writeTransaction(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(RU,"exclusiveLock");async function AU(e,t){let r=IE.createNatsTableStreamName(e,t),n=await wE(),s=R6(e,t,n);await pR(r,[s])}a(AU,"createLocalTableStream");async function S6(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await AU(n,s)}}a(S6,"createTableStreams");async function OU(e,t,r=void 0){if(Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=IE.createNatsTableStreamName(e,t),{domain:s}=Dc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await e_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")_s.warn(n);else throw n}}a(OU,"purgeTableStream");async function T6(e,t){if(Qt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await OU(e,t[r])}a(T6,"purgeSchemaTableStreams");async function g6(e){return(await t_()).streams.info(e)}a(g6,"getStreamInfo");function R6(e,t,r){return`${nr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(R6,"createSubjectName");async function wE(){if(Xu)return Xu;if(Xu=(await t_())?.nc?.info?.server_name,Xu===void 0)throw new Error("Unable to get jetstream manager server name");return Xu}a(wE,"getJsmServerName");async function A6(){let e=await t_(),t=await wE(),r=await SU();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=O6(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let u=_.join(".");_s.trace(`Updating stream subject name from: ${i} to: ${u}`),s.subjects[0]=u,await e.streams.update(s.name,s)}}a(A6,"updateLocalStreams");function O6(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(O6,"updateStreamLimits");async function b6(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(b6,"connectToRemoteJS")});var PE=R((DRe,wU)=>{"use strict";var Pc=Cf(),Mc=DM(),N6=k(),y6=require("uuid").v4,LRe=require("clone"),LE=Ei(),Uc=D(),I6=require("util"),ho=Hn(),{handleHDBError:xr,hdb_errors:w6}=ie(),{HDB_ERROR_MSGS:CE,HTTP_STATUS_CODES:Gr}=w6,{SchemaEventMsg:DE}=os(),NU=gt(),{getDatabases:C6}=(Re(),ae($e)),{transformReq:vc}=Y();wU.exports={createSchema:L6,createSchemaStructure:yU,createTable:D6,createTableStructure:IU,createAttribute:B6,dropSchema:P6,dropTable:M6,dropAttribute:U6,getBackup:H6};async function L6(e){let t=await yU(e);return LE.signalSchemaChange(new DE(process.pid,e.operation,e.schema)),t}a(L6,"createSchema");async function yU(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 ho.createSchema(e),`database '${e.schema}' successfully created`}a(yU,"createSchemaStructure");async function D6(e){return vc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await IU(e)}a(D6,"createTable");async function IU(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:y6(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ho.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 ho.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(IU,"createTableStructure");async function P6(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 ho.dropSchema(e),LE.signalSchemaChange(new DE(process.pid,e.operation,e.schema)),await NU.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(P6,"dropSchema");async function M6(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 ho.dropTable(e),await NU.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(M6,"dropTable");async function U6(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 ho.dropAttribute(e),v6(e),LE.signalSchemaChange(new DE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw N6.error(`Got an error deleting attribute ${I6.inspect(e)}.`),n}}a(U6,"dropAttribute");function v6(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(v6,"dropAttributeFromGlobal");async function B6(e){vc(e);let t=C6()[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 ho.createAttribute(e),LE.signalSchemaChange(new DE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(B6,"createAttribute");function H6(e){return ho.getBackup(e)}a(H6,"getBackup")});var LU=R((MRe,CU)=>{"use strict";var{OPERATIONS_ENUM:x6}=D(),SR=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=x6.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};CU.exports=SR});var TR=R((BRe,vU)=>{"use strict";var G6=Hn(),vRe=LU(),ME=Y(),UE=D(),q6=X(),{handleHDBError:DU,hdb_errors:F6}=ie(),{HDB_ERROR_MSGS:PU,HTTP_STATUS_CODES:MU}=F6,k6=Object.values(UE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),UU="To use this operation audit log must be enabled in harperdb-config.yaml";vU.exports=V6;async function V6(e){if(ME.isEmpty(e.schema))throw new Error(PU.SCHEMA_REQUIRED_ERR);if(ME.isEmpty(e.table))throw new Error(PU.TABLE_REQUIRED_ERR);if(!q6.get(UE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw DU(new Error,UU,MU.BAD_REQUEST,UE.LOG_LEVELS.ERROR,UU,!0);let t=ME.checkSchemaTableExist(e.schema,e.table);if(t)throw DU(new Error,t,MU.NOT_FOUND,UE.LOG_LEVELS.ERROR,t,!0);if(!ME.isEmpty(e.search_type)&&k6.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await G6.readAuditLog(e)}a(V6,"readAuditLog")});var HU=R((xRe,BU)=>{"use strict";var{OPERATIONS_ENUM:$6}=D(),gR=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=$6.GET_BACKUP,this.schema=t,this.table=r}};BU.exports=gR});var qU=R((kRe,GU)=>{"use strict";var Y6=Hn(),qRe=HU(),RR=Y(),K6=D(),FRe=X(),{handleHDBError:W6,hdb_errors:Q6}=ie(),{HDB_ERROR_MSGS:xU,HTTP_STATUS_CODES:j6}=Q6;GU.exports=z6;async function z6(e){if(RR.isEmpty(e.schema))throw new Error(xU.SCHEMA_REQUIRED_ERR);if(RR.isEmpty(e.table))throw new Error(xU.TABLE_REQUIRED_ERR);let t=RR.checkSchemaTableExist(e.schema,e.table);if(t)throw W6(new Error,t,j6.NOT_FOUND,K6.LOG_LEVELS.ERROR,t,!0);return await Y6.getBackup(read_audit_log_object)}a(z6,"getBackup")});var KU=R(($Re,YU)=>{var po=require("validate.js"),kU=nt(),Bc=D(),{handleHDBError:J6,hdb_errors:X6}=ie(),{HDB_ERROR_MSGS:Rt,HTTP_STATUS_CODES:Z6}=X6,AR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),e9={STRUCTURE_USER:"structure_user"},FU=Object.values(Bc.ROLE_TYPES_ENUM),t9="attribute_permissions",r9="attribute_name",{PERMS_CRUD_ENUM:Hc}=Bc,n9=[t9,...Object.values(Hc)],VU=[Hc.READ,Hc.INSERT,Hc.UPDATE],s9=[r9,...VU];function i9(e){let t=AR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,$U(e,t)}a(i9,"addRoleValidation");function o9(e){let t=AR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,$U(e,t)}a(o9,"alterRoleValidation");function a9(e){let t=AR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,kU.validateObject(e,t)}a(a9,"dropRoleValidation");var c9=["operation","role","id","permission","hdb_user","hdb_auth_header"];function $U(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)c9.includes(n[o])||s.push(n[o]);s.length>0&&wt(Rt.INVALID_ROLE_JSON_KEYS(s),r);let i=kU.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{wt(o,r)}),e.permission){let o=l9(e);o&&wt(o,r),FU.forEach(c=>{e.permission[c]&&!po.isBoolean(e.permission[c])&&wt(Rt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(FU.indexOf(o)<0){if(o===e9.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=>{n9.includes(u)||wt(Rt.INVALID_PERM_KEY(u),r,o,l)}),Object.values(Hc).forEach(u=>{po.isDefined(_[u])?po.isBoolean(_[u])||wt(Rt.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):wt(Rt.TABLE_PERM_MISSING(u),r,o,l)}),po.isDefined(_.attribute_permissions)){if(!po.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=>{!s9.includes(m)&&m!==Hc.DELETE&&wt(Rt.INVALID_ATTR_PERM_KEY(m),r,o,l)}),!po.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}VU.forEach(m=>{po.isDefined(f[m])?po.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 u9(r)}a($U,"customValidate");YU.exports={addRoleValidation:i9,alterRoleValidation:o9,dropRoleValidation:a9};function l9(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(l9,"validateNoSUPerms");function u9(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 J6(new Error,n,Z6.BAD_REQUEST)}else return null}a(u9,"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,zU)=>{"use strict";var WU=Pr(),QU=ur(),_9=ia(),bR=KU(),NR=Ei(),d9=require("uuid").v4,f9=require("util"),vE=D(),E9=Y(),yR=QU.searchByValue,h9=QU.searchByHash,p9=f9.promisify(_9.delete),m9=as(),S9=Nc(),{hdb_errors:T9,handleHDBError:Oa}=ie(),{HDB_ERROR_MSGS:jU,HTTP_STATUS_CODES:r_}=T9,{UserEventMsg:IR}=os();zU.exports={addRole:g9,alterRole:R9,dropRole:A9,listRoles:O9};function OR(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(OR,"scrubRoleDetails");async function g9(e){let t=bR.addRoleValidation(e);if(t)throw t;e=OR(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 yR(r)||[])}catch(i){throw Oa(i)}if(n&&n.length>0)throw Oa(new Error,jU.ROLE_ALREADY_EXISTS(e.role),r_.CONFLICT,void 0,void 0,!0);e.id||(e.id=d9());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await WU.insert(s),NR.signalUserChange(new IR(process.pid)),e=OR(e),e}a(g9,"addRole");async function R9(e){let t=bR.alterRoleValidation(e);if(t)throw t;e=OR(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await WU.update(r)}catch(s){throw Oa(s)}if(n&&n?.message==="updated 0 of 1 records")throw Oa(new Error,"Invalid role id",r_.BAD_REQUEST,void 0,void 0,!0);return await NR.signalUserChange(new IR(process.pid)),e}a(R9,"alterRole");async function A9(e){let t=bR.dropRoleValidation(e);if(t)throw Oa(new Error,t,r_.BAD_REQUEST,void 0,void 0,!0);let r=new S9(vE.SYSTEM_SCHEMA_NAME,vE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await h9(r));if(n.length===0)throw Oa(new Error,jU.ROLE_NOT_FOUND,r_.NOT_FOUND,void 0,void 0,!0);let s=new m9(vE.SYSTEM_SCHEMA_NAME,vE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await yR(s)),o=!1;if(E9.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`,r_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await p9(c),NR.signalUserChange(new IR(process.pid)),`${n[0].role} successfully deleted`}a(A9,"dropRole");async function O9(){return yR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(O9,"listRoles")});var ev=R((QRe,ZU)=>{"use strict";var b9=X(),mo=require("joi"),N9=nt(),JU=require("moment"),y9=require("fs-extra"),wR=require("path"),I9=require("lodash"),n_=D(),{LOG_LEVELS:ba}=D(),w9="YYYY-MM-DD hh:mm:ss",C9=wR.resolve(__dirname,"../logs");ZU.exports=function(e){return N9.validateBySchema(e,L9)};var L9=mo.object({from:mo.custom(XU),until:mo.custom(XU),level:mo.valid(ba.NOTIFY,ba.FATAL,ba.ERROR,ba.WARN,ba.INFO,ba.DEBUG,ba.TRACE),order:mo.valid("asc","desc"),limit:mo.number().min(1),start:mo.number().min(0),log_name:mo.custom(D9)});function XU(e,t){if(JU(e,JU.ISO_8601).format(w9)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(XU,"validateDatetime");function D9(e,t){if(I9.invert(n_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=b9.get(n_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?n_.LOG_NAMES.HDB:e,i=s===n_.LOG_NAMES.INSTALL?wR.join(C9,n_.LOG_NAMES.INSTALL):wR.join(n,s);return y9.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(D9,"validateReadLogPath")});var LR=R((zRe,rv)=>{"use strict";var HE=D(),P9=k(),M9=X(),U9=ev(),CR=require("path"),tv=require("fs-extra"),{once:v9}=require("events"),{handleHDBError:B9,hdb_errors:H9}=ie(),{PACKAGE_ROOT:x9}=D(),G9=CR.join(x9,"logs"),q9=1e3,F9=200;rv.exports=k9;async function k9(e){let t=U9(e);if(t)throw B9(t,t.message,H9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=M9.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?CR.join(G9,HE.LOG_NAMES.INSTALL):CR.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?q9: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(tv.statSync(s).size-(h+5)*F9,0));let S=tv.createReadStream(s,{start:m});S.on("error",v=>{P9.error(v)});let T=0,g=[],N="",A;S.on("data",v=>{let q=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;v=N+v;let U=0,W;for(;(W=q.exec(v))&&!S.destroyed;){A&&(A.message=v.slice(U,W.index),P(A));let[z,Z,ce]=W,_e=ce.split("] ["),de=_e[0],xe=_e[1];_e.splice(0,2),A={timestamp:Z,thread:de,level:xe,tags:_e,message:""},U=W.index+z.length}N=v.slice(U)}),S.on("end",v=>{S.destroyed||A&&(A.message=N.trim(),P(A))}),S.resume();function P(v){let q,U,W;switch(!0){case(i&&c&&_):q=new Date(v.timestamp),U=new Date(l),W=new Date(u),v.level===o&&q>=U&&q<=W&&T<f?T++:v.level===o&&q>=U&&q<=W&&(So(v,E,g),T++,T===h&&S.destroy());break;case(i&&c):q=new Date(v.timestamp),U=new Date(l),v.level===o&&q>=U&&T<f?T++:v.level===o&&q>=U&&(So(v,E,g),T++,T===h&&S.destroy());break;case(i&&_):q=new Date(v.timestamp),W=new Date(u),v.level===o&&q<=W&&T<f?T++:v.level===o&&q<=W&&(So(v,E,g),T++,T===h&&S.destroy());break;case(c&&_):q=new Date(v.timestamp),U=new Date(l),W=new Date(u),q>=U&&q<=W&&T<f?T++:q>=U&&q<=W&&(So(v,E,g),T++,T===h&&S.destroy());break;case i:v.level===o&&T<f?T++:v.level===o&&(So(v,E,g),T++,T===h&&S.destroy());break;case c:q=new Date(v.timestamp),U=new Date(l),q>=U&&T<f?T++:q>=U&&T>=f&&(So(v,E,g),T++,T===h&&S.destroy());break;case _:q=new Date(v.timestamp),W=new Date(u),q<=W&&T<f?T++:q<=W&&T>=f&&(So(v,E,g),T++,T===h&&S.destroy());break;default:T<f?T++:(So(v,E,g),T++,T===h&&S.destroy())}}return a(P,"onLogMessage"),await v9(S,"close"),g}a(k9,"readLog");function So(e,t,r){t==="desc"?V9(e,r):t==="asc"?$9(e,r):r.push(e)}a(So,"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 $9(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($9,"insertAscending")});var xE=R((tAe,ov)=>{"use strict";var DR=require("joi"),{string:s_,boolean:nv,date:Y9}=DR.types(),K9=nt(),{validateSchemaExists:XRe,validateTableExists:ZRe,validateSchemaName:eAe}=Ps(),W9=D(),Q9=Ze(),sv=X();sv.initSync();var j9=s_.invalid(sv.get(W9.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Q9.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(),iv={operation:s_.valid("add_node","update_node","set_node_replication"),node_name:j9,subscriptions:DR.array().items({table:s_.optional(),schema:s_.optional(),database:s_.optional(),subscribe:nv.required(),publish:nv.required().custom(J9),start_time:Y9.iso()}).min(1).required()};function z9(e){return K9.validateBySchema(e,DR.object(iv))}a(z9,"addUpdateNodeValidator");function J9(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(J9,"checkForFalsy");ov.exports={addUpdateNodeValidator:z9,validation_schema:iv}});var cv=R((nAe,av)=>{var X9=nt(),Z9={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};av.exports=function(e){return X9.validateObject(e,Z9)}});var GE=R((sAe,lv)=>{"use strict";var e7=D().OPERATIONS_ENUM,PR=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=e7.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};lv.exports=PR});var _v=R((oAe,uv)=>{"use strict";var t7={OPERATION:"operation",REFRESH:"refresh"},MR=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},UR=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};uv.exports={JWTTokens:MR,TOKEN_TYPE_ENUM:t7,JWTRSAKeys:UR}});var a_=R((cAe,hv)=>{"use strict";var o_=require("jsonwebtoken"),vR=require("fs-extra"),BR=Y(),xn=D(),{handleHDBError:qr,hdb_errors:r7}=ie(),{HTTP_STATUS_CODES:Fr,AUTHENTICATION_ERROR_MSGS:kr}=r7,i_=k(),dv=qf(),GR=Ur(),n7=Pr().update,s7=GE(),i7=Ei(),{UserEventMsg:o7}=os(),To=X();To.initSync();var HR=require("path"),{JWTTokens:a7,JWTRSAKeys:c7,TOKEN_TYPE_ENUM:qE}=_v(),l7=To.get(xn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?To.get(xn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",u7=To.get(xn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?To.get(xn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",FE="RS256",xR;hv.exports={createTokens:_7,validateOperationToken:f7,refreshOperationToken:d7,validateRefreshToken:Ev};async function _7(e){if(BR.isEmpty(e)||typeof e!="object")throw qr(new Error,kr.INVALID_AUTH_OBJECT,Fr.BAD_REQUEST,void 0,void 0,!0);if(BR.isEmpty(e.username))throw qr(new Error,kr.USERNAME_REQUIRED,Fr.BAD_REQUEST,void 0,void 0,!0);if(BR.isEmpty(e.password))throw qr(new Error,kr.PASSWORD_REQUIRED,Fr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await GR.findAndValidateUser(e.username,e.password),!t)throw qr(new Error,kr.INVALID_CREDENTIALS,Fr.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw i_.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 fv(i,r.private_key,r.passphrase),c=await o_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:u7,algorithm:FE,subject:qE.REFRESH}),l=dv.hash(c),_=new s7(xn.SYSTEM_SCHEMA_NAME,xn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await n7(_)}catch(E){i_.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 i7.signalUserChange(new o7(process.pid)),new a7(o,c)}a(_7,"createTokens");async function fv(e,t,r){return await o_.sign(e,{key:t,passphrase:r},{expiresIn:l7,algorithm:FE,subject:qE.OPERATION})}a(fv,"signOperationToken");async function kE(){if(xR===void 0)try{let e=HR.join(To.getHdbBasePath(),xn.LICENSE_KEY_DIR_NAME,xn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=HR.join(To.getHdbBasePath(),xn.LICENSE_KEY_DIR_NAME,xn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=HR.join(To.getHdbBasePath(),xn.LICENSE_KEY_DIR_NAME,xn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await vR.readFile(e)).toString(),s=(await vR.readFile(t)).toString(),i=(await vR.readFile(r)).toString();xR=new c7(i,s,n)}catch(e){throw i_.error(e),qr(new Error,kr.NO_ENCRYPTION_KEYS,Fr.INTERNAL_SERVER_ERROR)}return xR}a(kE,"getJWTRSAKeys");async function d7(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 Ev(e.refresh_token);let t=await kE(),r=await o_.decode(e.refresh_token);return{operation_token:await fv({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(d7,"refreshOperationToken");async function f7(e){try{let t=await kE(),r=await o_.verify(e,t.public_key,{algorithms:FE,subject:qE.OPERATION});return await GR.findAndValidateUser(r.username,void 0,!1)}catch(t){throw i_.warn(t),t.name&&t.name==="TokenExpiredError"?qr(new Error,kr.TOKEN_EXPIRED,Fr.FORBIDDEN):qr(new Error,kr.INVALID_TOKEN,Fr.UNAUTHORIZED)}}a(f7,"validateOperationToken");async function Ev(e){let t;try{let r=await kE(),n=await o_.verify(e,r.public_key,{algorithms:FE,subject:qE.REFRESH});t=await GR.findAndValidateUser(n.username,void 0,!1)}catch(r){throw i_.warn(r),r.name&&r.name==="TokenExpiredError"?qr(new Error,kr.TOKEN_EXPIRED,Fr.FORBIDDEN):qr(new Error,kr.INVALID_TOKEN,Fr.UNAUTHORIZED)}if(!dv.validate(t.refresh_token,e))throw qr(new Error,kr.INVALID_TOKEN,Fr.UNAUTHORIZED);return t}a(Ev,"validateRefreshToken")});var qR=R((_Ae,Sv)=>{"use strict";var E7=cv(),xc=require("passport"),h7=require("passport-local").Strategy,p7=require("passport-http").BasicStrategy,m7=require("util"),S7=Ur(),mv=m7.callbackify(S7.findAndValidateUser),uAe=nn(),T7=D(),pv=a_();xc.use(new h7(function(e,t,r){mv(e,t,r)}));xc.use(new p7(function(e,t,r){mv(e,t,r)}));xc.serializeUser(function(e,t){t(null,e)});xc.deserializeUser(function(e,t){t(null,e)});function g7(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===T7.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?pv.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):pv.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(g7,"authorize");function R7(e,t){let r=E7(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(R7,"checkPermissions");Sv.exports={authorize:g7,checkPermissions:R7}});var Gc=R((fAe,Tv)=>{"use strict";var FR=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},kR=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};Tv.exports={Node:FR,NodeSubscription:kR}});var Rv=R((hAe,gv)=>{"use strict";var A7=D().OPERATIONS_ENUM,VR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=A7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};gv.exports=VR});var c_=R((mAe,Av)=>{"use strict";var $R=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},YR=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)}};Av.exports={RemotePayloadObject:$R,RemotePayloadSubscription:YR}});var bv=R((TAe,Ov)=>{"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}};Ov.exports=KR});var Iv=R((bAe,yv)=>{"use strict";var O7=bv(),RAe=_t(),Nv=Ye(),b7=k(),{getSchemaPath:AAe,getTransactionAuditStorePath:OAe}=Je(),{getDatabases:N7}=(Re(),ae($e));yv.exports=y7;async function y7(e){let t=new O7;try{let r=N7()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await Nv.environmentDataSize(schema_path,e.name),o=await Nv.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){b7.warn(`unable to stat table dbi due to ${r}`)}return t}a(y7,"lmdbGetTableSize")});var Cv=R((yAe,wv)=>{"use strict";var WR=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}};wv.exports=WR});var Ti=R((PAe,Mv)=>{"use strict";var I7=require("fs-extra"),w7=require("path"),Sr=require("systeminformation"),go=k(),Lv=gt(),wAe=Ze(),$E=D(),C7=Iv(),L7=oo(),{getThreadInfo:Dv}=rt(),sA=X();sA.initSync();var D7=Cv(),{openEnvironment:CAe}=Ye(),{getSchemaPath:LAe}=Je(),{database:DAe,databases:QR}=(Re(),ae($e)),VE;Mv.exports={getHDBProcessInfo:XR,getNetworkInfo:eA,getDiskInfo:ZR,getMemoryInfo:JR,getCPUInfo:zR,getTimeInfo:jR,getSystemInformation:tA,systemInformation:P7,getTableSize:rA,getMetrics:nA};function jR(){return Sr.time()}a(jR,"getTimeInfo");async function zR(){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:T,...g}=await Sr.currentLoad();return g.cpus=[],T.forEach(N=>{let{raw_load:A,raw_load_idle:P,raw_load_irq:v,raw_load_nice:q,raw_load_system:U,raw_load_user:W,...z}=N;g.cpus.push(z)}),u.current_load=g,u}catch(e){return go.error(`error in getCPUInfo: ${e}`),{}}}a(zR,"getCPUInfo");async function JR(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Sr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return go.error(`error in getMemoryInfo: ${e}`),{}}}a(JR,"getMemoryInfo");async function XR(){let e={core:[],clustering:[]};try{let t=await Sr.processes(),r;try{r=Number.parseInt(await I7.readFile(w7.join(sA.get($E.CONFIG_PARAMS.ROOTPATH),$E.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===$E.NODE_ERROR_CODES.ENOENT)go.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 go.error(`error in getHDBProcessInfo: ${t}`),e}}a(XR,"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 go.error(`error in getDiskInfo: ${t}`),e}}a(ZR,"getDiskInfo");async function eA(){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 go.error(`error in getNetworkInfo: ${t}`),e}}a(eA,"getNetworkInfo");async function tA(){if(VE!==void 0)return VE;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,VE=e,VE}catch(t){return go.error(`error in getSystemInformation: ${t}`),e}}a(tA,"getSystemInformation");async function rA(){let e=[],t=await L7.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await C7(n));return e}a(rA,"getTableSize");async function nA(){let e={};for(let t in QR){let r=e[t]={},n=r.tables={};for(let s in QR[t])try{let i=QR[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){go.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(nA,"getMetrics");async function Pv(){if(sA.get($E.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await Lv.getNATSReferences(),t=await Lv.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(Pv,"getNatsStreamInfo");async function P7(e){let t=new D7;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await tA(),t.time=jR(),t.cpu=await zR(),t.memory=await JR(),t.disk=await ZR(),t.network=await eA(),t.harperdb_processes=await XR(),t.table_size=await rA(),t.metrics=await nA(),t.threads=await Dv(),t.replication=await Pv(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await tA();break;case"time":t.time=jR();break;case"cpu":t.cpu=await zR();break;case"memory":t.memory=await JR();break;case"disk":t.disk=await ZR();break;case"network":t.network=await eA();break;case"harperdb_processes":t.harperdb_processes=await XR();break;case"table_size":t.table_size=await rA();break;case"database_metrics":case"metrics":t.metrics=await nA();break;case"threads":t.threads=await Dv();break;case"replication":t.replication=await Pv();break;default:break}return t}a(P7,"systemInformation")});var gi=R((UAe,Uv)=>{"use strict";Uv.exports={version:M7,printVersion:U7};var YE=ma();function M7(){if(YE)return YE.version}a(M7,"version");function U7(){YE&&console.log(`HarperDB Version ${YE.version}`)}a(U7,"printVersion")});var Ri=R((xAe,xv)=>{"use strict";var v7=Pr(),iA=Y(),B7=require("util"),Na=D(),vv=X();vv.initSync();var H7=qR(),Bv=ur(),{Node:BAe,NodeSubscription:HAe}=Gc(),x7=Nc(),G7=Rv(),{RemotePayloadObject:q7,RemotePayloadSubscription:F7}=c_(),{handleHDBError:k7,hdb_errors:V7}=ie(),{HTTP_STATUS_CODES:$7,HDB_ERROR_MSGS:Y7}=V7,K7=as(),W7=Ti(),Q7=gi(),{getDatabases:j7}=(Re(),ae($e)),z7=B7.promisify(H7.authorize),J7=Bv.searchByHash,X7=Bv.searchByValue;xv.exports={authHeaderToUser:Z7,isEmpty:eee,getNodeRecord:tee,upsertNodeRecord:ree,buildNodePayloads:nee,checkClusteringEnabled:see,getAllNodeRecords:iee,getSystemInfo:oee,reverseSubscription:Hv};async function Z7(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await z7(t,null),e}a(Z7,"authHeaderToUser");function eee(e){return e==null}a(eee,"isEmpty");async function tee(e){let t=new x7(Na.SYSTEM_SCHEMA_NAME,Na.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return J7(t)}a(tee,"getNodeRecord");async function ree(e){let t=new G7(Na.SYSTEM_SCHEMA_NAME,Na.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return v7.upsert(t)}a(ree,"upsertNodeRecord");function Hv(e){if(iA.isEmpty(e.subscribe)||iA.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(Hv,"reverseSubscription");function nee(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=iA.getTableHashAttribute(l,_),{subscribe:d,publish:E}=Hv(c),f=j7()[l]?.[_],h=new F7(l,_,u,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);s.push(h)}return new q7(r,t,s,n)}a(nee,"buildNodePayloads");function see(){if(!vv.get(Na.CONFIG_PARAMS.CLUSTERING_ENABLED))throw k7(new Error,Y7.CLUSTERING_NOT_ENABLED,$7.BAD_REQUEST,void 0,void 0,!0)}a(see,"checkClusteringEnabled");async function iee(){let e=new K7(Na.SYSTEM_SCHEMA_NAME,Na.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await X7(e))}a(iee,"getAllNodeRecords");async function oee(){let e=await W7.getSystemInformation();return{hdb_version:Q7.version(),node_version:e.node_version,platform:e.platform}}a(oee,"getSystemInfo")});var oA=R((qAe,Kv)=>{"use strict";var KE=gt(),Gv=Y(),qv=Ze(),Fv=D(),WE=k(),kv=PE(),aee=Hu(),{RemotePayloadObject:cee}=c_(),{handleHDBError:Vv,hdb_errors:lee}=ie(),{HTTP_STATUS_CODES:$v}=lee,{NodeSubscription:Yv}=Gc();Kv.exports=uee;async function uee(e,t){let r;try{r=await KE.request(`${t}.${qv.REQUEST_SUFFIX}`,new cee(Fv.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 Vv(new Error,c,$v.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===qv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw Vv(new Error,o,$v.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===Fv.SYSTEM_SCHEMA_NAME){await KE.createLocalTableStream(l,c);let h=new Yv(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=Gv.doesSchemaExist(l),u=n[l]!==void 0,d=c?Gv.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 kv.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 aee(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await kv.createTable(h)}await KE.createLocalTableStream(l,c);let f=new Yv(l,c,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:s}}a(uee,"reviewSubscriptions")});var __=R((kAe,jv)=>{"use strict";var{handleHDBError:QE,hdb_errors:_ee}=ie(),{HTTP_STATUS_CODES:jE}=_ee,{addUpdateNodeValidator:dee}=xE(),zE=k(),Qv=D(),Wv=Ze(),fee=Y(),l_=gt(),u_=Ri(),Eee=X(),hee=oA(),{Node:pee,NodeSubscription:mee}=Gc(),{broadcast:See}=rt(),Tee="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",gee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Ree=Eee.get(Qv.CONFIG_PARAMS.CLUSTERING_NODENAME);jv.exports=Aee;async function Aee(e,t=!1){zE.trace("addNode called with:",e),u_.checkClusteringEnabled();let r=dee(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 u_.getNodeRecord(n);if(!fee.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 hee(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Tee,o;let c=u_.buildNodePayloads(s,Ree,Qv.OPERATIONS_ENUM.ADD_NODE,await u_.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 mee(f.schema,f.table,f.publish,f.subscribe))}zE.trace("addNode sending remote payload:",c);let _;try{_=await l_.request(`${n}.${Wv.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 l_.updateRemoteConsumer(m,n)}let E=l_.requestErrorHandler(d,"add_node",n);throw QE(new Error,E,jE.INTERNAL_SERVER_ERROR,"error",E)}if(_.status===Wv.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 l_.updateRemoteConsumer(f,n),f.subscribe===!0&&await l_.updateConsumerIterator(f.schema,f.table,n,"start")}let u=new pee(n,l,_.system_info);return await u_.upsertNodeRecord(u),See({type:"nats_update"}),i.length>0?o.message=gee:o.message=`Successfully added '${n}' to manifest`,o}a(Aee,"addNode")});var lA=R((YAe,Xv)=>{"use strict";var{handleHDBError:aA,hdb_errors:Oee}=ie(),{HTTP_STATUS_CODES:cA}=Oee,{addUpdateNodeValidator:bee}=xE(),d_=k(),Jv=D(),zv=Ze(),$Ae=Y(),f_=gt(),E_=Ri(),Nee=X(),{cloneDeep:yee}=require("lodash"),Iee=oA(),{Node:wee,NodeSubscription:Cee}=Gc(),{broadcast:Lee}=rt(),Dee="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Pee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Mee=Nee.get(Jv.CONFIG_PARAMS.CLUSTERING_NODENAME);Xv.exports=Uee;async function Uee(e){d_.trace("updateNode called with:",e),E_.checkClusteringEnabled();let t=bee(e);if(t)throw aA(t,t.message,cA.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await E_.getNodeRecord(r);s.length>0&&(n=yee(s));let{added:i,skipped:o}=await Iee(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Dee,c;let l=E_.buildNodePayloads(i,Mee,Jv.OPERATIONS_ENUM.UPDATE_NODE,await E_.getSystemInfo());for(let u=0,d=i.length;u<d;u++){let E=i[u];d_.trace(`updateNode updating work stream for node: ${r} subscription:`,E),i[u].start_time===void 0&&delete i[u].start_time}d_.trace("updateNode sending remote payload:",l);let _;try{_=await f_.request(`${r}.${zv.REQUEST_SUFFIX}`,l)}catch(u){d_.error(`updateNode received error from request: ${u}`);let d=f_.requestErrorHandler(u,"update_node",r);throw aA(new Error,d,cA.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===zv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw aA(new Error,u,cA.INTERNAL_SERVER_ERROR,"error",u)}d_.trace(_);for(let u=0,d=i.length;u<d;u++){let E=i[u];await f_.updateRemoteConsumer(E,r),E.subscribe===!0?await f_.updateConsumerIterator(E.schema,E.table,r,"start"):await f_.updateConsumerIterator(E.schema,E.table,r,"stop")}return n||(n=[new wee(r,[],_.system_info)]),await vee(n[0],i,_.system_info),o.length>0?c.message=Pee:c.message=`Successfully updated '${r}'`,c}a(Uee,"updateNode");async function vee(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 Cee(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await E_.upsertNodeRecord(n),Lee({type:"nats_update"})}a(vee,"updateNodeTable")});var n0=R((WAe,r0)=>{"use strict";var t0=require("joi"),{string:Zv}=t0.types(),Bee=nt(),e0=D(),Hee=X(),xee=Ze();r0.exports=Gee;function Gee(e){let t=Zv.invalid(Hee.get(e0.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(xee.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=t0.object({operation:Zv.valid(e0.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Bee.validateBySchema(e,r)}a(Gee,"removeNodeValidator")});var XE=R((jAe,c0)=>{"use strict";var{handleHDBError:s0,hdb_errors:qee}=ie(),{HTTP_STATUS_CODES:i0}=qee,Fee=n0(),h_=k(),o0=Ri(),kee=Y(),JE=D(),a0=Ze(),uA=gt(),Vee=X(),{RemotePayloadObject:$ee}=c_(),{NodeSubscription:Yee}=Gc(),Kee=Bu(),Wee=ia(),{broadcast:Qee}=rt(),jee=Vee.get(JE.CONFIG_PARAMS.CLUSTERING_NODENAME);c0.exports=zee;async function zee(e){h_.trace("removeNode called with:",e),o0.checkClusteringEnabled();let t=Fee(e);if(t)throw s0(t,t.message,i0.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await o0.getNodeRecord(r);if(kee.isEmptyOrZeroLength(n))throw s0(new Error,`Node '${r}' was not found.`,i0.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new $ee(JE.OPERATIONS_ENUM.REMOVE_NODE,jee,[]),i,o=!1;for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];u.subscribe===!0&&await uA.updateConsumerIterator(u.schema,u.table,r,"stop");try{await uA.updateRemoteConsumer(new Yee(u.schema,u.table,!1,!1),r)}catch(d){h_.error(d)}}try{i=await uA.request(`${r}.${a0.REQUEST_SUFFIX}`,s),h_.trace("Remove node reply from remote node:",r,i)}catch(l){h_.error("removeNode received error from request:",l),o=!0}let c=new Kee(JE.SYSTEM_SCHEMA_NAME,JE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Wee.deleteRecord(c),Qee({type:"nats_update"}),i?.status===a0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(h_.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(zee,"removeNode")});var _0=R((JAe,u0)=>{"use strict";var l0=require("joi"),{string:Jee,array:Xee}=l0.types(),Zee=nt(),ete=xE();u0.exports=tte;function tte(e){let t=l0.object({operation:Jee.valid("configure_cluster").required(),connections:Xee.items(ete.validation_schema).required()});return Zee.validateBySchema(e,t)}a(tte,"configureClusterValidator")});var eh=R((ZAe,p0)=>{"use strict";var rte=D(),ZE=k(),nte=Y(),ste=XE(),ite=__(),d0=Ri(),ote=_0(),{handleHDBError:f0,hdb_errors:ate}=ie(),{HTTP_STATUS_CODES:E0}=ate,cte="Configure cluster complete.",lte="Failed to configure the cluster. Check the logs for more details.",ute="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";p0.exports=_te;async function _te(e){ZE.trace("configure cluster called with:",e),d0.checkClusteringEnabled();let t=ote(e);if(t)throw f0(t,t.message,E0.BAD_REQUEST,void 0,void 0,!0);let r=await d0.getAllNodeRecords(),n=[];for(let u=0,d=r.length;u<d;u++){let E=await h0(ste,{operation:rte.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 h0(ite,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(nte.isEmptyOrZeroLength(o))return{message:cte,connections:c};if(l)return{message:ute,failed_nodes:o,connections:c};throw f0(new Error,lte,E0.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(_te,"configureCluster");async function h0(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(h0,"functionWrapper")});var g0=R((tOe,T0)=>{"use strict";var p_=require("joi"),dte=nt(),{validateSchemaExists:m0,validateTableExists:fte,validateSchemaName:S0}=Ps(),Ete=p_.object({operation:p_.string().valid("purge_stream"),schema:p_.string().custom(m0).custom(S0).optional(),database:p_.string().custom(m0).custom(S0).optional(),table:p_.string().custom(fte).required()});function hte(e){return dte.validateBySchema(e,Ete)}a(hte,"purgeStreamValidator");T0.exports=hte});var _A=R((nOe,R0)=>{"use strict";var{handleHDBError:pte,hdb_errors:mte}=ie(),{HTTP_STATUS_CODES:Ste}=mte,Tte=g0(),gte=gt(),Rte=Ri();R0.exports=Ate;async function Ate(e){e.schema=e.schema??e.database;let t=Tte(e);if(t)throw pte(t,t.message,Ste.BAD_REQUEST,void 0,void 0,!0);Rte.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await gte.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(Ate,"purgeStream")});var rh=R((iOe,I0)=>{"use strict";var fA=Ri(),Ote=gt(),b0=X(),th=D(),ya=Ze(),bte=Y(),dA=k(),{RemotePayloadObject:Nte}=c_(),{ErrorCode:A0}=require("nats"),O0=b0.get(th.CONFIG_PARAMS.CLUSTERING_ENABLED),N0=b0.get(th.CONFIG_PARAMS.CLUSTERING_NODENAME);I0.exports={clusterStatus:yte,buildNodeStatus:y0};async function yte(){let e={node_name:N0,is_enabled:O0,connections:[]};if(!O0)return e;let t=await fA.getAllNodeRecords();if(bte.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(y0(t[n],e.connections));return await Promise.allSettled(r),e}a(yte,"clusterStatus");async function y0(e,t){let r=e.name,n=new Nte(th.OPERATIONS_ENUM.CLUSTER_STATUS,N0,void 0,await fA.getSystemInfo()),s,i,o=ya.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Ote.request(ya.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===ya.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ya.CLUSTER_STATUS_STATUSES.CLOSED,dA.error(`Error getting node status from ${r} `,s))}catch(l){dA.warn(`Error getting node status from ${r}`,l),l.code===A0.NoResponders?o=ya.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===A0.Timeout?o=ya.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ya.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Ite(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 fA.upsertNodeRecord(l)}catch(l){dA.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(y0,"buildNodeStatus");function Ite(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(Ite,"NodeStatusObject")});var sh=R((aOe,w0)=>{"use strict";var{handleHDBError:wte,hdb_errors:Cte}=ie(),{HTTP_STATUS_CODES:Lte}=Cte,Dte=gt(),Pte=Ri(),EA=Y(),nh=require("joi"),Mte=nt(),Ute=2e3,vte=nh.object({timeout:nh.number().min(1),connected_nodes:nh.boolean(),routes:nh.boolean()});w0.exports=Bte;async function Bte(e){Pte.checkClusteringEnabled();let t=Mte.validateBySchema(e,vte);if(t)throw wte(t,t.message,Lte.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||EA.autoCastBoolean(n),o=s===void 0||EA.autoCastBoolean(s),c={nodes:[]},l=await Dte.getServerList(r??Ute),_={};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:EA.autoCast(m.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Bte,"clusterNetwork")});var P0=R((lOe,D0)=>{"use strict";var hA=require("joi"),C0=nt(),{route_constraints:L0}=UT();D0.exports={setRoutesValidator:Hte,deleteRoutesValidator:xte};function Hte(e){let t=hA.object({server:hA.valid("hub","leaf").required(),routes:L0.required()});return C0.validateBySchema(e,t)}a(Hte,"setRoutesValidator");function xte(e){let t=hA.object({routes:L0.required()});return C0.validateBySchema(e,t)}a(xte,"deleteRoutesValidator")});var oh=R((_Oe,B0)=>{"use strict";var Ia=Et(),pA=Y(),ih=D(),M0=P0(),{handleHDBError:U0,hdb_errors:Gte}=ie(),{HTTP_STATUS_CODES:v0}=Gte,qte="cluster routes successfully set",Fte="cluster routes successfully deleted";B0.exports={setRoutes:kte,getRoutes:Vte,deleteRoutes:$te};function kte(e){let t=M0.setRoutesValidator(e);if(t)throw U0(t,t.message,v0.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=pA.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:qte,set:o,skipped:i}}a(kte,"setRoutes");function Vte(){let e=Ia.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Vte,"getRoutes");function $te(e){let t=M0.deleteRoutesValidator(e);if(t)throw U0(t,t.message,v0.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=pA.isEmptyOrZeroLength(n)?null:n,Ia.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=pA.isEmptyOrZeroLength(s)?null:s,Ia.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:Fte,deleted:i,skipped:o}}a($te,"deleteRoutes")});var x0=R((fOe,H0)=>{"use strict";var m_=require("alasql"),wa=require("recursive-iterator"),ds=k(),Yte=Y(),S_=D(),mA=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,Wte(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=>S_.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!S_.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][S_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Kte(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(_=>!S_.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new m_.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 Kte(e){return e.filter(t=>t[S_.PERMS_CRUD_ENUM.READ])}a(Kte,"filterReadRestrictedAttrs");function Wte(e,t,r,n,s){Qte(e,t,r,n,s)}a(Wte,"interpretAST");function T_(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(T_,"addSchemaTableToMap");function Qte(e,t,r,n,s){if(!e){ds.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof m_.yy.Insert?Xte(e,t,r):e instanceof m_.yy.Select?jte(e,t,r,n,s):e instanceof m_.yy.Update?zte(e,t,r):e instanceof m_.yy.Delete?Jte(e,t,r):ds.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Qte,"getRecordAttributesAST");function jte(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(Yte.isEmptyOrZeroLength(i)){ds.error("No schema specified");return}e.from.forEach(c=>{T_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),T_(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(jte,"getSelectAttributes");function zte(e,t,r){if(!e){ds.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new wa(e.columns),s=e.table.databaseid;T_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&SA(e.table.tableid,s,i.columnid,t,r)}a(zte,"getUpdateAttributes");function Jte(e,t,r){if(!e){ds.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new wa(e.where),s=e.table.databaseid;T_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&SA(e.table.tableid,s,i.columnid,t,r)}a(Jte,"getDeleteAttributes");function Xte(e,t,r){if(!e){ds.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new wa(e.columns),s=e.into.databaseid;T_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&SA(e.into.tableid,s,i.columnid,t,r)}a(Xte,"getInsertAttributes");function SA(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(SA,"pushAttribute");H0.exports=mA});var ch=R((hOe,k0)=>{var ah=la(),G0=require("chalk"),hn=k(),q0=require("prompt"),{promisify:Zte}=require("util"),TA=D(),ere=require("fs-extra"),tre=require("path"),rre=Y(),nre=gi(),F0=X();F0.initSync();var sre=require("moment"),ire=Zte(q0.get),ore=tre.join(F0.getHdbBasePath(),TA.LICENSE_KEY_DIR_NAME,TA.LICENSE_FILE_NAME,TA.LICENSE_FILE_NAME);k0.exports={getFingerprint:cre,setLicense:are,parseLicense:gA,register:lre,getRegistrationInfo:_re};async function are(e){if(e&&e.key&&e.company){try{hn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await gA(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(are,"setLicense");async function cre(){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(cre,"getFingerprint");async function gA(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 ere.writeFile(ore,JSON.stringify({license_key:e,company:t}))}catch(n){throw hn.error("Failed to write License"),n}return"Registration successful."}a(gA,"parseLicense");async function lre(){let e=await ure();return gA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(lre,"register");async function ure(){let e=await ah.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:G0.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:G0.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{q0.start()}catch(n){hn.error(n)}let r;try{r=await ire(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(ure,"promptForRegistration");async function _re(){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(rre.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=nre.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=sre.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(_re,"getRegistrationInfo")});var $0=R((mOe,V0)=>{"use strict";var dre=Ze(),RA=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+dre.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"}};V0.exports=RA});var W0=R((TOe,K0)=>{"use strict";var Y0=Ze(),AA=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+Y0.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+Y0.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"}};K0.exports=AA});var j0=R((ROe,Q0)=>{"use strict";var OA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};Q0.exports=OA});var J0=R((OOe,z0)=>{"use strict";var fre=Ze(),bA=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+fre.SERVER_SUFFIX.ADMIN,this.password=r}};z0.exports=bA});var fh=R((NOe,eB)=>{"use strict";var qc=require("path"),_h=require("fs-extra"),Ere=$0(),hre=W0(),pre=j0(),mre=J0(),NA=Ur(),kc=Y(),Vr=Et(),uh=D(),g_=Ze(),{CONFIG_PARAMS:At}=uh,Vc=k(),R_=X(),X0=fi(),yA=gt(),Fc="clustering",Sre=1e4,Z0=50;eB.exports={generateNatsConfig:gre,removeNatsConfig:Rre,getHubConfigPath:Tre};function Tre(){let e=R_.get(At.ROOTPATH);return qc.join(e,Fc,g_.NATS_CONFIG_FILES.HUB_SERVER)}a(Tre,"getHubConfigPath");async function gre(e=!1,t=void 0){R_.initSync();let r=R_.get(At.ROOTPATH),n=qc.join(r,Fc,g_.PID_FILES.HUB),s=qc.join(r,Fc,g_.PID_FILES.LEAF),i=Vr.getConfigFromFile(At.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=qc.join(r,Fc,g_.NATS_CONFIG_FILES.HUB_SERVER),c=qc.join(r,Fc,g_.NATS_CONFIG_FILES.LEAF_SERVER),l=Vr.getConfigFromFile(At.CLUSTERING_TLS_CERTIFICATE),_=Vr.getConfigFromFile(At.CLUSTERING_TLS_PRIVATEKEY),u=Vr.getConfigFromFile(At.CLUSTERING_TLS_CERT_AUTH),d=Vr.getConfigFromFile(At.CLUSTERING_TLS_INSECURE),E=Vr.getConfigFromFile(At.CLUSTERING_TLS_VERIFY),f=Vr.getConfigFromFile(At.CLUSTERING_NODENAME),h=Vr.getConfigFromFile(At.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await yA.checkNATSServerInstalled()||dh("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await NA.listUsers(),S=Vr.getConfigFromFile(At.CLUSTERING_USER),T=await NA.getClusterUser();(kc.isEmpty(T)||T.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 g=[],N=[];for(let[z,Z]of m.entries())Z.role?.role===uh.ROLE_TYPES_ENUM.CLUSTER_USER&&Z.active&&(g.push(new mre(Z.username,X0.decrypt(Z.hash))),N.push(new pre(Z.username,X0.decrypt(Z.hash))));let A=[],{hub_routes:P}=Vr.getClusteringRoutes();if(!kc.isEmptyOrZeroLength(P))for(let z of P)A.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${z.host}:${z.port}`);let v=new Ere(Vr.getConfigFromFile(At.CLUSTERING_HUBSERVER_NETWORK_PORT),f,n,l,_,u,d,E,h,Vr.getConfigFromFile(At.CLUSTERING_HUBSERVER_CLUSTER_NAME),Vr.getConfigFromFile(At.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),A,g,N);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),Vc.trace(`Hub server config written to ${o}`));let q=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,U=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,W=new hre(Vr.getConfigFromFile(At.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,s,i,[q],[U],g,N,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),Vc.trace(`Leaf server config written to ${c}`))}a(gre,"generateNatsConfig");async function lh(e){let t=R_.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}`;Vc.error(t),console.error(t),process.exit(1)}a(dh,"generateNatsConfigError");async function Rre(e){let{port:t,config_file:r}=yA.getServerConfig(e),{username:n,decrypt_hash:s}=await NA.getClusterUser(),i=0,o=2e3;for(;i<Z0;){try{let u=await yA.createConnection(t,n,s,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Vc.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&&Vc.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(Sre),l=qc.join(R_.get(At.ROOTPATH),Fc,r);await _h.writeFile(l,c),await _h.remove(l),Vc.notify(e,"started.")}a(Rre,"removeNatsConfig")});var oB=R((IOe,iB)=>{"use strict";var pn=X(),Are=la(),Te=D(),A_=Ze(),Ai=require("path"),{PACKAGE_ROOT:hh}=D(),tB=X(),Eh=Y(),$c="/dev/null",Ore=Ai.join(hh,"launchServiceScripts"),rB=Ai.join(hh,"utility/scripts"),bre=Ai.join(rB,Te.HDB_RESTART_SCRIPT),nB=Ai.resolve(hh,"dependencies",`${process.platform}-${process.arch}`,A_.NATS_BINARY_NAME);function sB(){let t=Are.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(sB,"generateMainServerConfig");var Nre=9930;function yre(){pn.initSync(!0);let e=pn.get(Te.CONFIG_PARAMS.ROOTPATH),t=Ai.join(e,"clustering",A_.NATS_CONFIG_FILES.HUB_SERVER),r=Ai.join(pn.get(Te.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Te.LOG_NAMES.HDB),n=tB.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=A_.LOG_LEVEL_FLAGS[pn.get(Te.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Nre?"-"+n:""),script:nB,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=$c,i.error_file=$c),i}a(yre,"generateNatsHubServerConfig");var Ire=9940;function wre(){pn.initSync(!0);let e=pn.get(Te.CONFIG_PARAMS.ROOTPATH),t=Ai.join(e,"clustering",A_.NATS_CONFIG_FILES.LEAF_SERVER),r=Ai.join(pn.get(Te.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Te.LOG_NAMES.HDB),n=tB.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=A_.LOG_LEVEL_FLAGS[pn.get(Te.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Ire?"-"+n:""),script:nB,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=$c,i.error_file=$c),i}a(wre,"generateNatsLeafServerConfig");function Cre(){pn.initSync();let e=Ai.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:Ore,autorestart:!1};return pn.get(Te.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=$c,t.error_file=$c),t}a(Cre,"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:rB},script:bre}}a(Lre,"generateRestart");function Dre(){return{apps:[sB()]}}a(Dre,"generateAllServiceConfigs");iB.exports={generateAllServiceConfigs:Dre,generateMainServerConfig:sB,generateRestart:Lre,generateNatsHubServerConfig:yre,generateNatsLeafServerConfig:wre,generateClusteringUpgradeV4ServiceConfig:Cre}});var Yc=R((LOe,gB)=>{"use strict";var He=D(),Pre=Y(),bi=fh(),ph=gt(),Oi=Ze(),Ro=oB(),mh=X(),Ao=k(),Mre=Ri(),{startWorker:aB,onMessageFromWorkers:Ure}=rt(),vre=Ti(),COe=require("util"),Bre=require("child_process"),Hre=require("fs"),{execFile:xre}=Bre,Le;gB.exports={enterPM2Mode:Gre,start:Oo,stop:IA,reload:lB,restart:uB,list:wA,describe:fB,connect:Ni,kill:$re,startAllServices:Yre,startService:CA,getUniqueServicesList:EB,restartAllServices:Kre,isServiceRegistered:hB,reloadStopStart:pB,restartHdb:dB,deleteProcess:kre,startClusteringProcesses:SB,startClusteringThreads:TB,isHdbRestartRunning:Vre,isClusteringRunning:Qre,stopClustering:Wre,reloadClustering:jre,expectedRestartOfChildren:_B};var O_=!1;Ure(e=>{e.type==="restart"&&mh.initSync(!0)});function Gre(){O_=!0}a(Gre,"enterPM2Mode");function Ni(){return Le||(Le=require("pm2")),new Promise((e,t)=>{Le.connect((r,n)=>{Ao.setupConsoleLogging(),r&&t(r),e(n)})})}a(Ni,"connect");var Tr,qre=10,cB;function Oo(e,t=!1){if(O_)return Fre(e);let r=xre(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),!cB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<qre&&(Hre.existsSync(bi.getHubConfigPath())?Oo(e):(await bi.generateNatsConfig(!0),Oo(e),await new Promise(c=>setTimeout(c,3e3)),await bi.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await bi.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&&Oi.LOG_LEVEL_HIERARCHY[o]>=Oi.LOG_LEVEL_HIERARCHY[u||"info"]){let f=u===Oi.LOG_LEVELS.ERR||u===Oi.LOG_LEVELS.WRN?Ao.OUTPUTS.STDERR:Ao.OUTPUTS.STDOUT;Ao.logCustomLevel(u||"info",f,n,i.slice(_,l.index).trim())}let[d,E]=l;_=l.index+d.length,u=Oi.LOG_LEVELS[E]}if(Oi.LOG_LEVEL_HIERARCHY[o]>=Oi.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===Oi.LOG_LEVELS.ERR||u===Oi.LOG_LEVELS.WRN?Ao.OUTPUTS.STDERR:Ao.OUTPUTS.STDOUT;Ao.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(()=>{cB=!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(Oo,"start");function Fre(e){return new Promise(async(t,r)=>{try{await Ni()}catch(n){r(n)}Le.start(e,(n,s)=>{n&&(Le.disconnect(),r(n)),Le.disconnect(),t(s)})})}a(Fre,"startWithPM2");function IA(e){if(!O_){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 Ni()}catch(n){r(n)}Le.stop(e,async(n,s)=>{n&&(Le.disconnect(),r(n)),Le.delete(e,(i,o)=>{i&&(Le.disconnect(),r(n)),Le.disconnect(),t(o)})})})}a(IA,"stop");function lB(e){return new Promise(async(t,r)=>{try{await Ni()}catch(n){r(n)}Le.reload(e,(n,s)=>{n&&(Le.disconnect(),r(n)),Le.disconnect(),t(s)})})}a(lB,"reload");function uB(e){if(!O_){_B();for(let t of Tr||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await Ni()}catch(n){r(n)}Le.restart(e,(n,s)=>{Le.disconnect(),t(s)})})}a(uB,"restart");function _B(){for(let e of Tr||[])e.config&&(e.config.restarts=0)}a(_B,"expectedRestartOfChildren");function kre(e){return new Promise(async(t,r)=>{try{await Ni()}catch(n){r(n)}Le.delete(e,(n,s)=>{n&&(Le.disconnect(),r(n)),Le.disconnect(),t(s)})})}a(kre,"deleteProcess");async function dB(){await Oo(Ro.generateRestart())}a(dB,"restartHdb");async function Vre(){let e=await wA();for(let t in e)if(e[t].name===He.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Vre,"isHdbRestartRunning");function wA(){return new Promise(async(e,t)=>{try{await Ni()}catch(r){t(r)}Le.list((r,n)=>{r&&(Le.disconnect(),t(r)),Le.disconnect(),e(n)})})}a(wA,"list");function fB(e){return new Promise(async(t,r)=>{try{await Ni()}catch(n){r(n)}Le.describe(e,(n,s)=>{n&&(Le.disconnect(),r(n)),Le.disconnect(),t(s)})})}a(fB,"describe");function $re(){if(!O_){for(let e of Tr||[])e.kill();Tr=[];return}return new Promise(async(e,t)=>{try{await Ni()}catch(r){t(r)}Le.killDaemon((r,n)=>{r&&(Le.disconnect(),t(r)),Le.disconnect(),e(n)})})}a($re,"kill");async function Yre(){try{await SB(),await TB(),await Oo(Ro.generateAllServiceConfigs())}catch(e){throw Le?.disconnect(),e}}a(Yre,"startAllServices");async function CA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case He.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Ro.generateMainServerConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Ro.generateNatsIngestServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Ro.generateNatsReplyServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Ro.generateNatsHubServerConfig(),await Oo(r,t),await bi.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Ro.generateNatsLeafServerConfig(),await Oo(r,t),await bi.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Ro.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Oo(r)}catch(r){throw Le?.disconnect(),r}}a(CA,"startService");async function EB(){try{let e=await wA(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Le?.disconnect(),e}}a(EB,"getUniqueServicesList");async function Kre(e=[]){try{let t=!1,r=await EB();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===He.PROCESS_DESCRIPTORS.HDB?t=!0:await uB(o))}t&&await pB(He.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Le?.disconnect(),t}}a(Kre,"restartAllServices");async function hB(e){if(Tr?.find(r=>r.name===e))return!0;let t=await vre.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(hB,"isServiceRegistered");async function pB(e){let t=mh.get(He.CONFIG_PARAMS.THREADS_COUNT)??mh.get(He.CONFIG_PARAMS.THREADS),r=await fB(e),n=Pre.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await IA(e),await CA(e)):e===He.PROCESS_DESCRIPTORS.HDB?await dB():await lB(e)}a(pB,"reloadStopStart");var mB;async function SB(e=!1){for(let t in He.CLUSTERING_PROCESSES){let r=He.CLUSTERING_PROCESSES[t];await CA(r,e)}}a(SB,"startClusteringProcesses");async function TB(){mB=aB(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 Mre.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===He.PRE_4_0_0_VERSION){Ao.info("Starting clustering upgrade 4.0.0 process"),aB(He.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(TB,"startClusteringThreads");async function Wre(){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 mB.terminate();else{let t=He.CLUSTERING_PROCESSES[e];await IA(t)}}a(Wre,"stopClustering");async function Qre(){for(let e in He.CLUSTERING_PROCESSES){let t=He.CLUSTERING_PROCESSES[e];if(await hB(t)===!1)return!1}return!0}a(Qre,"isClusteringRunning");async function jre(){await bi.generateNatsConfig(!0),await ph.reloadNATSHub(),await ph.reloadNATSLeaf(),await bi.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await bi.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(jre,"reloadClustering")});var Rh={};Ve(Rh,{compactOnStart:()=>zre,copyDb:()=>bB});async function zre(){Kc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,Th.get)(yi.CONFIG_PARAMS.ROOTPATH),t=new Map,r=Br();try{for(let n in r){if(n==="system")continue;let s;for(let c in r[n]){s=r[n][c].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}if(n.includes("-copy"))continue;let i=(0,Sh.join)(e,"backup",n+".mdb"),o=(0,Sh.join)(e,yi.DATABASES_DIR_NAME,n+"-copy.mdb");t.set(n,{db_path:s,copy_dest:o,backup_dest:i}),await bB(n,o),console.log("Backing up",n,"to",i),await(0,Ca.move)(s,i,{overwrite:!0})}try{b_()}catch(n){Kc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}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,yi.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));try{b_()}catch(n){Kc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Kc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,LA.updateConfigValue)(yi.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 b_(),n}for(let[n,{backup_dest:s}]of t)(0,Th.get)(yi.CONFIG_PARAMS.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||!0===!1||(console.log("Removing backup",s),await(0,Ca.remove)(s));(0,LA.updateConfigValue)(yi.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1)}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,RB.open)(new AB.default(t)),c=o.openDB(gh.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,T;if(m&&(S=h.compression,T=bh(),T?h.compression=T:delete h.compression,S?.dictionary?.toString()===T?.dictionary?.toString()&&(S=null,T=null)),c.put(f,h),!(m||h.indexed))continue;let g=(0,Th.get)(yi.CONFIG_PARAMS.STORAGE_SKIPCOMPACTTABLES);if(g&&console.log("Checking skip table list",g,f.slice(0,-1)),g?.includes(f.slice(0,-1)))continue;let N=new OB.default(!m,m);N.encoding="binary",N.compression=S;let A=n.openDB(f,N);A.decoder=null,A.decoderCopies=!1,A.encoding="binary",N.compression=T;let P=o.openDB(f,N);P.encoder=null,console.log("copying",f,"from",e,"to",t),await E(A,P,m,u)}let d=n.openDB(gh.AUDIT_STORE_NAME,Oh);console.log("copying audit log"),E(i,d,!1,u);async function E(f,h,m,S){let T=0,g=0,N=1e7,A=null;for(let P of h.getKeys({reverse:!0,limit:2}))if(A===null&&(typeof P=="string"||typeof P=="number"))A=P,console.log(`Existing data found in target table ${h.name}, last key`,P);else if(A&&typeof P=="string"){let v=0;for(;v<P.length&&P[v]===A[v];v++);A=P.slice(0,v-1)+"~",console.log(`Will resume target table ${h.name} at:`,A),await h.put(A,Buffer.from([0]))}for(;N-- >0;)try{for(let P of f.getKeys({start:A,transaction:S,exclusiveStart:!0}))try{A=P;let{value:v,version:q}=f.getEntry(P,{transaction:S});l=h.put(P,v,m?q:void 0),T++,S.openTimer&&(S.openTimer=0),g+=(P?.length||10)+v.length,++_>(T<1e3?T>>2:5e3)&&(await l,console.log("copied",T,"entries",g,"bytes"),_=0)}catch(v){console.error("Error copying record",typeof P=="symbol"?"symbol":P,"from",e,"to",t,v)}console.log("finish copying, copied",T,"entries",g,"bytes");return}catch{if(typeof A=="string"){if(A==="z")return console.error("Reached end of dbi",A,"for",e,"to",t);A=A.slice(0,-2)+"z"}else if(typeof A=="number")A++;else return console.error("Unknown key type",A,"for",e,"to",t)}}a(E,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{u.done(),o.close()}}var RB,Sh,Ca,Th,AB,OB,gh,yi,LA,Kc,Ah=be(()=>{Re();RB=require("lmdb"),Sh=require("path"),Ca=require("fs-extra"),Th=x(X()),AB=x(hu()),OB=x(Eu()),gh=x(_t()),yi=x(D());no();LA=x(Et()),Kc=x(k());a(zre,"compactOnStart");a(bB,"copyDb")});var bo=R((xOe,LB)=>{"use strict";var Jre=require("minimist"),{isMainThread:MA,parentPort:DA,threadId:BOe}=require("worker_threads"),ot=D(),{PROCESS_DESCRIPTORS_VALIDATE:N_}=ot,Fs=k(),UA=Y(),yh=fh(),Nh=gt(),HOe=Ze(),IB=Et(),Es=Yc(),NB=Ti(),{compactOnStart:Xre}=(Ah(),ae(Rh)),Zre=to(),{restartWorkers:Ih,onMessageByType:ene}=rt(),{handleHDBError:tne,hdb_errors:rne}=ie(),{HTTP_STATUS_CODES:nne}=rne,I_=X();I_.initSync();var y_=`Restarting HarperDB. This may take up to ${ot.RESTART_TIMEOUT_MS/1e3} seconds.`,sne="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",ine="Invalid service",Wc,Gn;LB.exports={restart:wB,restartService:vA};MA&&ene(ot.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await vA({service:e.workerType}):wB({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function wB(e){Gn=Object.keys(e).length===0,Wc=await Es.isServiceRegistered(ot.HDB_PROC_DESCRIPTOR);let t=Jre(process.argv);if(t.service){await vA(t);return}if(Gn&&!Wc){console.error(sne);return}if(Gn&&console.log(y_),Wc){Es.enterPM2Mode(),Fs.notify(y_);let r=Zre(Object.keys(ot.CONFIG_PARAM_MAP),!0);return UA.isEmptyOrZeroLength(Object.keys(r))||IB.updateConfigValue(void 0,void 0,r,!0,!0),one(),y_}return MA?(Fs.notify(y_),I_.get(ot.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Xre(),setTimeout(()=>{Ih()},50)):DA.postMessage({type:ot.ITC_EVENT_TYPES.RESTART}),y_}a(wB,"restart");async function vA(e){let{service:t}=e;if(ot.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw tne(new Error,ine,nne.BAD_REQUEST,void 0,void 0,!0);if(Es.expectedRestartOfChildren(),Wc=await Es.isServiceRegistered(ot.HDB_PROC_DESCRIPTOR),!MA)return DA.postMessage({type:ot.ITC_EVENT_TYPES.RESTART,workerType:t}),new Promise(n=>{DA.on("message",s=>{s.type==="restart-complete"&&n()})});let r;switch(t){case N_.clustering:if(!I_.get(ot.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=yB;break}Gn&&console.log("Restarting clustering"),Fs.notify("Restarting clustering"),await CB();break;case N_.clustering_config:case N_["clustering config"]:if(!I_.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 N_.harperdb:case N_.http_workers:if(Gn&&!Wc){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 Ih("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(vA,"restartService");async function one(){await CB(),await Es.restart(ot.HDB_PROC_DESCRIPTOR),await UA.async_set_timeout(2e3),I_.get(ot.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await PA(),Gn&&(await Nh.closeConnection(),process.exit(0))}a(one,"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 yh.generateNatsConfig(!0),await Es.startClusteringProcesses(),await Es.startClusteringThreads(),await PA(),Gn&&await Nh.closeConnection();else{await yh.generateNatsConfig(!0),Wc?(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 UA.async_set_timeout(3e3),await PA(),await Nh.updateLocalStreams(),Gn&&await Nh.closeConnection(),Fs.trace("Restart clustering restarting ingest and reply service threads");let t=Ih(ot.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Ih(ot.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(CB,"restartClustering");async function PA(){await yh.removeNatsConfig(ot.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await yh.removeNatsConfig(ot.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(PA,"removeNatsConfig")});var FB=R((FOe,qB)=>{"use strict";var qOe=require("lodash"),$r=D(),{handleHDBError:DB,hdb_errors:ane}=ie(),{HDB_ERROR_MSGS:cne,HTTP_STATUS_CODES:lne}=ane,BA=k();qB.exports={getRolePermissions:_ne};var La=Object.create(null),une=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)=>({[$r.PERMS_CRUD_ENUM.READ]:e,[$r.PERMS_CRUD_ENUM.INSERT]:t,[$r.PERMS_CRUD_ENUM.UPDATE]:r,[$r.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),HA=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),[w_]:t[w_],[xA]:t[xA],[GA]:t[GA]}),"attr_perms_template"),MB=a((e,t=!1)=>({attribute_name:e,describe:t,[w_]:t}),"timestamp_attr_perms_template"),{READ:w_,INSERT:xA,UPDATE:GA}=$r.PERMS_CRUD_ENUM,HB=Object.values($r.PERMS_CRUD_ENUM),xB=[w_,xA,GA];function _ne(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[$r.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(La[t]&&La[t].key===n)return La[t].perms;let s=dne(e,r);return La[t]?La[t].key=n:La[t]=une(n),La[t].perms=s,s}catch(r){if(!e[$r.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[$r.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<$r.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 BA.error(n),BA.debug(r),DB(new Error,cne.OUTDATED_PERMS_TRANSLATION_ERROR,lne.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
14
+ ${r.stack}`;throw BA.error(n),DB(new Error)}}}a(_ne,"getRolePermissions");function dne(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[$r.SYSTEM_SCHEMA_NAME]=n[$r.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]=fne(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],_=Ene(c,l);r[i].describe||HB.forEach(u=>{_[u]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=HA()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=HA()})}),r}a(dne,"translateRolePermissions");function fne(e){let t=vB(!0);return Object.keys(e).forEach(r=>{t.tables[r]=HA(!0,!0,!0,!0,!0)}),t}a(fne,"createStructureUserPermissions");function Ene(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,u)=>{let{attribute_name:d}=u,E=u;return $r.TIME_STAMP_NAMES.includes(d)&&(E=MB(d,u[w_])),_[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||hne(u,l)}else if(_!==o){let u;$r.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(Ene,"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 hne(e,t){xB.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(hne,"checkForHashPerms")});var kB={};Ve(kB,{Resources:()=>wh,keyArrayToString:()=>Qc,resetResources:()=>pne,resources:()=>No});function pne(){return No=new wh}function Qc(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var wh,No,C_=be(()=>{ha();wh=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(pne,"resetResources");a(Qc,"keyArrayToString")});var VB={};Ve(VB,{Headers:()=>yo,appendHeader:()=>Ch});function Ch(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,L_=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(Ch,"appendHeader")});var D_={};Ve(D_,{authentication:()=>JB,bypassAuth:()=>One,login:()=>Nne,logout:()=>yne,start:()=>bne});function One(){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?gne?Tne:[]:Sne?mne:[];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 Lh&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Lh&&o.push("Access-Control-Allow-Credentials","true")}}let l,_;if(Lh){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 jc.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,jc.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=Da.get(n),!d){let f=n.indexOf(" "),h=n.slice(0,f),m=n.slice(f+1),S,T;try{switch(h){case"Basic":let g=atob(m),N=g.indexOf(":");S=g.slice(0,N),T=g.slice(N+1),d=S||T?await dt.getUser(S,T,e):null;break;case"Bearer":try{d=await(0,Dh.validateOperationToken)(m)}catch(A){if(A.message==="invalid token")try{return await(0,Dh.validateRefreshToken)(m),c({status:-1})}catch{throw A}}break}}catch(g){return Ane&&(Da.get(m)||(Da.set(m,m),u(S,jt.AUTH_AUDIT_STATUS.FAILURE,h))),c({status:401,body:Pa({error:g.message},e)})}Da.set(n,d),Rne&&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)());Lh&&(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 bne({server:e,port:t}){e.http(JB,{port:t||"all"}),KB||(KB=!0,setInterval(()=>{Da=new Map},qn.get(jt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),jB.user.addListener(()=>{Da=new Map}))}async function Nne(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 yne(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,jc,jB,$B,mne,Sne,Tne,gne,YB,Lh,zB,Rne,Ane,Da,KB,Ph=be(()=>{WB=x(Ur());Cr();C_();Dh=x(a_());Re();QB=require("uuid"),qn=x(X()),jt=x(D()),jc=x(k()),jB=x(Iu());L_();zc();$B=(0,jc.loggerWithTag)("auth-event");qn.initSync();mne=qn.get(jt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),Sne=qn.get(jt.CONFIG_PARAMS.HTTP_CORS),Tne=qn.get(jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),gne=qn.get(jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),YB=St({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Lh=qn.get(jt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,zB=qn.get(jt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Rne=qn.get(jt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Ane=qn.get(jt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Da=new Map;dt.onInvalidatedUser(()=>{Da=new Map});a(One,"bypassAuth");a(JB,"authentication");a(bne,"start");a(Nne,"login");a(yne,"logout")});var sH=R((XOe,nH)=>{"use strict";var De=require("joi"),XB=require("fs-extra"),ZB=require("path"),wi=nt(),eH=X(),tH=D(),rH=k(),{hdb_errors:Ine}=ie(),{HDB_ERROR_MSGS:gr}=Ine,Ii=/^[a-zA-Z0-9-_]+$/;nH.exports={getDropCustomFunctionValidator:Cne,setCustomFunctionValidator:Lne,addComponentValidator:Une,dropCustomFunctionProjectValidator:vne,packageComponentValidator:Bne,deployComponentValidator:Hne,setComponentFileValidator:Dne,getComponentFileValidator:Mne,dropComponentFileValidator:Pne};function Mh(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(Mh,"checkProjectExists");function P_(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(P_,"checkFilePath");function wne(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(wne,"checkFileExists");function Cne(e){let t=De.object({project:De.string().pattern(Ii).custom(Mh.bind(null,!0)).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME}),type:De.string().valid("helpers","routes").required(),file:De.string().pattern(Ii).custom(wne.bind(null,e.project,e.type)).custom(P_).required().messages({"string.pattern.base":gr.BAD_FILE_NAME})});return wi.validateBySchema(e,t)}a(Cne,"getDropCustomFunctionValidator");function Lne(e){let t=De.object({project:De.string().pattern(Ii).custom(Mh.bind(null,!0)).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME}),type:De.string().valid("helpers","routes").required(),file:De.string().custom(P_).required(),function_content:De.string().required()});return wi.validateBySchema(e,t)}a(Lne,"setCustomFunctionValidator");function Dne(e){let t=De.object({project:De.string().pattern(Ii).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME}),file:De.string().custom(P_).required(),payload:De.string().allow("").optional(),encoding:De.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return wi.validateBySchema(e,t)}a(Dne,"setComponentFileValidator");function Pne(e){let t=De.object({project:De.string().pattern(Ii).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME}),file:De.string().custom(P_).optional()});return wi.validateBySchema(e,t)}a(Pne,"dropComponentFileValidator");function Mne(e){let t=De.object({project:De.string().required(),file:De.string().custom(P_).required(),encoding:De.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return wi.validateBySchema(e,t)}a(Mne,"getComponentFileValidator");function Une(e){let t=De.object({project:De.string().pattern(Ii).custom(Mh.bind(null,!1)).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME})});return wi.validateBySchema(e,t)}a(Une,"addComponentValidator");function vne(e){let t=De.object({project:De.string().pattern(Ii).custom(Mh.bind(null,!0)).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME})});return wi.validateBySchema(e,t)}a(vne,"dropCustomFunctionProjectValidator");function Bne(e){let t=De.object({project:De.string().pattern(Ii).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME}),skip_node_modules:De.boolean()});return wi.validateBySchema(e,t)}a(Bne,"packageComponentValidator");function Hne(e){let t=De.object({project:De.string().pattern(Ii).required().messages({"string.pattern.base":gr.BAD_PROJECT_NAME}),payload:De.string().optional().messages({"string.pattern.base":gr.BAD_PACKAGE}),package:De.string().optional()});return wi.validateBySchema(e,t)}a(Hne,"deployComponentValidator")});var Hh=R((ebe,_H)=>{"use strict";var Uh=require("joi"),vh=require("path"),iH=require("fs-extra"),{exec:xne}=require("child_process"),Gne=require("util"),oH=Gne.promisify(xne),M_=D(),{handleHDBError:Jc,hdb_errors:qne}=ie(),{HTTP_STATUS_CODES:Xc}=qne,U_=X(),Fne=nt(),Zc=k();U_.initSync();var qA=U_.get(M_.CONFIG_PARAMS.COMPONENTSROOT),aH="npm install --omit=dev --json",kne=`${aH} --dry-run`;_H.exports={installModules:Kne,auditModules:Wne,installAllRootModules:Vne,uninstallRootModule:$ne,linkHarperdb:Yne};async function Vne(e=!1){await Bh(),await v_(e?"npm install --ignore-scripts":"npm install",U_.get(M_.CONFIG_PARAMS.ROOTPATH))}a(Vne,"installAllRootModules");async function $ne(e){await v_(`npm uninstall ${e}`,U_.get(M_.CONFIG_PARAMS.ROOTPATH))}a($ne,"uninstallRootModule");async function Yne(){await Bh(),await v_(`npm link ${M_.PACKAGE_ROOT}`,U_.get(M_.CONFIG_PARAMS.ROOTPATH))}a(Yne,"linkHarperdb");async function v_(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
15
  `,""))}return n&&!n.includes("Debugger listening")&&Zc.error("Error running NPM command:",e,n),Zc.trace(r,n),r?.replace(`
18
- `,"")}a(v_,"runCommand");async function Qne(e){Zc.info(`starting installModules for request: ${e}`);let t=dH(e);if(t)throw Jc(t,t.message,Xc.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?Vne:lH;await Bh(),await _H(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 _=vh.join(qA,l),u,d=null;try{let{stdout:E,stderr:f}=await cH(s,{cwd:_});u=E?E.replace(`
16
+ `,"")}a(v_,"runCommand");async function Kne(e){Zc.info(`starting installModules for request: ${e}`);let t=uH(e);if(t)throw Jc(t,t.message,Xc.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?kne:aH;await Bh(),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 _=vh.join(qA,l),u,d=null;try{let{stdout:E,stderr:f}=await oH(s,{cwd:_});u=E?E.replace(`
19
17
  `,""):null,d=f?f.replace(`
20
- `,""):null}catch(E){E.stderr?i[l].npm_error=uH(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 Zc.info(`finished installModules with response ${i}`),i}a(Qne,"installModules");function uH(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(uH,"parseNPMStdErr");async function jne(e){Zc.info(`starting auditModules for request: ${e}`);let t=dH(e);if(t)throw Jc(t,t.message,Xc.BAD_REQUEST);let{projects:r}=e;await Bh(),await _H(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=vh.join(qA,o);n[o]={npm_output:null,npm_error:null};try{let l=await v_("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=uH(l.stderr)}}return Zc.info(`finished auditModules with response ${n}`),n}a(jne,"auditModules");async function Bh(){try{return await v_("npm -v"),!0}catch{throw Jc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Xc.BAD_REQUEST,void 0,void 0,!0)}}a(Bh,"checkNPMInstalled");async function _H(e){if(!Array.isArray(e)||e.length===0)throw Jc(new Error,"projects argument must be an array with at least 1 element",Xc.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=vh.join(qA,i.toString());if(!await aH.pathExists(o)){t.push(i);continue}let l=vh.join(o,"package.json");await aH.pathExists(l)||r.push(i)}if(t.length>0)throw Jc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Xc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Jc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Xc.BAD_REQUEST,void 0,void 0,!0)}a(_H,"checkProjectPaths");function dH(e){let t=Uh.object({projects:Uh.array().min(1).items(Uh.string()).required(),dry_run:Uh.boolean().default(!1)});return $ne.validateBySchema(e,t)}a(dH,"modulesValidator")});var kA=g((nbe,SH)=>{"use strict";var el=require("fs-extra"),FA=require("path"),xh=k(),EH=Y(),Gh=L(),mH=X(),zne=Et();SH.exports=Jne;async function Jne(){let e=Xne(),t=mH.get(Gh.CONFIG_PARAMS.ROOTPATH),r=FA.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Gh.PACKAGE_ROOT}},s=FA.join(t,"node_modules");await el.ensureDir(s);let i,o=!0,c=!1;try{i=await el.readJson(r)}catch(l){if(EH.isEmptyOrZeroLength(e))return;if(l.code!==Gh.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!EH.isEmptyOrZeroLength(e)){for(let{name:l,package:_}of e){let u=await hH(_);n.dependencies[l]=u+_}if(!o){xh.notify("Installing components"),await pH(r,n,null);return}for(let{name:l,package:_}of e){let u=i.dependencies[l],d=await hH(_);if(u===void 0||u!==d+_){c=!0;break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(xh.notify("Removing component",l),c=!0);c&&(xh.notify("Updating components."),await pH(r,n,i))}a(Jne,"installComponents");function Xne(){let e=zne.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(Xne,"getComponentsConfig");async function hH(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":FA.extname(e)||await el.pathExists(e)?"file:":"github:"}a(hH,"getPkgPrefix");async function pH(e,t,r){xh.trace("npm installing components package.json",t),await el.writeFile(e,JSON.stringify(t,null," "));try{await Hh().installAllRootModules(mH.get(Gh.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await el.writeFile(e,JSON.stringify(r,null," ")):await el.unlink(e),n}}a(pH,"installPackages")});var YA=g((obe,AH)=>{"use strict";var Ke=require("fs-extra"),$A=require("fast-glob"),Oe=require("path"),gH=require("tar-fs"),ibe=require("uuid").v4,VA=require("normalize-path"),ks=oH(),xt=k(),Xe=L(),Ct=X(),B_=Et(),Zne=Y(),{PACKAGE_ROOT:ese}=L(),{handleHDBError:zt,hdb_errors:tse}=ie(),{basename:rse}=require("path"),nse=kA(),RH=X(),sse=L(),{Readable:ise}=require("stream"),{isMainThread:ose}=require("worker_threads"),{HDB_ERROR_MSGS:Ua,HTTP_STATUS_CODES:Jt}=tse,ase=Oe.join(ese,"application-template"),TH=Oe.join(Ct.get(Xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function cse(){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,Ua.FUNCTION_STATUS,Jt.INTERNAL_SERVER_ERROR,xt.ERR,t)}return e}a(cse,"customFunctionsStatus");function lse(){xt.trace("getting custom api endpoints");let e={},t=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT);try{$A.sync(VA(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:$A.sync(VA(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:$A.sync(VA(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw zt(new Error,Ua.GET_FUNCTIONS,Jt.INTERNAL_SERVER_ERROR,xt.ERR,r)}return e}a(lse,"getCustomFunctions");function use(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,Ua.GET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,xt.ERR,c)}}a(use,"getCustomFunction");function _se(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,Ua.SET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,xt.ERR,c)}}a(_se,"setCustomFunction");function dse(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,Ua.DROP_FUNCTION,Jt.INTERNAL_SERVER_ERROR,xt.ERR,o)}}a(dse,"dropCustomFunction");function fse(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(ase,s),`Successfully added project: ${n}`}catch(s){throw zt(new Error,Ua.ADD_FUNCTION,Jt.INTERNAL_SERVER_ERROR,xt.ERR,s)}}a(fse,"addComponent");function Ese(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(!Zne.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 B_.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,Ua.DROP_FUNCTION_PROJECT,Jt.INTERNAL_SERVER_ERROR,xt.ERR,i)}}a(Ese,"dropCustomFunctionProject");async function hse(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(TH);let i=Oe.join(TH,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:l=>l.includes(Oe.join(s,"node_modules"))}),gH.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(hse,"packageComponent");async function pse(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=ise.from(Buffer.from(s,"base64"));await new Promise((h,m)=>{E.pipe(gH.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 B_.addConfig(n,{package:i}),!s){await nse();let E=RH.get(sse.CONFIG_PARAMS.ROOTPATH);o=Oe.join(E,"node_modules",n)}if(ose)return;let c=new Map;c.isWorker=!0;let l=(Fh(),ae(qh)),_;l.setErrorReporter(E=>_=E);let u=rse(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(pse,"deployComponent");async function mse(){let e=B_.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=(Fh(),ae(qh)).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(mse,"getComponents");async function Sse(e){let t=ks.getComponentFileValidator(e);if(t)throw zt(t,t.message,Jt.BAD_REQUEST);let n=B_.getConfigObj()[e.project]||e.project==="harperdb"?Oe.join(RH.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(Sse,"getComponentFile");async function Tse(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(Tse,"setComponentFile");async function gse(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),B_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(gse,"dropComponent");AH.exports={customFunctionsStatus:cse,getCustomFunctions:lse,getCustomFunction:use,setCustomFunction:_se,dropCustomFunction:dse,addComponent:fse,dropCustomFunctionProject:Ese,packageComponent:hse,deployComponent:pse,getComponents:mse,getComponentFile:Sse,setComponentFile:Tse,dropComponent:gse}});var KA=g((cbe,bH)=>{"use strict";var $s=require("joi"),OH=nt();bH.exports={readTransactionLogValidator:Rse,deleteTransactionLogsBeforeValidator:Ase};function Rse(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 OH.validateBySchema(e,t)}a(Rse,"readTransactionLogValidator");function Ase(e){let t=$s.object({schema:$s.string().required(),table:$s.string().required(),timestamp:$s.date().timestamp().required()});return OH.validateBySchema(e,t)}a(Ase,"deleteTransactionLogsBeforeValidator")});var kh=g((ube,CH)=>{"use strict";var WA=L(),H_=gt(),NH=Y(),yH=X(),IH=fi(),{handleHDBError:tl,hdb_errors:Ose}=ie(),{HTTP_STATUS_CODES:rl}=Ose,{readTransactionLogValidator:bse,deleteTransactionLogsBeforeValidator:Nse}=KA(),wH="This operation relies on clustering and cannot run with it disable.",yse="Logs successfully deleted from transaction log.",Ise="All logs successfully deleted from transaction log.";CH.exports={readTransactionLog:wse,deleteTransactionLogsBefore:Cse};async function*wse(e){let t=bse(e);if(t)throw tl(t,t.message,rl.BAD_REQUEST,void 0,void 0,!0);if(!yH.get(WA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw tl(new Error,wH,rl.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=NH.checkSchemaTableExist(r,n);if(s)throw tl(new Error,s,rl.NOT_FOUND,void 0,void 0,!0);let i=IH.createNatsTableStreamName(r,n),o=await H_.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===WA.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(wse,"readTransactionLog");async function Cse(e){let t=Nse(e);if(t)throw tl(t,t.message,rl.BAD_REQUEST,void 0,void 0,!0);if(!yH.get(WA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw tl(new Error,wH,rl.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=NH.checkSchemaTableExist(r,n);if(i)throw tl(new Error,i,rl.NOT_FOUND,void 0,void 0,!0);let o=IH.createNatsTableStreamName(r,n),{jsm:c}=await H_.getNATSReferences(),l=await H_.getStreamInfo(o),_=new Date(l.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let u=yse,d,E=new Date(l.state.last_ts).getTime();return s>E?(d=l.state.last_seq+1,u=Ise):d=(await H_.viewStream(o,parseInt(s),1))[0].nats_sequence,await H_.purgeTableStream(r,n,{seq:d}),u}a(Cse,"deleteTransactionLogsBefore")});var LH=g((dbe,DH)=>{"use strict";var QA=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};DH.exports=QA});var MH=g((Ebe,PH)=>{"use strict";var jA=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};PH.exports=jA});var JA=g((pbe,vH)=>{"use strict";var UH=LH(),Dse=MH(),{HDB_ERROR_MSGS:Lse}=nn(),zA=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Lse.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 UH(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Dse(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new UH(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}};vH.exports=zA});var Kh=g((Sbe,JH)=>{"use strict";var XA=Pr(),$h=ur(),kn=PE(),q_=Ei(),ZA=oa(),Pse=TR(),Mse=qU(),F_=Ur(),Vh=BE(),Gt=k(),Use=DR(),vse=__(),Bse=lA(),Hse=XE(),xse=eh(),Gse=_A(),qse=rh(),Fse=sh(),eO=oh(),Di=Y(),kse=x0(),tO=ch(),xH=No(),Fn=L(),GH=$B(),$se=gi(),qH=a_(),FH=(Ph(),ae(L_)),kH=Et(),mn=YA(),Vse=require("alasql"),$H=kh(),VH=Hh(),YH=JA(),{handleHDBError:Yr,hdb_errors:KH}=ie(),{HDB_ERROR_MSGS:sr,HTTP_STATUS_CODES:x_}=KH,V=new Map,WH="delete",wo="insert",Li="read",va="update",G_="describe",BH=q_.describeSchema.name,HH=q_.describeTable.name,QH={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Yse="catchup",Kse="handleGetJob",Wse="handleGetJobsByStartDate",Yh={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Qse=[kn.createTable.name,kn.createAttribute.name,kn.dropTable.name,kn.dropAttribute.name],jH={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(XA.insert.name,new j(!1,[wo]));V.set(XA.update.name,new j(!1,[va]));V.set(XA.upsert.name,new j(!1,[wo,va]));V.set($h.searchByConditions.name,new j(!1,[Li]));V.set($h.searchByHash.name,new j(!1,[Li]));V.set($h.searchByValue.name,new j(!1,[Li]));V.set($h.search.name,new j(!1,[Li]));V.set(kn.createSchema.name,new j(!0,[]));V.set(kn.createTable.name,new j(!0,[]));V.set(kn.createAttribute.name,new j(!1,[wo]));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(q_.describeSchema.name,new j(!1,[Li]));V.set(q_.describeTable.name,new j(!1,[Li]));V.set(ZA.deleteRecord.name,new j(!1,[WH]));V.set(F_.addUser.name,new j(!0,[]));V.set(F_.alterUser.name,new j(!0,[]));V.set(F_.dropUser.name,new j(!0,[]));V.set(F_.listUsersExternal.name,new j(!0,[]));V.set(Vh.listRoles.name,new j(!0,[]));V.set(Vh.addRole.name,new j(!0,[]));V.set(Vh.alterRole.name,new j(!0,[]));V.set(Vh.dropRole.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(Gse.name,new j(!0,[]));V.set(eO.setRoutes.name,new j(!0,[]));V.set(eO.getRoutes.name,new j(!0,[]));V.set(eO.deleteRoutes.name,new j(!0,[]));V.set(kH.setConfiguration.name,new j(!0,[]));V.set(qse.clusterStatus.name,new j(!0,[]));V.set(Fse.name,new j(!0,[]));V.set(tO.getFingerprint.name,new j(!0,[]));V.set(tO.setLicense.name,new j(!0,[]));V.set(ZA.deleteFilesBefore.name,new j(!0,[]));V.set(ZA.deleteAuditLogsBefore.name,new j(!0,[]));V.set(xH.restart.name,new j(!0,[]));V.set(xH.restartService.name,new j(!0,[]));V.set(Pse.name,new j(!0,[]));V.set(Mse.name,new j(!0,[Li]));V.set($se.systemInformation.name,new j(!0,[]));V.set(kH.getConfiguration.name,new j(!0,[]));V.set($H.readTransactionLog.name,new j(!0,[]));V.set($H.deleteTransactionLogsBefore.name,new j(!0,[]));V.set(VH.installModules.name,new j(!0,[]));V.set(VH.auditModules.name,new j(!0,[]));V.set(qH.createTokens.name,new j(!1,[]));V.set(qH.refreshOperationToken.name,new j(!1,[]));V.set(FH.login.name,new j(!1,[]));V.set(FH.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(tO.getRegistrationInfo.name,new j(!1,[]));V.set(F_.userInfo.name,new j(!1,[]));V.set(q_.describeAll.name,new j(!1,[]));V.set(Kse,new j(!1,[]));V.set(Wse,new j(!0,[]));V.set(Yse,new j(!0,[]));V.set(Yh.CSV_DATA_LOAD,new j(!1,[wo,va]));V.set(Yh.CSV_URL_LOAD,new j(!1,[wo,va]));V.set(Yh.CSV_FILE_LOAD,new j(!1,[wo,va]));V.set(Yh.IMPORT_FROM_S3,new j(!1,[wo,va]));V.set(jH.EXPORT_TO_S3,new j(!0,[]));V.set(jH.EXPORT_LOCAL,new j(!0,[]));V.set(Fn.VALID_SQL_OPS_ENUM.DELETE,new j(!1,[WH]));V.set(Fn.VALID_SQL_OPS_ENUM.SELECT,new j(!1,[Li]));V.set(Fn.VALID_SQL_OPS_ENUM.INSERT,new j(!1,[wo]));V.set(Fn.VALID_SQL_OPS_ENUM.UPDATE,new j(!1,[va]));JH.exports={verifyPerms:zse,verifyPermsAst:jse,verifyBulkLoadAttributePerms:Xse};function jse(e,t,r){if(Di.isEmptyOrZeroLength(e))throw Gt.info("verify_perms_ast has an empty user parameter"),Yr(new Error);if(Di.isEmptyOrZeroLength(t))throw Gt.info("verify_perms_ast has an empty user parameter"),Yr(new Error);if(Di.isEmptyOrZeroLength(r))throw Gt.info("verify_perms_ast has a null operation parameter"),Yr(new Error);try{let n=new YH,s=new kse(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&&QH[r])throw Yr(new Error,sr.DROP_SYSTEM,x_.FORBIDDEN);if(c&&!l)return null;let _=GH.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof Vse.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=zH(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=nO(t.role.permission,E,d[f]);rO(h,m,r,d[f],E,n)}}),n.getPermsResponse())}catch(n){throw Yr(n)}}a(jse,"verifyPermsAst");function zse(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,x_.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 YH;if(Di.isEmptyOrZeroLength(e.hdb_user?.role)||Di.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&&QH[r])throw Yr(new Error,sr.DROP_SYSTEM,x_.FORBIDDEN);if(l&&!u||_===!0&&(r===kn.createSchema.name||r===kn.dropSchema.name))return null;if(Qse.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=GH.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=d),r===BH||r===HH){if(s===Fn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(sr.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===BH&&(!d[s]||!d[s][G_]))return c.handleInvalidItem(sr.SCHEMA_NOT_FOUND(s));if(r===HH&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][G_]))return c.handleInvalidItem(sr.TABLE_NOT_FOUND(s,i))}}let E=zH(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(R=>R[Fn.PERMS_CRUD_ENUM.READ]).forEach(R=>{m.push(R.attribute_name)}):m=global.hdb_schema[s][i].attributes.map(T=>T.attribute),e.get_attributes=m)}let f=Jse(e),h=nO(e.hdb_user?.role?.permission,s,i);return rO(f,h,r,i,s,c,n),c.getPermsResponse()}a(zse,"verifyPerms");function zH(e,t,r,n,s){if(Di.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),x_.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][G_]===!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[G_]===!1)n.addInvalidItem(sr.TABLE_NOT_FOUND(l,u));else try{let E=[],f=V.get(t).perms;!Di.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(KH.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?n.getPermsResponse():null}a(zH,"hasPermissions");function rO(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(Di.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[G_]===!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!==Li)throw Yr(new Error,sr.SYSTEM_TIMESTAMP_PERMS_ERR,x_.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(rO,"checkAttributePerms");function Jse(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(Jse,"getRecordAttributes");function nO(e,t,r){let n=new Map;if(Di.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(nO,"getAttributePermissions");function Xse(e,t,r,n,s,i,o){let c=new Set(i),l=nO(e,n,s);rO(c,l,t,s,n,o,r)}a(Xse,"verifyBulkLoadAttributePerms")});var Qh=g((gbe,rx)=>{"use strict";rx.exports={evaluateSQL:_ie,processAST:tx,convertSQLToAST:ex,checkASTPermissions:ZH};var Zse=Pr(),XH=require("util"),eie=XH.callbackify(Zse.insert),tie=ur().search,rie=bM().update,nie=XH.callbackify(rie),sie=yM().convertDelete,Co=require("alasql"),iie=Kh(),Wh=k(),oie=EE(),aie=Y(),k_=L(),{hdb_errors:cie,handleHDBError:sO}=ie(),{HTTP_STATUS_CODES:iO}=cie;oie(Co);var lie=403,uie="There was a problem performing this insert. Please check the logs and try again.",oO=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function _ie(e,t){let r=e.parsed_sql_object;if(!r){r=ex(e.sql);let n,s=r.ast.statements[0];if(s instanceof Co.yy.Insert?n=s.into.databaseid:s instanceof Co.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Co.yy.Update||s instanceof Co.yy.Delete?n=s.table.databaseid:Wh.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Co.yy.Select)&&aie.isEmptyOrZeroLength(n))return t("No schema specified",null)}tx(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(_ie,"evaluateSQL");function ZH(e,t){let r;try{r=iie.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 ex(e){let t=new oO;if(!e)throw sO(new Error,"The 'sql' parameter is missing from the request body",iO.BAD_REQUEST);try{let r=e.trim(),n=Co.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
22
- `);throw n[1]?sO(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,iO.BAD_REQUEST):sO(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",iO.BAD_REQUEST)}return t}a(ex,"convertSQLToAST");function tx(e,t,r){try{let n=die;if(!e.bypass_auth&&!t.permissions_checked){let i=ZH(e,t);if(i&&i.length>0)return r(lie,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case k_.VALID_SQL_OPS_ENUM.SELECT:n=tie,s=t.ast.statements[0];break;case k_.VALID_SQL_OPS_ENUM.INSERT:n=fie;break;case k_.VALID_SQL_OPS_ENUM.UPDATE:n=nie;break;case k_.VALID_SQL_OPS_ENUM.DELETE:n=sie;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(tx,"processAST");function die(e,t){Wh.info(e),t("unknown sql statement")}a(die,"nullFunction");function fie({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=Eie(i,e.values)}catch(o){return r(o)}eie(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){Wh.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(fie,"convertInsert");function Eie(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]]=Co.compile(`SELECT ${s.toString()} AS [${k_.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Wh.error(r),new Error(uie)}}a(Eie,"createDataObjects")});var aO=g((Abe,sx)=>{"use strict";var{S3:hie,GetObjectCommand:pie}=require("@aws-sdk/client-s3");sx.exports={getFileStreamFromS3:mie,getS3AuthObj:nx};async function mie(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await nx(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new pie(r))).Body}a(mie,"getFileStreamFromS3");function nx(e,t,r){return new hie({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(nx,"getS3AuthObj")});var jh=g((bbe,fx)=>{"use strict";var lO=ur(),Sie=Qh(),Tie=aO(),{AsyncParser:gie,Transform:Rie}=require("json2csv"),V_=require("stream"),Sn=Y(),cO=require("fs-extra"),Aie=require("path"),$n=k(),{promisify:ax}=require("util"),$_=Y(),{handleHDBError:Dt,hdb_errors:Oie}=ie(),{HDB_ERROR_MSGS:Kr,HTTP_STATUS_CODES:Lt}=Oie,{streamAsJSON:bie}=(US(),ae(kI)),{Upload:Nie}=require("@aws-sdk/lib-storage"),ix=["search_by_value","search_by_hash","sql","search_by_conditions"],ox=["json","csv"],cx="json",lx="csv",yie="Successfully exported JSON locally.",Iie="Successfully exported CSV locally.",wie=1e3,Cie=lO.searchByHash,Die=lO.searchByValue,Lie=ax(Sie.evaluateSQL),Pie=ax(V_.finished);fx.exports={export_to_s3:Bie,export_local:Mie,toCsvStream:ux};async function Mie(e){$n.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=_x(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(Aie.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Sn.buildFolderPath(e.path,r);await Uie(e.path);let s=await dx(e);return await vie(n,e.format,s)}a(Mie,"export_local");async function Uie(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 cO.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(Uie,"confirmPath");async function vie(e,t,r){if($n.trace("in saveToLocal"),$_.isEmptyOrZeroLength(e))throw Dt(new Error,Kr.INVALID_VALUE("file_path"),Lt.BAD_REQUEST,void 0,void 0,!0);if($_.isEmptyOrZeroLength(t))throw Dt(new Error,Kr.INVALID_VALUE("Source format"),Lt.BAD_REQUEST,void 0,void 0,!0);if($_.isEmpty(r))throw Dt(new Error,Kr.NOT_FOUND("Data"),Lt.BAD_REQUEST,void 0,void 0,!0);if(t===cx){let n=cO.createWriteStream(e);return bie(r).pipe(n),await Pie(n),{message:yie,path:e}}else if(t===lx){let n=cO.createWriteStream(e),s=V_.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(u=>({label:u,value:u})));let c={objectMode:!0};return await new gie(i,c).fromInput(s).toOutput(n).promise(!1),{message:Iie,path:e}}throw Dt(new Error,Kr.INVALID_VALUE("format"),Lt.BAD_REQUEST)}a(vie,"saveToLocal");async function Bie(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=_x(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 dx(e)}catch(l){throw $n.error(l),l}let n,s=await Tie.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new V_.PassThrough;if(e.format===lx){i=e.s3.key+".csv";let l=ux(r,r.getColumns?.());l.on("error",_=>{throw _}),l.pipe(o)}else if(e.format===cx){i=e.s3.key+".json";let l=new V_.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%wie===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 Nie({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Bie,"export_to_s3");function ux(e,t){let r=V_.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 Rie(n,s);return r.pipe(i)}a(ux,"toCsvStream");function _x(e){if($n.trace("in exportCoreValidation"),Sn.isEmpty(e.format))return"format missing";if(ox.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${ox.join(", ")}`;let t=e.search_operation.operation;if(Sn.isEmpty(t))return"search_operation.operation missing";if(ix.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${ix.join(", ")}`}a(_x,"exportCoreValidation");async function dx(e){$n.trace("in getRecords");let t,r;if($_.isEmpty(e.search_operation)||$_.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=Die;break;case"search_by_hash":t=Cie;break;case"search_by_conditions":t=lO.searchByConditions;break;case"sql":t=Lie;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(dx,"getRecords")});var Ax={};$e(Ax,{contentTypes:()=>fO,findBestSerializer:()=>Xh,getDeserializer:()=>Ha,registerContentHandlers:()=>EO,serialize:()=>Zh,serializeMessage:()=>Ma});function Hie(e){try{return e?.[0]===123?dO(e):e}catch{return e}}function EO(e){e.register(Gie,{serializers:[{regex:/^application\/json$/,serializer:cu},{regex:/^application\/cbor$/,serializer:function(t){return new Ba.EncoderStream(K_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Jh.Readable.from((0,Vs.encodeIter)(t,K_)):(0,Vs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,zh.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,Ba.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function Xh(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 mx.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 Zh(e,t,r){let n=hx&&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=Xh(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,Pi.createBrotliCompress)({params:{[Pi.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Pi.constants.BROTLI_MODE_TEXT:Pi.constants.BROTLI_MODE_GENERIC,[Pi.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>hx?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Pi.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function Ma(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return Y_(e);let r=t.serialize;if(r)return r(e);let n=Xh(t);return r=t.serialize=n.serializer.serialize,r(e)}function qie(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 Ha(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||px(e,n);return o=>qie(o).then(i)}return e&&Xt.get(e)?.deserialize||px(e,n)}function px(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 dO(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function Fie(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 zh,Vs,Ba,Pi,mx,Jh,Sx,uO,_O,Tx,gx,Y_,dO,K_,Xt,fO,Ex,Rx,xie,Gie,hx,zc=be(()=>{US();zh=x(jh()),Vs=require("msgpackr"),Ba=require("cbor-x"),Pi=require("zlib"),mx=x(ie()),Jh=require("stream");Cr();Sx=require("../index"),uO=x(X()),_O=x(L()),Tx=x(require("yaml")),gx=uO.default.get(_O.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,Y_=gx?Jo:JSON.stringify,dO=gx?MS:JSON.parse,K_={useRecords:!1,useToJSON:!0},Xt=new Map,fO=Xt;dt.contentTypes=fO;(0,Sx._assignPackageExport)("contentTypes",fO);Xt.set("application/json",{serializeStream:cu,serialize:Y_,deserialize:dO,q:.8});Ex=new Ba.Encoder(K_);Xt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Ba.EncoderStream(K_).end(e)},serialize:Ex.encode,deserialize:Ex.decode,q:1});Xt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Jh.Readable.from((0,Vs.encodeIter)(e,K_)):(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,zh.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,zh.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 Tx.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Xt.set("text/event-stream",{serializeStream:function(e){return Jh.Readable.from(Fie(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
18
+ `,""):null}catch(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 Zc.info(`finished installModules with response ${i}`),i}a(Kne,"installModules");function cH(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
19
+ `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(cH,"parseNPMStdErr");async function Wne(e){Zc.info(`starting auditModules for request: ${e}`);let t=uH(e);if(t)throw Jc(t,t.message,Xc.BAD_REQUEST);let{projects:r}=e;await Bh(),await lH(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=vh.join(qA,o);n[o]={npm_output:null,npm_error:null};try{let l=await v_("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=cH(l.stderr)}}return Zc.info(`finished auditModules with response ${n}`),n}a(Wne,"auditModules");async function Bh(){try{return await v_("npm -v"),!0}catch{throw Jc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Xc.BAD_REQUEST,void 0,void 0,!0)}}a(Bh,"checkNPMInstalled");async function lH(e){if(!Array.isArray(e)||e.length===0)throw Jc(new Error,"projects argument must be an array with at least 1 element",Xc.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=vh.join(qA,i.toString());if(!await iH.pathExists(o)){t.push(i);continue}let l=vh.join(o,"package.json");await iH.pathExists(l)||r.push(i)}if(t.length>0)throw Jc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Xc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Jc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Xc.BAD_REQUEST,void 0,void 0,!0)}a(lH,"checkProjectPaths");function uH(e){let t=Uh.object({projects:Uh.array().min(1).items(Uh.string()).required(),dry_run:Uh.boolean().default(!1)});return Fne.validateBySchema(e,t)}a(uH,"modulesValidator")});var kA=R((rbe,pH)=>{"use strict";var el=require("fs-extra"),FA=require("path"),xh=k(),dH=Y(),Gh=D(),hH=X(),Qne=Et();pH.exports=jne;async function jne(){let e=zne(),t=hH.get(Gh.CONFIG_PARAMS.ROOTPATH),r=FA.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Gh.PACKAGE_ROOT}},s=FA.join(t,"node_modules");await el.ensureDir(s);let i,o=!0,c=!1;try{i=await el.readJson(r)}catch(l){if(dH.isEmptyOrZeroLength(e))return;if(l.code!==Gh.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){xh.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&&(xh.notify("Removing component",l),c=!0);c&&(xh.notify("Updating components."),await EH(r,n,i))}a(jne,"installComponents");function zne(){let e=Qne.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(zne,"getComponentsConfig");async function fH(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":FA.extname(e)||await el.pathExists(e)?"file:":"github:"}a(fH,"getPkgPrefix");async function EH(e,t,r){xh.trace("npm installing components package.json",t),await el.writeFile(e,JSON.stringify(t,null," "));try{await Hh().installAllRootModules(hH.get(Gh.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await el.writeFile(e,JSON.stringify(r,null," ")):await el.unlink(e),n}}a(EH,"installPackages")});var YA=R((ibe,gH)=>{"use strict";var Ke=require("fs-extra"),VA=require("fast-glob"),Oe=require("path"),SH=require("tar-fs"),sbe=require("uuid").v4,$A=require("normalize-path"),ks=sH(),xt=k(),Xe=D(),Ct=X(),B_=Et(),Jne=Y(),{PACKAGE_ROOT:Xne}=D(),{handleHDBError:zt,hdb_errors:Zne}=ie(),{basename:ese}=require("path"),tse=kA(),TH=X(),rse=D(),{Readable:nse}=require("stream"),{isMainThread:sse}=require("worker_threads"),{HDB_ERROR_MSGS:Ma,HTTP_STATUS_CODES:Jt}=Zne,ise=Oe.join(Xne,"application-template"),mH=Oe.join(Ct.get(Xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function ose(){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(ose,"customFunctionsStatus");function ase(){xt.trace("getting custom api endpoints");let e={},t=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT);try{VA.sync($A(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:VA.sync($A(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:VA.sync($A(`${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(ase,"getCustomFunctions");function cse(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(cse,"getCustomFunction");function lse(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(lse,"setCustomFunction");function use(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(use,"dropCustomFunction");function _se(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(ise,s),`Successfully added project: ${n}`}catch(s){throw zt(new Error,Ma.ADD_FUNCTION,Jt.INTERNAL_SERVER_ERROR,xt.ERR,s)}}a(_se,"addComponent");function dse(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(!Jne.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 B_.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(dse,"dropCustomFunctionProject");async function fse(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(fse,"packageComponent");async function Ese(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=nse.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 B_.addConfig(n,{package:i}),!s){await tse();let E=TH.get(rse.CONFIG_PARAMS.ROOTPATH);o=Oe.join(E,"node_modules",n)}if(sse)return;let c=new Map;c.isWorker=!0;let l=(Fh(),ae(qh)),_;l.setErrorReporter(E=>_=E);let u=ese(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(Ese,"deployComponent");async function hse(){let e=B_.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=(Fh(),ae(qh)).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(hse,"getComponents");async function pse(e){let t=ks.getComponentFileValidator(e);if(t)throw zt(t,t.message,Jt.BAD_REQUEST);let n=B_.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(pse,"getComponentFile");async function mse(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(mse,"setComponentFile");async function Sse(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),B_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(Sse,"dropComponent");gH.exports={customFunctionsStatus:ose,getCustomFunctions:ase,getCustomFunction:cse,setCustomFunction:lse,dropCustomFunction:use,addComponent:_se,dropCustomFunctionProject:dse,packageComponent:fse,deployComponent:Ese,getComponents:hse,getComponentFile:pse,setComponentFile:mse,dropComponent:Sse}});var KA=R((abe,AH)=>{"use strict";var Vs=require("joi"),RH=nt();AH.exports={readTransactionLogValidator:Tse,deleteTransactionLogsBeforeValidator:gse};function Tse(e){let t=Vs.object({schema:Vs.string().required(),table:Vs.string().required(),from:Vs.date().timestamp(),to:Vs.date().timestamp(),limit:Vs.number().min(1)});return RH.validateBySchema(e,t)}a(Tse,"readTransactionLogValidator");function gse(e){let t=Vs.object({schema:Vs.string().required(),table:Vs.string().required(),timestamp:Vs.date().timestamp().required()});return RH.validateBySchema(e,t)}a(gse,"deleteTransactionLogsBeforeValidator")});var kh=R((lbe,IH)=>{"use strict";var WA=D(),H_=gt(),OH=Y(),bH=X(),NH=fi(),{handleHDBError:tl,hdb_errors:Rse}=ie(),{HTTP_STATUS_CODES:rl}=Rse,{readTransactionLogValidator:Ase,deleteTransactionLogsBeforeValidator:Ose}=KA(),yH="This operation relies on clustering and cannot run with it disable.",bse="Logs successfully deleted from transaction log.",Nse="All logs successfully deleted from transaction log.";IH.exports={readTransactionLog:yse,deleteTransactionLogsBefore:Ise};async function*yse(e){let t=Ase(e);if(t)throw tl(t,t.message,rl.BAD_REQUEST,void 0,void 0,!0);if(!bH.get(WA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw tl(new Error,yH,rl.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=OH.checkSchemaTableExist(r,n);if(s)throw tl(new Error,s,rl.NOT_FOUND,void 0,void 0,!0);let i=NH.createNatsTableStreamName(r,n),o=await H_.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===WA.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(yse,"readTransactionLog");async function Ise(e){let t=Ose(e);if(t)throw tl(t,t.message,rl.BAD_REQUEST,void 0,void 0,!0);if(!bH.get(WA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw tl(new Error,yH,rl.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=OH.checkSchemaTableExist(r,n);if(i)throw tl(new Error,i,rl.NOT_FOUND,void 0,void 0,!0);let o=NH.createNatsTableStreamName(r,n),{jsm:c}=await H_.getNATSReferences(),l=await H_.getStreamInfo(o),_=new Date(l.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let u=bse,d,E=new Date(l.state.last_ts).getTime();return s>E?(d=l.state.last_seq+1,u=Nse):d=(await H_.viewStream(o,parseInt(s),1))[0].nats_sequence,await H_.purgeTableStream(r,n,{seq:d}),u}a(Ise,"deleteTransactionLogsBefore")});var CH=R((_be,wH)=>{"use strict";var QA=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};wH.exports=QA});var DH=R((fbe,LH)=>{"use strict";var jA=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};LH.exports=jA});var JA=R((hbe,MH)=>{"use strict";var PH=CH(),wse=DH(),{HDB_ERROR_MSGS:Cse}=nn(),zA=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Cse.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 wse(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=zA});var Kh=R((mbe,jH)=>{"use strict";var XA=Pr(),Vh=ur(),kn=PE(),q_=oo(),ZA=ia(),Lse=TR(),Dse=qU(),F_=Ur(),$h=BE(),Gt=k(),Pse=LR(),Mse=__(),Use=lA(),vse=XE(),Bse=eh(),Hse=_A(),xse=rh(),Gse=sh(),eO=oh(),Ci=Y(),qse=x0(),tO=ch(),BH=bo(),Fn=D(),HH=FB(),Fse=Ti(),xH=a_(),GH=(Ph(),ae(D_)),qH=Et(),mn=YA(),kse=require("alasql"),FH=kh(),kH=Hh(),VH=JA(),{handleHDBError:Yr,hdb_errors:$H}=ie(),{HDB_ERROR_MSGS:sr,HTTP_STATUS_CODES:x_}=$H,$=new Map,YH="delete",Io="insert",Li="read",Ua="update",G_="describe",UH=q_.describeSchema.name,vH=q_.describeTable.name,KH={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Vse="catchup",$se="handleGetJob",Yse="handleGetJobsByStartDate",Yh={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Kse=[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}};$.set(XA.insert.name,new j(!1,[Io]));$.set(XA.update.name,new j(!1,[Ua]));$.set(XA.upsert.name,new j(!1,[Io,Ua]));$.set(Vh.searchByConditions.name,new j(!1,[Li]));$.set(Vh.searchByHash.name,new j(!1,[Li]));$.set(Vh.searchByValue.name,new j(!1,[Li]));$.set(Vh.search.name,new j(!1,[Li]));$.set(kn.createSchema.name,new j(!0,[]));$.set(kn.createTable.name,new j(!0,[]));$.set(kn.createAttribute.name,new j(!1,[Io]));$.set(kn.dropSchema.name,new j(!0,[]));$.set(kn.dropTable.name,new j(!0,[]));$.set(kn.dropAttribute.name,new j(!0,[]));$.set(q_.describeSchema.name,new j(!1,[Li]));$.set(q_.describeTable.name,new j(!1,[Li]));$.set(ZA.deleteRecord.name,new j(!1,[YH]));$.set(F_.addUser.name,new j(!0,[]));$.set(F_.alterUser.name,new j(!0,[]));$.set(F_.dropUser.name,new j(!0,[]));$.set(F_.listUsersExternal.name,new j(!0,[]));$.set($h.listRoles.name,new j(!0,[]));$.set($h.addRole.name,new j(!0,[]));$.set($h.alterRole.name,new j(!0,[]));$.set($h.dropRole.name,new j(!0,[]));$.set(Pse.name,new j(!0,[]));$.set(Mse.name,new j(!0,[]));$.set(Use.name,new j(!0,[]));$.set(vse.name,new j(!0,[]));$.set(Bse.name,new j(!0,[]));$.set(Hse.name,new j(!0,[]));$.set(eO.setRoutes.name,new j(!0,[]));$.set(eO.getRoutes.name,new j(!0,[]));$.set(eO.deleteRoutes.name,new j(!0,[]));$.set(qH.setConfiguration.name,new j(!0,[]));$.set(xse.clusterStatus.name,new j(!0,[]));$.set(Gse.name,new j(!0,[]));$.set(tO.getFingerprint.name,new j(!0,[]));$.set(tO.setLicense.name,new j(!0,[]));$.set(ZA.deleteFilesBefore.name,new j(!0,[]));$.set(ZA.deleteAuditLogsBefore.name,new j(!0,[]));$.set(BH.restart.name,new j(!0,[]));$.set(BH.restartService.name,new j(!0,[]));$.set(Lse.name,new j(!0,[]));$.set(Dse.name,new j(!0,[Li]));$.set(Fse.systemInformation.name,new j(!0,[]));$.set(qH.getConfiguration.name,new j(!0,[]));$.set(FH.readTransactionLog.name,new j(!0,[]));$.set(FH.deleteTransactionLogsBefore.name,new j(!0,[]));$.set(kH.installModules.name,new j(!0,[]));$.set(kH.auditModules.name,new j(!0,[]));$.set(xH.createTokens.name,new j(!1,[]));$.set(xH.refreshOperationToken.name,new j(!1,[]));$.set(GH.login.name,new j(!1,[]));$.set(GH.logout.name,new j(!1,[]));$.set(mn.customFunctionsStatus.name,new j(!0,[]));$.set(mn.getCustomFunctions.name,new j(!0,[]));$.set(mn.getComponents.name,new j(!0,[]));$.set(mn.getComponentFile.name,new j(!0,[]));$.set(mn.setComponentFile.name,new j(!0,[]));$.set(mn.dropComponent.name,new j(!0,[]));$.set(mn.getCustomFunction.name,new j(!0,[]));$.set(mn.setCustomFunction.name,new j(!0,[]));$.set(mn.dropCustomFunction.name,new j(!0,[]));$.set(mn.addComponent.name,new j(!0,[]));$.set(mn.dropCustomFunctionProject.name,new j(!0,[]));$.set(mn.packageComponent.name,new j(!0,[]));$.set(mn.deployComponent.name,new j(!0,[]));$.set(tO.getRegistrationInfo.name,new j(!1,[]));$.set(F_.userInfo.name,new j(!1,[]));$.set(q_.describeAll.name,new j(!1,[]));$.set($se,new j(!1,[]));$.set(Yse,new j(!0,[]));$.set(Vse,new j(!0,[]));$.set(Yh.CSV_DATA_LOAD,new j(!1,[Io,Ua]));$.set(Yh.CSV_URL_LOAD,new j(!1,[Io,Ua]));$.set(Yh.CSV_FILE_LOAD,new j(!1,[Io,Ua]));$.set(Yh.IMPORT_FROM_S3,new j(!1,[Io,Ua]));$.set(WH.EXPORT_TO_S3,new j(!0,[]));$.set(WH.EXPORT_LOCAL,new j(!0,[]));$.set(Fn.VALID_SQL_OPS_ENUM.DELETE,new j(!1,[YH]));$.set(Fn.VALID_SQL_OPS_ENUM.SELECT,new j(!1,[Li]));$.set(Fn.VALID_SQL_OPS_ENUM.INSERT,new j(!1,[Io]));$.set(Fn.VALID_SQL_OPS_ENUM.UPDATE,new j(!1,[Ua]));jH.exports={verifyPerms:Qse,verifyPermsAst:Wse,verifyBulkLoadAttributePerms:zse};function Wse(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 VH,s=new qse(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,x_.FORBIDDEN);if(c&&!l)return null;let _=HH.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof kse.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=nO(t.role.permission,E,d[f]);rO(h,m,r,d[f],E,n)}}),n.getPermsResponse())}catch(n){throw Yr(n)}}a(Wse,"verifyPermsAst");function Qse(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,x_.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 VH;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,x_.FORBIDDEN);if(l&&!u||_===!0&&(r===kn.createSchema.name||r===kn.dropSchema.name))return null;if(Kse.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][G_]))return c.handleInvalidItem(sr.SCHEMA_NOT_FOUND(s));if(r===vH&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][G_]))return c.handleInvalidItem(sr.TABLE_NOT_FOUND(s,i))}}let E=QH(e.hdb_user,r,o,c,n);if(E)return E;if($.get(r)&&$.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(g=>g[Fn.PERMS_CRUD_ENUM.READ]).forEach(g=>{m.push(g.attribute_name)}):m=global.hdb_schema[s][i].attributes.map(T=>T.attribute),e.get_attributes=m)}let f=jse(e),h=nO(e.hdb_user?.role?.permission,s,i);return rO(f,h,r,i,s,c,n),c.getPermsResponse()}a(Qse,"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||$.get(t).requires_su))return null;if(!$.get(t))throw Gt.info(`operation ${t} not found.`),Yr(new Error,sr.OP_NOT_FOUND(t),x_.BAD_REQUEST);if($.get(t)&&$.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][G_]===!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[G_]===!1)n.addInvalidItem(sr.TABLE_NOT_FOUND(l,u));else try{let E=[],f=$.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(QH,"hasPermissions");function rO(e,t,r,n,s,i,o){if(!e||!t)throw Gt.info("no attributes specified in checkAttributePerms."),Yr(new Error);let c=$.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[G_]===!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!==Li)throw Yr(new Error,sr.SYSTEM_TIMESTAMP_PERMS_ERR,x_.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(rO,"checkAttributePerms");function jse(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(jse,"getRecordAttributes");function nO(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(nO,"getAttributePermissions");function zse(e,t,r,n,s,i,o){let c=new Set(i),l=nO(e,n,s);rO(c,l,t,s,n,o,r)}a(zse,"verifyBulkLoadAttributePerms")});var Qh=R((Tbe,ex)=>{"use strict";ex.exports={evaluateSQL:lie,processAST:ZH,convertSQLToAST:XH,checkASTPermissions:JH};var Jse=Pr(),zH=require("util"),Xse=zH.callbackify(Jse.insert),Zse=ur().search,eie=bM().update,tie=zH.callbackify(eie),rie=yM().convertDelete,wo=require("alasql"),nie=Kh(),Wh=k(),sie=EE(),iie=Y(),k_=D(),{hdb_errors:oie,handleHDBError:sO}=ie(),{HTTP_STATUS_CODES:iO}=oie;sie(wo);var aie=403,cie="There was a problem performing this insert. Please check the logs and try again.",oO=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function lie(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:Wh.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof wo.yy.Select)&&iie.isEmptyOrZeroLength(n))return t("No schema specified",null)}ZH(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(lie,"evaluateSQL");function JH(e,t){let r;try{r=nie.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 oO;if(!e)throw sO(new Error,"The 'sql' parameter is missing from the request body",iO.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(`
20
+ `);throw n[1]?sO(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,iO.BAD_REQUEST):sO(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",iO.BAD_REQUEST)}return t}a(XH,"convertSQLToAST");function ZH(e,t,r){try{let n=uie;if(!e.bypass_auth&&!t.permissions_checked){let i=JH(e,t);if(i&&i.length>0)return r(aie,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case k_.VALID_SQL_OPS_ENUM.SELECT:n=Zse,s=t.ast.statements[0];break;case k_.VALID_SQL_OPS_ENUM.INSERT:n=_ie;break;case k_.VALID_SQL_OPS_ENUM.UPDATE:n=tie;break;case k_.VALID_SQL_OPS_ENUM.DELETE:n=rie;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 uie(e,t){Wh.info(e),t("unknown sql statement")}a(uie,"nullFunction");function _ie({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=die(i,e.values)}catch(o){return r(o)}Xse(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){Wh.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(_ie,"convertInsert");function die(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 [${k_.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Wh.error(r),new Error(cie)}}a(die,"createDataObjects")});var aO=R((Rbe,rx)=>{"use strict";var{S3:fie,GetObjectCommand:Eie}=require("@aws-sdk/client-s3");rx.exports={getFileStreamFromS3:hie,getS3AuthObj:tx};async function hie(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 Eie(r))).Body}a(hie,"getFileStreamFromS3");function tx(e,t,r){return new fie({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(tx,"getS3AuthObj")});var jh=R((Obe,_x)=>{"use strict";var lO=ur(),pie=Qh(),mie=aO(),{AsyncParser:Sie,Transform:Tie}=require("json2csv"),$_=require("stream"),Sn=Y(),cO=require("fs-extra"),gie=require("path"),Vn=k(),{promisify:ix}=require("util"),V_=Y(),{handleHDBError:Lt,hdb_errors:Rie}=ie(),{HDB_ERROR_MSGS:Kr,HTTP_STATUS_CODES:Dt}=Rie,{streamAsJSON:Aie}=(US(),ae(kI)),{Upload:Oie}=require("@aws-sdk/lib-storage"),nx=["search_by_value","search_by_hash","sql","search_by_conditions"],sx=["json","csv"],ox="json",ax="csv",bie="Successfully exported JSON locally.",Nie="Successfully exported CSV locally.",yie=1e3,Iie=lO.searchByHash,wie=lO.searchByValue,Cie=ix(pie.evaluateSQL),Lie=ix($_.finished);_x.exports={export_to_s3:Uie,export_local:Die,toCsvStream:cx};async function Die(e){Vn.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=lx(e);if(!Sn.isEmpty(t))throw Vn.error(t),Lt(new Error,t,Dt.BAD_REQUEST,void 0,void 0,!0);if(Sn.isEmpty(e.path))throw Vn.error(Kr.MISSING_VALUE("path")),Lt(new Error,Kr.MISSING_VALUE("path"),Dt.BAD_REQUEST,void 0,void 0,!0);let r=(Sn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(gie.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Sn.buildFolderPath(e.path,r);await Pie(e.path);let s=await ux(e);return await Mie(n,e.format,s)}a(Die,"export_local");async function Pie(e){if(Vn.trace("in confirmPath"),Sn.isEmptyOrZeroLength(e))throw Lt(new Error,`Invalid path: ${e}`,Dt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await cO.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,Vn.error(n),Lt(new Error,n,Dt.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 Vn.error(r),Lt(new Error,r,Dt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Pie,"confirmPath");async function Mie(e,t,r){if(Vn.trace("in saveToLocal"),V_.isEmptyOrZeroLength(e))throw Lt(new Error,Kr.INVALID_VALUE("file_path"),Dt.BAD_REQUEST,void 0,void 0,!0);if(V_.isEmptyOrZeroLength(t))throw Lt(new Error,Kr.INVALID_VALUE("Source format"),Dt.BAD_REQUEST,void 0,void 0,!0);if(V_.isEmpty(r))throw Lt(new Error,Kr.NOT_FOUND("Data"),Dt.BAD_REQUEST,void 0,void 0,!0);if(t===ox){let n=cO.createWriteStream(e);return Aie(r).pipe(n),await Lie(n),{message:bie,path:e}}else if(t===ax){let n=cO.createWriteStream(e),s=$_.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(u=>({label:u,value:u})));let c={objectMode:!0};return await new Sie(i,c).fromInput(s).toOutput(n).promise(!1),{message:Nie,path:e}}throw Lt(new Error,Kr.INVALID_VALUE("format"),Dt.BAD_REQUEST)}a(Mie,"saveToLocal");async function Uie(e){if(!e.s3||Object.keys(e.s3).length===0)throw Lt(new Error,Kr.MISSING_VALUE("S3 object"),Dt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Lt(new Error,Kr.MISSING_VALUE("aws_access_key_id"),Dt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Lt(new Error,Kr.MISSING_VALUE("aws_secret_access_key"),Dt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.bucket))throw Lt(new Error,Kr.MISSING_VALUE("bucket"),Dt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.key))throw Lt(new Error,Kr.MISSING_VALUE("key"),Dt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.region))throw Lt(new Error,Kr.MISSING_VALUE("region"),Dt.BAD_REQUEST);let t=lx(e);if(!Sn.isEmpty(t))throw Lt(new Error,t,Dt.BAD_REQUEST);Vn.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 Vn.error(l),l}let n,s=await mie.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new $_.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 $_.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%yie===0&&(l.push(u),u="")}u.length!==0&&l.push(u),l.push("]"),l.push(null)}else throw Lt(new Error,Kr.INVALID_VALUE("format"),Dt.BAD_REQUEST);return new Oie({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Uie,"export_to_s3");function cx(e,t){let r=$_.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 Tie(n,s);return r.pipe(i)}a(cx,"toCsvStream");function lx(e){if(Vn.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){Vn.trace("in getRecords");let t,r;if(V_.isEmpty(e.search_operation)||V_.isEmptyOrZeroLength(e.search_operation.operation))throw Lt(new Error,Kr.INVALID_VALUE("Search operation"),Dt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=wie;break;case"search_by_hash":t=Iie;break;case"search_by_conditions":t=lO.searchByConditions;break;case"sql":t=Cie;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Vn.error(r),Lt(new Error,r,Dt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(ux,"getRecords")});var gx={};Ve(gx,{contentTypes:()=>fO,findBestSerializer:()=>Xh,getDeserializer:()=>Ba,registerContentHandlers:()=>EO,serialize:()=>Zh,serializeMessage:()=>Pa});function vie(e){try{return e?.[0]===123?dO(e):e}catch{return e}}function EO(e){e.register(Hie,{serializers:[{regex:/^application\/json$/,serializer:cu},{regex:/^application\/cbor$/,serializer:function(t){return new va.EncoderStream(K_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Jh.Readable.from((0,$s.encodeIter)(t,K_)):(0,$s.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,zh.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,$s.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 Xh(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 Zh(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=Xh(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,Di.createBrotliCompress)({params:{[Di.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Di.constants.BROTLI_MODE_TEXT:Di.constants.BROTLI_MODE_GENERIC,[Di.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,Di.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 Y_(e);let r=t.serialize;if(r)return r(e);let n=Xh(t);return r=t.serialize=n.serializer.serialize,r(e)}function xie(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=>xie(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 dO(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function Gie(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 zh,$s,va,Di,hx,Jh,px,uO,_O,mx,Sx,Y_,dO,K_,Xt,fO,dx,Tx,Bie,Hie,fx,zc=be(()=>{US();zh=x(jh()),$s=require("msgpackr"),va=require("cbor-x"),Di=require("zlib"),hx=x(ie()),Jh=require("stream");Cr();px=require("../index"),uO=x(X()),_O=x(D()),mx=x(require("yaml")),Sx=uO.default.get(_O.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,Y_=Sx?zo:JSON.stringify,dO=Sx?MS:JSON.parse,K_={useRecords:!1,useToJSON:!0},Xt=new Map,fO=Xt;dt.contentTypes=fO;(0,px._assignPackageExport)("contentTypes",fO);Xt.set("application/json",{serializeStream:cu,serialize:Y_,deserialize:dO,q:.8});dx=new va.Encoder(K_);Xt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new va.EncoderStream(K_).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)?Jh.Readable.from((0,$s.encodeIter)(e,K_)):(0,$s.pack)(e)},serialize:$s.pack,deserialize:$s.unpack,q:.9});Xt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,zh.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,zh.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 Jh.Readable.from(Gie(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
21
  `),e.data){let r=e.data;typeof r=="object"&&(r=Y_(r)),t+="data: "+r+`
24
22
  `}return e.id&&(t+="id: "+e.id+`
25
23
  `),e.retry&&(t+="retry: "+e.retry+`
@@ -28,11 +26,11 @@ Database backup has not been removed and can be found here: ${s}`;bo.error(l),co
28
26
 
29
27
  `:`data: ${e}
30
28
 
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()}});Rx={type:"application/json",serializeStream:cu,serialize:Y_,deserialize:Hie,q:.5};Xt.set("*/*",Rx);Xt.set("",Rx);a(Hie,"tryJSONParse");a(EO,"registerContentHandlers");xie=require("fastify-plugin"),Gie=xie(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Xh(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(Xh,"findBestSerializer");hx=uO.default.get(_O.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Zh,"serialize");a(Ma,"serializeMessage");a(qie,"streamToBuffer");a(Ha,"getDeserializer");a(px,"deserializerUnknownType");a(Fie,"transformIterable")});function mO(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?mO(d.conditions,d.operator,r,n,s,i,o,c):il(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 R=h.operator==="or",N=u(h.conditions,!R,f);return R?(b,U)=>N.some(v=>v(b,U)):(b,U)=>N.every(v=>v(b,U))}let S=(h.attribute||h[0])===r.primaryKey,T=j_(h,r,i,c,S,f);return E&&m<d.length-1&&f&&(f=zie(r.primaryStore,h.estimated_count,f)),T}).filter(Boolean)}a(u,"mapConditionsToFilters")}function il(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(Array.isArray(o)){let R=o[0],N=Ui(n.attributes,R);if(N.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 b=N.definition?.tableClass||N.elements?.definition?.tableClass,U=new Map,v=il({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,b,s,U);if(N.relationship.to){i[o[0]]=U;let q=!!Ui(b.attributes,N.relationship.to)?.elements;v=Kie(v,N,b.primaryStore,q,U)}if(N.relationship.from){let q=a(M=>il({attribute:N.relationship.from,value:M},t,r,n,s,U),"searchEntry");N.elements?(i[o[0]]=U,v=Wie(v,N,b.primaryStore,U,q)):v=v.flatMap(q)}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(SO[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=j_(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??j_(e,n,null,i,m)),r){let R=_;_=u,u=R,R=!E,E=!d,d=R}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??j_(e,n,null,i,m),!h)throw new Tn.ClientError(`Unknown search operator ${e.comparator}`)}let T={start:_,end:u,inclusiveEnd:d,exclusiveStart:E,values:!0,versions:m,transaction:t,reverse:r};if(m){let R=S.getRange(T).map(h?function({key:N,value:b}){return this.isSync?b&&h(b)?N:Do.SKIP:new Promise((U,v)=>setImmediate(()=>{try{U(b&&h(b)?N:Do.SKIP)}catch(q){v(q)}}))}:N=>N.value==null?Do.SKIP:N);return R.hasEntries=!0,R}else return S?S.getRange(T).map(h?function({key:R,value:N}){let b;return typeof R=="string"&&R.length>Vn.MAX_SEARCH_KEY_LENGTH?b=n.primaryStore.get(N):b={[o]:R},this.isSync?h(b)?N:Do.SKIP:new Promise((U,v)=>setImmediate(()=>{try{U(h(b)?N:Do.SKIP)}catch(q){v(q)}}))}:({value:R})=>R):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:R,value:N}){return this.isSync?N&&h(N)?R:Do.SKIP:new Promise((b,U)=>setImmediate(()=>{try{b(N&&h(N)?R:Do.SKIP)}catch(v){U(v)}}))})}function Ui(e,t){if(Array.isArray(t))if(t.length>1){let r=Ui(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?Ui(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 Kie(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 Wie(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 j_(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=Ui(t.attributes,u),E=d.definition?.tableClass||d.elements.definition?.tableClass,f=n?.[u],h=j_({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,T=a((R,N)=>{let b,U;if(m){if(m.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let q of h.idFilter.idSet)e={attribute:m.from,value:q};S=_(m.from,h.idFilter,!0,!0)}else S=_(m.from,h.idFilter,!1,!0);let v=S(R);return S.idFilter&&(T.idFilter=S.idFilter),v}U=m(R,r,N),b=U?.value}else b=R[u];return b?Array.isArray(b)?b.some(h):h(b,U):!1},"recordFilter");return T}}switch(l instanceof Date&&(l=l.getTime()),SO[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&&tp(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(E=!1));let m=0,S=3;function T(R){let N=R[u],b;if(typeof N!="object"||!N||f?b=d(N):Array.isArray(N)?b=N.some(d):N instanceof Date&&(b=d(N.getTime())),E&&(S++,!b&&!T.idFilter&&++m/S*(i-S)>h)){let U=il(e,r.transaction.getReadTxn(),!1,t).map(hs),v=new Set(U);T.idFilter=q=>v.has(hs(q)),T.idFilter.idSet=v}return b}return a(T,"recordFilter"),s&&(T.idFilter=d),T}a(_,"attributeComparator")}function tp(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/Mi(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=SO[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=Ui(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=tp(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*Mi(e.indices[i.relationship.from])/(Mi(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=Mi(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=Vie*Mi(e.primaryStore)+1:n==="between"?r.estimated_count=$ie*Mi(e.primaryStore)+1:n==="sort"?r.estimated_count=Mi(e.primaryStore)+1:r.estimated_count=kie*Mi(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function rp(e){if(e)if(Lo=e,nl.lastIndex=0,Qie.test(e))try{let t=W_(new sl,"");if(Wr!==Lo.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 '${Lo}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function W_(e,t){let r=nl,n,s,i,o,c,l=decodeURIComponent,_;for(;n=r.exec(Lo);){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=hO}else{if(l=decodeURIComponent,i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");s=Q_(u)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=Yie[d],l=pO[i]?hO:decodeURIComponent,!u)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=Q_(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"&&Ox(h,u),ep(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(Q_(u)),s=void 0;break;case"(":nl.lastIndex=Wr;let f=W_(u?[]:new sl,")");switch(u){case"":ep(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=bx(f);break;default:throw new SyntaxError(`unknown query function call ${u}`)}Lo[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");nl.lastIndex=Wr,E=W_([],"}"),E.name=u,e.push(E),Lo[Wr]===","?r.lastIndex=++Wr:o=!0;break;case"[":nl.lastIndex=Wr,u?(E=W_(new sl,"]"),E.name=u):E=W_(e.conditions?new sl:[],"]"),e.conditions?(ep(e,_),e.conditions.push(E),s=null):e.push(E),Lo[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"&&Ox(h,u),ep(e,_),e.conditions.push(h)}else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(Q_(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?jie:nl,r.lastIndex=Wr),Wr===Lo.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function ep(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 Q_(e){return e.indexOf(".")>-1?e.split(".").map(Q_):decodeURIComponent(e)}function hO(e){if(e==="null")return null;if(e.indexOf("/")>-1){let t=e.split("/"),r=new ol(t.length);for(let n=0,s=t.length;n<s;n++)r[n]=hO(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 Ox(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 bx(e){let t=Nx(e[0]);return e.length>1&&(t.next=bx(e.slice(1))),t}function Nx(e){if(Array.isArray(e)){let t=Nx(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 Mi(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function zie(e,t,r){return t*r/Mi(e)}var Tn,Vn,Ys,Do,kie,$ie,Vie,Yie,pO,SO,Qie,nl,jie,Wr,Lo,sl,np=be(()=>{Tn=x(ie()),Vn=x(_t()),Ys=require("ordered-binary"),Do=require("lmdb");Mn();kie=.3,$ie=.1,Vie=.05,Yie={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},pO={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(mO,"executeConditions");a(il,"searchByIndex");a(Ui,"findAttribute");a(Kie,"joinTo");a(Wie,"joinFrom");SO={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(j_,"filterByType");a(tp,"estimateCondition");Qie=/[()[\]|!<>.]|(=\w*=)/,nl=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,jie=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(rp,"parseQuery");a(W_,"parseBlock");a(ep,"assignOperator");a(Q_,"decodeProperty");a(hO,"typedDecoding");a(Ox,"wildcardDecoding");a(bx,"toSortObject");a(Nx,"toSortEntry");sl=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(Mi,"estimatedEntryCount");a(zie,"intersectionEstimate")});function Dx(e){let t={openapi:Jie,info:{title:"HarperDB HTTP REST interface",version:(0,Cx.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:N,name:b,elements:U,relationship:v,definition:q}of o){if(v)N==="array"?_[b]={type:"array",items:{$ref:Po+U.type}}:_[b]={$ref:Po+N};else{let M=q??U?.definition;if(M){if(!t.components.schemas[M.type]){let W={};M.properties.forEach(z=>{W[z.name]=new AO(TO[z.type],z.type)}),t.components.schemas[M.type]=new wx(W)}N==="array"?_[b]={type:"array",items:{$ref:Po+M.type}}:_[b]={$ref:Po+M.type}}else N==="array"?U.type==="Any"||U.type=="ID"?_[b]={type:"array",items:{format:U.type}}:_[b]={type:"array",items:new AO(TO[U.type],U.type)}:N==="Any"||N=="ID"?_[b]={format:N}:_[b]=new AO(TO[N],N)}u.push(new OO(b,"query",_[b]))}let d=Object.keys(_),E=new OO(c,"path",{format:"ID"});E.required=!0,E.description="primary key of record";let f=new OO("property","path",{enum:d});f.required=!0,t.components.schemas[i]=new wx(_);let h=l.post!==Resource.prototype.post||l.update,m=typeof l.put=="function",S=typeof l.get=="function",T=typeof l.delete=="function",R="/"+s+"/";h&&(t.paths[R]={},t.paths[R].post=new Xie(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[R]||(t.paths[R]={}),t.paths[R].get=new gO(u,r,{200:new RO({$ref:Po+i})},"search for records by the specified property name and value pairs")),T&&(t.paths[R]||(t.paths[R]={}),t.paths[R].delete=new Ix(u,r,"delete all the records that match the provided query",{204:new yx})),R="/"+s+"/{"+c+"}",S&&(t.paths[R]={},t.paths[R].get=new gO([E],r,{200:new RO({$ref:Po+i})},"retrieve a record by its primary key")),m&&(t.paths[R]||(t.paths[R]={}),t.paths[R].put=new Zie([E],r,i,"create or update the record with the URL path that maps to the record's primary key")),T&&(t.paths[R]||(t.paths[R]={}),t.paths[R].delete=new Ix([E],r,"delete a record with the given primary key",{204:new yx})),S&&f.schema.enum.length>0&&(R="/"+s+"/{"+c+"}.{property}",t.paths[R]={},t.paths[R].get=new gO([E,f],r,{200:new RO({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function Xie(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Po+e}}}},this.security=t,this.responses={200:{description:bO,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function gO(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function RO(e){this.description=bO,this.content={"application/json":{schema:e}}}function yx(){this.description="successfully processed request, no content returned to client"}function Zie(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Po+r}}}},this.responses={200:{description:bO}}}function Ix(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function wx(e){this.type="object",this.properties=e}function AO(e,t){this.type=e,this.format=t}function OO(e,t,r){this.name=e,this.in=t,this.schema=r}var Cx,Jie,TO,Po,bO,Lx=be(()=>{Cx=x(Ri()),Jie="3.0.3",TO={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Po="#/components/schemas/",bO="successful operation";a(Dx,"generateJsonApi");a(Xie,"Post");a(gO,"Get");a(RO,"Response200");a(yx,"Response204");a(Zie,"Put");a(Ix,"Delete");a(wx,"ResourceSchema");a(AO,"Type");a(OO,"Parameter")});var ip={};$e(ip,{start:()=>roe});async function toe(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&rp(e);let s=new Io;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==Px){let f=sp.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=Ha(r["content-type"],!0)(e.body,e.headers)}catch(f){throw new al.ClientError(f,400)}if(e.authorize=!0,i===Px&&n==="GET"){if(e?.user?.role?.permission?.super_user)return Dx(sp);throw new al.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 al.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new al.ServerError(`Method ${n} is not recognized`,501)}}),_=200,u;if(l==null)_=n==="GET"||n==="HEAD"?404:204,NO.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(u=e.lastModified){eoe[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),NO.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=Zh(l,e,d),n==="HEAD"&&(d.body=void 0)),d}catch(i){i.statusCode?i.statusCode===500?xa.warn(i):xa.info(i):xa.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=Zh(i.contentType?i:i.toString(),e,o),o}}function roe(e){NO=e,!Mx&&(Mx=!0,sp=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return toe(t,r)},e),e.server.ws(async(t,r,n)=>{z_++;let s=new ts;Ux||(Ux=!0,Qu(l=>{z_>0&&l.push({metric:"ws-connections",connections:z_,byThread:!0})}));let i;t.on("error",l=>{i=!0,xa.warn(l)});let o;t.on("message",a(function(_){o||(o=Ha(r.requestedContentType??r.headers.asObject["content-type"],!1));let u=o(_);s.push(u)},"message"));let c;t.on("close",()=>{z_--,En(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),_=sp.getMatch(l);if(En(!!_,"connection","ws","connect"),_){r.handlerPath=_.path,hr(h=>({count:h.count,total:z_}),"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=Ma(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(noe[l.statusCode]||1011,l.toString()),t.close("login failed")}t.close()},e))}var xa,al,ir,eoe,NO,Px,Mx,sp,Ux,z_,noe,vx=be(()=>{zc();Ti();xa=x(k()),al=x(ie());np();ou();pa();D_();Lx();ir=new Uint8Array(8),eoe=new Float64Array(ir.buffer,0,1),NO={},Px="openapi";a(toe,"http");z_=0;a(roe,"start");noe={401:3e3,403:3003}});var yO=g(($be,Hx)=>{var{recordAction:op,recordActionBinary:Bx}=(Ti(),ae(ju)),soe=require("fastify-plugin"),ioe=200;Hx.exports=soe(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),op(o,"duration",_,d,u),Bx(s.raw.statusCode<400,"success",_,d,u),Bx(1,"response_"+s.raw.statusCode,_,d,u);let E=ioe;i?.pipe?(i.on("data",S=>{E+=S.length}),i.on("end",()=>{op(performance.now()-c,"transfer",_,d,u),op(E,"bytes-sent",_,d,u)})):(E+=i?.length||0,op(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 PO=g((Kbe,Fx)=>{var up=require("clone"),_p=nt(),ooe=Y(),cp=L(),Vbe=k(),IO=require("fs"),CO=require("joi"),{string:lp}=CO.types(),{hdb_errors:aoe,handleHDBError:ap}=ie(),{HDB_ERROR_MSGS:Ybe,HTTP_STATUS_CODES:wO}=aoe,{common_validators:cl}=Ps(),xx=" is required",coe=["insert","update","upsert"],DO={database:{presence:!1,format:cl.schema_format,length:cl.schema_length},schema:{presence:!1,format:cl.schema_format,length:cl.schema_length},table:{presence:!0,format:cl.schema_format,length:cl.schema_length},action:{inclusion:{within:coe,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},loe={schema:lp.required(),table:lp.required(),action:lp.valid("insert","update","upsert")},{AWS_ACCESS_KEY:uoe,AWS_SECRET:_oe,AWS_BUCKET:doe,AWS_FILE_KEY:foe,REGION:Eoe}=cp.S3_BUCKET_AUTH_KEYS,hoe={s3:{presence:!0},[`s3.${uoe}`]:{presence:!0,type:"String"},[`s3.${_oe}`]:{presence:!0,type:"String"},[`s3.${doe}`]:{presence:!0,type:"String"},[`s3.${foe}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Eoe}`]:{presence:!0,type:"String"}},Gx=up(DO);Gx.data.presence={message:xx};var qx=up(DO);qx.file_path.presence={message:xx};var poe=Object.assign(up(DO),hoe),LO=up(loe);LO.csv_url=lp.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();LO.passthrough_headers=CO.object();function moe(e){let t=_p.validateObject(e,Gx);return dp(e,t)}a(moe,"dataObject");function Soe(e){let t=_p.validateBySchema(e,CO.object(LO));return dp(e,t)}a(Soe,"urlObject");function Toe(e){let t=_p.validateObject(e,qx);return dp(e,t)}a(Toe,"fileObject");function goe(e){let t=_p.validateObject(e,poe);return dp(e,t)}a(goe,"s3FileObject");function dp(e,t){if(!t){let r=ooe.checkGlobalSchemaTable(e.schema,e.table);if(r)return ap(new Error,r,wO.BAD_REQUEST);if(e.operation===cp.OPERATIONS_ENUM.CSV_FILE_LOAD)try{IO.accessSync(e.file_path,IO.constants.R_OK|IO.constants.F_OK)}catch(n){return n.code===cp.NODE_ERROR_CODES.ENOENT?ap(n,`No such file or directory ${n.path}`,wO.BAD_REQUEST):n.code===cp.NODE_ERROR_CODES.EACCES?ap(n,`Permission denied ${n.path}`,wO.BAD_REQUEST):ap(n)}}return t}a(dp,"postValidateChecks");Fx.exports={dataObject:moe,urlObject:Soe,fileObject:Toe,s3FileObject:goe}});var MO=g((Qbe,kx)=>{"use strict";var J_=k(),fp=L();async function Roe(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===fp.OPERATIONS_ENUM.INSERT||t.operation===fp.OPERATIONS_ENUM.UPDATE||t.operation===fp.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===fp.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(Roe,"callOperationFunctionAsAwait");kx.exports={callOperationFunctionAsAwait:Roe}});var Vx=g((zbe,$x)=>{"use strict";var UO=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}},vO=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};$x.exports={BulkLoadFileObject:UO,BulkLoadDataObject:vO}});var Kx=g((Xbe,Yx)=>{"use strict";var BO=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};Yx.exports=BO});var kO=g((sNe,lG)=>{"use strict";var Ep=Pr(),pp=PO(),Aoe=require("needle"),ps=L(),eNe=Ze(),ll=Y(),{handleHDBError:ht,hdb_errors:tG}=ie(),{HTTP_STATUS_CODES:or,HDB_ERROR_MSGS:qt,CHECK_LOGS_WRAPPER:qa}=tG,ul=k(),HO=require("papaparse");ll.promisifyPapaParse();var ms=require("fs-extra"),Ooe=require("path"),{chain:Wx}=require("stream-chain"),Qx=require("stream-json/streamers/StreamArray"),jx=require("stream-json/utils/Batch"),zx=require("stream-chain/utils/comp"),{finished:Jx}=require("stream"),boe=X(),rG=MO(),Noe=aO(),{BulkLoadFileObject:GO,BulkLoadDataObject:yoe}=Vx(),qO=JA(),{verifyBulkLoadAttributePerms:nG}=Kh(),tNe=Kx(),rNe=gt(),nNe=fi(),{databases:Ioe}=(Re(),ae(Ve)),{coerceType:woe}=(mp(),ae($O)),Xx="No records parsed from csv file.",Ga=`${boe.get("HDB_ROOT")}/tmp`,{schema_regex:Coe}=Ps(),Zx=1024*1024*2,eG=5e3,Doe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};lG.exports={csvDataLoad:Loe,csvURLLoad:Poe,csvFileLoad:Moe,importFromS3:Uoe};async function Loe(e,t){let r=pp.dataObject(e);if(r)throw ht(r,r.message,or.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=oG(e.schema,e.table),i=HO.parse(e.data,{header:!0,skipEmptyLines:!0,transform:xO.bind(null,s),dynamicTyping:!1}),o=new qO;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&nG(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 yoe(e.action,e.schema,e.table,i.data);return n=await rG.callOperationFunctionAsAwait(aG,l,null),n.message===Xx?Xx:cG(n.records,n.number_written)}catch(s){throw Fa(s)}}a(Loe,"csvDataLoad");async function Poe(e){let t=pp.urlObject(e);if(t)throw ht(t,t.message,or.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Ga}/${r}`;try{await voe(e,r)}catch(s){throw ul.error(qt.DOWNLOAD_FILE_ERR(r)+" - "+s),ht(s,qa(qt.DOWNLOAD_FILE_ERR(r)))}try{let s=new GO(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 FO(s);return await hp(n),i}catch(s){throw await hp(n),Fa(s)}}a(Poe,"csvURLLoad");async function Moe(e){let t=pp.fileObject(e);if(t)throw ht(t,t.message,or.BAD_REQUEST,void 0,void 0,!0);let r=new GO(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 FO(r)}catch(n){throw Fa(n)}}a(Moe,"csvFileLoad");async function Uoe(e){let t=pp.s3FileObject(e);if(t)throw ht(t,t.message,or.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Ooe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Ga}/${s}`;let i=new GO(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await Boe(s,e);let o=await FO(i);return await hp(r),o}catch(n){throw await hp(r),Fa(n)}}a(Uoe,"importFromS3");async function voe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Aoe("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw ht(n,s,n.statusCode,ps.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}xoe(r,e.csv_url),await Hoe(t,r.raw)}a(voe,"downloadCSVFile");async function Boe(e,t){try{let r=`${Ga}/${e}`;await ms.mkdirp(Ga),await ms.writeFile(`${Ga}/${e}`,"",{flag:"a+"});let n=await ms.createWriteStream(r),s=await Noe.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(){ul.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw ul.error(qt.S3_DOWNLOAD_ERR+" - "+r),ht(r,qa(qt.S3_DOWNLOAD_ERR))}}a(Boe,"downloadFileFromS3");async function Hoe(e,t){try{await ms.mkdirp(Ga),await ms.writeFile(`${Ga}/${e}`,t)}catch(r){throw ul.error(qt.WRITE_TEMP_FILE_ERR),ht(r,qa(qt.DEFAULT_BULK_LOAD_ERR))}}a(Hoe,"writeFileToTempFolder");async function hp(e){if(e)try{await ms.access(e),await ms.unlink(e)}catch{ul.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(hp,"deleteTempFile");function xoe(e,t){if(e.statusCode!==tG.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(!Doe[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(xoe,"validateURLResponse");async function FO(e){try{let t;switch(e.file_type){case ps.VALID_S3_FILE_TYPES.CSV:t=await Goe(e);break;case ps.VALID_S3_FILE_TYPES.JSON:t=await qoe(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 cG(t.records,t.number_written)}catch(t){throw Fa(t)}}a(FO,"fileLoad");async function sG(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await Ep.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&nG(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(sG,"validateChunk");async function iG(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;ll.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!ll.isEmpty(c)&&!ll.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 rG.callOperationFunctionAsAwait(aG,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=ht(c,qa(qt.INSERT_CSV_ERR),or.INTERNAL_SERVER_ERROR,ps.LOG_LEVELS.ERROR,qt.INSERT_CSV_ERR+" - "+c);r(l)}}a(iG,"insertChunk");async function Goe(e){let t={records:0,number_written:0},r=oG(e.schema,e.table);try{let n=new qO,s=ms.createReadStream(e.file_path,{highWaterMark:Zx});s.setEncoding("utf8"),await HO.parsePromise(s,sG.bind(null,e,n),xO.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 HO.parsePromise(s,iG.bind(null,e,t),xO.bind(null,r)),s.destroy(),t}catch(n){throw ht(n,qa(qt.PAPA_PARSE_ERR),or.INTERNAL_SERVER_ERROR,ps.LOG_LEVELS.ERROR,qt.PAPA_PARSE_ERR+n)}}a(Goe,"callPapaParse");function oG(e,t){let r=Ioe[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>woe(i,s));return n}a(oG,"createTransformMap");function xO(e,t,r){let n=e.get(r);return n?n(t):ll.autoCast(t)}a(xO,"typeFunction");async function qoe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new qO,s=Wx([ms.createReadStream(e.file_path,{encoding:"utf-8"}),Qx.withParser(),c=>c.value,new jx({batchSize:eG}),zx(async c=>{await sG(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=Wx([ms.createReadStream(e.file_path,{encoding:"utf-8"}),Qx.withParser(),c=>c.value,new jx({batchSize:eG}),zx(async c=>{await iG(e,t,r,c)})]);return await new Promise((c,l)=>{Jx(o,_=>{_?l(_):c()}),o.resume()}),t}catch(n){throw ht(n,qa(qt.INSERT_JSON_ERR),or.INTERNAL_SERVER_ERROR,ps.LOG_LEVELS.ERROR,qt.INSERT_JSON_ERR+n)}}a(qoe,"insertJson");async function aG(e){let t={};try{e.data&&e.data.length>0&&Foe(e.data[0])?t=await koe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",ul.info(t.message))}catch(r){throw Fa(r)}return t}a(aG,"callBulkFileLoad");function Foe(e){let t=Object.keys(e);for(let r of t)if(!Coe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Foe,"validateColumnNames");async function koe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=Ep.insert;break;case"update":i=Ep.update;break;case"upsert":i=Ep.upsert;break;default:throw 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=ll.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw Fa(o)}}a(koe,"bulkFileLoad");function cG(e,t){return`successfully loaded ${t} of ${e} records`}a(cG,"buildResponseMsg");function Fa(e){return ht(e,qa(qt.DEFAULT_BULK_LOAD_ERR),or.INTERNAL_SERVER_ERROR,ps.LOG_LEVELS.ERROR,qt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Fa,"buildTopLevelErrMsg")});var _G=g((oNe,uG)=>{"use strict";var VO=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};uG.exports=VO});var EG=g((cNe,fG)=>{"use strict";var $oe=L(),dG=require("moment"),Voe=require("uuid").v4,YO=class{static{a(this,"JobObject")}constructor(){this.id=Voe(),this.type=void 0,this.start_datetime=dG().valueOf(),this.created_datetime=dG().valueOf(),this.end_datetime=void 0,this.status=$oe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};fG.exports=YO});var KO=g((uNe,AG)=>{"use strict";var Yoe=require("uuid").v4,TG=Pr(),gG=ur(),Koe=as(),Woe=yc(),Qoe=_G(),et=L(),joe=EG(),zoe=GE(),Yn=k(),Joe=su(),_l=Y(),{promisify:Xoe}=require("util"),ka=require("moment"),Zoe=Qh(),Sp=PO(),hG=OT(),{deleteTransactionLogsBeforeValidator:eae}=KA(),{handleHDBError:pG,hdb_errors:tae}=ie(),{HTTP_STATUS_CODES:mG}=tae,SG=gG.searchByValue,rae=gG.searchByHash,nae=TG.insert,sae=Xoe(Zoe.evaluateSQL),iae=TG.update;AG.exports={addJob:cae,updateJob:uae,handleGetJob:oae,handleGetJobsByStartDate:aae,getJobById:RG};async function oae(e){try{let t=await RG(e.id);return _l.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(oae,"handleGetJob");async function aae(e){try{let t=await lae(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=ka(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=ka(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(aae,"handleGetJobsByStartDate");async function cae(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||_l.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=Sp.fileObject(e);break;case et.OPERATIONS_ENUM.CSV_URL_LOAD:n=Sp.urlObject(e);break;case et.OPERATIONS_ENUM.CSV_DATA_LOAD:n=Sp.dataObject(e);break;case et.OPERATIONS_ENUM.IMPORT_FROM_S3:n=Sp.s3FileObject(e);break;case et.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case et.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=hG(e,"date");break;case et.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=hG(e,"timestamp");break;case et.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=eae(e);break;case et.OPERATIONS_ENUM.RESTART_SERVICE:if(et.PROCESS_DESCRIPTORS_VALIDATE[e.service]===void 0)throw pG(new Error,"Invalid service",mG.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw pG(n,n.message,mG.BAD_REQUEST,void 0,void 0,!0);let s=new joe;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 Koe(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await SG(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=Yoe();try{o=await SG(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 Joe(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await nae(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(cae,"addJob");async function lae(e){let t=ka(e.from_date,ka.ISO_8601),r=ka(e.to_date,ka.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 Qoe(n,e.hdb_user);try{return await sae(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(lae,"getJobsInDateRange");async function RG(e){if(_l.isEmptyOrZeroLength(e))return _l.errorizeMessage("Invalid job ID specified.");let t=new Woe(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await rae(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Yn.error(n),_l.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(RG,"getJobById");async function uae(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(_l.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=ka().valueOf());let t=new zoe(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await iae(t),r}a(uae,"updateJob")});var DG=g((dNe,CG)=>{"use strict";var OG=Y(),Ft=L(),_ae=require("moment"),Tp=kO(),X_=k(),bG=KO(),NG=jh(),yG=oa(),IG=rt(),dae=kh(),fae=No(),{parentPort:Eae,isMainThread:wG}=require("worker_threads"),{onMessageByType:hae}=rt(),WO=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function pae(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(OG.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(OG.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,Tp.csvFileLoad);break;case Ft.JOB_TYPE_ENUM.csv_url_load:await Ks(e,Tp.csvURLLoad);break;case Ft.JOB_TYPE_ENUM.csv_data_load:await Ks(e,Tp.csvDataLoad);break;case Ft.JOB_TYPE_ENUM.import_from_s3:await Ks(e,Tp.importFromS3);break;case Ft.JOB_TYPE_ENUM.empty_trash:break;case Ft.JOB_TYPE_ENUM.export_local:await Ks(e,NG.export_local);break;case Ft.JOB_TYPE_ENUM.export_to_s3:await Ks(e,NG.export_to_s3);break;case Ft.JOB_TYPE_ENUM.delete_files_before:case Ft.JOB_TYPE_ENUM.delete_records_before:await Ks(e,yG.deleteFilesBefore);break;case Ft.JOB_TYPE_ENUM.delete_audit_logs_before:await Ks(e,yG.deleteAuditLogsBefore);break;case Ft.JOB_TYPE_ENUM.delete_transaction_logs_before:await Ks(e,dae.deleteTransactionLogsBefore);break;case Ft.JOB_TYPE_ENUM.restart_service:return await Ks(e,fae.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(pae,"parseMessage");async function Ks(e,t){try{e.job.status=Ft.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=_ae().valueOf(),await bG.updateJob(e.job),await mae(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):X_.error(`There was an error running ${t.name} job with id ${e.job.id}`),X_.error(n),e.job.message=n,e.job.status=Ft.JOB_STATUS_ENUM.ERROR;try{await bG.updateJob(e.job)}catch(s){throw X_.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Ks,"runJob");async function mae(e){X_.trace("launching job thread:",e),wG?IG.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Ft.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})}):Eae.postMessage({type:Ft.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(mae,"launchJobThread");wG&&hae(Ft.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{IG.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Ft.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`})})}catch(r){X_.error(r)}});CG.exports={parseMessage:pae,RunnerMessage:WO}});var PG=g((ENe,LG)=>{"use strict";var QO=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};LG.exports=QO});var jG=g((pNe,eb)=>{"use strict";var bp=ur(),JO=Qh(),gp=kO(),vi=PE(),Rp=Ei(),ed=oa(),Sae=TR(),Z_=Ur(),Ap=BE(),ar=YA(),Op=k(),Tae=DR(),gae=__(),MG=lA(),Rae=XE(),Aae=eh(),Oae=_A(),bae=rh(),Nae=sh(),jO=oh(),UG=jh(),yae=Kh(),XO=KO(),$=L(),{hdb_errors:rd,handleHDBError:td}=ie(),{HTTP_STATUS_CODES:vG}=rd,zO=ch(),BG=No(),YG=require("util"),dl=Pr(),Iae=Bn(),wae=gi(),HG=DG(),xG=a_(),GG=(Ph(),ae(L_)),qG=Et(),FG=kh(),kG=Hh(),{setServerUtilities:Cae}=(mp(),ae($O)),{CONTEXT:Dae}=(Mn(),ae(Sg)),{_assignPackageExport:Lae}=require("../index"),{transformReq:Pae}=Y(),{server:Mae}=(Cr(),ae(zo)),Rr=Op.loggerWithTag("operation"),Uae=MO(),$G=bp.searchByHash,vae=bp.searchByValue,Bae=YG.promisify(bp.search),Hae=YG.promisify(JO.evaluateSQL),xae={[$.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=PG();async function KG(e,t){try{if(e.body.operation!=="read_log"&&(Op.log_level===$.LOG_LEVELS.INFO||Op.log_level===$.LOG_LEVELS.DEBUG||Op.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 Uae.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return xae[e.body.operation]&&Iae.setSchemaDataToGlobal(n=>{n&&Rr.error(n)}),r}a(KG,"processLocalTransaction");var VG=qae();eb.exports={chooseOperation:WG,getOperationFunction:QG,operation:ZO,processLocalTransaction:KG};Cae(eb.exports);Mae.operation=ZO;function WG(e){let t;try{t=QG(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(`${vG.FORBIDDEN} from operation ${e.operation}`),Rr.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),td(new Error,o,rd.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==$.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=yae.verifyPerms(i,s);if(o)throw Rr.error(`${vG.FORBIDDEN} from operation ${e.operation}`),Rr.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),td(new Error,o,rd.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw td(s,"There was an error when trying to choose an operation path")}return r}a(WG,"chooseOperation");function QG(e){if(Rr.trace(`getOperationFunction with operation: ${e.operation}`),VG.has(e.operation))return VG.get(e.operation);throw td(new Error,rd.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),rd.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(QG,"getOperationFunction");Lae("operation",ZO);function ZO(e,t){e.hdb_user=this[Dae]?.user,e.bypass_auth=!t;let r=WG(e);return KG({body:e},r)}a(ZO,"operation");async function Gae(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 dl.insert(i);break;case $.OPERATIONS_ENUM.UPDATE:o=await dl.update(i);break;case $.OPERATIONS_ENUM.UPSERT:o=await dl.upsert(i);break;case $.OPERATIONS_ENUM.DELETE:o=await ed.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(Gae,"catchup");async function Ss(e){Pae(e);let t,r;try{r=await XO.addJob(e),t=r.createdJob,Rr.info("addJob result",r);let n=new HG.RunnerMessage(t,e);return{message:await HG.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),td(n,s)}}a(Ss,"executeJob");function qae(){let e=new Map;return e.set($.OPERATIONS_ENUM.INSERT,new K(dl.insert)),e.set($.OPERATIONS_ENUM.UPDATE,new K(dl.update)),e.set($.OPERATIONS_ENUM.UPSERT,new K(dl.upsert)),e.set($.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new K(bp.searchByConditions)),e.set($.OPERATIONS_ENUM.SEARCH_BY_HASH,new K($G)),e.set($.OPERATIONS_ENUM.SEARCH_BY_ID,new K($G)),e.set($.OPERATIONS_ENUM.SEARCH_BY_VALUE,new K(vae)),e.set($.OPERATIONS_ENUM.SEARCH,new K(Bae)),e.set($.OPERATIONS_ENUM.SQL,new K(Hae)),e.set($.OPERATIONS_ENUM.CSV_DATA_LOAD,new K(Ss,gp.csvDataLoad)),e.set($.OPERATIONS_ENUM.CSV_FILE_LOAD,new K(Ss,gp.csvFileLoad)),e.set($.OPERATIONS_ENUM.CSV_URL_LOAD,new K(Ss,gp.csvURLLoad)),e.set($.OPERATIONS_ENUM.IMPORT_FROM_S3,new K(Ss,gp.importFromS3)),e.set($.OPERATIONS_ENUM.CREATE_SCHEMA,new K(vi.createSchema)),e.set($.OPERATIONS_ENUM.CREATE_DATABASE,new K(vi.createSchema)),e.set($.OPERATIONS_ENUM.CREATE_TABLE,new K(vi.createTable)),e.set($.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new K(vi.createAttribute)),e.set($.OPERATIONS_ENUM.DROP_SCHEMA,new K(vi.dropSchema)),e.set($.OPERATIONS_ENUM.DROP_DATABASE,new K(vi.dropSchema)),e.set($.OPERATIONS_ENUM.DROP_TABLE,new K(vi.dropTable)),e.set($.OPERATIONS_ENUM.DROP_ATTRIBUTE,new K(vi.dropAttribute)),e.set($.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new K(Rp.describeSchema)),e.set($.OPERATIONS_ENUM.DESCRIBE_DATABASE,new K(Rp.describeSchema)),e.set($.OPERATIONS_ENUM.DESCRIBE_TABLE,new K(Rp.describeTable)),e.set($.OPERATIONS_ENUM.DESCRIBE_ALL,new K(Rp.describeAll)),e.set($.OPERATIONS_ENUM.DELETE,new K(ed.deleteRecord)),e.set($.OPERATIONS_ENUM.ADD_USER,new K(Z_.addUser)),e.set($.OPERATIONS_ENUM.ALTER_USER,new K(Z_.alterUser)),e.set($.OPERATIONS_ENUM.DROP_USER,new K(Z_.dropUser)),e.set($.OPERATIONS_ENUM.LIST_USERS,new K(Z_.listUsersExternal)),e.set($.OPERATIONS_ENUM.LIST_ROLES,new K(Ap.listRoles)),e.set($.OPERATIONS_ENUM.ADD_ROLE,new K(Ap.addRole)),e.set($.OPERATIONS_ENUM.ALTER_ROLE,new K(Ap.alterRole)),e.set($.OPERATIONS_ENUM.DROP_ROLE,new K(Ap.dropRole)),e.set($.OPERATIONS_ENUM.USER_INFO,new K(Z_.userInfo)),e.set($.OPERATIONS_ENUM.READ_LOG,new K(Tae)),e.set($.OPERATIONS_ENUM.ADD_NODE,new K(gae)),e.set($.OPERATIONS_ENUM.UPDATE_NODE,new K(MG)),e.set($.OPERATIONS_ENUM.SET_NODE_REPLICATION,new K(MG)),e.set($.OPERATIONS_ENUM.REMOVE_NODE,new K(Rae)),e.set($.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new K(Aae)),e.set($.OPERATIONS_ENUM.PURGE_STREAM,new K(Oae)),e.set($.OPERATIONS_ENUM.SET_CONFIGURATION,new K(qG.setConfiguration)),e.set($.OPERATIONS_ENUM.CLUSTER_STATUS,new K(bae.clusterStatus)),e.set($.OPERATIONS_ENUM.CLUSTER_NETWORK,new K(Nae)),e.set($.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new K(jO.setRoutes)),e.set($.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new K(jO.getRoutes)),e.set($.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new K(jO.deleteRoutes)),e.set($.OPERATIONS_ENUM.EXPORT_TO_S3,new K(Ss,UG.export_to_s3)),e.set($.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new K(Ss,ed.deleteFilesBefore)),e.set($.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new K(Ss,ed.deleteFilesBefore)),e.set($.OPERATIONS_ENUM.EXPORT_LOCAL,new K(Ss,UG.export_local)),e.set($.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new K(XO.handleGetJobsByStartDate)),e.set($.OPERATIONS_ENUM.GET_JOB,new K(XO.handleGetJob)),e.set($.OPERATIONS_ENUM.GET_FINGERPRINT,new K(zO.getFingerprint)),e.set($.OPERATIONS_ENUM.SET_LICENSE,new K(zO.setLicense)),e.set($.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new K(zO.getRegistrationInfo)),e.set($.OPERATIONS_ENUM.RESTART,new K(BG.restart)),e.set($.OPERATIONS_ENUM.RESTART_SERVICE,new K(Ss,BG.restartService)),e.set($.OPERATIONS_ENUM.CATCHUP,new K(Gae)),e.set($.OPERATIONS_ENUM.SYSTEM_INFORMATION,new K(wae.systemInformation)),e.set($.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new K(Ss,ed.deleteAuditLogsBefore)),e.set($.OPERATIONS_ENUM.READ_AUDIT_LOG,new K(Sae)),e.set($.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new K(xG.createTokens)),e.set($.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new K(xG.refreshOperationToken)),e.set($.OPERATIONS_ENUM.LOGIN,new K(GG.login)),e.set($.OPERATIONS_ENUM.LOGOUT,new K(GG.logout)),e.set($.OPERATIONS_ENUM.GET_CONFIGURATION,new K(qG.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(FG.readTransactionLog)),e.set($.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new K(Ss,FG.deleteTransactionLogsBefore)),e.set($.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new K(kG.installModules)),e.set($.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new K(kG.auditModules)),e.set($.OPERATIONS_ENUM.GET_BACKUP,new K(vi.getBackup)),e}a(qae,"initializeOperationFunctionMap")});var yp=g((SNe,XG)=>{"use strict";var tb=L(),Fae=Y(),nd=k(),{handleHDBError:rb,hdb_errors:Np}=ie(),{isMainThread:kae}=require("worker_threads"),{Readable:$ae}=require("stream"),zG=require("os"),Vae=require("util"),Yae=qR(),Kae=Vae.promisify(Yae.authorize),JG=jG(),{createGzip:Wae,constants:Qae}=require("zlib");function jae(e){let t=`Found an uncaught exception with message: ${e.message}. ${zG.EOL}Stack: ${e.stack} ${zG.EOL}Terminating ${kae?"HDB":"thread"}.`;console.error(t),nd.fatal(t),process.exit(1)}a(jae,"handleServerUncaughtException");function zae(e,t,r){if(nd[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:Np.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(zae,"serverErrorHandler");function Jae(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=rb(new Error,"Invalid JSON.",Np.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(Fae.isEmpty(e.body.operation)){let n=rb(new Error,"Request body must include an 'operation' property.",Np.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(Jae,"reqBodyValidationHandler");function Xae(e,t,r){let n;e.body.operation!==tb.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==tb.OPERATIONS_ENUM.LOGIN&&e.body.operation!==tb.OPERATIONS_ENUM.LOGOUT?Kae(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{nd.warn(s),nd.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(rb(s,i,Np.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(Xae,"authHandler");async function Zae(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 $ae&&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(Wae({level:Qae.Z_BEST_SPEED})))}return s}catch(s){throw nd.error(s),s}}a(Zae,"handlePostRequest");XG.exports={authHandler:Xae,handlePostRequest:Zae,handleServerUncaughtException:jae,serverErrorHandler:zae,reqBodyValidationHandler:Jae}});var rq=g((gNe,tq)=>{"use strict";var ece=require("fastify-plugin"),{handlePostRequest:ZG,authHandler:tce,reqBodyValidationHandler:rce}=yp();async function nce(e){e.decorate("hdbCore",{preValidation:[rce,tce],request:t=>eq(ZG(t,response)),requestWithoutAuthentication:(t,r)=>eq(ZG(t,r,!0))})}a(nce,"hdbCore");async function eq(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(eq,"convertAsyncIterators");tq.exports=ece(nce)});var sq=g((ONe,nq)=>{"use strict";var ANe=require("fs"),Ip=X();Ip.initSync();var{CONFIG_PARAMS:nb}=L(),sce=1024*1024*1024;function ice(e){let t=Ip.get(nb.HTTP_TIMEOUT),r=Ip.get(nb.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:sce,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:Ip.get(nb.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(ice,"getServerOptions");nq.exports=ice});var aq=g((NNe,oq)=>{"use strict";var sb=X();sb.initSync();var{CONFIG_PARAMS:iq}=L();function oce(){let e=sb.get(iq.HTTP_CORSACCESSLIST),t=sb.get(iq.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(oce,"getCORSOptions");oq.exports=oce});var uq=g((INe,lq)=>{"use strict";var cq=X();cq.initSync();var ace=L();function cce(){return cq.get(ace.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(cce,"getHeaderTimeoutConfig");lq.exports=cce});var ob={};$e(ob,{customFunctionsServer:()=>_ce,ready:()=>Nq,start:()=>uce});function uce(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Bi||(Bi=bq(t),dt.http((await Bi).server));let o=await Bi,c=(0,ib.dirname)(s),l=(0,ib.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!_q.has(c)){_q.add(c);try{o.register(fce(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:Nq}}async function _ce(){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 dce();let e=mq.get(Sq.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Bi=await bq(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 dce(){try{We.info("Custom Functions starting configuration."),await Tq.setUsersToGlobal(),We.info("Custom Functions completed configuration.")}catch(e){We.error(e)}}function fce(e,t){return async function(r){try{We.info("Custom Functions starting buildRoutes"),We.trace("Loading fastify routes folder "+e),(0,dq.existsSync)(e)&&r.register(pq.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 bq(e){We.info("Custom Functions starting buildServer.");let t=(0,gq.default)(e),r=(0,fq.default)(t);r.server.headersTimeout=(0,Aq.default)(),r.setErrorHandler(Oq.serverErrorHandler);let n=(0,Rq.default)();return n&&r.register(Eq.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(hq.default),await r.register(lce),await r.after(),EO(r),We.info("Custom Functions completed buildServer."),r}function Nq(){if(Bi)return Bi.then?Bi.then(e=>e.ready()):Bi.ready()}var ib,dq,fq,Eq,hq,pq,mq,Sq,We,lce,Tq,gq,Rq,Aq,Oq,Bi,_q,yq=be(()=>{ib=require("path"),dq=require("fs"),fq=x(require("fastify")),Eq=x(require("@fastify/cors")),hq=x(yO()),pq=x(require("@fastify/autoload")),mq=x(X()),Sq=x(L()),We=x(k()),lce=x(rq()),Tq=x(Ur()),gq=x(sq()),Rq=x(aq()),Aq=x(uq()),Oq=x(yp());zc();Cr();_q=new Set;a(uce,"start");a(_ce,"customFunctionsServer");a(dce,"setUp");a(fce,"buildRouteFolder");a(bq,"buildServer");a(Nq,"ready")});var ab={};$e(ab,{start:()=>Ece});function Ece(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,Lq.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){wq||(wq=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=Iq.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,Cq.default)(s,(0,Dq.realpathSync)(o))}}return i(s)},{runFirst:!0})),Iq.set(r,n)}}}var Cq,Dq,Lq,Iq,wq,Pq=be(()=>{Cq=x(require("send")),Dq=require("fs"),Lq=x(require("serve-static")),Iq=new Map;a(Ece,"start")});var _b={};$e(_b,{Request:()=>cb,createReuseportFd:()=>wp});var Mq,cb,lb,ub,wp,Cp=be(()=>{Mq=require("os"),cb=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 ub(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 lb(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},lb=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)}},ub=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,Mq.platform)()!="win32"&&(wp=require("node-unix-socket").createReuseportFd)});var Rb=g(Mo=>{"use strict";var{isMainThread:Eb,parentPort:id,threadId:Dp}=require("worker_threads"),{Socket:hce,createServer:pce}=require("net"),{createServer:mce,IncomingMessage:Sce}=require("http"),{createServer:Tce}=require("https"),{readFileSync:gce,unlinkSync:Uq,existsSync:Rce}=require("fs"),kt=k(),ke=X(),pt=L(),{server:Mp}=(Cr(),ae(zo)),{WebSocketServer:Ace}=require("ws"),{createSecureContext:Oce,createServer:bce}=require("node:tls"),{getTicketKeys:Gq,restartNumber:Nce,getWorkerIndex:od}=rt(),{Headers:qq,appendHeader:yce}=(D_(),ae(YB)),{recordAction:sd,recordActionBinary:vq}=(Ti(),ae(ju)),{Request:Fq,createReuseportFd:Bq}=(Cp(),ae(_b)),{checkMemoryLimit:Ice}=ua(),{X509Certificate:wce}=require("crypto"),kq=require("tls"),Cce=kq.createSecureContext,fl;kq.createSecureContext=function(e){return fl||Cce(e)};var $q=ke.get(pt.CONFIG_PARAMS.THREADS_DEBUG);if($q){let e;if(Eb)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&&od()>=0&&(e=t+od())}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&&Eb)try{require("inspector").open(9229)}catch(e){Nce<=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:UNe,CONFIG_PARAMS:Dce}=pt;ke.initSync();var Lce=ke.get(Dce.HTTP_SESSIONAFFINITY),Ws={};Mo.registerServer=Sb;Mo.httpServer=Tb;Mo.deliverSocket=mb;Mo.startServers=Vq;Mo.when_components_loaded=null;Mo.createSNICallback=gb;Mp.http=Tb;Mp.request=vce;Mp.socket=Bce;Mp.ws=Hce;var db={},Lp={},Pce,Hi={},Pp={},Mce=[],hb=[];function Vq(){return Mo.when_components_loaded=Up().loadRootComponents(!0).then(()=>{id?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)mb(n,r,s);else if(t.requestId)Uce(t);else if(t.type===pt.ITC_EVENT_TYPES.SHUTDOWN){kt.trace("received shutdown request",Dp);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
29
+ `},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:cu,serialize:Y_,deserialize:vie,q:.5};Xt.set("*/*",Tx);Xt.set("",Tx);a(vie,"tryJSONParse");a(EO,"registerContentHandlers");Bie=require("fastify-plugin"),Hie=Bie(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Xh(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(Xh,"findBestSerializer");fx=uO.default.get(_O.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Zh,"serialize");a(Pa,"serializeMessage");a(xie,"streamToBuffer");a(Ba,"getDeserializer");a(Ex,"deserializerUnknownType");a(Gie,"transformIterable")});function mO(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?mO(d.conditions,d.operator,r,n,s,i,o,c):il(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 g=h.operator==="or",N=u(h.conditions,!g,f);return g?(A,P)=>N.some(v=>v(A,P)):(A,P)=>N.every(v=>v(A,P))}let S=(h.attribute||h[0])===r.primaryKey,T=j_(h,r,i,c,S,f);return E&&m<d.length-1&&f&&(f=Qie(r.primaryStore,h.estimated_count,f)),T}).filter(Boolean)}a(u,"mapConditionsToFilters")}function il(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(Array.isArray(o)){let g=o[0],N=Mi(n.attributes,g);if(N.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 A=N.definition?.tableClass||N.elements?.definition?.tableClass,P=new Map,v=il({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,A,s,P);if(N.relationship.to){i[o[0]]=P;let q=!!Mi(A.attributes,N.relationship.to)?.elements;v=$ie(v,N,A.primaryStore,q,P)}if(N.relationship.from){let q=a(U=>il({attribute:N.relationship.from,value:U},t,r,n,s,P),"searchEntry");N.elements?(i[o[0]]=P,v=Yie(v,N,A.primaryStore,P,q)):v=v.flatMap(q)}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(SO[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>$n.MAX_SEARCH_KEY_LENGTH&&(_=_.slice(0,$n.MAX_SEARCH_KEY_LENGTH)+$n.OVERFLOW_MARKER,E=!1,h=j_(e,n,null,i,m)),typeof u=="string"&&u.length>$n.MAX_SEARCH_KEY_LENGTH&&(u=u.slice(0,$n.MAX_SEARCH_KEY_LENGTH)+$n.OVERFLOW_MARKER,d=!0,h=h??j_(e,n,null,i,m)),r){let g=_;_=u,u=g,g=!E,E=!d,d=g}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??j_(e,n,null,i,m),!h)throw new Tn.ClientError(`Unknown search operator ${e.comparator}`)}let T={start:_,end:u,inclusiveEnd:d,exclusiveStart:E,values:!0,versions:m,transaction:t,reverse:r};if(m){let g=S.getRange(T).map(h?function({key:N,value:A}){return this.isSync?A&&h(A)?N:Co.SKIP:new Promise((P,v)=>setImmediate(()=>{try{P(A&&h(A)?N:Co.SKIP)}catch(q){v(q)}}))}:N=>N.value==null?Co.SKIP:N);return g.hasEntries=!0,g}else return S?S.getRange(T).map(h?function({key:g,value:N}){let A;return typeof g=="string"&&g.length>$n.MAX_SEARCH_KEY_LENGTH?A=n.primaryStore.get(N):A={[o]:g},this.isSync?h(A)?N:Co.SKIP:new Promise((P,v)=>setImmediate(()=>{try{P(h(A)?N:Co.SKIP)}catch(q){v(q)}}))}:({value:g})=>g):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:g,value:N}){return this.isSync?N&&h(N)?g:Co.SKIP:new Promise((A,P)=>setImmediate(()=>{try{A(N&&h(N)?g:Co.SKIP)}catch(v){P(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 $ie(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 Yie(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 j_(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=j_({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,T=a((g,N)=>{let A,P;if(m){if(m.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let q of h.idFilter.idSet)e={attribute:m.from,value:q};S=_(m.from,h.idFilter,!0,!0)}else S=_(m.from,h.idFilter,!1,!0);let v=S(g);return S.idFilter&&(T.idFilter=S.idFilter),v}P=m(g,r,N),A=P?.value}else A=g[u];return A?Array.isArray(A)?A.some(h):h(A,P):!1},"recordFilter");return T}}switch(l instanceof Date&&(l=l.getTime()),SO[o]||o){case $n.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&&tp(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(E=!1));let m=0,S=3;function T(g){let N=g[u],A;if(typeof N!="object"||!N||f?A=d(N):Array.isArray(N)?A=N.some(d):N instanceof Date&&(A=d(N.getTime())),E&&(S++,!A&&!T.idFilter&&++m/S*(i-S)>h)){let P=il(e,r.transaction.getReadTxn(),!1,t).map(hs),v=new Set(P);T.idFilter=q=>v.has(hs(q)),T.idFilter.idSet=v}return A}return a(T,"recordFilter"),s&&(T.idFilter=d),T}a(_,"attributeComparator")}function tp(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=SO[n]||n,n===$n.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=tp(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=kie*Pi(e.primaryStore)+1:n==="between"?r.estimated_count=Fie*Pi(e.primaryStore)+1:n==="sort"?r.estimated_count=Pi(e.primaryStore)+1:r.estimated_count=qie*Pi(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function rp(e){if(e)if(Lo=e,nl.lastIndex=0,Kie.test(e))try{let t=W_(new sl,"");if(Wr!==Lo.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 '${Lo}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function W_(e,t){let r=nl,n,s,i,o,c,l=decodeURIComponent,_;for(;n=r.exec(Lo);){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=hO}else{if(l=decodeURIComponent,i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");s=Q_(u)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=Vie[d],l=pO[i]?hO:decodeURIComponent,!u)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=Q_(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),ep(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(Q_(u)),s=void 0;break;case"(":nl.lastIndex=Wr;let f=W_(u?[]:new sl,")");switch(u){case"":ep(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}`)}Lo[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");nl.lastIndex=Wr,E=W_([],"}"),E.name=u,e.push(E),Lo[Wr]===","?r.lastIndex=++Wr:o=!0;break;case"[":nl.lastIndex=Wr,u?(E=W_(new sl,"]"),E.name=u):E=W_(e.conditions?new sl:[],"]"),e.conditions?(ep(e,_),e.conditions.push(E),s=null):e.push(E),Lo[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),ep(e,_),e.conditions.push(h)}else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(Q_(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?Wie:nl,r.lastIndex=Wr),Wr===Lo.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function ep(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 Q_(e){return e.indexOf(".")>-1?e.split(".").map(Q_):decodeURIComponent(e)}function hO(e){if(e==="null")return null;if(e.indexOf("/")>-1){let t=e.split("/"),r=new ol(t.length);for(let n=0,s=t.length;n<s;n++)r[n]=hO(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 Qie(e,t,r){return t*r/Pi(e)}var Tn,$n,Ys,Co,qie,Fie,kie,Vie,pO,SO,Kie,nl,Wie,Wr,Lo,sl,np=be(()=>{Tn=x(ie()),$n=x(_t()),Ys=require("ordered-binary"),Co=require("lmdb");Mn();qie=.3,Fie=.1,kie=.05,Vie={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},pO={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(mO,"executeConditions");a(il,"searchByIndex");a(Mi,"findAttribute");a($ie,"joinTo");a(Yie,"joinFrom");SO={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(j_,"filterByType");a(tp,"estimateCondition");Kie=/[()[\]|!<>.]|(=\w*=)/,nl=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,Wie=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(rp,"parseQuery");a(W_,"parseBlock");a(ep,"assignOperator");a(Q_,"decodeProperty");a(hO,"typedDecoding");a(Rx,"wildcardDecoding");a(Ax,"toSortObject");a(Ox,"toSortEntry");sl=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(Qie,"intersectionEstimate")});function wx(e){let t={openapi:jie,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:N,name:A,elements:P,relationship:v,definition:q}of o){if(v)N==="array"?_[A]={type:"array",items:{$ref:Do+P.type}}:_[A]={$ref:Do+N};else{let U=q??P?.definition;if(U){if(!t.components.schemas[U.type]){let W={};U.properties.forEach(z=>{W[z.name]=new AO(TO[z.type],z.type)}),t.components.schemas[U.type]=new yx(W)}N==="array"?_[A]={type:"array",items:{$ref:Do+U.type}}:_[A]={$ref:Do+U.type}}else N==="array"?P.type==="Any"||P.type=="ID"?_[A]={type:"array",items:{format:P.type}}:_[A]={type:"array",items:new AO(TO[P.type],P.type)}:N==="Any"||N=="ID"?_[A]={format:N}:_[A]=new AO(TO[N],N)}u.push(new OO(A,"query",_[A]))}let d=Object.keys(_),E=new OO(c,"path",{format:"ID"});E.required=!0,E.description="primary key of record";let f=new OO("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",T=typeof l.delete=="function",g="/"+s+"/";h&&(t.paths[g]={},t.paths[g].post=new zie(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[g]||(t.paths[g]={}),t.paths[g].get=new gO(u,r,{200:new RO({$ref:Do+i})},"search for records by the specified property name and value pairs")),T&&(t.paths[g]||(t.paths[g]={}),t.paths[g].delete=new Nx(u,r,"delete all the records that match the provided query",{204:new bx})),g="/"+s+"/{"+c+"}",S&&(t.paths[g]={},t.paths[g].get=new gO([E],r,{200:new RO({$ref:Do+i})},"retrieve a record by its primary key")),m&&(t.paths[g]||(t.paths[g]={}),t.paths[g].put=new Jie([E],r,i,"create or update the record with the URL path that maps to the record's primary key")),T&&(t.paths[g]||(t.paths[g]={}),t.paths[g].delete=new Nx([E],r,"delete a record with the given primary key",{204:new bx})),S&&f.schema.enum.length>0&&(g="/"+s+"/{"+c+"}.{property}",t.paths[g]={},t.paths[g].get=new gO([E,f],r,{200:new RO({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function zie(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Do+e}}}},this.security=t,this.responses={200:{description:bO,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function gO(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function RO(e){this.description=bO,this.content={"application/json":{schema:e}}}function bx(){this.description="successfully processed request, no content returned to client"}function Jie(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Do+r}}}},this.responses={200:{description:bO}}}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 AO(e,t){this.type=e,this.format=t}function OO(e,t,r){this.name=e,this.in=t,this.schema=r}var Ix,jie,TO,Do,bO,Cx=be(()=>{Ix=x(gi()),jie="3.0.3",TO={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Do="#/components/schemas/",bO="successful operation";a(wx,"generateJsonApi");a(zie,"Post");a(gO,"Get");a(RO,"Response200");a(bx,"Response204");a(Jie,"Put");a(Nx,"Delete");a(yx,"ResourceSchema");a(AO,"Type");a(OO,"Parameter")});var ip={};Ve(ip,{start:()=>eoe});async function Zie(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&rp(e);let s=new yo;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==Lx){let f=sp.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 al.ClientError(f,400)}if(e.authorize=!0,i===Lx&&n==="GET"){if(e?.user?.role?.permission?.super_user)return wx(sp);throw new al.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 al.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new al.ServerError(`Method ${n} is not recognized`,501)}}),_=200,u;if(l==null)_=n==="GET"||n==="HEAD"?404:204,NO.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(u=e.lastModified){Xie[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),NO.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=Zh(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=Zh(i.contentType?i:i.toString(),e,o),o}}function eoe(e){NO=e,!Dx&&(Dx=!0,sp=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Zie(t,r)},e),e.server.ws(async(t,r,n)=>{z_++;let s=new ts;Px||(Px=!0,Qu(l=>{z_>0&&l.push({metric:"ws-connections",connections:z_,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",()=>{z_--,En(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),_=sp.getMatch(l);if(En(!!_,"connection","ws","connect"),_){r.handlerPath=_.path,hr(h=>({count:h.count,total:z_}),"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(toe[l.statusCode]||1011,l.toString()),t.close("login failed")}t.close()},e))}var Ha,al,ir,Xie,NO,Lx,Dx,sp,Px,z_,toe,Mx=be(()=>{zc();Si();Ha=x(k()),al=x(ie());np();ou();ha();L_();Cx();ir=new Uint8Array(8),Xie=new Float64Array(ir.buffer,0,1),NO={},Lx="openapi";a(Zie,"http");z_=0;a(eoe,"start");toe={401:3e3,403:3003}});var yO=R((kbe,vx)=>{var{recordAction:op,recordActionBinary:Ux}=(Si(),ae(ju)),roe=require("fastify-plugin"),noe=200;vx.exports=roe(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),op(o,"duration",_,d,u),Ux(s.raw.statusCode<400,"success",_,d,u),Ux(1,"response_"+s.raw.statusCode,_,d,u);let E=noe;i?.pipe?(i.on("data",S=>{E+=S.length}),i.on("end",()=>{op(performance.now()-c,"transfer",_,d,u),op(E,"bytes-sent",_,d,u)})):(E+=i?.length||0,op(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 PO=R((Ybe,Gx)=>{var up=require("clone"),_p=nt(),soe=Y(),cp=D(),Vbe=k(),IO=require("fs"),CO=require("joi"),{string:lp}=CO.types(),{hdb_errors:ioe,handleHDBError:ap}=ie(),{HDB_ERROR_MSGS:$be,HTTP_STATUS_CODES:wO}=ioe,{common_validators:cl}=Ps(),Bx=" is required",ooe=["insert","update","upsert"],LO={database:{presence:!1,format:cl.schema_format,length:cl.schema_length},schema:{presence:!1,format:cl.schema_format,length:cl.schema_length},table:{presence:!0,format:cl.schema_format,length:cl.schema_length},action:{inclusion:{within:ooe,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},aoe={schema:lp.required(),table:lp.required(),action:lp.valid("insert","update","upsert")},{AWS_ACCESS_KEY:coe,AWS_SECRET:loe,AWS_BUCKET:uoe,AWS_FILE_KEY:_oe,REGION:doe}=cp.S3_BUCKET_AUTH_KEYS,foe={s3:{presence:!0},[`s3.${coe}`]:{presence:!0,type:"String"},[`s3.${loe}`]:{presence:!0,type:"String"},[`s3.${uoe}`]:{presence:!0,type:"String"},[`s3.${_oe}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${doe}`]:{presence:!0,type:"String"}},Hx=up(LO);Hx.data.presence={message:Bx};var xx=up(LO);xx.file_path.presence={message:Bx};var Eoe=Object.assign(up(LO),foe),DO=up(aoe);DO.csv_url=lp.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();DO.passthrough_headers=CO.object();function hoe(e){let t=_p.validateObject(e,Hx);return dp(e,t)}a(hoe,"dataObject");function poe(e){let t=_p.validateBySchema(e,CO.object(DO));return dp(e,t)}a(poe,"urlObject");function moe(e){let t=_p.validateObject(e,xx);return dp(e,t)}a(moe,"fileObject");function Soe(e){let t=_p.validateObject(e,Eoe);return dp(e,t)}a(Soe,"s3FileObject");function dp(e,t){if(!t){let r=soe.checkGlobalSchemaTable(e.schema,e.table);if(r)return ap(new Error,r,wO.BAD_REQUEST);if(e.operation===cp.OPERATIONS_ENUM.CSV_FILE_LOAD)try{IO.accessSync(e.file_path,IO.constants.R_OK|IO.constants.F_OK)}catch(n){return n.code===cp.NODE_ERROR_CODES.ENOENT?ap(n,`No such file or directory ${n.path}`,wO.BAD_REQUEST):n.code===cp.NODE_ERROR_CODES.EACCES?ap(n,`Permission denied ${n.path}`,wO.BAD_REQUEST):ap(n)}}return t}a(dp,"postValidateChecks");Gx.exports={dataObject:hoe,urlObject:poe,fileObject:moe,s3FileObject:Soe}});var MO=R((Wbe,qx)=>{"use strict";var J_=k(),fp=D();async function Toe(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===fp.OPERATIONS_ENUM.INSERT||t.operation===fp.OPERATIONS_ENUM.UPDATE||t.operation===fp.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===fp.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(Toe,"callOperationFunctionAsAwait");qx.exports={callOperationFunctionAsAwait:Toe}});var kx=R((jbe,Fx)=>{"use strict";var UO=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}},vO=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:UO,BulkLoadDataObject:vO}});var $x=R((Jbe,Vx)=>{"use strict";var BO=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};Vx.exports=BO});var kO=R((nNe,aG)=>{"use strict";var Ep=Pr(),pp=PO(),goe=require("needle"),ps=D(),Zbe=Ze(),ll=Y(),{handleHDBError:ht,hdb_errors:Zx}=ie(),{HTTP_STATUS_CODES:or,HDB_ERROR_MSGS:qt,CHECK_LOGS_WRAPPER:Ga}=Zx,ul=k(),HO=require("papaparse");ll.promisifyPapaParse();var ms=require("fs-extra"),Roe=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"),Aoe=X(),eG=MO(),Ooe=aO(),{BulkLoadFileObject:GO,BulkLoadDataObject:boe}=kx(),qO=JA(),{verifyBulkLoadAttributePerms:tG}=Kh(),eNe=$x(),tNe=gt(),rNe=fi(),{databases:Noe}=(Re(),ae($e)),{coerceType:yoe}=(mp(),ae(VO)),zx="No records parsed from csv file.",xa=`${Aoe.get("HDB_ROOT")}/tmp`,{schema_regex:Ioe}=Ps(),Jx=1024*1024*2,Xx=5e3,woe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};aG.exports={csvDataLoad:Coe,csvURLLoad:Loe,csvFileLoad:Doe,importFromS3:Poe};async function Coe(e,t){let r=pp.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=HO.parse(e.data,{header:!0,skipEmptyLines:!0,transform:xO.bind(null,s),dynamicTyping:!1}),o=new qO;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 boe(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(Coe,"csvDataLoad");async function Loe(e){let t=pp.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 Moe(e,r)}catch(s){throw ul.error(qt.DOWNLOAD_FILE_ERR(r)+" - "+s),ht(s,Ga(qt.DOWNLOAD_FILE_ERR(r)))}try{let s=new GO(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 FO(s);return await hp(n),i}catch(s){throw await hp(n),qa(s)}}a(Loe,"csvURLLoad");async function Doe(e){let t=pp.fileObject(e);if(t)throw ht(t,t.message,or.BAD_REQUEST,void 0,void 0,!0);let r=new GO(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 FO(r)}catch(n){throw qa(n)}}a(Doe,"csvFileLoad");async function Poe(e){let t=pp.s3FileObject(e);if(t)throw ht(t,t.message,or.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Roe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${xa}/${s}`;let i=new GO(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await Uoe(s,e);let o=await FO(i);return await hp(r),o}catch(n){throw await hp(r),qa(n)}}a(Poe,"importFromS3");async function Moe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await goe("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)}Boe(r,e.csv_url),await voe(t,r.raw)}a(Moe,"downloadCSVFile");async function Uoe(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 Ooe.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(){ul.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw ul.error(qt.S3_DOWNLOAD_ERR+" - "+r),ht(r,Ga(qt.S3_DOWNLOAD_ERR))}}a(Uoe,"downloadFileFromS3");async function voe(e,t){try{await ms.mkdirp(xa),await ms.writeFile(`${xa}/${e}`,t)}catch(r){throw ul.error(qt.WRITE_TEMP_FILE_ERR),ht(r,Ga(qt.DEFAULT_BULK_LOAD_ERR))}}a(voe,"writeFileToTempFolder");async function hp(e){if(e)try{await ms.access(e),await ms.unlink(e)}catch{ul.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(hp,"deleteTempFile");function Boe(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(!woe[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(Boe,"validateURLResponse");async function FO(e){try{let t;switch(e.file_type){case ps.VALID_S3_FILE_TYPES.CSV:t=await Hoe(e);break;case ps.VALID_S3_FILE_TYPES.JSON:t=await xoe(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(FO,"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 Ep.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;ll.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!ll.isEmpty(c)&&!ll.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 Hoe(e){let t={records:0,number_written:0},r=sG(e.schema,e.table);try{let n=new qO,s=ms.createReadStream(e.file_path,{highWaterMark:Jx});s.setEncoding("utf8"),await HO.parsePromise(s,rG.bind(null,e,n),xO.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 HO.parsePromise(s,nG.bind(null,e,t),xO.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(Hoe,"callPapaParse");function sG(e,t){let r=Noe[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>yoe(i,s));return n}a(sG,"createTransformMap");function xO(e,t,r){let n=e.get(r);return n?n(t):ll.autoCast(t)}a(xO,"typeFunction");async function xoe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new qO,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(xoe,"insertJson");async function iG(e){let t={};try{e.data&&e.data.length>0&&Goe(e.data[0])?t=await qoe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",ul.info(t.message))}catch(r){throw qa(r)}return t}a(iG,"callBulkFileLoad");function Goe(e){let t=Object.keys(e);for(let r of t)if(!Ioe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Goe,"validateColumnNames");async function qoe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=Ep.insert;break;case"update":i=Ep.update;break;case"upsert":i=Ep.upsert;break;default:throw 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=ll.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw qa(o)}}a(qoe,"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((iNe,cG)=>{"use strict";var $O=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};cG.exports=$O});var dG=R((aNe,_G)=>{"use strict";var Foe=D(),uG=require("moment"),koe=require("uuid").v4,YO=class{static{a(this,"JobObject")}constructor(){this.id=koe(),this.type=void 0,this.start_datetime=uG().valueOf(),this.created_datetime=uG().valueOf(),this.end_datetime=void 0,this.status=Foe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};_G.exports=YO});var KO=R((lNe,gG)=>{"use strict";var Voe=require("uuid").v4,mG=Pr(),SG=ur(),$oe=as(),Yoe=Nc(),Koe=lG(),et=D(),Woe=dG(),Qoe=GE(),Yn=k(),joe=su(),_l=Y(),{promisify:zoe}=require("util"),Fa=require("moment"),Joe=Qh(),Sp=PO(),fG=OT(),{deleteTransactionLogsBeforeValidator:Xoe}=KA(),{handleHDBError:EG,hdb_errors:Zoe}=ie(),{HTTP_STATUS_CODES:hG}=Zoe,pG=SG.searchByValue,eae=SG.searchByHash,tae=mG.insert,rae=zoe(Joe.evaluateSQL),nae=mG.update;gG.exports={addJob:oae,updateJob:cae,handleGetJob:sae,handleGetJobsByStartDate:iae,getJobById:TG};async function sae(e){try{let t=await TG(e.id);return _l.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(sae,"handleGetJob");async function iae(e){try{let t=await aae(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(iae,"handleGetJobsByStartDate");async function oae(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||_l.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=Sp.fileObject(e);break;case et.OPERATIONS_ENUM.CSV_URL_LOAD:n=Sp.urlObject(e);break;case et.OPERATIONS_ENUM.CSV_DATA_LOAD:n=Sp.dataObject(e);break;case et.OPERATIONS_ENUM.IMPORT_FROM_S3:n=Sp.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=Xoe(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 Woe;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 $oe(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 joe(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await tae(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(oae,"addJob");async function aae(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 Koe(n,e.hdb_user);try{return await rae(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(aae,"getJobsInDateRange");async function TG(e){if(_l.isEmptyOrZeroLength(e))return _l.errorizeMessage("Invalid job ID specified.");let t=new Yoe(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await eae(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Yn.error(n),_l.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(TG,"getJobById");async function cae(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(_l.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 Qoe(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await nae(t),r}a(cae,"updateJob")});var wG=R((_Ne,IG)=>{"use strict";var RG=Y(),Ft=D(),lae=require("moment"),Tp=kO(),X_=k(),AG=KO(),OG=jh(),bG=ia(),NG=rt(),uae=kh(),_ae=bo(),{parentPort:dae,isMainThread:yG}=require("worker_threads"),{onMessageByType:fae}=rt(),WO=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Eae(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,Tp.csvFileLoad);break;case Ft.JOB_TYPE_ENUM.csv_url_load:await Ks(e,Tp.csvURLLoad);break;case Ft.JOB_TYPE_ENUM.csv_data_load:await Ks(e,Tp.csvDataLoad);break;case Ft.JOB_TYPE_ENUM.import_from_s3:await Ks(e,Tp.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,uae.deleteTransactionLogsBefore);break;case Ft.JOB_TYPE_ENUM.restart_service:return await Ks(e,_ae.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(Eae,"parseMessage");async function Ks(e,t){try{e.job.status=Ft.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=lae().valueOf(),await AG.updateJob(e.job),await hae(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):X_.error(`There was an error running ${t.name} job with id ${e.job.id}`),X_.error(n),e.job.message=n,e.job.status=Ft.JOB_STATUS_ENUM.ERROR;try{await AG.updateJob(e.job)}catch(s){throw X_.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Ks,"runJob");async function hae(e){X_.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}`})}):dae.postMessage({type:Ft.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(hae,"launchJobThread");yG&&fae(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){X_.error(r)}});IG.exports={parseMessage:Eae,RunnerMessage:WO}});var LG=R((fNe,CG)=>{"use strict";var QO=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};CG.exports=QO});var WG=R((hNe,eb)=>{"use strict";var bp=ur(),JO=Qh(),gp=kO(),Ui=PE(),Rp=oo(),ed=ia(),pae=TR(),Z_=Ur(),Ap=BE(),ar=YA(),Op=k(),mae=LR(),Sae=__(),DG=lA(),Tae=XE(),gae=eh(),Rae=_A(),Aae=rh(),Oae=sh(),jO=oh(),PG=jh(),bae=Kh(),XO=KO(),V=D(),{hdb_errors:rd,handleHDBError:td}=ie(),{HTTP_STATUS_CODES:MG}=rd,zO=ch(),UG=bo(),VG=require("util"),dl=Pr(),Nae=Bn(),yae=Ti(),vG=wG(),BG=a_(),HG=(Ph(),ae(D_)),xG=Et(),GG=kh(),qG=Hh(),{setServerUtilities:Iae}=(mp(),ae(VO)),{CONTEXT:wae}=(Mn(),ae(Sg)),{_assignPackageExport:Cae}=require("../index"),{transformReq:Lae}=Y(),{server:Dae}=(Cr(),ae(jo)),Rr=Op.loggerWithTag("operation"),Pae=MO(),FG=bp.searchByHash,Mae=bp.searchByValue,Uae=VG.promisify(bp.search),vae=VG.promisify(JO.evaluateSQL),Bae={[V.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[V.OPERATIONS_ENUM.CREATE_TABLE]:!0,[V.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[V.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[V.OPERATIONS_ENUM.DROP_TABLE]:!0,[V.OPERATIONS_ENUM.DROP_SCHEMA]:!0},K=LG();async function $G(e,t){try{if(e.body.operation!=="read_log"&&(Op.log_level===V.LOG_LEVELS.INFO||Op.log_level===V.LOG_LEVELS.DEBUG||Op.log_level===V.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 Pae.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Bae[e.body.operation]&&Nae.setSchemaDataToGlobal(n=>{n&&Rr.error(n)}),r}a($G,"processLocalTransaction");var kG=xae();eb.exports={chooseOperation:YG,getOperationFunction:KG,operation:ZO,processLocalTransaction:$G};Iae(eb.exports);Dae.operation=ZO;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}`),td(new Error,o,rd.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.OPERATIONS_ENUM.LOGIN&&e.operation!==V.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=bae.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}`),td(new Error,o,rd.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw td(s,"There was an error when trying to choose an operation path")}return r}a(YG,"chooseOperation");function KG(e){if(Rr.trace(`getOperationFunction with operation: ${e.operation}`),kG.has(e.operation))return kG.get(e.operation);throw td(new Error,rd.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),rd.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(KG,"getOperationFunction");Cae("operation",ZO);function ZO(e,t){e.hdb_user=this[wae]?.user,e.bypass_auth=!t;let r=YG(e);return $G({body:e},r)}a(ZO,"operation");async function Hae(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[V.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case V.OPERATIONS_ENUM.INSERT:o=await dl.insert(i);break;case V.OPERATIONS_ENUM.UPDATE:o=await dl.update(i);break;case V.OPERATIONS_ENUM.UPSERT:o=await dl.upsert(i);break;case V.OPERATIONS_ENUM.DELETE:o=await ed.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(Hae,"catchup");async function Ss(e){Lae(e);let t,r;try{r=await XO.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),td(n,s)}}a(Ss,"executeJob");function xae(){let e=new Map;return e.set(V.OPERATIONS_ENUM.INSERT,new K(dl.insert)),e.set(V.OPERATIONS_ENUM.UPDATE,new K(dl.update)),e.set(V.OPERATIONS_ENUM.UPSERT,new K(dl.upsert)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new K(bp.searchByConditions)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_HASH,new K(FG)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_ID,new K(FG)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_VALUE,new K(Mae)),e.set(V.OPERATIONS_ENUM.SEARCH,new K(Uae)),e.set(V.OPERATIONS_ENUM.SQL,new K(vae)),e.set(V.OPERATIONS_ENUM.CSV_DATA_LOAD,new K(Ss,gp.csvDataLoad)),e.set(V.OPERATIONS_ENUM.CSV_FILE_LOAD,new K(Ss,gp.csvFileLoad)),e.set(V.OPERATIONS_ENUM.CSV_URL_LOAD,new K(Ss,gp.csvURLLoad)),e.set(V.OPERATIONS_ENUM.IMPORT_FROM_S3,new K(Ss,gp.importFromS3)),e.set(V.OPERATIONS_ENUM.CREATE_SCHEMA,new K(Ui.createSchema)),e.set(V.OPERATIONS_ENUM.CREATE_DATABASE,new K(Ui.createSchema)),e.set(V.OPERATIONS_ENUM.CREATE_TABLE,new K(Ui.createTable)),e.set(V.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new K(Ui.createAttribute)),e.set(V.OPERATIONS_ENUM.DROP_SCHEMA,new K(Ui.dropSchema)),e.set(V.OPERATIONS_ENUM.DROP_DATABASE,new K(Ui.dropSchema)),e.set(V.OPERATIONS_ENUM.DROP_TABLE,new K(Ui.dropTable)),e.set(V.OPERATIONS_ENUM.DROP_ATTRIBUTE,new K(Ui.dropAttribute)),e.set(V.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new K(Rp.describeSchema)),e.set(V.OPERATIONS_ENUM.DESCRIBE_DATABASE,new K(Rp.describeSchema)),e.set(V.OPERATIONS_ENUM.DESCRIBE_TABLE,new K(Rp.describeTable)),e.set(V.OPERATIONS_ENUM.DESCRIBE_ALL,new K(Rp.describeAll)),e.set(V.OPERATIONS_ENUM.DELETE,new K(ed.deleteRecord)),e.set(V.OPERATIONS_ENUM.ADD_USER,new K(Z_.addUser)),e.set(V.OPERATIONS_ENUM.ALTER_USER,new K(Z_.alterUser)),e.set(V.OPERATIONS_ENUM.DROP_USER,new K(Z_.dropUser)),e.set(V.OPERATIONS_ENUM.LIST_USERS,new K(Z_.listUsersExternal)),e.set(V.OPERATIONS_ENUM.LIST_ROLES,new K(Ap.listRoles)),e.set(V.OPERATIONS_ENUM.ADD_ROLE,new K(Ap.addRole)),e.set(V.OPERATIONS_ENUM.ALTER_ROLE,new K(Ap.alterRole)),e.set(V.OPERATIONS_ENUM.DROP_ROLE,new K(Ap.dropRole)),e.set(V.OPERATIONS_ENUM.USER_INFO,new K(Z_.userInfo)),e.set(V.OPERATIONS_ENUM.READ_LOG,new K(mae)),e.set(V.OPERATIONS_ENUM.ADD_NODE,new K(Sae)),e.set(V.OPERATIONS_ENUM.UPDATE_NODE,new K(DG)),e.set(V.OPERATIONS_ENUM.SET_NODE_REPLICATION,new K(DG)),e.set(V.OPERATIONS_ENUM.REMOVE_NODE,new K(Tae)),e.set(V.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new K(gae)),e.set(V.OPERATIONS_ENUM.PURGE_STREAM,new K(Rae)),e.set(V.OPERATIONS_ENUM.SET_CONFIGURATION,new K(xG.setConfiguration)),e.set(V.OPERATIONS_ENUM.CLUSTER_STATUS,new K(Aae.clusterStatus)),e.set(V.OPERATIONS_ENUM.CLUSTER_NETWORK,new K(Oae)),e.set(V.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new K(jO.setRoutes)),e.set(V.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new K(jO.getRoutes)),e.set(V.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new K(jO.deleteRoutes)),e.set(V.OPERATIONS_ENUM.EXPORT_TO_S3,new K(Ss,PG.export_to_s3)),e.set(V.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new K(Ss,ed.deleteFilesBefore)),e.set(V.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new K(Ss,ed.deleteFilesBefore)),e.set(V.OPERATIONS_ENUM.EXPORT_LOCAL,new K(Ss,PG.export_local)),e.set(V.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new K(XO.handleGetJobsByStartDate)),e.set(V.OPERATIONS_ENUM.GET_JOB,new K(XO.handleGetJob)),e.set(V.OPERATIONS_ENUM.GET_FINGERPRINT,new K(zO.getFingerprint)),e.set(V.OPERATIONS_ENUM.SET_LICENSE,new K(zO.setLicense)),e.set(V.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new K(zO.getRegistrationInfo)),e.set(V.OPERATIONS_ENUM.RESTART,new K(UG.restart)),e.set(V.OPERATIONS_ENUM.RESTART_SERVICE,new K(Ss,UG.restartService)),e.set(V.OPERATIONS_ENUM.CATCHUP,new K(Hae)),e.set(V.OPERATIONS_ENUM.SYSTEM_INFORMATION,new K(yae.systemInformation)),e.set(V.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new K(Ss,ed.deleteAuditLogsBefore)),e.set(V.OPERATIONS_ENUM.READ_AUDIT_LOG,new K(pae)),e.set(V.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new K(BG.createTokens)),e.set(V.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new K(BG.refreshOperationToken)),e.set(V.OPERATIONS_ENUM.LOGIN,new K(HG.login)),e.set(V.OPERATIONS_ENUM.LOGOUT,new K(HG.logout)),e.set(V.OPERATIONS_ENUM.GET_CONFIGURATION,new K(xG.getConfiguration)),e.set(V.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new K(ar.customFunctionsStatus)),e.set(V.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new K(ar.getCustomFunctions)),e.set(V.OPERATIONS_ENUM.GET_COMPONENT_FILE,new K(ar.getComponentFile)),e.set(V.OPERATIONS_ENUM.GET_COMPONENTS,new K(ar.getComponents)),e.set(V.OPERATIONS_ENUM.SET_COMPONENT_FILE,new K(ar.setComponentFile)),e.set(V.OPERATIONS_ENUM.DROP_COMPONENT,new K(ar.dropComponent)),e.set(V.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new K(ar.getCustomFunction)),e.set(V.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new K(ar.setCustomFunction)),e.set(V.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new K(ar.dropCustomFunction)),e.set(V.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new K(ar.addComponent)),e.set(V.OPERATIONS_ENUM.ADD_COMPONENT,new K(ar.addComponent)),e.set(V.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new K(ar.dropCustomFunctionProject)),e.set(V.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new K(ar.packageComponent)),e.set(V.OPERATIONS_ENUM.PACKAGE_COMPONENT,new K(ar.packageComponent)),e.set(V.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new K(ar.deployComponent)),e.set(V.OPERATIONS_ENUM.DEPLOY_COMPONENT,new K(ar.deployComponent)),e.set(V.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new K(GG.readTransactionLog)),e.set(V.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new K(Ss,GG.deleteTransactionLogsBefore)),e.set(V.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new K(qG.installModules)),e.set(V.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new K(qG.auditModules)),e.set(V.OPERATIONS_ENUM.GET_BACKUP,new K(Ui.getBackup)),e}a(xae,"initializeOperationFunctionMap")});var yp=R((mNe,zG)=>{"use strict";var tb=D(),Gae=Y(),nd=k(),{handleHDBError:rb,hdb_errors:Np}=ie(),{isMainThread:qae}=require("worker_threads"),{Readable:Fae}=require("stream"),QG=require("os"),kae=require("util"),Vae=qR(),$ae=kae.promisify(Vae.authorize),jG=WG(),{createGzip:Yae,constants:Kae}=require("zlib");function Wae(e){let t=`Found an uncaught exception with message: ${e.message}. ${QG.EOL}Stack: ${e.stack} ${QG.EOL}Terminating ${qae?"HDB":"thread"}.`;console.error(t),nd.fatal(t),process.exit(1)}a(Wae,"handleServerUncaughtException");function Qae(e,t,r){if(nd[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:Np.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(Qae,"serverErrorHandler");function jae(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=rb(new Error,"Invalid JSON.",Np.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(Gae.isEmpty(e.body.operation)){let n=rb(new Error,"Request body must include an 'operation' property.",Np.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(jae,"reqBodyValidationHandler");function zae(e,t,r){let n;e.body.operation!==tb.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==tb.OPERATIONS_ENUM.LOGIN&&e.body.operation!==tb.OPERATIONS_ENUM.LOGOUT?$ae(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{nd.warn(s),nd.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(rb(s,i,Np.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(zae,"authHandler");async function Jae(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 Fae&&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(Yae({level:Kae.Z_BEST_SPEED})))}return s}catch(s){throw nd.error(s),s}}a(Jae,"handlePostRequest");zG.exports={authHandler:zae,handlePostRequest:Jae,handleServerUncaughtException:Wae,serverErrorHandler:Qae,reqBodyValidationHandler:jae}});var eq=R((TNe,ZG)=>{"use strict";var Xae=require("fastify-plugin"),{handlePostRequest:JG,authHandler:Zae,reqBodyValidationHandler:ece}=yp();async function tce(e){e.decorate("hdbCore",{preValidation:[ece,Zae],request:t=>XG(JG(t,response)),requestWithoutAuthentication:(t,r)=>XG(JG(t,r,!0))})}a(tce,"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=Xae(tce)});var rq=R((ANe,tq)=>{"use strict";var RNe=require("fs"),Ip=X();Ip.initSync();var{CONFIG_PARAMS:nb}=D(),rce=1024*1024*1024;function nce(e){let t=Ip.get(nb.HTTP_TIMEOUT),r=Ip.get(nb.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:rce,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:Ip.get(nb.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(nce,"getServerOptions");tq.exports=nce});var iq=R((bNe,sq)=>{"use strict";var sb=X();sb.initSync();var{CONFIG_PARAMS:nq}=D();function sce(){let e=sb.get(nq.HTTP_CORSACCESSLIST),t=sb.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(sce,"getCORSOptions");sq.exports=sce});var cq=R((yNe,aq)=>{"use strict";var oq=X();oq.initSync();var ice=D();function oce(){return oq.get(ice.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(oce,"getHeaderTimeoutConfig");aq.exports=oce});var ob={};Ve(ob,{customFunctionsServer:()=>lce,ready:()=>Oq,start:()=>cce});function cce(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,ib.dirname)(s),l=(0,ib.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!lq.has(c)){lq.add(c);try{o.register(_ce(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 lce(){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 uce();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 uce(){try{We.info("Custom Functions starting configuration."),await mq.setUsersToGlobal(),We.info("Custom Functions completed configuration.")}catch(e){We.error(e)}}function _ce(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(ace),await r.after(),EO(r),We.info("Custom Functions completed buildServer."),r}function Oq(){if(vi)return vi.then?vi.then(e=>e.ready()):vi.ready()}var ib,uq,_q,dq,fq,Eq,hq,pq,We,ace,mq,Sq,Tq,gq,Rq,vi,lq,bq=be(()=>{ib=require("path"),uq=require("fs"),_q=x(require("fastify")),dq=x(require("@fastify/cors")),fq=x(yO()),Eq=x(require("@fastify/autoload")),hq=x(X()),pq=x(D()),We=x(k()),ace=x(eq()),mq=x(Ur()),Sq=x(rq()),Tq=x(iq()),gq=x(cq()),Rq=x(yp());zc();Cr();lq=new Set;a(cce,"start");a(lce,"customFunctionsServer");a(uce,"setUp");a(_ce,"buildRouteFolder");a(Aq,"buildServer");a(Oq,"ready")});var ab={};Ve(ab,{start:()=>dce});function dce(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,Lq=be(()=>{Iq=x(require("send")),wq=require("fs"),Cq=x(require("serve-static")),Nq=new Map;a(dce,"start")});var _b={};Ve(_b,{Request:()=>cb,createReuseportFd:()=>wp});var Dq,cb,lb,ub,wp,Cp=be(()=>{Dq=require("os"),cb=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 ub(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 lb(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},lb=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)}},ub=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,Dq.platform)()!="win32"&&(wp=require("node-unix-socket").createReuseportFd)});var Rb=R(Po=>{"use strict";var{isMainThread:Eb,parentPort:id,threadId:Lp}=require("worker_threads"),{Socket:fce,createServer:Ece}=require("net"),{createServer:hce,IncomingMessage:pce}=require("http"),{createServer:mce}=require("https"),{readFileSync:Sce,unlinkSync:Pq,existsSync:Tce}=require("fs"),kt=k(),ke=X(),pt=D(),{server:Mp}=(Cr(),ae(jo)),{WebSocketServer:gce}=require("ws"),{createSecureContext:Rce,createServer:Ace}=require("node:tls"),{getTicketKeys:Hq,restartNumber:Oce,getWorkerIndex:od}=rt(),{Headers:xq,appendHeader:bce}=(L_(),ae(VB)),{recordAction:sd,recordActionBinary:Mq}=(Si(),ae(ju)),{Request:Gq,createReuseportFd:Uq}=(Cp(),ae(_b)),{checkMemoryLimit:Nce}=la(),{X509Certificate:yce}=require("crypto"),qq=require("tls"),Ice=qq.createSecureContext,fl;qq.createSecureContext=function(e){return fl||Ice(e)};var Fq=ke.get(pt.CONFIG_PARAMS.THREADS_DEBUG);if(Fq){let e;if(Eb)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&&od()>=0&&(e=t+od())}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&&Eb)try{require("inspector").open(9229)}catch(e){Oce<=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:MNe,CONFIG_PARAMS:wce}=pt;ke.initSync();var Cce=ke.get(wce.HTTP_SESSIONAFFINITY),Ws={};Po.registerServer=Sb;Po.httpServer=Tb;Po.deliverSocket=mb;Po.startServers=kq;Po.when_components_loaded=null;Po.createSNICallback=gb;Mp.http=Tb;Mp.request=Mce;Mp.socket=Uce;Mp.ws=vce;var db={},Dp={},Lce,Bi={},Pp={},Dce=[],hb=[];function kq(){return Po.when_components_loaded=Up().loadRootComponents(!0).then(()=>{id?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)mb(n,r,s);else if(t.requestId)Pce(t);else if(t.type===pt.ITC_EVENT_TYPES.SHUTDOWN){kt.trace("received shutdown request",Lp);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
30
  Connection: close\r
33
31
  \r
34
- `))}},25).unref()}o.close?.(()=>{if(ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&od()==0)try{Uq(ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,Dp),o.cantCleanupProperly||kt.warn("Had to forcefully exit the thread",Dp),process.exit(0)},5e3).unref()})}if($q||process.env.DEV_MODE)try{require("inspector").close()}catch(i){kt.info("Could not close debugger",i)}}}).ref();let e=[];if(Bq&&!Lce)for(let t in Ws){let r=Ws[t];if(isNaN(t)&&od()==0){Rce(t)&&Uq(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=od();if(o<i[0]||o>i[1])continue}let s;try{s=Bq(+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,Dp)}).on("error",o)}))}Promise.all(e).then(()=>{id?.postMessage({type:pt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(Vq,"startServers");Eb||Vq();function mb(e,t,r){let n=e?.read?e:new hce({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(mb,"deliverSocket");var Hq=new Map;function Uce(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=Hq.get(s),r){case"connection":i=mb(void 0,t),Hq.set(s,i),i.write=(c,l,_)=>(id.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,l,_)=>(id.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),id.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(Uce,"proxyRequest");function Sb(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",xq),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",xq)}a(Sb,"registerServer");function Yq(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(Yq,"getPorts");function Tb(e,t){for(let{port:r,secure:n}of Yq(t))Kq(r,n,t?.isOperationsServer),typeof e=="function"?hb[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,Sb(e,r,!1)),Pp[r]=pb(hb,r),Pce=pb(Mce,r)}a(Tb,"httpServer");function Kq(e,t,r){if(!Hi[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:Gq(),maxHeaderSize:ke.get(pt.CONFIG_PARAMS.HTTP_MAXHEADERSIZE),SNICallback:gb(l)})}let c=Ice();Hi[e]=(t?Tce:mce)(s,async(l,_)=>{try{let d=performance.now(),E=new Fq(l,_);r&&(E.isOperationsServer=!0);let f=await Pp[e](E);if(!f){if(E._nodeResponse.statusCode)return;f=Wq(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,Hi[e].emit("unhandled",l,_)}let h=f.status||200,m=performance.now(),S=m-d,T=f.body,R;if(!f.handlesHeaders){let U=f.headers||new qq;T?T.length>=0&&(typeof T=="string"?U.set("Content-Length",Buffer.byteLength(T)):U.set("Content-Length",T.length),R=!0):(U.set("Content-Length","0"),R=!0);let v=`hdb;dur=${S.toFixed(2)}`;f.wasCacheMiss&&(v+=", miss"),yce(U,"Server-Timing",v,!0),_.writeHead(h,U&&(U[Symbol.iterator]?Array.from(U):U)),R&&_.end(T)}let N=E.handlerPath,b=E.method;if(sd(S,"duration",N,b,f.wasCacheMiss==null?void 0:f.wasCacheMiss?"cache-miss":"cache-hit"),vq(h<400,"success",N,b),vq(1,"response_"+h,N,b),!R)if(T?.pipe){T.pipe(_),T.destroy&&_.on("close",()=>{T.destroy()});let U=0;T.on("data",v=>{U+=v.length}),T.on("end",()=>{sd(performance.now()-m,"transfer",N,b),sd(U,"bytes-sent",N,b)})}else T?.then?T.then(U=>{_.end(U)},u):_.end(T)}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&&(Hi[e].mtlsConfig=i),t&&(Hi[e].on("secureConnection",l=>{l._parent.startTime&&sd(performance.now()-l._parent.startTime,"tls-handshake",e),sd(l.isSessionReused(),"tls-reused",e)}),Hi[e].isSecure=!0,s.SNICallback(null,(l,_)=>{try{fl=_,_&&Hi[e].setSecureContext(_.options)}finally{fl=null}})),Sb(Hi[e],e)}return Hi[e]}a(Kq,"getHTTPServer");function pb(e,t){let r=Wq;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(pb,"makeCallbackChain");function Wq(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new qq}}a(Wq,"unhandled");function vce(e,t){Tb(e,{requestOnly:!0,...t})}a(vce,"onRequest");function Bce(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:gb(n)};r=bce(s,e),s.SNICallback(null,(i,o)=>{try{fl=o,o&&r.setSecureContext(o.options)}finally{fl=null}}),Ws[t.securePort]=r}return t.port&&(r=pce({noDelay:!0},e),Ws[t.port]=r),r}a(Bce,"onSocket");Object.defineProperty(Sce.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 Hce(e,t){let r;for(let{port:n,secure:s}of Yq(t)){Lp[n]||(Lp[n]=new Ace({server:r=Kq(n,s)}),Lp[n].on("connection",async(c,l)=>{try{let _=new Fq(l);_.isWebSocket=!0;let u=Pp[n](_),d=l.headers["sec-websocket-protocol"]||"",E=db[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",_)}}),Lp[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=db[n];o||(o=db[n]=[]),o.push({listener:e,protocol:i}),Pp[n]=pb(hb,n)}return r}a(Hce,"onWebSocket");function xq(e,t){t.writeHead(404),t.end(`Not found
35
- `)}a(xq,"defaultNotFound");function fb(e){return e.startsWith("-----BEGIN")?e:gce(e)}a(fb,"readPEM");function gb(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=fb(i.privateKey),c=fb(i.certificate),l=i.certificateAuthority&&fb(i.certificateAuthority);if(!o||!c)throw new Error("Missing private key or certificate for secure server");let _={ciphers:i.ciphers,ca:l,ticketKeys:Gq()},u=Oce(_);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 wce(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(gb,"createSNICallback")});var rF={};$e(rF,{startHTTPThreads:()=>Gce,startSocketServer:()=>yb,updateWorkerIdleness:()=>tF});async function Gce(e=2,t){if(t)bb(0,1,!0);else{let{loadRootComponents:r}=Up();if(e===0)return(0,Qs.setMainIsWorker)(!0),await Rb().startServers(),Promise.resolve([]);await r()}eF();for(let r=0;r<e;r++)bb(r,e);return Promise.all(Zq)}function eF(){let e=(0,Jq.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),Ob=setInterval(()=>{Hp.notify(e)},xce).unref())}function bb(e,t=1,r){if(Ab++,(0,Qs.startWorker)("server/threads/threadServer.js",{name:Sl.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(_){_.type===Sl.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});Zq.push(s),await s,El.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=Bp.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=El.indexOf(n);o>-1&&El.splice(o,1)}if(a(i,"removeWorker"),hl){let o=hl;hl=[];for(let c of o)Xq[c.localPort](null,c)}}}),r){let n=setInterval(()=>{Nb?Nb=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Qs.shutdownWorkers)(),Ab=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function yb(e=0,t){if(typeof e=="string")try{(0,xp.existsSync)(e)&&(0,xp.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=qce:r=Fce(t):r=Ib;let n=(0,pl.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=Xq[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),Nb=!0,r(o,(c,l)=>{if(!c){if(Qq){let u=o._socket||new pl.Socket({handle:o,writable:!0,readable:!0});Qq.deliverSocket(u,e,l),u.resume()}else Ab>0?(hl.length===0&&setTimeout(()=>{hl.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,hl.push(o)):(console.log("start up a dynamic thread to handle request"),bb(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 pl.Socket({handle:o,writable:!0,readable:!0});Vce(u,c,e)}hr(!0,"socket-routed")})};let s=Sa();Hp.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 Ib(e,t){let r,n=0;for(let s of El){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=vp)return vp=i,t(r);n=i}vp=0,t(r)}function qce(e,t){let r={};e.getpeername(r);let n=r.address,s=ml.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);Ib(e,o=>{ml.set(n,{worker:o,lastUsed:i}),t(o)})}function Fce(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new pl.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],_=ml.get(l),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,s(_.worker);Ib(n,d=>{ml.set(l,{worker:d,lastUsed:u}),s(d,o)})})}a(r,"findByHeaderAffinity")}function tF(){vp=0;for(let e of El)e.expectedIdle=e.recentELU.idle+kce,e.requests=1;El.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Vce(e,t,r){let n=$ce++;t.postMessage({port:r,requestId:n,event:"connection"}),e.on("data",s=>{let i=s.toString("latin1");t.postMessage({port:r,requestId:n,data:i,event:"data"})}).on("close",s=>{t.postMessage({port:r,requestId:n,event:"close",hadError:s})}).on("error",s=>{t.postMessage({port:r,requestId:n,event:"error",error:s})}).on("drain",s=>{t.postMessage({port:r,requestId:n,event:"drain",error:s})}).on("end",()=>{t.postMessage({port:r,requestId:n,event:"end"})}).resume(),Bp.set(n,s=>{s.event=="data"&&e.write(Buffer.from(s.data,"latin1")),s.event=="end"&&(e.end(s.data&&Buffer.from(s.data,"latin1")),Bp.delete(n)),s.event=="destroy"&&(e.destroy(),Bp.delete(n))})}var Qs,pl,Sl,Hp,xp,zq,Jq,El,hl,Xq,Qq,Ab,Zq,Ob,xce,Nb,vp,jq,ml,kce,Bp,$ce,wb=be(()=>{Qs=x(rt()),pl=require("net"),Sl=x(L()),Hp=x(k()),xp=require("fs");Ti();zq=require("worker_threads"),Jq=x(ua()),El=[],hl=[],Xq=[],Ab=0,Zq=[];zq.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,Qs.onMessageFromWorkers)(e=>{e.type===Sl.ITC_EVENT_TYPES.RESTART&&Ob&&(clearInterval(Ob),eF())}));xce=6e5;a(Gce,"startHTTPThreads");a(eF,"licenseWarning");a(bb,"startHTTPWorker");a(yb,"startSocketServer");vp=0;a(Ib,"findMostIdleWorker");jq=36e5,ml=new Map;a(qce,"findByRemoteAddressAffinity");a(Fce,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of ml)r.lastUsed+jq<e&&ml.delete(t)},jq).unref();kce=1e3;a(tF,"updateWorkerIdleness");(0,Qs.setMonitorListener)(tF);Bp=new Map,$ce=1;a(Vce,"proxySocket")});var oF=g((VNe,iF)=>{"use strict";var Yce=require("cluster"),$a=X();$a.initSync();var sF=L(),GNe=require("util"),xi=k(),qNe=require("fs"),Kce=require("fastify"),FNe=Sa(),Wce=require("@fastify/cors"),Qce=require("@fastify/compress"),jce=require("@fastify/static"),zce=yO(),Jce=require("path"),{PACKAGE_ROOT:Xce}=L(),Zce=Bn(),ele=Y(),tle=Ur(),rle=ua(),{server:nle}=(Cr(),ae(zo)),{node_request_key:kNe}=(Cp(),ae(_b)),{authHandler:sle,handlePostRequest:ile,serverErrorHandler:ole,reqBodyValidationHandler:ale}=yp(),$Ne=require("net"),{registerContentHandlers:cle}=(zc(),ae(Ax)),lle=6e4,ule=1024*1024*1024,_le="TRUE",{CONFIG_PARAMS:ad}=sF,Tl;iF.exports={hdbServer:nF,start:nF};async function nF(e){try{xi.info("In Fastify server"+process.cwd()),xi.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),xi.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Yce.isMaster,await dle();let t=e.securePort>0;Tl=fle(t),await Tl.ready(),e||(e={}),e.isOperationsServer=!0;try{nle.http(Tl.server,e),Tl.server.closeIdleConnections||await Tl.listen({port:0,host:"::"})}catch(r){throw Tl.close(),xi.error(r),xi.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),xi.fatal(t),process.exit(1)}}a(nF,"operationsServer");async function dle(){xi.trace("Configuring HarperDB process."),Zce.setSchemaDataToGlobal(),await tle.setUsersToGlobal(),await rle.getLicense()}a(dle,"setUp");function fle(e){xi.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Ele(e),r=Kce(t);r.server.headersTimeout=ple(),r.setErrorHandler(ole);let n=hle();n&&r.register(Wce,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,_){r.server.emit("unhandled",l.raw,_.raw)}),c()}),r.register(zce),r.register(Qce),r.register(jce,{root:Jce.join(Xce,"studio/build-local")}),cle(r);let s=$a.get(sF.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!ele.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[ale,sle],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),ile(i,o)}),r.get("/health",()=>"HarperDB is running."),xi.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(fle,"buildServer");function Ele(e){let t=$a.get(ad.OPERATIONSAPI_NETWORK_TIMEOUT),r=$a.get(ad.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:ule,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Ele,"getServerOptions");function hle(){let e=$a.get(ad.OPERATIONSAPI_NETWORK_CORS),t=$a.get(ad.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===_le)&&(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(hle,"getCORSOpts");function ple(){return $a.get(ad.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??lle}a(ple,"getHeaderTimeoutConfig")});var Ub={};$e(Ub,{disableNATS:()=>Sle,publishToStream:()=>Fp,setNATSReplicator:()=>Cb,setPublishToStream:()=>Tle,setSubscription:()=>Mb,start:()=>mle});function mle(){cd.default.get(ld.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Rle()}function Sle(e=!0){_F=e}function Tle(e,t){Fp=e,Mb=t}function Rle(){if(_F||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];Cb(s,r,i)}}vb((r,n)=>{Cb(r.tableName,r.databaseName,r),n&&fF(r)}),!aF&&(aF=!0)}function Cb(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){fF(i)}static subscribe(){let i=new ts;return Mb(t,e,i),i}static subscribeOnThisThread(i){return i<(cd.default.get(ld.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??gle)}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 Gp(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=dF;return i}a(n,"getNATSTransaction")}function fF(e){let t=cd.default.get(ld.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Fp(`${Lb.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,Pb.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 cF,Lb,Pb,lF,uF,cd,ld,qp,_F,Fp,Mb,gle,dF,aF,Gp,Db,EF=be(()=>{Re();Mn();cF=x(gt()),Lb=x(Ze()),Pb=x(fi());ou();lF=x(aR()),uF=x(wr()),cd=x(X()),ld=x(L()),qp=x(k());a(mle,"start");a(Sle,"disableNATS");Fp=cF.publishToStream,Mb=lF.setSubscription;a(Tle,"setPublishToStream");gle=2;a(Rle,"assignReplicationSource");a(Cb,"setNATSReplicator");a(fF,"publishSchema");Gp=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=cd.default.get(ld.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||(qp.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(Fp(`${Lb.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,Pb.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(u=>{throw qp.error("An error has occurred trying to replicate transaction",l,u),u.statusCode=504,u}))}return Promise.all(n)}},Db=class extends Gp{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,uF.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};dF=new Db});async function TF({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await Bb.get(e,{returnNonexistent:!0});i=new Gb(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await Bb.get(e);o&&o.delete()}i=new $p(e,t)}return n&&(n.id=e,n.user={username:t?.username},ud.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function Hb(){return kp++,kp>65500&&(kp=1),kp}function xb(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=yo.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 pF,Uo,mF,SF,hF,Bb,ud,kp,$p,Gb,gF=be(()=>{Re();C_();pF=x(wr()),Uo=x(k());pa();mF=x(rt()),SF=x(Rb());Cr();hF=100,Bb=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"}]}}]}),ud=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,mF.getWorkerIndex)()===0&&(async()=>{await SF.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of ud.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await dt.getUser(r.user.username));try{await xb(r,t,r)}catch{(0,Uo.warn)("Failed to publish will",t)}ud.delete(e.id)}})();a(TF,"getSession");kp=1;a(Hb,"getNextMessageId");$p=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(T=>T.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,Uo.trace)("Resuming subscription from",s,"from",o);let f=yo.getMatch(_);if(!f){let T=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw T.statusCode=404,T}if(E.url=f.relativeURL,E.url.indexOf("+")>-1||E.url.indexOf("#")>-1){let T=E.url.slice(1);if(T.indexOf("#")>-1&&T.indexOf("#")!==T.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(E.isCollection=!0,T.indexOf("+")===T.length-1)E.onlyChildren=!0,E.url="/"+T.slice(0,T.length-1);else{let R=T.split("/"),N;for(let v=0;v<R.length;v++)if(R[v].indexOf("+")>-1)if(R[v]==="+")N=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&N)throw new Error("Filters can not be combined");let b=!0;R[R.length-1]==="#"&&(R.length--,b=!1),N&&(n=a(v=>{let q=v.id;if(!Array.isArray(q)||b&&q.length!==R.length)return!1;for(let M=0;M<R.length;M++)if(R[M]!=="+"&&R[M]!==q[M])return!1;return!0},"filter"));let U=R.indexOf("+");E.url="/"+(U>-1?R.slice(0,U):R).concat("").join("/")}}let h=f.path,m=f.Resource,S=await it(E,async()=>{let T=this.createContext();T.topic=s,T.retainHandling=i;let R=await m.subscribe(E,T);if(!R)return;if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let N=(async()=>{for await(let b of R)try{let U;if(b.type&&b.type!=="put"&&b.type!=="delete"&&b.type!=="message"&&b.type!=="patch"||n&&!n(b))continue;r?(b.topic=s,U=this.needsAcknowledge(b)):(b.acknowledge?.(),U=Hb());let v=b.id;if(Array.isArray(v)&&(v=Qc(v)),v==null&&(v=""),await this.listener(h+"/"+v,b.value,U,t)===!1)break;this.awaitingAcks?.size>hF?await new Promise(M=>setTimeout(M,this.awaitingAcks.size-hF)):await new Promise(setImmediate)}catch(U){(0,Uo.warn)(U)}})();return R});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=Hb();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 xb(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 ud.get(this.sessionId);n?.doesExist()&&await xb(n,n.data,r)}}finally{await ud.delete(this.sessionId)}}).catch(n=>{(0,Uo.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(xb,"publish");Gb=class extends $p{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=Hb(),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,Uo.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,pF.getNextMonotonicTime)()),(0,Uo.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),Bb.put(this.sessionRecord)}}});var Fb={};$e(Fb,{bypassAuth:()=>Ale,start:()=>Ole});function Ale(){NF=!0}function Ole({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new bF.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}=AF(_,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,gl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&Yp.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,gl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&Yp.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&&NF&&_.remoteAddress.includes("127.0.0.1")&&(u=await(0,OF.getSuperUser)(),$t.debug("Auto-authorizing local connection",u?.username));let{onMessage:d,onClose:E}=AF(_,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 AF(e,t,r,n,s){RF||(RF=!0,Qu(d=>{Vp>0&&d.push({metric:"mqtt-connections",connections:Vp,byThread:!0})}));let i;Vp++;let o,c={protocolVersion:4},l=(0,Kp.parser)({protocolVersion:5});function _(d){l.parse(d)}a(_,"onMessage");function u(){Vp--,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,gl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&Yp.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,gl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&Yp.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=Ha(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?M(d.will.payload):void 0,delete d.will.payload}o=TF({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:T(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 R=[];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}R.push(W)}await o.committed,m({cmd:"suback",granted:R,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 N=d.qos===2?"pubrec":"puback",b=e.deserialize||(e.deserialize=Ha(r?.headers.get?.("content-type"))),v=(d.payload?.length||0)>0?b(d.payload):void 0,q;try{q=await o.publish(d,v)}catch(M){s.events.emit("error",M,e,d,o),$t.warn(M),d.qos>0&&m({cmd:N,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&m({cmd:N,messageId:d.messageId,reasonCode:q===!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(R){s.events.emit("error",R,e,d,o),$t.error(R),m({cmd:"disconnect"})}function m(R,N){let b=(0,Kp.generate)(R,c);t(b),hr(b.length,"bytes-sent",N,S(R),"mqtt")}a(m,"sendPacket");function S(R){return R.qos>0?R.cmd+",qos="+R.qos:R.cmd}a(S,"packetMethodName");function T(R){return Ma(R,r)}a(T,"serialize")}),l.on("error",d=>{$t.warn("MQTT parsing error, closing connection:",d.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:_,onClose:u}}var Kp,OF,gl,cr,qb,bF,Yp,$t,NF,RF,Vp,yF=be(()=>{Kp=require("mqtt-packet");gF();OF=x(Ur());zc();Ti();Cr();gl=x(X()),cr=x(L()),qb=x(k()),bF=require("events"),Yp=(0,qb.loggerWithTag)("auth-event"),$t=(0,qb.loggerWithTag)("mqtt"),NF=(0,gl.get)(cr.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Ale,"bypassAuth");a(Ole,"start");Vp=0;a(AF,"onSocket")});var qh={};$e(qh,{component_errors:()=>Al,loadComponent:()=>Wp,loadComponentDirectories:()=>vF,setErrorReporter:()=>Ile});function vF(e,t){t&&($b=t),e&&(Vb=e);let r=[];if((0,tt.existsSync)(kb)){let s=(0,tt.readdirSync)(kb,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,at.join)(kb,o);r.push(Wp(c,$b,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Wp(n,$b,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{UF=!0})}function Ile(e){_d=e}async function Wp(e,t,r,n,s,i){let o=(0,tt.realpathSync)(e);if(!wF.has(o)){wF.set(o,!0),s&&(Vb=s);try{let c;n&&(Al=new Map);let l=(0,at.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,tt.existsSync)(l)?c=n?(0,MF.getConfigObj)():(0,CF.parseDocument)((0,tt.readFileSync)(l,"utf8"),{simpleKeys:!0}).toJSON():c=Yb;let _=(0,at.join)(e,"node_modules","harperdb");try{Va.isMainThread&&(n||(0,tt.existsSync)(_)&&(0,tt.realpathSync)(bl.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)(bl.PACKAGE_ROOT,_,"dir"))}catch(E){Rl.default.error("Error symlinking harperdb module",E)}let u=[],d=n;for(let E in c){let f=c[E];if(Al.set(n?E:(0,at.basename)(e),!1),!f)continue;let h,m=f.package;try{if(m){let b=e,U;for(;!(0,tt.existsSync)(U=(0,at.join)(b,"node_modules",E));)if(b=(0,at.dirname)(b),b.length<(0,PF.getHdbBasePath)().length){U=null;break}if(U)h=await Wp(U,t,r,!1),d=!0;else throw new Error(`Unable to find package ${E}:${m}`)}else h=yle[E];if(!h)continue;u.push(h);let S=a(b=>(b.origin=r,St(b)),"ensureTable"),T=f.network||(f.port||f.securePort)&&f,R=T?.securePort||T?.https&&T.port,N=!T?.https&&T?.port;if(Va.isMainThread&&(h=await h.startOnMainThread?.({server:dt,ensureTable:S,port:N,securePort:R,resources:t,...f})||h,n&&T))for(let b of[N,R])try{if(+b&&!IF.includes(b)){let U=Kb.get(bl.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);U&&Rl.default.warn("Session affinity is not recommended and may cause memory leaks"),(U||!wp)&&(IF.push(b),yb(b,U))}}catch(U){console.error("Error listening on socket",b,U,E)}if(t.isWorker&&(h=await h.start?.({server:dt,ensureTable:S,port:N,securePort:R,resources:t,...f})||h),Vb.set(h,!0),(h.handleFile||h.handleDirectory)&&f.files){if(f.files.includes(".."))throw(0,LF.handleHDBError)("Can not reference parent directories");let b=(0,at.join)(e,f.files).replace(/\\/g,"/"),U=b.indexOf("/*");if(U>-1&&f.files!==Yb[E]?.files&&!(0,tt.existsSync)(b.slice(0,U)))throw new Error(`The path '${b.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),q=f.path||"/";q=q.startsWith("/")?q:q.startsWith("./")?"/"+v+q.slice(2):q==="."?"/"+v:"/"+v+"/"+q;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=b.indexOf("/*"))>-1&&(W=b.slice(0,z+1),M=(0,at.relative)(e,W));let Z=!1;if(Va.isMainThread&&h.setupDirectory&&(Z=await h.setupDirectory?.(q,W,t)),t.isWorker&&h.handleDirectory&&(Z=await h.handleDirectory?.(q,W,t)),Z)continue;for(let ce of await(0,DF.default)(b,{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=q+(q.endsWith("/")?"":"/")+xe;try{if(de.isFile()){let Ge=await Nle(_e);Va.isMainThread&&await h.setupFile?.(Ge,we,_e,t),t.isWorker&&await h.handleFile?.(Ge,we,_e,t)}else Va.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}`,_d?.(Ge),((0,Ol.getWorkerIndex)()===0?console:Rl.default).error(Ge),t.set(f.path||"/",new dd(Ge)),Al.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}`,_d?.(S),((0,Ol.getWorkerIndex)()===0?console:Rl.default).error(S),t.set(f.path||"/",new dd(S),null,!0),Al.set(n?E:(0,at.basename)(e),S.message)}}if(Va.isMainThread&&!UF&&i&&(0,Ol.watchDir)(e,async()=>vF()),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?`;_d?.(new Error(E)),((0,Ol.getWorkerIndex)()===0?console:Rl.default).error(E),Al.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}`,_d?.(c),t.set("",new dd(c))}}}var tt,at,Va,CF,Kb,bl,DF,Ol,Rl,LF,PF,ble,MF,Nle,kb,Vb,UF,$b,Al,yle,Yb,IF,wF,_d,dd,Fh=be(()=>{tt=require("fs"),at=require("path"),Va=require("worker_threads"),CF=require("yaml"),Kb=x(X()),bl=x(L());DI();UI();vI();vx();yq();Pq();DF=x(require("fast-glob")),Ol=x(rt()),Rl=x(k());IS();Cr();LF=x(ie());Mn();Re();wb();PF=x(X()),ble=x(oF());Ph();EF();yF();MF=x(Et());Cp();({readFile:Nle}=tt.promises),kb=Kb.get(bl.CONFIG_PARAMS.COMPONENTSROOT),Vb=new Map,Al=new Map;a(vF,"loadComponentDirectories");yle={REST:ip,rest:ip,graphqlSchema:yS,jsResource:CS,fastifyRoutes:ob,login:LS,static:ab,operationsApi:ble,customFunctions:{},http:{},clustering:Ub,authentication:L_,mqtt:Fb},Yb={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(Yb,"static",{value:{files:"web/**"}});IF=[],wF=new Map;a(Ile,"setErrorReporter");a(Wp,"loadComponent");dd=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 Up=g((mye,HF)=>{var{isMainThread:BF}=require("worker_threads"),{getTables:wle}=(Re(),ae(Ve)),{loadComponentDirectories:Cle,loadComponent:Dle}=(Fh(),ae(qh)),{resetResources:Lle}=(C_(),ae(VB)),Ple=kA(),Mle=Et(),{dirname:Ule}=require("path"),{getConnection:vle}=gt(),Ble=X(),Hle=L(),Wb=new Map;async function xle(e=!1){!BF&&Ble.get(Hle.CONFIG_PARAMS.CLUSTERING_ENABLED)&&vle();try{BF&&await Ple()}catch(n){console.error(n)}let t=Lle();wle(),t.isWorker=e,await Dle(Ule(Mle.getConfigFilePath()),t,"hdb",!0,Wb),await Cle(Wb,t);let r=[];for(let[n]of Wb)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(xle,"loadRootComponents");HF.exports.loadRootComponents=xle});var rt=g((Tye,Bo)=>{"use strict";var{Worker:Gle,MessageChannel:qle,parentPort:js,isMainThread:Zb,threadId:Fle,workerData:Gi}=require("worker_threads"),{PACKAGE_ROOT:kle}=L(),{join:FF,isAbsolute:$le,extname:Vle}=require("path"),{server:kF}=(Cr(),ae(zo)),{watch:Yle,readdir:Kle}=require("fs/promises"),{totalmem:xF}=require("os"),Nl=L(),Qb=X(),qi=k(),{randomBytes:Wle}=require("crypto"),{_assignPackageExport:Qle}=require("../index"),jle=L(),GF=1024*1024,vo=[],Kn=[],zle=50,eN=1e4,Jle="restart",$F="request_thread_info",VF="resource_report",YF="thread_info",KF="added-port",Xle="ack",jb;Qle("threads",Kn);Bo.exports={startWorker:zb,restartWorkers:rN,shutdownWorkers:nue,workers:vo,setMonitorListener:_ue,onMessageFromWorkers:sue,onMessageByType:ZF,broadcast:oue,broadcastWithAcknowledgement:cue,setChildListenerByType:rue,getWorkerIndex:WF,getWorkerCount:QF,getTicketKeys:zF,setMainIsWorker:eue,setTerminateTimeout:Zle,restartNumber:Gi?.restartNumber||1};Kn.onMessageByType=ZF;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 tN;function Zle(e){eN=e}a(Zle,"setTerminateTimeout");function WF(){return Gi?Gi.workerIndex:tN?0:void 0}a(WF,"getWorkerIndex");function QF(){return Gi?Gi.workerCount:tN?1:void 0}a(QF,"getWorkerCount");function eue(e){tN=e}a(eue,"setMainIsWorker");var jF=1,Qp;function zF(){return Qp||(Qp=Zb?Wle(48):Gi.ticketKeys,Qp)}a(zF,"getTicketKeys");Object.defineProperty(kF,"workerIndex",{get(){return WF()}});Object.defineProperty(kF,"workerCount",{get(){return QF()}});var JF={[$F](e,t){lue(t)},[VF](e,t){uue(t,e)}};function zb(e,t={}){let r=process.constrainedMemory?.()||xF();r=Math.min(r,xF(),2e4*GF);let n=Qb.get(Nl.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/GF/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let _ of Kn){let u=new qle;u.existingPort=_,i.push(u),o.push(u.port2)}Vle(e)||(e+=".js");let c=["--enable-source-maps"];Qb.get(Nl.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&c.push("--heapsnapshot-near-heap-limit=1");let l=new Gle($le(e)?e:FF(kle,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:c,argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(_=>_.existingPort.threadId),workerIndex:t.workerIndex,workerCount:jF=t.threadCount,name:t.name,restartNumber:Bo.exports.restartNumber,ticketKeys:zF()},transferList:o},t));for(let{port1:_,existingPort:u}of i)u.postMessage({type:KF,port:_,threadId:l.threadId},[_]);return zp(l,!0),l.unexpectedRestarts=t.unexpectedRestarts||0,l.startCopy=()=>zb(e,t),l.on("error",_=>{qi.error(`Worker index ${t.workerIndex} error:`,_)}),l.on("exit",_=>{vo.splice(vo.indexOf(l),1),!l.wasShutdown&&t.autoRestart!==!1&&(l.unexpectedRestarts<zle?(t.unexpectedRestarts=l.unexpectedRestarts+1,zb(e,t)):qi.error(`Thread has been restarted ${l.restarts} times and will not be restarted`))}),l.on("message",_=>{JF[_.type]?.(_,l)}),vo.push(l),fue(),t.onStarted&&t.onStarted(l),l.name=t.name,l}a(zb,"startWorker");var tue=[Nl.THREAD_TYPES.HTTP];async function rN(e=null,t=Math.max(jF>3,1),r=!0){if(Zb){if(r){let{loadRootComponents:o}=Up();await o()}Bo.exports.restartNumber++,t<1&&(t=t*vo.length);let n=[],s=[];for(let o of vo.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;qi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Bo.exports.restartNumber,type:Nl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=tue.indexOf(o.name)>-1,l=new Promise(_=>{let u=setTimeout(()=>o.terminate(),eN*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===jle.ITC_EVENT_TYPES.CHILD_STARTED&&(qi.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(u)),_.off("message",E))},"startListener");qi.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}=No();r&&(e==="http"||!e)&&Qb.get(Nl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else js.postMessage({type:Jle,workerType:e})}a(rN,"restartWorkers");function rue(e,t){JF[e]=t}a(rue,"setChildListenerByType");function nue(e){return rN(e,1/0,!1)}a(nue,"shutdownWorkers");var XF=[];function sue(e){XF.push(e)}a(sue,"onMessageFromWorkers");var Jb=new Map;function ZF(e,t){let r=Jb.get(e);r||Jb.set(e,r=[]),r.push(t)}a(ZF,"onMessageByType");var iue=10;async function oue(e){let t=0;for(let r of Kn)try{r.postMessage(e),t++>iue&&(t=0,await new Promise(setImmediate))}catch(n){qi.error("Unable to send message to worker",n)}}a(oue,"broadcast");var jp=new Map,aue=1;function cue(e){return new Promise(t=>{let r=0;for(let n of Kn)try{let s=aue++,i=a(()=>{jp.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,jp.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of jp)o.port===n&&o()})),n.postMessage(e),r++}catch(s){qi.error("Unable to send message to worker",s)}r===0&&t()})}a(cue,"broadcastWithAcknowledgement");function lue(e){e.postMessage({type:YF,workers:ek()})}a(lue,"sendThreadInfo");function ek(){let e=Date.now();return vo.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(ek,"getChildWorkerInfo");function uue(e,t){e.resources=t,e.resources.updated=Date.now()}a(uue,"recordResourceReport");var Xb;function _ue(e){Xb=e}a(_ue,"setMonitorListener");var due=1e3,qF=!1;function fue(){qF||(qF=!0,setInterval(()=>{for(let e of vo){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}Xb&&Xb()},due).unref())}a(fue,"startMonitoring");var Eue=1e3;if(js){zp(js);for(let e=0,t=Gi.addPorts.length;e<t;e++){let r=Gi.addPorts[e];r.threadId=Gi.addThreadIds[e],zp(r)}setInterval(()=>{let e=process.memoryUsage();js.postMessage({type:VF,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Eue).unref(),jb=a(()=>new Promise((e,t)=>{js.on("message",r),js.postMessage({type:$F});function r(n){n.type===YF&&(js.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else jb=ek;Bo.exports.getThreadInfo=jb;function zp(e,t){Kn.push(e),e.on("message",r=>{if(r.type===KF)r.port.threadId=r.threadId,zp(r.port);else if(r.type===Xle){let n=jp.get(r.id);n&&n()}else{for(let s of XF)s(r,e);let n=Jb.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){qi.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(zp,"addPort");if(Zb){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await Kle(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(FF(s,o.name));try{for await(let{filename:o}of Yle(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await rN(),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");Bo.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else js.on("message",async e=>{let{type:t}=e;t===Nl.ITC_EVENT_TYPES.SHUTDOWN&&(Bo.exports.restartNumber=e.restartNumber,js.unref(),setTimeout(()=>{qi.warn("Thread did not voluntarily terminate",Fle),process.exit(0)},eN).unref())})});var BP={};$e(BP,{AUDIT_STORE_OPTIONS:()=>Oh,createAuditEntry:()=>gf,openAuditStore:()=>tm,readAuditEntry:()=>Kt,removeAuditEntry:()=>rm,setAuditRetention:()=>pue,transactionKeyEncoder:()=>lk});function tm(e){let t=e.auditStore=e.openDB(ok.AUDIT_STORE_NAME,Oh);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,t.deleteCallbacks=r,{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()-nN}))if(c=rm(t,l,_),await new Promise(setImmediate),++o>=hue){i=10;break}await c}finally{o===0&&(i=Math.min(i<<1,nN/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,em.getWorkerIndex)()===(0,em.getWorkerCount)()-1&&s(Jp),t}function rm(e,t,r){if((mue(r)&15)===oN){let n=Kt(r),s=n.tableId;e.deleteCallbacks[s]?.(n.recordId)}return e.remove(t)}function pue(e,t=Jp){nN=e,Jp=t}function gf(e,t,r,n,s,i,o){let c=uk[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let l=1;n&&(n>1?yl.setFloat64(0,n):Wn.set(WS),l=9),E(0),E(t),d(r),yl.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,Il.writeKey)(f,Wn,l);let m=l-h-1;m>127?m>16383?(aN.error("Key or username was too large for audit entry",f),l=h+1,Wn[h]=0):(Wn.copyWithin(h+2,h+1,l),yl.setUint16(h,m|32768),l++):Wn[h]=m}function E(f){f<128?Wn[l++]=f:f<16384?(yl.setUint16(l,f|32768),l+=2):f<1056964608?(yl.setUint32(l,f|3221225472),l+=4):(Wn[l]=255,yl.setUint32(l+1,f),l+=5)}}function mue(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new Xp(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function Kt(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Xp(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),o=n.readInt(),c=n.readInt(),l=n.readInt(),_=n.position,u=n.position+=l,d=n.readFloat64();l=n.readInt();let E=n.position,f=n.position+=l;return{type:uk[i&7],tableId:c,get recordId(){return ik(e,_,u)},version:d,previousLocalTime:s,get user(){return f>E?ik(e,E,f):void 0},getValue(h,m,S){if(i&sN||i&iN&&!m)return h.decoder.decode(e.subarray(n.position));if(i&iN&&S)return cN(h.getEntry(this.recordId),S,h)}}}catch(n){return aN.error("Reading audit entry error",n,e),{}}}function ik(e,t,r){let n=e.subarray(t,r);return(0,Il.readKey)(n,0,r-t)}var Il,Zp,ok,ak,em,ck,aN,Wn,yl,lk,Oh,nN,hue,Jp,sN,iN,tk,oN,rk,nk,sk,uk,Xp,so=be(()=>{Il=require("ordered-binary"),Zp=x(X()),ok=x(_t()),ak=x(L()),em=x(rt()),ck=x(Y());fu();aN=x(k());nm();(0,Zp.initSync)();Wn=Buffer.alloc(1024),yl=new DataView(Wn.buffer,Wn.byteOffset,1024),lk={writeKey(e,t,r){return e===du?(t.set(du,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Il.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,Il.readKey)(e,t,r)}},Oh={encoding:"binary",keyEncoder:lk},nN=(0,ck.convertToMS)((0,Zp.get)(ak.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,hue=1e3,Jp=1e4;a(tm,"openAuditStore");a(rm,"removeAuditEntry");a(pue,"setAuditRetention");sN=16,iN=32,tk=1,oN=2,rk=3,nk=4,sk=5,uk={put:tk|sN,[tk]:"put",delete:oN,[oN]:"delete",message:rk|sN,[rk]:"message",invalidate:nk,[nk]:"invalidate",patch:sk|iN,[sk]:"patch"};a(gf,"createAuditEntry");a(mue,"readAction");a(Kt,"readAuditEntry");Xp=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(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}};a(ik,"readKeySafely")});var lN={};$e(lN,{add:()=>sm,applyReverse:()=>_k,getRecordAtTime:()=>cN,rebuildUpdateBefore:()=>im});function sm(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 im(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,sm(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function _k(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=Sue[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=dk}}function cN(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":_k(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let l in s)s[l]===dk&&(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 Sue,dk,nm=be(()=>{so();a(sm,"add");sm.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)};Sue={add:sm};a(im,"rebuildUpdateBefore");a(_k,"applyReverse");dk={};a(cN,"getRecordAtTime")});function gn(e){return e[Pt]||(e[Pt]=Object.create(null))}function um(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=Ek(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 Ek(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}},um(r,t)),new r(e)):new om(e);case Array:let n=new cm(e.length);n[pe]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=Ek(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 Ka(e,t=e[Pt]){let r;if(fk.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=Ka(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=lN[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Ka(s);r[n]=s}return r?Object.freeze(r):fk.call(e,pe)?e[pe]:e}function am(e){let t=e[pe];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Ya]||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(am(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(am(s))return!0}else return!0}else return!0}}return!1}var Qn,Pt,om,fk,Ya,cm,lm,dE=be(()=>{Mn();Qn=x(ie());nm();Pt=Symbol("own-data");a(gn,"getChanges");a(um,"assignTrackedAccessors");a(Ek,"trackObject");om=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}};um(om,{});a(_E,"collapseData");fk=Object.prototype.hasOwnProperty;a(Ka,"deepFreeze");a(am,"hasChanges");Ya=Symbol.for("has-array-changes"),cm=class extends Array{static{a(this,"TrackedArray")}[Ya];constructor(t){super(t)}splice(...t){return this[Ya]=!0,super.splice(...t)}push(...t){return this[Ya]=!0,super.push(...t)}pop(){return this[Ya]=!0,super.pop()}unshift(...t){return this[Ya]=!0,super.unshift(...t)}shift(){return this[Ya]=!0,super.shift()}};cm.prototype.constructor=Array;lm=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var Sg={};$e(Sg,{CONTEXT:()=>Ie,ID_PROPERTY:()=>Ue,IS_COLLECTION:()=>Ts,MultiPartId:()=>ol,RECORD_PROPERTY:()=>pe,Resource:()=>tr,snake_case:()=>gue,transformForSelect:()=>dm});function gue(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function hk(e,t){if(fd=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(fd=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new ol;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){fd=!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 _m(o.user);return typeof u?.then=="function"?u.then(S=>e(f,l,o,S)):e(f,l,o,u)});if(!h)throw new _m(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 Sk.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 uN(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 dm(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):uN(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(uN(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(uN(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]=dm(c.select||c,u)}let _=o(c.name);return l(_)}else return o(c);else return c}}a(i,"handleProperty")}var pk,mk,Sk,Ie,Ue,Ts,pe,Tue,tr,_m,fd,ol,Mn=be(()=>{pk=require("crypto");ou();mk=require("../index"),Sk=x(ie());dE();pa();np();Ie=Symbol.for("context"),Ue=Symbol.for("primary-key"),Ts=Symbol("is-collection"),pe=Symbol("stored-record"),Tue={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 _=dm(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,pk.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=dm(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 rp(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&Tue[o];if(c)r.requestedContentType=c;else if(n)n.property=o;else return{query:{property:o},id:hk(t,this),isCollection:fd}}let i=hk(t,this);return fd?{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,mk._assignPackageExport)("Resource",tr);a(gue,"snake_case");_m=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(hk,"pathToId");ol=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(Rn,"transactional");a(An,"missingMethod");a(uN,"selectFromObject");a(dm,"transformForSelect")});function Rk(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=gk,Rue(e.primaryStore,e.auditStore)):(c=Tk,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{Ak(Tk[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=Qc(t);let u=new dN(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 Ak(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,_=Qc(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,_N.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,_N.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 Rue(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=gk[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(),Ak(l),r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")},"acquiredLock");r.attemptLock("thread-local-writes",_)&&_()})}}var _N,Tk,gk,dN,Ok=be(()=>{_N=x(k());ou();C_();so();Tk=Object.create(null),gk=Object.create(null);a(Rk,"addSubscription");dN=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(Ak,"notifyFromTransactionData");a(Rue,"listenToCommits")});var $O={};$e($O,{coerceType:()=>fm,makeTable:()=>pm,setServerUtilities:()=>Due,updateResource:()=>Em});function pm(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 T=zS(i,n,l),R=0,N,b,U={},v=Promise.resolve(),q,M,W;for(let Q of S)(Q.assignCreatedTime||Q.name==="__createdtime__")&&(q=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,Ji,Ey=!1,tS,rS,uY=i.getRange({start:!1,end:!1}).constructor,_Y=10,dY=6;h&&my();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=q;static updatedTimeProperty=M;static propertyResolvers;static sources=[];static get expirationMS(){return E}static dbisDB=u;static schemaDefined=_;static sourcedFrom(p,O){O&&(this.sourceOptions=O,(O.expiration||O.eviction||O.scanInterval)&&this.setTTLExpiration(O)),O?.intermediateSource?(p.intermediateSource=!0,this.sources.unshift(p)):this.sources.push(p),b=p.get&&(!p.get.reliesOnPrototype||p.prototype.get);let D=a(P=>{let I=this.sources.slice(0,-1);if(I=I.filter(B=>B[P]&&(!B[P].reliesOnPrototype||B.prototype[P])),I.length>0)if(I.length===1){let B=I[0];return(F,C,G)=>{if(F?.source!==B)return B[P](C,G,F)}}else return(B,F,C)=>{let G=[];for(let H of I){if(B?.source===H)break;G.push(H[P](F,C,B))}return Promise.all(G)}},"getApplyToIntermediateSource"),A=this.sources[this.sources.length-1],y=a(P=>{if(A[P]&&(!A[P].reliesOnPrototype||A.prototype[P]))return(I,B,F)=>{if(!I?.source)return A[P](B,F,I)}},"getApplyToCanonicalSource");return xe={put:y("put"),patch:y("patch"),delete:y("delete"),publish:y("publish")},we={put:D("put"),patch:D("patch"),delete:D("delete"),publish:D("publish"),invalidate:D("invalidate")},(async()=>{let P=!1,I=a(async(B,F)=>{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,F,wl);switch(B.type){case"put":return H._writeUpdate(C,!0,wl);case"patch":return H._writeUpdate(C,!1,wl);case"delete":return H._writeDelete(wl);case"publish":return H._writePublish(C,wl);case"invalidate":return H.invalidate(wl);default:ct.error("Unknown operation",B.type,B.id)}},"writeUpdate");try{let B=p.subscribe;B&&m==null&&(m=!0);let F=p.subscribeOnThisThread?p.subscribeOnThisThread((0,Qa.getWorkerIndex)()):(0,Qa.getWorkerIndex)()===0,C=B&&F&&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{I(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(I(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,I(H,H),new Promise(se=>{G.resolve=se})):I(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 b}static getResource(p,O,D){let A=super.getResource(p,O,D);if(p!=null){$l(p);try{if(A.hasOwnProperty(pe))return A;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let y=!D?.async||i.cache?.get(p),P=Zn(O),I=P.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return nS(p,O,{transaction:I},y,B=>{if(B?Em(A,B):A[pe]=null,O.onlyIfCached&&O.noCacheStore){if(!A.doesExist())throw new jr.ServerError("Entry is not cached",504)}else if(D?.ensureLoaded){let F=sS(p,B,O,A);if(F)return P?.disregardReadTxn(),A[fN]=!0,hN(F,C=>(Em(A,C),A))}return A})}catch(y){throw y.message.includes("Unable to serialize object")&&(y.message+=": "+JSON.stringify(p)),y}}return A}ensureLoaded(){let p=sS(this[Ue],this[Qr],this[Ie]);if(p)return this[fN]=!0,hN(p,O=>{this[Qr]=O,this[pe]=O.value,this[md]=O.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&&my(),je.audit=p}static coerceId(p){return p===""?null:fm(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 O=je.getRecordCount();return{recordCount:O.recordCount,estimatedRecordRange:O.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[Ie]?.returnNonexistent)return this}allowRead(p,O){let D=zd(p);if(D?.read){if(D.isSuperUser)return!0;let A=D.attribute_permissions,y=O?.select;if(A?.length>0||Ey&&y){if(O||(O={}),y){let P=A?.length>0&&EN(A,"read");O.select=y.map(I=>{let B=I.name||I;if(!P||P[B]){let F=Ji[B]?.definition?.tableClass;if(F){if(I.name||(I={name:I}),!F.prototype.allowRead.call(null,p,I))return!1;if(!I.select)return I.name}return I}}).filter(Boolean)}else O.select=A.filter(P=>P.read&&!Ji[P.attribute_name]).map(P=>P.attribute_name);return O}else return!0}}allowUpdate(p,O){let D=zd(p);if(D?.update){let A=D.attribute_permissions;if(A?.length>0){let y=EN(A,"update");for(let P in O)if(!y[P])return!1;for(let P of A){let I=P.attribute_name;!P.update&&!(I in O)&&(O[I]=this.getProperty(I))}}return!0}}allowCreate(p,O){if(this[Ts]){let D=zd(p);if(D?.insert){let A=D.attribute_permissions;if(A?.length>0){let y=EN(A,"insert");for(let P in O)if(!y[P])return!1}else return!0}}else return this.allowUpdate(p,{})}allowDelete(p){return zd(p)?.delete}update(p,O){if(!Zn(this[Ie]))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let A;return typeof p=="object"&&p&&(O?(Object.isFrozen(p)&&(p=Object.assign({},p)),this[pe]={},this[Pt]=p):(A=this[Pt],A&&(p=Object.assign(A,p)),this[Pt]=A=p)),this._writeUpdate(this[Pt],O),this}addTo(p,O){if(typeof O=="number"||typeof O=="bigint")this[Ed]===Nk?this.set(p,(+this.getProperty(p)||0)+O):(this[Ed]||this.update(),this.set(p,new lm(O)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,O){if(typeof O=="number")return this.addTo(p,-O);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this[Qr]}invalidate(p){let O=this[Ie],D=this[Ue];$l(D),Zn(this[Ie]).addWrite({key:D,store:i,invalidated:!0,entry:this[Qr],nodeName:this[Ie]?.nodeName,before:xe.invalidate?.bind(this,O,D),beforeIntermediate:we.invalidate?.bind(this,O,D),commit:(y,P)=>{if(P?.version>y)return;let I=null;for(let B in r)I||(I={}),I[B]=this.getProperty(B);T(D,I,this[Qr],y,hd,h,this[Ie],0,"invalidate")}})}static evict(p,O,D){let A=this.Source,y;if(!((b||h)&&(!O||(y=i.getEntry(p),!y||!O)||y.version!==D))){if(b){if(i.hasLock(p,y.version))return;let P;for(let I in r)P||(P={}),P[I]=O[I];if(P)return T(p,P,y,D,pd,null,null,0,null,!0)}return i.ifVersion(p,D,()=>{jd(p,O,null)}),h?T(p,null,y,D,pd,null,null,0,null,!0):i.remove(p,D)}}lock(){throw new Error("Not yet implemented")}static operation(p,O){return p.table||=s,p.schema||=c,Mk.operation(p,O)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,O,D){let A=this[Ie],y=Zn(A),P=this[Ue];$l(P);let I=this[Qr];this[Ed]=O?Nk:Iue;let B={key:P,store:i,entry:I,nodeName:A?.nodeName,validate:F=>{p||(p=this[Pt]),O||p&&am(this[Pt]===p?this:p)?A?.source||(y.checkOverloaded(),this.validate(p,!O),M&&(p[M.name]=M.type==="Date"?new Date(F):M.type==="String"?new Date(F).toISOString():F),O&&(t&&p[t]!==P&&(p[t]=P),q&&(I?.value?p[q.name]=I?.value[q.name]:p[q.name]=q.type==="Date"?new Date(F):q.type==="String"?new Date(F).toISOString():F),p=Ka(p))):y.removeWrite(B)},before:O?xe.put?()=>xe.put(A,P,p):null:xe.patch?()=>xe.patch(A,P,p):xe.put?()=>xe.put(A,P,Ka(this)):null,beforeIntermediate:O?we.put?()=>we.put(A,P,p):null:we.patch?()=>we.patch(A,P,p):we.put?()=>we.put(A,P,Ka(this)):null,commit:(F,C,G)=>{if(G){if(A&&C?.version>(A.lastModified||0)&&(A.lastModified=C.version),this[Qr]=C,C?.value?.[pe])throw new Error("Can not assign a record to a record, check for circular references");O||(this[pe]=C?.value??null)}this[Pt]=void 0,this[md]=F;let H=C?.value,ee=p;if(this[Ed]=0,C?.version>=F)if(h){let ue=C.localTime,Pe=C.version;for(;ee&&(ue>F||Pe>=F&&ue>0);){let re=l.get(ue);if(!re)break;let J=Kt(re);if(Pe=J.version,Pe>F){if(J.type==="patch"){let ge=J.getValue(i);ee=im(ee,ge)}else if(J.type==="put"||J.type==="delete")return}else if(Pe===F)return;ue=J.previousLocalTime}}else{if(O)return;ee=im(ee,H)}let fe;if(O?fe=ee:(this[pe]=H,fe=O?ee:Ka(this,ee)),this[pe]=fe,fe?.[pe])throw new Error("Can not assign a record to a record, check for circular references");let se;O||(se=p),jd(P,H,fe);let Be=O?"put":"patch";T(P,fe,C,F,0,h,A,A.expiresAt||(E?E+Date.now():0),Be,!1,se),A.expiresAt&&Jd()}};y.addWrite(B)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[Ts]){for await(let O of this.search(p))(await je.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[pe]?this._writeDelete(p):!1}_writeDelete(p){let O=Zn(this[Ie]),D=this[Ue];$l(D);let A=this[Ie];return O.addWrite({key:D,store:i,resource:this,nodeName:A?.nodeName,before:xe.delete?.bind(this,A,D),beforeIntermediate:we.delete?.bind(this,A,D),commit:(y,P,I)=>{let B=P?.value;I&&(A&&P?.version>(A.lastModified||0)&&(A.lastModified=P.version),Em(this,P)),!(P?.version>y)&&(jd(this[Ue],B),ct.trace("Write delete entry",D,y),h||m?(T(D,null,this[Qr],y,0,h,this[Ie],0,"delete"),h||Jd()):i.remove(this[Ue]))}}),!0}search(p){let O=this[Ie],D=Zn(O);if(!p)throw new Error("No query provided");let A=p.conditions;A?A.length===void 0&&(A=A[Symbol.iterator]?Array.from(A):[A]):A=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[Ue]&&(A=[{attribute:null,comparator:"prefix",value:this[Ue]}].concat(A));let y,P={};function I(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&&{},Xi;for(let ze of J){if(ze.conditions){ze.conditions=I(ze.conditions,ze.operator);continue}let Zt=ze[0]??ze.attribute,Ln=Zt==null?U:Ui(S,Zt);if(Ln){if(qe){let ws=hs(Zt),er=Is[ws];er?(er.push(ze),Xi=!0):Is[ws]=[ze]}(Ln.type||pO[ze.comparator])&&(ze[1]===void 0?ze.value=F(ze.value,Ln):ze[1]=F(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(Xi)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 Zi=0;Zi<Ln;Zi++){let cc=Zt[Zi];(cc.comparator==="le"||cc.comparator==="less_than_equal")&&(er.comparator="between",er.value=[er.value,cc.value],J.splice(J.indexOf(cc),1))}if(er.comparator==="equals"||!er.comparator){for(let Zi=0;Zi<Ln;Zi++)if(Zi!==ws){let cc=Zt[Zi];J.splice(J.indexOf(cc),1)}break}}}return J}a(I,"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,Lk.sortBy)(J,tp(je)):J}a(B,"orderConditions");function F(J,ge){return Array.isArray(J)?J.map(qe=>fm(qe,ge)):fm(J,ge)}a(F,"coerceTypedValues");let C=p.operator;(A.length>0||C)&&(A=I(A,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(y=A.find(ge=>hs(ge.attribute)===hs(J)),!y){let ge=Ui(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)y={attribute:J,comparator:"sort"},A.push(y);else if(A.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)}y&&(y.descending=!!G.descending)}A=B(A,C),G&&(y&&A[0]===y?G.next&&(H={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(y&&A.splice(A.indexOf(y),1),H=G));let ee=p.select;if(A.length===0&&(A=[{attribute:t,comparator:"greater_than",value:!0}]),p.explain)return{conditions:A,operator:C,postOrdering:H,selectApplied:!!ee};let fe=D.useReadTxn(),se=mO(A,C,je,fe,p,O,(J,ge)=>hy(J,ee,O,fe,ge),P),Be=p.ensureLoaded!==!1;H||(se=re(se));let ue=je.transformEntryForSelect(ee,O,fe,P,Be,!0),Pe=je.transformToOrderedSelect(se,ee,H,fe,O,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,O,D,A,y,P){let I=new uY;if(D){p=hy(p,O,A,y,null);let B;I.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 Xi=iS(qe,re.attribute,A),ze=iS(Is,re.attribute,A),Zt=ge?(0,ja.compareKeys)(ze,Xi):(0,ja.compareKeys)(Xi,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 I.onDone&&I.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 I.onDone&&I.onDone(),re}else{let J=re.value;if(J?.then&&(J=await J),ee){let ge=iS(J,ee,A);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?(I.onDone&&I.onDone(),re):{value:await P.call(this,re.value)}},return(){I.onDone&&I.onDone(),G.return()},throw(){I.onDone&&I.onDone(),G.throw()}}};let F=a(C=>{if(typeof O=="object"&&Array.isArray(C.attribute))for(let G=0;G<O.length;G++){let H=O[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]&&(O[G]=ee={name:H,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&F(C.next)},"applySortingOnSelect");F(D)}else I.iterate=(p[Symbol.asyncIterator]||p[Symbol.iterator]).bind(p),I=I.map(P);return I}static transformEntryForSelect(p,O,D,A,y,P){if(p&&(p===t||p?.length===1&&p[0]===t)){let C=a(G=>(O?.transaction?.stale&&(O.transaction.stale=!1),G?.key??G),"transform");return p===t?C:p.asArray?G=>[C(G)]:G=>({[t]:C(G)})}let I;y&&b&&!p?.every(C=>{let G;return typeof C=="object"?G=C.name:G=C,r[G]||G===t})&&(I=!0);let B,F=a(function(C){let G;if(O?.transaction?.stale&&(O.transaction.stale=!1),C!=null){if(tS=C,G=C.value||C.deref?.(),!G&&(C.key===void 0||C.deref)){if(C=nS(C.key??C,O,{transaction:D,lazy:p?.length<4},this?.isSync,H=>H),C?.then)return C.then(F.bind(this));G=C?.value}if(I&&C?.metadataFlags&(hd|pd)||C?.expiresAt&&C?.expiresAt<Date.now()){if(O.onlyIfCached&&O.noCacheStore)return{[t]:C.key,message:"This entry has expired"};let H=sS(C.key??C,C,O);if(H?.then)return H.then(F)}}if(G==null)return P?Wa.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=Ji?.[ue],re;if(Pe){let J=A?.[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,O,C);let ge=a(qe=>{if(qe&&typeof qe=="object"){let Is=Pe.definition?.tableClass||je;B||(B={});let Xi=B[ue]||(B[ue]=Is.transformEntryForSelect(ue===se?null:se.select||(Array.isArray(se)?se:null),O,D,J,y));if(Array.isArray(qe)){let ze=[],Zt=Is.transformToOrderedSelect(qe,se.select,typeof se.sort=="object"&&se.sort,O,D,Xi)[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=Xi.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,O,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 F}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 O=!p.rawEvents,D=[],A=Rk(je,this[Ue]??null,function(P,I,B,F){try{let C=I.getValue?.(i,O);if(!C&&I.type==="patch"&&O){let H=i.getEntry(P);H?.version===I.version?C=H.value:C=I.getValue?.(i,!0,B),I.type="put"}let G={id:P,timestamp:B,value:C,version:I.version,type:I.type,beginTxn:F};D?D.push(G):this.send(G)}catch(C){ct.error(C)}},p.startTime||0,p),y=(async()=>{this[Ts]&&(A.includeDescendants=!0,p.onlyChildren&&(A.onlyChildren=!0)),p.supportsTransactions&&(A.supportsTransactions=!0);let P=this[Ue],I=p.previousCount;I>1e3&&(I=1e3);let B=p.startTime;if(this[Ts]){if(B){if(I)throw new jr.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:F,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||Ck(P,H)){let ee=G.getValue(i,O,F);if(A.send({id:H,timestamp:F,value:ee,version:G.version,type:G.type}),A.queue?.length>Ik&&await A.waitForDrain()===!1)return}A.startTime=F}}else if(I){let F=[];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||Ck(P,ee)){let fe=H.getValue(i,O,C);if(F.push({id:ee,timestamp:C,value:fe,version:H.version,type:H.type}),--I<=0)break}}catch(H){ct.error("Error getting history entry",C,H)}for(let C=F.length;C>0;)A.send(F[--C]);F[0]&&(A.startTime=F[0].timestamp)}else if(!p.omitCurrent){for(let{key:F,value:C,version:G,localTime:H}of i.getRange({start:P??!1,end:P==null?void 0:[P,ja.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(C&&(A.send({id:F,timestamp:H,value:C,version:G,type:"put"}),A.queue?.length>Ik&&await A.waitForDrain()===!1))return}}else{I&&!B&&(B=0);let F=this[Qr]?.localTime;if(F===jS&&(i.cache?.delete(P),this[Qr]=i.getEntry(P),ct.trace("re-retrieved record",F,this[Qr]?.localTime),F=this[Qr]?.localTime),ct.trace("Subscription from",B,"from",P,F),B<F){let C=[],G=F;do{let H=l.get(G);if(H){p.omitCurrent=!0;let ee=Kt(H),fe=ee.getValue(i,O,G);O&&(ee.type="put"),C.push({id:P,value:fe,timestamp:G,...ee}),G=ee.previousLocalTime}else break;I&&I--}while(G>B&&I!==0);for(let H=C.length;H>0;)A.send(C[--H]);A.startTime=F}!p.omitCurrent&&this.doesExist()&&A.send({id:P,timestamp:F,value:this[pe],version:this[md],type:"put"})}for(let F of D)A.send(F);D=null})();return p.listener&&A.on("data",p.listener),A}doesExist(){return!!(this[pe]||this[Ed])}publish(p,O){this._writePublish(p,O)}_writePublish(p,O){let D=Zn(this[Ie]),A=this[Ue]||null;$l(A);let y=this[Ie];D.addWrite({key:A,store:i,entry:this[Qr],nodeName:y?.nodeName,validate:()=>{y?.source||(D.checkOverloaded(),this.validate(p))},before:xe.publish?.bind(this,y,A,p),beforeIntermediate:we.publish?.bind(this,y,A,p),commit:(P,I,B)=>{I===void 0&&m&&!h&&Jd(),T(A,I?.value??null,I,I?.version||P,0,!0,y,I?.expiresAt,"message",!1,p)}})}validate(p,O){let D,A=a((y,P,I)=>{if(P.type&&y!=null)if(O&&y.__op__&&(y=y.value),P.properties){typeof y!="object"&&(D||(D=[])).push(`Value ${gs(y)} in property ${I} must be an object${P.type?" ("+P.type+")":""}`);let B=P.properties;for(let F=0,C=B.length;F<C;F++){let G=B[F],H=A(y[G.name],G,I+"."+G.name);H&&(y[G.name]=H)}if(P.sealed&&y!=null&&typeof y=="object")for(let F in y)B.find(C=>C.name===F)||(D||(D=[])).push(`Property ${F} is not allowed within object in property ${I}`)}else switch(P.type){case"Int":(typeof y!="number"||y>>0!==y)&&(D||(D=[])).push(`Value ${gs(y)} in property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof y!="number"||!(Math.floor(y)===y&&Math.abs(y)<=9007199254740992))&&(D||(D=[])).push(`Value ${gs(y)} in property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof y!="number"&&(D||(D=[])).push(`Value ${gs(y)} in property ${I} must be a number`);break;case"ID":typeof y=="string"||y?.length>0&&y.every?.(B=>typeof B=="string")||(D||(D=[])).push(`Value ${gs(y)} in property ${I} must be a string, or an array of strings`);break;case"String":typeof y!="string"&&(D||(D=[])).push(`Value ${gs(y)} in property ${I} must be a string`);break;case"Boolean":typeof y!="boolean"&&(D||(D=[])).push(`Value ${gs(y)} in property ${I} must be a boolean`);break;case"Date":if(!(y instanceof Date)){if(typeof y=="string"||typeof y=="number")return new Date(y);(D||(D=[])).push(`Value ${gs(y)} in property ${I} must be a Date`)}break;case"BigInt":if(typeof y!="bigint"){if(typeof y=="string"||typeof y=="number")return BigInt(y);(D||(D=[])).push(`Value ${gs(y)} in property ${I} must be a bigint`)}break;case"Bytes":y instanceof Uint8Array||(D||(D=[])).push(`Value ${gs(y)} in property ${I} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(y)){if(P.elements)for(let B=0,F=y.length;B<F;B++){let C=y[B],G=A(C,P.elements,I+"[*]");G&&(y[B]=G)}}else(D||(D=[])).push(`Value ${gs(y)} in property ${I} must be a Buffer or Uint8Array`);break}P.nullable===!1&&y==null&&(D||(D=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let y=0,P=S.length;y<P;y++){let I=S[y];if(!I.relationship&&(!O||I.name in p)){let B=A(p[I.name],I,I.name);B&&(p[I.name]=B)}}if(d)for(let y in p)S.find(P=>P.name===y)||(D||(D=[])).push(`Property ${y} is not allowed`);if(D)throw new jr.ClientError(D.join(". "))}getUpdatedTime(){return this[md]}wasLoadedFromSource(){return b?!!this[fN]:void 0}static async addAttributes(p){let O=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,Pk.validateAttribute)(D.name),O.push(D)}return St({table:s,database:c,schemaDefined:_,attributes:O}),je.indexingOperation}static async removeAttributes(p){let O=S.filter(D=>!p.includes(D.name));return St({table:s,database:c,schemaDefined:_,attributes:O}),je.indexingOperation}static getRecordCount(p){let O=i.getStats().entryCount,D=1e3/2,A=performance.now(),y=Math.floor(O/2),P=p?.exactCount,I=0,B=0,F;for(let{value:C}of i.getRange({start:!0,lazy:!0}))if(C!=null&&I++,B++,!P&&B<y&&performance.now()-A>D){F=B;break}if(F){let C=I;I=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:F}))re!=null&&I++;let G=F*2,H=(I+C)/G,ee=Math.pow((I-C+1)/F/2,2)+H*(1-H)/G,fe=Math.max(Math.sqrt(ee)*O,1),se=Math.round(H*O),Be=Math.max(se-1.96*fe,I+C),ue=Math.min(se+1.96*fe,O),Pe=Math.pow(10,Math.round(Math.log10(fe)));return Pe>se&&(Pe=Pe/10),I=Math.round(se/Pe)*Pe,{recordCount:I,estimatedRange:[Math.round(Be),Math.round(ue)]}}return{recordCount:I}}static updatedAttributes(){Ji=this.propertyResolvers={$id:(p,O,D)=>({value:D.key}),$updatedtime:(p,O,D)=>D.version,$record:(p,O,D)=>D?{value:p}:p};for(let p of this.attributes){p.resolve=null;let O=p.relationship;if(O)if(p.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),Ey=!0,O.to)p.elements?.definition?(Ji[p.name]=p.resolve=(D,A,y)=>{let P=D[O.from?O.from:t],I=p.elements.definition.tableClass;return y?il({attribute:O.to,value:P},Zn(A).getReadTxn(),!1,I,!1).asArray:I.search([{attribute:O.to,value:P}],A).asArray},p.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},p.resolve.definition=p.elements.definition,O.from&&(p.resolve.from=O.from)):console.error(`The one-to-many/many-to-many relationship property "${p.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(O.from){let D=p.definition||p.elements?.definition;D?(Ji[p.name]=p.resolve=(A,y,P)=>{let I=A[O.from];if(I!==void 0){if(p.elements){let B,F=I.map(C=>{let G=P?D.tableClass.primaryStore.getEntry(C,{transaction:Zn(y).getReadTxn()}):D.tableClass.get(C,y);return G?.then&&(B=!0),G});return O.filterMissing?B?Promise.all(F).then(C=>C.filter(Dk)):F.filter(Dk):B?Promise.all(F):F}return P?D.tableClass.primaryStore.getEntry(I,{transaction:Zn(y).getReadTxn()}):D.tableClass.get(I,y)}},p.set=(A,y)=>{if(Array.isArray(y)){let P=y.map(I=>I[Ue]||I[D.tableClass.primaryKey]);A[O.from]=P}else{let P=y[Ue]||y[D.tableClass.primaryKey];A[O.from]=P}},p.resolve.definition=p.definition||p.elements?.definition,p.resolve.from=O.from):console.error(`The relationship property "${p.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${p.name}" in table "${s}" must use either "from" or "to" arguments`)}um(this,this)}static async deleteHistory(p=0,O=!1){let D;for(let{key:A,value:y}of l.getRange({start:0,end:p}))await Cl(),Kt(y).tableId===n&&(D=rm(l,A,y));if(O)for(let{key:A,value:y,localTime:P}of i.getRange({start:0,versions:!0}))await Cl(),y===null&&P<p&&(D=i.remove(A));await D}static async*getHistory(p=0,O=1/0){for(let{key:D,value:A}of l.getRange({start:p||1,end:O})){await Cl();let y=Kt(A);y.tableId===n&&(yield{id:y.recordId,localTime:D,version:y.version,type:y.type,value:y.getValue(i,!0,D),user:y.user})}}static async getHistoryOfRecord(p){let O=[];if(p==null)throw new Error("An id is required");let D=i.getEntry(p);if(!D)return O;let A=D.localTime;if(!A)throw new Error("The entry does not have a local audit time");let y=0;do{await Cl();let P=l.get(A);if(P){let I=Kt(P);O.push({id:I.recordId,localTime:A,version:I.version,type:I.type,value:I.getValue(i,!0,A),user:I.user}),A=I.previousLocalTime}else break}while(y<1e3&&A);return O.reverse()}static cleanup(){z?.remove()}}je.updatedAttributes();let fY=je.prototype;return fY[yue]=!0,E&&je.setTTLExpiration(E/1e3),W&&EY(),je;function jd(Q,p,O){let D;for(let A in r){let y=r[A],P=y.isIndexing,I=O?.[A],B=p?.[A];if(I===B&&!P)continue;D=!0;let F=y.indexNulls,C=(0,Sd.getIndexedValues)(I,F),G=(0,Sd.getIndexedValues)(B,F);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)&&bk){let ee=G.concat(C).map(fe=>({key:fe,value:Q}));y.prefetch(ee,wk)}for(let ee=0,fe=G.length;ee<fe;ee++)y.remove(G[ee],Q)}else C?.length>0&&bk&&y.prefetch(C.map(H=>({key:H,value:Q})),wk);if(C)for(let H=0,ee=C.length;H<ee;H++)y.put(C[H],Q)}return D}a(jd,"updateIndices");function $l(Q){switch(typeof Q){case"number":return!0;case"string":if(Q.length<659)return!0;if(Q.length>yk)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,ja.writeKey)(Q,wue,0)>yk)throw new Error("Primary key size is too large: "+Q.length);return!0}a($l,"checkValidId");function nS(Q,p,O,D,A){let y=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),O.transaction?.isDone)return A(null,Q);let P=i.getEntry(Q,O);return P&&p&&(P?.version>(p.lastModified||0)&&(p.lastModified=P.version),P?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=P.localTime)),A(P,Q)},"whenPrefetched");return D?y():_e>0?(_e--,y()):new Promise((P,I)=>{_e===0?(_e--,i.prefetch([Q],()=>{B(),F()})):(Z.push(Q),ce.push(F),Z.length>dY&&(_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<_Y&&de++}a(B,"prefetch");function F(){try{P(y())}catch(C){I(C)}}a(F,"load")})}a(nS,"loadLocalRecord");function zd(Q){if(!Q?.role)return;let p=Q.role.permission;if(p.super_user)return Cue;let O=p[c],D,A=O?.tables;if(A)return A[s];if(c==="data"&&(D=p[s])&&!D.tables)return D}a(zd,"getTablePermissions");function sS(Q,p,O,D){if(b){let A;if(O.noCache?A=!0:(p?(!p.value||p.metadataFlags&(hd|pd)||p.expiresAt&&p.expiresAt<Date.now())&&(A=!0):A=!0,En(!A,"cache-hit",s)),A){let y=py(Q,p,O).then(P=>(P?.value?.[pe]&&ct.error("Can not assign a record with a record property"),O&&(P?.version>(O.lastModified||0)&&(O.lastModified=P.version),O.lastRefreshed=Date.now()),P));if(O?.onlyIfCached||p?.value&&D?.allowStaleWhileRevalidate?.(p,Q)){if(y.catch(P=>ct.warn(P)),O?.onlyIfCached&&!D.doesExist())throw new jr.ServerError("Entry is not cached",504);return}else return y}}else if(p?.value&&p.expiresAt&&p.expiresAt<Date.now())return je.evict(p.key,p.value,p.version),p.value=null,{then(A){return A(p)}}}a(sS,"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 O=p.next;if(!O)return p=p.next=new ha,p.lmdbDb=i,p;p=O}while(!0)}else return new lE}a(Zn,"txnForContext");function iS(Q,p,O){if(!Q)return;tS=Q;let D=Q.value||Q.deref?.()||(tS=i.getEntry(Q.key))?.value;if(typeof p=="object"){let y=Ji,P=D;for(let I=0,B=p.length;I<B;I++){let F=p[I],C=y?.[F];P=C&&P?C(P,O,!0)?.value:P?.[F],y=C?.definition?.tableClass?.propertyResolvers}return P}let A=Ji[p];return A?A(D,O):D[p]}a(iS,"getAttributeValue");function hy(Q,p,O,D,A){let y=A?.length,P={transaction:D,lazy:y>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},I;function B(F,C){let G=F?.value;if(!G)return Wa.SKIP;for(let H=0;H<y;H++)if(!I?.includes(H)&&!A[H](G,F))return Wa.SKIP;return C!==void 0&&(F.key=C),F}if(a(B,"processEntry"),y>0||!Q.hasEntries){let F=Q.map(C=>{if(I=null,typeof C=="object"&&C?.key!==void 0)return y>0?B(C):C;if(C==null)return Wa.SKIP;for(let G=0;G<y;G++){let ee=A[G].idFilter;if(ee){if(!ee(C))return Wa.SKIP;I||(I=[]),I.push(G)}}return nS(C,O,P,!1,B)});return Array.isArray(Q)&&(F=F.filter(C=>C!==Wa.SKIP)),F.hasEntries=!0,F}return Q}a(hy,"transformToEntries");async function py(Q,p,O){let D=p?.metadataFlags,A=p?.version,y,P;if(!i.attemptLock(Q,A,()=>{clearTimeout(P);let C=i.getEntry(Q);!C||!C.value||C.metadataFlags&(hd|pd)?y(py(Q,i.getEntry(Q),O)):y(C)}))return new Promise(C=>{y=C,P=setTimeout(()=>{i.unlock(Q,A)},Nue)});let I=p?.value,B={requestContext:O,replacingRecord:I,replacingVersion:A,noCacheStore:!1,source:null,resourceCache:O?.resourceCache},F=O?.responseHeaders;return new Promise((C,G)=>{let H;hN(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&hd;let re=B.lastModified||ue&&A;Be=ue||re>A||!I,re||(re=(0,Sd.getNextMonotonicTime)());let J=performance.now()-fe;if(hr(J,"cache-resolution",s,null,"success"),F&&Ch(F,"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}`,I&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!O?.mustRevalidate||O?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(C({version:A,value:I}),ct.trace(re.message,"(returned stale record)")):G(re);let J=performance.now()-fe;hr(J,"cache-resolution",s,null,"fail"),F&&Ch(F,"Server-Timing",`cache-resolve;dur=${J.toFixed(2)}`,!0),B.transaction.abort();return}if(O?.noCacheStore||B.noCacheStore){B.transaction.abort();return}Zn(B).addWrite({key:Q,store:i,entry:p,nodeName:"source",commit:(re,J)=>{if(J?.version!==A)return;let ge=jd(Q,I,se);se?(we.put?.(B,Q,se),T(Q,se,J,re,0,h&&Be||null,B,B.expiresAt,"put",!!ue)):(we.delete?.(B,Q),h||m?T(Q,null,J,re,0,h&&Be||null,B,0,"delete",!!ue):i.remove(Q,A))}})}),()=>{i.unlock(Q,A)},ee=>{i.unlock(Q,A),H&&ct.error("Error committing cache update",ee)})})}a(py,"getFromSource");function Jd(){if(Ge!==Wd&&(Wd=Ge,(0,Qa.getWorkerIndex)()===(0,Qa.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(),O=a(D=>{ct.trace(`Scheduled next cleanup scan at ${new Date(D)}ms`),Qd=setTimeout(()=>v=v.then(async()=>{if(O(Math.max(D+Ge,Date.now())),i.rootStore.status!=="open"){clearTimeout(Qd);return}let A=50,y=new Array(A),P=0;ct.trace(`Starting cleanup scan for ${s}`);try{let I=0;for(let{key:B,value:F,version:C,expiresAt:G}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let H;F===null&&!h&&C+bue<Date.now()?H=i.remove(B,C):G&&G+f<Date.now()&&(H=je.evict(B,F,C),I++),H&&(await y[P],y[P]=H.catch(ee=>{ct.error("Cleanup error",ee)}),++P>=A&&(P=0)),await Cl()}ct.trace(`Finished cleanup scan for ${s}, evicted ${I} entries`)}catch(I){ct.trace(`Error in cleanup scan for ${s}:`,I)}}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");O(p)}}a(Jd,"scheduleCleanup");function my(){z=l?.addDeleteRemovalCallback(n,Q=>{let p=i.getEntry(Q);p?.value===null&&i.remove(Q,p.version)})}a(my,"addDeleteRemoval");function EY(){(0,Qa.getWorkerIndex)()===0&&setInterval(async()=>{if(!rS){rS=!0;try{let Q=W.name,p=r[Q];if(!p)throw new Error(`expiresAt attribute ${W} must be indexed`);for(let O of p.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let D of p.getValues(O)){let A=i.getEntry(D);A?.value?A.value[Q]<Date.now()&&je.evict(D,A.value,A.version):i.ifVersion(D,A?.version,()=>p.remove(O,D))}await Cl()}}catch(Q){ct.error("Error in evicting old records",Q)}finally{rS=!1}}},Oue).unref()}a(EY,"runRecordExpirationEviction")}function EN(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 wk(){}function Due(e){Mk=e}function fm(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:(Lue.test(e)||(e+="Z"),new Date(e)):new Date(+e);case void 0:case"Any":return(0,hm.autoCast)(e);default:return e}}function Ck(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function hN(e,t,r){return e?.then?e.then(t,r):t(e)}function Em(e,t){e[Qr]=t,e[pe]=t?.value??null,e[md]=t?.version}function Dk(e){return e!=null}function gs(e){try{return JSON.stringify(e)}catch{return e}}var Rs,Wa,Sd,Lk,Pk,Rd,jr,Td,gd,ct,ja,Qa,hm,Aue,Mk,Oue,bue,bk,Nue,md,yue,Qr,Ed,Nk,Iue,fN,wl,hd,pd,wue,yk,Ik,Cue,nIe,Lue,Cl,mp=be(()=>{Rs=x(L()),Wa=require("lmdb"),Sd=x(wr()),Lk=require("lodash"),Pk=x(iu());Mn();qg();Rd=x(X());Ok();jr=x(ie()),Td=x(hi()),gd=x(os());Re();np();ct=x(k());dE();pa();ja=require("ordered-binary"),Qa=x(rt());so();hm=x(Y());fu();Ti();nm();D_();Aue=new Uint8Array(9);Aue[8]=192;Oue=6e4,bue=864e5;Rd.initSync();bk=Rd.get(Rs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Nue=1e4,md=Symbol.for("version"),yue=Symbol.for("incremental-update"),Qr=Symbol("entry"),Ed=Symbol("is-saving"),Nk=1,Iue=2,fN=Symbol("loaded-from-source"),wl={isNotification:!0,ensureLoaded:!1},hd=1,pd=8,wue=Buffer.allocUnsafeSlow(8192),yk=1978,Ik=100,Cue={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},nIe=(0,hm.convertToMS)(Rd.get(Rs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(pm,"makeTable");a(EN,"attributesAsObject");a(wk,"noop");a(Due,"setServerUtilities");Lue=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(fm,"coerceType");a(Ck,"isDescendantId");Cl=a(()=>new Promise(setImmediate),"rest");a(hN,"when");a(Em,"updateResource");a(Dk,"exists");a(gs,"stringify")});var Ve={};$e(Ve,{database:()=>wc,databases:()=>ft,dropDatabase:()=>Yg,dropTableMeta:()=>Bue,getDatabases:()=>Br,getDefaultCompression:()=>bh,getTables:()=>Pue,onUpdatedTable:()=>vb,readMetaDb:()=>Ad,resetDatabases:()=>b_,table:()=>St,tables:()=>sn});function Pue(){return Rm||Br(),sn||{}}function Br(){if(Rm)return ft;Rm=!0,Pl=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,Ll.getBaseSchemaPath)())){for(let r of(0,On.readdirSync)((0,Ll.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,lt.join)((0,Ll.getBaseSchemaPath)(),r.name),s=(0,lt.join)((0,Ll.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=Pl.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[Am]}}return Pl=null,ft}}function b_(){Rm=!1;for(let[,e]of Ho)e.needsDeletion=!0;Br();for(let[e,t]of Ho)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Ho.delete(e));return ft}function Ad(e,t,r=SN,n,s){let i=new pN.default(e,!1);try{let o=Ho.get(e);o?o.needsDeletion=!1:(o=(0,Sm.open)(i),Ho.set(e,o));let c=new za.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(mm.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,On.existsSync)(n)&&(i.path=n,_=(0,Sm.open)(i),_.isLegacy=!0):_=tm(o));let u=Hk(r),d=u[Am],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 T=E.get(m);T||E.set(m,T={attributes:[]}),(S==null||h.is_hash_attribute)&&(T.primary=h),S!=null&&T.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 T=u[f],R={},N=[],b,U,v=typeof S.audit=="boolean"?S.audit:(0,Ot.get)(Vt.CONFIG_PARAMS.LOGGING_AUDITLOG),q=S.trackDeletes,M=S.expiration,W=S.eviction,z=S.sealed;if(T)R=T.indices,N=T.attributes,T.schemaVersion++;else{b=S.tableId,b?b>=(l.get(Dl)||0)&&l.putSync(Dl,b+1):(S.tableId=b=l.get(Dl),b||(b=1),l.putSync(Dl,b+1),l.putSync(S.key,S));let Z=new za.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)||Bk;Z.compression.threshold=ce}U=Rf(o.openDB(S.key,Z)),U.rootStore=o,U.tableId=b}for(let Z of m){Z.attribute=Z.name;try{if(!Z.is_hash_attribute&&(Z.indexed||Z.attribute&&!Z.name)){if(!R[Z.name]){let _e=new za.default(!Z.is_hash_attribute,Z.is_hash_attribute);R[Z.name]=o.openDB(Z.key,_e),R[Z.name].indexNulls=Z.indexNulls}let ce=N.find(_e=>_e.name===Z.name);ce?N.splice(N.indexOf(ce),1,Z):N.push(Z)}}catch(ce){jn.error("Error trying to update attribute",Z,N,R,ce)}}if(!T){T=xk(u,f,pm({primaryStore:U,auditStore:_,audit:v,sealed:z,expirationMS:M&&M*1e3,evictionMS:W&&W*1e3,trackDeletes:q,tableName:f,tableId:b,primaryKey:S.name,databasePath:s?r+"/"+f:r,databaseName:r,indices:R,attributes:m,schemaDefined:S.schemaDefined,dbisDB:l})),T.schemaVersion=1;for(let Z of TN)Z(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Hk(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)),Pl&&!Pl.has(e)){let r=new Set;t[Am]=r,Pl.set(e,r)}return t}function xk(e,t,r){return e[t]=r,r}function wc({database:e,table:t}){e||(e=SN),Br();let r=Hk(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=Ho.get(o);if(!c){let l=new pN.default(o,!1);c=(0,Sm.open)(l),Ho.set(o,c)}return c}async function Yg(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,Ho.delete(r.path),r.status==="open"&&(await r.close(),await Od.remove(r.path));if(r||(r=wc({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[Am]}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=SN);let d=wc({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,T;_==null&&(_=!0);let R=new za.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 N,b;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=tm(d)),m=i.find(ce=>ce.isPrimaryKey)||{},h=m.name,m.is_hash_attribute=m.isPrimaryKey=!0,m.schemaDefined=_,m.compression=bh(),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 za.default(!1,!0);W.compression=m.compression;let z=e+"/",Z=Rf(d.openDB(z,W));Z.rootStore=d,T=d.dbisDb=d.openDB(mm.INTERNAL_DBIS_NAME,R),Z.tableId=T.get(Dl),Z.tableId||(Z.tableId=1),T.putSync(Dl,Z.tableId+1),m.tableId=Z.tableId,f=xk(E,e,pm({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:T})),f.schemaVersion=1,N=!0,q(),T.put(z,m)}S=f.indices,T=T||(d.dbisDb=d.openDB(mm.INTERNAL_DBIS_NAME,R)),f.dbisDB=T;let U=[];for(let{key:M,value:W}of T.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)&&(q(),N=!0,ce||T.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=T.get(W);if(M.isPrimaryKey){if(z=z||T.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),N=!0,q(),T.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.properties)!==JSON.stringify(M.properties)||JSON.stringify(z.elements)!==JSON.stringify(M.elements);if(M.indexed){let ce=new za.default(!0,!1),_e=d.openDB(W,ce);(Z||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<bd.workerData?.restartNumber)&&(N=!0,q(),z=T.get(W),(Z||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<bd.workerData?.restartNumber)&&(N=!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))),T.put(W,M)),z?.indexNulls&&M.indexNulls===void 0&&(M.indexNulls=!0),_e.indexNulls=M.indexNulls,S[M.name]=_e}else Z&&(N=!0,q(),T.put(W,M))}}finally{b&&b()}if(N&&(f.schemaVersion++,f.updatedAttributes()),jn.trace(`${e} table loading, running index`),v.length>0||U.length>0?f.indexingOperation=vue(f,v,U):N&&Tm.signalSchemaChange(new gm.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=u,N)for(let M of TN)M(f,u!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),jn.trace(`${e} table loaded`),f;function q(){b||d.transactionSync(()=>({then(M){b=M}}))}a(q,"startTxn")}async function vue(e,t,r){try{let n=e.schemaVersion;await Tm.signalSchemaChange(new gm.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,Uk.getIndexedValues)(u[h]);if(m)for(let S=0,T=m.length;S<T;S++)f.dbi.put(m[S],_)}}),s.then(()=>l--,E=>{l--,jn.error(E)}),bd.workerData&&bd.workerData.restartNumber!==vk.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=_,e.dbisDB.put(E.key,E);if(i)return}l>Mue?await s:l>Uue&&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 Tm.signalSchemaChange(new gm.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){jn.error("Error in indexing",n)}}function Bue({table:e,database:t}){let r=wc({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 vb(e){TN.push(e)}function bh(){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)||Bk,n={startingOffset:32};return t&&(n.dictionary=Od.readFileSync(t)),r&&(n.threshold=r),e&&n}var Ot,mm,Sm,lt,On,Ll,za,pN,Vt,Od,mN,Uk,Tm,gm,bd,jn,vk,SN,Am,Bk,sn,ft,Dl,TN,Rm,Ho,Pl,Mue,Uue,Re=be(()=>{Ot=x(X()),mm=x(_t()),Sm=require("lmdb"),lt=require("path"),On=require("fs"),Ll=x(Je());mp();za=x(Eu()),pN=x(hu()),Vt=x(L()),Od=x(require("fs-extra")),mN=require("../index"),Uk=x(wr()),Tm=x(hi()),gm=x(os()),bd=require("worker_threads"),jn=x(k()),vk=x(rt());so();fu();SN="data",Am=Symbol("defined-tables"),Bk=((0,Ot.get)(Vt.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,Ot.initSync)();sn=Object.create(null),ft=Object.create(null);(0,mN._assignPackageExport)("databases",ft);(0,mN._assignPackageExport)("tables",sn);Dl=Symbol.for("next-table-id"),TN=[],Ho=new Map;a(Pue,"getTables");a(Br,"getDatabases");a(b_,"resetDatabases");a(Ad,"readMetaDb");a(Hk,"ensureDB");a(xk,"setTable");a(wc,"database");a(Yg,"dropDatabase");a(St,"table");Mue=1e3,Uue=10;a(vue,"runIndexing");a(Bue,"dropTableMeta");a(vb,"onUpdatedTable");a(bh,"getDefaultCompression")});var Y=g((dIe,Xk)=>{"use strict";var xo=require("path"),$k=require("fs-extra"),zr=k(),Gk=require("fs-extra"),Om=require("os"),Hue=require("net"),xue=require("recursive-iterator"),mt=L(),Gue=SS(),qk=require("papaparse"),bm=require("moment"),{inspect:que}=require("util"),Fk=require("is-number"),_Ie=require("lodash"),Fue=require("minimist"),kue=require("https"),$ue=require("http"),{hdb_errors:Nm}=ie(),Vue=/^((\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)))$/,Vk=require("util").promisify(setTimeout),Yue=100,Kue=5,Wue="",Que=4,kk={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Xk.exports={isEmpty:bn,isEmptyOrZeroLength:zs,arrayHasEmptyValues:Jue,arrayHasEmptyOrZeroLengthValues:Xue,buildFolderPath:Zue,isBoolean:Yk,errorizeMessage:jue,stripFileExtension:t_e,autoCast:r_e,autoCastJSON:Kk,autoCastJSONDeep:RN,removeDir:n_e,compareVersions:s_e,isCompatibleDataVersion:i_e,escapeRawValue:o_e,unescapeValue:a_e,stringifyProps:c_e,timeoutPromise:u_e,isClusterOperation:d_e,getClusterUser:E_e,checkGlobalSchemaTable:f_e,getHomeDir:Qk,getPropsFilePath:l_e,promisifyPapaParse:h_e,removeBOM:jk,createEventPromise:p_e,checkProcessRunning:m_e,checkSchemaTableExist:S_e,checkSchemaExists:zk,checkTableExists:Jk,getStartOfTomorrowInSeconds:T_e,getLimitKey:g_e,isObject:e_e,isNotEmptyAndHasValue:zue,autoCasterIsNumberCheck:Wk,backtickASTSchemaItems:R_e,isPortTaken:__e,createForkArgs:A_e,autoCastBoolean:O_e,async_set_timeout:Vk,getTableHashAttribute:b_e,doesSchemaExist:N_e,doesTableExist:y_e,stringifyObj:I_e,ms_to_time:w_e,changeExtension:C_e,getEnvCliRootPath:AN,noBootFile:D_e,httpRequest:L_e,transformReq:P_e,convertToMS:M_e,PACKAGE_ROOT:mt.PACKAGE_ROOT};function jue(e){return e instanceof Error?e:new Error(e)}a(jue,"errorizeMessage");function bn(e){return e==null}a(bn,"isEmpty");function zue(e){return!bn(e)&&(e||e===0||e===""||Yk(e))}a(zue,"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 Xue(e){if(zs(e))return!0;for(let t=0;t<e.length;t++)if(zs(e[t]))return!0;return!1}a(Xue,"arrayHasEmptyOrZeroLengthValues");function Zue(...e){try{return e.join(xo.sep)}catch{console.error(e)}}a(Zue,"buildFolderPath");function Yk(e){return bn(e)?!1:e===!0||e===!1}a(Yk,"isBoolean");function e_e(e){return bn(e)?!1:typeof e=="object"}a(e_e,"isObject");function t_e(e){return zs(e)?Wue:e.slice(0,-Que)}a(t_e,"stripFileExtension");function r_e(e){return bn(e)||e===""||typeof e!="string"?e:kk[e]!==void 0?kk[e]:Wk(e)===!0?Number(e):Vue.test(e)?new Date(e):e}a(r_e,"autoCast");function Kk(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Kk,"autoCastJSON");function RN(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=RN(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=RN(r);n!==r&&(e[t]=n)}return e}else return Kk(e)}a(RN,"autoCastJSONDeep");function Wk(e){if(e.startsWith("0.")&&Fk(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Fk(e))}a(Wk,"autoCasterIsNumberCheck");async function n_e(e){if(zs(e))throw new Error(`Directory path: ${e} does not exist`);try{await Gk.emptyDir(e),await Gk.remove(e)}catch(t){throw zr.error(`Error removing files in ${e} -- ${t}`),t}}a(n_e,"removeDir");function s_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(s_e,"compareVersions");function i_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(i_e,"isCompatibleDataVersion");function o_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(o_e,"escapeRawValue");function a_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(a_e,"unescapeValue");function c_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+Om.EOL}!zs(n)&&n[0]===";"?r+=" "+n+s+Om.EOL:zs(n)||(r+=n+"="+s+Om.EOL)}catch{zr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(c_e,"stringifyProps");function Qk(){let e;try{e=Om.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Qk,"getHomeDir");function l_e(){let e=xo.join(Qk(),mt.HDB_HOME_DIR_NAME,mt.BOOT_PROPS_FILE_NAME);return $k.existsSync(e)||(e=xo.join(__dirname,"../","hdb_boot_properties.file")),e}a(l_e,"getPropsFilePath");function u_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(u_e,"timeoutPromise");async function __e(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=Hue.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(__e,"isPortTaken");function d_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(d_e,"isClusterOperation");function f_e(e,t){let r=(Re(),ae(Ve)).getDatabases();if(!r[e])return Nm.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Nm.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(f_e,"checkGlobalSchemaTable");function E_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(E_e,"getClusterUser");function h_e(){qk.parsePromise=function(e,t,r){return new Promise(function(n,s){qk.parse(e,{header:!0,transformHeader:jk,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(h_e,"promisifyPapaParse");function jk(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(jk,"removeBOM");function p_e(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;zr.info(`Got cluster status event response: ${que(s)}`);try{i.cancel()}catch{zr.error("Error trying to cancel timeout.")}n(s)})})}a(p_e,"createEventPromise");async function m_e(e){let t=!0,r=0;do await Vk(Yue*r++),(await Gue.findPs(e)).length>0&&(t=!1);while(t&&r<Kue);if(t)throw new Error(`process ${e} was not started`)}a(m_e,"checkProcessRunning");function S_e(e,t){let r=zk(e);if(r)return r;let n=Jk(e,t);if(n)return n}a(S_e,"checkSchemaTableExist");function zk(e){let{getDatabases:t}=(Re(),ae(Ve));if(!t()[e])return Nm.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(zk,"checkSchemaExists");function Jk(e,t){let{getDatabases:r}=(Re(),ae(Ve));if(!r()[e][t])return Nm.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Jk,"checkTableExists");function T_e(){let e=bm().utc().add(1,mt.MOMENT_DAYS_TAG).startOf(mt.MOMENT_DAYS_TAG).unix(),t=bm().utc().unix();return e-t}a(T_e,"getStartOfTomorrowInSeconds");function g_e(){return bm().utc().format("DD-MM-YYYY")}a(g_e,"getLimitKey");function R_e(e){try{let t=new xue(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(R_e,"backtickASTSchemaItems");function A_e(e){return[e]}a(A_e,"createForkArgs");function O_e(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(O_e,"autoCastBoolean");function b_e(e,t){let{getDatabases:r}=(Re(),ae(Ve)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(b_e,"getTableHashAttribute");function N_e(e){let{getDatabases:t}=(Re(),ae(Ve));return t()[e]!==void 0}a(N_e,"doesSchemaExist");function y_e(e,t){let{getDatabases:r}=(Re(),ae(Ve));return r()[e]?.[t]!==void 0}a(y_e,"doesTableExist");function I_e(e){try{return JSON.stringify(e)}catch{return e}}a(I_e,"stringifyObj");function w_e(e){let t=bm.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(w_e,"ms_to_time");function C_e(e,t){let r=xo.basename(e,xo.extname(e));return xo.join(xo.dirname(e),r+t)}a(C_e,"changeExtension");function AN(){if(process.env[mt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[mt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Fue(process.argv);if(e[mt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[mt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(AN,"getEnvCliRootPath");var gN;function D_e(){if(gN)return gN;let e=AN();if(AN()&&$k.pathExistsSync(xo.join(e,mt.HDB_CONFIG_FILE)))return gN=!0,!0}a(D_e,"noBootFile");function L_e(e,t){let r;return e.protocol==="http:"?r=$ue:r=kue,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",l=>{c.body+=l}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(L_e,"httpRequest");function P_e(e){if(!e.schema&&!e.database){e.schema=mt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(P_e,"transformReq");function M_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(M_e,"convertToMS")});var X=g((EIe,n$)=>{"use strict";var ON=require("fs-extra"),Ja=require("path"),Zk=require("os"),U_e=require("properties-reader"),yd=k(),Nd=Y(),Ee=L(),ym=Et(),v_e="Error initializing environment manager",Im="BOOT_PROPS_FILE_PATH",e$=!1,B_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},Fi={};n$.exports={BOOT_PROPS_FILE_PATH:Im,getHdbBasePath:H_e,setHdbBasePath:x_e,get:t$,initSync:q_e,setProperty:ve,initTestEnvironment:k_e,setCloneVar:F_e};function H_e(){return Fi[Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(H_e,"getHdbBasePath");function x_e(e){Fi[Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(x_e,"setHdbBasePath");function t$(e){let t=ym.getConfigValue(e);return t===void 0?Fi[e]:t}a(t$,"get");function ve(e,t){B_e[e]&&(Fi[e]=t),ym.updateConfigObject(e,t)}a(ve,"setProperty");function G_e(){let e;try{e=Nd.getPropsFilePath(),ON.accessSync(e,ON.constants.F_OK|ON.constants.R_OK),e$=!0;let t=U_e(e);return Fi[Ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Ee.HDB_SETTINGS_NAMES.INSTALL_USER),Fi[Ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Fi[Im]=e,!0}catch{return yd.trace(`Environment manager found no properties file at ${e}`),!1}}a(G_e,"doesPropFileExist");function q_e(e=!1){try{(e$||G_e()||Nd.noBootFile())&&!r$&&(ym.initConfig(e),Fi[Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=ym.getConfigValue(Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){yd.error(v_e),yd.error(t),console.error(t),process.exit(1)}}a(q_e,"initSync");var r$=!1;function F_e(e){r$=e}a(F_e,"setCloneVar");function k_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=Ja.join(__dirname,"../../","unitTests");Fi[Im]=Ja.join(l,"hdb_boot_properties.file"),ve(Ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ja.join(l,"settings.test")),ve(Ee.HDB_SETTINGS_NAMES.INSTALL_USER,Zk.userInfo()?Zk.userInfo().username:void 0),ve(Ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),ve(Ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ja.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,Ja.join(l,"envDir")),ve(Ee.CONFIG_PARAMS.STORAGE_PATH,Ja.join(l,"envDir")),s&&(ve(Ee.CONFIG_PARAMS.HTTP_SECUREPORT,t$(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,Ja.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 ${Im}. Please check your boot props and settings files`;yd.fatal(r),yd.error(t)}}a(k_e,"initTestEnvironment")});var o$=g((pIe,i$)=>{"use strict";var Cm=X();Cm.initSync();var wm=L(),{httpRequest:$_e}=Y(),V_e=require("path"),s$=require("fs-extra"),Y_e=require("yaml"),K_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};i$.exports={cliOperations:Q_e,buildRequest:W_e};function W_e(){let e={};for(let t of process.argv){if(K_e[t]){e.operation=t;continue}if(t.includes("=")){let[r,...n]=t.split("=");n=n.join("=");try{n=JSON.parse(n)}catch{}e[r]=n}}return e}a(W_e,"buildRequest");async function Q_e(e){await s$.exists(V_e.join(Cm.get(wm.CONFIG_PARAMS.ROOTPATH),wm.HDB_PID_FILE))||(console.error("HarperDB must be running to perform this operation"),process.exit()),await s$.exists(Cm.get(wm.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))||(console.error("No domain socket found, unable to perform this operation"),process.exit());try{let t=await $_e({method:"POST",protocol:"http:",socketPath:Cm.get(wm.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),headers:{"Content-Type":"application/json"}},e);t=JSON.parse(t.body),e.json?console.log(JSON.stringify(t,null,2)):console.log(Y_e.stringify(t).trim())}catch(t){let r="Error: ";t?.response?.data?.error?r+=t.response.data.error:t?.response?.data?r+=t?.response?.data:r+=t.message,console.error(r)}}a(Q_e,"cliOperations")});var l$=g((SIe,c$)=>{"use strict";var a$=require("semver/functions/major"),j_e=Sa(),bN=process.versions&&process.versions.node?process.versions.node:void 0;c$.exports=z_e;function z_e(){let e=j_e.engines["minimum-node"];if(bN&&a$(bN)<a$(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${bN}. Please install a version of Node.js that is withing the defined range.`}}a(z_e,"checkNodeVersion")});var yN=g((gIe,u$)=>{"use strict";var Id=X();Id.initSync();var Ml=require("fs-extra"),NN=require("path"),Ul=L(),J_e=require("crypto"),X_e=require("uuid").v4;u$.exports=Z_e;function Z_e(){if(Id.getHdbBasePath()!==void 0){let e=NN.join(Id.getHdbBasePath(),Ul.LICENSE_KEY_DIR_NAME,Ul.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=NN.join(Id.getHdbBasePath(),Ul.LICENSE_KEY_DIR_NAME,Ul.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=NN.join(Id.getHdbBasePath(),Ul.LICENSE_KEY_DIR_NAME,Ul.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Ml.accessSync(r),Ml.accessSync(e),Ml.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=X_e(),i=J_e.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Ml.writeFileSync(r,s),Ml.writeFileSync(e,i.privateKey),Ml.writeFileSync(t,i.publicKey)}else throw n}}}a(Z_e,"checkJWTTokenExist")});var d$=g((AIe,_$)=>{"use strict";var IN=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};_$.exports={HdbInfoInsertObject:IN}});var h$=g((bIe,E$)=>{"use strict";var f$=L(),wN=class{static{a(this,"UpgradeObject")}constructor(t,r){this[f$.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[f$.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};E$.exports={UpgradeObject:wN}});var Dm=g((yIe,m$)=>{"use strict";var zn=require("prompt"),vl=require("chalk"),p$=k(),As=require("os"),CN=ro(),DN=["yes","y"];async function ede(e){let t=`${As.EOL}`+vl.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=CN(["CONFIRM_UPGRADE"]),zn.start(),zn.message=t;let r={properties:{CONFIRM_UPGRADE:{description:vl.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 p$.error("There was an error when prompting user about an upgrade."),p$.error(s),!1}return DN.includes(n.CONFIRM_UPGRADE)}a(ede,"forceUpdatePrompt");async function tde(e){let t=`${As.EOL}`+vl.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=CN(["CONFIRM_DOWNGRADE"]),zn.start(),zn.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:vl.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 DN.includes(n.CONFIRM_DOWNGRADE)}a(tde,"forceDowngradePrompt");async function rde(){let e=`${As.EOL}`+vl.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=CN(["GENERATE_CERTS"]),zn.start(),zn.message=e;let t={properties:{GENERATE_CERTS:{description:vl.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 DN.includes(r.GENERATE_CERTS)}a(rde,"upgradeCertsPrompt");m$.exports={forceUpdatePrompt:ede,forceDowngradePrompt:tde,upgradeCertsPrompt:rde}});var PN=g((wIe,S$)=>{"use strict";var LN=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};S$.exports=LN});var g$=g((UIe,T$)=>{"use strict";var nde=Y(),sde=Et(),DIe=k(),LIe=require("path"),PIe=require("fs"),MIe=L();T$.exports={getOldPropsValue:ide};function ide(e,t,r=!1){let n=t.getRaw(e);return nde.isNotEmptyAndHasValue(n)?n:r?sde.getDefaultConfig(e):""}a(ide,"getOldPropsValue")});var b$=g((BIe,O$)=>{"use strict";var Go=require("path"),qo=require("fs-extra"),ode=require("properties-reader"),ade=PN(),Mt=k(),{getOldPropsValue:Qe}=g$(),{HDB_SETTINGS_NAMES:oe,CONFIG_PARAMS:Xa}=L(),Za=Et(),Lm=X(),R$=Y(),Js=L(),MN=new ade("3.1.0"),A$=[];function cde(){let e=ode(Lm.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.
32
+ `))}},25).unref()}o.close?.(()=>{if(ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&od()==0)try{Pq(ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,Lp),o.cantCleanupProperly||kt.warn("Had to forcefully exit the thread",Lp),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&&!Cce)for(let t in Ws){let r=Ws[t];if(isNaN(t)&&od()==0){Tce(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=od();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,Lp)}).on("error",o)}))}Promise.all(e).then(()=>{id?.postMessage({type:pt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(kq,"startServers");Eb||kq();function mb(e,t,r){let n=e?.read?e:new fce({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(mb,"deliverSocket");var vq=new Map;function Pce(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=vq.get(s),r){case"connection":i=mb(void 0,t),vq.set(s,i),i.write=(c,l,_)=>(id.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,l,_)=>(id.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),id.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(Pce,"proxyRequest");function Sb(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(Sb,"registerServer");function Vq(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(Vq,"getPorts");function Tb(e,t){for(let{port:r,secure:n}of Vq(t))$q(r,n,t?.isOperationsServer),typeof e=="function"?hb[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,Sb(e,r,!1)),Pp[r]=pb(hb,r),Lce=pb(Dce,r)}a(Tb,"httpServer");function $q(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:gb(l)})}let c=Nce();Bi[e]=(t?mce:hce)(s,async(l,_)=>{try{let d=performance.now(),E=new Gq(l,_);r&&(E.isOperationsServer=!0);let f=await Pp[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 P of f.headers||[])_.setHeader(P[0],P[1]);return l.baseRequest=E,_.baseResponse=f,Bi[e].emit("unhandled",l,_)}let h=f.status||200,m=performance.now(),S=m-d,T=f.body,g;if(!f.handlesHeaders){let P=f.headers||new xq;T?T.length>=0&&(typeof T=="string"?P.set("Content-Length",Buffer.byteLength(T)):P.set("Content-Length",T.length),g=!0):(P.set("Content-Length","0"),g=!0);let v=`hdb;dur=${S.toFixed(2)}`;f.wasCacheMiss&&(v+=", miss"),bce(P,"Server-Timing",v,!0),_.writeHead(h,P&&(P[Symbol.iterator]?Array.from(P):P)),g&&_.end(T)}let N=E.handlerPath,A=E.method;if(sd(S,"duration",N,A,f.wasCacheMiss==null?void 0:f.wasCacheMiss?"cache-miss":"cache-hit"),Mq(h<400,"success",N,A),Mq(1,"response_"+h,N,A),!g)if(T?.pipe){T.pipe(_),T.destroy&&_.on("close",()=>{T.destroy()});let P=0;T.on("data",v=>{P+=v.length}),T.on("end",()=>{sd(performance.now()-m,"transfer",N,A),sd(P,"bytes-sent",N,A)})}else T?.then?T.then(P=>{_.end(P)},u):_.end(T)}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&&sd(performance.now()-l._parent.startTime,"tls-handshake",e),sd(l.isSessionReused(),"tls-reused",e)}),Bi[e].isSecure=!0,s.SNICallback(null,(l,_)=>{try{fl=_,_&&Bi[e].setSecureContext(_.options)}finally{fl=null}})),Sb(Bi[e],e)}return Bi[e]}a($q,"getHTTPServer");function pb(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(pb,"makeCallbackChain");function Yq(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new xq}}a(Yq,"unhandled");function Mce(e,t){Tb(e,{requestOnly:!0,...t})}a(Mce,"onRequest");function Uce(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:gb(n)};r=Ace(s,e),s.SNICallback(null,(i,o)=>{try{fl=o,o&&r.setSecureContext(o.options)}finally{fl=null}}),Ws[t.securePort]=r}return t.port&&(r=Ece({noDelay:!0},e),Ws[t.port]=r),r}a(Uce,"onSocket");Object.defineProperty(pce.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 vce(e,t){let r;for(let{port:n,secure:s}of Vq(t)){Dp[n]||(Dp[n]=new gce({server:r=$q(n,s)}),Dp[n].on("connection",async(c,l)=>{try{let _=new Gq(l);_.isWebSocket=!0;let u=Pp[n](_),d=l.headers["sec-websocket-protocol"]||"",E=db[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=db[n];o||(o=db[n]=[]),o.push({listener:e,protocol:i}),Pp[n]=pb(hb,n)}return r}a(vce,"onWebSocket");function Bq(e,t){t.writeHead(404),t.end(`Not found
33
+ `)}a(Bq,"defaultNotFound");function fb(e){return e.startsWith("-----BEGIN")?e:Sce(e)}a(fb,"readPEM");function gb(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=fb(i.privateKey),c=fb(i.certificate),l=i.certificateAuthority&&fb(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=Rce(_);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 yce(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(gb,"createSNICallback")});var eF={};Ve(eF,{startHTTPThreads:()=>Hce,startSocketServer:()=>yb,updateWorkerIdleness:()=>Zq});async function Hce(e=2,t){if(t)bb(0,1,!0);else{let{loadRootComponents:r}=Up();if(e===0)return(0,Qs.setMainIsWorker)(!0),await Rb().startServers(),Promise.resolve([]);await r()}Xq();for(let r=0;r<e;r++)bb(r,e);return Promise.all(Jq)}function Xq(){let e=(0,jq.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),Ob=setInterval(()=>{Hp.notify(e)},Bce).unref())}function bb(e,t=1,r){if(Ab++,(0,Qs.startWorker)("server/threads/threadServer.js",{name:Sl.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(_){_.type===Sl.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,El.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=Bp.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=El.indexOf(n);o>-1&&El.splice(o,1)}if(a(i,"removeWorker"),hl){let o=hl;hl=[];for(let c of o)zq[c.localPort](null,c)}}}),r){let n=setInterval(()=>{Nb?Nb=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Qs.shutdownWorkers)(),Ab=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function yb(e=0,t){if(typeof e=="string")try{(0,xp.existsSync)(e)&&(0,xp.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=xce:r=Gce(t):r=Ib;let n=(0,pl.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()),Nb=!0,r(o,(c,l)=>{if(!c){if(Kq){let u=o._socket||new pl.Socket({handle:o,writable:!0,readable:!0});Kq.deliverSocket(u,e,l),u.resume()}else Ab>0?(hl.length===0&&setTimeout(()=>{hl.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,hl.push(o)):(console.log("start up a dynamic thread to handle request"),bb(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 pl.Socket({handle:o,writable:!0,readable:!0});kce(u,c,e)}hr(!0,"socket-routed")})};let s=ma();Hp.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 Ib(e,t){let r,n=0;for(let s of El){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=vp)return vp=i,t(r);n=i}vp=0,t(r)}function xce(e,t){let r={};e.getpeername(r);let n=r.address,s=ml.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);Ib(e,o=>{ml.set(n,{worker:o,lastUsed:i}),t(o)})}function Gce(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new pl.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],_=ml.get(l),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,s(_.worker);Ib(n,d=>{ml.set(l,{worker:d,lastUsed:u}),s(d,o)})})}a(r,"findByHeaderAffinity")}function Zq(){vp=0;for(let e of El)e.expectedIdle=e.recentELU.idle+qce,e.requests=1;El.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function kce(e,t,r){let n=Fce++;t.postMessage({port:r,requestId:n,event:"connection"}),e.on("data",s=>{let i=s.toString("latin1");t.postMessage({port:r,requestId:n,data:i,event:"data"})}).on("close",s=>{t.postMessage({port:r,requestId:n,event:"close",hadError:s})}).on("error",s=>{t.postMessage({port:r,requestId:n,event:"error",error:s})}).on("drain",s=>{t.postMessage({port:r,requestId:n,event:"drain",error:s})}).on("end",()=>{t.postMessage({port:r,requestId:n,event:"end"})}).resume(),Bp.set(n,s=>{s.event=="data"&&e.write(Buffer.from(s.data,"latin1")),s.event=="end"&&(e.end(s.data&&Buffer.from(s.data,"latin1")),Bp.delete(n)),s.event=="destroy"&&(e.destroy(),Bp.delete(n))})}var Qs,pl,Sl,Hp,xp,Qq,jq,El,hl,zq,Kq,Ab,Jq,Ob,Bce,Nb,vp,Wq,ml,qce,Bp,Fce,wb=be(()=>{Qs=x(rt()),pl=require("net"),Sl=x(D()),Hp=x(k()),xp=require("fs");Si();Qq=require("worker_threads"),jq=x(la()),El=[],hl=[],zq=[],Ab=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===Sl.ITC_EVENT_TYPES.RESTART&&Ob&&(clearInterval(Ob),Xq())}));Bce=6e5;a(Hce,"startHTTPThreads");a(Xq,"licenseWarning");a(bb,"startHTTPWorker");a(yb,"startSocketServer");vp=0;a(Ib,"findMostIdleWorker");Wq=36e5,ml=new Map;a(xce,"findByRemoteAddressAffinity");a(Gce,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of ml)r.lastUsed+Wq<e&&ml.delete(t)},Wq).unref();qce=1e3;a(Zq,"updateWorkerIdleness");(0,Qs.setMonitorListener)(Zq);Bp=new Map,Fce=1;a(kce,"proxySocket")});var sF=R((VNe,nF)=>{"use strict";var Vce=require("cluster"),ka=X();ka.initSync();var rF=D(),xNe=require("util"),Hi=k(),GNe=require("fs"),$ce=require("fastify"),qNe=ma(),Yce=require("@fastify/cors"),Kce=require("@fastify/compress"),Wce=require("@fastify/static"),Qce=yO(),jce=require("path"),{PACKAGE_ROOT:zce}=D(),Jce=Bn(),Xce=Y(),Zce=Ur(),ele=la(),{server:tle}=(Cr(),ae(jo)),{node_request_key:FNe}=(Cp(),ae(_b)),{authHandler:rle,handlePostRequest:nle,serverErrorHandler:sle,reqBodyValidationHandler:ile}=yp(),kNe=require("net"),{registerContentHandlers:ole}=(zc(),ae(gx)),ale=6e4,cle=1024*1024*1024,lle="TRUE",{CONFIG_PARAMS:ad}=rF,Tl;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 ule();let t=e.securePort>0;Tl=_le(t),await Tl.ready(),e||(e={}),e.isOperationsServer=!0;try{tle.http(Tl.server,e),Tl.server.closeIdleConnections||await Tl.listen({port:0,host:"::"})}catch(r){throw Tl.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 ule(){Hi.trace("Configuring HarperDB process."),Jce.setSchemaDataToGlobal(),await Zce.setUsersToGlobal(),await ele.getLicense()}a(ule,"setUp");function _le(e){Hi.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=dle(e),r=$ce(t);r.server.headersTimeout=Ele(),r.setErrorHandler(sle);let n=fle();n&&r.register(Yce,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,_){r.server.emit("unhandled",l.raw,_.raw)}),c()}),r.register(Qce),r.register(Kce),r.register(Wce,{root:jce.join(zce,"studio/build-local")}),ole(r);let s=ka.get(rF.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Xce.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[ile,rle],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),nle(i,o)}),r.get("/health",()=>"HarperDB is running."),Hi.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(_le,"buildServer");function dle(e){let t=ka.get(ad.OPERATIONSAPI_NETWORK_TIMEOUT),r=ka.get(ad.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:cle,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(dle,"getServerOptions");function fle(){let e=ka.get(ad.OPERATIONSAPI_NETWORK_CORS),t=ka.get(ad.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===lle)&&(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(fle,"getCORSOpts");function Ele(){return ka.get(ad.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??ale}a(Ele,"getHeaderTimeoutConfig")});var Ub={};Ve(Ub,{disableNATS:()=>ple,publishToStream:()=>Fp,setNATSReplicator:()=>Cb,setPublishToStream:()=>mle,setSubscription:()=>Mb,start:()=>hle});function hle(){cd.default.get(ld.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Tle()}function ple(e=!0){lF=e}function mle(e,t){Fp=e,Mb=t}function Tle(){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];Cb(s,r,i)}}vb((r,n)=>{Cb(r.tableName,r.databaseName,r),n&&_F(r)}),!iF&&(iF=!0)}function Cb(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 Mb(t,e,i),i}static subscribeOnThisThread(i){return i<(cd.default.get(ld.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Sle)}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 Gp(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=cd.default.get(ld.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Fp(`${Db.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,Pb.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,Db,Pb,aF,cF,cd,ld,qp,lF,Fp,Mb,Sle,uF,iF,Gp,Lb,dF=be(()=>{Re();Mn();oF=x(gt()),Db=x(Ze()),Pb=x(fi());ou();aF=x(aR()),cF=x(wr()),cd=x(X()),ld=x(D()),qp=x(k());a(hle,"start");a(ple,"disableNATS");Fp=oF.publishToStream,Mb=aF.setSubscription;a(mle,"setPublishToStream");Sle=2;a(Tle,"assignReplicationSource");a(Cb,"setNATSReplicator");a(_F,"publishSchema");Gp=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=cd.default.get(ld.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||(qp.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(Fp(`${Db.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,Pb.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(u=>{throw qp.error("An error has occurred trying to replicate transaction",l,u),u.statusCode=504,u}))}return Promise.all(n)}},Lb=class extends Gp{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,cF.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};uF=new Lb});async function mF({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await Bb.get(e,{returnNonexistent:!0});i=new Gb(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await Bb.get(e);o&&o.delete()}i=new Vp(e,t)}return n&&(n.id=e,n.user={username:t?.username},ud.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function Hb(){return kp++,kp>65500&&(kp=1),kp}function xb(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,Bb,ud,kp,Vp,Gb,SF=be(()=>{Re();C_();EF=x(wr()),Mo=x(k());ha();hF=x(rt()),pF=x(Rb());Cr();fF=100,Bb=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"}]}}]}),ud=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 ud.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await dt.getUser(r.user.username));try{await xb(r,t,r)}catch{(0,Mo.warn)("Failed to publish will",t)}ud.delete(e.id)}})();a(mF,"getSession");kp=1;a(Hb,"getNextMessageId");Vp=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(T=>T.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 T=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw T.statusCode=404,T}if(E.url=f.relativeURL,E.url.indexOf("+")>-1||E.url.indexOf("#")>-1){let T=E.url.slice(1);if(T.indexOf("#")>-1&&T.indexOf("#")!==T.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(E.isCollection=!0,T.indexOf("+")===T.length-1)E.onlyChildren=!0,E.url="/"+T.slice(0,T.length-1);else{let g=T.split("/"),N;for(let v=0;v<g.length;v++)if(g[v].indexOf("+")>-1)if(g[v]==="+")N=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&N)throw new Error("Filters can not be combined");let A=!0;g[g.length-1]==="#"&&(g.length--,A=!1),N&&(n=a(v=>{let q=v.id;if(!Array.isArray(q)||A&&q.length!==g.length)return!1;for(let U=0;U<g.length;U++)if(g[U]!=="+"&&g[U]!==q[U])return!1;return!0},"filter"));let P=g.indexOf("+");E.url="/"+(P>-1?g.slice(0,P):g).concat("").join("/")}}let h=f.path,m=f.Resource,S=await it(E,async()=>{let T=this.createContext();T.topic=s,T.retainHandling=i;let g=await m.subscribe(E,T);if(!g)return;if(!g[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let N=(async()=>{for await(let A of g)try{let P;if(A.type&&A.type!=="put"&&A.type!=="delete"&&A.type!=="message"&&A.type!=="patch"||n&&!n(A))continue;r?(A.topic=s,P=this.needsAcknowledge(A)):(A.acknowledge?.(),P=Hb());let v=A.id;if(Array.isArray(v)&&(v=Qc(v)),v==null&&(v=""),await this.listener(h+"/"+v,A.value,P,t)===!1)break;this.awaitingAcks?.size>fF?await new Promise(U=>setTimeout(U,this.awaitingAcks.size-fF)):await new Promise(setImmediate)}catch(P){(0,Mo.warn)(P)}})();return g});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=Hb();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 xb(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 ud.get(this.sessionId);n?.doesExist()&&await xb(n,n.data,r)}}finally{await ud.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(xb,"publish");Gb=class extends Vp{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=Hb(),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}}),Bb.put(this.sessionRecord)}}});var Fb={};Ve(Fb,{bypassAuth:()=>gle,start:()=>Rle});function gle(){OF=!0}function Rle({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",_),Vt.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=>{Vt.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let u;if(o.events.emit("connection",_),Vt.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,gl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&Yp.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,gl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&Yp.error({username:f,status:cr.AUTH_AUDIT_STATUS.FAILURE,type:cr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:_.remoteAddress}),h}}else Vt.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(f){o.events.emit("error",f,_),Vt.error(f)}else if(l.required)return Vt.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)(),Vt.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=>{Vt.info("Socket error",f)})},{port:t,securePort:s,mtls:l})),c}function gF(e,t,r,n,s){TF||(TF=!0,Qu(d=>{$p>0&&d.push({metric:"mqtt-connections",connections:$p,byThread:!0})}));let i;$p++;let o,c={protocolVersion:4},l=(0,Kp.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"),Vt.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,gl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&Yp.notify({username:n?.username,status:cr.AUTH_AUDIT_STATUS.SUCCESS,type:cr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(U){return(0,gl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&Yp.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,U),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 U=e.deserialize||(e.deserialize=Ba(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?U(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(U){return Vt.error(U),s.events.emit("auth-failed",d,e,U),En(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:U.code||5,returnCode:U.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((U,W,z,Z)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",U);let ce=U.indexOf("/",1),_e=ce>0?U.slice(0,ce):U;m({cmd:"publish",topic:U,payload:T(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 Vt.error(ce),o?.disconnect(),s.sessions.delete(o),!1}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let g=[];for(let U of d.subscriptions){let W;try{let z=await o.addSubscription(U,U.qos>=1);W=z?z.qos||0:c.protocolVersion<5?128:143}catch(z){s.events.emit("error",z,e,U,o),z.statusCode?z.statusCode===500?Vt.warn(z):Vt.info(z):Vt.error(z),W=c.protocolVersion<5?128:z.statusCode===403?135:z.statusCode===404?143:128}g.push(W)}await o.committed,m({cmd:"suback",granted:g,messageId:d.messageId});break;case"unsubscribe":{let U=[];for(let W of d.unsubscriptions)U.push(o.removeSubscription(W)?0:17);m({cmd:"unsuback",granted:U,messageId:d.messageId});break}case"pubrel":m({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let N=d.qos===2?"pubrec":"puback",A=e.deserialize||(e.deserialize=Ba(r?.headers.get?.("content-type"))),v=(d.payload?.length||0)>0?A(d.payload):void 0,q;try{q=await o.publish(d,v)}catch(U){s.events.emit("error",U,e,d,o),Vt.warn(U),d.qos>0&&m({cmd:N,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&m({cmd:N,messageId:d.messageId,reasonCode:q===!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"),Vt.debug("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(g){s.events.emit("error",g,e,d,o),Vt.error(g),m({cmd:"disconnect"})}function m(g,N){let A=(0,Kp.generate)(g,c);t(A),hr(A.length,"bytes-sent",N,S(g),"mqtt")}a(m,"sendPacket");function S(g){return g.qos>0?g.cmd+",qos="+g.qos:g.cmd}a(S,"packetMethodName");function T(g){return Pa(g,r)}a(T,"serialize")}),l.on("error",d=>{Vt.warn("MQTT parsing error, closing connection:",d.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:_,onClose:u}}var Kp,RF,gl,cr,qb,AF,Yp,Vt,OF,TF,$p,bF=be(()=>{Kp=require("mqtt-packet");SF();RF=x(Ur());zc();Si();Cr();gl=x(X()),cr=x(D()),qb=x(k()),AF=require("events"),Yp=(0,qb.loggerWithTag)("auth-event"),Vt=(0,qb.loggerWithTag)("mqtt"),OF=(0,gl.get)(cr.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(gle,"bypassAuth");a(Rle,"start");$p=0;a(gF,"onSocket")});var qh={};Ve(qh,{component_errors:()=>Al,loadComponent:()=>Wp,loadComponentDirectories:()=>MF,setErrorReporter:()=>Nle});function MF(e,t){t&&(Vb=t),e&&($b=e);let r=[];if((0,tt.existsSync)(kb)){let s=(0,tt.readdirSync)(kb,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,at.join)(kb,o);r.push(Wp(c,Vb,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Wp(n,Vb,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{PF=!0})}function Nle(e){_d=e}async function Wp(e,t,r,n,s,i){let o=(0,tt.realpathSync)(e);if(!yF.has(o)){yF.set(o,!0),s&&($b=s);try{let c;n&&(Al=new Map);let l=(0,at.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,tt.existsSync)(l)?c=n?(0,DF.getConfigObj)():(0,IF.parseDocument)((0,tt.readFileSync)(l,"utf8"),{simpleKeys:!0}).toJSON():c=Yb;let _=(0,at.join)(e,"node_modules","harperdb");try{Va.isMainThread&&(n||(0,tt.existsSync)(_)&&(0,tt.realpathSync)(bl.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)(bl.PACKAGE_ROOT,_,"dir"))}catch(E){Rl.default.error("Error symlinking harperdb module",E)}let u=[],d=n;for(let E in c){let f=c[E];if(Al.set(n?E:(0,at.basename)(e),!1),!f)continue;let h,m=f.package;try{if(m){let A=e,P;for(;!(0,tt.existsSync)(P=(0,at.join)(A,"node_modules",E));)if(A=(0,at.dirname)(A),A.length<(0,LF.getHdbBasePath)().length){P=null;break}if(P)h=await Wp(P,t,r,!1),d=!0;else throw new Error(`Unable to find package ${E}:${m}`)}else h=ble[E];if(!h)continue;u.push(h);let S=a(A=>(A.origin=r,St(A)),"ensureTable"),T=f.network||(f.port||f.securePort)&&f,g=T?.securePort||T?.https&&T.port,N=!T?.https&&T?.port;if(Va.isMainThread&&(h=await h.startOnMainThread?.({server:dt,ensureTable:S,port:N,securePort:g,resources:t,...f})||h,n&&T))for(let A of[N,g])try{if(+A&&!NF.includes(A)){let P=Kb.get(bl.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);P&&Rl.default.warn("Session affinity is not recommended and may cause memory leaks"),(P||!wp)&&(NF.push(A),yb(A,P))}}catch(P){console.error("Error listening on socket",A,P,E)}if(t.isWorker&&(h=await h.start?.({server:dt,ensureTable:S,port:N,securePort:g,resources:t,...f})||h),$b.set(h,!0),(h.handleFile||h.handleDirectory)&&f.files){if(f.files.includes(".."))throw(0,CF.handleHDBError)("Can not reference parent directories");let A=(0,at.join)(e,f.files).replace(/\\/g,"/"),P=A.indexOf("/*");if(P>-1&&f.files!==Yb[E]?.files&&!(0,tt.existsSync)(A.slice(0,P)))throw new Error(`The path '${A.slice(0,P)}' does not exist and cannot be used as the base of the resolved 'files' path value '${f.files}'`);let v=(0,at.basename)(e),q=f.path||"/";q=q.startsWith("/")?q:q.startsWith("./")?"/"+v+q.slice(2):q==="."?"/"+v:"/"+v+"/"+q;let U,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=A.indexOf("/*"))>-1&&(W=A.slice(0,z+1),U=(0,at.relative)(e,W));let Z=!1;if(Va.isMainThread&&h.setupDirectory&&(Z=await h.setupDirectory?.(q,W,t)),t.isWorker&&h.handleDirectory&&(Z=await h.handleDirectory?.(q,W,t)),Z)continue;for(let ce of await(0,wF.default)(A,{onlyFiles:!1,objectMode:!0})){let{path:_e,dirent:de}=ce;d=!0;let xe=(0,at.relative)(e,_e).replace(/\\/g,"/");if(U)if(xe.startsWith(U))xe=xe.slice(U.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=q+(q.endsWith("/")?"":"/")+xe;try{if(de.isFile()){let Ge=await Ole(_e);Va.isMainThread&&await h.setupFile?.(Ge,we,_e,t),t.isWorker&&await h.handleFile?.(Ge,we,_e,t)}else Va.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}`,_d?.(Ge),((0,Ol.getWorkerIndex)()===0?console:Rl.default).error(Ge),t.set(f.path||"/",new dd(Ge)),Al.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}`,_d?.(S),((0,Ol.getWorkerIndex)()===0?console:Rl.default).error(S),t.set(f.path||"/",new dd(S),null,!0),Al.set(n?E:(0,at.basename)(e),S.message)}}if(Va.isMainThread&&!PF&&i&&(0,Ol.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?`;_d?.(new Error(E)),((0,Ol.getWorkerIndex)()===0?console:Rl.default).error(E),Al.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}`,_d?.(c),t.set("",new dd(c))}}}var tt,at,Va,IF,Kb,bl,wF,Ol,Rl,CF,LF,Ale,DF,Ole,kb,$b,PF,Vb,Al,ble,Yb,NF,yF,_d,dd,Fh=be(()=>{tt=require("fs"),at=require("path"),Va=require("worker_threads"),IF=require("yaml"),Kb=x(X()),bl=x(D());LI();UI();vI();Mx();bq();Lq();wF=x(require("fast-glob")),Ol=x(rt()),Rl=x(k());IS();Cr();CF=x(ie());Mn();Re();wb();LF=x(X()),Ale=x(sF());Ph();dF();bF();DF=x(Et());Cp();({readFile:Ole}=tt.promises),kb=Kb.get(bl.CONFIG_PARAMS.COMPONENTSROOT),$b=new Map,Al=new Map;a(MF,"loadComponentDirectories");ble={REST:ip,rest:ip,graphqlSchema:yS,jsResource:CS,fastifyRoutes:ob,login:DS,static:ab,operationsApi:Ale,customFunctions:{},http:{},clustering:Ub,authentication:D_,mqtt:Fb},Yb={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(Yb,"static",{value:{files:"web/**"}});NF=[],yF=new Map;a(Nle,"setErrorReporter");a(Wp,"loadComponent");dd=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 Up=R((pye,vF)=>{var{isMainThread:UF}=require("worker_threads"),{getTables:yle}=(Re(),ae($e)),{loadComponentDirectories:Ile,loadComponent:wle}=(Fh(),ae(qh)),{resetResources:Cle}=(C_(),ae(kB)),Lle=kA(),Dle=Et(),{dirname:Ple}=require("path"),{getConnection:Mle}=gt(),Ule=X(),vle=D(),Wb=new Map;async function Ble(e=!1){!UF&&Ule.get(vle.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Mle();try{UF&&await Lle()}catch(n){console.error(n)}let t=Cle();yle(),t.isWorker=e,await wle(Ple(Dle.getConfigFilePath()),t,"hdb",!0,Wb),await Ile(Wb,t);let r=[];for(let[n]of Wb)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(Ble,"loadRootComponents");vF.exports.loadRootComponents=Ble});var rt=R((Sye,vo)=>{"use strict";var{Worker:Hle,MessageChannel:xle,parentPort:js,isMainThread:Zb,threadId:Gle,workerData:xi}=require("worker_threads"),{PACKAGE_ROOT:qle}=D(),{join:GF,isAbsolute:Fle,extname:kle}=require("path"),{server:qF}=(Cr(),ae(jo)),{watch:Vle,readdir:$le}=require("fs/promises"),{totalmem:BF}=require("os"),Nl=D(),Qb=X(),Gi=k(),{randomBytes:Yle}=require("crypto"),{_assignPackageExport:Kle}=require("../index"),Wle=D(),HF=1024*1024,Uo=[],Kn=[],Qle=50,eN=1e4,jle="restart",FF="request_thread_info",kF="resource_report",VF="thread_info",$F="added-port",zle="ack",jb;Kle("threads",Kn);vo.exports={startWorker:zb,restartWorkers:rN,shutdownWorkers:tue,workers:Uo,setMonitorListener:lue,onMessageFromWorkers:rue,onMessageByType:JF,broadcast:sue,broadcastWithAcknowledgement:oue,setChildListenerByType:eue,getWorkerIndex:YF,getWorkerCount:KF,getTicketKeys:QF,setMainIsWorker:Xle,setTerminateTimeout:Jle,restartNumber:xi?.restartNumber||1};Kn.onMessageByType=JF;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 tN;function Jle(e){eN=e}a(Jle,"setTerminateTimeout");function YF(){return xi?xi.workerIndex:tN?0:void 0}a(YF,"getWorkerIndex");function KF(){return xi?xi.workerCount:tN?1:void 0}a(KF,"getWorkerCount");function Xle(e){tN=e}a(Xle,"setMainIsWorker");var WF=1,Qp;function QF(){return Qp||(Qp=Zb?Yle(48):xi.ticketKeys,Qp)}a(QF,"getTicketKeys");Object.defineProperty(qF,"workerIndex",{get(){return YF()}});Object.defineProperty(qF,"workerCount",{get(){return KF()}});var jF={[FF](e,t){aue(t)},[kF](e,t){cue(t,e)}};function zb(e,t={}){let r=process.constrainedMemory?.()||BF();r=Math.min(r,BF(),2e4*HF);let n=Qb.get(Nl.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 _ of Kn){let u=new xle;u.existingPort=_,i.push(u),o.push(u.port2)}kle(e)||(e+=".js");let c=["--enable-source-maps"];Qb.get(Nl.CONFIG_PARAMS.THREADS_HEAPSNAPSHOTNEARLIMIT)&&c.push("--heapsnapshot-near-heap-limit=1");let l=new Hle(Fle(e)?e:GF(qle,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:c,argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(_=>_.existingPort.threadId),workerIndex:t.workerIndex,workerCount:WF=t.threadCount,name:t.name,restartNumber:vo.exports.restartNumber,ticketKeys:QF()},transferList:o},t));for(let{port1:_,existingPort:u}of i)u.postMessage({type:$F,port:_,threadId:l.threadId},[_]);return zp(l,!0),l.unexpectedRestarts=t.unexpectedRestarts||0,l.startCopy=()=>zb(e,t),l.on("error",_=>{Gi.error(`Worker index ${t.workerIndex} error:`,_)}),l.on("exit",_=>{Uo.splice(Uo.indexOf(l),1),!l.wasShutdown&&t.autoRestart!==!1&&(l.unexpectedRestarts<Qle?(t.unexpectedRestarts=l.unexpectedRestarts+1,zb(e,t)):Gi.error(`Thread has been restarted ${l.restarts} times and will not be restarted`))}),l.on("message",_=>{jF[_.type]?.(_,l)}),Uo.push(l),_ue(),t.onStarted&&t.onStarted(l),l.name=t.name,l}a(zb,"startWorker");var Zle=[Nl.THREAD_TYPES.HTTP];async function rN(e=null,t=Math.max(WF>3,1),r=!0){if(Zb){if(r){let{loadRootComponents:o}=Up();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:Nl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Zle.indexOf(o.name)>-1,l=new Promise(_=>{let u=setTimeout(()=>o.terminate(),eN*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===Wle.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)&&Qb.get(Nl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else js.postMessage({type:jle,workerType:e})}a(rN,"restartWorkers");function eue(e,t){jF[e]=t}a(eue,"setChildListenerByType");function tue(e){return rN(e,1/0,!1)}a(tue,"shutdownWorkers");var zF=[];function rue(e){zF.push(e)}a(rue,"onMessageFromWorkers");var Jb=new Map;function JF(e,t){let r=Jb.get(e);r||Jb.set(e,r=[]),r.push(t)}a(JF,"onMessageByType");var nue=10;async function sue(e){let t=0;for(let r of Kn)try{r.postMessage(e),t++>nue&&(t=0,await new Promise(setImmediate))}catch(n){Gi.error("Unable to send message to worker",n)}}a(sue,"broadcast");var jp=new Map,iue=1;function oue(e){return new Promise(t=>{let r=0;for(let n of Kn)try{let s=iue++,i=a(()=>{jp.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,jp.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of jp)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Gi.error("Unable to send message to worker",s)}r===0&&t()})}a(oue,"broadcastWithAcknowledgement");function aue(e){e.postMessage({type:VF,workers:XF()})}a(aue,"sendThreadInfo");function XF(){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(XF,"getChildWorkerInfo");function cue(e,t){e.resources=t,e.resources.updated=Date.now()}a(cue,"recordResourceReport");var Xb;function lue(e){Xb=e}a(lue,"setMonitorListener");var uue=1e3,xF=!1;function _ue(){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}Xb&&Xb()},uue).unref())}a(_ue,"startMonitoring");var due=1e3;if(js){zp(js);for(let e=0,t=xi.addPorts.length;e<t;e++){let r=xi.addPorts[e];r.threadId=xi.addThreadIds[e],zp(r)}setInterval(()=>{let e=process.memoryUsage();js.postMessage({type:kF,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},due).unref(),jb=a(()=>new Promise((e,t)=>{js.on("message",r),js.postMessage({type:FF});function r(n){n.type===VF&&(js.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else jb=XF;vo.exports.getThreadInfo=jb;function zp(e,t){Kn.push(e),e.on("message",r=>{if(r.type===$F)r.port.threadId=r.threadId,zp(r.port);else if(r.type===zle){let n=jp.get(r.id);n&&n()}else{for(let s of zF)s(r,e);let n=Jb.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(zp,"addPort");if(Zb){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await $le(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 rN(),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===Nl.ITC_EVENT_TYPES.SHUTDOWN&&(vo.exports.restartNumber=e.restartNumber,js.unref(),setTimeout(()=>{Gi.warn("Thread did not voluntarily terminate",Gle),process.exit(0)},eN).unref())})});var BP={};Ve(BP,{AUDIT_STORE_OPTIONS:()=>Oh,createAuditEntry:()=>gf,openAuditStore:()=>tm,readAuditEntry:()=>Kt,removeAuditEntry:()=>rm,setAuditRetention:()=>Eue,transactionKeyEncoder:()=>ak});function tm(e){let t=e.auditStore=e.openDB(sk.AUDIT_STORE_NAME,Oh);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,t.deleteCallbacks=r,{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()-nN}))if(c=rm(t,l,_),await new Promise(setImmediate),++o>=fue){i=10;break}await c}finally{o===0&&(i=Math.min(i<<1,nN/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,em.getWorkerIndex)()===(0,em.getWorkerCount)()-1&&s(Jp),t}function rm(e,t,r){if((hue(r)&15)===oN){let n=Kt(r),s=n.tableId;e.deleteCallbacks[s]?.(n.recordId)}return e.remove(t)}function Eue(e,t=Jp){nN=e,Jp=t}function gf(e,t,r,n,s,i,o){let c=ck[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let l=1;n&&(n>1?yl.setFloat64(0,n):Wn.set(WS),l=9),E(0),E(t),d(r),yl.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,Il.writeKey)(f,Wn,l);let m=l-h-1;m>127?m>16383?(aN.error("Key or username was too large for audit entry",f),l=h+1,Wn[h]=0):(Wn.copyWithin(h+2,h+1,l),yl.setUint16(h,m|32768),l++):Wn[h]=m}function E(f){f<128?Wn[l++]=f:f<16384?(yl.setUint16(l,f|32768),l+=2):f<1056964608?(yl.setUint32(l,f|3221225472),l+=4):(Wn[l]=255,yl.setUint32(l+1,f),l+=5)}}function hue(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new Xp(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function Kt(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Xp(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),o=n.readInt(),c=n.readInt(),l=n.readInt(),_=n.position,u=n.position+=l,d=n.readFloat64();l=n.readInt();let E=n.position,f=n.position+=l;return{type:ck[i&7],tableId:c,get recordId(){return nk(e,_,u)},version:d,previousLocalTime:s,get user(){return f>E?nk(e,E,f):void 0},getValue(h,m,S){if(i&sN||i&iN&&!m)return h.decoder.decode(e.subarray(n.position));if(i&iN&&S)return cN(h.getEntry(this.recordId),S,h)}}}catch(n){return aN.error("Reading audit entry error",n,e),{}}}function nk(e,t,r){let n=e.subarray(t,r);return(0,Il.readKey)(n,0,r-t)}var Il,Zp,sk,ik,em,ok,aN,Wn,yl,ak,Oh,nN,fue,Jp,sN,iN,ZF,oN,ek,tk,rk,ck,Xp,no=be(()=>{Il=require("ordered-binary"),Zp=x(X()),sk=x(_t()),ik=x(D()),em=x(rt()),ok=x(Y());fu();aN=x(k());nm();(0,Zp.initSync)();Wn=Buffer.alloc(1024),yl=new DataView(Wn.buffer,Wn.byteOffset,1024),ak={writeKey(e,t,r){return e===du?(t.set(du,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Il.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,Il.readKey)(e,t,r)}},Oh={encoding:"binary",keyEncoder:ak},nN=(0,ok.convertToMS)((0,Zp.get)(ik.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,fue=1e3,Jp=1e4;a(tm,"openAuditStore");a(rm,"removeAuditEntry");a(Eue,"setAuditRetention");sN=16,iN=32,ZF=1,oN=2,ek=3,tk=4,rk=5,ck={put:ZF|sN,[ZF]:"put",delete:oN,[oN]:"delete",message:ek|sN,[ek]:"message",invalidate:tk,[tk]:"invalidate",patch:rk|iN,[rk]:"patch"};a(gf,"createAuditEntry");a(hue,"readAction");a(Kt,"readAuditEntry");Xp=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(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}};a(nk,"readKeySafely")});var lN={};Ve(lN,{add:()=>sm,applyReverse:()=>lk,getRecordAtTime:()=>cN,rebuildUpdateBefore:()=>im});function sm(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 im(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,sm(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function lk(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]=uk}}function cN(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":lk(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let l in s)s[l]===uk&&(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,uk,nm=be(()=>{no();a(sm,"add");sm.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:sm};a(im,"rebuildUpdateBefore");a(lk,"applyReverse");uk={};a(cN,"getRecordAtTime")});function gn(e){return e[Pt]||(e[Pt]=Object.create(null))}function um(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=dk(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 dk(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}},um(r,t)),new r(e)):new om(e);case Array:let n=new cm(e.length);n[pe]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=dk(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(_k.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=lN[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):_k.call(e,pe)?e[pe]:e}function am(e){let t=e[pe];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[$a]||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(am(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(am(s))return!0}else return!0}else return!0}}return!1}var Qn,Pt,om,_k,$a,cm,lm,dE=be(()=>{Mn();Qn=x(ie());nm();Pt=Symbol("own-data");a(gn,"getChanges");a(um,"assignTrackedAccessors");a(dk,"trackObject");om=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}};um(om,{});a(_E,"collapseData");_k=Object.prototype.hasOwnProperty;a(Ya,"deepFreeze");a(am,"hasChanges");$a=Symbol.for("has-array-changes"),cm=class extends Array{static{a(this,"TrackedArray")}[$a];constructor(t){super(t)}splice(...t){return this[$a]=!0,super.splice(...t)}push(...t){return this[$a]=!0,super.push(...t)}pop(){return this[$a]=!0,super.pop()}unshift(...t){return this[$a]=!0,super.unshift(...t)}shift(){return this[$a]=!0,super.shift()}};cm.prototype.constructor=Array;lm=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var Sg={};Ve(Sg,{CONTEXT:()=>Ie,ID_PROPERTY:()=>Ue,IS_COLLECTION:()=>Ts,MultiPartId:()=>ol,RECORD_PROPERTY:()=>pe,Resource:()=>tr,snake_case:()=>Sue,transformForSelect:()=>dm});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 fk(e,t){if(fd=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(fd=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new ol;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){fd=!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 _m(o.user);return typeof u?.then=="function"?u.then(S=>e(f,l,o,S)):e(f,l,o,u)});if(!h)throw new _m(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 pk.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 uN(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 dm(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):uN(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(uN(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(uN(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]=dm(c.select||c,u)}let _=o(c.name);return l(_)}else return o(c);else return c}}a(i,"handleProperty")}var Ek,hk,pk,Ie,Ue,Ts,pe,mue,tr,_m,fd,ol,Mn=be(()=>{Ek=require("crypto");ou();hk=require("../index"),pk=x(ie());dE();ha();np();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 _=dm(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,Ek.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=dm(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 rp(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:fk(t,this),isCollection:fd}}let i=fk(t,this);return fd?{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,hk._assignPackageExport)("Resource",tr);a(Sue,"snake_case");_m=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(fk,"pathToId");ol=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(Rn,"transactional");a(An,"missingMethod");a(uN,"selectFromObject");a(dm,"transformForSelect")});function Tk(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=Sk,Tue(e.primaryStore,e.auditStore)):(c=mk,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{gk(mk[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=Qc(t);let u=new dN(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 gk(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,_=Qc(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,_N.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,_N.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=Sk[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(),gk(l),r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")},"acquiredLock");r.attemptLock("thread-local-writes",_)&&_()})}}var _N,mk,Sk,dN,Rk=be(()=>{_N=x(k());ou();C_();no();mk=Object.create(null),Sk=Object.create(null);a(Tk,"addSubscription");dN=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(gk,"notifyFromTransactionData");a(Tue,"listenToCommits")});var VO={};Ve(VO,{coerceType:()=>fm,makeTable:()=>pm,setServerUtilities:()=>wue,updateResource:()=>Em});function pm(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 T=zS(i,n,l),g=0,N,A,P={},v=Promise.resolve(),q,U,W;for(let Q of S)(Q.assignCreatedTime||Q.name==="__createdtime__")&&(q=Q),(Q.assignUpdatedTime||Q.name==="__updatedtime__")&&(U=Q),Q.expiresAt&&(W=Q),Q.isPrimaryKey&&(P=Q);let z,Z=[],ce=[],_e=1,de=2,xe={},we={},Ge=864e5,Wd,Qd,zi,Ey=!1,tS,rS,c1=i.getRange({start:!1,end:!1}).constructor,l1=10,u1=6;h&&my();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=q;static updatedTimeProperty=U;static propertyResolvers;static sources=[];static get expirationMS(){return E}static dbisDB=u;static schemaDefined=_;static sourcedFrom(p,b){b&&(this.sourceOptions=b,(b.expiration||b.eviction||b.scanInterval)&&this.setTTLExpiration(b)),b?.intermediateSource?(p.intermediateSource=!0,this.sources.unshift(p)):this.sources.push(p),A=p.get&&(!p.get.reliesOnPrototype||p.prototype.get);let L=a(M=>{let I=this.sources.slice(0,-1);if(I=I.filter(B=>B[M]&&(!B[M].reliesOnPrototype||B.prototype[M])),I.length>0)if(I.length===1){let B=I[0];return(F,C,G)=>{if(F?.source!==B)return B[M](C,G,F)}}else return(B,F,C)=>{let G=[];for(let H of I){if(B?.source===H)break;G.push(H[M](F,C,B))}return Promise.all(G)}},"getApplyToIntermediateSource"),O=this.sources[this.sources.length-1],y=a(M=>{if(O[M]&&(!O[M].reliesOnPrototype||O.prototype[M]))return(I,B,F)=>{if(!I?.source)return O[M](B,F,I)}},"getApplyToCanonicalSource");return xe={put:y("put"),patch:y("patch"),delete:y("delete"),publish:y("publish")},we={put:L("put"),patch:L("patch"),delete:L("delete"),publish:L("publish"),invalidate:L("invalidate")},(async()=>{let M=!1,I=a(async(B,F)=>{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)&&(M=!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,F,wl);switch(B.type){case"put":return H._writeUpdate(C,!0,wl);case"patch":return H._writeUpdate(C,!1,wl);case"delete":return H._writeDelete(wl);case"publish":return H._writePublish(C,wl);case"invalidate":return H.invalidate(wl);default:ct.error("Unknown operation",B.type,B.id)}},"writeUpdate");try{let B=p.subscribe;B&&m==null&&(m=!0);let F=p.subscribeOnThisThread?p.subscribeOnThisThread((0,Wa.getWorkerIndex)()):(0,Wa.getWorkerIndex)()===0,C=B&&F&&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{I(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(I(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,I(H,H),new Promise(se=>{G.resolve=se})):I(H,H)});M&&(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 A}static getResource(p,b,L){let O=super.getResource(p,b,L);if(p!=null){Vl(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 y=!L?.async||i.cache?.get(p),M=Zn(b),I=M.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return nS(p,b,{transaction:I},y,B=>{if(B?Em(O,B):O[pe]=null,b.onlyIfCached&&b.noCacheStore){if(!O.doesExist())throw new jr.ServerError("Entry is not cached",504)}else if(L?.ensureLoaded){let F=sS(p,B,b,O);if(F)return M?.disregardReadTxn(),O[fN]=!0,hN(F,C=>(Em(O,C),O))}return O})}catch(y){throw y.message.includes("Unable to serialize object")&&(y.message+=": "+JSON.stringify(p)),y}}return O}ensureLoaded(){let p=sS(this[Ue],this[Qr],this[Ie]);if(p)return this[fN]=!0,hN(p,b=>{this[Qr]=b,this[pe]=b.value,this[md]=b.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&&my(),je.audit=p}static coerceId(p){return p===""?null:fm(p,P)}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 b=je.getRecordCount();return{recordCount:b.recordCount,estimatedRecordRange:b.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,b){let L=zd(p);if(L?.read){if(L.isSuperUser)return!0;let O=L.attribute_permissions,y=b?.select;if(O?.length>0||Ey&&y){if(b||(b={}),y){let M=O?.length>0&&EN(O,"read");b.select=y.map(I=>{let B=I.name||I;if(!M||M[B]){let F=zi[B]?.definition?.tableClass;if(F){if(I.name||(I={name:I}),!F.prototype.allowRead.call(null,p,I))return!1;if(!I.select)return I.name}return I}}).filter(Boolean)}else b.select=O.filter(M=>M.read&&!zi[M.attribute_name]).map(M=>M.attribute_name);return b}else return!0}}allowUpdate(p,b){let L=zd(p);if(L?.update){let O=L.attribute_permissions;if(O?.length>0){let y=EN(O,"update");for(let M in b)if(!y[M])return!1;for(let M of O){let I=M.attribute_name;!M.update&&!(I in b)&&(b[I]=this.getProperty(I))}}return!0}}allowCreate(p,b){if(this[Ts]){let L=zd(p);if(L?.insert){let O=L.attribute_permissions;if(O?.length>0){let y=EN(O,"insert");for(let M in b)if(!y[M])return!1}else return!0}}else return this.allowUpdate(p,{})}allowDelete(p){return zd(p)?.delete}update(p,b){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&&(b?(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],b),this}addTo(p,b){if(typeof b=="number"||typeof b=="bigint")this[Ed]===Ok?this.set(p,(+this.getProperty(p)||0)+b):(this[Ed]||this.update(),this.set(p,new lm(b)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,b){if(typeof b=="number")return this.addTo(p,-b);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this[Qr]}invalidate(p){let b=this[Ie],L=this[Ue];Vl(L),Zn(this[Ie]).addWrite({key:L,store:i,invalidated:!0,entry:this[Qr],nodeName:this[Ie]?.nodeName,before:xe.invalidate?.bind(this,b,L),beforeIntermediate:we.invalidate?.bind(this,b,L),commit:(y,M)=>{if(M?.version>y)return;let I=null;for(let B in r)I||(I={}),I[B]=this.getProperty(B);T(L,I,this[Qr],y,hd,h,this[Ie],0,"invalidate")}})}static evict(p,b,L){let O=this.Source,y;if(!((A||h)&&(!b||(y=i.getEntry(p),!y||!b)||y.version!==L))){if(A){if(i.hasLock(p,y.version))return;let M;for(let I in r)M||(M={}),M[I]=b[I];if(M)return T(p,M,y,L,pd,null,null,0,null,!0)}return i.ifVersion(p,L,()=>{jd(p,b,null)}),h?T(p,null,y,L,pd,null,null,0,null,!0):i.remove(p,L)}}lock(){throw new Error("Not yet implemented")}static operation(p,b){return p.table||=s,p.schema||=c,Dk.operation(p,b)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,b,L){let O=this[Ie],y=Zn(O),M=this[Ue];Vl(M);let I=this[Qr];this[Ed]=b?Ok:Nue;let B={key:M,store:i,entry:I,nodeName:O?.nodeName,validate:F=>{p||(p=this[Pt]),b||p&&am(this[Pt]===p?this:p)?O?.source||(y.checkOverloaded(),this.validate(p,!b),U&&(p[U.name]=U.type==="Date"?new Date(F):U.type==="String"?new Date(F).toISOString():F),b&&(t&&p[t]!==M&&(p[t]=M),q&&(I?.value?p[q.name]=I?.value[q.name]:p[q.name]=q.type==="Date"?new Date(F):q.type==="String"?new Date(F).toISOString():F),p=Ya(p))):y.removeWrite(B)},before:b?xe.put?()=>xe.put(O,M,p):null:xe.patch?()=>xe.patch(O,M,p):xe.put?()=>xe.put(O,M,Ya(this)):null,beforeIntermediate:b?we.put?()=>we.put(O,M,p):null:we.patch?()=>we.patch(O,M,p):we.put?()=>we.put(O,M,Ya(this)):null,commit:(F,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");b||(this[pe]=C?.value??null)}this[Pt]=void 0,this[md]=F;let H=C?.value,ee=p;if(this[Ed]=0,C?.version>=F)if(h){let ue=C.localTime,Pe=C.version;for(;ee&&(ue>F||Pe>=F&&ue>0);){let re=l.get(ue);if(!re)break;let J=Kt(re);if(Pe=J.version,Pe>F){if(J.type==="patch"){let ge=J.getValue(i);ee=im(ee,ge)}else if(J.type==="put"||J.type==="delete")return}else if(Pe===F)return;ue=J.previousLocalTime}}else{if(b)return;ee=im(ee,H)}let fe;if(b?fe=ee:(this[pe]=H,fe=b?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;b||(se=p),jd(M,H,fe);let Be=b?"put":"patch";T(M,fe,C,F,0,h,O,O.expiresAt||(E?E+Date.now():0),Be,!1,se),O.expiresAt&&Jd()}};y.addWrite(B)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[Ts]){for await(let b of this.search(p))(await je.getResource(b[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[pe]?this._writeDelete(p):!1}_writeDelete(p){let b=Zn(this[Ie]),L=this[Ue];Vl(L);let O=this[Ie];return b.addWrite({key:L,store:i,resource:this,nodeName:O?.nodeName,before:xe.delete?.bind(this,O,L),beforeIntermediate:we.delete?.bind(this,O,L),commit:(y,M,I)=>{let B=M?.value;I&&(O&&M?.version>(O.lastModified||0)&&(O.lastModified=M.version),Em(this,M)),!(M?.version>y)&&(jd(this[Ue],B),ct.trace("Write delete entry",L,y),h||m?(T(L,null,this[Qr],y,0,h,this[Ie],0,"delete"),h||Jd()):i.remove(this[Ue]))}}),!0}search(p){let b=this[Ie],L=Zn(b);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 y,M={};function I(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=I(ze.conditions,ze.operator);continue}let Zt=ze[0]??ze.attribute,Dn=Zt==null?P:Mi(S,Zt);if(Dn){if(qe){let ws=hs(Zt),er=Is[ws];er?(er.push(ze),Ji=!0):Is[ws]=[ze]}(Dn.type||pO[ze.comparator])&&(ze[1]===void 0?ze.value=F(ze.value,Dn):ze[1]=F(ze[1],Dn))}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],Dn=Zt.length;if(Dn>1)for(let ws=0;ws<Dn;ws++){let er=Zt[ws];if(er.comparator==="ge"||er.comparator==="greater_than_equal")for(let Xi=0;Xi<Dn;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<Dn;Xi++)if(Xi!==ws){let ac=Zt[Xi];J.splice(J.indexOf(ac),1)}break}}}return J}a(I,"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,Ck.sortBy)(J,tp(je)):J}a(B,"orderConditions");function F(J,ge){return Array.isArray(J)?J.map(qe=>fm(qe,ge)):fm(J,ge)}a(F,"coerceTypedValues");let C=p.operator;(O.length>0||C)&&(O=I(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(y=O.find(ge=>hs(ge.attribute)===hs(J)),!y){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)y={attribute:J,comparator:"sort"},O.push(y);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)}y&&(y.descending=!!G.descending)}O=B(O,C),G&&(y&&O[0]===y?G.next&&(H={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(y&&O.splice(O.indexOf(y),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=L.useReadTxn(),se=mO(O,C,je,fe,p,b,(J,ge)=>hy(J,ee,b,fe,ge),M),Be=p.ensureLoaded!==!1;H||(se=re(se));let ue=je.transformEntryForSelect(ee,b,fe,M,Be,!0),Pe=je.transformToOrderedSelect(se,ee,H,fe,b,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,L.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,b,L,O,y,M){let I=new c1;if(L){p=hy(p,b,O,y,null);let B;I.iterate=function(){let C,G=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),H,ee=L.dbOrderedAttribute,fe,se,Be=!0;function ue(re){let J=re.next&&ue(re.next),ge=re.descending;return(qe,Is)=>{let Ji=iS(qe,re.attribute,O),ze=iS(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(L);return{async next(){let re;if(C)if(re=C.next(),re.done){if(H)return I.onDone&&I.onDone(),re}else return{value:await M.call(this,re.value)};B=[],fe&&B.push(fe);do if(re=await G.next(),re.done){if(H=!0,B.length)break;return I.onDone&&I.onDone(),re}else{let J=re.value;if(J?.then&&(J=await J),ee){let ge=iS(J,ee,O);if(Be)Be=!1,se=ge;else if(ge!==se){se=ge,fe=J;break}}B.push(J)}while(!0);return L.isGrouped,B.sort(Pe),C=B[Symbol.iterator](),re=C.next(),re.done?(I.onDone&&I.onDone(),re):{value:await M.call(this,re.value)}},return(){I.onDone&&I.onDone(),G.return()},throw(){I.onDone&&I.onDone(),G.throw()}}};let F=a(C=>{if(typeof b=="object"&&Array.isArray(C.attribute))for(let G=0;G<b.length;G++){let H=b[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]&&(b[G]=ee={name:H,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&F(C.next)},"applySortingOnSelect");F(L)}else I.iterate=(p[Symbol.asyncIterator]||p[Symbol.iterator]).bind(p),I=I.map(M);return I}static transformEntryForSelect(p,b,L,O,y,M){if(p&&(p===t||p?.length===1&&p[0]===t)){let C=a(G=>(b?.transaction?.stale&&(b.transaction.stale=!1),G?.key??G),"transform");return p===t?C:p.asArray?G=>[C(G)]:G=>({[t]:C(G)})}let I;y&&A&&!p?.every(C=>{let G;return typeof C=="object"?G=C.name:G=C,r[G]||G===t})&&(I=!0);let B,F=a(function(C){let G;if(b?.transaction?.stale&&(b.transaction.stale=!1),C!=null){if(tS=C,G=C.value||C.deref?.(),!G&&(C.key===void 0||C.deref)){if(C=nS(C.key??C,b,{transaction:L,lazy:p?.length<4},this?.isSync,H=>H),C?.then)return C.then(F.bind(this));G=C?.value}if(I&&C?.metadataFlags&(hd|pd)||C?.expiresAt&&C?.expiresAt<Date.now()){if(b.onlyIfCached&&b.noCacheStore)return{[t]:C.key,message:"This entry has expired"};let H=sS(C.key??C,C,b);if(H?.then)return H.then(F)}}if(G==null)return M?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,b,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),b,L,J,y));if(Array.isArray(qe)){let ze=[],Zt=Is.transformToOrderedSelect(qe,se.select,typeof se.sort=="object"&&se.sort,b,L,Ji)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Dn=a(er=>{for(;!er.done;){if(er?.then)return er.then(Dn);ze.push(er.value),er=Zt.next()}Be(ze,ue)},"nextValue"),ws=Dn(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,b,L,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 F}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 b=!p.rawEvents,L=[],O=Tk(je,this[Ue]??null,function(M,I,B,F){try{let C=I.getValue?.(i,b);if(!C&&I.type==="patch"&&b){let H=i.getEntry(M);H?.version===I.version?C=H.value:C=I.getValue?.(i,!0,B),I.type="put"}let G={id:M,timestamp:B,value:C,version:I.version,type:I.type,beginTxn:F};L?L.push(G):this.send(G)}catch(C){ct.error(C)}},p.startTime||0,p),y=(async()=>{this[Ts]&&(O.includeDescendants=!0,p.onlyChildren&&(O.onlyChildren=!0)),p.supportsTransactions&&(O.supportsTransactions=!0);let M=this[Ue],I=p.previousCount;I>1e3&&(I=1e3);let B=p.startTime;if(this[Ts]){if(B){if(I)throw new jr.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:F,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(M==null||Ik(M,H)){let ee=G.getValue(i,b,F);if(O.send({id:H,timestamp:F,value:ee,version:G.version,type:G.type}),O.queue?.length>Nk&&await O.waitForDrain()===!1)return}O.startTime=F}}else if(I){let F=[];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(M==null||Ik(M,ee)){let fe=H.getValue(i,b,C);if(F.push({id:ee,timestamp:C,value:fe,version:H.version,type:H.type}),--I<=0)break}}catch(H){ct.error("Error getting history entry",C,H)}for(let C=F.length;C>0;)O.send(F[--C]);F[0]&&(O.startTime=F[0].timestamp)}else if(!p.omitCurrent){for(let{key:F,value:C,version:G,localTime:H}of i.getRange({start:M??!1,end:M==null?void 0:[M,Qa.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(C&&(O.send({id:F,timestamp:H,value:C,version:G,type:"put"}),O.queue?.length>Nk&&await O.waitForDrain()===!1))return}}else{I&&!B&&(B=0);let F=this[Qr]?.localTime;if(F===jS&&(i.cache?.delete(M),this[Qr]=i.getEntry(M),ct.trace("re-retrieved record",F,this[Qr]?.localTime),F=this[Qr]?.localTime),ct.trace("Subscription from",B,"from",M,F),B<F){let C=[],G=F;do{let H=l.get(G);if(H){p.omitCurrent=!0;let ee=Kt(H),fe=ee.getValue(i,b,G);b&&(ee.type="put"),C.push({id:M,value:fe,timestamp:G,...ee}),G=ee.previousLocalTime}else break;I&&I--}while(G>B&&I!==0);for(let H=C.length;H>0;)O.send(C[--H]);O.startTime=F}!p.omitCurrent&&this.doesExist()&&O.send({id:M,timestamp:F,value:this[pe],version:this[md],type:"put"})}for(let F of L)O.send(F);L=null})();return p.listener&&O.on("data",p.listener),O}doesExist(){return!!(this[pe]||this[Ed])}publish(p,b){this._writePublish(p,b)}_writePublish(p,b){let L=Zn(this[Ie]),O=this[Ue]||null;Vl(O);let y=this[Ie];L.addWrite({key:O,store:i,entry:this[Qr],nodeName:y?.nodeName,validate:()=>{y?.source||(L.checkOverloaded(),this.validate(p))},before:xe.publish?.bind(this,y,O,p),beforeIntermediate:we.publish?.bind(this,y,O,p),commit:(M,I,B)=>{I===void 0&&m&&!h&&Jd(),T(O,I?.value??null,I,I?.version||M,0,!0,y,I?.expiresAt,"message",!1,p)}})}validate(p,b){let L,O=a((y,M,I)=>{if(M.type&&y!=null)if(b&&y.__op__&&(y=y.value),M.properties){typeof y!="object"&&(L||(L=[])).push(`Value ${gs(y)} in property ${I} must be an object${M.type?" ("+M.type+")":""}`);let B=M.properties;for(let F=0,C=B.length;F<C;F++){let G=B[F],H=O(y[G.name],G,I+"."+G.name);H&&(y[G.name]=H)}if(M.sealed&&y!=null&&typeof y=="object")for(let F in y)B.find(C=>C.name===F)||(L||(L=[])).push(`Property ${F} is not allowed within object in property ${I}`)}else switch(M.type){case"Int":(typeof y!="number"||y>>0!==y)&&(L||(L=[])).push(`Value ${gs(y)} in property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof y!="number"||!(Math.floor(y)===y&&Math.abs(y)<=9007199254740992))&&(L||(L=[])).push(`Value ${gs(y)} in property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof y!="number"&&(L||(L=[])).push(`Value ${gs(y)} in property ${I} must be a number`);break;case"ID":typeof y=="string"||y?.length>0&&y.every?.(B=>typeof B=="string")||(L||(L=[])).push(`Value ${gs(y)} in property ${I} must be a string, or an array of strings`);break;case"String":typeof y!="string"&&(L||(L=[])).push(`Value ${gs(y)} in property ${I} must be a string`);break;case"Boolean":typeof y!="boolean"&&(L||(L=[])).push(`Value ${gs(y)} in property ${I} must be a boolean`);break;case"Date":if(!(y instanceof Date)){if(typeof y=="string"||typeof y=="number")return new Date(y);(L||(L=[])).push(`Value ${gs(y)} in property ${I} must be a Date`)}break;case"BigInt":if(typeof y!="bigint"){if(typeof y=="string"||typeof y=="number")return BigInt(y);(L||(L=[])).push(`Value ${gs(y)} in property ${I} must be a bigint`)}break;case"Bytes":y instanceof Uint8Array||(L||(L=[])).push(`Value ${gs(y)} in property ${I} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(y)){if(M.elements)for(let B=0,F=y.length;B<F;B++){let C=y[B],G=O(C,M.elements,I+"[*]");G&&(y[B]=G)}}else(L||(L=[])).push(`Value ${gs(y)} in property ${I} must be a Buffer or Uint8Array`);break}M.nullable===!1&&y==null&&(L||(L=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let y=0,M=S.length;y<M;y++){let I=S[y];if(!I.relationship&&(!b||I.name in p)){let B=O(p[I.name],I,I.name);B&&(p[I.name]=B)}}if(d)for(let y in p)S.find(M=>M.name===y)||(L||(L=[])).push(`Property ${y} is not allowed`);if(L)throw new jr.ClientError(L.join(". "))}getUpdatedTime(){return this[md]}wasLoadedFromSource(){return A?!!this[fN]:void 0}static async addAttributes(p){let b=S.slice(0);for(let L of p){if(!L.name)throw new jr.ClientError("Attribute name is required");if(L.name.match(/[`/]/))throw new jr.ClientError("Attribute names cannot include backticks or forward slashes");(0,Lk.validateAttribute)(L.name),b.push(L)}return St({table:s,database:c,schemaDefined:_,attributes:b}),je.indexingOperation}static async removeAttributes(p){let b=S.filter(L=>!p.includes(L.name));return St({table:s,database:c,schemaDefined:_,attributes:b}),je.indexingOperation}static getRecordCount(p){let b=i.getStats().entryCount,L=1e3/2,O=performance.now(),y=Math.floor(b/2),M=p?.exactCount,I=0,B=0,F;for(let{value:C}of i.getRange({start:!0,lazy:!0}))if(C!=null&&I++,B++,!M&&B<y&&performance.now()-O>L){F=B;break}if(F){let C=I;I=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:F}))re!=null&&I++;let G=F*2,H=(I+C)/G,ee=Math.pow((I-C+1)/F/2,2)+H*(1-H)/G,fe=Math.max(Math.sqrt(ee)*b,1),se=Math.round(H*b),Be=Math.max(se-1.96*fe,I+C),ue=Math.min(se+1.96*fe,b),Pe=Math.pow(10,Math.round(Math.log10(fe)));return Pe>se&&(Pe=Pe/10),I=Math.round(se/Pe)*Pe,{recordCount:I,estimatedRange:[Math.round(Be),Math.round(ue)]}}return{recordCount:I}}static updatedAttributes(){zi=this.propertyResolvers={$id:(p,b,L)=>({value:L.key}),$updatedtime:(p,b,L)=>L.version,$record:(p,b,L)=>L?{value:p}:p};for(let p of this.attributes){p.resolve=null;let b=p.relationship;if(b)if(p.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),Ey=!0,b.to)p.elements?.definition?(zi[p.name]=p.resolve=(L,O,y)=>{let M=L[b.from?b.from:t],I=p.elements.definition.tableClass;return y?il({attribute:b.to,value:M},Zn(O).getReadTxn(),!1,I,!1).asArray:I.search([{attribute:b.to,value:M}],O).asArray},p.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},p.resolve.definition=p.elements.definition,b.from&&(p.resolve.from=b.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(b.from){let L=p.definition||p.elements?.definition;L?(zi[p.name]=p.resolve=(O,y,M)=>{let I=O[b.from];if(I!==void 0){if(p.elements){let B,F=I.map(C=>{let G=M?L.tableClass.primaryStore.getEntry(C,{transaction:Zn(y).getReadTxn()}):L.tableClass.get(C,y);return G?.then&&(B=!0),G});return b.filterMissing?B?Promise.all(F).then(C=>C.filter(wk)):F.filter(wk):B?Promise.all(F):F}return M?L.tableClass.primaryStore.getEntry(I,{transaction:Zn(y).getReadTxn()}):L.tableClass.get(I,y)}},p.set=(O,y)=>{if(Array.isArray(y)){let M=y.map(I=>I[Ue]||I[L.tableClass.primaryKey]);O[b.from]=M}else{let M=y[Ue]||y[L.tableClass.primaryKey];O[b.from]=M}},p.resolve.definition=p.definition||p.elements?.definition,p.resolve.from=b.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`)}um(this,this)}static async deleteHistory(p=0,b=!1){let L;for(let{key:O,value:y}of l.getRange({start:0,end:p}))await Cl(),Kt(y).tableId===n&&(L=rm(l,O,y));if(b)for(let{key:O,value:y,localTime:M}of i.getRange({start:0,versions:!0}))await Cl(),y===null&&M<p&&(L=i.remove(O));await L}static async*getHistory(p=0,b=1/0){for(let{key:L,value:O}of l.getRange({start:p||1,end:b})){await Cl();let y=Kt(O);y.tableId===n&&(yield{id:y.recordId,localTime:L,version:y.version,type:y.type,value:y.getValue(i,!0,L),user:y.user})}}static async getHistoryOfRecord(p){let b=[];if(p==null)throw new Error("An id is required");let L=i.getEntry(p);if(!L)return b;let O=L.localTime;if(!O)throw new Error("The entry does not have a local audit time");let y=0;do{await Cl();let M=l.get(O);if(M){let I=Kt(M);b.push({id:I.recordId,localTime:O,version:I.version,type:I.type,value:I.getValue(i,!0,O),user:I.user}),O=I.previousLocalTime}else break}while(y<1e3&&O);return b.reverse()}static cleanup(){z?.remove()}}je.updatedAttributes();let _1=je.prototype;return _1[bue]=!0,E&&je.setTTLExpiration(E/1e3),W&&d1(),je;function jd(Q,p,b){let L;for(let O in r){let y=r[O],M=y.isIndexing,I=b?.[O],B=p?.[O];if(I===B&&!M)continue;L=!0;let F=y.indexNulls,C=(0,Sd.getIndexedValues)(I,F),G=(0,Sd.getIndexedValues)(B,F);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)&&Ak){let ee=G.concat(C).map(fe=>({key:fe,value:Q}));y.prefetch(ee,yk)}for(let ee=0,fe=G.length;ee<fe;ee++)y.remove(G[ee],Q)}else C?.length>0&&Ak&&y.prefetch(C.map(H=>({key:H,value:Q})),yk);if(C)for(let H=0,ee=C.length;H<ee;H++)y.put(C[H],Q)}return L}a(jd,"updateIndices");function Vl(Q){switch(typeof Q){case"number":return!0;case"string":if(Q.length<659)return!0;if(Q.length>bk)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)>bk)throw new Error("Primary key size is too large: "+Q.length);return!0}a(Vl,"checkValidId");function nS(Q,p,b,L,O){let y=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),b.transaction?.isDone)return O(null,Q);let M=i.getEntry(Q,b);return M&&p&&(M?.version>(p.lastModified||0)&&(p.lastModified=M.version),M?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=M.localTime)),O(M,Q)},"whenPrefetched");return L?y():_e>0?(_e--,y()):new Promise((M,I)=>{_e===0?(_e--,i.prefetch([Q],()=>{B(),F()})):(Z.push(Q),ce.push(F),Z.length>u1&&(_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<l1&&de++}a(B,"prefetch");function F(){try{M(y())}catch(C){I(C)}}a(F,"load")})}a(nS,"loadLocalRecord");function zd(Q){if(!Q?.role)return;let p=Q.role.permission;if(p.super_user)return Iue;let b=p[c],L,O=b?.tables;if(O)return O[s];if(c==="data"&&(L=p[s])&&!L.tables)return L}a(zd,"getTablePermissions");function sS(Q,p,b,L){if(A){let O;if(b.noCache?O=!0:(p?(!p.value||p.metadataFlags&(hd|pd)||p.expiresAt&&p.expiresAt<Date.now())&&(O=!0):O=!0,En(!O,"cache-hit",s)),O){let y=py(Q,p,b).then(M=>(M?.value?.[pe]&&ct.error("Can not assign a record with a record property"),b&&(M?.version>(b.lastModified||0)&&(b.lastModified=M.version),b.lastRefreshed=Date.now()),M));if(b?.onlyIfCached||p?.value&&L?.allowStaleWhileRevalidate?.(p,Q)){if(y.catch(M=>ct.warn(M)),b?.onlyIfCached&&!L.doesExist())throw new jr.ServerError("Entry is not cached",504);return}else return y}}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(sS,"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 b=p.next;if(!b)return p=p.next=new Ea,p.lmdbDb=i,p;p=b}while(!0)}else return new lE}a(Zn,"txnForContext");function iS(Q,p,b){if(!Q)return;tS=Q;let L=Q.value||Q.deref?.()||(tS=i.getEntry(Q.key))?.value;if(typeof p=="object"){let y=zi,M=L;for(let I=0,B=p.length;I<B;I++){let F=p[I],C=y?.[F];M=C&&M?C(M,b,!0)?.value:M?.[F],y=C?.definition?.tableClass?.propertyResolvers}return M}let O=zi[p];return O?O(L,b):L[p]}a(iS,"getAttributeValue");function hy(Q,p,b,L,O){let y=O?.length,M={transaction:L,lazy:y>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},I;function B(F,C){let G=F?.value;if(!G)return Ka.SKIP;for(let H=0;H<y;H++)if(!I?.includes(H)&&!O[H](G,F))return Ka.SKIP;return C!==void 0&&(F.key=C),F}if(a(B,"processEntry"),y>0||!Q.hasEntries){let F=Q.map(C=>{if(I=null,typeof C=="object"&&C?.key!==void 0)return y>0?B(C):C;if(C==null)return Ka.SKIP;for(let G=0;G<y;G++){let ee=O[G].idFilter;if(ee){if(!ee(C))return Ka.SKIP;I||(I=[]),I.push(G)}}return nS(C,b,M,!1,B)});return Array.isArray(Q)&&(F=F.filter(C=>C!==Ka.SKIP)),F.hasEntries=!0,F}return Q}a(hy,"transformToEntries");async function py(Q,p,b){let L=p?.metadataFlags,O=p?.version,y,M;if(!i.attemptLock(Q,O,()=>{clearTimeout(M);let C=i.getEntry(Q);!C||!C.value||C.metadataFlags&(hd|pd)?y(py(Q,i.getEntry(Q),b)):y(C)}))return new Promise(C=>{y=C,M=setTimeout(()=>{i.unlock(Q,O)},Oue)});let I=p?.value,B={requestContext:b,replacingRecord:I,replacingVersion:O,noCacheStore:!1,source:null,resourceCache:b?.resourceCache},F=b?.responseHeaders;return new Promise((C,G)=>{let H;hN(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=L&hd;let re=B.lastModified||ue&&O;Be=ue||re>O||!I,re||(re=(0,Sd.getNextMonotonicTime)());let J=performance.now()-fe;if(hr(J,"cache-resolution",s,null,"success"),F&&Ch(F,"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}`,I&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!b?.mustRevalidate||b?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(C({version:O,value:I}),ct.trace(re.message,"(returned stale record)")):G(re);let J=performance.now()-fe;hr(J,"cache-resolution",s,null,"fail"),F&&Ch(F,"Server-Timing",`cache-resolve;dur=${J.toFixed(2)}`,!0),B.transaction.abort();return}if(b?.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,I,se);se?(we.put?.(B,Q,se),T(Q,se,J,re,0,h&&Be||null,B,B.expiresAt,"put",!!ue)):(we.delete?.(B,Q),h||m?T(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(py,"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(),b=a(L=>{ct.trace(`Scheduled next cleanup scan at ${new Date(L)}ms`),Qd=setTimeout(()=>v=v.then(async()=>{if(b(Math.max(L+Ge,Date.now())),i.rootStore.status!=="open"){clearTimeout(Qd);return}let O=50,y=new Array(O),M=0;ct.trace(`Starting cleanup scan for ${s}`);try{let I=0;for(let{key:B,value:F,version:C,expiresAt:G}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let H;F===null&&!h&&C+Aue<Date.now()?H=i.remove(B,C):G&&G+f<Date.now()&&(H=je.evict(B,F,C),I++),H&&(await y[M],y[M]=H.catch(ee=>{ct.error("Cleanup error",ee)}),++M>=O&&(M=0)),await Cl()}ct.trace(`Finished cleanup scan for ${s}, evicted ${I} entries`)}catch(I){ct.trace(`Error in cleanup scan for ${s}:`,I)}}),Math.min(L-Date.now(),2147483647)).unref()},"startNextTimer");b(p)}}a(Jd,"scheduleCleanup");function my(){z=l?.addDeleteRemovalCallback(n,Q=>{let p=i.getEntry(Q);p?.value===null&&i.remove(Q,p.version)})}a(my,"addDeleteRemoval");function d1(){(0,Wa.getWorkerIndex)()===0&&setInterval(async()=>{if(!rS){rS=!0;try{let Q=W.name,p=r[Q];if(!p)throw new Error(`expiresAt attribute ${W} must be indexed`);for(let b of p.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let L of p.getValues(b)){let O=i.getEntry(L);O?.value?O.value[Q]<Date.now()&&je.evict(L,O.value,O.version):i.ifVersion(L,O?.version,()=>p.remove(b,L))}await Cl()}}catch(Q){ct.error("Error in evicting old records",Q)}finally{rS=!1}}},Rue).unref()}a(d1,"runRecordExpirationEviction")}function EN(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 yk(){}function wue(e){Dk=e}function fm(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,hm.autoCast)(e);default:return e}}function Ik(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 hN(e,t,r){return e?.then?e.then(t,r):t(e)}function Em(e,t){e[Qr]=t,e[pe]=t?.value??null,e[md]=t?.version}function wk(e){return e!=null}function gs(e){try{return JSON.stringify(e)}catch{return e}}var Rs,Ka,Sd,Ck,Lk,Rd,jr,Td,gd,ct,Qa,Wa,hm,gue,Dk,Rue,Aue,Ak,Oue,md,bue,Qr,Ed,Ok,Nue,fN,wl,hd,pd,yue,bk,Nk,Iue,rIe,Cue,Cl,mp=be(()=>{Rs=x(D()),Ka=require("lmdb"),Sd=x(wr()),Ck=require("lodash"),Lk=x(iu());Mn();qg();Rd=x(X());Rk();jr=x(ie()),Td=x(Ei()),gd=x(os());Re();np();ct=x(k());dE();ha();Qa=require("ordered-binary"),Wa=x(rt());no();hm=x(Y());fu();Si();nm();L_();gue=new Uint8Array(9);gue[8]=192;Rue=6e4,Aue=864e5;Rd.initSync();Ak=Rd.get(Rs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Oue=1e4,md=Symbol.for("version"),bue=Symbol.for("incremental-update"),Qr=Symbol("entry"),Ed=Symbol("is-saving"),Ok=1,Nue=2,fN=Symbol("loaded-from-source"),wl={isNotification:!0,ensureLoaded:!1},hd=1,pd=8,yue=Buffer.allocUnsafeSlow(8192),bk=1978,Nk=100,Iue={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},rIe=(0,hm.convertToMS)(Rd.get(Rs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(pm,"makeTable");a(EN,"attributesAsObject");a(yk,"noop");a(wue,"setServerUtilities");Cue=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(fm,"coerceType");a(Ik,"isDescendantId");Cl=a(()=>new Promise(setImmediate),"rest");a(hN,"when");a(Em,"updateResource");a(wk,"exists");a(gs,"stringify")});var $e={};Ve($e,{database:()=>Ic,databases:()=>ft,dropDatabase:()=>Yg,dropTableMeta:()=>Uue,getDatabases:()=>Br,getDefaultCompression:()=>bh,getTables:()=>Lue,onUpdatedTable:()=>vb,readMetaDb:()=>Ad,resetDatabases:()=>b_,table:()=>St,tables:()=>sn});function Lue(){return Rm||Br(),sn||{}}function Br(){if(Rm)return ft;Rm=!0,Pl=new Map;let e=(0,Ot.getHdbBasePath)()&&(0,lt.join)((0,Ot.getHdbBasePath)(),$t.DATABASES_DIR_NAME),t=(0,Ot.get)($t.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)($t.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,On.existsSync)(e)?e:(0,lt.join)((0,Ot.getHdbBasePath)(),$t.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,Dl.getBaseSchemaPath)())){for(let r of(0,On.readdirSync)((0,Dl.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,lt.join)((0,Dl.getBaseSchemaPath)(),r.name),s=(0,lt.join)((0,Dl.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=Pl.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[Am]}}return Pl=null,ft}}function b_(){Rm=!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=SN,n,s){let i=new pN.default(e,!1);try{let o=Bo.get(e);o?o.needsDeletion=!1:(o=(0,Sm.open)(i),Bo.set(e,o));let c=new ja.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(mm.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,On.existsSync)(n)&&(i.path=n,_=(0,Sm.open)(i),_.isLegacy=!0):_=tm(o));let u=vk(r),d=u[Am],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 T=E.get(m);T||E.set(m,T={attributes:[]}),(S==null||h.is_hash_attribute)&&(T.primary=h),S!=null&&T.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 T=u[f],g={},N=[],A,P,v=typeof S.audit=="boolean"?S.audit:(0,Ot.get)($t.CONFIG_PARAMS.LOGGING_AUDITLOG),q=S.trackDeletes,U=S.expiration,W=S.eviction,z=S.sealed;if(T)g=T.indices,N=T.attributes,T.schemaVersion++;else{A=S.tableId,A?A>=(l.get(Ll)||0)&&l.putSync(Ll,A+1):(S.tableId=A=l.get(Ll),A||(A=1),l.putSync(Ll,A+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)($t.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||Uk;Z.compression.threshold=ce}P=Rf(o.openDB(S.key,Z)),P.rootStore=o,P.tableId=A}for(let Z of m){Z.attribute=Z.name;try{if(!Z.is_hash_attribute&&(Z.indexed||Z.attribute&&!Z.name)){if(!g[Z.name]){let _e=new ja.default(!Z.is_hash_attribute,Z.is_hash_attribute);g[Z.name]=o.openDB(Z.key,_e),g[Z.name].indexNulls=Z.indexNulls}let ce=N.find(_e=>_e.name===Z.name);ce?N.splice(N.indexOf(ce),1,Z):N.push(Z)}}catch(ce){jn.error("Error trying to update attribute",Z,N,g,ce)}}if(!T){T=Bk(u,f,pm({primaryStore:P,auditStore:_,audit:v,sealed:z,expirationMS:U&&U*1e3,evictionMS:W&&W*1e3,trackDeletes:q,tableName:f,tableId:A,primaryKey:S.name,databasePath:s?r+"/"+f:r,databaseName:r,indices:g,attributes:m,schemaDefined:S.schemaDefined,dbisDB:l})),T.schemaVersion=1;for(let Z of TN)Z(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function vk(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)),Pl&&!Pl.has(e)){let r=new Set;t[Am]=r,Pl.set(e,r)}return t}function Bk(e,t,r){return e[t]=r,r}function Ic({database:e,table:t}){e||(e=SN),Br();let r=vk(e),n=(0,lt.join)((0,Ot.getHdbBasePath)(),$t.DATABASES_DIR_NAME),s=(0,Ot.get)($t.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)($t.CONFIG_PARAMS.STORAGE_PATH)||((0,On.existsSync)(n)?n:(0,lt.join)((0,Ot.getHdbBasePath)(),$t.LEGACY_DATABASES_DIR_NAME));let o=(0,lt.join)(n,(i?t:e)+".mdb"),c=Bo.get(o);if(!c){let l=new pN.default(o,!1);c=(0,Sm.open)(l),Bo.set(o,c)}return c}async function Yg(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[Am]}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=SN);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,T;_==null&&(_=!0);let g=new ja.default(!1);for(let U of i)U.attribute&&!U.name?(U.name=U.attribute,U.indexed=!0):U.attribute=U.name,U.expiresAt&&(U.indexed=!0);let N,A;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 U=d.auditStore;U||(U=tm(d)),m=i.find(ce=>ce.isPrimaryKey)||{},h=m.name,m.is_hash_attribute=m.isPrimaryKey=!0,m.schemaDefined=_,m.compression=bh(),l&&(m.trackDeletes=!0),o=m.audit=typeof o=="boolean"?o:(0,Ot.get)($t.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,T=d.dbisDb=d.openDB(mm.INTERNAL_DBIS_NAME,g),Z.tableId=T.get(Ll),Z.tableId||(Z.tableId=1),T.putSync(Ll,Z.tableId+1),m.tableId=Z.tableId,f=Bk(E,e,pm({primaryStore:Z,auditStore:U,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:T})),f.schemaVersion=1,N=!0,q(),T.put(z,m)}S=f.indices,T=T||(d.dbisDb=d.openDB(mm.INTERNAL_DBIS_NAME,g)),f.dbisDB=T;let P=[];for(let{key:U,value:W}of T.getRange({start:!0})){let[z,Z]=U.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)&&(q(),N=!0,ce||T.remove(U),_e)){let de=f.indices[z];de&&P.push(de)}}let v=[];try{for(let U of i||[]){if(U.relationship)continue;let W=e+"/"+(U.name||"");Object.defineProperty(U,"key",{value:W,configurable:!0});let z=T.get(W);if(U.isPrimaryKey){if(z=z||T.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),N=!0,q(),T.put(W,ce)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let Z=!z||z.type!==U.type||z.indexed!==U.indexed||z.nullable!==U.nullable||JSON.stringify(z.properties)!==JSON.stringify(U.properties)||JSON.stringify(z.elements)!==JSON.stringify(U.elements);if(U.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)&&(N=!0,q(),z=T.get(W),(Z||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<bd.workerData?.restartNumber)&&(N=!0,U.indexNulls===void 0&&(U.indexNulls=!0),f.primaryStore.getStats().entryCount>0&&(U.lastIndexedKey=z?.lastIndexedKey||!1,U.indexingPID=process.pid,_e.isIndexing=!0,Object.defineProperty(U,"dbi",{value:_e}),v.push(U))),T.put(W,U)),z?.indexNulls&&U.indexNulls===void 0&&(U.indexNulls=!0),_e.indexNulls=U.indexNulls,S[U.name]=_e}else Z&&(N=!0,q(),T.put(W,U))}}finally{A&&A()}if(N&&(f.schemaVersion++,f.updatedAttributes()),jn.trace(`${e} table loading, running index`),v.length>0||P.length>0?f.indexingOperation=Mue(f,v,P):N&&Tm.signalSchemaChange(new gm.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=u,N)for(let U of TN)U(f,u!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),jn.trace(`${e} table loaded`),f;function q(){A||d.transactionSync(()=>({then(U){A=U}}))}a(q,"startTxn")}async function Mue(e,t,r){try{let n=e.schemaVersion;await Tm.signalSchemaChange(new gm.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,Pk.getIndexedValues)(u[h]);if(m)for(let S=0,T=m.length;S<T;S++)f.dbi.put(m[S],_)}}),s.then(()=>l--,E=>{l--,jn.error(E)}),bd.workerData&&bd.workerData.restartNumber!==Mk.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=_,e.dbisDB.put(E.key,E);if(i)return}l>Due?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 Tm.signalSchemaChange(new gm.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 vb(e){TN.push(e)}function bh(){let e=(0,Ot.get)($t.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,Ot.get)($t.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,Ot.get)($t.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||Uk,n={startingOffset:32};return t&&(n.dictionary=Od.readFileSync(t)),r&&(n.threshold=r),e&&n}var Ot,mm,Sm,lt,On,Dl,ja,pN,$t,Od,mN,Pk,Tm,gm,bd,jn,Mk,SN,Am,Uk,sn,ft,Ll,TN,Rm,Bo,Pl,Due,Pue,Re=be(()=>{Ot=x(X()),mm=x(_t()),Sm=require("lmdb"),lt=require("path"),On=require("fs"),Dl=x(Je());mp();ja=x(Eu()),pN=x(hu()),$t=x(D()),Od=x(require("fs-extra")),mN=require("../index"),Pk=x(wr()),Tm=x(Ei()),gm=x(os()),bd=require("worker_threads"),jn=x(k()),Mk=x(rt());no();fu();SN="data",Am=Symbol("defined-tables"),Uk=((0,Ot.get)($t.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,Ot.initSync)();sn=Object.create(null),ft=Object.create(null);(0,mN._assignPackageExport)("databases",ft);(0,mN._assignPackageExport)("tables",sn);Ll=Symbol.for("next-table-id"),TN=[],Bo=new Map;a(Lue,"getTables");a(Br,"getDatabases");a(b_,"resetDatabases");a(Ad,"readMetaDb");a(vk,"ensureDB");a(Bk,"setTable");a(Ic,"database");a(Yg,"dropDatabase");a(St,"table");Due=1e3,Pue=10;a(Mue,"runIndexing");a(Uue,"dropTableMeta");a(vb,"onUpdatedTable");a(bh,"getDefaultCompression")});var Y=R((_Ie,zk)=>{"use strict";var Ho=require("path"),Fk=require("fs-extra"),zr=k(),Hk=require("fs-extra"),Om=require("os"),vue=require("net"),Bue=require("recursive-iterator"),mt=D(),Hue=SS(),xk=require("papaparse"),bm=require("moment"),{inspect:xue}=require("util"),Gk=require("is-number"),uIe=require("lodash"),Gue=require("minimist"),que=require("https"),Fue=require("http"),{hdb_errors:Nm}=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)))$/,kk=require("util").promisify(setTimeout),Vue=100,$ue=5,Yue="",Kue=4,qk={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};zk.exports={isEmpty:bn,isEmptyOrZeroLength:zs,arrayHasEmptyValues:jue,arrayHasEmptyOrZeroLengthValues:zue,buildFolderPath:Jue,isBoolean:Vk,errorizeMessage:Wue,stripFileExtension:Zue,autoCast:e_e,autoCastJSON:$k,autoCastJSONDeep:RN,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:Kk,getPropsFilePath:a_e,promisifyPapaParse:f_e,removeBOM:Wk,createEventPromise:E_e,checkProcessRunning:h_e,checkSchemaTableExist:p_e,checkSchemaExists:Qk,checkTableExists:jk,getStartOfTomorrowInSeconds:m_e,getLimitKey:S_e,isObject:Xue,isNotEmptyAndHasValue:Que,autoCasterIsNumberCheck:Yk,backtickASTSchemaItems:T_e,isPortTaken:l_e,createForkArgs:g_e,autoCastBoolean:R_e,async_set_timeout:kk,getTableHashAttribute:A_e,doesSchemaExist:O_e,doesTableExist:b_e,stringifyObj:N_e,ms_to_time:y_e,changeExtension:I_e,getEnvCliRootPath:AN,noBootFile:w_e,httpRequest:C_e,transformReq:L_e,convertToMS:D_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:qk[e]!==void 0?qk[e]:Yk(e)===!0?Number(e):kue.test(e)?new Date(e):e}a(e_e,"autoCast");function $k(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a($k,"autoCastJSON");function RN(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=RN(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=RN(r);n!==r&&(e[t]=n)}return e}else return $k(e)}a(RN,"autoCastJSONDeep");function Yk(e){if(e.startsWith("0.")&&Gk(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Gk(e))}a(Yk,"autoCasterIsNumberCheck");async function t_e(e){if(zs(e))throw new Error(`Directory path: ${e} does not exist`);try{await Hk.emptyDir(e),await Hk.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+Om.EOL}!zs(n)&&n[0]===";"?r+=" "+n+s+Om.EOL:zs(n)||(r+=n+"="+s+Om.EOL)}catch{zr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(o_e,"stringifyProps");function Kk(){let e;try{e=Om.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Kk,"getHomeDir");function a_e(){let e=Ho.join(Kk(),mt.HDB_HOME_DIR_NAME,mt.BOOT_PROPS_FILE_NAME);return Fk.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($e)).getDatabases();if(!r[e])return Nm.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Nm.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(){xk.parsePromise=function(e,t,r){return new Promise(function(n,s){xk.parse(e,{header:!0,transformHeader:Wk,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(f_e,"promisifyPapaParse");function Wk(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Wk,"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 kk(Vue*r++),(await Hue.findPs(e)).length>0&&(t=!1);while(t&&r<$ue);if(t)throw new Error(`process ${e} was not started`)}a(h_e,"checkProcessRunning");function p_e(e,t){let r=Qk(e);if(r)return r;let n=jk(e,t);if(n)return n}a(p_e,"checkSchemaTableExist");function Qk(e){let{getDatabases:t}=(Re(),ae($e));if(!t()[e])return Nm.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Qk,"checkSchemaExists");function jk(e,t){let{getDatabases:r}=(Re(),ae($e));if(!r()[e][t])return Nm.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(jk,"checkTableExists");function m_e(){let e=bm().utc().add(1,mt.MOMENT_DAYS_TAG).startOf(mt.MOMENT_DAYS_TAG).unix(),t=bm().utc().unix();return e-t}a(m_e,"getStartOfTomorrowInSeconds");function S_e(){return bm().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($e)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(A_e,"getTableHashAttribute");function O_e(e){let{getDatabases:t}=(Re(),ae($e));return t()[e]!==void 0}a(O_e,"doesSchemaExist");function b_e(e,t){let{getDatabases:r}=(Re(),ae($e));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=bm.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 AN(){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(AN,"getEnvCliRootPath");var gN;function w_e(){if(gN)return gN;let e=AN();if(AN()&&Fk.pathExistsSync(Ho.join(e,mt.HDB_CONFIG_FILE)))return gN=!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 L_e(e){if(!e.schema&&!e.database){e.schema=mt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(L_e,"transformReq");function D_e(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(D_e,"convertToMS")});var X=R((fIe,tV)=>{"use strict";var ON=require("fs-extra"),za=require("path"),Jk=require("os"),P_e=require("properties-reader"),yd=k(),Nd=Y(),Ee=D(),ym=Et(),M_e="Error initializing environment manager",Im="BOOT_PROPS_FILE_PATH",Xk=!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={};tV.exports={BOOT_PROPS_FILE_PATH:Im,getHdbBasePath:v_e,setHdbBasePath:B_e,get:Zk,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 Zk(e){let t=ym.getConfigValue(e);return t===void 0?qi[e]:t}a(Zk,"get");function ve(e,t){U_e[e]&&(qi[e]=t),ym.updateConfigObject(e,t)}a(ve,"setProperty");function H_e(){let e;try{e=Nd.getPropsFilePath(),ON.accessSync(e,ON.constants.F_OK|ON.constants.R_OK),Xk=!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[Im]=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{(Xk||H_e()||Nd.noBootFile())&&!eV&&(ym.initConfig(e),qi[Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=ym.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 eV=!1;function G_e(e){eV=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[Im]=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,Jk.userInfo()?Jk.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,Zk(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 ${Im}. Please check your boot props and settings files`;yd.fatal(r),yd.error(t)}}a(q_e,"initTestEnvironment")});var sV=R((hIe,nV)=>{"use strict";var Cm=X();Cm.initSync();var wm=D(),{httpRequest:F_e}=Y(),k_e=require("path"),rV=require("fs-extra"),V_e=require("yaml"),$_e={describe_table:!0,describe_all:!0,describe_database:!0,list_users:!0,list_roles:!0,drop_role:!0,add_user:!0,alter_user:!0,drop_user:!0,restart_service:!0,restart:!0,create_database:!0,drop_database:!0,create_table:!0,drop_table:!0,create_attribute:!0,drop_attribute:!0,search_by_id:!0,delete:!0,search_by_value:!0,csv_file_load:!0,csv_url_load:!0,cluster_get_routes:!0,cluster_network:!0,cluster_status:!0,remove_node:!0,add_component:!0,deploy_component:!0,package_component:!0,drop_component:!0,get_components:!0,get_component_file:!0,set_component_file:!0,registration_info:!0,get_fingerprint:!0,set_license:!0,get_job:!0,search_jobs_by_start_date:!0,read_log:!0,read_transaction_log:!0,read_audit_log:!0,delete_transaction_logs_before:!0,purge_stream:!0,delete_records_before:!0,install_node_modules:!0,set_configuration:!0,get_configuration:!0,create_authentication_tokens:!0,refresh_operation_token:!0,system_information:!0,sql:!0};nV.exports={cliOperations:K_e,buildRequest:Y_e};function Y_e(){let e={};for(let t of process.argv){if($_e[t]){e.operation=t;continue}if(t.includes("=")){let[r,...n]=t.split("=");n=n.join("=");try{n=JSON.parse(n)}catch{}e[r]=n}}return e}a(Y_e,"buildRequest");async function K_e(e){await rV.exists(k_e.join(Cm.get(wm.CONFIG_PARAMS.ROOTPATH),wm.HDB_PID_FILE))||(console.error("HarperDB must be running to perform this operation"),process.exit()),await rV.exists(Cm.get(wm.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:Cm.get(wm.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(V_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 aV=R((mIe,oV)=>{"use strict";var iV=require("semver/functions/major"),W_e=ma(),bN=process.versions&&process.versions.node?process.versions.node:void 0;oV.exports=Q_e;function Q_e(){let e=W_e.engines["minimum-node"];if(bN&&iV(bN)<iV(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${bN}. Please install a version of Node.js that is withing the defined range.`}}a(Q_e,"checkNodeVersion")});var yN=R((TIe,cV)=>{"use strict";var Id=X();Id.initSync();var Ml=require("fs-extra"),NN=require("path"),Ul=D(),j_e=require("crypto"),z_e=require("uuid").v4;cV.exports=J_e;function J_e(){if(Id.getHdbBasePath()!==void 0){let e=NN.join(Id.getHdbBasePath(),Ul.LICENSE_KEY_DIR_NAME,Ul.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=NN.join(Id.getHdbBasePath(),Ul.LICENSE_KEY_DIR_NAME,Ul.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=NN.join(Id.getHdbBasePath(),Ul.LICENSE_KEY_DIR_NAME,Ul.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Ml.accessSync(r),Ml.accessSync(e),Ml.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}});Ml.writeFileSync(r,s),Ml.writeFileSync(e,i.privateKey),Ml.writeFileSync(t,i.publicKey)}else throw n}}}a(J_e,"checkJWTTokenExist")});var uV=R((RIe,lV)=>{"use strict";var IN=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};lV.exports={HdbInfoInsertObject:IN}});var fV=R((OIe,dV)=>{"use strict";var _V=D(),wN=class{static{a(this,"UpgradeObject")}constructor(t,r){this[_V.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[_V.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};dV.exports={UpgradeObject:wN}});var Lm=R((NIe,hV)=>{"use strict";var zn=require("prompt"),vl=require("chalk"),EV=k(),As=require("os"),CN=to(),LN=["yes","y"];async function X_e(e){let t=`${As.EOL}`+vl.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=CN(["CONFIRM_UPGRADE"]),zn.start(),zn.message=t;let r={properties:{CONFIRM_UPGRADE:{description:vl.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 EV.error("There was an error when prompting user about an upgrade."),EV.error(s),!1}return LN.includes(n.CONFIRM_UPGRADE)}a(X_e,"forceUpdatePrompt");async function Z_e(e){let t=`${As.EOL}`+vl.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=CN(["CONFIRM_DOWNGRADE"]),zn.start(),zn.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:vl.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 LN.includes(n.CONFIRM_DOWNGRADE)}a(Z_e,"forceDowngradePrompt");async function ede(){let e=`${As.EOL}`+vl.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=CN(["GENERATE_CERTS"]),zn.start(),zn.message=e;let t={properties:{GENERATE_CERTS:{description:vl.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 LN.includes(r.GENERATE_CERTS)}a(ede,"upgradeCertsPrompt");hV.exports={forceUpdatePrompt:X_e,forceDowngradePrompt:Z_e,upgradeCertsPrompt:ede}});var PN=R((IIe,pV)=>{"use strict";var DN=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};pV.exports=DN});var SV=R((MIe,mV)=>{"use strict";var tde=Y(),rde=Et(),CIe=k(),LIe=require("path"),DIe=require("fs"),PIe=D();mV.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 AV=R((vIe,RV)=>{"use strict";var xo=require("path"),Go=require("fs-extra"),sde=require("properties-reader"),ide=PN(),Mt=k(),{getOldPropsValue:Qe}=SV(),{HDB_SETTINGS_NAMES:oe,CONFIG_PARAMS:Ja}=D(),Xa=Et(),Dm=X(),TV=Y(),Js=D(),MN=new ide("3.1.0"),gV=[];function ode(){let e=sde(Dm.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
34
 
37
35
  ;The directory selected during install where the database files reside.
38
36
  ${oe.HDB_ROOT_KEY} = ${Qe(oe.HDB_ROOT_KEY,e)}
@@ -55,9 +53,9 @@ ${oe.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${Qe(oe.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0
55
53
  ;Limit the amount of time the parser will wait to receive the complete HTTP headers.. Defaults to 60,000 ms (1 minute).
56
54
  ${oe.SERVER_HEADERS_TIMEOUT_KEY} = ${Qe(oe.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
57
55
  ;Define whether to log to file or not.
58
- ${oe.LOG_TO_FILE} = ${Za.getDefaultConfig(Xa.LOGGING_FILE)}
56
+ ${oe.LOG_TO_FILE} = ${Xa.getDefaultConfig(Ja.LOGGING_FILE)}
59
57
  ;Define whether to log to stdout/stderr or not. NOTE HarperDB must run in foreground in order to receive the std stream from HarperDB.
60
- ${oe.LOG_TO_STDSTREAMS} = ${Za.getDefaultConfig(Xa.LOGGING_STDSTREAMS)}
58
+ ${oe.LOG_TO_STDSTREAMS} = ${Xa.getDefaultConfig(Ja.LOGGING_STDSTREAMS)}
61
59
  ;Set to control amount of logging generated. Accepted levels are trace, debug, warn, error, fatal.
62
60
  ${oe.LOG_LEVEL_KEY} = ${Qe(oe.LOG_LEVEL_KEY,e)}
63
61
  ;The path where log files will be written. If there is no file name included in the path, the log file will be created by default as 'hdb_log.log'
@@ -90,23 +88,23 @@ ${oe.OPERATION_TOKEN_TIMEOUT_KEY} = ${Qe(oe.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
90
88
  ;Defines the length of time a refresh token will be valid until it expires. Example values: https://github.com/vercel/ms
91
89
  ${oe.REFRESH_TOKEN_TIMEOUT_KEY} = ${Qe(oe.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
92
90
  ;The port the IPC server will run on.
93
- ${oe.IPC_SERVER_PORT} = ${Za.getDefaultConfig(Xa.IPC_NETWORK_PORT)}
91
+ ${oe.IPC_SERVER_PORT} = ${Xa.getDefaultConfig(Ja.IPC_NETWORK_PORT)}
94
92
  ;Run HDB in the foreground.
95
- ${oe.RUN_IN_FOREGROUND} = ${Za.getDefaultConfig(Xa.OPERATIONSAPI_FOREGROUND)}
93
+ ${oe.RUN_IN_FOREGROUND} = ${Xa.getDefaultConfig(Ja.OPERATIONSAPI_FOREGROUND)}
96
94
  ;Set to true to enable custom API endpoints. Requires a valid enterprise license.
97
- ${oe.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${Za.getDefaultConfig(Xa.CUSTOMFUNCTIONS_ENABLED)}
95
+ ${oe.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${Xa.getDefaultConfig(Ja.CUSTOMFUNCTIONS_ENABLED)}
98
96
  ;The port used to access the custom functions server.
99
- ${oe.CUSTOM_FUNCTIONS_PORT_KEY} = ${Za.getDefaultConfig(Xa.HTTP_PORT)}
97
+ ${oe.CUSTOM_FUNCTIONS_PORT_KEY} = ${Xa.getDefaultConfig(Ja.HTTP_PORT)}
100
98
  ;The path to the folder containing HarperDB custom function files.
101
- ${oe.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${Go.join(Qe(oe.HDB_ROOT_KEY,e),"custom_functions")}
99
+ ${oe.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${xo.join(Qe(oe.HDB_ROOT_KEY,e),"custom_functions")}
102
100
  ;Set the max number of processes HarperDB will start for the Custom Functions server
103
- ${oe.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Za.getDefaultConfig(Xa.HTTP_THREADS)}
104
- `,n=Lm.get("settings_path"),s=Go.dirname(n),i=Go.join(s,"3_1_0_upgrade_settings.bak");try{Mt.info(`Backing up old settings file to: ${i}`),qo.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}'`),qo.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),qo.copySync(i,n),c}Lm.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),Mt.info(o),o}a(cde,"updateSettingsFile_3_1_0");function lde(){let e=Go.join(R$.getHomeDir(),Js.HDB_HOME_DIR_NAME,Js.LICENSE_KEY_DIR_NAME,Js.LICENSE_FILE_NAME),t=Go.join(R$.getHomeDir(),Js.HDB_HOME_DIR_NAME,Js.LICENSE_KEY_DIR_NAME,Js.REG_KEY_FILE_NAME),r=Go.join(Lm.getHdbBasePath(),Js.LICENSE_KEY_DIR_NAME,Js.LICENSE_FILE_NAME),n=Go.join(r,Js.LICENSE_FILE_NAME),s=Go.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),qo.mkdirpSync(r);try{qo.accessSync(e);try{let c="Moving licence file";console.log(c),Mt.info(c),qo.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{qo.accessSync(t);try{let c="Moving registration file";console.log(c),Mt.info(c),qo.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(lde,"moveLicenseFiles");MN.sync_functions.push(cde);MN.sync_functions.push(lde);A$.push(MN);O$.exports=A$});var C$=g((xIe,w$)=>{"use strict";var Nn=Ye(),{insertRecords:ude}=ea(),_de=wr(),Fo=_t(),dde=Y(),ki=k(),fde=Y(),Xs=require("fs-extra"),$i=require("path"),Ede=require("cli-progress"),wd=require("assert"),hde=require("pino"),pde=X();w$.exports=mde;var Pm,N$,Mm,UN,Ar,Cd=!1;async function mde(e=!0){return Pm=pde.getHdbBasePath(),N$=$i.join(Pm,"schema"),Mm=$i.join(Pm,"4_0_0_upgrade_tmp"),UN=$i.join(Pm,"transactions"),console.info("Reindexing upgrade started for schemas"),ki.notify("Reindexing upgrade started for schemas"),await y$(N$,!1,e),await Xs.pathExists(UN)&&(console.info(`
101
+ ${oe.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Xa.getDefaultConfig(Ja.HTTP_THREADS)}
102
+ `,n=Dm.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}Dm.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(TV.getHomeDir(),Js.HDB_HOME_DIR_NAME,Js.LICENSE_KEY_DIR_NAME,Js.LICENSE_FILE_NAME),t=xo.join(TV.getHomeDir(),Js.HDB_HOME_DIR_NAME,Js.LICENSE_KEY_DIR_NAME,Js.REG_KEY_FILE_NAME),r=xo.join(Dm.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");MN.sync_functions.push(ode);MN.sync_functions.push(ade);gV.push(MN);RV.exports=gV});var IV=R((HIe,yV)=>{"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();yV.exports=hde;var Pm,OV,Mm,UN,Ar,Cd=!1;async function hde(e=!0){return Pm=Ede.getHdbBasePath(),OV=ki.join(Pm,"schema"),Mm=ki.join(Pm,"4_0_0_upgrade_tmp"),UN=ki.join(Pm,"transactions"),console.info("Reindexing upgrade started for schemas"),Fi.notify("Reindexing upgrade started for schemas"),await bV(OV,!1,e),await Xs.pathExists(UN)&&(console.info(`
105
103
 
106
- Reindexing upgrade started for transaction logs`),ki.notify("Reindexing upgrade started for transaction logs"),await y$(UN,!0,e)),ki.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Cd?", but errors occurred":"")}a(mde,"reindexUpgrade");async function y$(e,t,r){let n=await Xs.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=$i.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($i.join(c,d)).isDirectory())try{await Sde(o,d,t),Ar.info(`Reindexing started for ${o}.${d}`),ki.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await gde(o,d,c,t,r),Ar.info(`Reindexing completed for ${o}.${d}`),ki.notify(`Reindexing completed for ${o}.${d}`)}catch(E){Cd=!0,E.schema_path=c,E.table_name=d,ki.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),ki.error(E),Ar.error(E),console.error(E)}}}if(!Cd)try{await Xs.rm(Mm,{recursive:!0})}catch{}}a(y$,"processTables");async function Sde(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=$i.join(Mm,s);await Xs.ensureDir(Mm),await Xs.writeFile(i,""),Ar=hde({level:"debug",formatters:{bindings(){}}},i)}a(Sde,"initPinoLogger");var Tde=20;async function gde(e,t,r,n,s){let i;try{i=await Nn.openEnvironment(r,t,n)}catch(R){if(R.message==="MDB_INVALID: File is not an LMDB file"){ki.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(R);return}throw R}let o=Ode(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 Ede.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 R of c.getRange({start:!1}))R.value=Object.assign({},R.value),E.push(R),n||e==="system"&&(t==="hdb_schema"&&(R.key=R.key.toString(),R.value.name=R.value.name.toString()),t==="hdb_table"&&(R.key=R.key.toString(),R.value.schema=R.value.schema.toString(),R.value.name=R.value.name.toString()),t==="hdb_attribute"&&(R.key=R.key.toString(),R.value.schema=R.value.schema.toString(),R.value.table=R.value.table.toString(),R.value.attribute=R.value.attribute.toString())),E.length>Tde&&await f();await f()}catch(R){throw Cd=!0,Ar.error(R),R}async function f(){let R,N=E.map(({value:U})=>U);n?R=await Promise.all(N.map(U=>Rde(d,U))):R=await ude(d,o,l.filter(U=>U!=="__blob__"),N,!1);for(let U=0,v=E.length;U<v;U++){let{key:q,value:M}=E[U];Ar.info(`Record hash value: ${q} hash: ${o}`);let W;n?W=R[U]:W=R.written_hashes.indexOf(q)>-1,wd(W,!0),Ade(d,o,M[o],n),Ar.info(`Insert success, written hashes: ${R.written_hashes}`),u.increment()}E=[],u.value/u.total*100%10===0&&ki.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 R=$i.join(r,t),N=$i.join(R,"data.mdb"),b=$i.join(R,"lock.mdb");await Xs.unlink(N),await Xs.unlink(b),await Xs.rmdir(R),Ar.info(`Deleted old environment files from schema folder: ${N}, ${b}`)}let S=await Nn.openEnvironment(r,t),T=Nn.statDBI(S,o);Ar.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify(T)}`),wd.deepStrictEqual(T.entryCount,m.entryCount),await Nn.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(gde,"processTable");async function Rde(e,t){Nn.initializeDBIs(e,Fo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Fo.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Fo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Fo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),fde.isEmpty(t.user_name)||e.dbis[Fo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Fo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(Rde,"insertTransaction");function Ade(e,t,r,n){let i=e.dbis[t].get(r);wd.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Fo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Fo.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&&!dde.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let _=0,u=l.length;_<u;_++){let d=l[_];I$(e,c,d,r)}else I$(e,c,l,r)}a(Ade,"validateIndices");function I$(e,t,r,n){try{let s=!1,i=_de.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(I$,"validateIndex");function Ode(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(Ode,"getHashDBI")});var vm=g((qIe,L$)=>{"use strict";var bde=require("mkcert"),Um=require("path"),vN=require("fs-extra"),BN=k(),Nde=X(),HN=L(),Bl=MT(),yde=ro(),Ide=Et();L$.exports={generateKeys:wde,updateConfigCert:D$};async function wde(){let e=Nde.getHdbBasePath(),t=Um.join(e,HN.LICENSE_KEY_DIR_NAME),r=await bde.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:3650,caKey:Bl.CERTIFICATE_VALUES.key,caCert:Bl.CERTIFICATE_VALUES.cert}),n=Um.join(t,Bl.CERTIFICATE_PEM_NAME),s=Um.join(t,Bl.PRIVATEKEY_PEM_NAME),i=Um.join(t,Bl.CA_PEM_NAME);try{await vN.writeFile(n,r.cert)}catch(o){throw BN.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await vN.writeFile(s,r.key)}catch(o){throw BN.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await vN.writeFile(i,Bl.CERTIFICATE_VALUES.cert)}catch(o){throw BN.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}D$(n,s,i)}a(wde,"generateKeys");function D$(e,t,r){let n=yde(Object.keys(HN.CONFIG_PARAM_MAP),!0),s=HN.CONFIG_PARAMS,i={[s.CLUSTERING_TLS_CERTIFICATE]:n[s.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?n[s.CLUSTERING_TLS_CERTIFICATE]:e,[s.CLUSTERING_TLS_PRIVATEKEY]:n[s.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?n[s.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[s.CLUSTERING_TLS_CERT_AUTH]:n[s.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?n[s.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[s.TLS_CERTIFICATE]:n[s.TLS_CERTIFICATE.toLowerCase()]?n[s.TLS_CERTIFICATE.toLowerCase()]:e,[s.TLS_PRIVATEKEY]:n[s.TLS_PRIVATEKEY.toLowerCase()]?n[s.TLS_PRIVATEKEY.toLowerCase()]:t,[s.TLS_CERTIFICATEAUTHORITY]:n[s.TLS_CERTIFICATEAUTHORITY.toLowerCase()]?n[s.TLS_CERTIFICATEAUTHORITY.toLowerCase()]:r};n[s.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_CERTIFICATE]=n[s.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),n[s.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_PRIVATEKEY]=n[s.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),n[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=n[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),Ide.updateConfigValue(void 0,void 0,i,!1,!0)}a(D$,"updateConfigCert")});var B$=g(($Ie,v$)=>{"use strict";var Bm=require("path"),ko=require("fs-extra"),Cde=PN(),ec=k(),P$=Et(),xN=X(),Os=L(),Hm=Y(),Dde=require("properties-reader"),Lde=as(),Pde=GE(),Mde=ur(),kIe=require("util"),Ude=Mde.searchByValue,vde=Pr(),Bde=oh(),Hde=Ze(),xde=C$(),M$=vm(),Gde=Dm(),Pd=new Cde("4.0.0"),U$=[],Dd,Ld;async function qde(){try{if(await Gde.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Dd){let t=Hm.changeExtension(Dd,".bak");await ko.move(Dd,t)}if(Ld){let t=Hm.changeExtension(Ld,".bak");await ko.move(Ld,t)}await M$.generateKeys()}else console.log("Using existing certificates."),M$.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(qde,"generateNewKeys");async function Fde(){console.log("Updating HarperDB nodes."),ec.info("Updating HarperDB nodes.");let e=[];try{let t=new Lde(Os.SYSTEM_SCHEMA_NAME,Os.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await Ude(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!Hde.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let u=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(u),u}let l={host:c.host,port:c.port};e.push(l);let _=[];for(let u=0,d=c.subscriptions.length;u<d;u++){let 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(Hm.isEmptyOrZeroLength(n))return;let s=new Pde(Os.SYSTEM_SCHEMA_NAME,Os.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await vde.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{Bde.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(Fde,"updateNodes");async function kde(){let e=xN.get(Os.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(Bm.join("config","settings.js"))){ec.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),ec.info(t);let r=Bm.dirname(e),n=xN.get(Os.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=Bm.join(n,"backup","4_0_0_upgrade_settings.bak"),i=Bm.join(n,Os.HDB_CONFIG_FILE);try{ec.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),ko.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{ec.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),ec.info("Updating env variables with new settings values");let d=P$.initOldConfig(e);Dd=d[Os.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],Ld=d[Os.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],P$.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=Hm.getPropsFilePath();ko.accessSync(o,ko.constants.F_OK|ko.constants.R_OK);let l=Dde(o).get(Os.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
107
- install_user = ${l}`;try{ko.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{xN.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{ko.removeSync(r),console.log(u),ec.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(kde,"updateSettingsFile_4_0_0");Pd.async_functions.push(kde);Pd.async_functions.push(qde);Pd.async_functions.push(xde);Pd.async_functions.push(Fde);U$.push(Pd);v$.exports=U$});var GN=g((YIe,q$)=>{"use strict";var tc=Y(),$de=L(),H$=k(),{DATA_VERSION:Vde,UPGRADE_VERSION:Yde}=$de.UPGRADE_JSON_FIELD_NAMES_ENUM,x$=b$(),xm=B$(),rc=new Map;x$&&x$.forEach(e=>{rc.set(e.version,e)});xm&&xm.forEach(e=>{rc.set(e.version,e)});xm&&xm.forEach(e=>{rc.set(e.version,e)});function Kde(){return[...rc.keys()].sort(tc.compareVersions)}a(Kde,"getSortedVersions");function G$(e){let t=e[Vde],r=e[Yde];return tc.isEmptyOrZeroLength(t)||tc.isEmptyOrZeroLength(r)?(H$.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),H$.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...rc.keys()].sort(tc.compareVersions).filter(function(n){return tc.compareVersions(n,t)>0&&tc.compareVersions(n,r)<=0})}a(G$,"getVersionsForUpgrade");function Wde(e){return G$(e).length>0}a(Wde,"hasUpgradesRequired");function Qde(e){return tc.isEmptyOrZeroLength(e)?null:rc.has(e)?rc.get(e):null}a(Qde,"getDirectiveByVersion");q$.exports={getSortedVersions:Kde,getDirectiveByVersion:Qde,getVersionsForUpgrade:G$,hasUpgradesRequired:Wde}});var Md=g((WIe,Y$)=>{"use strict";var jde=require("util"),qN=require("chalk"),zde=require("os"),k$=Pr(),Jde=ur(),yn=L(),$$=d$(),kN=wT(),{UpgradeObject:F$}=h$(),{forceDowngradePrompt:Xde}=Dm(),Zde=Ri(),Gm=k(),Hl=Y(),$N=Bn(),efe=(Re(),ae(Ve)),tfe=GN(),rfe=jde.promisify($N.setSchemaDataToGlobal),nfe=Jde.searchByValue,sfe="info_id",ife="2.9.9",ofe="3.0.0";async function afe(e){let t=new $$.HdbInfoInsertObject(1,e,e),r=new kN.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 $N.setSchemaDataToGlobal(),k$.insert(r)}a(afe,"insertHdbInstallInfo");async function FN(e){let t,r=await V$(),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 $$.HdbInfoInsertObject(i,e,e);let o=new kN.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 rfe(),k$.insert(o)}a(FN,"insertHdbUpgradeInfo");async function V$(){let e=new kN.NoSQLSeachObject(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,sfe,yn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await nfe(e))}catch(r){console.error(r)}return t}a(V$,"getAllHdbInfoRecords");async function cfe(){let e=await V$();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(cfe,"getLatestHdbInfoRecord");async function lfe(){Gm.info("Checking if HDB software has been updated");try{let e=Zde.version(),t=await cfe(),r;if(Hl.isEmpty(t))r=ife;else if(r=t.data_version_num,Hl.compareVersions(r.toString(),e.toString())>0){if(!Hl.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(qN.yellow(`This instance's data was last run on version ${r}`)),console.error(qN.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.${zde.EOL}${yn.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Hl.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(qN.yellow(`This instance's data was last run on version ${r}`)),await Xde(new F$(r,e))?await FN(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if($N.setSchemaDataToGlobal(),ufe(r),e.toString()===r.toString())return;let n=new F$(r,e);if(tfe.hasUpgradesRequired(n))return n;Hl.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await FN(n.upgrade_version),Gm.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw Gm.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Gm.fatal(e),e}}a(lfe,"getVersionUpdateInfo");function ufe(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 efe.databases.system))throw console.log(t),new Error(t);if(!Hl.isEmpty(e)&&e<ofe)throw console.log(t),new Error(t)}a(ufe,"checkIfInstallIsSupported");Y$.exports={insertHdbInstallInfo:afe,insertHdbUpgradeInfo:FN,getVersionUpdateInfo:lfe}});var z$=g((jIe,j$)=>{"use strict";var VN=require("joi"),{boolean:_fe,string:K$,number:dfe}=VN.types(),W$=require("fs-extra"),Ud=L(),Q$=require("path"),ffe=nt();j$.exports=Efe;function Efe(e){let t=K$.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=VN.object({[Ud.INSTALL_PROMPTS.ROOTPATH]:VN.custom(hfe),[Ud.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:dfe.min(0).allow("null",null),[Ud.INSTALL_PROMPTS.TC_AGREEMENT]:K$.valid("yes","YES","Yes"),[Ud.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Ud.INSTALL_PROMPTS.CLUSTERING_ENABLED]:_fe});return ffe.validateBySchema(e,r)}a(Efe,"installValidator");function hfe(e,t){if(W$.existsSync(Q$.join(e,"system/hdb_user/data.mdb"))||W$.existsSync(Q$.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(hfe,"validateRootAvailable")});var WN=g((JIe,J$)=>{"use strict";var{mkdirpSync:pfe}=require("fs-extra"),Zs=require("path"),xl=L(),KN=k(),mfe=Hn(),YN=_i(),Sfe=Je();J$.exports=Tfe;async function Tfe(e){KN.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",xl.LICENSE_FILE_NAME)),bs(Zs.join(e,"log")),bs(Zs.join(e,"doc")),bs(Zs.join(e,"database")),bs(Zs.join(e,xl.TRANSACTIONS_DIR_NAME)),bs(Zs.join(e,"clustering","leaf")),bs(Zs.join(e,"components")),await gfe()}a(Tfe,"mountHdb");async function gfe(){let e=Hu(),t=Object.keys(YN);for(let r=0;r<t.length;r++){let n=t[r],s=YN[n].hash_attribute;try{Sfe.initSystemSchemaPaths(xl.SYSTEM_SCHEMA_NAME,n);let i=new e(xl.SYSTEM_SCHEMA_NAME,n,s);i.attributes=YN[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,await mfe.createTable(n,i)}catch(i){throw KN.error(`issue creating environment for ${xl.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(gfe,"createLMDBTables");function bs(e){pfe(e,{mode:xl.HDB_FILE_PERMISSIONS}),KN.info(`Directory ${e} created`)}a(bs,"makeDirectory")});var Fm=g((ZIe,lV)=>{"use strict";var jN=require("os"),tV=require("inquirer"),Jn=require("fs-extra"),Rfe=require("properties-reader"),nc=require("chalk"),ri=require("path"),Afe=require("human-readable-ids").hri,Ofe=require("ora"),bfe=require("yaml"),Ut=k(),Yo=X(),vd=Y(),qm=ro(),rV=Md(),nV=Ri(),ne=L(),Nfe=z$(),yfe=WN(),zN=Et(),Ife=Ur(),wfe=BE(),Cfe=yN(),Dfe=Bn(),Lfe=require("util").promisify,Pfe=Lfe(Dfe.setSchemaDataToGlobal),Mfe=vm(),Gl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Or=a(e=>nc.magenta.bold(e),"HDB_PROMPT_MSG"),Ufe="https://harperdb.io/legal/end-user-license-agreement",Ko=jN.EOL,$o="",vfe="yes",X$="Starting HarperDB install...",Z$="HarperDB installation was successful.",eV="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Bfe="An out of date version of HarperDB is already installed.",QN="It appears that HarperDB is already installed. Exiting install...",Hfe="Aborting install",xfe=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),Gfe=new RegExp(/^[^\s.,*>]+$/),qfe=jN.homedir(),Ffe=ri.join(qfe,ne.HDB_ROOT_DIR_NAME),kfe=9925,$fe="HDB_ADMIN",Vfe="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:"},Wo=qm([ne.INSTALL_PROMPTS.HDB_CONFIG]),ti,sV=!1,iV=!1;lV.exports={install:oV,updateConfigEnv:tEe,setIgnoreExisting:rEe};oV.createSuperUser=cV;async function oV(){console.log(Or(Ko+X$+Ko)),Ut.notify(X$);let e;Wo[ne.INSTALL_PROMPTS.HDB_CONFIG]&&(e=Yfe());let t=Wfe();Object.assign(t,e);let r=Nfe(t);if(r)throw r.message;await Qfe(),await jfe(t);let n=await Kfe(t);n[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT]&&(n[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]=null),ti=n[ne.INSTALL_PROMPTS.ROOTPATH],Wo[ne.INSTALL_PROMPTS.HDB_CONFIG]&&ri.dirname(Wo[ne.INSTALL_PROMPTS.HDB_CONFIG])===ti&&(sV=!0),!Wo[ne.INSTALL_PROMPTS.HDB_CONFIG]&&await Jn.pathExists(ri.join(ti,ne.HDB_CONFIG_FILE))&&(console.error(QN),process.exit());let s=Ofe({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.");Yo.setHdbBasePath(ti),await yfe(ti),await zfe(),await Jfe(n),Ut.initLogSettings(!0),await cV(n),await Zfe(n),await Mfe.generateKeys(),await eEe(),Cfe(),s.stop(),console.log(Or(Ko+Z$+Ko)),Ut.notify(Z$)}a(oV,"install");function Yfe(){let e=bfe.parseDocument(Jn.readFileSync(Wo[ne.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=zN.flattenConfig(e.toJSON());return t[ne.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[ne.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(Yfe,"getConfigFromFile");async function Kfe(e){Ut.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Gl,when:Vo(e[ne.INSTALL_PROMPTS.ROOTPATH],Jr.DESTINATION),name:ne.INSTALL_PROMPTS.ROOTPATH,prefix:$o,default:Ffe,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:Gl,when:Vo(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:$o,default:kfe,validate:s=>xfe.test(s)?!0:"Invalid port.",message:Or(Jr.HDB_PORT)},{type:"input",transformer:Gl,when:Vo(e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Jr.HDB_USERNAME),name:ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:$o,default:$fe,validate:s=>ei(s)?ei(s):(t=s,!0),message:Or(Jr.HDB_USERNAME)},{type:"password",when:Vo(e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Jr.HDB_PASS),name:ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:$o,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:Gl,when:Vo(e[ne.INSTALL_PROMPTS.CLUSTERING_NODENAME],Jr.NODE_NAME),name:ne.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:$o,default:Afe.random(),validate:i=>Gfe.test(i)?!0:"Invalid node name, must not contain ., * or >",message:Or(Jr.NODE_NAME)},{type:"input",transformer:Gl,when:Vo(e[ne.INSTALL_PROMPTS.CLUSTERING_USER],Jr.CLUSTER_USERNAME),name:ne.INSTALL_PROMPTS.CLUSTERING_USER,prefix:$o,default:Vfe,validate:i=>ei(i)?ei(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:Or(Jr.CLUSTER_USERNAME)},{type:"password",when:Vo(e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Jr.CLUSTER_PASS),name:ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:$o,validate:i=>ei(i)?ei(i):!0,message:Or(Jr.CLUSTER_PASS)}];r.push(...s)}let n=await tV.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(Kfe,"installPrompts");function Vo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Or(t)} ${nc.gray("[hidden]")}`),Ut.trace(`${Or(t)} [hidden]`)):(console.log(`${Or(t)} ${e}`),Ut.trace(`${Or(t)} ${e}`)),!1):!0}a(Vo,"displayCmdEnvVar");function ei(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(ei,"checkForEmptyValue");function Wfe(){let e=Object.keys(ne.INSTALL_PROMPTS),t=qm(e),r=qm(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(Wfe,"checkForPromptOverride");async function Qfe(){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=Rfe(e),s=zN.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&&!iV){if(Ut.trace(`Install found existing HDB config at:${e}`),await rV.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${nV.version()}. Exiting install...`;console.log(Ko+nc.magenta.bold(Bfe)),console.log(nc.magenta.bold(s)),Ut.error(s)}else console.log(Ko+nc.magenta.bold(QN)),Ut.error(QN);process.exit(0)}}a(Qfe,"checkForExistingInstall");async function jfe(e){Ut.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Ufe}${Ko}and can be viewed by typing or copying and pasting the URL into your web browser.${Ko}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:$o,transformer:Gl,when:Vo(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:nc.yellow("Please enter 'yes' or 'no'")},n=await tV.prompt([r]);n[ne.INSTALL_PROMPTS.TC_AGREEMENT]&&n[ne.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==vfe&&(console.log(nc.yellow(eV)),Ut.error(eV),process.exit(0))}a(jfe,"termsAgreement");async function zfe(){let e=ri.join(ti,ne.HDB_CONFIG_FILE),t;try{t=jN.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}Yo.setProperty(ne.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Yo.setProperty(ne.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Yo.setProperty(Yo.BOOT_PROPS_FILE_PATH,o)}}a(zfe,"createBootPropertiesFile");async function Jfe(e){Ut.trace("Creating HarperDB config file");let t=qm(Object.keys(ne.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{Wo[ne.INSTALL_PROMPTS.HDB_CONFIG]||zN.createConfigFile(t),Yo.initSync()}catch(r){Xfe(r)}}a(Jfe,"createConfigFile");function Xfe(e){Ut.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Hfe);let t=ri.resolve(Yo.get(Yo.BOOT_PROPS_FILE_PATH),"../");t&&Jn.removeSync(t),ti&&(sV?Jn.readdirSync(ti,{withFileTypes:!0}).forEach(n=>{let s=ri.join(n.path,n.name);s!==Wo[ne.INSTALL_PROMPTS.HDB_CONFIG]&&Jn.removeSync(s)}):Jn.removeSync(ti)),process.exit(1)}a(Xfe,"rollbackInstall");async function aV(e,t){Ut.trace("Creating admin user"),await Pfe();let r;try{r=await wfe.addRole(e)}catch(n){if(n.message.includes("already exists"))t=void 0;else throw n.message+="Error creating role",n}if(t)try{t.role=r.role,await Ife.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(aV,"createAdminUser");async function cV(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 aV(t,r),delete e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(cV,"createSuperUser");async function Zfe(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 aV({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[ne.INSTALL_PROMPTS.CLUSTERING_USER],delete e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(Zfe,"createClusterUser");async function eEe(){let e=nV.version();if(e)await rV.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(eEe,"insertHdbVersionInfo");function tEe(e){Wo[ne.INSTALL_PROMPTS.HDB_CONFIG]=e}a(tEe,"updateConfigEnv");function rEe(e){iV=e}a(rEe,"setIgnoreExisting")});var dV=g((twe,_V)=>{"use strict";var JN=Y(),In=k(),uV=GN();_V.exports={processDirectives:nEe};async function nEe(e){console.log("Starting upgrade process...");let t=uV.getVersionsForUpgrade(e),r=oEe(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=sEe(o.sync_functions)}catch(u){throw In.error(`Error while running an upgrade script for ${o.version}`),u}try{_=await iEe(o.async_functions)}catch(u){throw In.error(`Error while running an upgrade script for ${o.version}`),u}n.push(...l,..._)}return n}a(nEe,"processDirectives");function sEe(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(sEe,"runSyncFunctions");async function iEe(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(iEe,"runAsyncFunctions");function oEe(e){if(JN.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=uV.getDirectiveByVersion(r);n&&t.push(n)}return t}a(oEe,"getUpgradeDirectivesToInstall")});var ey=g((nwe,SV)=>{"use strict";var km=X();km.initSync();var pV=require("chalk"),fV=require("fs-extra"),Yi=k(),Vi=L(),EV=Ri(),aEe=dV(),XN=Y(),mV=Md(),cEe=Dm(),hV=SS(),lEe=Bn(),uEe=require("util").promisify,_Ee=uEe(lEe.setSchemaDataToGlobal),ZN,{UPGRADE_VERSION:$m}=Vi.UPGRADE_JSON_FIELD_NAMES_ENUM;SV.exports={upgrade:dEe};async function dEe(e){await _Ee(),ZN===void 0&&(ZN=Kc()),fV.existsSync(km.get(km.BOOT_PROPS_FILE_PATH))||(Bd("The hdb_boot_properties file was not found. Please install HDB.",Vi.LOG_LEVELS.ERROR),process.exit(1)),fV.existsSync(km.get(Vi.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(Bd("The hdb settings file was not found. Please make sure HDB is installed.",Vi.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await mV.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),Bd(`This version of HarperDB is ${EV.version()}`,Vi.LOG_LEVELS.INFO);let r=t[$m]?t[$m]:EV.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Vi.HDB_SUPPORT_ADDRESS}`),Yi.notify("Missing new version field from upgrade info object"),process.exit(1)),await fEe();let n,s=0;try{n=await cEe.forceUpdatePrompt(t)}catch(i){Yi.error("There was an error when prompting user about upgrade."),Yi.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Yi.info(`Starting upgrade to version ${r}`),await EEe(t),Bd(`HarperDB was successfully upgraded to version ${t[$m]}`,Vi.LOG_LEVELS.INFO)}a(dEe,"upgrade");async function fEe(){let e=!1,t=await hV.findPs(Vi.HDB_PROC_NAME);if(XN.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await hV.findPs("hdb_express");XN.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await ZN.list();XN.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(pV.red(r)),Yi.error(r),process.exit(1)}}a(fEe,"checkIfRunning");async function EEe(e){try{await aEe.processDirectives(e)}catch(t){throw Bd("There was an error during the data upgrade. Please check the logs.",Vi.LOG_LEVELS.ERROR),t}try{await mV.insertHdbUpgradeInfo(e[$m])}catch(t){Yi.error("Error updating the 'hdb_info' system table."),Yi.error(t)}}a(EEe,"runUpgrade");function Bd(e,t=void 0){t||(t=Yi.info),Yi[t](e),console.log(pV.magenta(e))}a(Bd,"printToLogAndConsole")});var OV=g((iwe,AV)=>{"use strict";var{promises:ry,createReadStream:hEe,createWriteStream:pEe}=require("fs"),{createGzip:mEe}=require("zlib"),{promisify:SEe}=require("util"),{pipeline:TEe}=require("stream"),gEe=SEe(TEe),REe=require("path"),ic=X();ic.initSync();var sc=k(),{CONFIG_PARAMS:Hd,ITC_EVENT_TYPES:AEe}=L(),{onMessageFromWorkers:OEe}=rt(),bEe=6e4,NEe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",yEe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",ty,gV;AV.exports=RV;OEe(e=>{e.type===AEe.RESTART&&(ic.initSync(!0),clearInterval(gV),ic.get(Hd.LOGGING_ROTATION_ENABLED)&&RV())});async function RV(){try{let e=sc.getLogFilePath(),t=ic.get(Hd.LOGGING_ROTATION_MAXSIZE),r=ic.get(Hd.LOGGING_ROTATION_INTERVAL);if(!t&&!r){sc.error(NEe);return}let n=ic.get(Hd.LOGGING_ROTATION_PATH);if(!n){sc.error(yEe);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}ty=Date.now()/6e4,sc.trace("Log rotate enabled, maxSize:",t,"interval:",r),gV=setInterval(async()=>{if(s){let o;o=await ry.stat(e),o.size>=s&&await TV(e,n)}i&&Date.now()/6e4-ty>=i&&(await TV(e,n),ty=Date.now()/6e4)},bEe).unref()}catch(e){sc.error(e)}}a(RV,"logRotator");async function TV(e,t){let r=ic.get(Hd.LOGGING_ROTATION_COMPRESS),n=REe.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await gEe(hEe(e),mEe(),pEe(n)),await ry.unlink(e)):await ry.rename(e,n),sc.closeLogFile(),sc.notify(`hdb.log rotated, old log moved to ${n}`)}a(TV,"moveLogFile")});var oc=g((hwe,LV)=>{"use strict";var Xr=X();Xr.initSync();var awe=No(),bt=L(),si=k(),Ki=require("fs-extra"),Qo=require("path"),IEe=require("systeminformation"),wEe=yN(),{install:CEe}=Fm(),ny=require("chalk"),DEe=Sa(),Wi=Y(),NV=Et(),yV=ro(),bV=fh(),LEe=ey(),PEe=OV(),{compactOnStart:MEe}=(Ah(),ae(Rh)),UEe=require("minimist"),{PACKAGE_ROOT:vEe}=L(),{startHTTPThreads:BEe,startSocketServer:cwe,mostIdleRouting:lwe,remoteAffinityRouting:uwe}=(wb(),ae(rF)),HEe=Md(),{isMainThread:xEe}=require("worker_threads"),_we=_i(),dwe=Ei(),fwe=Og(),Ewe=Hu(),Vm=L(),ni,ql,IV=!1,GEe="Upgrade complete. Starting HarperDB.",qEe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",FEe="HarperDB not found, starting install process.",kEe="There was an error during install, check install_log.log for more details. Exiting.",$Ee="HarperDB successfully started.";function VEe(){if(!IV){let e=a(()=>{Ki.removeSync(Qo.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(VEe,"addExitListeners");async function wV(e=!1,t=!1){if(console.log(ny.magenta("Starting HarperDB...")),await DV()===!1){console.log(FEe);try{await CEe()}catch(o){console.error(kEe,o),si.error(o),process.exit(1)}}if(!e){let o=yV(Object.keys(bt.CONFIG_PARAM_MAP),!0);!Wi.isEmpty(o)&&!Wi.isEmptyOrZeroLength(Object.keys(o))&&NV.updateConfigValue(void 0,void 0,o,!0,!0)}let r,n=ql?.service==="clustering";ql?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Ki.readFile(Qo.join(Xr.get(bt.CONFIG_PARAMS.ROOTPATH),bt.HDB_PID_FILE),"utf8")),c=await IEe.processes();for(let l of c.list)if(l.pid===o){n?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}ni===void 0&&(ni=Kc()),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 bV.generateNatsConfig(),await ni.startClusteringProcesses(!0),process.exit()),VEe(),await Ki.writeFile(Qo.join(Xr.get(Vm.CONFIG_PARAMS.ROOTPATH),Vm.HDB_PID_FILE),`${process.pid}`),si.info("HarperDB PID",process.pid);let s;try{let o=await HEe.getVersionUpdateInfo();o!==void 0&&(s=o[bt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await LEe.upgrade(o),console.log(GEe))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`,o),si.error(o)):(console.error(qEe,o),si.error(o)),process.exit(1)}wEe(),WEe(),Wi.autoCastBoolean(Xr.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&xEe&&await bV.generateNatsConfig(t)}a(wV,"initialize");async function YEe(e=!1){try{ql=UEe(process.argv),ql.ROOTPATH&&NV.updateConfigObject("settings_path",Qo.join(ql.ROOTPATH,bt.HDB_CONFIG_FILE)),await wV(e,!0),Xr.get(bt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await MEe();let t=process.env.IS_SCRIPTED_SERVICE&&!ql.service;Wi.autoCastBoolean(Xr.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await ni.startClusteringProcesses(),await ni.startClusteringThreads()),await BEe(process.env.DEV_MODE?1:Xr.get(Vm.CONFIG_PARAMS.THREADS_COUNT)??Xr.get(Vm.CONFIG_PARAMS.THREADS)),Xr.get(bt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await PEe(),t||CV()}catch(t){console.error(t),si.error(t),process.exit(1)}}a(YEe,"main");function CV(){si.suppressLogging(()=>{console.log(ny.magenta(""+Ki.readFileSync(Qo.join(vEe,"utility/install/ascii_logo.txt")))),console.log(ny.magenta(`|------------- HarperDB ${DEe.version} successfully started ------------|`))}),si.notify($Ee)}a(CV,"started");async function KEe(e=!0){IV=!e;try{ni===void 0&&(ni=Kc()),ni.enterPM2Mode(),await wV(),Wi.autoCastBoolean(Xr.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await ni.startClusteringProcesses(),await ni.startService(bt.PROCESS_DESCRIPTORS.HDB),CV(),e&&process.exit(0)}catch(t){console.error(t),si.error(t),process.exit(1)}}a(KEe,"launch");function WEe(){let e=Qo.join(Xr.get(bt.CONFIG_PARAMS.ROOTPATH),bt.LICENSE_KEY_DIR_NAME,bt.LICENSE_FILE_NAME),t=Qo.join(e,bt.LICENSE_FILE_NAME),r=Qo.join(e,bt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=yV(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Wi.isEmpty(n)||Wi.isEmpty(s))return;Ki.mkdirpSync(e),Ki.writeFileSync(r,n),Ki.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),si.error(s)}}a(WEe,"writeLicenseFromVars");LV.exports={launch:KEe,main:YEe,isHdbInstalled:DV};async function DV(){try{await Ki.stat(Wi.getPropsFilePath()),await Ki.stat(Xr.get(bt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Wi.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw si.error(`Error checking for HDB install - ${e}`),e}return!0}a(DV,"isHdbInstalled")});var cy=g((mwe,QV)=>{"use strict";var PV=require("os"),Wm=require("https"),MV=require("http"),Yt=require("fs-extra"),UV=require("yaml"),QEe=require("human-readable-ids").hri,{pipeline:vV}=require("stream/promises"),{createWriteStream:Qm,ensureDir:jm}=require("fs-extra"),{join:Cn}=require("path"),kV=require("lodash"),jEe=require("minimist"),kd=require("path"),zEe=require("properties-reader"),Ns=X(),JEe=gi(),$V=k(),sy=Et(),{restart:XEe}=No(),zm=Y(),ZEe=ro(),BV=gt(),ehe=Bn(),{main:VV,launch:the}=oc(),{install:rhe,updateConfigEnv:nhe,setIgnoreExisting:oy}=Fm(),YV=WN(),Zr=L(),she=Ri(),ihe=Md(),{SYSTEM_TABLE_NAMES:HV,SYSTEM_SCHEMA_NAME:ohe,CONFIG_PARAMS:xd,OPERATIONS_ENUM:Dn}=Zr,ahe=1e4,che="clone-node-config.yaml",ay=[HV.ROLE_TABLE_NAME,HV.USER_TABLE_NAME],lhe={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"},zi=jEe(process.argv),Gd=zi[lr.HDB_LEADER_USERNAME]??process.env[lr.HDB_LEADER_USERNAME],qd=zi[lr.HDB_LEADER_PASSWORD]??process.env[lr.HDB_LEADER_PASSWORD],Fd=zi[lr.HDB_LEADER_URL]??process.env[lr.HDB_LEADER_URL],Km=zi[lr.HDB_LEADER_CLUSTERING_HOST]??process.env[lr.HDB_LEADER_CLUSTERING_HOST],xV=zi[lr.HDB_CLONE_CLUSTERING_HOST]??process.env[lr.HDB_CLONE_CLUSTERING_HOST],uhe=(zi[lr.HDB_FULLY_CONNECTED]??process.env[lr.HDB_FULLY_CONNECTED])==="true",KV=(zi[lr.HDB_CLONE_OVERTOP]??process.env[lr.HDB_CLONE_OVERTOP])==="true",GV=zi[lr.CLUSTERING_NODENAME]??process.env[lr.CLUSTERING_NODENAME],_he=zi[xd.CLONED.toUpperCase()]??process.env[xd.CLONED.toUpperCase()],iy,en,ji={},qV,Qi,ii={},ut,Fl,vt,wn,ys,kl=!1,Xm=!1;QV.exports=a(async function(t=!1){if(console.info(`Starting clone node form leader node: ${Fd}`),delete process.env.HDB_LEADER_URL,vt=zm.getEnvCliRootPath(),!vt)try{let s=Cn(PV.homedir(),Zr.HDB_HOME_DIR_NAME,Zr.BOOT_PROPS_FILE_NAME);if(await Yt.pathExists(s)){let i=zEe(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`),kl=!0):(console.log("No HarperDB install found, starting fresh clone"),kl=!0),vt||(vt=Cn(PV.homedir(),Zr.HDB_ROOT_DIR_NAME),console.log("Using default root path",vt));let r;try{r=Cn(vt,che),en=UV.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{qV=UV.parseDocument(await Yt.readFile(n,"utf8"),{simpleKeys:!0}).toJSON(),ji=sy.flattenConfig(qV)}catch(s){console.error("Error reading existing harperdb-config.yaml on clone",s)}if(ji?.cloned&&_he!=="false")return console.log("Instance marked as cloned, clone will not run"),Ns.setCloneVar(!1),Ns.initSync(),VV();GV?Fl=GV:ji[Zr.CONFIG_PARAMS.CLUSTERING_NODENAME.toLowerCase()]?Fl=ji[Zr.CONFIG_PARAMS.CLUSTERING_NODENAME.toLowerCase()]:Fl=en?.clustering?.nodeName??QEe.random(),await dhe(),Ns.setCloneVar(!1),Ns.setHdbBasePath(vt),Yt.ensureDir(Ns.get(Zr.CONFIG_PARAMS.LOGGING_ROOT)),$V.initLogSettings(),await fhe(),Xm||await Ehe(),await mhe(t),iy&&Km&&await She(),console.info(`
109
- Successfully cloned node: `+Fd),t&&process.exit()},"cloneNode");async function dhe(){console.info("Cloning configuration"),Qi=await Jm({operation:Dn.GET_CONFIGURATION}),Qi=await JSON.parse(Qi.body),iy=Qi?.clustering?.enabled,ii=sy.flattenConfig(Qi);let e=Qi?.clustering?.hubServer?.cluster?.network?.port,t=en?.componentConfig?.exclude,r={cloned:!0,clustering_nodename:Fl,rootpath:vt};for(let s in ii)if(!(ii[s]!==null&&typeof ii[s]=="object"&&!(ii[s]instanceof Array)||lhe[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}}ji[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 ji)s!=="databases"&&typeof ji[s]=="object"&&!(ji[s]instanceof Array)||(r[s]=ji[s]);let n=ZEe(Object.keys(Zr.CONFIG_PARAM_MAP),!0);if(Object.assign(r,n),sy.createConfigFile(r,!0),Ns.initSync(!0),iy&&Km&&xV){let s={host:xV,port:Ns.get(xd.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT)};console.log("Setting clustering route on leader:",s),await Jm({operation:"cluster_set_routes",server:"hub",routes:[s]})}}a(dhe,"cloneConfig");async function fhe(){process.env.HDB_FETCH==="true"?(await phe(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await hhe()}a(fhe,"cloneDatabases");async function Ehe(){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),nhe(kd.join(vt,Zr.HDB_CONFIG_FILE)),oy(!0),await rhe()}a(Ehe,"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 hhe(){let e=oi("system"),t=Cn(e,"system.mdb");if(kl||!await Yt.exists(t)||KV){console.info("Cloning system database"),await jm(e);let r=Qm(t,{overwrite:!0}),n={operation:Dn.GET_BACKUP,database:"system",tables:ay},s=await FV(n,r);await Yt.utimes(t,Date.now(),new Date(s.date)),kl||(await YV(vt),await WV(),oy(!0))}else Xm=!0,console.log("Not cloning system database due to it already existing on clone");ut=await Jm({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(kV.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 jm(o);let c=Cn(o,r+".mdb"),l=Qm(c,{overwrite:!0}),_=await FV(i,l);await Yt.utimes(c,Date.now(),new Date(_.date))}}a(hhe,"cloneTablesHttp");async function phe(){let e=oi("system"),t=Cn(e,"system.mdb");if(kl||!await Yt.exists(t)||KV){console.info("Cloning system database using fetch");let r={operation:Dn.GET_BACKUP,database:"system",tables:ay},n=await Ym(r,!0),s=oi("system");await jm(s);let i=Cn(s,"system.mdb");await vV(n.body,Qm(i,{overwrite:!0})),await Yt.utimes(i,Date.now(),new Date(n.headers.get("date"))),kl||(await YV(vt),await WV(),oy(!0))}else Xm=!0,console.log("Not cloning system database due to it already existing on clone");ut=await Ym({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(kV.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 Ym({operation:Dn.GET_BACKUP,database:r,tables:n},!0)):(console.info(`Cloning database: ${r}`),i=await Ym({operation:Dn.GET_BACKUP,database:r},!0));let o=oi(r);await jm(o);let c=new Date(i.headers.get("date")),l=Cn(o,`${c.getTime()}-${r}.mdb`);await vV(i.body,Qm(l,{overwrite:!0}));let _=Cn(o,r+".mdb");await Yt.rename(l,_),await Yt.utimes(_,Date.now(),c)}}a(phe,"cloneTablesFetch");async function Ym(e,t=!1){let r=en?.httpsRejectUnauthorized??!1,n=new Wm.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(Ym,"leaderHttpReqFetch");async function mhe(e){let t=await JEe.getHDBProcessInfo();t.clustering.length===0||t.core.length===0?e?await the(!1):await VV():(console.info(await XEe({operation:Dn.RESTART})),await zm.async_set_timeout(ahe)),e&&await zm.async_set_timeout(2e3)}a(mhe,"startHDB");async function She(){console.info("Clustering cloned tables");let e=en?.clusteringConfig?.subscribeToLeaderNode!==!1,t=en?.clusteringConfig?.publishToLeaderNode!==!1;await ehe.setSchemaDataToGlobalAsync();let r=__(),n=await Jm({operation:Dn.CLUSTER_STATUS});n=await JSON.parse(n.body);let s=[];if(!Xm){let l=await Yt.stat(Cn(oi("system"),"system.mdb"));for(let _ of ay)s.push({schema:ohe,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 BV.createTableStreams(s),$V.info("Sending add_node request to node:",Qi?.clustering?.nodeName,"with subscriptions:",s);let c;if(uhe&&n.connections.length>0){let l=eh(),_=[{node_name:Qi?.clustering?.nodeName,subscriptions:s}],u=!1;Fl=Ns.get(Zr.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let d of n.connections){if(d.node_name===Fl)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:Qi?.clustering?.nodeName,subscriptions:s},!0),await BV.closeConnection()}a(She,"clusterTables");async function Jm(e){let t=new Wm.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 zm.httpRequest(i,e)}a(Jm,"leaderHttpReq");async function FV(e,t){let r=new Wm.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,MV=Wm),i.port&&(o.port=i.port),new Promise((c,l)=>{let _=MV.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(FV,"leaderHttpStream");async function WV(){let e=she.version();if(e)await ihe.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(WV,"insertHdbVersionInfo")});var zV=g((Twe,jV)=>{var The=Fm(),ghe=k();jV.exports=Rhe;async function Rhe(){try{await The.install()}catch(e){console.error("There was an error during the install."),console.error(e),ghe.error(e),process.exit(1)}}a(Rhe,"install")});var ZV=g((Rwe,XV)=>{"use strict";var Ahe=ch(),Ohe=k(),JV="Registration failed.";async function bhe(){let e;try{e=await Ahe.register()}catch(t){return Ohe.error(`Registration error ${t}`),JV}return e||JV}a(bhe,"register");XV.exports={register:bhe}});var nY=g((Owe,rY)=>{"use strict";var Nhe=k(),yhe=L(),Ihe=require("util"),whe=require("child_process"),eY=Ihe.promisify(whe.exec),Che=gi(),$d=Kc(),tY="Stopping HarperDB.";rY.exports=Dhe;async function Dhe(){if(console.log(tY),Nhe.notify(tY),await $d.isServiceRegistered(yhe.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 Che.getHDBProcessInfo();t.clustering.forEach(r=>{eY(`kill ${r.pid}`)}),t.core.forEach(r=>{eY(`kill ${r.pid}`)})}a(Dhe,"stop")});var aY=g((Nwe,oY)=>{"use strict";var uy=require("fs-extra"),_y=require("path"),ly=require("yaml"),Vd=gt(),Yd=L(),sY=Ze(),dy=k(),Lhe=Ur(),Phe=sh(),Mhe=rh(),Uhe=gi(),iY=X(),{isHdbInstalled:vhe}=oc();iY.initSync();var Xn={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},tn={LEAF:"leaf server",HUB:"hub server"},Zm;oY.exports=Bhe;async function Bhe(){let e={harperdb:{status:Xn.STOPPED}};if(!await vhe()){e.harperdb.status=Xn.NOT_INSTALLED,console.log(ly.stringify(e));return}Zm=iY.get(Yd.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await uy.readFile(_y.join(Zm,Yd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Yd.NODE_ERROR_CODES.ENOENT){dy.info("`harperdb status` did not find a hdb.pid file"),e.harperdb.status=Xn.STOPPED,console.log(ly.stringify(e));return}throw n}let r=await Uhe.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 Hhe(r),e.clustering[tn.HUB].status===Xn.RUNNING&&e.clustering[tn.LEAF].status===Xn.RUNNING){let n=[],s=await Phe({});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 Mhe.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(ly.stringify(e)),process.exit()}a(Bhe,"status");async function Hhe(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 Lhe.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 uy.readFile(_y.join(Zm,"clustering",sY.PID_FILES.HUB),"utf8"))}catch(o){dy.error(o),t[tn.HUB].pid=void 0}try{t[tn.LEAF].pid=Number.parseInt(await uy.readFile(_y.join(Zm,"clustering",sY.PID_FILES.LEAF),"utf8"))}catch(o){dy.error(o),t[tn.LEAF].pid=void 0}return t}a(Hhe,"getHubLeafStatus")});var eS=process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL");eS&&X().setCloneVar(!0);var Kd=require("fs"),cY=require("path"),ac=k(),lY=o$(),xhe=Ri(),Ghe=l$(),fy=L(),{SERVICE_ACTIONS_ENUM:br,PACKAGE_ROOT:qhe}=fy;Fhe();function Fhe(){let e=Ghe();if(e)if(e.error){console.error(e.error),ac.error(e.error);return}else e.warn&&(console.warn(e.warn),ac.warn(e.warn));let t;Kd.readdir(cY.join(qhe,"bin"),r=>{if(r)return ac.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let n;eS||(n=lY.buildRequest(),n.operation&&(t=br.OPERATION));let s;switch(t){case br.OPERATION:ac.trace("calling cli operations with:",n),lY.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(cY.join(i,fy.HDB_CONFIG_FILE))?process.env.ROOTPATH=i:process.env.RUN_HDB_APP=i),oc().main();break;case br.START:eS?cy()(!0).catch(S=>{console.log(S)}):s=oc().launch();break;case br.INSTALL:zV()().then(()=>oc().main(!0)).catch(m=>{console.error(m)});break;case br.REGISTER:ZV().register().then(m=>{console.log(m)}).catch(m=>{console.error(m)});break;case br.STOP:nY()().then(()=>{process.exit(0)}).catch(m=>{console.error(m)});break;case br.RESTART:No().restart({}).then().catch(m=>{ac.error(m),console.error(`There was an error restarting HarperDB. ${m}`),process.exit(1)});break;case br.VERSION:xhe.printVersion();break;case br.UPGRADE:ac.setLogLevel(fy.LOG_LEVELS.INFO),ey().upgrade(null).then(()=>{console.log("Your instance of HarperDB is up to date!")}).catch(m=>{ac.error(`Got an error during upgrade ${m}`)});break;case br.STATUS:aY()().then().catch(m=>{console.error(m)});break;case br.RENEWCERTS:let{generateKeys:E}=vm();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];(Ah(),ae(Rh)).copyDb(f,h);break;case void 0:eS?cy()().catch(S=>{console.log(S)}):oc().main();break;default:console.warn(`The "${t}" command is not understood.`);case br.HELP:console.log(`
104
+ Reindexing upgrade started for transaction logs`),Fi.notify("Reindexing upgrade started for transaction logs"),await bV(UN,!0,e)),Fi.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Cd?", but errors occurred":"")}a(hde,"reindexUpgrade");async function bV(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(Mm,{recursive:!0})}catch{}}a(bV,"processTables");async function pde(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=ki.join(Mm,s);await Xs.ensureDir(Mm),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(g){if(g.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(g);return}throw g}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 g of c.getRange({start:!1}))g.value=Object.assign({},g.value),E.push(g),n||e==="system"&&(t==="hdb_schema"&&(g.key=g.key.toString(),g.value.name=g.value.name.toString()),t==="hdb_table"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.name=g.value.name.toString()),t==="hdb_attribute"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.table=g.value.table.toString(),g.value.attribute=g.value.attribute.toString())),E.length>mde&&await f();await f()}catch(g){throw Cd=!0,Ar.error(g),g}async function f(){let g,N=E.map(({value:P})=>P);n?g=await Promise.all(N.map(P=>Tde(d,P))):g=await cde(d,o,l.filter(P=>P!=="__blob__"),N,!1);for(let P=0,v=E.length;P<v;P++){let{key:q,value:U}=E[P];Ar.info(`Record hash value: ${q} hash: ${o}`);let W;n?W=g[P]:W=g.written_hashes.indexOf(q)>-1,wd(W,!0),gde(d,o,U[o],n),Ar.info(`Insert success, written hashes: ${g.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 g=ki.join(r,t),N=ki.join(g,"data.mdb"),A=ki.join(g,"lock.mdb");await Xs.unlink(N),await Xs.unlink(A),await Xs.rmdir(g),Ar.info(`Deleted old environment files from schema folder: ${N}, ${A}`)}let S=await Nn.openEnvironment(r,t),T=Nn.statDBI(S,o);Ar.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify(T)}`),wd.deepStrictEqual(T.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[_];NV(e,c,d,r)}else NV(e,c,l,r)}a(gde,"validateIndices");function NV(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(NV,"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 vm=R((GIe,CV)=>{"use strict";var Ade=require("mkcert"),Um=require("path"),vN=require("fs-extra"),BN=k(),Ode=X(),HN=D(),Bl=MT(),bde=to(),Nde=Et();CV.exports={generateKeys:yde,updateConfigCert:wV};async function yde(){let e=Ode.getHdbBasePath(),t=Um.join(e,HN.LICENSE_KEY_DIR_NAME),r=await Ade.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:3650,caKey:Bl.CERTIFICATE_VALUES.key,caCert:Bl.CERTIFICATE_VALUES.cert}),n=Um.join(t,Bl.CERTIFICATE_PEM_NAME),s=Um.join(t,Bl.PRIVATEKEY_PEM_NAME),i=Um.join(t,Bl.CA_PEM_NAME);try{await vN.writeFile(n,r.cert)}catch(o){throw BN.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await vN.writeFile(s,r.key)}catch(o){throw BN.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await vN.writeFile(i,Bl.CERTIFICATE_VALUES.cert)}catch(o){throw BN.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}wV(n,s,i)}a(yde,"generateKeys");function wV(e,t,r){let n=bde(Object.keys(HN.CONFIG_PARAM_MAP),!0),s=HN.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(wV,"updateConfigCert")});var UV=R((kIe,MV)=>{"use strict";var Bm=require("path"),Fo=require("fs-extra"),Ide=PN(),Za=k(),LV=Et(),xN=X(),Os=D(),Hm=Y(),wde=require("properties-reader"),Cde=as(),Lde=GE(),Dde=ur(),FIe=require("util"),Pde=Dde.searchByValue,Mde=Pr(),Ude=oh(),vde=Ze(),Bde=IV(),DV=vm(),Hde=Lm(),Pd=new Ide("4.0.0"),PV=[],Ld,Dd;async function xde(){try{if(await Hde.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Ld){let t=Hm.changeExtension(Ld,".bak");await Fo.move(Ld,t)}if(Dd){let t=Hm.changeExtension(Dd,".bak");await Fo.move(Dd,t)}await DV.generateKeys()}else console.log("Using existing certificates."),DV.updateConfigCert(Ld,Dd,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(Hm.isEmptyOrZeroLength(n))return;let s=new Lde(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=xN.get(Os.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(Bm.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=Bm.dirname(e),n=xN.get(Os.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=Bm.join(n,"backup","4_0_0_upgrade_settings.bak"),i=Bm.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=LV.initOldConfig(e);Ld=d[Os.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],Dd=d[Os.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],LV.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=Hm.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}
105
+ 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{xN.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);PV.push(Pd);MV.exports=PV});var GN=R(($Ie,xV)=>{"use strict";var ec=Y(),Fde=D(),vV=k(),{DATA_VERSION:kde,UPGRADE_VERSION:Vde}=Fde.UPGRADE_JSON_FIELD_NAMES_ENUM,BV=AV(),xm=UV(),tc=new Map;BV&&BV.forEach(e=>{tc.set(e.version,e)});xm&&xm.forEach(e=>{tc.set(e.version,e)});xm&&xm.forEach(e=>{tc.set(e.version,e)});function $de(){return[...tc.keys()].sort(ec.compareVersions)}a($de,"getSortedVersions");function HV(e){let t=e[kde],r=e[Vde];return ec.isEmptyOrZeroLength(t)||ec.isEmptyOrZeroLength(r)?(vV.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),vV.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(HV,"getVersionsForUpgrade");function Yde(e){return HV(e).length>0}a(Yde,"hasUpgradesRequired");function Kde(e){return ec.isEmptyOrZeroLength(e)?null:tc.has(e)?tc.get(e):null}a(Kde,"getDirectiveByVersion");xV.exports={getSortedVersions:$de,getDirectiveByVersion:Kde,getVersionsForUpgrade:HV,hasUpgradesRequired:Yde}});var Md=R((KIe,VV)=>{"use strict";var Wde=require("util"),qN=require("chalk"),Qde=require("os"),qV=Pr(),jde=ur(),yn=D(),FV=uV(),kN=wT(),{UpgradeObject:GV}=fV(),{forceDowngradePrompt:zde}=Lm(),Jde=gi(),Gm=k(),Hl=Y(),VN=Bn(),Xde=(Re(),ae($e)),Zde=GN(),efe=Wde.promisify(VN.setSchemaDataToGlobal),tfe=jde.searchByValue,rfe="info_id",nfe="2.9.9",sfe="3.0.0";async function ife(e){let t=new FV.HdbInfoInsertObject(1,e,e),r=new kN.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 VN.setSchemaDataToGlobal(),qV.insert(r)}a(ife,"insertHdbInstallInfo");async function FN(e){let t,r=await kV(),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 FV.HdbInfoInsertObject(i,e,e);let o=new kN.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(),qV.insert(o)}a(FN,"insertHdbUpgradeInfo");async function kV(){let e=new kN.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(kV,"getAllHdbInfoRecords");async function ofe(){let e=await kV();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(){Gm.info("Checking if HDB software has been updated");try{let e=Jde.version(),t=await ofe(),r;if(Hl.isEmpty(t))r=nfe;else if(r=t.data_version_num,Hl.compareVersions(r.toString(),e.toString())>0){if(!Hl.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(qN.yellow(`This instance's data was last run on version ${r}`)),console.error(qN.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.");Hl.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(qN.yellow(`This instance's data was last run on version ${r}`)),await zde(new GV(r,e))?await FN(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(VN.setSchemaDataToGlobal(),cfe(r),e.toString()===r.toString())return;let n=new GV(r,e);if(Zde.hasUpgradesRequired(n))return n;Hl.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await FN(n.upgrade_version),Gm.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw Gm.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Gm.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(!Hl.isEmpty(e)&&e<sfe)throw console.log(t),new Error(t)}a(cfe,"checkIfInstallIsSupported");VV.exports={insertHdbInstallInfo:ife,insertHdbUpgradeInfo:FN,getVersionUpdateInfo:afe}});var QV=R((QIe,WV)=>{"use strict";var $N=require("joi"),{boolean:lfe,string:$V,number:ufe}=$N.types(),YV=require("fs-extra"),Ud=D(),KV=require("path"),_fe=nt();WV.exports=dfe;function dfe(e){let t=$V.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=$N.object({[Ud.INSTALL_PROMPTS.ROOTPATH]:$N.custom(ffe),[Ud.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:ufe.min(0).allow("null",null),[Ud.INSTALL_PROMPTS.TC_AGREEMENT]:$V.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(YV.existsSync(KV.join(e,"system/hdb_user/data.mdb"))||YV.existsSync(KV.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(ffe,"validateRootAvailable")});var WN=R((zIe,jV)=>{"use strict";var{mkdirpSync:Efe}=require("fs-extra"),Zs=require("path"),xl=D(),KN=k(),hfe=Hn(),YN=_i(),pfe=Je();jV.exports=mfe;async function mfe(e){KN.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",xl.LICENSE_FILE_NAME)),bs(Zs.join(e,"log")),bs(Zs.join(e,"doc")),bs(Zs.join(e,"database")),bs(Zs.join(e,xl.TRANSACTIONS_DIR_NAME)),bs(Zs.join(e,"clustering","leaf")),bs(Zs.join(e,"components")),await Sfe()}a(mfe,"mountHdb");async function Sfe(){let e=Hu(),t=Object.keys(YN);for(let r=0;r<t.length;r++){let n=t[r],s=YN[n].hash_attribute;try{pfe.initSystemSchemaPaths(xl.SYSTEM_SCHEMA_NAME,n);let i=new e(xl.SYSTEM_SCHEMA_NAME,n,s);i.attributes=YN[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,await hfe.createTable(n,i)}catch(i){throw KN.error(`issue creating environment for ${xl.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(Sfe,"createLMDBTables");function bs(e){Efe(e,{mode:xl.HDB_FILE_PERMISSIONS}),KN.info(`Directory ${e} created`)}a(bs,"makeDirectory")});var Fm=R((XIe,a$)=>{"use strict";var jN=require("os"),ZV=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(),$o=X(),vd=Y(),qm=to(),e$=Md(),t$=gi(),ne=D(),Ofe=QV(),bfe=WN(),zN=Et(),Nfe=Ur(),yfe=BE(),Ife=yN(),wfe=Bn(),Cfe=require("util").promisify,Lfe=Cfe(wfe.setSchemaDataToGlobal),Dfe=vm(),Gl=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=jN.EOL,ko="",Mfe="yes",zV="Starting HarperDB install...",JV="HarperDB installation was successful.",XV="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Ufe="An out of date version of HarperDB is already installed.",QN="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=jN.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=qm([ne.INSTALL_PROMPTS.HDB_CONFIG]),ti,r$=!1,n$=!1;a$.exports={install:s$,updateConfigEnv:Zfe,setIgnoreExisting:eEe};s$.createSuperUser=o$;async function s$(){console.log(Or(Yo+zV+Yo)),Ut.notify(zV);let e;Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]&&(e=Vfe());let t=Yfe();Object.assign(t,e);let r=Ofe(t);if(r)throw r.message;await Kfe(),await Wfe(t);let n=await $fe(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&&(r$=!0),!Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]&&await Jn.pathExists(ri.join(ti,ne.HDB_CONFIG_FILE))&&(console.error(QN),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.");$o.setHdbBasePath(ti),await bfe(ti),await Qfe(),await jfe(n),Ut.initLogSettings(!0),await o$(n),await Jfe(n),await Dfe.generateKeys(),await Xfe(),Ife(),s.stop(),console.log(Or(Yo+JV+Yo)),Ut.notify(JV)}a(s$,"install");function Vfe(){let e=Afe.parseDocument(Jn.readFileSync(Ko[ne.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=zN.flattenConfig(e.toJSON());return t[ne.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[ne.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(Vfe,"getConfigFromFile");async function $fe(e){Ut.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Gl,when:Vo(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:Gl,when:Vo(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:Gl,when:Vo(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:Vo(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:Gl,when:Vo(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:Gl,when:Vo(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:Vo(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 ZV.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($fe,"installPrompts");function Vo(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(Vo,"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=qm(e),r=qm(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=zN.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&&!n$){if(Ut.trace(`Install found existing HDB config at:${e}`),await e$.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${t$.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(QN)),Ut.error(QN);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:Gl,when:Vo(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 ZV.prompt([r]);n[ne.INSTALL_PROMPTS.TC_AGREEMENT]&&n[ne.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Mfe&&(console.log(rc.yellow(XV)),Ut.error(XV),process.exit(0))}a(Wfe,"termsAgreement");async function Qfe(){let e=ri.join(ti,ne.HDB_CONFIG_FILE),t;try{t=jN.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
106
+ install_user = ${t}`,n=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}$o.setProperty(ne.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),$o.setProperty(ne.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),$o.setProperty($o.BOOT_PROPS_FILE_PATH,o)}}a(Qfe,"createBootPropertiesFile");async function jfe(e){Ut.trace("Creating HarperDB config file");let t=qm(Object.keys(ne.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]||zN.createConfigFile(t),$o.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($o.get($o.BOOT_PROPS_FILE_PATH),"../");t&&Jn.removeSync(t),ti&&(r$?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 i$(e,t){Ut.trace("Creating admin user"),await Lfe();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(i$,"createAdminUser");async function o$(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 i$(t,r),delete e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(o$,"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 i$({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=t$.version();if(e)await e$.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){n$=e}a(eEe,"setIgnoreExisting")});var u$=R((ewe,l$)=>{"use strict";var JN=Y(),In=k(),c$=GN();l$.exports={processDirectives:tEe};async function tEe(e){console.log("Starting upgrade process...");let t=c$.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=c$.getDirectiveByVersion(r);n&&t.push(n)}return t}a(sEe,"getUpgradeDirectivesToInstall")});var ey=R((rwe,p$)=>{"use strict";var km=X();km.initSync();var E$=require("chalk"),_$=require("fs-extra"),$i=k(),Vi=D(),d$=gi(),iEe=u$(),XN=Y(),h$=Md(),oEe=Lm(),f$=SS(),aEe=Bn(),cEe=require("util").promisify,lEe=cEe(aEe.setSchemaDataToGlobal),ZN,{UPGRADE_VERSION:Vm}=Vi.UPGRADE_JSON_FIELD_NAMES_ENUM;p$.exports={upgrade:uEe};async function uEe(e){await lEe(),ZN===void 0&&(ZN=Yc()),_$.existsSync(km.get(km.BOOT_PROPS_FILE_PATH))||(Bd("The hdb_boot_properties file was not found. Please install HDB.",Vi.LOG_LEVELS.ERROR),process.exit(1)),_$.existsSync(km.get(Vi.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(Bd("The hdb settings file was not found. Please make sure HDB is installed.",Vi.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await h$.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),Bd(`This version of HarperDB is ${d$.version()}`,Vi.LOG_LEVELS.INFO);let r=t[Vm]?t[Vm]:d$.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Vi.HDB_SUPPORT_ADDRESS}`),$i.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){$i.error("There was an error when prompting user about upgrade."),$i.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),$i.info(`Starting upgrade to version ${r}`),await dEe(t),Bd(`HarperDB was successfully upgraded to version ${t[Vm]}`,Vi.LOG_LEVELS.INFO)}a(uEe,"upgrade");async function _Ee(){let e=!1,t=await f$.findPs(Vi.HDB_PROC_NAME);if(XN.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await f$.findPs("hdb_express");XN.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await ZN.list();XN.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(E$.red(r)),$i.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.",Vi.LOG_LEVELS.ERROR),t}try{await h$.insertHdbUpgradeInfo(e[Vm])}catch(t){$i.error("Error updating the 'hdb_info' system table."),$i.error(t)}}a(dEe,"runUpgrade");function Bd(e,t=void 0){t||(t=$i.info),$i[t](e),console.log(E$.magenta(e))}a(Bd,"printToLogAndConsole")});var R$=R((swe,g$)=>{"use strict";var{promises:ry,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}=D(),{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",ty,S$;g$.exports=T$;REe(e=>{e.type===gEe.RESTART&&(sc.initSync(!0),clearInterval(S$),sc.get(Hd.LOGGING_ROTATION_ENABLED)&&T$())});async function T$(){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}ty=Date.now()/6e4,nc.trace("Log rotate enabled, maxSize:",t,"interval:",r),S$=setInterval(async()=>{if(s){let o;o=await ry.stat(e),o.size>=s&&await m$(e,n)}i&&Date.now()/6e4-ty>=i&&(await m$(e,n),ty=Date.now()/6e4)},AEe).unref()}catch(e){nc.error(e)}}a(T$,"logRotator");async function m$(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 ry.unlink(e)):await ry.rename(e,n),nc.closeLogFile(),nc.notify(`hdb.log rotated, old log moved to ${n}`)}a(m$,"moveLogFile")});var ic=R((Ewe,C$)=>{"use strict";var Xr=X();Xr.initSync();var owe=bo(),bt=D(),si=k(),Yi=require("fs-extra"),Wo=require("path"),NEe=require("systeminformation"),yEe=yN(),{install:IEe}=Fm(),ny=require("chalk"),wEe=ma(),Ki=Y(),O$=Et(),b$=to(),A$=fh(),CEe=ey(),LEe=R$(),{compactOnStart:DEe}=(Ah(),ae(Rh)),PEe=require("minimist"),{PACKAGE_ROOT:MEe}=D(),{startHTTPThreads:UEe,startSocketServer:awe,mostIdleRouting:cwe,remoteAffinityRouting:lwe}=(wb(),ae(eF)),vEe=Md(),{isMainThread:BEe}=require("worker_threads"),uwe=_i(),_we=oo(),dwe=Og(),fwe=Hu(),$m=D(),ni,ql,N$=!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(!N$){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 y$(e=!1,t=!1){if(console.log(ny.magenta("Starting HarperDB...")),await w$()===!1){console.log(GEe);try{await IEe()}catch(o){console.error(qEe,o),si.error(o),process.exit(1)}}if(!e){let o=b$(Object.keys(bt.CONFIG_PARAM_MAP),!0);!Ki.isEmpty(o)&&!Ki.isEmptyOrZeroLength(Object.keys(o))&&O$.updateConfigValue(void 0,void 0,o,!0,!0)}let r,n=ql?.service==="clustering";ql?.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 A$.generateNatsConfig(),await ni.startClusteringProcesses(!0),process.exit()),kEe(),await Yi.writeFile(Wo.join(Xr.get($m.CONFIG_PARAMS.ROOTPATH),$m.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 A$.generateNatsConfig(t)}a(y$,"initialize");async function VEe(e=!1){try{ql=PEe(process.argv),ql.ROOTPATH&&O$.updateConfigObject("settings_path",Wo.join(ql.ROOTPATH,bt.HDB_CONFIG_FILE)),await y$(e,!0),Xr.get(bt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await DEe();let t=process.env.IS_SCRIPTED_SERVICE&&!ql.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($m.CONFIG_PARAMS.THREADS_COUNT)??Xr.get($m.CONFIG_PARAMS.THREADS)),Xr.get(bt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await LEe(),t||I$()}catch(t){console.error(t),si.error(t),process.exit(1)}}a(VEe,"main");function I$(){si.suppressLogging(()=>{console.log(ny.magenta(""+Yi.readFileSync(Wo.join(MEe,"utility/install/ascii_logo.txt")))),console.log(ny.magenta(`|------------- HarperDB ${wEe.version} successfully started ------------|`))}),si.notify(FEe)}a(I$,"started");async function $Ee(e=!0){N$=!e;try{ni===void 0&&(ni=Yc()),ni.enterPM2Mode(),await y$(),Ki.autoCastBoolean(Xr.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await ni.startClusteringProcesses(),await ni.startService(bt.PROCESS_DESCRIPTORS.HDB),I$(),e&&process.exit(0)}catch(t){console.error(t),si.error(t),process.exit(1)}}a($Ee,"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}=b$(["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");C$.exports={launch:$Ee,main:VEe,isHdbInstalled:w$};async function w$(){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(w$,"isHdbInstalled")});var cy=R((pwe,K$)=>{"use strict";var L$=require("os"),Wm=require("https"),D$=require("http"),Yt=require("fs-extra"),P$=require("yaml"),KEe=require("human-readable-ids").hri,{pipeline:M$}=require("stream/promises"),{createWriteStream:Qm,ensureDir:jm}=require("fs-extra"),{join:Cn}=require("path"),q$=require("lodash"),WEe=require("minimist"),kd=require("path"),QEe=require("properties-reader"),Ns=X(),jEe=Ti(),F$=k(),sy=Et(),{restart:zEe}=bo(),zm=Y(),JEe=to(),U$=gt(),XEe=Bn(),{main:k$,launch:ZEe}=ic(),{install:ehe,updateConfigEnv:the,setIgnoreExisting:oy}=Fm(),V$=WN(),Zr=D(),rhe=gi(),nhe=Md(),{SYSTEM_TABLE_NAMES:v$,SYSTEM_SCHEMA_NAME:she,CONFIG_PARAMS:xd,OPERATIONS_ENUM:Ln}=Zr,ihe=1e4,ohe="clone-node-config.yaml",ay=[v$.ROLE_TABLE_NAME,v$.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],B$=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",$$=(ji[lr.HDB_CLONE_OVERTOP]??process.env[lr.HDB_CLONE_OVERTOP])==="true",H$=ji[lr.CLUSTERING_NODENAME]??process.env[lr.CLUSTERING_NODENAME],lhe=ji[xd.CLONED.toUpperCase()]??process.env[xd.CLONED.toUpperCase()],iy,en,Qi={},x$,Wi,ii={},ut,Fl,vt,wn,ys,kl=!1,Xm=!1;K$.exports=a(async function(t=!1){if(console.info(`Starting clone node form leader node: ${Fd}`),delete process.env.HDB_LEADER_URL,vt=zm.getEnvCliRootPath(),!vt)try{let s=Cn(L$.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`),kl=!0):(console.log("No HarperDB install found, starting fresh clone"),kl=!0),vt||(vt=Cn(L$.homedir(),Zr.HDB_ROOT_DIR_NAME),console.log("Using default root path",vt));let r;try{r=Cn(vt,ohe),en=P$.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{x$=P$.parseDocument(await Yt.readFile(n,"utf8"),{simpleKeys:!0}).toJSON(),Qi=sy.flattenConfig(x$)}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(),k$();H$?Fl=H$:Qi[Zr.CONFIG_PARAMS.CLUSTERING_NODENAME.toLowerCase()]?Fl=Qi[Zr.CONFIG_PARAMS.CLUSTERING_NODENAME.toLowerCase()]:Fl=en?.clustering?.nodeName??KEe.random(),await uhe(),Ns.setCloneVar(!1),Ns.setHdbBasePath(vt),Yt.ensureDir(Ns.get(Zr.CONFIG_PARAMS.LOGGING_ROOT)),F$.initLogSettings(),await _he(),Xm||await dhe(),await hhe(t),iy&&Km&&await phe(),console.info(`
107
+ Successfully cloned node: `+Fd),t&&process.exit()},"cloneNode");async function uhe(){console.info("Cloning configuration"),Wi=await Jm({operation:Ln.GET_CONFIGURATION}),Wi=await JSON.parse(Wi.body),iy=Wi?.clustering?.enabled,ii=sy.flattenConfig(Wi);let e=Wi?.clustering?.hubServer?.cluster?.network?.port,t=en?.componentConfig?.exclude,r={cloned:!0,clustering_nodename:Fl,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),sy.createConfigFile(r,!0),Ns.initSync(!0),iy&&Km&&B$){let s={host:B$,port:Ns.get(xd.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT)};console.log("Setting clustering route on leader:",s),await Jm({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)),oy(!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(kl||!await Yt.exists(t)||$$){console.info("Cloning system database"),await jm(e);let r=Qm(t,{overwrite:!0}),n={operation:Ln.GET_BACKUP,database:"system",tables:ay},s=await G$(n,r);await Yt.utimes(t,Date.now(),new Date(s.date)),kl||(await V$(vt),await Y$(),oy(!0))}else Xm=!0,console.log("Not cloning system database due to it already existing on clone");ut=await Jm({operation:Ln.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(q$.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:Ln.GET_BACKUP,database:r,tables:n}):(console.info(`Cloning database: ${r}`),i={operation:Ln.GET_BACKUP,database:r});let o=oi(r);await jm(o);let c=Cn(o,r+".mdb"),l=Qm(c,{overwrite:!0}),_=await G$(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(kl||!await Yt.exists(t)||$$){console.info("Cloning system database using fetch");let r={operation:Ln.GET_BACKUP,database:"system",tables:ay},n=await Ym(r,!0),s=oi("system");await jm(s);let i=Cn(s,"system.mdb");await M$(n.body,Qm(i,{overwrite:!0})),await Yt.utimes(i,Date.now(),new Date(n.headers.get("date"))),kl||(await V$(vt),await Y$(),oy(!0))}else Xm=!0,console.log("Not cloning system database due to it already existing on clone");ut=await Ym({operation:Ln.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(q$.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 Ym({operation:Ln.GET_BACKUP,database:r,tables:n},!0)):(console.info(`Cloning database: ${r}`),i=await Ym({operation:Ln.GET_BACKUP,database:r},!0));let o=oi(r);await jm(o);let c=new Date(i.headers.get("date")),l=Cn(o,`${c.getTime()}-${r}.mdb`);await M$(i.body,Qm(l,{overwrite:!0}));let _=Cn(o,r+".mdb");await Yt.rename(l,_),await Yt.utimes(_,Date.now(),c)}}a(Ehe,"cloneTablesFetch");async function Ym(e,t=!1){let r=en?.httpsRejectUnauthorized??!1,n=new Wm.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(Ym,"leaderHttpReqFetch");async function hhe(e){let t=await jEe.getHDBProcessInfo();t.clustering.length===0||t.core.length===0?e?await ZEe(!1):await k$():(console.info(await zEe({operation:Ln.RESTART})),await zm.async_set_timeout(ihe)),e&&await zm.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=__(),n=await Jm({operation:Ln.CLUSTER_STATUS});n=await JSON.parse(n.body);let s=[];if(!Xm){let l=await Yt.stat(Cn(oi("system"),"system.mdb"));for(let _ of ay)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 U$.createTableStreams(s),F$.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;Fl=Ns.get(Zr.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let d of n.connections){if(d.node_name===Fl)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:Ln.CONFIGURE_CLUSTER,connections:_}),console.info(JSON.stringify(c)))}!c&&s.length>0&&await r({operation:Ln.ADD_NODE,node_name:Wi?.clustering?.nodeName,subscriptions:s},!0),await U$.closeConnection()}a(phe,"clusterTables");async function Jm(e){let t=new Wm.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 zm.httpRequest(i,e)}a(Jm,"leaderHttpReq");async function G$(e,t){let r=new Wm.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,D$=Wm),i.port&&(o.port=i.port),new Promise((c,l)=>{let _=D$.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(G$,"leaderHttpStream");async function Y$(){let e=rhe.version();if(e)await nhe.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(Y$,"insertHdbVersionInfo")});var Q$=R((Swe,W$)=>{var mhe=Fm(),She=k();W$.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 J$=R((gwe,z$)=>{"use strict";var ghe=ch(),Rhe=k(),j$="Registration failed.";async function Ahe(){let e;try{e=await ghe.register()}catch(t){return Rhe.error(`Registration error ${t}`),j$}return e||j$}a(Ahe,"register");z$.exports={register:Ahe}});var t1=R((Awe,e1)=>{"use strict";var Ohe=k(),bhe=D(),Nhe=require("util"),yhe=require("child_process"),X$=Nhe.promisify(yhe.exec),Ihe=Ti(),Vd=Yc(),Z$="Stopping HarperDB.";e1.exports=whe;async function whe(){if(console.log(Z$),Ohe.notify(Z$),await Vd.isServiceRegistered(bhe.HDB_PROC_DESCRIPTOR)){Vd.enterPM2Mode();let r=await Vd.getUniqueServicesList();for(let n in r)await Vd.stop(n)}await Vd.kill();let t=await Ihe.getHDBProcessInfo();t.clustering.forEach(r=>{X$(`kill ${r.pid}`)}),t.core.forEach(r=>{X$(`kill ${r.pid}`)})}a(whe,"stop")});var i1=R((bwe,s1)=>{"use strict";var uy=require("fs-extra"),_y=require("path"),ly=require("yaml"),$d=gt(),Yd=D(),r1=Ze(),dy=k(),Che=Ur(),Lhe=sh(),Dhe=rh(),Phe=Ti(),n1=X(),{isHdbInstalled:Mhe}=ic();n1.initSync();var Xn={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},tn={LEAF:"leaf server",HUB:"hub server"},Zm;s1.exports=Uhe;async function Uhe(){let e={harperdb:{status:Xn.STOPPED}};if(!await Mhe()){e.harperdb.status=Xn.NOT_INSTALLED,console.log(ly.stringify(e));return}Zm=n1.get(Yd.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await uy.readFile(_y.join(Zm,Yd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Yd.NODE_ERROR_CODES.ENOENT){dy.info("`harperdb status` did not find a hdb.pid file"),e.harperdb.status=Xn.STOPPED,console.log(ly.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 Lhe({});for(let o of s.nodes){let c={};for(let l in o)c[l.replace("_"," ")]=o[l];n.push(c)}e.clustering.network=n;let i=await Dhe.clusterStatus();e.clustering.replication={"node name":i.node_name,"is enabled":i.is_enabled,connections:[]};for(let o of i.connections){let c={};c["node name"]=o?.node_name,c.status=o?.status,c.ports={clustering:o?.ports?.clustering,"operations api":o?.ports?.operations_api},c["latency ms"]=o?.latency_ms,c.uptime=o?.uptime,c.subscriptions=o?.subscriptions,c["system info"]={"hdb version":o?.system_info?.hdb_version,"node version":o?.system_info?.node_version,platform:o?.system_info?.platform},e.clustering.replication.connections.push(c)}await $d.closeConnection()}console.log(ly.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}=$d.getServerConfig(Yd.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:n,decrypt_hash:s}=await Che.getClusterUser();try{(await $d.createConnection(r,n,s,!1)).close(),t[tn.HUB].status=Xn.RUNNING}catch{t[tn.HUB].status=Xn.ERRORED}let{port:i}=$d.getServerConfig(Yd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await $d.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 uy.readFile(_y.join(Zm,"clustering",r1.PID_FILES.HUB),"utf8"))}catch(o){dy.error(o),t[tn.HUB].pid=void 0}try{t[tn.LEAF].pid=Number.parseInt(await uy.readFile(_y.join(Zm,"clustering",r1.PID_FILES.LEAF),"utf8"))}catch(o){dy.error(o),t[tn.LEAF].pid=void 0}return t}a(vhe,"getHubLeafStatus")});var eS=process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL");eS&&X().setCloneVar(!0);var Kd=require("fs"),o1=require("path"),oc=k(),a1=sV(),Bhe=gi(),Hhe=aV(),fy=D(),{SERVICE_ACTIONS_ENUM:br,PACKAGE_ROOT:xhe}=fy;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(o1.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;eS||(n=a1.buildRequest(),n.operation&&(t=br.OPERATION));let s;switch(t){case br.OPERATION:oc.trace("calling cli operations with:",n),a1.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(o1.join(i,fy.HDB_CONFIG_FILE))?process.env.ROOTPATH=i:process.env.RUN_HDB_APP=i),ic().main();break;case br.START:eS?cy()(!0).catch(S=>{console.log(S)}):s=ic().launch();break;case br.INSTALL:Q$()().then(()=>ic().main(!0)).catch(m=>{console.error(m)});break;case br.REGISTER:J$().register().then(m=>{console.log(m)}).catch(m=>{console.error(m)});break;case br.STOP:t1()().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(fy.LOG_LEVELS.INFO),ey().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:i1()().then().catch(m=>{console.error(m)});break;case br.RENEWCERTS:let{generateKeys:E}=vm();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];(Ah(),ae(Rh)).copyDb(f,h);break;case void 0:eS?cy()().catch(S=>{console.log(S)}):ic().main();break;default:console.warn(`The "${t}" command is not understood.`);case br.HELP:console.log(`
110
108
  Usage: harperdb [command]
111
109
 
112
110
  With no command, harperdb will simply run HarperDB (in the foreground)
@@ -123,4 +121,4 @@ Commands:
123
121
  upgrade - Upgrade harperdb
124
122
  renew-certs - Generate a new set of self-signed certificates
125
123
  status - Print the status of HarperDB and clustering
126
- <api-operation> <parameter>=<value> - Run an API operation and return result to the CLI, not all operations are supported`)}})}a(Fhe,"harperDBService");
124
+ <api-operation> <parameter>=<value> - Run an API operation and return result to the CLI, not all operations are supported`)}})}a(Ghe,"harperDBService");