harperdb 4.3.0-beta.7 → 4.3.0-beta.8

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,107 +1,107 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var cV=Object.create;var wl=Object.defineProperty;var lV=Object.getOwnPropertyDescriptor;var uV=Object.getOwnPropertyNames;var _V=Object.getPrototypeOf,dV=Object.prototype.hasOwnProperty;var a=(e,t)=>wl(e,"name",{value:t,configurable:!0});var Oe=(e,t)=>()=>(e&&(t=e(e=0)),t);var g=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),$e=(e,t)=>{for(var r in t)wl(e,r,{get:t[r],enumerable:!0})},Fb=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of uV(t))!dV.call(e,s)&&s!==r&&wl(e,s,{get:()=>t[s],enumerable:!(n=lV(t,s))||n.enumerable});return e};var q=(e,t,r)=>(r=e!=null?cV(_V(e)):{},Fb(t||!e||!e.__esModule?wl(r,"default",{value:e,enumerable:!0}):r,e)),ie=e=>Fb(wl({},"__esModule",{value:!0}),e);var Vb=g((HEe,$b)=>{var fV=require("fast-glob"),{statSync:bm,existsSync:ym,readFileSync:EV,writeFileSync:hV}=require("fs"),{spawnSync:pV,spawn:mV,execFileSync:BEe}=require("child_process"),{isMainThread:SV}=require("worker_threads"),{join:xi,relative:kb}=require("path"),{PACKAGE_ROOT:Yn}=C(),{tmpdir:TV,platform:gV}=require("os");require("source-map-support").install();var RV=["resources","server","dataLayer","components"],Cl="ts-build",Im,AV=__filename.endsWith("tsBuild.js");if(AV){if(SV){let r;try{bm(xi(Yn,Cl)),r=!0}catch{}if(r)for(let n of fV.sync(RV.map(s=>s+"/**/*.ts"),{cwd:Yn})){let s=0,i=0;try{s=bm(xi(Yn,n)).mtimeMs-5e3,i=bm(xi(Yn,Cl,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."),Im=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),Im=!0;if(Im){let n=xi(Yn,"node_modules/.bin/tsc");gV()==="win32"&&(n+=".cmd");let s=pV(n,{cwd:Yn});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=xi(TV(),"harperdb-tsc.pid"),o;if(ym(i))try{process.kill(+EV(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=mV(n,["--watch"],{cwd:Yn,detached:!0,stdio:"ignore"});hV(i,c.pid.toString()),c.unref()}}}}let e=$b.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(Yn)&&!n[0].includes("node_modules")){let i=kb(Yn,n[0]),o;i.startsWith(Cl)?o=xi(Yn,kb(Cl,i)):o=xi(Yn,Cl,i);let c=xi(o,r),l=c+".js";if(ym(l))return l;if(c.includes(".")&&ym(c))return c}return t(r,n,s)}}});var C=g((GEe,sy)=>{"use strict";var An=require("path"),OV=require("fs"),{relative:qEe,join:xEe}=An,{existsSync:NV}=OV;function bV(){let e=__dirname;for(;!NV(An.join(e,"package.json"));){let t=An.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(bV,"getHDBPackageRoot");var Gi=bV(),Yb="js",wd=Yb,yV="harperdb-config.yaml",IV="defaultConfig.yaml",wV="hdb",Kb=`harperdb.${wd}`,Wb=`customFunctionsServer.${wd}`,CV=`restartHdb.${wd}`,Cm="HarperDB",Id="Custom Functions",Cd="Clustering Hub",Ld="Clustering Leaf",LV="Clustering Ingest Service",DV="Clustering Reply Service",PV="foreground.pid",MV="hdb.pid",UV="data",vV={HDB:Cm,CLUSTERING_HUB:Cd,CLUSTERING_LEAF:Ld,CLUSTERING_INGEST_SERVICE:LV,CLUSTERING_REPLY_SERVICE:DV,CUSTOM_FUNCTIONS:Id,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"},BV={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},HV={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},qV={harperdb:Cm,"clustering hub":Cd,"clustering leaf":Ld,"custom functions":Id,custom_functions:Id,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},xV={CLUSTERING_HUB_PROC_DESCRIPTOR:Cd,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ld},wm={HDB:An.join(Gi,"server/harperdb"),CUSTOM_FUNCTIONS:An.join(Gi,"server/customFunctions"),CLUSTERING_HUB:An.join(Gi,"server/nats"),CLUSTERING_LEAF:An.join(Gi,"server/nats")},GV={HDB:An.join(wm.HDB,Kb),CUSTOM_FUNCTIONS:An.join(wm.CUSTOM_FUNCTIONS,Wb)},FV={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:An.join(Gi,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:An.join(Gi,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:An.join(Gi,"launchServiceScripts/launchUpdateNodes4-0-0.js")},kV={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Qb="support@harperdb.io",$V="customer-success@harperdb.io",jb=1,VV=4141,zb="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",YV="https://www.harperdb.io/product",KV=`For support, please submit a request at ${zb} or contact ${Qb}`,Jb=`For license support, please contact ${$V}`,WV="None of the specified records were found.",QV="hash attribute not found",jV=`Your current license only supports ${jb} role. ${Jb}`,zV="Your current license only supports 3 connections to a node.",JV="127.0.0.1",XV=1,ZV=/^\.$/,eY=/^\.\.$/,tY="U+002E",rY=/\//g,nY="U+002F",sY=/U\+002F/g,iY=/^U\+002E$/,oY=/^U\+002EU\+002E$/,aY="d",cY=999999,lY="*",uY="--max-old-space-size=",_Y="system",dY="__hdb_hash",fY=".harperdb",EY=".hdb",hY="keys",pY="hdb_boot_properties.file",mY=".updateConfig.json",SY="SIGTSTP",TY=24,gY=6e4,RY=448,AY="blob",OY="trash",NY="database",bY="schema",yY="transactions",IY=".count",wY="id",CY="PROCESS_NAME",Xb={SETTINGS_PATH_KEY:"settings_path"},Zb=require("lodash"),LY={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"},DY={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},PY={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},MY={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"},UY={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"},Yr="hdb_internal:",vY={CREATE_SCHEMA:Yr+"create_schema",CREATE_TABLE:Yr+"create_table",CREATE_ATTRIBUTE:Yr+"create_attribute",ADD_USER:Yr+"add_user",ALTER_USER:Yr+"alter_user",DROP_USER:Yr+"drop_user",HDB_NODES:Yr+"hdb_nodes",HDB_USERS:Yr+"hdb_users",HDB_WORKERS:Yr+"hdb_workers",CATCHUP:Yr+"catchup",SCHEMA_CATCHUP:Yr+"schema_catchup",WORKER_ROOM:Yr+"cluster_workers"},BY={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"},HY="060493.ks",qY=".license",xY={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},Z={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup"},GY={CSV:".csv",JSON:".json"},FY={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},kY={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Ll={};Ll[Z.INSERT]=Z.INSERT;Ll[Z.UPDATE]=Z.UPDATE;Ll[Z.UPSERT]=Z.UPSERT;Ll[Z.DELETE]=Z.DELETE;var xe=Object.create(null);xe[Z.DESCRIBE_ALL]=Z.DESCRIBE_ALL;xe[Z.DESCRIBE_TABLE]=Z.DESCRIBE_TABLE;xe[Z.DESCRIBE_SCHEMA]=Z.DESCRIBE_SCHEMA;xe[Z.READ_LOG]=Z.READ_LOG;xe[Z.ADD_NODE]=Z.ADD_NODE;xe[Z.LIST_USERS]=Z.LIST_USERS;xe[Z.LIST_ROLES]=Z.LIST_ROLES;xe[Z.USER_INFO]=Z.USER_INFO;xe[Z.SQL]=Z.SQL;xe[Z.GET_JOB]=Z.GET_JOB;xe[Z.SEARCH_JOBS_BY_START_DATE]=Z.SEARCH_JOBS_BY_START_DATE;xe[Z.DELETE_FILES_BEFORE]=Z.DELETE_FILES_BEFORE;xe[Z.EXPORT_LOCAL]=Z.EXPORT_LOCAL;xe[Z.EXPORT_TO_S3]=Z.EXPORT_TO_S3;xe[Z.CLUSTER_STATUS]=Z.CLUSTER_STATUS;xe[Z.REMOVE_NODE]=Z.REMOVE_NODE;xe[Z.RESTART]=Z.RESTART;xe[Z.CUSTOM_FUNCTIONS_STATUS]=Z.CUSTOM_FUNCTIONS_STATUS;xe[Z.GET_CUSTOM_FUNCTIONS]=Z.GET_CUSTOM_FUNCTIONS;xe[Z.GET_CUSTOM_FUNCTION]=Z.GET_CUSTOM_FUNCTION;xe[Z.SET_CUSTOM_FUNCTION]=Z.SET_CUSTOM_FUNCTION;xe[Z.DROP_CUSTOM_FUNCTION]=Z.DROP_CUSTOM_FUNCTION;xe[Z.ADD_CUSTOM_FUNCTION_PROJECT]=Z.ADD_CUSTOM_FUNCTION_PROJECT;xe[Z.DROP_CUSTOM_FUNCTION_PROJECT]=Z.DROP_CUSTOM_FUNCTION_PROJECT;xe[Z.PACKAGE_CUSTOM_FUNCTION_PROJECT]=Z.PACKAGE_CUSTOM_FUNCTION_PROJECT;xe[Z.DEPLOY_CUSTOM_FUNCTION_PROJECT]=Z.DEPLOY_CUSTOM_FUNCTION_PROJECT;var $Y={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"},VY={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},ey={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"},YY=Zb.invert(ey),KY={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_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers"},ty={settings_path:Xb.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_maxmsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:w.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:w.CLUSTERING_NODENAME,clustering_tls_certificate:w.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:w.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:w.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:w.CLUSTERING_TLS_INSECURE,clustering_tls_verify:w.CLUSTERING_TLS_VERIFY,clustering_loglevel:w.CLUSTERING_LOGLEVEL,clustering_republishmessages:w.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:w.CLUSTERING_DATABASELEVEL,customfunctions_network_port:w.HTTP_PORT,customfunctions_tls_certificate:w.TLS_CERTIFICATE,customfunctions_network_cors:w.HTTP_CORS,customfunctions_network_corsaccesslist:w.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:w.HTTP_HEADERSTIMEOUT,customfunctions_network_https:w.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:w.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:w.HTTP_TIMEOUT,http_threads:w.THREADS_COUNT,threads:w.THREADS_COUNT,threads_count:w.THREADS_COUNT,threads_debug:w.THREADS_DEBUG,threads_debug_startingport:w.THREADS_DEBUG_STARTINGPORT,threads_debug_port:w.THREADS_DEBUG_PORT,threads_debug_host:w.THREADS_DEBUG_HOST,threads_debug_waitfordebugger:w.THREADS_DEBUG_WAITFORDEBUGGER,threads_maxheapmemory:w.THREADS_MAXHEAPMEMORY,http_session_affinity:w.HTTP_SESSIONAFFINITY,http_compressionthreshold:w.HTTP_COMPRESSIONTHRESHOLD,http_cors:w.HTTP_CORS,http_corsaccesslist:w.HTTP_CORSACCESSLIST,http_headerstimeout:w.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,http_timeout:w.HTTP_TIMEOUT,http_port:w.HTTP_PORT,http_secureport:w.HTTP_SECUREPORT,http_mtls:w.HTTP_MTLS,http_mtls_user:w.HTTP_MTLS_USER,http_mtls_required:w.HTTP_MTLS_REQUIRED,customfunctions_processes:w.THREADS_COUNT,customfunctions_root:w.COMPONENTSROOT,localstudio_enabled:w.LOCALSTUDIO_ENABLED,logging_file:w.LOGGING_FILE,logging_level:w.LOGGING_LEVEL,logging_root:w.LOGGING_ROOT,logging_rotation_enabled:w.LOGGING_ROTATION_ENABLED,logging_rotation_compress:w.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:w.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:w.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:w.LOGGING_ROTATION_PATH,logging_stdstreams:w.LOGGING_STDSTREAMS,logging_auditlog:w.LOGGING_AUDITLOG,logging_auditretention:w.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:w.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:w.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:w.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:w.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:w.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:w.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:w.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:w.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:w.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:w.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:w.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:w.ROOTPATH,databases:w.DATABASES,storage_path:w.STORAGE_PATH,ignorescripts:w.IGNORE_SCRIPTS,mqtt_network_port:w.MQTT_NETWORK_PORT,mqtt_websocket:w.MQTT_WEBSOCKET,mqtt_network_secureport:w.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:w.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:w.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:w.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:w.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:w.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:w.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:w.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:w.AUTHENTICATION_CACHETTL,authentication_enablesessions:w.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:w.COMPONENTSROOT,tls_certificate:w.TLS_CERTIFICATE,tls_privatekey:w.TLS_PRIVATEKEY,tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,tls_ciphers:w.TLS_CIPHERS};for(let e in w){let t=w[e];ty[t.toLowerCase()]=t}var WY={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},QY={csv_file_load:"csv_file_load",csv_data_load:Z.CSV_DATA_LOAD,csv_url_load:Z.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},jY={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"},zY={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},JY={VERSION_DEFAULT:"2.2.0"},XY={DEVELOPMENT:8192,DEFAULT:512},ZY={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"},e1={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"},t1={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},ry={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},r1=Symbol("metadata"),n1="__clustering__",s1=Object.values(ry),i1=15984864e5,ny={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},o1=Zb.invert(ny),a1={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"},c1=111,l1=`\r
3
- `,u1={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},_1=["*","%"],d1="unauthorized_access",f1="func_val",E1={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},h1={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},p1={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"},m1={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},S1={HTTP:"http"},T1={STOPPED:"stopped",ONLINE:"online"},g1="3.x.x",R1={SUCCESS:"success",FAILURE:"failure"},A1={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};sy.exports={LOCAL_HARPERDB_OPERATIONS:xe,HDB_SUPPORT_ADDRESS:Qb,HDB_SUPPORT_URL:zb,HDB_PRICING_URL:YV,SUPPORT_HELP_MSG:KV,LICENSE_HELP_MSG:Jb,HDB_PROC_NAME:Kb,HDB_PROC_DESCRIPTOR:Cm,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ld,CLUSTERING_HUB_PROC_DESCRIPTOR:Cd,SYSTEM_SCHEMA_NAME:_Y,HASH_FOLDER_NAME:dY,HDB_HOME_DIR_NAME:fY,UPDATE_FILE_NAME:mY,LICENSE_KEY_DIR_NAME:hY,BOOT_PROPS_FILE_NAME:pY,JOB_TYPE_ENUM:QY,JOB_STATUS_ENUM:xY,SYSTEM_TABLE_NAMES:MY,SYSTEM_TABLE_HASH_ATTRIBUTES:UY,OPERATIONS_ENUM:Z,VALID_S3_FILE_TYPES:GY,S3_BUCKET_AUTH_KEYS:FY,VALID_SQL_OPS_ENUM:kY,GEO_CONVERSION_ENUM:VY,HDB_SETTINGS_NAMES:ey,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:YY,SERVICE_ACTIONS_ENUM:$Y,CLUSTER_MESSAGE_TYPE_ENUM:jY,CLUSTER_CONNECTION_DIRECTION_ENUM:zY,CLUSTER_EVENTS_DEFS_ENUM:ZY,PERIOD_REGEX:ZV,DOUBLE_PERIOD_REGEX:eY,UNICODE_PERIOD:tY,FORWARD_SLASH_REGEX:rY,UNICODE_FORWARD_SLASH:nY,ESCAPED_FORWARD_SLASH_REGEX:sY,ESCAPED_PERIOD_REGEX:iY,ESCAPED_DOUBLE_PERIOD_REGEX:oY,REG_KEY_FILE_NAME:HY,RESTART_TIMEOUT_MS:gY,HDB_FILE_PERMISSIONS:RY,DATABASES_DIR_NAME:NY,LEGACY_DATABASES_DIR_NAME:bY,TRANSACTIONS_DIR_NAME:yY,LIMIT_COUNT_NAME:IY,ID_ATTRIBUTE_STRING:wY,INSERT_MODULE_ENUM:DY,UPGRADE_JSON_FIELD_NAMES_ENUM:PY,RESTART_CODE:SY,RESTART_CODE_NUM:TY,CLUSTER_OPERATIONS:Ll,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:BY,HDB_INTERNAL_SC_CHANNEL_PREFIX:Yr,INTERNAL_SC_CHANNELS:vY,CLUSTERING_MESSAGE_TYPES:a1,HDB_FILE_SUFFIX:EY,BLOB_FOLDER_NAME:AY,HDB_TRASH_DIR:OY,ORIGINATOR_SET_VALUE:c1,LICENSE_VALUES:JY,RAM_ALLOCATION_ENUM:XY,TIME_STAMP_NAMES_ENUM:ry,TIME_STAMP_NAMES:s1,PERMS_UPDATE_RELEASE_TIMESTAMP:i1,SEARCH_NOT_FOUND_MESSAGE:WV,SEARCH_ATTRIBUTE_NOT_FOUND:QV,LICENSE_ROLE_DENIED_RESPONSE:jV,LICENSE_MAX_CONNS_REACHED:zV,BASIC_LICENSE_MAX_NON_CU_ROLES:jb,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:VV,VALUE_SEARCH_COMPARATORS:ny,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:o1,LICENSE_FILE_NAME:qY,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:e1,NEW_LINE:l1,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:XV,MOMENT_DAYS_TAG:aY,API_TURNOVER_SEC:cY,LOOPBACK:JV,CODE_EXTENSION:wd,WILDCARD_SEARCH_VALUE:lY,NODE_ERROR_CODES:t1,JAVASCRIPT_EXTENSION:Yb,PERMS_CRUD_ENUM:u1,UNAUTHORIZED_PERMISSION_NAME:d1,SEARCH_WILDCARDS:_1,FUNC_VAL:f1,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:E1,JWT_ENUM:h1,CLUSTERING_FLAG:n1,ITC_EVENT_TYPES:p1,CUSTOM_FUNCTION_PROC_NAME:Wb,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Id,SERVICES:m1,THREAD_TYPES:S1,MEM_SETTING_KEY:uY,HDB_RESTART_SCRIPT:CV,PROCESS_DESCRIPTORS:vV,SERVICE_SERVERS:GV,SERVICE_SERVERS_CWD:wm,PROCESS_DESCRIPTORS_VALIDATE:qV,LAUNCH_SERVICE_SCRIPTS:FV,LOG_LEVELS:HV,PROCESS_NAME_ENV_PROP:CY,LOG_NAMES:BV,PM2_PROCESS_STATUSES:T1,CONFIG_PARAM_MAP:ty,CONFIG_PARAMS:w,HDB_CONFIG_FILE:yV,HDB_DEFAULT_CONFIG_FILE:IV,ROLE_TYPES_ENUM:kV,BOOT_PROP_PARAMS:Xb,INSTALL_PROMPTS:LY,HDB_ROOT_DIR_NAME:wV,CLUSTERING_PROCESSES:xV,FOREGROUND_PID_FILE:PV,PACKAGE_ROOT:Gi,PRE_4_0_0_VERSION:g1,DATABASES_PARAM_CONFIG:WY,METADATA_PROPERTY:r1,AUTH_AUDIT_STATUS:R1,AUTH_AUDIT_TYPES:A1,HDB_PID_FILE:MV,DEFAULT_DATABASE_NAME:UV,LEGACY_CONFIG_PARAMS:KY};Vb()});var vo=g((kEe,ay)=>{"use strict";var iy=require("minimist");ay.exports=O1;function O1(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=oy(process.env),n=oy(iy(process.argv))):(r=process.env,n=iy(process.argv));let s={};for(let i=0,o=e.length;i<o;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}a(O1,"assignCMDENVVariables");function oy(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(oy,"objKeysToLowerCase")});var G=g((VEe,Bm)=>{"use strict";var Bo=require("fs-extra"),{workerData:N1,threadId:b1}=require("worker_threads"),Xs=require("path"),uy=require("yaml"),_y=require("properties-reader"),Dt=C(),cy=vo(),y1=require("os"),{PACKAGE_ROOT:Dm}=C(),{_assignPackageExport:I1}=require("../index"),Pl={};for(let e in console)Pl[e]||(Pl[e]=console[e]);var fr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},dy={STDOUT:"stdOut",STDERR:"stdErr"},w1=Xs.join(Dm,"logs"),C1=Xs.join(Dm,"config/yaml/",Dt.HDB_DEFAULT_CONFIG_FILE),L1=1e4,Js,gs,dr,Dd,Pd,Ml,ec,Dl;Dl===void 0&&fy();Bm.exports={notify:py,fatal:my,error:Ul,warn:vm,info:Md,debug:Um,trace:Mm,setLogLevel:H1,log_level:dr,loggerWithTag:D1,suppressLogging:P1,initLogSettings:fy,setupConsoleLogging:Ey,logCustomLevel:v1,closeLogFile:Pm,getLogFilePath:()=>Ml,OUTPUTS:dy,AuthAuditLog:G1};I1("logger",Bm.exports);function fy(e=!1){try{if(Dl===void 0||e){Pm();let t=B1(),r=cy(["ROOTPATH"]);try{Dl=_y(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Bo.pathExistsSync(Xs.join(r.ROOTPATH,Dt.HDB_CONFIG_FILE)))throw n}({level:dr,config_log_path:Pd,to_file:Js,to_stream:gs}=q1(r.ROOTPATH?Xs.join(r.ROOTPATH,Dt.HDB_CONFIG_FILE):Dl.get("settings_path"))),Dd=Dt.LOG_NAMES.HDB,Ml=Xs.join(Pd,Dd)}}catch(t){if(Dl=void 0,t.code===Dt.NODE_ERROR_CODES.ENOENT){let r=cy(Object.keys(Dt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Dt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Dt.CONFIG_PARAMS.LOGGING_LEVEL){dr=l;continue}if(c===Dt.CONFIG_PARAMS.LOGGING_STDSTREAMS){gs=l;continue}c===Dt.CONFIG_PARAMS.LOGGING_FILE&&(Js=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=x1();Js=Js===void 0?s:Js,Js=ly(Js),gs=gs===void 0?i:gs,gs=ly(gs),dr=dr===void 0?n:dr,Pd=w1,Dd=Dt.LOG_NAMES.INSTALL,Ml=Xs.join(Pd,Dd);return}throw Ul("Error initializing log settings"),Ul(t),t}process.env.DEV_MODE&&(gs=!0),Ey()}a(fy,"initLogSettings");var Lm=!0;function Ey(){Za("error",Ul),Za("warn",vm),Za("log",Md),Za("info",Md),Za("debug",Um),Za("trace",Mm)}a(Ey,"setupConsoleLogging");function Za(e,t){console[e]=function(...r){if(Lm&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Pl[e](...r)}}a(Za,"logConsole");function D1(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(py),fatal:r(my),error:r(Ul),warn:r(vm),info:r(Md),debug:r(Um),trace:r(Mm)};function r(n){return function(...s){return n(t,...s)}}}a(D1,"loggerWithTag");function P1(e){try{Lm=!1,e()}finally{Lm=!0}}a(P1,"suppressLogging");var M1=N1?.name?.replace(/ /g,"-")||"main";function Zs(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||M1+"/"+b1);c<s;c++){let _=t[c];_ instanceof Error&&_.stack?n+=_.stack:typeof _=="object"?n+=JSON.stringify(_):n+=_,c<i&&(n+=" ")}return`${r} [${o.join("] [")}]: ${n}
4
- `}a(Zs,"createLogRecord");function vl(e){Js&&hy(e),gs&&process.stdout.write(e)}a(vl,"logStdOut");function Ud(e){Js&&hy(e),gs&&process.stderr.write(e)}a(Ud,"logStdErr");function hy(e){U1(),ec?Bo.appendFileSync(ec,e):Pl.log(e)}a(hy,"logToFile");function Pm(){try{Bo.closeSync(ec)}catch{}ec=null}a(Pm,"closeLogFile");function U1(){if(!ec){try{if(!Ml)debugger;ec=Bo.openSync(Ml,"a")}catch(e){Pl.error(e)}setTimeout(()=>{Pm()},L1).unref()}}a(U1,"openLogFile");function Md(...e){fr[dr]<=fr.info&&vl(Zs("info",e))}a(Md,"info");function Mm(...e){fr[dr]<=fr.trace&&vl(Zs("trace",e))}a(Mm,"trace");function Ul(...e){fr[dr]<=fr.error&&Ud(Zs("error",e))}a(Ul,"error");function Um(...e){fr[dr]<=fr.debug&&vl(Zs("debug",e))}a(Um,"debug");function py(...e){fr[dr]<=fr.notify&&vl(Zs("notify",e))}a(py,"notify");function my(...e){fr[dr]<=fr.fatal&&Ud(Zs("fatal",e))}a(my,"fatal");function vm(...e){fr[dr]<=fr.warn&&Ud(Zs("warn",e))}a(vm,"warn");function v1(e,t,...r){t===dy.STDERR?Ud(Zs(e,r)):vl(Zs(e,r))}a(v1,"logCustomLevel");function B1(){let e;try{e=y1.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Xs.join(e,Dt.HDB_HOME_DIR_NAME,Dt.BOOT_PROPS_FILE_NAME);return Bo.existsSync(t)||(t=Xs.join(Dm,"utility/hdb_boot_properties.file")),t}a(B1,"getPropsFilePath");function H1(e){dr=e}a(H1,"setLogLevel");function ly(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(ly,"autoCastBoolean");function q1(e){try{if(e.includes("config/settings.js")){let o=_y(e);return{level:o.get(Dt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Xs.dirname(o.get(Dt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Dt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Dt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=uy.parseDocument(Bo.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===Dt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(q1,"getLogConfig");function x1(){try{let e=uy.parseDocument(Bo.readFileSync(C1,"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(x1,"getDefaultConfig");function G1(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(G1,"AuthAuditLog")});var Ho=g((KEe,F1)=>{F1.exports={name:"harperdb",version:"4.3.0-beta.7",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.1","nats-server":"2.10.1"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.11.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.25.1","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.10.0-beta.3",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.17.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",yaml:"2.3.4"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.3.3","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var Fi=g((WEe,Sy)=>{"use strict";Sy.exports={version:k1,printVersion:$1};var vd=Ho();function k1(){if(vd)return vd.version}a(k1,"version");function $1(){vd&&console.log(`HarperDB Version ${vd.version}`)}a($1,"printVersion")});var Ry=g((jEe,gy)=>{"use strict";var Ty=require("semver/functions/major"),V1=Ho(),Hm=process.versions&&process.versions.node?process.versions.node:void 0;gy.exports=Y1;function Y1(){let e=V1.engines["minimum-node"];if(Hm&&Ty(Hm)<Ty(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${Hm}. Please install a version of Node.js that is withing the defined range.`}}a(Y1,"checkNodeVersion")});var qo={};$e(qo,{server:()=>ot});var Ay,ot,Er=Oe(()=>{Ay=require("../index"),ot={};(0,Ay._assignPackageExport)("server",ot)});var qm=g((JEe,Oy)=>{"use strict";var K1=require("util"),W1=require("path"),Q1=require("child_process"),j1=K1.promisify(Q1.execFile),z1=1e3*1e3*10;Oy.exports={findPs:J1};async function J1(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await j1("ps",["wwxo",`pid,${r}`],{maxBuffer:z1});for(let s of n.trim().split(`
5
- `).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:W1.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(J1,"findPs")});var dt=g((ZEe,by)=>{"use strict";var X1="__dbis__",Z1="__txns__",eK="__environment_name__",tK="__dbi_defintion__",rK={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"},nK=["__createdtime__","__updatedtime__"],sK="\uFFFF",Ny={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},iK=Object.values(Ny);by.exports={AUDIT_STORE_NAME:Z1,INTERNAL_DBIS_NAME:X1,DBI_DEFINITION_NAME:tK,SEARCH_TYPES:rK,TIMESTAMP_NAMES:nK,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:eK,TRANSACTIONS_DBI_NAMES_ENUM:Ny,TRANSACTIONS_DBIS:iK,OVERFLOW_MARKER:sK}});var Kr=g((ehe,Uy)=>{"use strict";var yy=C(),Iy=dt(),wy={CONTINUE:100,OK:200,CREATED:201,BAD_REQUEST:400,UNAUTHORIZED:401,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,REQUEST_TIMEOUT:408,CONFLICT:409,TOO_MANY_REQUESTS:429,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,HTTP_VERSION_NOT_SUPPORTED:505,INSUFFICIENT_STORAGE:507,NETWORK_AUTHENTICATION_REQUIRED:511},Cy=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Ly={500:Cy("There was an error processing your request."),400:"Invalid request"},oK=Ly[wy.INTERNAL_SERVER_ERROR],aK={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.`},cK={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},lK={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"},uK={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 ${Iy.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Iy.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"},_K={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${yy.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${yy.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},Dy={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"},dK={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."},fK={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`},EK={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"},hK={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},pK={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`},Py={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.`},My={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}`},mK={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."},SK={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},TK={...Dy,...lK,...aK,...dK,...fK,...EK,...hK,...pK,..._K,...Py,...My,...mK,...SK,...cK};Uy.exports={CHECK_LOGS_WRAPPER:Cy,HDB_ERROR_MSGS:TK,DEFAULT_ERROR_MSGS:Ly,DEFAULT_ERROR_RESP:oK,HTTP_STATUS_CODES:wy,LMDB_ERRORS_ENUM:uK,AUTHENTICATION_ERROR_MSGS:Dy,VALIDATION_ERROR_MSGS:Py,ITC_ERRORS:My}});var se=g((rhe,Hy)=>{"use strict";var tc=Kr(),gK=G(),RK=C(),Bd=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,vy),this.statusCode=n||tc.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(tc.DEFAULT_ERROR_MSGS[n]?tc.DEFAULT_ERROR_MSGS[n]:tc.DEFAULT_ERROR_MSGS[tc.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&&gK[s](i)}},xm=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}},Gm=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function vy(e,t,r,n=RK.LOG_LEVELS.ERROR,s=null,i=!1){if(By(e))return e;let o=new Bd(e,t,r,n,s);return i&&delete o.stack,o}a(vy,"handleHDBError");function By(e){return e.__proto__.constructor.name===Bd.name}a(By,"isHDBError");Hy.exports={isHDBError:By,handleHDBError:vy,ClientError:xm,ServerError:Gm,hdb_errors:tc}});var Je=g((she,Vy)=>{"use strict";var Gl=C(),AK=Q(),hr=J(),Fl=require("path"),OK=require("minimist"),qy=require("fs-extra"),xy=require("lodash");hr.initSync();var{CONFIG_PARAMS:ki,DATABASES_PARAM_CONFIG:Bl,SYSTEM_SCHEMA_NAME:Hd}=Gl,Hl,ql,xl;function Gy(){if(Hl!==void 0)return Hl;if(hr.getHdbBasePath()!==void 0)return Hl=hr.get(ki.STORAGE_PATH)||Fl.join(hr.getHdbBasePath(),Gl.DATABASES_DIR_NAME),Hl}a(Gy,"getBaseSchemaPath");function Fy(){if(ql!==void 0)return ql;if(hr.getHdbBasePath()!==void 0)return ql=$y(Hd),ql}a(Fy,"getSystemSchemaPath");function ky(){if(xl!==void 0)return xl;if(hr.getHdbBasePath()!==void 0)return xl=hr.get(Gl.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Fl.join(hr.getHdbBasePath(),Gl.TRANSACTIONS_DIR_NAME),xl}a(ky,"getTransactionAuditStoreBasePath");function NK(e,t){let r=hr.get(ki.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Fl.join(ky(),e.toString())}a(NK,"getTransactionAuditStorePath");function $y(e,t){e=e.toString(),t=t&&t.toString();let r=hr.get(Gl.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Fl.join(Gy(),e)}a($y,"getSchemaPath");function bK(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,OK(process.argv));let n=r[ki.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!AK.isObject(n))throw o;i=n}for(let o of i){let c=o[Hd];if(!c)continue;let l=hr.get(ki.DATABASES);l=l??{};let _=c?.tables?.[t]?.[Bl.PATH];if(_)return xy.set(l,[Hd,Bl.TABLES,t,Bl.PATH],_),hr.setProperty(ki.DATABASES,l),_;let u=c?.[Bl.PATH];if(u)return xy.set(l,[Hd,Bl.PATH],u),hr.setProperty(ki.DATABASES,l),u}}let s=r[ki.STORAGE_PATH.toUpperCase()];if(s){if(!qy.pathExistsSync(s))throw new Error(s+" does not exist");let i=Fl.join(s,e);return qy.mkdirsSync(i),hr.setProperty(ki.STORAGE_PATH,s),i}return Fy()}a(bK,"initSystemSchemaPaths");function yK(){Hl=void 0,ql=void 0,xl=void 0}a(yK,"resetPaths");Vy.exports={getBaseSchemaPath:Gy,getSystemSchemaPath:Fy,getTransactionAuditStorePath:NK,getTransactionAuditStoreBasePath:ky,getSchemaPath:$y,initSystemSchemaPaths:bK,resetPaths:yK}});var pr=g((che,jy)=>{"use strict";var IK=Kr().LMDB_ERRORS_ENUM,ohe=require("lmdb"),wK=dt(),ahe=require("buffer").Buffer,{OVERFLOW_MARKER:Yy,MAX_SEARCH_KEY_LENGTH:qd}=wK,Ky=["number","string","symbol","boolean","bigint"];function CK(e){if(e=e?.primaryStore||e,!e)throw new Error(IK.ENV_REQUIRED)}a(CK,"validateEnv");function LK(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(LK,"stringifyData");function DK(e){return e instanceof Date?e.valueOf():e}a(DK,"convertKeyValueToWrite");function PK(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(Ky.includes(typeof e))return e.length>qd?[e.slice(0,qd)+Yy]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(Ky.includes(typeof i))i.length>qd?r.push(i.slice(0,qd)+Yy):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(PK,"getIndexedValues");var xd=0,Wy=0;function Qy(){Wy=Date.now()-performance.now()}a(Qy,"adjustStartTime");Qy();var MK=6e4;setInterval(Qy,MK).unref();function UK(){let e=performance.now()+Wy;return e>xd?(xd=e,e):(xd+=488e-6,xd)}a(UK,"getNextMonotonicTime");jy.exports={validateEnv:CK,stringifyData:LK,convertKeyValueToWrite:DK,getNextMonotonicTime:UK,getIndexedValues:PK}});var zy,Kn,Fm,kl=Oe(()=>{zy=require("events"),Kn=class extends zy.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new Fm;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){return this.queue?.shift()}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},Fm=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 eI={};$e(eI,{HAS_EXPIRATION:()=>jm,LAST_TIMESTAMP_PLACEHOLDER:()=>Yl,LOCAL_TIMESTAMP:()=>vK,METADATA:()=>$l,NO_TIMESTAMP:()=>$m,PENDING_LOCAL_TIME:()=>zm,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Qm,RecordEncoder:()=>Km,TIMESTAMP_ASSIGN_LAST:()=>HK,TIMESTAMP_ASSIGN_NEW:()=>Xy,TIMESTAMP_ASSIGN_PREVIOUS:()=>Zy,TIMESTAMP_PLACEHOLDER:()=>Gd,TIMESTAMP_RECORD_PREVIOUS:()=>Vm,fromResource:()=>Vd,getUpdateRecord:()=>Jm,handleLocalTimeForGets:()=>Yd});function xK(){return Vl[0]=Vl[0]^64,BK.getFloat64(0)}function Vd(e){Wm=!0;try{return e()}finally{Wm=!1}}function Yd(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?.[$l];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?.[$l]>=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[$l];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(){if(this.timerTracked||(this.timerTracked=!0,xo.push(new WeakRef(this))),!Wm)try{throw new Error("Read transaction used outside of resource")}catch(l){this.readStack=l.stack}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 Jm(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",f,E){if(f||l==null?rc=i?.localTime?Vm|Zy:$m:rc=l?i?.localTime?Vm|16384:Xy|16384:$m,u>0&&(c|=jm),kd=c,Ym=u,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:rc>0},m;try{f&&(h.ifVersion=m=i?.version??null);let S=e.put(n,s,h);if(l){let A=_?.user?.username;if(E&&(Fd=e.encoder.encode(E)),f&&i?.localTime){let T=i?.localTime,R=r.get(T);if(R){let U=Ft(R).previousLocalTime;return r.put(T,$d(o,t,n,U,A,d,Fd),{ifVersion:m}),S}}r.put(Yl,$d(o,t,n,i?.localTime?1:0,A,d,Fd),{append:d!=="invalidate",instructedWrite:!0,ifVersion:m})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var Jy,km,Gd,Yl,Qm,vK,$l,Vl,BK,$m,Xy,HK,Zy,Vm,jm,zm,qK,Fd,rc,kd,Ym,Km,fhe,Wm,xo,nc=Oe(()=>{Jy=require("msgpackr");Go();km=q(G()),Gd=new Uint8Array([1,1,1,1,4,64,0,0]),Yl=new Uint8Array([1,1,1,1,1,0,0,0]),Qm=new Uint8Array([1,1,1,1,3,64,0,0]),vK=Symbol("local-timestamp"),$l=Symbol("metadata"),Vl=new Uint8Array(8),BK=new DataView(Vl.buffer,0,8),$m=0,Xy=0,HK=1,Zy=3,Vm=4,jm=16,zm=1,rc=0,kd=-1,Ym=0,Km=class extends Jy.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(rc||kd>=0){let i=0,o=rc;o&&(i+=8,rc=0);let c=kd,l=Ym;c>=0&&(i+=2,kd=-1,l&&(i+=8,Ym=0));let _=qK=r.call(this,n,s|2048|i);Fd=_.subarray((_.start||0)+i,_.end);let u=_.start||0;return o&&(Gd[4]=o,Gd[5]=o>>8,_.set(Gd,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(Vl,0,c),c+=8;else for(let d=0;d<8;d++)Vl[d]=t[c++];l=xK(),i=t[c]}let _;i<32&&(o=i,c+=2,o&jm&&(_=(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,[$l]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(xK,"getTimestamp");fhe=Map.prototype.get;a(Vd,"fromResource");a(Yd,"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?(km.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):km.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(Jm,"getUpdateRecord")});var dI={};$e(dI,{AUDIT_STORE_OPTIONS:()=>uI,createAuditEntry:()=>$d,openAuditStore:()=>jd,readAuditEntry:()=>Ft,setAuditRetention:()=>FK,transactionKeyEncoder:()=>lI});function jd(e){let t=e.auditStore=e.openDB(oI.AUDIT_STORE_NAME,uI);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=Kd){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed")return;let o=0,c;try{for(let{key:l,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-Xm})){if((_[0]&15)===tS){let u=Ft(_),d=u.tableId;r[d]?.(u.recordId)}if(c=t.remove(l),await new Promise(setImmediate),++o>=GK){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,Xm/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,Qd.getWorkerIndex)()===(0,Qd.getWorkerCount)()-1&&s(Kd),t}function FK(e,t=Kd){Xm=e,Kd=t}function $d(e,t,r,n,s,i,o){let c=_I[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let l=1;n&&(n>1?sc.setFloat64(0,n):On.set(Qm),l=9),f(0),f(t),d(r),sc.setFloat64(l,e),l+=8,s?d(s):On[l++]=0,On[n?8:0]=c;let u=On.subarray(0,l);if(o)return Buffer.concat([u,o]);return u;function d(E){let h=l;l+=1,l=(0,ic.writeKey)(E,On,l);let m=l-h-1;m>127?m>16383?(nS.error("Key or username was too large for audit entry",E),l=h+1,On[h]=0):(On.copyWithin(h+2,h+1,l),sc.setUint16(h,m|32768),l++):On[h]=m}function f(E){E<128?On[l++]=E:E<16384?(sc.setUint16(l,E|32768),l+=2):E<1056964608?(sc.setUint32(l,E|3221225472),l+=4):(On[l]=255,sc.setUint32(l+1,E),l+=5)}}function Ft(e){try{let t=e.dataView||(e.dataView=new rS(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,l=t.position+=o,_=t.readFloat64();o=t.readInt();let u=t.position,d=t.position+=o;return{type:_I[n&7],tableId:i,get recordId(){return iI(e,c,l)},version:_,previousLocalTime:r,get user(){return d>u?iI(e,u,d):void 0},getValue(f,E,h){if(n&Zm||n&eS&&!E)return f.decoder.decode(e.subarray(t.position));if(n&eS&&h)return sS(f.getEntry(this.recordId),h,f)}}}catch{return nS.error("Reading audit entry error",e),{}}}function iI(e,t,r){let n=e.subarray(t,r);return(0,ic.readKey)(n,0,r-t)}var ic,Wd,oI,aI,Qd,cI,nS,On,sc,lI,uI,Xm,GK,Kd,Zm,eS,tI,tS,rI,nI,sI,_I,rS,Go=Oe(()=>{ic=require("ordered-binary"),Wd=q(J()),oI=q(dt()),aI=q(C()),Qd=q(rt()),cI=q(Q());nc();nS=q(G());zd();(0,Wd.initSync)();On=Buffer.alloc(1024),sc=new DataView(On.buffer,On.byteOffset,1024),lI={writeKey(e,t,r){return e===Yl?(t.set(Yl,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,ic.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,ic.readKey)(e,t,r)}},uI={encoding:"binary",keyEncoder:lI},Xm=(0,cI.convertToMS)((0,Wd.get)(aI.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,GK=1e3,Kd=1e4;a(jd,"openAuditStore");a(FK,"setAuditRetention");Zm=16,eS=32,tI=1,tS=2,rI=3,nI=4,sI=5,_I={put:tI|Zm,[tI]:"put",delete:tS,[tS]:"delete",message:rI|Zm,[rI]:"message",invalidate:nI,[nI]:"invalidate",patch:sI|eS,[sI]:"patch"};a($d,"createAuditEntry");a(Ft,"readAuditEntry");rS=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch{debugger}}};a(iI,"readKeySafely")});var iS={};$e(iS,{add:()=>Jd,applyReverse:()=>fI,getRecordAtTime:()=>sS,rebuildUpdateBefore:()=>Xd});function Jd(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function Xd(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,Jd(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function fI(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=kK[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=EI}}function sS(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let l=n.get(i),_=Ft(l);switch(_.type){case"put":s=_.getValue(r);break;case"patch":fI(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let l in s)s[l]===EI&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),_=Ft(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 kK,EI,zd=Oe(()=>{Go();a(Jd,"add");Jd.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};kK={add:Jd};a(Xd,"rebuildUpdateBefore");a(fI,"applyReverse");EI={};a(sS,"getRecordAtTime")});function Wr(e){return e[Pt]||(e[Pt]=Object.create(null))}function nf(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[Ne])},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 Nn.ClientError(`${c} must be a string, attempt to assign ${u}`);Wr(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 Nn.ClientError(`${c} must be a string, attempt to assign ${u}`);Wr(this)[c]=u},"set");break;case"Float":case"Number":l=a(function(u){if(!(typeof u=="number"||u==null&&o.nullable!==!1))throw new Nn.ClientError(`${c} must be a number, attempt to assign ${u}`);Wr(this)[c]=u},"set");break;case"Int":l=a(function(u){if(!(u>>0===u||u==null&&o.nullable!==!1))if(typeof u=="number"&&Math.abs((u>>0)-u)<=1)u=Math.round(u);else throw new Nn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${u}`);Wr(this)[c]=u},"set");break;case"Long":l=a(function(u){if(!(Math.round(u)===u&&Math.abs(u)<=9007199254740992||u==null&&o.nullable!==!1))if(typeof u=="number"&&Math.abs(u)<=9007199254740992)u=Math.round(u);else throw new Nn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${u}`);Wr(this)[c]=u},"set");break;case"BigInt":l=a(function(u){if(!(typeof u=="bigint"||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=BigInt(u);else throw new Nn.ClientError(`${c} must be a number, attempt to assign ${u}`);Wr(this)[c]=u},"set");break;case"Boolean":l=a(function(u){if(!(typeof u=="boolean"||u==null&&o.nullable!==!1))throw new Nn.ClientError(`${c} must be a boolean, attempt to assign ${u}`);Wr(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 Nn.ClientError(`${c} must be a Date, attempt to assign ${u}`);Wr(this)[c]=u},"set");break;case"Bytes":l=a(function(u){if(!(u instanceof Uint8Array||u==null&&o.nullable!==!1))throw new Nn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${u}`);Wr(this)[c]=u},"set");break;case"Any":case void 0:l=a(function(u){Wr(this)[c]=u},"set");break;default:l=a(function(u){if(!(typeof u=="object"||u==null&&o.nullable!==!1))throw new Nn.ClientError(`${c} must be an object, attempt to assign ${u}`);Wr(this)[c]=u},"set")}_={get(){let u=this[Pt];if(u&&c in u){let f=u[c];if(f?.__op__){let E=this[fe]?.[c];return f.update(E)}return f}let d=this[fe]?.[c];if(d&&typeof d=="object"){let f=pI(d,o);if(f)return u||(u=this[Pt]=Object.create(null)),u[c]=f}return d},set:l,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let l=this[Pt];return l?.[o]!==void 0?l[o]:this[fe]?.[o]}),i("set",function(o,c){let l=n[o];if(l)return l.set.call(this,c);if(t.sealed)throw new Nn.ClientError("Can not add a property to a sealed table schema");Wr(this)[o]=c}),i("deleteProperty",function(o){Wr(this)[o]=void 0}),i("toJSON",function(){let o=this[Pt],c;for(let _ in o){c||(c=Object.assign({},this[fe]));let u=o[_];if(u?.__op__){let d=c[_];u=u.update(d)}c[_]=u}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[fe])),Object.assign(c,this)),c||this[fe]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function pI(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){if(s?.[fe])throw new Error("Can not track an already tracked object, check for circular references");this[fe]=s}},nf(r,t)),new r(e)):new Zd(e);case Array:let n=new tf(e.length);n[fe]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=pI(o,t?.elements)),n[s]=o}return n;default:return e}}function sf(e){let t=e[Pt],r;for(let s in t){r||(r=Object.assign({},e[fe]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=sf(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[fe])),Object.assign(r,e)),r||e[fe]}function ko(e,t=e[Pt]){let r;if(hI.call(e,fe)&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=ko(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[fe]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=iS[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=ko(s);r[n]=s}return r?Object.freeze(r):hI.call(e,fe)?e[fe]:e}function ef(e){let t=e[fe];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Fo]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.[fe]===s){if(ef(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[fe]===i){if(ef(s))return!0}else return!0}else return!0}}return!1}var Nn,Pt,Zd,hI,Fo,tf,rf,of=Oe(()=>{Wn();Nn=q(se());zd();Pt=Symbol("own-data");a(Wr,"getChanges");a(nf,"assignTrackedAccessors");a(pI,"trackObject");Zd=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[fe])throw new Error("Can not track an already tracked object, check for circular references");this[fe]=t}};nf(Zd,{});a(sf,"collapseData");hI=Object.prototype.hasOwnProperty;a(ko,"deepFreeze");a(ef,"hasChanges");Fo=Symbol.for("has-array-changes"),tf=class extends Array{static{a(this,"TrackedArray")}[Fo];constructor(t){super(t)}splice(...t){return this[Fo]=!0,super.splice(...t)}push(...t){return this[Fo]=!0,super.push(...t)}pop(){return this[Fo]=!0,super.pop()}unshift(...t){return this[Fo]=!0,super.unshift(...t)}shift(){return this[Fo]=!0,super.shift()}};tf.prototype.constructor=Array;rf=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});function WK(){KK=setInterval(function(){for(let e of oS)if(e.stale){let t=e[Ne]?.url;TI.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},YK).unref()}var aS,SI,TI,$K,oS,VK,Kl,mI,$o,af,YK,KK,cS=Oe(()=>{aS=q(pr()),SI=q(se()),TI=q(G());Wn();nc();$K=100,oS=new Set,VK=25e3,$o=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxnsUsed=1,Vd(()=>{this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0)}),oS.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),Vd(()=>{this.readTxn.use()}),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(oS.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(Kl&&performance.now()-mI>VK)throw new SI.ServerError("Outstanding write transactions have too long of queue, please try again later",503);if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,aS.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let u=this.validated;this.validated=this.writes.length;for(let f=u;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=u;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=u;h<this.validated;h++){let m=this.writes[h];if(!m)continue;let S=m[f===0?"before":"beforeIntermediate"];if(S){let A=S();E?E.push?E.push(A):E=[E,A]:E=A}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(u){throw this.abort(),u}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(u=>u);let c=a(u=>{u.commit(r,u.entry,n)},"doWrite"),l=a(()=>{let u=this.writes[o++];if(u)if(u.key){n>0&&(u.entry=u.store.getEntry(u.key));let d=u.store.ifVersion(u.key,u.entry?.version??null,l);s=s||d}else l();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<$K>>n?l():s=this.writes[0].store.transaction(()=>{for(let u of this.writes)u.entry=u.store.getEntry(u.key),c(u);return!0}),s)return Kl||(Kl=s,mI=performance.now(),Kl.then(()=>{Kl=null})),s.then(u=>u?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=n+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let u=this.next?.commit(t);if(u?.then)return u?.then(d=>({txnTime:r,next:d}));_.next=u}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},af=class extends $o{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,aS.getNextMonotonicTime)())}getReadTxn(){}},YK=3e4;a(WK,"startMonitoringTxns");WK()});function et(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 $o;e.timestamp&&(n.timestamp=e.timestamp),n[Ne]=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 gI,Vo=Oe(()=>{gI=require("../index");Wn();cS();a(et,"transaction");(0,gI._assignPackageExport)("transaction",et);et.commit=function(e){let t=(e[Ne]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};et.abort=function(e){let t=(e[Ne]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function _S(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let d=_(l);for(let E=1;E<e.length;E++){let h=e[E],m=_(h);d=d.concat(m)}let f=new Set;return d.filter(E=>{let h=E.key??E;return f.has(h)?!1:(f.add(h),!0)})}else{let d=_(l),f=u(e.slice(1),!0,l.estimated_count);return f.length>0?o(d,f):d}function _(d){return d.conditions?_S(d.conditions,d.operator,r,n,s,i,o,c):cc(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(_,"executeCondition");function u(d,f,E){return d.map((h,m)=>{if(h.conditions){let T=h.operator==="or",R=u(h.conditions,!T,E);return T?(U,B)=>R.some(v=>v(U,B)):(U,B)=>R.every(v=>v(U,B))}let S=(h.attribute||h[0])===r.primaryKey,A=fS(h,r,i,c,S,E);return f&&m<d.length-1&&E&&(E=rW(r.primaryStore,h.estimated_count,E)),A}).filter(Boolean)}a(u,"mapConditionsToFilters")}function cc(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(Array.isArray(o)){let T=o[0],R=ti(n.attributes,T);if(R.relationship){if(o.length<2)throw new Qr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let U=R.definition?.tableClass||R.elements?.definition?.tableClass,B=new Map,v=cc({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,U,s,B);if(R.relationship.to){i[o[0]]=B;let P=!!ti(U.attributes,R.relationship.to)?.elements;v=XK(v,R,U.primaryStore,P,B)}if(R.relationship.from){let P=a(K=>cc({attribute:R.relationship.from,value:K},t,r,n,s,B),"searchEntry");R.elements?(i[o[0]]=B,v=ZK(v,R,U.primaryStore,B,P)):v=v.flatMap(P)}return v}else if(o.length===1)o=o[0];else throw new Qr.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,u,d,f;c instanceof Date&&(c=c.getTime());let E;switch(dS[l]||l){case"lt":_=!0,u=c;break;case"le":_=!0,u=c,d=!0;break;case"gt":_=c,f=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,u=c.slice(0),u[u.length-1]=Rs.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),u=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),u=c[1],u instanceof Date&&(u=u.getTime()),d=!0;break;case"equals":case void 0:_=c,u=c,d=!0;break;case"ne":if(c===null){_=c,f=!0;break}case"sort":case"contains":case"ends_with":_=!0,E=!0;break;default:throw new Qr.ClientError(`Unknown query comparator "${l}"`)}if(r){let T=_;_=u,u=T,T=!f,f=!d,d=T}let h=o===n.primaryKey||o==null,m=h?n.primaryStore:n.indices[o],S;if(!m||m.isIndexing||E||c===null&&!m.indexNulls){if(s===!1&&!m)throw new Qr.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&E)throw new Qr.ClientError(`Can not use ${l||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(m?.isIndexing)throw new Qr.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!m.indexNulls)throw new Qr.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(S=fS(e),!S)throw new Qr.ClientError(`Unknown search operator ${e.comparator}`)}let A={start:_,end:u,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let T=m.getRange(A).map(S?function({key:R,value:U}){return this.isSync?U&&S(U)?R:$i.SKIP:new Promise((B,v)=>setImmediate(()=>{try{B(U&&S(U)?R:$i.SKIP)}catch(P){v(P)}}))}:R=>R.value==null?$i.SKIP:R);return T.hasEntries=!0,T}else return m?m.getRange(A).map(S?function({key:T,value:R}){return this.isSync?S({[o]:T})?R:$i.SKIP:new Promise((U,B)=>setImmediate(()=>{try{U(S({[o]:T})?R:$i.SKIP)}catch(v){B(v)}}))}:({value:T})=>T):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:T,value:R}){return this.isSync?R&&S(R)?T:$i.SKIP:new Promise((U,B)=>setImmediate(()=>{try{U(R&&S(R)?T:$i.SKIP)}catch(v){B(v)}}))})}function ti(e,t){if(Array.isArray(t))if(t.length>1){let r=ti(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?ti(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 XK(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;s.hasMappings=!0;let o;return{next(){if(!i){let l=t.relationship.to,_=a((u,d)=>{let f=u;Array.isArray(u)&&(f=Qn(u),o=!0);let E=s.get(f);E?E.push(d):s.set(f,E=[d]),u!==f&&(E.key=u)},"add_entry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[l];if(f!=null&&!s.filters?.some(E=>!E(d)))if(n)for(let E=0;E<f.length;E++)_(f[E],u);else _(f,u)}return i=(o?s:s.keys())[Symbol.iterator](),this.next()}let c=i.next();return c.done?c:{value:o?c.value[1].key||c.value[0]:c.value}}}}})}function ZK(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 _=Qn(l.value);if(!c.has(_))return c.add(_),l}if(!i){let _=new Map;n.fromRecord=u=>u[t.relationship.from]?.filter?.(d=>_.has(Qn(d)));for(let u of e){if(n.filters){let d=r.get(u);if(n.filters.some(f=>!f(d)))continue}_.set(Qn(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 fS(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=ti(t.attributes,u),f=d.definition?.tableClass||d.elements.definition?.tableClass,E=n?.[u],h=fS({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},f,r,E?.[u]?.joined,c[1]===f.primaryKey,i);if(!h)return;if(E){E.filters||(E.filters=[]),E.filters.push(h);return}let m=t.propertyResolvers?.[u],S,A=a((T,R)=>{let U,B;if(m){if(m.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let P of h.idFilter.idSet)e={attribute:m.from,value:P};S=_(m.from,h.idFilter,!0,!0)}else S=_(m.from,h.idFilter,!1,!0);let v=S(T);return S.idFilter&&(A.idFilter=S.idFilter),v}B=m(T,r,R),U=B?.value}else U=T[u];return U?Array.isArray(U)?U.some(h):h(U,B):!1},"recordFilter");return A}}switch(l instanceof Date&&(l=l.getTime()),dS[o]||o){case lS.SEARCH_TYPES.EQUALS:case void 0:return _(c,u=>u===l,!0);case"contains":return _(c,u=>u?.toString().includes(l));case"ends_with":return _(c,u=>u?.toString().endsWith(l));case"starts_with":return _(c,u=>typeof u=="string"&&u.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],_(c,u=>{if(!Array.isArray(u))return!1;for(let d=0,f=l.length;d<f;d++)if(u[d]!==l[d])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),_(c,u=>(0,Rs.compareKeys)(u,l[0])>=0&&(0,Rs.compareKeys)(u,l[1])<=0,!0);case"gt":return _(c,u=>(0,Rs.compareKeys)(u,l)>0);case"ge":return _(c,u=>(0,Rs.compareKeys)(u,l)>=0);case"lt":return _(c,u=>(0,Rs.compareKeys)(u,l)<0);case"le":return _(c,u=>(0,Rs.compareKeys)(u,l)<=0);case"ne":return _(c,u=>(0,Rs.compareKeys)(u,l)!==0);case"sort":return()=>!0;default:throw new Qr.ClientError(`Unknown query comparator "${o}"`)}function _(u,d,f,E){let h;f=f&&!s&&t?.indices[u]&&i>3,f&&(e.estimated_count==null&&lf(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(f=!1));let m=0,S=3;function A(T){let R=T[u],U;if(typeof R!="object"||!R||E?U=d(R):Array.isArray(R)?U=R.some(d):R instanceof Date&&(U=d(R.getTime())),f&&(S++,!U&&!A.idFilter&&++m/S*(i-S)>h)){let B=cc(e,r.transaction.getReadTxn(),!1,t).map(Qn),v=new Set(B);A.idFilter=P=>v.has(Qn(P)),A.idFilter.idSet=v}return U}return a(A,"recordFilter"),s&&(A.idFilter=d),A}a(_,"attributeComparator")}function lf(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/ei(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=dS[n]||n,n===lS.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=ti(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=lf(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*ei(e.indices[i.relationship.from])/(ei(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=ei(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=zK*ei(e.primaryStore)+1:n==="between"?r.estimated_count=jK*ei(e.primaryStore)+1:n==="sort"?r.estimated_count=ei(e.primaryStore)+1:r.estimated_count=QK*ei(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function uf(e){if(e)if(Vi=e,oc.lastIndex=0,eW.test(e))try{let t=Wl(new ac,"");if(mr!==Vi.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 ${mr} in '${Vi}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Wl(e,t){let r=oc,n,s,i,o,c,l=decodeURIComponent,_;for(;n=r.exec(Vi);){mr=r.lastIndex;let[,u,d]=n;if(o){if(u)throw new SyntaxError(`expected operator, but encountered '${u}'`);o=!1,c=!1}else c=!0;let f;switch(d){case"=":if(s){if(u.length<=2)i=u;else throw new SyntaxError(`invalid FIQL operator ${u}`);l=RI}else{if(l=decodeURIComponent,i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");s=Ql(u)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=JK[d],l=uS[i]?RI:decodeURIComponent,!u)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=Ql(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"&&AI(h,u),cf(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(Ql(u)),s=void 0;break;case"(":oc.lastIndex=mr;let E=Wl(u?[]:new ac,")");switch(u){case"":cf(e,_),e.conditions.push(E);break;case"limit":switch(E.length){case 1:e.limit=+E[0];break;case 2:e.offset=+E[0],e.limit=E[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(E[0])&&E.length===1&&!E[0].name?(e.select=E[0],e.select.asArray=!0):E.length===1?e.select=E[0]:E.length===2&&E[1]===""?e.select=E.slice(0,1):e.select=E;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=OI(E);break;default:throw new SyntaxError(`unknown query function call ${u}`)}Vi[mr]===","?r.lastIndex=++mr: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");oc.lastIndex=mr,f=Wl([],"}"),f.name=u,e.push(f),Vi[mr]===","?r.lastIndex=++mr:o=!0;break;case"[":oc.lastIndex=mr,u?(f=Wl(new ac,"]"),f.name=u):f=Wl(e.conditions?new ac:[],"]"),e.conditions?(cf(e,_),e.conditions.push(f),s=null):e.push(f),Vi[mr]===","?r.lastIndex=++mr: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"&&AI(h,u),cf(e,_),e.conditions.push(h)}else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(Ql(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?tW:oc,r.lastIndex=mr),mr===Vi.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function cf(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 Ql(e){return e.indexOf(".")>-1?e.split(".").map(Ql):decodeURIComponent(e)}function RI(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(decodeURIComponent(r));if(t==="string")return decodeURIComponent(r);throw new Qr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function AI(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Qr.ClientError("wildcard can only be used at the end of a string")}function OI(e){let t=NI(e[0]);return e.length>1&&(t.next=OI(e.slice(1))),t}function NI(e){if(Array.isArray(e)){let t=NI(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 Qn(e){return Array.isArray(e)?e.join("\0"):e}function ei(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function rW(e,t,r){return t*r/ei(e)}var Qr,lS,Rs,$i,QK,jK,zK,JK,uS,dS,eW,oc,tW,mr,Vi,ac,_f=Oe(()=>{Qr=q(se()),lS=q(dt()),Rs=require("ordered-binary"),$i=require("lmdb"),QK=.3,jK=.1,zK=.05,JK={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},uS={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(_S,"executeConditions");a(cc,"searchByIndex");a(ti,"findAttribute");a(XK,"joinTo");a(ZK,"joinFrom");dS={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(fS,"filterByType");a(lf,"estimateCondition");eW=/[()[\]|!<>.]|(=\w*=)/,oc=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,tW=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(uf,"parseQuery");a(Wl,"parseBlock");a(cf,"assignOperator");a(Ql,"decodeProperty");a(RI,"typedDecoding");a(AI,"wildcardDecoding");a(OI,"toSortObject");a(NI,"toSortEntry");ac=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(Qn,"flattenKey");a(ei,"estimatedEntryCount");a(rW,"intersectionEstimate")});var pS={};$e(pS,{CONTEXT:()=>Ne,ID_PROPERTY:()=>Me,IS_COLLECTION:()=>bn,RECORD_PROPERTY:()=>fe,Resource:()=>Qt,snake_case:()=>sW,transformForSelect:()=>ff});function sW(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function bI(e,t){if(jl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(jl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new hS;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){jl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function jr(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[Ne]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(u=s,c=u[this.primaryKey]??null,o=i[Ne]||i):u=i:(u=s,c=u[Me]??u[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[Ne]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(l=s,s[Symbol.iterator]){c=[],_=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let E=c.indexOf("?");if(E>-1){let m=this.parseQuery(c.slice(E+1));l?l=Object.assign(m,l):l=m,c=c.slice(0,E)}let h=this.parsePath(c,o,l);h?.id!==void 0?(h.query&&(l?l=Object.assign(h.query,l):l=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||_?(d=Object.assign({},t),l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),_&&(d.isCollection=!0)):d=t,o.transaction){let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)}else return et(o,()=>{let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)},d);function f(E){if(o.authorize){o.authorize=!1;let h=t.type==="read"?E.allowRead(o.user,l,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,u,o):E.allowUpdate(o.user,u,o):t.type==="create"?E.allowCreate(o.user,u,o):E.allowDelete(o.user,l,o);if(h?.then)return h.then(m=>{if(!m)throw new df(o.user);return typeof u?.then=="function"?u.then(S=>e(E,l,o,S)):e(E,l,o,u)});if(!h)throw new df(o.user)}return typeof u?.then=="function"?u.then(h=>e(E,l,o,h)):e(E,l,o,u)}a(f,"authorizeActionOnResource")}}function zr(e,t){let r=new wI.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function ES(e,t,r){let n=e[fe];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 ff(e,t){let r=t?.propertyResolvers,n=t[Ne],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):ES(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(ES(l,r,n));for(let d of e)_.push(u(d));return _},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(f=>f&&typeof f=="object"?c(f):f);let _={},u=i(ES(l,r,n)),d;for(let f of e){let E=u(f);E===void 0&&o&&(E=null),E?.then?(d||(d=[]),d.push(E.then(h=>_[f.name||f]=h))):_[f.name||f]=E}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let u=r[c.name]?.definition?.tableClass;l=s[c.name]=ff(c.select||c,u)}let _=o(c.name);return l(_)}else return o(c);else return c}}a(i,"handleProperty")}var yI,II,wI,Ne,Me,bn,fe,nW,Qt,df,jl,hS,Wn=Oe(()=>{yI=require("crypto");kl();II=require("../index"),wI=q(se());of();Vo();_f();Ne=Symbol.for("context"),Me=Symbol.for("primary-key"),bn=Symbol("is-collection"),fe=Symbol("stored-record"),nW={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Qt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Me]=t;let n=r?.[Ne];this[Ne]=n!==void 0?n:r||null}static get=jr(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 _=ff(l,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=jr(function(t,r,n,s){if(Array.isArray(s)&&t[bn]){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):zr(t,"put")},{hasContent:!0,type:"update"});static patch=jr(function(t,r,n,s){return t.patch?t.patch(s,r):zr(t,"patch")},{hasContent:!0,type:"update"});static delete=jr(function(t,r,n,s){return t.delete?t.delete(r):zr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,yI.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),et(n,()=>{let i=new this(s,n),o=i.update?i.update(r):zr(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=jr(function(t,r,n,s){return t.invalidate?t.invalidate(r):zr(t,"delete")},{hasContent:!1,type:"update"});static post=jr(function(t,r,n,s){return t[Me]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=jr(function(t,r,n,s){return t.connect?t.connect(s,r):zr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=jr(function(t,r,n,s){return t.subscribe?t.subscribe(r):zr(t,"subscribe")},{type:"read"});static publish=jr(function(t,r,n,s){return t[Me]!=null&&t.update?.(),t.publish?t.publish(s,r):zr(t,"publish")},{hasContent:!0,type:"create"});static search=jr(function(t,r,n,s){let i=t.search?t.search(r):zr(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=ff(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=jr(function(t,r,n,s){return t.search?t.search(s,r):zr(t,"search")},{hasContent:!0,type:"read"});static copy=jr(function(t,r,n,s){return t.copy?t.copy(s,r):zr(t,"copy")},{type:"create"});static move=jr(function(t,r,n,s){return t.move?t.move(s,r):zr(t,"move")},{type:"delete"});post(t){if(this[bn])return this.constructor.create(this[Me],t,this[Ne]);zr(this,"post")}static isCollection(t){return t?.[bn]}static coerceId(t){return t}static parseQuery(t){return uf(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&&nW[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:bI(t,this),isCollection:jl}}let i=bI(t,this);return jl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Ne],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(_=>_[Me]===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[Me],f=_.get(d);f?f.push(u):_.set(d,[u])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[bn]=!0),s}subscribe(t){return new Kn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Kn}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[Me]}getContext(){return this[Ne]}};Qt.prototype[Ne]=null;(0,II._assignPackageExport)("Resource",Qt);a(sW,"snake_case");df=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(bI,"pathToId");hS=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(jr,"transactional");a(zr,"missingMethod");a(ES,"selectFromObject");a(ff,"transformForSelect")});var CI={};$e(CI,{Resources:()=>Ef,keyArrayToString:()=>lc,resetResources:()=>iW,resources:()=>Yi});function iW(){return Yi=new Ef}function lc(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Ef,Yi,zl=Oe(()=>{Vo();Ef=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,l]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let u=this.get(c.slice(0,_));u&&(u.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),l=this.get(c);if(l){if(l.relativeURL=t.slice(n),!l.hasSubPaths)return l;s=l}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),s?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return et(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(iW,"resetResources");a(lc,"keyArrayToString")});function DI(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;uc||((0,hf.onMessageByType)(LI,u=>{PI(u.path)}),uc=Object.create(null));let o=uc[s]||(uc[s]=[]);o.auditStore=e.auditStore,o.lastTxnTime==null&&(o.lastTxnTime=Date.now());let c=o[i];c||(c=o[i]=new Map,c.envs=o,c.tableId=i,c.store=e.primaryStore),t=lc(t);let l=new SS(r);l.startTime=n;let _=c.get(t);return _?_.push(l):(c.set(t,_=[l]),_.tables=c,_.key=t),l.subscriptions=_,l}function PI(e,t){if(!uc)return;let r=uc[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(s){throw s.message+=" in "+e,s}let n;for(let{key:s,value:i}of r.auditStore.getRange({start:r.lastTxnTime,exclusiveStart:!0})){r.lastTxnTime=s;let o=Ft(i),c=r[o.tableId];if(!c)continue;let l=o.recordId,_,u=lc(o.recordId),d=0;do{let f=c.get(u);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=s){(0,mS.info)("omitting",l,h.startTime,s);continue}try{if(h.crossThreads===!1&&!t)continue;let m;h.supportsTransactions&&h.txnInProgress!==o.version&&(m=!0,h.txnInProgress||(n?n.push(h):n=[h]),h.txnInProgress=o.version),h.listener(l,o,s,m)}catch(m){console.error(m),(0,mS.info)(m)}}}if(u==null)break;let E=u.lastIndexOf?.("/",u.length-2);E>-1?u=u.slice(0,E):u=null,d++}while(!0)}if(n)for(let s of n)s.txnInProgress=null,s.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function MI(e,t){let r=t||e,n=r.env;if(t&&!t.cache&&(t.cache=new Map),!n.hasBroadcastListener){n.hasBroadcastListener=!0;let s=n.path;r.on("aftercommit",()=>{(0,hf.broadcast)({type:LI,path:s}),PI(s,!0)})}}var mS,hf,LI,uc,zhe,SS,UI=Oe(()=>{mS=q(G()),hf=q(rt());kl();zl();Go();LI="transaction",zhe=Buffer.alloc(4096);a(DI,"addSubscription");SS=class extends Kn{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(PI,"notifyFromTransactionData");a(MI,"listenToCommits")});var BI=g((Zhe,vI)=>{"use strict";var TS=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};vI.exports=TS});var qI=g((tpe,HI)=>{"use strict";var gS=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};HI.exports=gS});var pf=g((npe,xI)=>{"use strict";var AS=J(),OS=C(),{RecordEncoder:oW}=(nc(),ie(eI));AS.initSync();var aW=AS.get(OS.CONFIG_PARAMS.STORAGE_COMPRESSION),cW=AS.get(OS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,lW=OS.UPDATES_PROPERTY,RS=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=aW&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=cW&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:oW},this.alwaysLazyProperty=n=>n===lW)}};xI.exports=RS});var Sf=g((ipe,FI)=>{"use strict";var _c=J(),Jl=C();_c.initSync();var uW=_c.get(Jl.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||_c.get(Jl.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||_c.get(Jl.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",GI=_c.get(Jl.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),_W=_c.get(Jl.CONFIG_PARAMS.STORAGE_NOREADAHEAD),mf=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=uW,this.noFSAccess=!0,GI!==void 0&&(this.overlappingSync=GI),this.noReadAhead=_W}};FI.exports=mf;mf.MAX_DBS=1e4});var Ve=g((ape,JI)=>{"use strict";var bS=require("lmdb"),jn=require("fs-extra"),Jr=require("path"),Tf=pr(),VI=G(),Sr=Kr().LMDB_ERRORS_ENUM,gf=qI(),yS=pf(),YI=Sf(),Ki=dt(),kI=C(),{table:dW,resetDatabases:fW}=(ge(),ie(Ge)),$I=J(),zn=Ki.INTERNAL_DBIS_NAME,KI=Ki.DBI_DEFINITION_NAME,EW="data.mdb",hW="lock.mdb",Xl=".mdb",pW="-lock",NS=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=yn(t,r),this.key_type=this.dbi[Ki.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ki.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new bS.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Rf(e,t){if(e===void 0)throw new Error(Sr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Sr.ENV_NAME_REQUIRED)}a(Rf,"pathEnvNameValidation");async function IS(e,t,r=!0){try{await jn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Sr.INVALID_BASE_PATH):n}try{let n=Jr.join(e,t+Xl);return await jn.access(n,jn.constants.R_OK|jn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await jn.access(Jr.join(e,t,EW),jn.constants.R_OK|jn.constants.F_OK),Jr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Sr.INVALID_ENVIRONMENT)}else throw new Error(Sr.INVALID_ENVIRONMENT);throw n}}a(IS,"validateEnvironmentPath");function Af(e,t){if(Tf.validateEnv(e),t===void 0)throw new Error(Sr.DBI_NAME_REQUIRED)}a(Af,"validateEnvDBIName");async function mW(e,t,r=!1,n=!1){Rf(e,t);let s=Jr.basename(e);t=t.toString();let i=$I.get(kI.CONFIG_PARAMS.DATABASES);i||$I.setProperty(kI.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await IS(e,t,n),WI(e,t,r)}catch(o){if(o.message===Sr.INVALID_ENVIRONMENT){let c=Jr.join(e,t);await jn.mkdirp(n?c:e);let l=new YI(n?c:c+Xl,!1),_=bS.open(l);_.dbis=Object.create(null);let u=new yS(!1);_.openDB(zn,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=wS(e,t,r);return _[Ki.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(mW,"createEnvironment");async function SW(e,t,r,n=!0){Rf(e,t),t=t.toString();let s=Jr.join(e,t);return dW({table:t,database:Jr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(SW,"copyEnvironment");async function WI(e,t,r=!1){Rf(e,t),t=t.toString();let n=wS(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 IS(e,t),i=Jr.join(e,t+Xl),o=s!=i,c=new YI(s,o),l=bS.open(c);l.dbis=Object.create(null);let _=jI(l);for(let u=0;u<_.length;u++)yn(l,_[u]);return l[Ki.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(WI,"openEnvironment");async function TW(e,t,r=!1){Rf(e,t),t=t.toString();let n=Jr.join(e,t+Xl),s=await IS(e,t);if(global.lmdb_map!==void 0){let i=wS(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await QI(o),delete global.lmdb_map[i]}}await jn.remove(s),await jn.remove(s===n?s+pW:Jr.join(Jr.dirname(s),hW))}a(TW,"deleteEnvironment");async function QI(e){Tf.validateEnv(e);let t=e[Ki.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(QI,"closeEnvironment");function wS(e,t,r=!1){let s=`${Jr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(wS,"getCachedEnvironmentName");function gW(e){Tf.validateEnv(e);let t=Object.create(null),r=yn(e,zn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==zn)try{t[n]=Object.assign(new gf,s)}catch{VI.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(gW,"listDBIDefinitions");function jI(e){Tf.validateEnv(e);let t=[],r=yn(e,zn);for(let{key:n}of r.getRange({start:!1}))n!==zn&&t.push(n);return t}a(jI,"listDBIs");function RW(e,t){let n=yn(e,zn).getEntry(t),s=new gf;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{VI.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(RW,"getDBIDefinition");function zI(e,t,r,n=!r){if(Af(e,t),t=t.toString(),t===zn)throw new Error(Sr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return yn(e,t)}catch(s){if(s.message===Sr.DBI_DOES_NOT_EXIST){let i=new yS(r,n===!0),o=e.openDB(t,i),c=new gf(r===!0,n);return o[KI]=c,yn(e,zn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(zI,"createDBI");function yn(e,t){if(Af(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==zn?r=RW(e,t):r=new gf,r===void 0)throw new Error(Sr.DBI_DOES_NOT_EXIST);let n;try{let s=new yS(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(Sr.DBI_DOES_NOT_EXIST):s}return n[KI]=r,e.dbis[t]=n,n}a(yn,"openDBI");function AW(e,t){Af(e,t),t=t.toString();let r=yn(e,t),n=r.getStats();return r[Ki.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(AW,"statDBI");async function OW(e,t){try{let r=Jr.join(e,t+Xl);return(await jn.stat(r)).size}catch{throw new Error(Sr.INVALID_ENVIRONMENT)}}a(OW,"environmentDataSize");function NW(e,t){if(Af(e,t),t=t.toString(),t===zn)throw new Error(Sr.CANNOT_DROP_INTERNAL_DBIS_NAME);yn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],yn(e,zn).removeSync(t)}a(NW,"dropDBI");function bW(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{yn(e,i)}catch(o){if(o.message===Sr.DBI_DOES_NOT_EXIST)zI(e,i,i!==t,i===t),n=!0;else throw o}}n&&fW()}a(bW,"initializeDBIs");JI.exports={openDBI:yn,openEnvironment:WI,createEnvironment:mW,listDBIs:jI,listDBIDefinitions:gW,createDBI:zI,dropDBI:NW,statDBI:AW,deleteEnvironment:TW,initializeDBIs:bW,TransactionCursor:NS,environmentDataSize:OW,copyEnvironment:SW,closeEnvironment:QI}});var ew=g((lpe,ZI)=>{"use strict";var CS=Ve(),yW=G(),XI=Kr().LMDB_ERRORS_ENUM;ZI.exports=IW;async function IW(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 CS.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==XI.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await CS.closeEnvironment(global.lmdb_map[n]),await CS.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==XI.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){yW.error(t)}}a(IW,"cleanLMDBMap")});var ri=g((_pe,wW)=>{wW.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var fw=g((fpe,dw)=>{"use strict";var LS=require("recursive-iterator"),CW=require("alasql"),DS=require("clone"),tw=Q(),{handleHDBError:rw,hdb_errors:LW}=se(),{HDB_ERROR_MSGS:nw,HTTP_STATUS_CODES:sw}=LW,{getDatabases:DW}=(ge(),ie(Ge)),PW=["DISTINCT_ARRAY"],iw=Symbol("validateTables"),PS=Symbol("validateTable"),dpe=Symbol("getAllColumns"),ow=Symbol("validateAllColumns"),Of=Symbol("findColumn"),aw=Symbol("validateOrderBy"),Zl=Symbol("validateSegment"),MS=Symbol("validateColumn"),cw=Symbol("setColumnsForTable"),lw=Symbol("checkColumnsForAsterisk"),uw=Symbol("validateGroupBy"),_w=Symbol("hasColumns"),US=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[iw](),this[lw](),this[ow]()}[iw](){if(this[_w]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[PS](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[PS](t.table)})}}[_w](){let t=!1,r=new LS(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[PS](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=DW();if(!r[t.databaseid])throw rw(new Error,nw.SCHEMA_NOT_FOUND(t.databaseid),sw.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw rw(new Error,nw.TABLE_NOT_FOUND(t.databaseid,t.tableid),sw.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=DS(s);i.table=DS(t),this.attributes.push(i)})}[Of](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)}[lw](){let t=new LS(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[cw](r.tableid)}[cw](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new CW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[ow](){this[Zl](this.statement.columns,!1),this[Zl](this.statement.joins,!1),this[Zl](this.statement.where,!1),this[uw](this.statement.group,!1),this[Zl](this.statement.order,!0)}[Zl](t,r){if(!t)return;let n=new LS(t),s=[];for(let{node:i,path:o}of n)!tw.isEmpty(i)&&!tw.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[aw](i):s.push(this[MS](i)));return s}[uw](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&PW.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=DS(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Of](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[Of](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`}[aw](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[MS](t)}[MS](t){let r=this[Of](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]}};dw.exports=US});var hw=g((hpe,Ew)=>{"use strict";var vS=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};Ew.exports=vS});var mw=g((mpe,pw)=>{"use strict";var BS=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};pw.exports=BS});var Tw=g((Tpe,Sw)=>{"use strict";var HS=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}};Sw.exports=HS});var Rw=g((Rpe,gw)=>{"use strict";var qS=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};gw.exports=qS});var Ko=g((ype,Nw)=>{"use strict";var MW=Ve(),UW=mw(),vW=Tw(),BW=Rw(),As=pr(),eu=Kr().LMDB_ERRORS_ENUM,HW=dt(),ni=C(),qW=Q(),xW=require("uuid"),Ope=require("lmdb"),{handleHDBError:GW,hdb_errors:FW}=se(),{OVERFLOW_MARKER:Npe,MAX_SEARCH_KEY_LENGTH:bpe}=HW,Aw=J();Aw.initSync();var Nf=Aw.get(ni.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),xS=ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Yo=ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function kW(e,t,r,n,s=As.getNextMonotonicTime()){$S(e,t,r,n),GS(e,t,r);let i=new UW,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];Ow(_,!0,s);let u=$W(e,t,r,_),d=_[t];o.push(u),c.push(d)}return FS(o,c,n,i,s)}a(kW,"insertRecords");function $W(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][ni.FUNC_VAL],n[o]=c)}let l=As.getIndexedValues(c),_=e.dbis[o];if(l){Nf&&_.prefetch(l.map(u=>({key:u,value:s})),bf);for(let u=0,d=l.length;u<d;u++)_.put(l[u],s)}}Nf&&e.dbis[t].prefetch([s],bf),e.dbis[t].put(s,n,n[Yo])})}a($W,"insertRecord");function VW(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(VW,"removeSkippedRecords");function Ow(e,t,r){let n=r>0;(n||!Number.isInteger(e[Yo]))&&(e[Yo]=r||(r=As.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[xS]))&&(e[xS]=r||As.getNextMonotonicTime()):delete e[xS]}a(Ow,"setTimestamps");function GS(e,t,r){r.indexOf(ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),MW.initializeDBIs(e,t,r)}a(GS,"initializeTransaction");async function YW(e,t,r,n,s=As.getNextMonotonicTime()){$S(e,t,r,n),GS(e,t,r);let i=new vW,o=[],c=[],l=[];for(let _=0;_<n.length;_++){let u=n[_],d=u[t],f;try{f=kS(e,t,u,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),l.push(d)}return FS(c,l,n,i,s,o)}a(YW,"updateRecords");async function KW(e,t,r,n,s=As.getNextMonotonicTime()){try{$S(e,t,r,n)}catch(l){throw GW(l,l.message,FW.HTTP_STATUS_CODES.BAD_REQUEST)}GS(e,t,r);let i=new BW,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l],u;qW.isEmpty(_[t])?(u=xW.v4(),_[t]=u):u=_[t];let d=kS(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return FS(o,c,n,i,s)}a(KW,"upsertRecords");async function FS(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||As.getNextMonotonicTime(),VW(r,i),n}a(FS,"finalizeWrite");function kS(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(Ow(r,!u,o),Number.isInteger(r[Yo])&&_[Yo]>r[Yo])return!1;u&&s.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let m=r[h],S=e.dbis[h];if(S===void 0)continue;let A=_[h];if(typeof m=="function"){let R=m([[_]]);Array.isArray(R)&&(m=R[0][ni.FUNC_VAL],r[h]=m)}if(m===A)continue;let T=As.getIndexedValues(A);if(T){Nf&&S.prefetch(T.map(R=>({key:R,value:n})),bf);for(let R=0,U=T.length;R<U;R++)S.remove(T[R],n)}if(T=As.getIndexedValues(m),T){Nf&&S.prefetch(T.map(R=>({key:R,value:n})),bf);for(let R=0,U=T.length;R<U;R++)S.put(T[R],n)}}let E=Object.assign({},_,r);c.put(n,E,E[Yo])},"do_put");return l?d=c.ifVersion(n,l.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:kS(e,t,r,n,s,i,o))}a(kS,"updateUpsertRecord");function WW(e,t,r){if(As.validateEnv(e),t===void 0)throw new Error(eu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(eu.WRITE_ATTRIBUTES_REQUIRED):new Error(eu.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(WW,"validateBasic");function $S(e,t,r,n){if(WW(e,t,r),!Array.isArray(n))throw n===void 0?new Error(eu.RECORDS_REQUIRED):new Error(eu.RECORDS_MUST_BE_ARRAY)}a($S,"validateWrite");function bf(){}a(bf,"noop");Nw.exports={insertRecords:kW,updateRecords:YW,upsertRecords:KW}});var Ns=g((wpe,Iw)=>{"use strict";var yw=Q(),bw=C(),dc=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Os=require("joi"),Wi={schema_format:{pattern:dc,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},QW=Os.alternatives(Os.string().min(1).max(Wi.schema_length.maximum).pattern(dc).messages({"string.pattern.base":"{:#label} "+Wi.schema_format.message}),Os.number(),Os.array()).required(),jW=Os.alternatives(Os.string().min(1).max(Wi.schema_length.maximum).pattern(dc).messages({"string.pattern.base":"{:#label} "+Wi.schema_format.message}),Os.number()),zW=Os.alternatives(Os.string().min(1).max(Wi.schema_length.maximum).pattern(dc).messages({"string.pattern.base":"{:#label} "+Wi.schema_format.message}),Os.number()).required();function JW(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Wi.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(JW,"checkValidTable");function XW(e,t){return yw.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(XW,"validateSchemaExists");function ZW(e,t){let r=t.state.ancestors[0].schema;return yw.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(ZW,"validateTableExists");function eQ(e,t){return e.toLowerCase()===bw.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${bw.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(eQ,"validateSchemaName");Iw.exports={common_validators:Wi,schema_regex:dc,hdb_schema_table:QW,validateSchemaExists:XW,validateTableExists:ZW,validateSchemaName:eQ,checkValidTable:JW,hdb_database:jW,hdb_table:zW}});var nt=g((Lpe,ww)=>{"use strict";var Tr=require("validate.js");Tr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Tr.validators.type.checks[t](e)?null:` must be a '${t}' value`};Tr.validators.type.checks={Object:function(e){return Tr.isObject(e)&&!Tr.isArray(e)},Array:Tr.isArray,Integer:Tr.isInteger,Number:Tr.isNumber,String:Tr.isString,Date:Tr.isDate,Boolean:function(e){return typeof e=="boolean"}};Tr.validators.hasValidFileExt=function(e,t){return Tr.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};ww.exports={validateObject:tQ,validateObjectAsync:rQ,validateBySchema:nQ};function tQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Tr(e,t,{format:"flat"});return r?new Error(r):null}a(tQ,"validateObject");async function rQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Tr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(rQ,"validateObjectAsync");function nQ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(nQ,"validateBySchema")});var yf=g((Ppe,Cw)=>{var{common_validators:bs}=Ns(),ru=nt(),tu="is required",Rt={database:{presence:!1,format:bs.schema_format,length:bs.schema_length},schema:{presence:!1,format:bs.schema_format,length:bs.schema_length},table:{presence:!0,format:bs.schema_format,length:bs.schema_length},attribute:{presence:!0,format:bs.schema_format,length:bs.schema_length},hash_attribute:{presence:!0,format:bs.schema_format,length:bs.schema_length}};function nu(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(nu,"makeAttributesStrings");function sQ(e){return e=nu(e),Rt.table.presence=!1,Rt.attribute.presence=!1,Rt.hash_attribute.presence=!1,ru.validateObject(e,Rt)}a(sQ,"schema_object");function iQ(e){return e=nu(e),Rt.table.presence={message:tu},Rt.attribute.presence=!1,Rt.hash_attribute.presence=!1,ru.validateObject(e,Rt)}a(iQ,"table_object");function oQ(e){return e=nu(e),Rt.table.presence={message:tu},Rt.attribute.presence=!1,ru.validateObject(e,Rt)}a(oQ,"create_table_object");function aQ(e){return e=nu(e),Rt.table.presence={message:tu},Rt.attribute.presence={message:tu},Rt.hash_attribute.presence=!1,ru.validateObject(e,Rt)}a(aQ,"attribute_object");function cQ(e){return e=nu(e),Rt.table.presence={message:tu},Rt.attribute.presence=!1,Rt.hash_attribute.presence=!1,ru.validateObject(e,Rt)}a(cQ,"describe_table");function lQ(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(lQ,"validateTableResidence");Cw.exports={schema_object:sQ,create_table_object:oQ,table_object:iQ,attribute_object:aQ,describe_table:cQ,validateTableResidence:lQ}});var Dw=g((Upe,Lw)=>{"use strict";var uQ=require("uuid"),VS=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||uQ.v4(),this.schema_table=`${this.schema}.${this.table}`}};Lw.exports=VS});var If=g((Bpe,Pw)=>{"use strict";var _Q=Dw(),YS=class extends _Q{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}};Pw.exports=YS});var Uw=g((qpe,Mw)=>{"use strict";Mw.exports=fQ;var dQ="inserted";function fQ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===dQ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(fQ,"returnObject")});var wf=g((Gpe,xw)=>{"use strict";var EQ=C(),KS=Ve(),hQ=Ko(),{getSystemSchemaPath:pQ,getSchemaPath:mQ}=Je(),SQ=ri(),TQ=yf(),gQ=If(),RQ=Uw(),{handleHDBError:vw,hdb_errors:Hw}=se(),Bw=Q(),{HTTP_STATUS_CODES:AQ}=Hw,WS=SQ.hdb_attribute,qw=[];for(let e=0;e<WS.attributes.length;e++)qw.push(WS.attributes[e].attribute);var OQ="inserted";xw.exports=NQ;async function NQ(e){let t=TQ.attribute_object(e);if(t)throw vw(new Error,t.message,Hw.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&Bw.checkGlobalSchemaTable(e.schema,e.table);if(r)throw vw(new Error,r,AQ.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Bw.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 gQ(e.schema,e.table,e.attribute,e.id);try{let i=await KS.openEnvironment(mQ(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}`);KS.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await KS.openEnvironment(pQ(),EQ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await hQ.insertRecords(o,WS.hash_attribute,qw,[s]);return RQ(OQ,c,{records:[s]},l)}catch(i){throw i}}a(NQ,"lmdbCreateAttribute")});var jS=g((kpe,Fw)=>{var{hdb_table:bQ,hdb_database:Gw}=Ns(),yQ=nt(),QS=require("joi"),IQ={undefined:"undefined",null:"null"},wQ=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||IQ[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"),CQ=QS.object({database:Gw,schema:Gw,table:bQ,records:QS.array().items(QS.object().custom(wQ)).required()});Fw.exports=function(e){return yQ.validateBySchema(e,CQ)}});var su=g((Ype,$w)=>{"use strict";var si=Q(),kw=G(),Vpe=jS(),{getDatabases:LQ}=(ge(),ie(Ge)),{ClientError:Wo}=se();$w.exports=DQ;function DQ(e){if(si.isEmpty(e))throw new Wo("invalid update parameters defined.");if(si.isEmptyOrZeroLength(e.schema))throw new Wo("invalid schema specified.");if(si.isEmptyOrZeroLength(e.table))throw new Wo("invalid table specified.");if(!Array.isArray(e.records))throw new Wo("records must be an array");let t=LQ()[e.schema]?.[e.table];if(si.isEmpty(t))throw new Wo(`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&&si.isEmptyOrZeroLength(o[r]))throw kw.error("a valid hash attribute must be provided with update record:",o),new Wo("a valid hash attribute must be provided with update record, check log for more info");if(!si.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw kw.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Wo(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!si.isEmpty(o[r])&&o[r]!==""&&n.has(si.autoCast(o[r]))&&(o.skip=!0),n.add(si.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(DQ,"insertUpdateValidate")});var iu=g((Wpe,Vw)=>{"use strict";var PQ=C().OPERATIONS_ENUM,zS=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=PQ.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Vw.exports=zS});var lu=g((zpe,Yw)=>{"use strict";var jpe=iu(),Cf=C(),XS=Q(),JS=G(),MQ=require("uuid"),{handleHDBError:ou,hdb_errors:UQ}=se(),{HDB_ERROR_MSGS:au,HTTP_STATUS_CODES:cu}=UQ;Yw.exports=vQ;function vQ(e,t,r){for(let s=0;s<t.length;s++)BQ(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];HQ(i,r,e.operation)}}a(vQ,"processRows");function BQ(e){if(Buffer.byteLength(String(e))>Cf.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ou(new Error,au.ATTR_NAME_LENGTH_ERR(e),cu.BAD_REQUEST,void 0,void 0,!0);if(XS.isEmptyOrZeroLength(e)||XS.isEmpty(e.trim()))throw ou(new Error,au.ATTR_NAME_NULLISH_ERR,cu.BAD_REQUEST,void 0,void 0,!0)}a(BQ,"validateAttribute");function HQ(e,t,r){if(!e.hasOwnProperty(t)||XS.isEmptyOrZeroLength(e[t])){if(r===Cf.OPERATIONS_ENUM.INSERT||r===Cf.OPERATIONS_ENUM.UPSERT){e[t]=MQ.v4();return}throw JS.error("Update transaction aborted due to record with no hash value:",e),ou(new Error,au.RECORD_MISSING_HASH_ERR,cu.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Cf.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw JS.error(e),ou(new Error,au.HASH_VAL_LENGTH_ERR,cu.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw JS.error(e),ou(new Error,au.INVALID_FORWARD_SLASH_IN_HASH_ERR,cu.BAD_REQUEST,void 0,void 0,!0)}a(HQ,"validateHash")});var Lf=g((Xpe,Ww)=>{"use strict";var Kw=Q(),qQ=C(),xQ=G(),GQ=wf(),FQ=If(),kQ=ii(),{SchemaEventMsg:$Q}=Jn(),VQ="already exists in";Ww.exports=YQ;async function YQ(e,t,r){if(Kw.isEmptyOrZeroLength(r))return r;let n=[];Kw.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 KQ(e,t.schema,t.name,i)})),s}a(YQ,"lmdbCheckForNewAttributes");async function KQ(e,t,r,n){let s=new FQ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await WQ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(VQ))xQ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(KQ,"createNewAttribute");async function WQ(e){let t;return t=await GQ(e),kQ.signalSchemaChange(new $Q(process.pid,qQ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(WQ,"createAttribute")});var fc=g((eme,Qw)=>{"use strict";var ZS=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}};Qw.exports=ZS});var zw=g((rme,jw)=>{"use strict";var QQ=fc(),jQ=C().OPERATIONS_ENUM,eT=class extends QQ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(jQ.INSERT,r,n,s,i),this.records=t}};jw.exports=eT});var Xw=g((sme,Jw)=>{"use strict";var zQ=fc(),JQ=C().OPERATIONS_ENUM,tT=class extends zQ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(JQ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};Jw.exports=tT});var eC=g((ome,Zw)=>{"use strict";var XQ=fc(),ZQ=C().OPERATIONS_ENUM,rT=class extends XQ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(ZQ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};Zw.exports=rT});var rC=g((cme,tC)=>{"use strict";var ej=fc(),tj=C().OPERATIONS_ENUM,nT=class extends ej{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(tj.DELETE,n,s,t,i),this.original_records=r}};tC.exports=nT});var uu=g((_me,oC)=>{"use strict";var ume=require("path"),nC=Ve(),rj=zw(),nj=Xw(),sj=eC(),ij=rC(),Ec=dt(),sC=Q(),{CONFIG_PARAMS:oj}=C(),iC=J();iC.initSync();var Df=C().OPERATIONS_ENUM,{getTransactionAuditStorePath:aj}=Je();oC.exports=cj;async function cj(e,t){if(iC.get(oj.LOGGING_AUDITLOG)===!1)return;let r=aj(e.schema,e.table),n=await nC.openEnvironment(r,e.table,!0),s=lj(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){nC.initializeDBIs(n,Ec.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ec.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Ec.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Ec.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),sC.isEmpty(s.user_name)||n.dbis[Ec.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Ec.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(cj,"writeTransaction");function lj(e,t){let r=sC.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Df.INSERT)return new rj(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Df.UPDATE)return new nj(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Df.UPSERT)return new sj(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Df.DELETE)return new ij(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(lj,"createTransactionObject")});var sT=g((Eme,aC)=>{"use strict";var uj=su(),fme=iu(),_u=C(),_j=lu(),dj=Ko().insertRecords,fj=Ve(),Ej=G(),hj=Lf(),{getSchemaPath:pj}=Je(),mj=uu();aC.exports=Sj;async function Sj(e){try{let{schema_table:t,attributes:r}=uj(e);_j(e,r,t.hash_attribute),e.schema!==_u.SYSTEM_SCHEMA_NAME&&(r.includes(_u.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(_u.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(_u.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(_u.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await hj(e.hdb_auth_header,t,r),s=pj(e.schema,e.table),i=await fj.openEnvironment(s,e.table),o=await dj(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await mj(e,o)}catch(c){Ej.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(Sj,"lmdbCreateRecords")});var uC=g((pme,lC)=>{"use strict";var cC=C(),Tj=sT(),gj=iu(),Rj=require("fs-extra"),{getSchemaPath:Aj}=Je();lC.exports=Oj;async function Oj(e){let t=[{name:e.schema,createddate:Date.now()}],r=new gj(cC.SYSTEM_SCHEMA_NAME,cC.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Tj(r),await Rj.mkdirp(Aj(e.schema))}a(Oj,"lmdbCreateSchema")});var dC=g((Sme,_C)=>{"use strict";var iT=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}};_C.exports=iT});var pC=g((Ome,hC)=>{"use strict";var fC=Ve(),oT=pr(),aT=Kr().LMDB_ERRORS_ENUM,Nj=dt(),EC=G(),gme=Q(),bj=require("lmdb"),yj=dC(),Ij=C(),{OVERFLOW_MARKER:Rme,MAX_SEARCH_KEY_LENGTH:Ame}=Nj,wj=Ij.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Cj(e,t,r,n){if(oT.validateEnv(e),t===void 0)throw new Error(aT.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(aT.IDS_REQUIRED):new Error(aT.IDS_MUST_BE_ITERABLE);try{let s=fC.listDBIs(e);fC.initializeDBIs(e,t,s);let i=new yj,o,c=[],l=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||n&&h[wj]>n){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,bj.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let A=s[S];if(!h.hasOwnProperty(A)||A===t)continue;let T=e.dbis[A],R=h[A];if(R!=null)try{let U=oT.getIndexedValues(R);if(U)for(let B=0,v=U.length;B<v;B++)T.remove(U[B],o)}catch{EC.warn(`cannot delete from attribute: ${A}, ${R}:${o}`)}}});c.push(m),l.push(o),i.original_records.push(h)}catch(h){EC.warn(h),i.skipped.push(o)}let _=[],u=await Promise.all(c);for(let f=0,E=u.length;f<E;f++)u[f]===!0?i.deleted.push(l[f]):(i.skipped.push(l[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=oT.getNextMonotonicTime(),i}catch(s){throw s}}a(Cj,"deleteRecords");hC.exports={deleteRecords:Cj}});var du=g((bme,SC)=>{"use strict";var hc=Q(),Lj=pC(),Dj=Ve(),{getSchemaPath:Pj}=Je(),Mj=uu(),Uj=G();SC.exports=vj;async function vj(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(hc.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(hc.isEmptyOrZeroLength(e.hash_values)&&!hc.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];hc.isEmpty(l)||e.hash_values.push(l)}}if(hc.isEmptyOrZeroLength(e.hash_values))return mC([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(hc.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=Pj(e.schema,e.table),i=await Dj.openEnvironment(s,e.table),o=await Lj.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Mj(e,o)}catch(c){Uj.error(`unable to write transaction due to ${c.message}`)}return mC(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(vj,"lmdbDeleteRecords");function mC(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(mC,"createDeleteResponse")});var lT=g((wme,TC)=>{"use strict";var Bj=C(),Ime=pr();function cT(e,t){let r=Object.create(null);if(t.length===1&&Bj.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(cT,"parseRow");function Hj(e,t,r,n){let s=cT(r,e);n.push(s)}a(Hj,"searchAll");function qj(e,t,r,n){let s=cT(r,e);n[t]=s}a(qj,"searchAllToMap");function xj(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(xj,"iterateDBI");function Qo(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(Qo,"pushResults");function Gj(e,t,r,n,s,i){t.toString().endsWith(e)&&Qo(t,r,n,s,i)}a(Gj,"endsWith");function Fj(e,t,r,n,s,i){t.toString().includes(e)&&Qo(t,r,n,s,i)}a(Fj,"contains");function kj(e,t,r,n,s,i){t>e&&Qo(t,r,n,s,i)}a(kj,"greaterThanCompare");function $j(e,t,r,n,s,i){t>=e&&Qo(t,r,n,s,i)}a($j,"greaterThanEqualCompare");function Vj(e,t,r,n,s,i){t<e&&Qo(t,r,n,s,i)}a(Vj,"lessThanCompare");function Yj(e,t,r,n,s,i){t<=e&&Qo(t,r,n,s,i)}a(Yj,"lessThanEqualCompare");TC.exports={parseRow:cT,searchAll:Hj,searchAllToMap:qj,iterateDBI:xj,endsWith:Gj,contains:Fj,greaterThanCompare:kj,greaterThanEqualCompare:$j,lessThanCompare:Vj,lessThanEqualCompare:Yj,pushResults:Qo}});var pc=g((Mme,yC)=>{"use strict";var Qi=Ve(),Lme=G(),Xr=pr(),Pf=dt(),ft=Kr().LMDB_ERRORS_ENUM,Dme=Q(),Kj=C(),Mf=lT(),{parseRow:Wj}=Mf,Pme=require("lmdb"),{OVERFLOW_MARKER:gC,MAX_SEARCH_KEY_LENGTH:Qj}=Pf;function RC(e,t,r,n=!1,s=void 0,i=void 0){return jo(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(RC,"iterateFullIndex");function fu(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return jo(e,t,r,(u,d,f,E)=>{let T={transaction:u,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!_,exclusiveStart:i===!0?_:l};return E===r?(T.values=!1,d.getRange(T).map(R=>({value:R}))):d.getRange(T)})}a(fu,"iterateRangeBetween");function jo(e,t,r,n){let s=e.database||e,i=Qi.openDBI(s,r);i[Pf.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Qi.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(jo,"setupTransaction");function AC(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(gC)){if(!s)if(r)s=Qi.openDBI(e,r);else{let l=Qi.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=Qi.openDBI(e,l[_]),!s[Pf.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(AC,"getOverflowCheck");function jj(e,t,r,n=!1,s=void 0,i=void 0){if(Xr.validateEnv(e),t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);return jo(e,t,t,(o,c,l)=>(Uf(r),r=Eu(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>Wj(_.value,r))))}a(jj,"searchAll");function zj(e,t,r,n=!1,s=void 0,i=void 0){if(Xr.validateEnv(e),t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);Uf(r),r=Eu(e.database||e,r);let o=new Map;for(let{key:c,value:l}of RC(e,t,t,n,s,i))o.set(c,Mf.parseRow(l,r));return o}a(zj,"searchAllToMap");function Jj(e,t,r=!1,n=void 0,s=void 0){if(Xr.validateEnv(e),t===void 0)throw new Error(ft.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=RC(e,void 0,t,r,n,s),c=o.transaction,l=AC(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(Jj,"iterateDBI");function Xj(e,t){if(Xr.validateEnv(e),t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);return Qi.statDBI(e,t).entryCount}a(Xj,"countAll");function Zj(e,t,r,n,s=!1,i=void 0,o=void 0){return ji(e,r,n),jo(e,t,r,(c,l,_,u)=>(n=Xr.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(Zj,"equals");function ez(e,t,r){return ji(e,t,r),Qi.openDBI(e,t).getValuesCount(r)}a(ez,"count");function tz(e,t,r,n,s=!1,i=void 0,o=void 0){return ji(e,r,n),jo(e,null,r,(c,l)=>{n=Xr.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let u;if(s===!0){let d;for(let f of l.getKeys({transaction:c,start:n}))if(!f.startsWith(n)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),u=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(n))return f;if(_===!0)return u.DONE}}),u.filter(f=>f)}else return u=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return u.DONE}),_?u:u.filter(d=>d)})}a(tz,"startsWith");function rz(e,t,r,n,s=!1,i=void 0,o=void 0){return OC(e,t,r,n,s,i,o,!0)}a(rz,"endsWith");function OC(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ji(e,r,n),jo(e,null,r,(l,_,u,d)=>{let f=AC(u,l,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(E=>{let h=E.toString();return h.endsWith(gC)?_.getValues(E,{transaction:l}).map(m=>{let S=f(E,m);if(c?S.endsWith(n):S.includes(n))return{key:S,value:m}}).filter(m=>m):(c?h.endsWith(n):h.includes(n))?_[Pf.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:l}).map(m=>({key:E,value:m})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(OC,"contains");function nz(e,t,r,n,s=!1,i=void 0,o=void 0){ji(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),fu(e,t,r,n,l,s,i,o,!0,!1)}a(nz,"greaterThan");function sz(e,t,r,n,s=!1,i=void 0,o=void 0){ji(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),fu(e,t,r,n,l,s,i,o,!1,!1)}a(sz,"greaterThanEqual");function iz(e,t,r,n,s=!1,i=void 0,o=void 0){ji(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),fu(e,t,r,l,n,s,i,o,!1,!0)}a(iz,"lessThan");function oz(e,t,r,n,s=!1,i=void 0,o=void 0){ji(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),fu(e,t,r,l,n,s,i,o,!1,!1)}a(oz,"lessThanEqual");function az(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Xr.validateEnv(e),r===void 0)throw new Error(ft.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ft.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ft.END_VALUE_REQUIRED);if(n=Xr.convertKeyValueToWrite(n),s=Xr.convertKeyValueToWrite(s),n>s)throw new Error(ft.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return fu(e,t,r,n,s,i,o,c)}a(az,"between");function cz(e,t,r,n){Xr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);if(Uf(r),r=Eu(s,r),n===void 0)throw new Error(ft.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Mf.parseRow(c,r)),o}a(cz,"searchByHash");function lz(e,t,r){Xr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ft.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(lz,"checkHashExists");function uz(e,t,r,n,s=[]){return bC(e,t,r,n,s),NC(e,t,r,n,s).map(i=>i[1])}a(uz,"batchSearchByHash");function _z(e,t,r,n,s=[]){bC(e,t,r,n,s);let i=new Map;for(let[o,c]of NC(e,t,r,n,s))i.set(o,c);return i}a(_z,"batchSearchByHashToMap");function NC(e,t,r,n,s=[]){return jo(e,t,t,(i,o,c)=>{r=Eu(c,r);let l=r.length<3;return n.map(_=>{let u=c.dbis[t].get(_,{transaction:i,lazy:l});if(u)return[_,Mf.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(NC,"batchHashSearch");function bC(e,t,r,n,s){if(Xr.validateEnv(e),t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);if(Uf(r),n==null)throw new Error(ft.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ft.IDS_MUST_BE_ITERABLE)}a(bC,"initializeBatchSearchByHash");function Uf(e){if(!Array.isArray(e))throw e===void 0?new Error(ft.FETCH_ATTRIBUTES_REQUIRED):new Error(ft.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Uf,"validateFetchAttributes");function ji(e,t,r){if(Xr.validateEnv(e),t===void 0)throw new Error(ft.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ft.SEARCH_VALUE_REQUIRED);if(r?.length>Qj)throw new Error(ft.SEARCH_VALUE_TOO_LARGE)}a(ji,"validateComparisonFunctions");function Eu(e,t){return t.length===1&&Kj.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Qi.listDBIs(e)),t}a(Eu,"setGetWholeRowAttributes");yC.exports={searchAll:jj,searchAllToMap:zj,count:ez,countAll:Xj,equals:Zj,startsWith:tz,endsWith:rz,contains:OC,searchByHash:cz,setGetWholeRowAttributes:Eu,batchSearchByHash:uz,batchSearchByHashToMap:_z,checkHashExists:lz,iterateDBI:Jj,greaterThan:nz,greaterThanEqual:sz,lessThan:iz,lessThanEqual:oz,between:az}});var mc=g((vme,DC)=>{var IC=require("lodash"),wC=nt(),he=require("joi"),dz=Q(),{hdb_schema_table:hu,checkValidTable:CC,hdb_table:LC,hdb_database:vf}=Ns(),{handleHDBError:fz,hdb_errors:Ez}=se(),{getDatabases:hz}=(ge(),ie(Ge)),{HTTP_STATUS_CODES:pz}=Ez,mz=he.object({database:vf,schema:vf,table:LC,search_attribute:hu,search_value:he.any().required(),get_attributes:he.array().min(1).items(he.alternatives(hu,he.object())).optional(),desc:he.bool(),limit:he.number().integer().min(1),offset:he.number().integer().min(0)}),Sz=he.object({database:vf,schema:vf,table:LC,operator:he.string().valid("and","or").default("and").lowercase(),offset:he.number().integer().min(0),limit:he.number().integer().min(1),get_attributes:he.array().min(1).items(he.alternatives(hu,he.object())).optional(),sort:he.object({attribute:he.alternatives(hu,he.array().min(1)),descending:he.bool().optional()}).optional(),conditions:he.array().min(1).items(he.alternatives(he.object({operator:he.string().valid("and","or").default("and").lowercase(),conditions:he.array()}),he.object({search_attribute:he.alternatives(hu,he.array().min(1)),search_type:he.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:he.when("search_type",{switch:[{is:"equals",then:he.any()},{is:"between",then:he.array().items(he.alternatives([he.string(),he.number()])).length(2)}],otherwise:he.alternatives(he.string(),he.number())}).required()}))).required()});DC.exports=function(e,t){let r=null;switch(t){case"value":r=wC.validateBySchema(e,mz);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(CC("database",e.schema)),i(CC("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=wC.validateBySchema(e,Sz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=dz.checkGlobalSchemaTable(e.schema,e.table);if(s)return fz(new Error,s,pz.NOT_FOUND);let o=hz()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(u=>{for(let d=0,f=u.conditions.length;d<f;d++){let E=u.conditions[d];E.conditions?l(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&l(e);let _=IC.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!Array.isArray(u)&&!IC.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 uT=g((Hme,PC)=>{"use strict";var Tz=Ve(),gz=mc(),{getSchemaPath:Rz}=Je();PC.exports=Az;function Az(e){let t=gz(e,"hashes");if(t)throw t;let r=Rz(e.schema,e.table);return Tz.openEnvironment(r,e.table)}a(Az,"initialize")});var _T=g((xme,MC)=>{"use strict";var Oz=pc(),Nz=uT();MC.exports=bz;async function bz(e){let t=await Nz(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Oz.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(bz,"lmdbGetDataByHash")});var Sc=g((Fme,UC)=>{"use strict";var dT=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};UC.exports=dT});var BC=g((Vme,vC)=>{"use strict";var $me=Sc(),yz=pc(),Iz=uT();vC.exports=wz;async function wz(e){let t=await Iz(e),r=global.hdb_schema[e.schema][e.table];return yz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(wz,"lmdbSearchByHash")});var Xn=g((Kme,HC)=>{"use strict";var fT=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}};HC.exports=fT});var Bf=g((Qme,$C)=>{"use strict";var rr=pc(),Cz=Ve(),Lz=Q(),pe=dt(),zo=C(),Dz=ri(),qC=Kr().LMDB_ERRORS_ENUM,{getSchemaPath:Pz}=Je(),oi=zo.SEARCH_WILDCARDS;async function Mz(e,t,r){let n;e.schema===zo.SYSTEM_SCHEMA_NAME?n=Dz[e.table]:n=global.hdb_schema[e.schema][e.table];let s=kC(e,n.hash_attribute,r,t);return GC(e,s,n.hash_attribute,r)}a(Mz,"prepSearch");async function GC(e,t,r,n){let s=Pz(e.schema,e.table),i=await Cz.openEnvironment(s,e.table),o=FC(i,e,t,r),c=o.transaction||i;if([pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,pe.SEARCH_TYPES.SEARCH_ALL,pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Uz(e,r)===!1){let u=e.search_attribute;if(u===r)return n?xC(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[u]:f.key}),"toObject");return n?xC(o,d):o.map(d)}let _=e.search_attribute===r?o.map(u=>u.key):o.map(u=>u.value);return n===!0?rr.batchSearchByHashToMap(c,r,e.get_attributes,_):rr.batchSearchByHash(c,r,e.get_attributes,_)}a(GC,"executeSearch");function FC(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case pe.SEARCH_TYPES.EQUALS:s=rr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.CONTAINS:s=rr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.ENDS_WITH:case pe.SEARCH_TYPES._ENDS_WITH:s=rr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.STARTS_WITH:case pe.SEARCH_TYPES._STARTS_WITH:s=rr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return rr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return rr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.SEARCH_ALL:return rr.searchAll(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return rr.searchAllToMap(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.BETWEEN:s=rr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case pe.SEARCH_TYPES.GREATER_THAN:case pe.SEARCH_TYPES._GREATER_THAN:s=rr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.GREATER_THAN_EQUAL:case pe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=rr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.LESS_THAN:case pe.SEARCH_TYPES._LESS_THAN:s=rr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.LESS_THAN_EQUAL:case pe.SEARCH_TYPES._LESS_THAN_EQUAL:s=rr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(FC,"searchByType");function xC(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(xC,"createMapFromIterable");function Uz(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let 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(Uz,"checkToFetchMore");function kC(e,t,r,n){if(Lz.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),oi.indexOf(s)>-1)return r===!0?pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:pe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(oi[0])<0&&s.indexOf(oi[1])<0)return c===!0?r===!0?pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:pe.SEARCH_TYPES.EQUALS;if(oi.indexOf(i)>=0&&oi.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),pe.SEARCH_TYPES.CONTAINS;if(oi.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),pe.SEARCH_TYPES.ENDS_WITH;if(oi.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),pe.SEARCH_TYPES.STARTS_WITH;if(s.includes(oi[0])||s.includes(oi[1]))return pe.SEARCH_TYPES.EQUALS;throw new Error(qC.UNKNOWN_SEARCH_TYPE)}else switch(n){case zo.VALUE_SEARCH_COMPARATORS.BETWEEN:return pe.SEARCH_TYPES.BETWEEN;case zo.VALUE_SEARCH_COMPARATORS.GREATER:return pe.SEARCH_TYPES.GREATER_THAN;case zo.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return pe.SEARCH_TYPES.GREATER_THAN_EQUAL;case zo.VALUE_SEARCH_COMPARATORS.LESS:return pe.SEARCH_TYPES.LESS_THAN;case zo.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return pe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(qC.UNKNOWN_SEARCH_TYPE)}}a(kC,"createSearchTypeFromSearchObject");$C.exports={executeSearch:GC,createSearchTypeFromSearchObject:kC,prepSearch:Mz,searchByType:FC}});var YC=g((Jme,VC)=>{"use strict";var zme=Xn(),vz=mc(),Bz=Q(),Hz=C(),qz=Bf();VC.exports=xz;function xz(e,t){if(!Bz.isEmpty(t)&&Hz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=vz(e,"value");if(n)throw n;return qz.prepSearch(e,t,!0)}a(xz,"lmdbGetDataByValue")});var pu=g((eSe,KC)=>{"use strict";var Zme=Xn(),Gz=mc(),Fz=Q(),kz=C(),$z=Bf();KC.exports=Vz;async function Vz(e,t){if(!Fz.isEmpty(t)&&kz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Gz(e,"value");if(n)throw n;return $z.prepSearch(e,t,!1)}a(Vz,"lmdbSearchByValue")});var QC=g((nSe,WC)=>{"use strict";var rSe=dt(),ET=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}},hT=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},pT=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};WC.exports={SearchByConditionsObject:ET,SearchCondition:hT,SortAttribute:pT}});var ZC=g((aSe,XC)=>{"use strict";var iSe=QC().SearchByConditionsObject,Yz=Xn(),Kz=mc(),mT=pc(),Hf=dt(),{Resource:oSe}=(Wn(),ie(pS)),JC=Bf(),Wz=lT(),Qz=require("lodash"),{getSchemaPath:jz}=Je(),jC=Ve(),{handleHDBError:zz,hdb_errors:Jz}=se(),{HTTP_STATUS_CODES:Xz}=Jz,Zz=1e8;XC.exports=eJ;async function eJ(e){let t=Kz(e,"conditions");if(t)throw zz(t,t.message,Xz.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=jz(e.schema,e.table),n=await jC.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)jC.openDBI(n,_.search_attribute);let i=Qz.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===Hf.SEARCH_TYPES.EQUALS?_.estimated_count=mT.count(n,_.search_attribute,_.search_value):u===Hf.SEARCH_TYPES.CONTAINS||u===Hf.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=Zz}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await zC(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(JC.filterByType),d=u.length,f=mT.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(l=l.filter(E=>{for(let h=0;h<d;h++)if(!u[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(E=>Wz.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await zC(o,e,f,s.hash_attribute);c=c.concat(E)}let _=new Set,u=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(u,e.limit&&e.limit+u),l=mT.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(eJ,"lmdbSearchByConditions");async function zC(e,t,r,n){let s=new Yz(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===Hf.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,JC.searchByType(e,s,i,n).map(o=>o.value)}a(zC,"executeConditionSearch")});var mu=g((lSe,eL)=>{"use strict";var tJ=C().OPERATIONS_ENUM,ST=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=tJ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};eL.exports=ST});var TT=g((_Se,cL)=>{"use strict";var sL=Xn(),iL=mu(),oL=pu(),aL=du(),gr=C(),tL=Q(),rL=Ve(),{getTransactionAuditStorePath:rJ,getSchemaPath:nJ}=Je(),nL=G();cL.exports=sJ;async function sJ(e){try{if(tL.isEmpty(global.hdb_schema[e.schema])||tL.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await iJ(e),await oJ(e);let t=nJ(e.schema,e.table);try{await rL.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")nL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=rJ(e.schema,e.table);await rL.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")nL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(sJ,"lmdbDropTable");async function iJ(e){let t=new sL(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await oL(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 iL(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await aL(s)}a(iJ,"deleteAttributesFromSystem");async function oJ(e){let t=new sL(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await oL(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 iL(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await aL(s)}catch(i){throw i}}a(oJ,"dropTableFromSystem")});var uL=g((fSe,lL)=>{"use strict";var aJ=require("fs-extra"),cJ=Xn(),lJ=Sc(),uJ=mu(),_J=TT(),dJ=du(),fJ=_T(),EJ=pu(),ai=C(),{getSchemaPath:hJ}=Je(),{handleHDBError:pJ,hdb_errors:mJ}=se(),{HDB_ERROR_MSGS:SJ,HTTP_STATUS_CODES:TJ}=mJ;lL.exports=gJ;async function gJ(e){let t;try{t=await RJ(e.schema);let r=new cJ(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ai.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ai.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await EJ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await _J(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new uJ(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await dJ(s);let i=hJ(t);await aJ.remove(i)}catch(r){throw r}}a(gJ,"lmdbDropSchema");async function RJ(e){let t=new lJ(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ai.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await fJ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw pJ(new Error,SJ.SCHEMA_NOT_FOUND(e),TJ.NOT_FOUND,void 0,void 0,!0);return n}a(RJ,"validateDropSchema")});var Su=g((hSe,_L)=>{"use strict";var gT=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};_L.exports=gT});var AT=g((SSe,dL)=>{"use strict";var AJ=require("fs-extra"),qf=Ve(),{getTransactionAuditStorePath:OJ}=Je(),RT=dt(),mSe=Su();dL.exports=NJ;async function NJ(e){let t;try{let r=OJ(e.schema,e.table);await AJ.mkdirp(r),t=await qf.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{qf.createDBI(t,RT.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),qf.createDBI(t,RT.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),qf.createDBI(t,RT.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(NJ,"createTransactionsAuditEnvironment")});var pL=g((gSe,hL)=>{"use strict";var OT=C(),fL=Ve(),bJ=Ko(),{getSystemSchemaPath:yJ,getSchemaPath:IJ}=Je(),wJ=ri(),CJ=wf(),NT=If(),LJ=G(),DJ=AT(),yT=wJ.hdb_table,EL=[];for(let e=0;e<yT.attributes.length;e++)EL.push(yT.attributes[e].attribute);hL.exports=PJ;async function PJ(e,t){let r=IJ(t.schema,t.table),n=new NT(t.schema,t.table,OT.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new NT(t.schema,t.table,OT.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new NT(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await fL.createEnvironment(r,t.table),e!==void 0){let o=await fL.openEnvironment(yJ(),OT.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await bJ.insertRecords(o,yT.hash_attribute,EL,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await bT(n),await bT(s),await bT(i)}await DJ(t)}catch(o){throw o}}a(PJ,"lmdbCreateTable");async function bT(e){try{await CJ(e)}catch(t){LJ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(bT,"createAttribute")});var SL=g((ASe,mL)=>{"use strict";var MJ=su(),UJ=lu(),vJ=Lf(),Tu=C(),BJ=Ko().updateRecords,HJ=Ve(),{getSchemaPath:qJ}=Je(),xJ=uu(),GJ=G();mL.exports=FJ;async function FJ(e){try{let{schema_table:t,attributes:r}=MJ(e);UJ(e,r,t.hash_attribute),e.schema!==Tu.SYSTEM_SCHEMA_NAME&&(r.includes(Tu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Tu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Tu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Tu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await vJ(e.hdb_auth_header,t,r),s=qJ(e.schema,e.table),i=await HJ.openEnvironment(s,e.table),o=await BJ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await xJ(e,o)}catch(c){GJ.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(FJ,"lmdbUpdateRecords")});var gL=g((NSe,TL)=>{"use strict";var kJ=C().OPERATIONS_ENUM,IT=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=kJ.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};TL.exports=IT});var AL=g((ISe,RL)=>{"use strict";var ySe=gL(),$J=su(),VJ=lu(),YJ=Lf(),gu=C(),KJ=Ko().upsertRecords,WJ=Ve(),{getSchemaPath:QJ}=Je(),jJ=uu(),zJ=G(),{handleHDBError:JJ,hdb_errors:XJ}=se();RL.exports=ZJ;async function ZJ(e){let t;try{t=$J(e)}catch(l){throw JJ(l,l.message,XJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;VJ(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 YJ(e.hdb_auth_header,r,n),i=QJ(e.schema,e.table),o=await WJ.openEnvironment(i,e.table),c=await KJ(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await jJ(e,c)}catch(l){zJ.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(ZJ,"lmdbUpsertRecords")});var NL=g((CSe,OL)=>{"use strict";var wT=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};OL.exports=wT});var yL=g((DSe,bL)=>{"use strict";var CT=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}};bL.exports=CT});var CL=g((USe,wL)=>{"use strict";var LT=Ve(),{getTransactionAuditStorePath:e2}=Je(),MSe=NL(),Ru=dt(),t2=Q(),IL=yL(),r2=require("util").promisify,n2=r2(setTimeout),s2=1e4,i2=100;wL.exports=o2;async function o2(e){let t=e2(e.schema,e.table),r=await LT.openEnvironment(t,e.table,!0),n=LT.listDBIs(r);LT.initializeDBIs(r,Ru.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new IL;do s=await a2(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await n2(i2);while(s.transactions_deleted>0);return i}a(o2,"deleteAuditLogsBefore");async function a2(e,t){let r=new IL;try{let n=e.dbis[Ru.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[Ru.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];t2.isEmpty(c)||(s=e.dbis[Ru.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Ru.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>s2)break}return await s,r}catch(n){throw n}}a(a2,"deleteTransactions")});var DL=g((BSe,LL)=>{"use strict";var DT=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};LL.exports=DT});var ML=g((xSe,PL)=>{"use strict";var c2=Xn(),l2=mu(),qSe=DL(),ys=C(),u2=Q(),PT=Ve(),_2=ri(),d2=pu(),f2=du(),{getSchemaPath:E2}=Je();PL.exports=h2;async function h2(e,t=!0){let r;e.schema===ys.SYSTEM_SCHEMA_NAME?r=_2[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await m2(e),s=E2(e.schema,e.table),i=await PT.openEnvironment(s,e.table);return t===!0&&await p2(e,i,r.hash_attribute),PT.dropDBI(i,e.attribute),n}a(h2,"lmdbDropAttribute");async function p2(e,t,r){let n=PT.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(p2,"removeAttributeFromAllObjects");async function m2(e){let t=new c2(ys.SYSTEM_SCHEMA_NAME,ys.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ys.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ys.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ys.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await d2(t)).filter(o=>o[ys.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(u2.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[ys.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new l2(ys.SYSTEM_SCHEMA_NAME,ys.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return f2(i)}a(m2,"dropAttributeFromSystem")});var xL=g((kSe,qL)=>{"use strict";var MT=Ve(),Tc=dt(),FSe=pr(),UT=C(),UL=Q(),{getTransactionAuditStorePath:S2}=Je(),T2=pc(),xf=fc(),g2=G();qL.exports=R2;async function R2(e){let t=S2(e.schema,e.table),r=await MT.openEnvironment(t,e.table,!0),n=MT.listDBIs(r);MT.initializeDBIs(r,Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case UT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return vL(r,e.search_values);case UT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,O2(r,e.search_values,s);case UT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return A2(r,e.search_values);default:return vL(r)}}a(R2,"readAuditLog");function vL(e,t=[0,Date.now()]){UL.isEmpty(t[0])&&(t[0]=0),UL.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new xf,s))}a(vL,"searchTransactionsByTimestamp");function A2(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[Tc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,HL(e,i))}return Object.fromEntries(r)}a(A2,"searchTransactionsByUsername");function O2(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=T2.equals(e,Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Tc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of u){let f=Number(d);n.has(f)?n.get(f).push(_.toString()):n.set(f,[_.toString()])}}let s=Array.from(n.keys()),i=HL(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);BL(l,"records",r,u,o),BL(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(O2,"searchTransactionsByHashValues");function BL(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let _=s.get(l),u=_[_.length-1];if(u.timestamp===i)u[t]=[c];else{let d=new xf(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new xf(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(l,[_])}}}a(BL,"loopRecords");function HL(e,t){let r=[];try{let n=e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new xf,i);r.push(o)}}catch(i){g2.warn(i)}return r}catch(n){throw n}}a(HL,"batchSearchTransactions")});var FL=g((KSe,GL)=>{"use strict";var{getSchemaPath:VSe}=Je(),YSe=Ve(),{database:N2}=(ge(),ie(Ge));GL.exports={writeTransaction:b2};async function b2(e,t,r){return N2({database:e,table:t}).transaction(r)}a(b2,"writeTransaction")});var YL=g((QSe,VL)=>{"use strict";var{getSchemaPath:kL}=Je(),$L=Ve();VL.exports={flush:y2,resetReadTxn:I2};async function y2(e,t){return(await $L.openEnvironment(kL(e,t),t.toString())).flushed}a(y2,"flush");async function I2(e,t){try{(await $L.openEnvironment(kL(e,t),t.toString())).resetReadTxn()}catch{}}a(I2,"resetReadTxn")});var jL=g((zSe,QL)=>{"use strict";var{Readable:w2}=require("stream"),{getDatabases:C2}=(ge(),ie(Ge)),{readSync:L2,openSync:D2,createReadStream:KL}=require("fs"),{open:P2}=require("lmdb"),WL=pf(),M2=Sf(),{AUDIT_STORE_OPTIONS:U2}=(Go(),ie(dI)),{INTERNAL_DBIS_NAME:v2,AUDIT_STORE_NAME:B2}=dt();QL.exports=q2;var vT=32768,H2=100;async function q2(e){let t=e.database||e.schema||"data",r=C2()[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=P2({noSync:!0,maxDbs:M2.MAX_DBS}),f,E=d.openDB(v2,new WL(!1)),h=u.useReadTransaction(),m=0,S=a(async function(T,R){R.encoding="binary",R.encoder=void 0;let U=d.openDB(T,R),B=u.openDB(T,R);for(let{key:v,version:P,value:K}of B.getRange({transaction:h,versions:B.useVersions}))f=U.put(v,K,P),m++%H2===0&&(await new Promise(V=>setTimeout(V,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:T,value:R}of u.getRange({transaction:h,start:!1}))if(s.some(U=>T.startsWith?.(U+"/"))){E.put(T,R);let[,U]=T.split("/"),B=!U,v=new WL(!B,B);await S(T,v)}e.include_audit&&await S(B2,Object.assign({},U2)),await f;let A=KL(d.path);return A.headers=l(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=D2(o.path);return o.transaction(()=>{let _=Buffer.alloc(vT);L2(c,_,0,vT),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=KL(null,{fd:c,start:vT}),f=new w2.from(async function*(){yield _;for await(let E of d)u.openTimer&&(u.openTimer=0),yield E;u.done()}());return f.headers=l(),f});function l(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(q2,"getBackup")});var XL=g((XSe,JL)=>{"use strict";var x2=G(),{handleHDBError:G2}=se(),F2=hw(),k2=wf(),$2=sT(),V2=uC(),Y2=du(),K2=_T(),W2=BC(),Q2=YC(),j2=pu(),z2=ZC(),J2=uL(),X2=pL(),Z2=SL(),e4=AL(),t4=CL(),r4=TT(),n4=ML(),s4=xL(),i4=FL(),zL=YL(),o4=jL(),BT=class extends F2{static{a(this,"LMDBBridge")}async searchByConditions(t){return z2(t)}async getDataByHash(t){return await K2(t)}async searchByHash(t){return await W2(t)}async getDataByValue(t,r){return await Q2(t,r)}async searchByValue(t){return await j2(t)}async createSchema(t){return await V2(t)}async dropSchema(t){return await J2(t)}async createTable(t,r){return await X2(t,r)}async dropTable(t){return await r4(t)}async createAttribute(t){return await k2(t)}async createRecords(t){return await $2(t)}async updateRecords(t){return await Z2(t)}async upsertRecords(t){try{return await e4(t)}catch(r){throw G2(r,null,null,x2.ERR,r)}}async deleteRecords(t){return await Y2(t)}async dropAttribute(t){return await n4(t)}async deleteAuditLogsBefore(t){return await t4(t)}async readAuditLog(t){return await s4(t)}writeTransaction(t,r,n){return i4.writeTransaction(t,r,n)}flush(t,r){return zL.flush(t,r)}resetReadTxn(t,r){return zL.resetReadTxn(t,r)}getBackup(t){return o4(t)}};JL.exports=BT});var aD={};$e(aD,{ResourceBridge:()=>xT});function GT({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 eD(e,t){let r=Is(e),n=GT(e,r);if(!r)throw new Zn.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user},o;et(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let _=c[l++],u=await r.get({id:_,lazy:s,select:n},i);return u=u&&sf(u),t?{value:{key:_,value:u}}:{value:u}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function Is(e){let t=e.database||e.schema||c4,r=es()[t];if(!r)throw(0,Zn.handleHDBError)(new Error,a4.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function tD(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*rD(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 nD,Gf,Zn,sD,iD,ts,HT,qT,oD,a4,c4,l4,u4,ZL,xT,cD=Oe(()=>{"use strict";nD=q(XL()),Gf=q(mc()),Zn=q(se());ge();sD=q(su()),iD=q(lu()),ts=q(C()),HT=q(ii()),qT=q(Jn()),oD=q(Q());Vo();of();({HDB_ERROR_MSGS:a4}=Zn.hdb_errors),c4="data",l4=1e4,u4=10,xT=class extends nD.default{static{a(this,"ResourceBridge")}constructor(t){super(t),ZL=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,Gf.default)(t,"conditions");if(r)throw(0,Zn.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Is(t);if(!n)throw new Zn.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:GT(t,n),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Zn.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Et({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await Is(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Is(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){Is(t).dropTable()}createSchema(t){return Au({database:t.schema,table:null}),HT.signalSchemaChange(new qT.SchemaEventMsg(process.pid,ts.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await FT(t.schema),HT.signalSchemaChange(new qT.SchemaEventMsg(process.pid,ts.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,ZL.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,sD.default)(t);(0,iD.default)(t,n,r.primaryKey);let s,i=es()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return et(o,async c=>{if(!i.schemaDefined){s=[];for(let u of n)i.attributes.find(f=>f.name==u)||s.push(u);s.length>0&&await i.addAttributes(s.map(u=>({name:u,indexed:!0})))}let l=[],_=[];for(let u of t.records){let d=await i.get(u[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(u[i.primaryKey]);continue}d&&(d=sf(d));for(let f in u)if(Object.prototype.hasOwnProperty.call(u,f)){let E=u[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,u[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(u),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(u,f)||(u[f]=d[f]);await i.put(u,o),l.push(u[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=es()[t.schema][t.table],n={user:t.hdb_user};return et(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 tD(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=es()[t.schema][t.table];if(!r.createdTimeProperty)throw new Zn.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:ts.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,oD.async_set_timeout)(u4),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%l4===0&&await _();return l.length>0&&await _(),s?tD(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Gf.default)(t,"hashes");if(r)throw r;return eD(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of eD(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&ts.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,Gf.default)(t,"value");if(n)throw n;let s=Is(t);if(!s)throw new Zn.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===ts.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:GT(t,s)})}async getDataByValue(t,r){let n=new Map,s=Is(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){Is({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Is(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Is(t),n={};switch(t.search_type){case ts.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 ts.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of rD(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return rD(r,t.search_values?.[0],t.search_values?.[1])}}};a(GT,"getSelect");a(eD,"getRecords");a(Is,"getTable");a(tD,"createDeleteResponse");a(rD,"groupRecordsInHistory")});var In=g((sTe,lD)=>{"use strict";var{ResourceBridge:_4}=(cD(),ie(aD)),d4=J();d4.initSync();var Ff;function f4(){return Ff||(Ff=new _4,Ff)}a(f4,"getBridge");lD.exports=f4()});var fD=g((oTe,dD)=>{"use strict";var uD=require("lodash"),Ou=require("mathjs"),E4=require("jsonata"),_D=Q();dD.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?uD.uniqWith(e,uD.isEqual):e,searchJSON:h4,mad:Nu.bind(null,Ou.mad),mean:Nu.bind(null,Ou.mean),mode:Nu.bind(null,Ou.mode),prod:Nu.bind(null,Ou.prod),median:Nu.bind(null,Ou.median)};function Nu(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(Nu,"aggregateFunction");function h4(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(_D.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),_D.isEmpty(this.__ala__.res[r])){let n=E4(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(h4,"searchJSON")});var hD=g((cTe,ED)=>{"use strict";var At=require("moment"),kT="YYYY-MM-DDTHH:mm:ss.SSSZZ";At.suppressDeprecationWarnings=!0;ED.exports={current_date:()=>At().utc().format("YYYY-MM-DD"),current_time:()=>At().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return At(e).utc().format("YYYY");case"month":return At(e).utc().format("MM");case"day":return At(e).utc().format("DD");case"hour":return At(e).utc().format("HH");case"minute":return At(e).utc().format("mm");case"second":return At(e).utc().format("ss");case"millisecond":return At(e).utc().format("SSS");default:break}},date:e=>At(e).utc().format(kT),date_format:(e,t)=>At(e).utc().format(t),date_add:(e,t,r)=>At(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>At(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=At(e).utc(),s=At(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>At().utc().valueOf(),get_server_time:()=>At().format(kT),offset_utc:(e,t)=>At(e).utc().utcOffset(t).format(kT)}});var TD=g((lTe,SD)=>{"use strict";var p4=require("@turf/area"),m4=require("@turf/length"),S4=require("@turf/circle"),T4=require("@turf/difference"),g4=require("@turf/distance"),R4=require("@turf/boolean-contains"),A4=require("@turf/boolean-equal"),O4=require("@turf/boolean-disjoint"),N4=require("@turf/helpers"),pD=C(),Se=Q(),ci=G();SD.exports={geoArea:b4,geoLength:y4,geoCircle:I4,geoDifference:w4,geoDistance:mD,geoNear:C4,geoContains:L4,geoEqual:D4,geoCrosses:P4,geoConvert:M4};function b4(e){if(Se.isEmpty(e))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e));try{return p4.default(e)}catch(t){return ci.trace(t,e),NaN}}a(b4,"geoArea");function y4(e,t){if(Se.isEmpty(e))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e));try{return m4.default(e,{units:t||"kilometers"})}catch(r){return ci.trace(r,e),NaN}}a(y4,"geoLength");function I4(e,t,r){if(Se.isEmpty(e))return NaN;if(Se.isEmpty(t))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e));try{return S4.default(e,t,{units:r||"kilometers"})}catch(n){return ci.trace(n,e,t),NaN}}a(I4,"geoCircle");function w4(e,t){if(Se.isEmpty(e))return NaN;if(Se.isEmpty(t))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return T4(e,t)}catch(r){return ci.trace(r,e,t),NaN}}a(w4,"geoDifference");function mD(e,t,r){if(Se.isEmpty(e))return NaN;if(Se.isEmpty(t))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return g4.default(e,t,{units:r||"kilometers"})}catch(n){return ci.trace(n,e,t),NaN}}a(mD,"geoDistance");function C4(e,t,r,n){if(Se.isEmpty(e)||Se.isEmpty(t))return!1;if(Se.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return mD(e,t,n)<=r}catch(s){return ci.trace(s,e,t),!1}}a(C4,"geoNear");function L4(e,t){if(Se.isEmpty(e)||Se.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return R4.default(e,t)}catch(r){return ci.trace(r,e,t),!1}}a(L4,"geoContains");function D4(e,t){if(Se.isEmpty(e)||Se.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return A4.default(e,t)}catch(r){return ci.trace(r,e,t),!1}}a(D4,"geoEqual");function P4(e,t){if(Se.isEmpty(e)||Se.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return!O4.default(e,t)}catch(r){return ci.trace(r,e,t),!1}}a(P4,"geoCrosses");function M4(e,t,r){if(Se.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Se.isEmpty(t))throw new Error("geo_type is required");if(Se.isEmpty(pD.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(pD.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Se.autoCastJSON(e)),N4[t](e,r)}a(M4,"geoConvert")});var kf=g((_Te,gD)=>{var Jo=fD(),Zr=hD(),ws=TD();gD.exports=e=>{e.aggr.mad=e.aggr.MAD=Jo.mad,e.aggr.mean=e.aggr.MEAN=Jo.mean,e.aggr.mode=e.aggr.MODE=Jo.mode,e.aggr.prod=e.aggr.PROD=Jo.prod,e.aggr.median=e.aggr.MEDIAN=Jo.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Jo.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Jo.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Zr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Zr.current_time,e.fn.extract=e.fn.EXTRACT=Zr.extract,e.fn.date=e.fn.DATE=Zr.date,e.fn.date_format=e.fn.DATE_FORMAT=Zr.date_format,e.fn.date_add=e.fn.DATE_ADD=Zr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Zr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Zr.date_diff,e.fn.now=e.fn.NOW=Zr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Zr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Zr.get_server_time,e.fn.getdate=e.fn.GETDATE=Zr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Zr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=ws.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=ws.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=ws.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=ws.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=ws.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=ws.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=ws.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=ws.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=ws.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=ws.geoNear}});var ND=g((dTe,OD)=>{"use strict";var bu=require("lodash"),Rr=require("alasql");Rr.options.cache=!1;var U4=kf(),RD=require("clone"),$f=require("recursive-iterator"),de=G(),De=Q(),gc=In(),v4=C(),{hdb_errors:B4}=se(),{getDatabases:AD}=(ge(),ie(Ge)),H4="IS NULL",rs="There was a problem performing this search. Please check the logs and try again.";U4(Rr);var $T=class{static{a(this,"SQLSearch")}constructor(t,r){if(De.isEmpty(t))throw de.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),De.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!De.isEmptyOrZeroLength(n))return de.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw de.error("Error thrown from checkEmptySQL in SQLSearch class method search."),de.error(n),new Error(rs)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw de.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),de.error(n),new Error(rs)}if(Object.keys(this.data).length===0)return de.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw de.error("Error thrown from processJoins in SQLSearch class method search."),de.error(n),new Error(rs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw de.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),de.error(n),new Error(rs)}try{return t=await this._finalSQL(),t}catch(n){throw de.error("Error thrown from finalSQL in SQLSearch class method search."),de.error(n),new Error(rs)}}_getColumns(){let t=new $f(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(RD(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=bu.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=AD()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(De.isEmpty(this.statement.where)){de.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new $f(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!De.isEmpty(r)&&r.right)if(De.isNotEmptyAndHasValue(r.right.value)){let n=De.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Rr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=De.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Rr.yy.LogicValue({value:i}):n instanceof Rr.yy.StringValue&&De.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Rr.yy.NumValue({value:i}))});if(t){de.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new $f(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(!De.isEmpty(v4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(De.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(De.isEmptyOrZeroLength(r.left.columnid)||De.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(De.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"=":!De.isEmpty(r.right.value)||!De.isEmpty(r.left.value)?n.add(De.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(De.isEmptyOrZeroLength(this.all_table_attributes)&&De.isEmptyOrZeroLength(this.statement.from)&&De.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&bu.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(De.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);De.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(De.isEmptyOrZeroLength(this.all_table_attributes)&&!De.isEmptyOrZeroLength(this.columns.columns))return t;if(De.isEmptyOrZeroLength(this.all_table_attributes)&&De.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Rr.promise(r)}catch(r){throw de.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),de.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(RD(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(De.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(H4)>-1&&this.tables.forEach(s=>{let i={columnid:AD()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=bu.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!De.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!De.isEmptyOrZeroLength(this.exact_search_values[_].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[_].values);let u=await gc.getDataByHash(c);for(let d of c.hash_values)u.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(u){throw de.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),de.error(u),new Error(rs)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async u=>{let d=Object.assign({},c);d.search_value=u;let f=await gc.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]):(this.data[i].__merged_data[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,E))}))}catch(u){throw de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),de.error(u),new Error(rs)}else if(!De.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!De.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let u=this.comparator_search_values[_].comparators;for(let d=0,f=u.length;d<f;d++){let E=u[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await gc.getDataByValue(c,E.operation);if(l)for(let[m]of h)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...n[i]],this._setMergedHashAttribute(i,m));else for(let[m,S]of h)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]):(this.data[i].__merged_data[m]=[...n[i]],this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,m))}}catch(u){throw de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),de.error(u),new Error(rs)}else try{c.search_attribute=s.attribute,c.search_value="*";let u=await gc.getDataByValue(c);if(l)for(let[d]of u)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of u)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]),this._setMergedHashAttribute(i,d))}catch(u){throw de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),de.error(u),new Error(rs)}}}_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 Rr.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 Rr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Rr.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 Rr.yy.FuncValue:new Rr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,m=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${m}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${m}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let u="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(u=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${_} ${u} ${d}`,h=this._convertColumnsToIndexes(E,s);f=await Rr.promise(h,t),t=null}catch(E){throw de.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),de.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let m=f[E];o.forEach(S=>{m[S.key]!==null&&m[S.key]!==void 0&&S.keys.add(m[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),m=bu.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,A=m.length;S<A;S++){let T=m[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[T]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new $f(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=bu.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw de.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),de.error(i),new Error(rs)}}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 gc.getDataByHash(c),_=s.columns.length;for(let u=0,d=o.length;u<d;u++){let f=o[u],E=l.get(f);for(let h=0;h<_;h++){let m=s.columns[h],S=E[m]===void 0?null:E[m];this.data[n].__merged_data[f].push(S)}}}}catch(r){throw de.error("Error thrown from getDataByHash function in SQLSearch class method getData."),de.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();de.trace(`Final SQL: ${s}`),n=await Rr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),de.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw de.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),de.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return de.error(B4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),de.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],_=new RegExp(`${l}.\`${o}\``,"g"),u=`${l}.[${c}]`;n=n.replace(_,u)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(l,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await gc.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw de.error("There was an error when processing this SQL operation. Check your logs"),de.error(o),new Error(rs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};OD.exports=$T});var Ar=g((ETe,bD)=>{"use strict";var q4=fw();bD.exports={searchByConditions:G4,searchByHash:F4,searchByValue:k4,search:$4};var VT=In(),{transformReq:YT}=Q(),x4=ND();async function G4(e){return YT(e),VT.searchByConditions(e)}a(G4,"searchByConditions");async function F4(e){YT(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of VT.searchByHash(e))r&&t.push(r);return t}a(F4,"searchByHash");async function k4(e){YT(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of VT.searchByValue(e))t.push(r);return t}a(k4,"searchByValue");function $4(e,t){try{let r=new q4(e);r.validate(),new x4(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a($4,"search")});var li=g((pTe,CD)=>{"use strict";var yu=require("crypto"),V4=J(),{CONFIG_PARAMS:Y4}=C(),ID="aes-256-cbc",K4=32,W4=16,KT=64,wD=32,Q4=KT+wD,yD=new Map;CD.exports={encrypt:j4,decrypt:z4,createNatsTableStreamName:J4};function j4(e){let t=yu.randomBytes(K4),r=yu.randomBytes(W4),n=yu.createCipheriv(ID,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(j4,"encrypt");function z4(e){let t=e.substr(0,KT),r=e.substr(KT,wD),n=e.substr(Q4,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=yu.createDecipheriv(ID,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(z4,"decrypt");function J4(e,t){let r=V4.get(Y4.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=yD.get(r);return n||(n=yu.createHash("md5").update(r).digest("hex"),yD.set(r,n)),n}a(J4,"createNatsTableStreamName")});var zi=g((TTe,DD)=>{"use strict";var STe=Ar(),Vf=G(),LD=yf(),X4=li(),Yf=Q(),{handleHDBError:Kf,hdb_errors:Z4}=se(),{HDB_ERROR_MSGS:Wf,HTTP_STATUS_CODES:WT}=Z4,e3=J();e3.initSync();var{getDatabases:QT}=(ge(),ie(Ge));DD.exports={describeAll:t3,describeTable:Qf,describeSchema:r3};async function t3(e){try{let t=Yf.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=QT(),i={},o={},c=[],l=e?.exact_count;for(let u in s){i[u]=!0,!t&&!n&&(o[u]=e.hdb_user.role.permission[u].describe);let d=s[u];for(let f in d)try{let E;if(t||n)E=await Qf({schema:u,table:f,exact_count:l});else if(r&&r[u].describe&&r[u].tables[f].describe){let h=r[u].tables[f].attribute_permissions;E=await Qf({schema:u,table:f,exact_count:l},h)}E&&c.push(E)}catch(E){Vf.error(E)}}let _={};for(let u in c)t||n?(_[c[u].schema]==null&&(_[c[u].schema]={}),_[c[u].schema][c[u].name]=c[u],i[c[u].schema]&&delete i[c[u].schema]):o[c[u].schema]&&(_[c[u].schema]==null&&(_[c[u].schema]={}),_[c[u].schema][c[u].name]=c[u],i[c[u].schema]&&delete i[c[u].schema]);for(let u in i)t||n?_[u]={}:o[u]&&(_[u]={});return _}catch(t){return Vf.error("Got an error in describeAll"),Vf.error(t),Kf(new Error,Wf.DESCRIBE_ALL_ERR)}}a(t3,"describeAll");async function Qf(e,t){Yf.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=LD.describe_table(e);if(i)throw i;let c=QT()[r];if(!c)throw Kf(new Error,Wf.SCHEMA_NOT_FOUND(e.schema),WT.NOT_FOUND);let l=c[n];if(!l)throw Kf(new Error,Wf.TABLE_NOT_FOUND(e.schema,e.table),WT.NOT_FOUND);function _(f){u.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let u=[];if(s){let f={};s.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),l.attributes.forEach(E=>{f[E.name]&&_(E)})}else l.attributes?.forEach(f=>_(f));let d={schema:r,name:l.tableName,hash_attribute:l.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:u};d.clustering_stream_name=X4.createNatsTableStreamName(d.schema,d.name);try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=l.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&l.indices.__updatedtime__)for(let h of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){Vf.warn(`unable to stat table dbi due to ${f}`)}return d}a(Qf,"descTable");async function r3(e){Yf.transformReq(e);let t=LD.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=QT()[n];if(!i)throw Kf(new Error,Wf.SCHEMA_NOT_FOUND(e.schema),WT.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Yf.isEmpty(l)||l.describe){let _=await Qf({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(r3,"describeSchema")});var wn=g((OTe,BD)=>{var n3=ri(),{callbackify:MD,promisify:s3}=require("util"),{getDatabases:UD}=(ge(),ie(Ge));BD.exports={setSchemaDataToGlobal:PD,getTableSchema:i3,getSystemSchema:o3,setSchemaDataToGlobalAsync:s3(PD)};var vD=zi(),RTe=MD(vD.describeAll),ATe=MD(vD.describeTable);function PD(e){global.hdb_schema=UD(),e&&e()}a(PD,"setSchemaDataToGlobal");function i3(e,t,r){let n=UD()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(i3,"getTableSchema");function o3(){return n3}a(o3,"getSystemSchema")});var Or=g((bTe,GD)=>{"use strict";var zf=jS(),jt=Q(),a3=require("util"),Jf=In(),c3=wn(),HD=G(),{handleHDBError:Xo,hdb_errors:l3}=se(),{HTTP_STATUS_CODES:Zo}=l3,u3=a3.promisify(c3.getTableSchema),_3="updated",qD="inserted",xD="upserted";GD.exports={insert:f3,update:E3,upsert:h3,validation:d3,flush:p3};async function d3(e){if(jt.isEmpty(e))throw new Error("invalid update parameters defined.");if(jt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(jt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await u3(e.schema,e.table),r=zf(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&&jt.isEmptyOrZeroLength(c[n]))throw HD.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(!jt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw HD.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!jt.isEmpty(c[n])&&c[n]!==""&&s.has(jt.autoCast(c[n]))&&(c.skip=!0),s.add(jt.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(d3,"validation");async function f3(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=zf(e);if(t)throw Xo(new Error,t.message,Zo.BAD_REQUEST);jt.transformReq(e);let r=jt.checkSchemaTableExist(e.schema,e.table);if(r)throw Xo(new Error,r,Zo.BAD_REQUEST);let n=await Jf.createRecords(e);return jf(qD,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(f3,"insertData");async function E3(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=zf(e);if(t)throw Xo(new Error,t.message,Zo.BAD_REQUEST);jt.transformReq(e);let r=jt.checkSchemaTableExist(e.schema,e.table);if(r)throw Xo(new Error,r,Zo.BAD_REQUEST);let n=await Jf.updateRecords(e);return jt.isEmpty(n.existing_rows)?jf(_3,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):jf(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(E3,"updateData");async function h3(e){if(e.operation!=="upsert")throw Xo(new Error,"invalid operation, must be upsert",Zo.INTERNAL_SERVER_ERROR);let t=zf(e);if(t)throw Xo(new Error,t.message,Zo.BAD_REQUEST);jt.transformReq(e);let r=jt.checkSchemaTableExist(e.schema,e.table);if(r)throw Xo(new Error,r,Zo.BAD_REQUEST);let n=await Jf.upsertRecords(e);return jf(xD,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(h3,"upsertData");function jf(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===qD?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===xD?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(jf,"returnObject");function p3(e){return jt.transformReq(e),Jf.flush(e.schema,e.table)}a(p3,"flush")});var zT=g((ITe,$D)=>{var m3=nt(),jT=require("joi"),{hdb_table:S3,hdb_database:FD}=Ns(),kD={schema:FD,database:FD,table:S3},T3={date:jT.date().iso().required()},g3={timestamp:jT.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};$D.exports=function(e,t){let r=t==="timestamp"?{...kD,...g3}:{...kD,...T3},n=jT.object(r);return m3.validateBySchema(e,n)}});var KD=g((wTe,YD)=>{var R3=nt(),JT=require("joi"),{hdb_table:A3,hdb_database:VD}=Ns(),O3=JT.object({schema:VD,database:VD,table:A3,hash_values:JT.array().required(),ids:JT.array()});YD.exports=function(e){return R3.validateBySchema(e,O3)}});var tg=g((CTe,WD)=>{"use strict";var XT=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}},ZT=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}},eg=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};WD.exports={InsertObject:XT,NoSQLSeachObject:ZT,DeleteResponseObject:eg}});var ra=g((DTe,XD)=>{"use strict";var jD=zT(),N3=KD(),ea=Q(),QD=require("moment"),zD=G(),{promisify:b3,callbackify:y3}=require("util"),ta=C(),I3=wn(),rg=b3(I3.getTableSchema),ng=In(),{DeleteResponseObject:w3}=tg(),{handleHDBError:Ji,hdb_errors:C3}=se(),{HDB_ERROR_MSGS:Xf,HTTP_STATUS_CODES:Xi}=C3,L3="records successfully deleted",D3=y3(JD);XD.exports={delete:D3,deleteRecord:JD,deleteFilesBefore:P3,deleteAuditLogsBefore:M3};async function P3(e){let t=jD(e,"date");if(t)throw Ji(t,t.message,Xi.BAD_REQUEST,void 0,void 0,!0);if(ea.transformReq(e),!QD(e.date,QD.ISO_8601).isValid())throw Ji(new Error,Xf.INVALID_DATE,Xi.BAD_REQUEST,ta.LOG_LEVELS.ERROR,Xf.INVALID_DATE,!0);let n=ea.checkSchemaTableExist(e.schema,e.table);if(n)throw Ji(new Error,n,Xi.NOT_FOUND,ta.LOG_LEVELS.ERROR,n,!0);let s=await ng.deleteRecordsBefore(e);if(await rg(e.schema,e.table),zD.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(P3,"deleteFilesBefore");async function M3(e){let t=jD(e,"timestamp");if(t)throw Ji(t,t.message,Xi.BAD_REQUEST,void 0,void 0,!0);if(ea.transformReq(e),isNaN(e.timestamp))throw Ji(new Error,Xf.INVALID_VALUE("Timestamp"),Xi.BAD_REQUEST,ta.LOG_LEVELS.ERROR,Xf.INVALID_VALUE("Timestamp"),!0);let r=ea.checkSchemaTableExist(e.schema,e.table);if(r)throw Ji(new Error,r,Xi.NOT_FOUND,ta.LOG_LEVELS.ERROR,r,!0);let n=await ng.deleteAuditLogsBefore(e);return await rg(e.schema,e.table),zD.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(M3,"deleteAuditLogsBefore");async function JD(e){e.ids&&(e.hash_values=e.ids);let t=N3(e);if(t)throw Ji(t,t.message,Xi.BAD_REQUEST,void 0,void 0,!0);ea.transformReq(e);let r=ea.checkSchemaTableExist(e.schema,e.table);if(r)throw Ji(new Error,r,Xi.NOT_FOUND,ta.LOG_LEVELS.ERROR,r,!0);try{await rg(e.schema,e.table);let n=await ng.deleteRecords(e);return ea.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${L3}`),n}catch(n){if(n.message===ta.SEARCH_NOT_FOUND_MESSAGE){let s=new w3;return s.message=ta.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(JD,"deleteRecord")});var Zf=g((MTe,tP)=>{var U3=require("crypto"),ZD=9;function v3(e){let t=H3(ZD),r=eP(e+t);return t+r}a(v3,"createHash");function B3(e,t){let r=e?.substr(0,ZD),n=r+eP(t+r);return e===n}a(B3,"validateHash");function H3(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(H3,"generateSalt");function eP(e){return U3.createHash("md5").update(e).digest("hex")}a(eP,"md5");tP.exports={hash:v3,validate:B3}});var nP=g((vTe,rP)=>{var sg=nt(),nr={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 q3(e){return nr.password.presence=!0,nr.username.presence=!0,nr.role.presence=!0,nr.active.presence=!0,sg.validateObject(e,nr)}a(q3,"addUserValidation");function x3(e){return nr.password.presence=!1,nr.username.presence=!0,nr.role.presence=!1,nr.active.presence=!1,sg.validateObject(e,nr)}a(x3,"alterUserValidation");function G3(e){return nr.password.presence=!1,nr.username.presence=!0,nr.role.presence=!1,nr.active.presence=!1,sg.validateObject(e,nr)}a(G3,"dropUserValidation");rP.exports={addUserValidation:q3,alterUserValidation:x3,dropUserValidation:G3}});var tt=g((qTe,iP)=>{"use strict";var{platform:HTe}=require("os"),F3="nats-server.zip",ig="nats-server",k3=process.platform==="win32"?`${ig}.exe`:ig,og="HDB",$3=/^[^\s.,*>]+$/,sP="__request__",V3=a(e=>`${e}.${sP}`,"REQUEST_SUBJECT"),Y3={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},K3={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},W3={HUB:"hub.pid",LEAF:"leaf.pid"},Q3={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},j3={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:og,deliver_subject:"__HDB__.WORKQUEUE"},z3={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:og,deliver_subject:"HDB.SCHEMAQUEUE"},J3={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:og,deliver_subject:"HDB.USERQUEUE"},X3={SUCCESS:"success",ERROR:"error"},Z3={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},eX={TXN:"txn",MSGID:"msgid"},Rc={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},tX={[Rc.ERR]:1,[Rc.WRN]:2,[Rc.INF]:3,[Rc.DBG]:4,[Rc.TRC]:5},rX={debug:"-D",trace:"-DVV"};iP.exports={NATS_SERVER_ZIP:F3,NATS_SERVER_NAME:ig,NATS_BINARY_NAME:k3,PID_FILES:W3,NATS_CONFIG_FILES:K3,SERVER_SUFFIX:Q3,WORK_QUEUE_CONSUMER_NAMES:j3,SCHEMA_QUEUE_CONSUMER_NAMES:z3,USER_QUEUE_CONSUMER_NAMES:J3,NATS_TERM_CONSTRAINTS_RX:$3,REQUEST_SUFFIX:sP,UPDATE_REMOTE_RESPONSE_STATUSES:X3,CLUSTER_STATUS_STATUSES:Z3,REQUEST_SUBJECT:V3,SUBJECT_PREFIXES:eX,MSG_HEADERS:Y3,LOG_LEVELS:Rc,LOG_LEVEL_FLAGS:rX,LOG_LEVEL_HIERARCHY:tX}});var ag=g((GTe,oP)=>{"use strict";var nX={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
2
+ "use strict";var hV=Object.create;var wl=Object.defineProperty;var pV=Object.getOwnPropertyDescriptor;var mV=Object.getOwnPropertyNames;var SV=Object.getPrototypeOf,TV=Object.prototype.hasOwnProperty;var a=(e,t)=>wl(e,"name",{value:t,configurable:!0});var Ne=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),$e=(e,t)=>{for(var r in t)wl(e,r,{get:t[r],enumerable:!0})},Jb=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of mV(t))!TV.call(e,s)&&s!==r&&wl(e,s,{get:()=>t[s],enumerable:!(n=pV(t,s))||n.enumerable});return e};var q=(e,t,r)=>(r=e!=null?hV(SV(e)):{},Jb(t||!e||!e.__esModule?wl(r,"default",{value:e,enumerable:!0}):r,e)),oe=e=>Jb(wl({},"__esModule",{value:!0}),e);var ey=T(($Ee,Zb)=>{var gV=require("fast-glob"),{statSync:Um,existsSync:vm,readFileSync:RV,writeFileSync:AV}=require("fs"),{spawnSync:OV,spawn:NV,execFileSync:kEe}=require("child_process"),{isMainThread:bV}=require("worker_threads"),{join:Gi,relative:Xb}=require("path"),{PACKAGE_ROOT:Kn}=C(),{tmpdir:yV,platform:IV}=require("os");require("source-map-support").install();var wV=["resources","server","dataLayer","components"],Cl="ts-build",Bm,CV=__filename.endsWith("tsBuild.js");if(CV){if(bV){let r;try{Um(Gi(Kn,Cl)),r=!0}catch{}if(r)for(let n of gV.sync(wV.map(s=>s+"/**/*.ts"),{cwd:Kn})){let s=0,i=0;try{s=Um(Gi(Kn,n)).mtimeMs-5e3,i=Um(Gi(Kn,Cl,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."),Bm=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),Bm=!0;if(Bm){let n=Gi(Kn,"node_modules/.bin/tsc");IV()==="win32"&&(n+=".cmd");let s=OV(n,{cwd:Kn});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=Gi(yV(),"harperdb-tsc.pid"),o;if(vm(i))try{process.kill(+RV(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=NV(n,["--watch"],{cwd:Kn,detached:!0,stdio:"ignore"});AV(i,c.pid.toString()),c.unref()}}}}let e=Zb.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(Kn)&&!n[0].includes("node_modules")){let i=Xb(Kn,n[0]),o;i.startsWith(Cl)?o=Gi(Kn,Xb(Cl,i)):o=Gi(Kn,Cl,i);let c=Gi(o,r),l=c+".js";if(vm(l))return l;if(c.includes(".")&&vm(c))return c}return t(r,n,s)}}});var C=T((KEe,Ey)=>{"use strict";var Nn=require("path"),LV=require("fs"),{relative:VEe,join:YEe}=Nn,{existsSync:DV}=LV;function PV(){let e=__dirname;for(;!DV(Nn.join(e,"package.json"));){let t=Nn.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(PV,"getHDBPackageRoot");var xi=PV(),ty="js",Dd=ty,MV="harperdb-config.yaml",UV="defaultConfig.yaml",vV="hdb",ry=`harperdb.${Dd}`,ny=`customFunctionsServer.${Dd}`,BV=`restartHdb.${Dd}`,qm="HarperDB",Ld="Custom Functions",Pd="Clustering Hub",Md="Clustering Leaf",HV="Clustering Ingest Service",qV="Clustering Reply Service",GV="foreground.pid",xV="hdb.pid",FV="data",kV={HDB:qm,CLUSTERING_HUB:Pd,CLUSTERING_LEAF:Md,CLUSTERING_INGEST_SERVICE:HV,CLUSTERING_REPLY_SERVICE:qV,CUSTOM_FUNCTIONS:Ld,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"},$V={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},VV={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},YV={harperdb:qm,"clustering hub":Pd,"clustering leaf":Md,"custom functions":Ld,custom_functions:Ld,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},KV={CLUSTERING_HUB_PROC_DESCRIPTOR:Pd,CLUSTERING_LEAF_PROC_DESCRIPTOR:Md},Hm={HDB:Nn.join(xi,"server/harperdb"),CUSTOM_FUNCTIONS:Nn.join(xi,"server/customFunctions"),CLUSTERING_HUB:Nn.join(xi,"server/nats"),CLUSTERING_LEAF:Nn.join(xi,"server/nats")},WV={HDB:Nn.join(Hm.HDB,ry),CUSTOM_FUNCTIONS:Nn.join(Hm.CUSTOM_FUNCTIONS,ny)},QV={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Nn.join(xi,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Nn.join(xi,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Nn.join(xi,"launchServiceScripts/launchUpdateNodes4-0-0.js")},jV={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},sy="support@harperdb.io",zV="customer-success@harperdb.io",iy=1,JV=4141,oy="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",XV="https://www.harperdb.io/product",ZV=`For support, please submit a request at ${oy} or contact ${sy}`,ay=`For license support, please contact ${zV}`,eY="None of the specified records were found.",tY="hash attribute not found",rY=`Your current license only supports ${iy} role. ${ay}`,nY="Your current license only supports 3 connections to a node.",sY="127.0.0.1",iY=1,oY=/^\.$/,aY=/^\.\.$/,cY="U+002E",lY=/\//g,uY="U+002F",_Y=/U\+002F/g,dY=/^U\+002E$/,fY=/^U\+002EU\+002E$/,EY="d",hY=999999,pY="*",mY="--max-old-space-size=",SY="system",TY="__hdb_hash",gY=".harperdb",RY=".hdb",AY="keys",OY="hdb_boot_properties.file",NY=".updateConfig.json",bY="SIGTSTP",yY=24,IY=6e4,wY=448,CY="blob",LY="trash",DY="database",PY="schema",MY="transactions",UY=".count",vY="id",BY="PROCESS_NAME",cy={SETTINGS_PATH_KEY:"settings_path"},ly=require("lodash"),HY={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"},qY={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},GY={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"},FY={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"},Kr="hdb_internal:",kY={CREATE_SCHEMA:Kr+"create_schema",CREATE_TABLE:Kr+"create_table",CREATE_ATTRIBUTE:Kr+"create_attribute",ADD_USER:Kr+"add_user",ALTER_USER:Kr+"alter_user",DROP_USER:Kr+"drop_user",HDB_NODES:Kr+"hdb_nodes",HDB_USERS:Kr+"hdb_users",HDB_WORKERS:Kr+"hdb_workers",CATCHUP:Kr+"catchup",SCHEMA_CATCHUP:Kr+"schema_catchup",WORKER_ROOM:Kr+"cluster_workers"},$Y={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"},VY="060493.ks",YY=".license",KY={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},ee={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup"},WY={CSV:".csv",JSON:".json"},QY={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},jY={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Ll={};Ll[ee.INSERT]=ee.INSERT;Ll[ee.UPDATE]=ee.UPDATE;Ll[ee.UPSERT]=ee.UPSERT;Ll[ee.DELETE]=ee.DELETE;var xe=Object.create(null);xe[ee.DESCRIBE_ALL]=ee.DESCRIBE_ALL;xe[ee.DESCRIBE_TABLE]=ee.DESCRIBE_TABLE;xe[ee.DESCRIBE_SCHEMA]=ee.DESCRIBE_SCHEMA;xe[ee.READ_LOG]=ee.READ_LOG;xe[ee.ADD_NODE]=ee.ADD_NODE;xe[ee.LIST_USERS]=ee.LIST_USERS;xe[ee.LIST_ROLES]=ee.LIST_ROLES;xe[ee.USER_INFO]=ee.USER_INFO;xe[ee.SQL]=ee.SQL;xe[ee.GET_JOB]=ee.GET_JOB;xe[ee.SEARCH_JOBS_BY_START_DATE]=ee.SEARCH_JOBS_BY_START_DATE;xe[ee.DELETE_FILES_BEFORE]=ee.DELETE_FILES_BEFORE;xe[ee.EXPORT_LOCAL]=ee.EXPORT_LOCAL;xe[ee.EXPORT_TO_S3]=ee.EXPORT_TO_S3;xe[ee.CLUSTER_STATUS]=ee.CLUSTER_STATUS;xe[ee.REMOVE_NODE]=ee.REMOVE_NODE;xe[ee.RESTART]=ee.RESTART;xe[ee.CUSTOM_FUNCTIONS_STATUS]=ee.CUSTOM_FUNCTIONS_STATUS;xe[ee.GET_CUSTOM_FUNCTIONS]=ee.GET_CUSTOM_FUNCTIONS;xe[ee.GET_CUSTOM_FUNCTION]=ee.GET_CUSTOM_FUNCTION;xe[ee.SET_CUSTOM_FUNCTION]=ee.SET_CUSTOM_FUNCTION;xe[ee.DROP_CUSTOM_FUNCTION]=ee.DROP_CUSTOM_FUNCTION;xe[ee.ADD_CUSTOM_FUNCTION_PROJECT]=ee.ADD_CUSTOM_FUNCTION_PROJECT;xe[ee.DROP_CUSTOM_FUNCTION_PROJECT]=ee.DROP_CUSTOM_FUNCTION_PROJECT;xe[ee.PACKAGE_CUSTOM_FUNCTION_PROJECT]=ee.PACKAGE_CUSTOM_FUNCTION_PROJECT;xe[ee.DEPLOY_CUSTOM_FUNCTION_PROJECT]=ee.DEPLOY_CUSTOM_FUNCTION_PROJECT;var zY={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"},JY={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},uy={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"},XY=ly.invert(uy),ZY={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},w={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers"},_y={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,http_threads:w.THREADS_COUNT,threads:w.THREADS_COUNT,threads_count:w.THREADS_COUNT,threads_debug:w.THREADS_DEBUG,threads_debug_startingport:w.THREADS_DEBUG_STARTINGPORT,threads_debug_port:w.THREADS_DEBUG_PORT,threads_debug_host:w.THREADS_DEBUG_HOST,threads_debug_waitfordebugger:w.THREADS_DEBUG_WAITFORDEBUGGER,threads_maxheapmemory:w.THREADS_MAXHEAPMEMORY,http_session_affinity:w.HTTP_SESSIONAFFINITY,http_compressionthreshold:w.HTTP_COMPRESSIONTHRESHOLD,http_cors:w.HTTP_CORS,http_corsaccesslist:w.HTTP_CORSACCESSLIST,http_headerstimeout:w.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,http_timeout:w.HTTP_TIMEOUT,http_port:w.HTTP_PORT,http_secureport:w.HTTP_SECUREPORT,http_mtls:w.HTTP_MTLS,http_mtls_user:w.HTTP_MTLS_USER,http_mtls_required:w.HTTP_MTLS_REQUIRED,customfunctions_processes:w.THREADS_COUNT,customfunctions_root:w.COMPONENTSROOT,localstudio_enabled:w.LOCALSTUDIO_ENABLED,logging_file:w.LOGGING_FILE,logging_level:w.LOGGING_LEVEL,logging_root:w.LOGGING_ROOT,logging_rotation_enabled:w.LOGGING_ROTATION_ENABLED,logging_rotation_compress:w.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:w.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:w.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:w.LOGGING_ROTATION_PATH,logging_stdstreams:w.LOGGING_STDSTREAMS,logging_auditlog:w.LOGGING_AUDITLOG,logging_auditretention:w.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:w.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:w.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:w.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:w.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:w.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:w.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:w.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:w.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:w.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:w.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:w.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:w.ROOTPATH,databases:w.DATABASES,storage_path:w.STORAGE_PATH,ignorescripts:w.IGNORE_SCRIPTS,mqtt_network_port:w.MQTT_NETWORK_PORT,mqtt_websocket:w.MQTT_WEBSOCKET,mqtt_network_secureport:w.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:w.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:w.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:w.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:w.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:w.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:w.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:w.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:w.AUTHENTICATION_CACHETTL,authentication_enablesessions:w.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:w.COMPONENTSROOT,tls_certificate:w.TLS_CERTIFICATE,tls_privatekey:w.TLS_PRIVATEKEY,tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,tls_ciphers:w.TLS_CIPHERS};for(let e in w){let t=w[e];_y[t.toLowerCase()]=t}var e1={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},t1={csv_file_load:"csv_file_load",csv_data_load:ee.CSV_DATA_LOAD,csv_url_load:ee.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},r1={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"},n1={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},s1={VERSION_DEFAULT:"2.2.0"},i1={DEVELOPMENT:8192,DEFAULT:512},o1={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"},a1={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"},c1={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},dy={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},l1=Symbol("metadata"),u1="__clustering__",_1=Object.values(dy),d1=15984864e5,fy={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},f1=ly.invert(fy),E1={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"},h1=111,p1=`\r
3
+ `,m1={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},S1=["*","%"],T1="unauthorized_access",g1="func_val",R1={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},A1={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},O1={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart",NATS_CONSUMER_UPDATE:"nats_consumer_update"},N1={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},b1={HTTP:"http"},y1={STOPPED:"stopped",ONLINE:"online"},I1="3.x.x",w1={SUCCESS:"success",FAILURE:"failure"},C1={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};Ey.exports={LOCAL_HARPERDB_OPERATIONS:xe,HDB_SUPPORT_ADDRESS:sy,HDB_SUPPORT_URL:oy,HDB_PRICING_URL:XV,SUPPORT_HELP_MSG:ZV,LICENSE_HELP_MSG:ay,HDB_PROC_NAME:ry,HDB_PROC_DESCRIPTOR:qm,CLUSTERING_LEAF_PROC_DESCRIPTOR:Md,CLUSTERING_HUB_PROC_DESCRIPTOR:Pd,SYSTEM_SCHEMA_NAME:SY,HASH_FOLDER_NAME:TY,HDB_HOME_DIR_NAME:gY,UPDATE_FILE_NAME:NY,LICENSE_KEY_DIR_NAME:AY,BOOT_PROPS_FILE_NAME:OY,JOB_TYPE_ENUM:t1,JOB_STATUS_ENUM:KY,SYSTEM_TABLE_NAMES:xY,SYSTEM_TABLE_HASH_ATTRIBUTES:FY,OPERATIONS_ENUM:ee,VALID_S3_FILE_TYPES:WY,S3_BUCKET_AUTH_KEYS:QY,VALID_SQL_OPS_ENUM:jY,GEO_CONVERSION_ENUM:JY,HDB_SETTINGS_NAMES:uy,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:XY,SERVICE_ACTIONS_ENUM:zY,CLUSTER_MESSAGE_TYPE_ENUM:r1,CLUSTER_CONNECTION_DIRECTION_ENUM:n1,CLUSTER_EVENTS_DEFS_ENUM:o1,PERIOD_REGEX:oY,DOUBLE_PERIOD_REGEX:aY,UNICODE_PERIOD:cY,FORWARD_SLASH_REGEX:lY,UNICODE_FORWARD_SLASH:uY,ESCAPED_FORWARD_SLASH_REGEX:_Y,ESCAPED_PERIOD_REGEX:dY,ESCAPED_DOUBLE_PERIOD_REGEX:fY,REG_KEY_FILE_NAME:VY,RESTART_TIMEOUT_MS:IY,HDB_FILE_PERMISSIONS:wY,DATABASES_DIR_NAME:DY,LEGACY_DATABASES_DIR_NAME:PY,TRANSACTIONS_DIR_NAME:MY,LIMIT_COUNT_NAME:UY,ID_ATTRIBUTE_STRING:vY,INSERT_MODULE_ENUM:qY,UPGRADE_JSON_FIELD_NAMES_ENUM:GY,RESTART_CODE:bY,RESTART_CODE_NUM:yY,CLUSTER_OPERATIONS:Ll,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:$Y,HDB_INTERNAL_SC_CHANNEL_PREFIX:Kr,INTERNAL_SC_CHANNELS:kY,CLUSTERING_MESSAGE_TYPES:E1,HDB_FILE_SUFFIX:RY,BLOB_FOLDER_NAME:CY,HDB_TRASH_DIR:LY,ORIGINATOR_SET_VALUE:h1,LICENSE_VALUES:s1,RAM_ALLOCATION_ENUM:i1,TIME_STAMP_NAMES_ENUM:dy,TIME_STAMP_NAMES:_1,PERMS_UPDATE_RELEASE_TIMESTAMP:d1,SEARCH_NOT_FOUND_MESSAGE:eY,SEARCH_ATTRIBUTE_NOT_FOUND:tY,LICENSE_ROLE_DENIED_RESPONSE:rY,LICENSE_MAX_CONNS_REACHED:nY,BASIC_LICENSE_MAX_NON_CU_ROLES:iy,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:JV,VALUE_SEARCH_COMPARATORS:fy,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:f1,LICENSE_FILE_NAME:YY,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:a1,NEW_LINE:p1,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:iY,MOMENT_DAYS_TAG:EY,API_TURNOVER_SEC:hY,LOOPBACK:sY,CODE_EXTENSION:Dd,WILDCARD_SEARCH_VALUE:pY,NODE_ERROR_CODES:c1,JAVASCRIPT_EXTENSION:ty,PERMS_CRUD_ENUM:m1,UNAUTHORIZED_PERMISSION_NAME:T1,SEARCH_WILDCARDS:S1,FUNC_VAL:g1,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:R1,JWT_ENUM:A1,CLUSTERING_FLAG:u1,ITC_EVENT_TYPES:O1,CUSTOM_FUNCTION_PROC_NAME:ny,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Ld,SERVICES:N1,THREAD_TYPES:b1,MEM_SETTING_KEY:mY,HDB_RESTART_SCRIPT:BV,PROCESS_DESCRIPTORS:kV,SERVICE_SERVERS:WV,SERVICE_SERVERS_CWD:Hm,PROCESS_DESCRIPTORS_VALIDATE:YV,LAUNCH_SERVICE_SCRIPTS:QV,LOG_LEVELS:VV,PROCESS_NAME_ENV_PROP:BY,LOG_NAMES:$V,PM2_PROCESS_STATUSES:y1,CONFIG_PARAM_MAP:_y,CONFIG_PARAMS:w,HDB_CONFIG_FILE:MV,HDB_DEFAULT_CONFIG_FILE:UV,ROLE_TYPES_ENUM:jV,BOOT_PROP_PARAMS:cy,INSTALL_PROMPTS:HY,HDB_ROOT_DIR_NAME:vV,CLUSTERING_PROCESSES:KV,FOREGROUND_PID_FILE:GV,PACKAGE_ROOT:xi,PRE_4_0_0_VERSION:I1,DATABASES_PARAM_CONFIG:e1,METADATA_PROPERTY:l1,AUTH_AUDIT_STATUS:w1,AUTH_AUDIT_TYPES:C1,HDB_PID_FILE:xV,DEFAULT_DATABASE_NAME:FV,LEGACY_CONFIG_PARAMS:ZY};ey()});var Uo=T((QEe,my)=>{"use strict";var hy=require("minimist");my.exports=L1;function L1(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=py(process.env),n=py(hy(process.argv))):(r=process.env,n=hy(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(L1,"assignCMDENVVariables");function py(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(py,"objKeysToLowerCase")});var x=T((zEe,Ym)=>{"use strict";var vo=require("fs-extra"),{workerData:D1,threadId:P1}=require("worker_threads"),Xs=require("path"),gy=require("yaml"),Ry=require("properties-reader"),Lt=C(),Sy=Uo(),M1=require("os"),{PACKAGE_ROOT:xm}=C(),{_assignPackageExport:U1}=require("../index"),Pl={};for(let e in console)Pl[e]||(Pl[e]=console[e]);var pr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Ay={STDOUT:"stdOut",STDERR:"stdErr"},v1=Xs.join(xm,"logs"),B1=Xs.join(xm,"config/yaml/",Lt.HDB_DEFAULT_CONFIG_FILE),H1=1e4,Js,As,hr,Ud,vd,Ml,Xa,Dl;Dl===void 0&&Oy();Ym.exports={notify:yy,fatal:Iy,error:Ul,warn:Vm,info:Bd,debug:$m,trace:km,setLogLevel:V1,log_level:hr,loggerWithTag:q1,suppressLogging:G1,initLogSettings:Oy,setupConsoleLogging:Ny,logCustomLevel:k1,closeLogFile:Fm,getLogFilePath:()=>Ml,OUTPUTS:Ay,AuthAuditLog:W1};U1("logger",Ym.exports);function Oy(e=!1){try{if(Dl===void 0||e){Fm();let t=$1(),r=Sy(["ROOTPATH"]);try{Dl=Ry(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!vo.pathExistsSync(Xs.join(r.ROOTPATH,Lt.HDB_CONFIG_FILE)))throw n}({level:hr,config_log_path:vd,to_file:Js,to_stream:As}=Y1(r.ROOTPATH?Xs.join(r.ROOTPATH,Lt.HDB_CONFIG_FILE):Dl.get("settings_path"))),Ud=Lt.LOG_NAMES.HDB,Ml=Xs.join(vd,Ud)}}catch(t){if(Dl=void 0,t.code===Lt.NODE_ERROR_CODES.ENOENT){let r=Sy(Object.keys(Lt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Lt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Lt.CONFIG_PARAMS.LOGGING_LEVEL){hr=l;continue}if(c===Lt.CONFIG_PARAMS.LOGGING_STDSTREAMS){As=l;continue}c===Lt.CONFIG_PARAMS.LOGGING_FILE&&(Js=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=K1();Js=Js===void 0?s:Js,Js=Ty(Js),As=As===void 0?i:As,As=Ty(As),hr=hr===void 0?n:hr,vd=v1,Ud=Lt.LOG_NAMES.INSTALL,Ml=Xs.join(vd,Ud);return}throw Ul("Error initializing log settings"),Ul(t),t}process.env.DEV_MODE&&(As=!0),Ny()}a(Oy,"initLogSettings");var Gm=!0;function Ny(){Ja("error",Ul),Ja("warn",Vm),Ja("log",Bd),Ja("info",Bd),Ja("debug",$m),Ja("trace",km)}a(Ny,"setupConsoleLogging");function Ja(e,t){console[e]=function(...r){if(Gm&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Pl[e](...r)}}a(Ja,"logConsole");function q1(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(yy),fatal:r(Iy),error:r(Ul),warn:r(Vm),info:r(Bd),debug:r($m),trace:r(km)};function r(n){return function(...s){return n(t,...s)}}}a(q1,"loggerWithTag");function G1(e){try{Gm=!1,e()}finally{Gm=!0}}a(G1,"suppressLogging");var x1=D1?.name?.replace(/ /g,"-")||"main";function Zs(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||x1+"/"+P1);c<s;c++){let _=t[c];_ instanceof Error&&_.stack?n+=_.stack:typeof _=="object"?n+=JSON.stringify(_):n+=_,c<i&&(n+=" ")}return`${r} [${o.join("] [")}]: ${n}
4
+ `}a(Zs,"createLogRecord");function vl(e){Js&&by(e),As&&process.stdout.write(e)}a(vl,"logStdOut");function Hd(e){Js&&by(e),As&&process.stderr.write(e)}a(Hd,"logStdErr");function by(e){F1(),Xa?vo.appendFileSync(Xa,e):Pl.log(e)}a(by,"logToFile");function Fm(){try{vo.closeSync(Xa)}catch{}Xa=null}a(Fm,"closeLogFile");function F1(){if(!Xa){try{if(!Ml)debugger;Xa=vo.openSync(Ml,"a")}catch(e){Pl.error(e)}setTimeout(()=>{Fm()},H1).unref()}}a(F1,"openLogFile");function Bd(...e){pr[hr]<=pr.info&&vl(Zs("info",e))}a(Bd,"info");function km(...e){pr[hr]<=pr.trace&&vl(Zs("trace",e))}a(km,"trace");function Ul(...e){pr[hr]<=pr.error&&Hd(Zs("error",e))}a(Ul,"error");function $m(...e){pr[hr]<=pr.debug&&vl(Zs("debug",e))}a($m,"debug");function yy(...e){pr[hr]<=pr.notify&&vl(Zs("notify",e))}a(yy,"notify");function Iy(...e){pr[hr]<=pr.fatal&&Hd(Zs("fatal",e))}a(Iy,"fatal");function Vm(...e){pr[hr]<=pr.warn&&Hd(Zs("warn",e))}a(Vm,"warn");function k1(e,t,...r){t===Ay.STDERR?Hd(Zs(e,r)):vl(Zs(e,r))}a(k1,"logCustomLevel");function $1(){let e;try{e=M1.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Xs.join(e,Lt.HDB_HOME_DIR_NAME,Lt.BOOT_PROPS_FILE_NAME);return vo.existsSync(t)||(t=Xs.join(xm,"utility/hdb_boot_properties.file")),t}a($1,"getPropsFilePath");function V1(e){hr=e}a(V1,"setLogLevel");function Ty(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Ty,"autoCastBoolean");function Y1(e){try{if(e.includes("config/settings.js")){let o=Ry(e);return{level:o.get(Lt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Xs.dirname(o.get(Lt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Lt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Lt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=gy.parseDocument(vo.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===Lt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(Y1,"getLogConfig");function K1(){try{let e=gy.parseDocument(vo.readFileSync(B1,"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(K1,"getDefaultConfig");function W1(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(W1,"AuthAuditLog")});var Bo=T((XEe,Q1)=>{Q1.exports={name:"harperdb",version:"4.3.0-beta.8",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.6","nats-server":"2.10.10"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.11.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.25.1","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.10.0-beta.4",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",yaml:"2.3.4"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.3.3","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var Fi=T((ZEe,wy)=>{"use strict";wy.exports={version:j1,printVersion:z1};var qd=Bo();function j1(){if(qd)return qd.version}a(j1,"version");function z1(){qd&&console.log(`HarperDB Version ${qd.version}`)}a(z1,"printVersion")});var Dy=T((the,Ly)=>{"use strict";var Cy=require("semver/functions/major"),J1=Bo(),Km=process.versions&&process.versions.node?process.versions.node:void 0;Ly.exports=X1;function X1(){let e=J1.engines["minimum-node"];if(Km&&Cy(Km)<Cy(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${Km}. Please install a version of Node.js that is withing the defined range.`}}a(X1,"checkNodeVersion")});var Ho={};$e(Ho,{server:()=>it});var Py,it,mr=Ne(()=>{Py=require("../index"),it={};(0,Py._assignPackageExport)("server",it)});var Wm=T((nhe,My)=>{"use strict";var Z1=require("util"),eK=require("path"),tK=require("child_process"),rK=Z1.promisify(tK.execFile),nK=1e3*1e3*10;My.exports={findPs:sK};async function sK(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await rK("ps",["wwxo",`pid,${r}`],{maxBuffer:nK});for(let s of n.trim().split(`
5
+ `).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:eK.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(sK,"findPs")});var _t=T((ihe,vy)=>{"use strict";var iK="__dbis__",oK="__txns__",aK="__environment_name__",cK="__dbi_defintion__",lK={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"},uK=["__createdtime__","__updatedtime__"],_K="\uFFFF",Uy={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},dK=Object.values(Uy);vy.exports={AUDIT_STORE_NAME:oK,INTERNAL_DBIS_NAME:iK,DBI_DEFINITION_NAME:cK,SEARCH_TYPES:lK,TIMESTAMP_NAMES:uK,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:aK,TRANSACTIONS_DBI_NAMES_ENUM:Uy,TRANSACTIONS_DBIS:dK,OVERFLOW_MARKER:_K}});var Wr=T((ohe,Vy)=>{"use strict";var By=C(),Hy=_t(),qy={CONTINUE:100,OK:200,CREATED:201,BAD_REQUEST:400,UNAUTHORIZED:401,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,REQUEST_TIMEOUT:408,CONFLICT:409,TOO_MANY_REQUESTS:429,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,HTTP_VERSION_NOT_SUPPORTED:505,INSUFFICIENT_STORAGE:507,NETWORK_AUTHENTICATION_REQUIRED:511},Gy=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),xy={500:Gy("There was an error processing your request."),400:"Invalid request"},fK=xy[qy.INTERNAL_SERVER_ERROR],EK={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.`},hK={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},pK={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"},mK={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 ${Hy.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Hy.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"},SK={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${By.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 ${By.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"},Fy={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"},TK={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' not found`,SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},gK={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},RK={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"},AK={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},OK={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`},ky={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.`},$y={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}`},NK={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."},bK={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},yK={...Fy,...pK,...EK,...TK,...gK,...RK,...AK,...OK,...SK,...ky,...$y,...NK,...bK,...hK};Vy.exports={CHECK_LOGS_WRAPPER:Gy,HDB_ERROR_MSGS:yK,DEFAULT_ERROR_MSGS:xy,DEFAULT_ERROR_RESP:fK,HTTP_STATUS_CODES:qy,LMDB_ERRORS_ENUM:mK,AUTHENTICATION_ERROR_MSGS:Fy,VALIDATION_ERROR_MSGS:ky,ITC_ERRORS:$y}});var ie=T((che,Wy)=>{"use strict";var Za=Wr(),IK=x(),wK=C(),Gd=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,Yy),this.statusCode=n||Za.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Za.DEFAULT_ERROR_MSGS[n]?Za.DEFAULT_ERROR_MSGS[n]:Za.DEFAULT_ERROR_MSGS[Za.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&&IK[s](i)}},Qm=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}},jm=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Yy(e,t,r,n=wK.LOG_LEVELS.ERROR,s=null,i=!1){if(Ky(e))return e;let o=new Gd(e,t,r,n,s);return i&&delete o.stack,o}a(Yy,"handleHDBError");function Ky(e){return e.__proto__.constructor.name===Gd.name}a(Ky,"isHDBError");Wy.exports={isHDBError:Ky,handleHDBError:Yy,ClientError:Qm,ServerError:jm,hdb_errors:Za}});var ze=T((uhe,eI)=>{"use strict";var xl=C(),CK=K(),Sr=X(),Fl=require("path"),LK=require("minimist"),Qy=require("fs-extra"),jy=require("lodash");Sr.initSync();var{CONFIG_PARAMS:ki,DATABASES_PARAM_CONFIG:Bl,SYSTEM_SCHEMA_NAME:xd}=xl,Hl,ql,Gl;function zy(){if(Hl!==void 0)return Hl;if(Sr.getHdbBasePath()!==void 0)return Hl=Sr.get(ki.STORAGE_PATH)||Fl.join(Sr.getHdbBasePath(),xl.DATABASES_DIR_NAME),Hl}a(zy,"getBaseSchemaPath");function Jy(){if(ql!==void 0)return ql;if(Sr.getHdbBasePath()!==void 0)return ql=Zy(xd),ql}a(Jy,"getSystemSchemaPath");function Xy(){if(Gl!==void 0)return Gl;if(Sr.getHdbBasePath()!==void 0)return Gl=Sr.get(xl.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Fl.join(Sr.getHdbBasePath(),xl.TRANSACTIONS_DIR_NAME),Gl}a(Xy,"getTransactionAuditStoreBasePath");function DK(e,t){let r=Sr.get(ki.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Fl.join(Xy(),e.toString())}a(DK,"getTransactionAuditStorePath");function Zy(e,t){e=e.toString(),t=t&&t.toString();let r=Sr.get(xl.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Fl.join(zy(),e)}a(Zy,"getSchemaPath");function PK(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,LK(process.argv));let n=r[ki.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!CK.isObject(n))throw o;i=n}for(let o of i){let c=o[xd];if(!c)continue;let l=Sr.get(ki.DATABASES);l=l??{};let _=c?.tables?.[t]?.[Bl.PATH];if(_)return jy.set(l,[xd,Bl.TABLES,t,Bl.PATH],_),Sr.setProperty(ki.DATABASES,l),_;let u=c?.[Bl.PATH];if(u)return jy.set(l,[xd,Bl.PATH],u),Sr.setProperty(ki.DATABASES,l),u}}let s=r[ki.STORAGE_PATH.toUpperCase()];if(s){if(!Qy.pathExistsSync(s))throw new Error(s+" does not exist");let i=Fl.join(s,e);return Qy.mkdirsSync(i),Sr.setProperty(ki.STORAGE_PATH,s),i}return Jy()}a(PK,"initSystemSchemaPaths");function MK(){Hl=void 0,ql=void 0,Gl=void 0}a(MK,"resetPaths");eI.exports={getBaseSchemaPath:zy,getSystemSchemaPath:Jy,getTransactionAuditStorePath:DK,getTransactionAuditStoreBasePath:Xy,getSchemaPath:Zy,initSystemSchemaPaths:PK,resetPaths:MK}});var Tr=T((Ehe,iI)=>{"use strict";var UK=Wr().LMDB_ERRORS_ENUM,dhe=require("lmdb"),vK=_t(),fhe=require("buffer").Buffer,{OVERFLOW_MARKER:tI,MAX_SEARCH_KEY_LENGTH:Fd}=vK,rI=["number","string","symbol","boolean","bigint"];function BK(e){if(e=e?.primaryStore||e,!e)throw new Error(UK.ENV_REQUIRED)}a(BK,"validateEnv");function HK(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(HK,"stringifyData");function qK(e){return e instanceof Date?e.valueOf():e}a(qK,"convertKeyValueToWrite");function GK(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(rI.includes(typeof e))return e.length>Fd?[e.slice(0,Fd)+tI]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(rI.includes(typeof i))i.length>Fd?r.push(i.slice(0,Fd)+tI):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(GK,"getIndexedValues");var kd=0,nI=0;function sI(){nI=Date.now()-performance.now()}a(sI,"adjustStartTime");sI();var xK=6e4;setInterval(sI,xK).unref();function FK(){let e=performance.now()+nI;return e>kd?(kd=e,e):(kd+=488e-6,kd)}a(FK,"getNextMonotonicTime");iI.exports={validateEnv:BK,stringifyData:HK,convertKeyValueToWrite:qK,getNextMonotonicTime:FK,getIndexedValues:GK}});var oI,Wn,zm,kl=Ne(()=>{oI=require("events"),Wn=class extends oI.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new zm;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){return this.queue?.shift()}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},zm=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 uI={};$e(uI,{HAS_EXPIRATION:()=>sS,LAST_TIMESTAMP_PLACEHOLDER:()=>Yl,LOCAL_TIMESTAMP:()=>kK,METADATA:()=>$l,NO_TIMESTAMP:()=>Xm,PENDING_LOCAL_TIME:()=>iS,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>nS,RecordEncoder:()=>tS,TIMESTAMP_ASSIGN_LAST:()=>VK,TIMESTAMP_ASSIGN_NEW:()=>cI,TIMESTAMP_ASSIGN_PREVIOUS:()=>lI,TIMESTAMP_PLACEHOLDER:()=>$d,TIMESTAMP_RECORD_PREVIOUS:()=>Zm,fromResource:()=>Wd,getUpdateRecord:()=>oS,handleLocalTimeForGets:()=>Qd});function KK(){return Vl[0]=Vl[0]^64,$K.getFloat64(0)}function Wd(e){rS=!0;try{return e()}finally{rS=!1}}function Qd(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?.[$l];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?.[$l]>=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[$l];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(){if(this.timerTracked||(this.timerTracked=!0,qo.push(new WeakRef(this))),!rS)try{throw new Error("Read transaction used outside of resource")}catch(l){this.readStack=l.stack}o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<qo.length;l++){let _=qo[l].deref();(!_||_.isDone||_.isCommitted)&&qo.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function oS(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",f,E){if(f||l==null?ec=i?.localTime?Zm|lI:Xm:ec=l?i?.localTime?Zm|16384:cI|16384:Xm,u>0&&(c|=sS),Yd=c,eS=u,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:ec>0},m;try{f&&(h.ifVersion=m=i?.version??null);let S=e.put(n,s,h);if(l){let R=_?.user?.username;if(E&&(Vd=e.encoder.encode(E)),f&&i?.localTime){let g=i?.localTime,A=r.get(g);if(A){let P=xt(A).previousLocalTime;return r.put(g,Kd(o,t,n,P,R,d,Vd),{ifVersion:m}),S}}r.put(Yl,Kd(o,t,n,i?.localTime?1:0,R,d,Vd),{append:d!=="invalidate",instructedWrite:!0,ifVersion:m})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var aI,Jm,$d,Yl,nS,kK,$l,Vl,$K,Xm,cI,VK,lI,Zm,sS,iS,YK,Vd,ec,Yd,eS,tS,The,rS,qo,tc=Ne(()=>{aI=require("msgpackr");Go();Jm=q(x()),$d=new Uint8Array([1,1,1,1,4,64,0,0]),Yl=new Uint8Array([1,1,1,1,1,0,0,0]),nS=new Uint8Array([1,1,1,1,3,64,0,0]),kK=Symbol("local-timestamp"),$l=Symbol("metadata"),Vl=new Uint8Array(8),$K=new DataView(Vl.buffer,0,8),Xm=0,cI=0,VK=1,lI=3,Zm=4,sS=16,iS=1,ec=0,Yd=-1,eS=0,tS=class extends aI.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(ec||Yd>=0){let i=0,o=ec;o&&(i+=8,ec=0);let c=Yd,l=eS;c>=0&&(i+=2,Yd=-1,l&&(i+=8,eS=0));let _=YK=r.call(this,n,s|2048|i);Vd=_.subarray((_.start||0)+i,_.end);let u=_.start||0;return o&&($d[4]=o,$d[5]=o>>8,_.set($d,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(Vl,0,c),c+=8;else for(let d=0;d<8;d++)Vl[d]=t[c++];l=KK(),i=t[c]}let _;i<32&&(o=i,c+=2,o&sS&&(_=(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,[$l]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(KK,"getTimestamp");The=Map.prototype.get;a(Wd,"fromResource");a(Qd,"handleLocalTimeForGets");qo=[];setInterval(()=>{for(let e=0;e<qo.length;e++){let t=qo[e].deref();!t||t.isDone||t.isCommitted?qo.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Jm.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Jm.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(oS,"getUpdateRecord")});var AI={};$e(AI,{AUDIT_STORE_OPTIONS:()=>gI,createAuditEntry:()=>Kd,openAuditStore:()=>Xd,readAuditEntry:()=>xt,setAuditRetention:()=>QK,transactionKeyEncoder:()=>TI});function Xd(e){let t=e.auditStore=e.openDB(pI.AUDIT_STORE_NAME,gI);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=jd){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed")return;let o=0,c;try{for(let{key:l,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-aS})){if((_[0]&15)===uS){let u=xt(_),d=u.tableId;r[d]?.(u.recordId)}if(c=t.remove(l),await new Promise(setImmediate),++o>=WK){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,aS/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,Jd.getWorkerIndex)()===(0,Jd.getWorkerCount)()-1&&s(jd),t}function QK(e,t=jd){aS=e,jd=t}function Kd(e,t,r,n,s,i,o){let c=RI[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let l=1;n&&(n>1?rc.setFloat64(0,n):bn.set(nS),l=9),f(0),f(t),d(r),rc.setFloat64(l,e),l+=8,s?d(s):bn[l++]=0,bn[n?8:0]=c;let u=bn.subarray(0,l);if(o)return Buffer.concat([u,o]);return u;function d(E){let h=l;l+=1,l=(0,nc.writeKey)(E,bn,l);let m=l-h-1;m>127?m>16383?(dS.error("Key or username was too large for audit entry",E),l=h+1,bn[h]=0):(bn.copyWithin(h+2,h+1,l),rc.setUint16(h,m|32768),l++):bn[h]=m}function f(E){E<128?bn[l++]=E:E<16384?(rc.setUint16(l,E|32768),l+=2):E<1056964608?(rc.setUint32(l,E|3221225472),l+=4):(bn[l]=255,rc.setUint32(l+1,E),l+=5)}}function xt(e){try{let t=e.dataView||(e.dataView=new _S(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,l=t.position+=o,_=t.readFloat64();o=t.readInt();let u=t.position,d=t.position+=o;return{type:RI[n&7],tableId:i,get recordId(){return hI(e,c,l)},version:_,previousLocalTime:r,get user(){return d>u?hI(e,u,d):void 0},getValue(f,E,h){if(n&cS||n&lS&&!E)return f.decoder.decode(e.subarray(t.position));if(n&lS&&h)return fS(f.getEntry(this.recordId),h,f)}}}catch{return dS.error("Reading audit entry error",e),{}}}function hI(e,t,r){let n=e.subarray(t,r);return(0,nc.readKey)(n,0,r-t)}var nc,zd,pI,mI,Jd,SI,dS,bn,rc,TI,gI,aS,WK,jd,cS,lS,_I,uS,dI,fI,EI,RI,_S,Go=Ne(()=>{nc=require("ordered-binary"),zd=q(X()),pI=q(_t()),mI=q(C()),Jd=q(tt()),SI=q(K());tc();dS=q(x());Zd();(0,zd.initSync)();bn=Buffer.alloc(1024),rc=new DataView(bn.buffer,bn.byteOffset,1024),TI={writeKey(e,t,r){return e===Yl?(t.set(Yl,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,nc.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,nc.readKey)(e,t,r)}},gI={encoding:"binary",keyEncoder:TI},aS=(0,SI.convertToMS)((0,zd.get)(mI.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,WK=1e3,jd=1e4;a(Xd,"openAuditStore");a(QK,"setAuditRetention");cS=16,lS=32,_I=1,uS=2,dI=3,fI=4,EI=5,RI={put:_I|cS,[_I]:"put",delete:uS,[uS]:"delete",message:dI|cS,[dI]:"message",invalidate:fI,[fI]:"invalidate",patch:EI|lS,[EI]:"patch"};a(Kd,"createAuditEntry");a(xt,"readAuditEntry");_S=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch{debugger}}};a(hI,"readKeySafely")});var ES={};$e(ES,{add:()=>ef,applyReverse:()=>OI,getRecordAtTime:()=>fS,rebuildUpdateBefore:()=>tf});function ef(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function tf(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,ef(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function OI(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=jK[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=NI}}function fS(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let l=n.get(i),_=xt(l);switch(_.type){case"put":s=_.getValue(r);break;case"patch":OI(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let l in s)s[l]===NI&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),_=xt(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 jK,NI,Zd=Ne(()=>{Go();a(ef,"add");ef.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};jK={add:ef};a(tf,"rebuildUpdateBefore");a(OI,"applyReverse");NI={};a(fS,"getRecordAtTime")});function Qr(e){return e[Dt]||(e[Dt]=Object.create(null))}function af(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[be])},set(u){return o.set(this,u)},configurable:!0};else{switch(o.type){case"String":l=a(function(u){if(!(typeof u=="string"||u==null&&o.nullable!==!1))throw new yn.ClientError(`${c} must be a string, attempt to assign ${u}`);Qr(this)[c]=u},"set");break;case"ID":l=a(function(u){if(!(typeof u=="string"||u?.length>0&&u.every?.(d=>typeof d=="string")||u==null&&o.nullable!==!1))throw new yn.ClientError(`${c} must be a string, attempt to assign ${u}`);Qr(this)[c]=u},"set");break;case"Float":case"Number":l=a(function(u){if(!(typeof u=="number"||u==null&&o.nullable!==!1))throw new yn.ClientError(`${c} must be a number, attempt to assign ${u}`);Qr(this)[c]=u},"set");break;case"Int":l=a(function(u){if(!(u>>0===u||u==null&&o.nullable!==!1))if(typeof u=="number"&&Math.abs((u>>0)-u)<=1)u=Math.round(u);else throw new yn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${u}`);Qr(this)[c]=u},"set");break;case"Long":l=a(function(u){if(!(Math.round(u)===u&&Math.abs(u)<=9007199254740992||u==null&&o.nullable!==!1))if(typeof u=="number"&&Math.abs(u)<=9007199254740992)u=Math.round(u);else throw new yn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${u}`);Qr(this)[c]=u},"set");break;case"BigInt":l=a(function(u){if(!(typeof u=="bigint"||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=BigInt(u);else throw new yn.ClientError(`${c} must be a number, attempt to assign ${u}`);Qr(this)[c]=u},"set");break;case"Boolean":l=a(function(u){if(!(typeof u=="boolean"||u==null&&o.nullable!==!1))throw new yn.ClientError(`${c} must be a boolean, attempt to assign ${u}`);Qr(this)[c]=u},"set");break;case"Date":l=a(function(u){if(!(u instanceof Date||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=new Date(u);else throw new yn.ClientError(`${c} must be a Date, attempt to assign ${u}`);Qr(this)[c]=u},"set");break;case"Bytes":l=a(function(u){if(!(u instanceof Uint8Array||u==null&&o.nullable!==!1))throw new yn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${u}`);Qr(this)[c]=u},"set");break;case"Any":case void 0:l=a(function(u){Qr(this)[c]=u},"set");break;default:l=a(function(u){if(!(typeof u=="object"||u==null&&o.nullable!==!1))throw new yn.ClientError(`${c} must be an object, attempt to assign ${u}`);Qr(this)[c]=u},"set")}_={get(){let u=this[Dt];if(u&&c in u){let f=u[c];if(f?.__op__){let E=this[fe]?.[c];return f.update(E)}return f}let d=this[fe]?.[c];if(d&&typeof d=="object"){let f=yI(d,o);if(f)return u||(u=this[Dt]=Object.create(null)),u[c]=f}return d},set:l,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let l=this[Dt];return l?.[o]!==void 0?l[o]:this[fe]?.[o]}),i("set",function(o,c){let l=n[o];if(l)return l.set.call(this,c);if(t.sealed)throw new yn.ClientError("Can not add a property to a sealed table schema");Qr(this)[o]=c}),i("deleteProperty",function(o){Qr(this)[o]=void 0}),i("toJSON",function(){let o=this[Dt],c;for(let _ in o){c||(c=Object.assign({},this[fe]));let u=o[_];if(u?.__op__){let d=c[_];u=u.update(d)}c[_]=u}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[fe])),Object.assign(c,this)),c||this[fe]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function yI(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){if(s?.[fe])throw new Error("Can not track an already tracked object, check for circular references");this[fe]=s}},af(r,t)),new r(e)):new rf(e);case Array:let n=new sf(e.length);n[fe]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=yI(o,t?.elements)),n[s]=o}return n;default:return e}}function cf(e){let t=e[Dt],r;for(let s in t){r||(r=Object.assign({},e[fe]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=cf(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[fe])),Object.assign(r,e)),r||e[fe]}function Fo(e,t=e[Dt]){let r;if(bI.call(e,fe)&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Fo(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[fe]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=ES[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Fo(s);r[n]=s}return r?Object.freeze(r):bI.call(e,fe)?e[fe]:e}function nf(e){let t=e[fe];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[xo]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.[fe]===s){if(nf(i))return!0}else return!0}}else{let r=e[Dt];if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s[fe]===i){if(nf(s))return!0}else return!0}else return!0}}return!1}var yn,Dt,rf,bI,xo,sf,of,lf=Ne(()=>{Qn();yn=q(ie());Zd();Dt=Symbol("own-data");a(Qr,"getChanges");a(af,"assignTrackedAccessors");a(yI,"trackObject");rf=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[fe])throw new Error("Can not track an already tracked object, check for circular references");this[fe]=t}};af(rf,{});a(cf,"collapseData");bI=Object.prototype.hasOwnProperty;a(Fo,"deepFreeze");a(nf,"hasChanges");xo=Symbol.for("has-array-changes"),sf=class extends Array{static{a(this,"TrackedArray")}[xo];constructor(t){super(t)}splice(...t){return this[xo]=!0,super.splice(...t)}push(...t){return this[xo]=!0,super.push(...t)}pop(){return this[xo]=!0,super.pop()}unshift(...t){return this[xo]=!0,super.unshift(...t)}shift(){return this[xo]=!0,super.shift()}};sf.prototype.constructor=Array;of=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});function eW(){ZK=setInterval(function(){for(let e of hS)if(e.stale){let t=e[be]?.url;CI.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},XK).unref()}var pS,wI,CI,zK,hS,JK,Kl,II,ko,uf,XK,ZK,mS=Ne(()=>{pS=q(Tr()),wI=q(ie()),CI=q(x());Qn();tc();zK=100,hS=new Set,JK=25e3,ko=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxnsUsed=1,Wd(()=>{this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0)}),hS.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),Wd(()=>{this.readTxn.use()}),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(hS.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Kl&&performance.now()-II>JK)throw new wI.ServerError("Outstanding write transactions have too long of queue, please try again later",503)}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,pS.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let u=this.validated;this.validated=this.writes.length;for(let f=u;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=u;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=u;h<this.validated;h++){let m=this.writes[h];if(!m)continue;let S=m[f===0?"before":"beforeIntermediate"];if(S){let R=S();E?E.push?E.push(R):E=[E,R]:E=R}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(u){throw this.abort(),u}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(u=>u);let c=a(u=>{u.commit(r,u.entry,n)},"doWrite"),l=a(()=>{let u=this.writes[o++];if(u)if(u.key){n>0&&(u.entry=u.store.getEntry(u.key));let d=u.store.ifVersion(u.key,u.entry?.version??null,l);s=s||d}else l();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<zK>>n?l():s=this.writes[0].store.transaction(()=>{for(let u of this.writes)u.entry=u.store.getEntry(u.key),c(u);return!0}),s)return Kl||(Kl=s,II=performance.now(),Kl.then(()=>{Kl=null})),s.then(u=>u?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=n+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let u=this.next?.commit(t);if(u?.then)return u?.then(d=>({txnTime:r,next:d}));_.next=u}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},uf=class extends ko{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,pS.getNextMonotonicTime)())}getReadTxn(){}},XK=3e4;a(eW,"startMonitoringTxns");eW()});function Ze(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new ko;e.timestamp&&(n.timestamp=e.timestamp),n[be]=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 LI,$o=Ne(()=>{LI=require("../index");Qn();mS();a(Ze,"transaction");(0,LI._assignPackageExport)("transaction",Ze);Ze.commit=function(e){let t=(e[be]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ze.abort=function(e){let t=(e[be]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function gS(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let d=_(l);for(let E=1;E<e.length;E++){let h=e[E],m=_(h);d=d.concat(m)}let f=new Set;return d.filter(E=>{let h=E.key??E;return f.has(h)?!1:(f.add(h),!0)})}else{let d=_(l),f=u(e.slice(1),!0,l.estimated_count);return f.length>0?o(d,f):d}function _(d){return d.conditions?gS(d.conditions,d.operator,r,n,s,i,o,c):oc(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(_,"executeCondition");function u(d,f,E){return d.map((h,m)=>{if(h.conditions){let g=h.operator==="or",A=u(h.conditions,!g,E);return g?(P,v)=>A.some(U=>U(P,v)):(P,v)=>A.every(U=>U(P,v))}let S=(h.attribute||h[0])===r.primaryKey,R=AS(h,r,i,c,S,E);return f&&m<d.length-1&&E&&(E=lW(r.primaryStore,h.estimated_count,E)),R}).filter(Boolean)}a(u,"mapConditionsToFilters")}function oc(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(Array.isArray(o)){let g=o[0],A=ti(n.attributes,g);if(A.relationship){if(o.length<2)throw new jr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let P=A.definition?.tableClass||A.elements?.definition?.tableClass,v=new Map,U=oc({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,P,s,v);if(A.relationship.to){i[o[0]]=v;let F=!!ti(P.attributes,A.relationship.to)?.elements;U=iW(U,A,P.primaryStore,F,v)}if(A.relationship.from){let F=a(H=>oc({attribute:A.relationship.from,value:H},t,r,n,s,v),"searchEntry");A.elements?(i[o[0]]=v,U=oW(U,A,P.primaryStore,v,F)):U=U.flatMap(F)}return U}else if(o.length===1)o=o[0];else throw new jr.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,u,d,f;c instanceof Date&&(c=c.getTime());let E;switch(RS[l]||l){case"lt":_=!0,u=c;break;case"le":_=!0,u=c,d=!0;break;case"gt":_=c,f=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,u=c.slice(0),u[u.length-1]=Os.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),u=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),u=c[1],u instanceof Date&&(u=u.getTime()),d=!0;break;case"equals":case void 0:_=c,u=c,d=!0;break;case"ne":if(c===null){_=c,f=!0;break}case"sort":case"contains":case"ends_with":_=!0,E=!0;break;default:throw new jr.ClientError(`Unknown query comparator "${l}"`)}if(r){let g=_;_=u,u=g,g=!f,f=!d,d=g}let h=o===n.primaryKey||o==null,m=h?n.primaryStore:n.indices[o],S;if(!m||m.isIndexing||E||c===null&&!m.indexNulls){if(s===!1&&!m)throw new jr.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&E)throw new jr.ClientError(`Can not use ${l||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(m?.isIndexing)throw new jr.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!m.indexNulls)throw new jr.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(S=AS(e),!S)throw new jr.ClientError(`Unknown search operator ${e.comparator}`)}let R={start:_,end:u,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let g=m.getRange(R).map(S?function({key:A,value:P}){return this.isSync?P&&S(P)?A:$i.SKIP:new Promise((v,U)=>setImmediate(()=>{try{v(P&&S(P)?A:$i.SKIP)}catch(F){U(F)}}))}:A=>A.value==null?$i.SKIP:A);return g.hasEntries=!0,g}else return m?m.getRange(R).map(S?function({key:g,value:A}){return this.isSync?S({[o]:g})?A:$i.SKIP:new Promise((P,v)=>setImmediate(()=>{try{P(S({[o]:g})?A:$i.SKIP)}catch(U){v(U)}}))}:({value:g})=>g):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:g,value:A}){return this.isSync?A&&S(A)?g:$i.SKIP:new Promise((P,v)=>setImmediate(()=>{try{P(A&&S(A)?g:$i.SKIP)}catch(U){v(U)}}))})}function ti(e,t){if(Array.isArray(t))if(t.length>1){let r=ti(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?ti(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 iW(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;s.hasMappings=!0;let o;return{next(){if(!i){let l=t.relationship.to,_=a((u,d)=>{let f=u;Array.isArray(u)&&(f=jn(u),o=!0);let E=s.get(f);E?E.push(d):s.set(f,E=[d]),u!==f&&(E.key=u)},"add_entry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[l];if(f!=null&&!s.filters?.some(E=>!E(d)))if(n)for(let E=0;E<f.length;E++)_(f[E],u);else _(f,u)}return i=(o?s:s.keys())[Symbol.iterator](),this.next()}let c=i.next();return c.done?c:{value:o?c.value[1].key||c.value[0]:c.value}}}}})}function oW(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 _=jn(l.value);if(!c.has(_))return c.add(_),l}if(!i){let _=new Map;n.fromRecord=u=>u[t.relationship.from]?.filter?.(d=>_.has(jn(d)));for(let u of e){if(n.filters){let d=r.get(u);if(n.filters.some(f=>!f(d)))continue}_.set(jn(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 AS(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=ti(t.attributes,u),f=d.definition?.tableClass||d.elements.definition?.tableClass,E=n?.[u],h=AS({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},f,r,E?.[u]?.joined,c[1]===f.primaryKey,i);if(!h)return;if(E){E.filters||(E.filters=[]),E.filters.push(h);return}let m=t.propertyResolvers?.[u],S,R=a((g,A)=>{let P,v;if(m){if(m.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let F of h.idFilter.idSet)e={attribute:m.from,value:F};S=_(m.from,h.idFilter,!0,!0)}else S=_(m.from,h.idFilter,!1,!0);let U=S(g);return S.idFilter&&(R.idFilter=S.idFilter),U}v=m(g,r,A),P=v?.value}else P=g[u];return P?Array.isArray(P)?P.some(h):h(P,v):!1},"recordFilter");return R}}switch(l instanceof Date&&(l=l.getTime()),RS[o]||o){case SS.SEARCH_TYPES.EQUALS:case void 0:return _(c,u=>u===l,!0);case"contains":return _(c,u=>u?.toString().includes(l));case"ends_with":return _(c,u=>u?.toString().endsWith(l));case"starts_with":return _(c,u=>typeof u=="string"&&u.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],_(c,u=>{if(!Array.isArray(u))return!1;for(let d=0,f=l.length;d<f;d++)if(u[d]!==l[d])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),_(c,u=>(0,Os.compareKeys)(u,l[0])>=0&&(0,Os.compareKeys)(u,l[1])<=0,!0);case"gt":return _(c,u=>(0,Os.compareKeys)(u,l)>0);case"ge":return _(c,u=>(0,Os.compareKeys)(u,l)>=0);case"lt":return _(c,u=>(0,Os.compareKeys)(u,l)<0);case"le":return _(c,u=>(0,Os.compareKeys)(u,l)<=0);case"ne":return _(c,u=>(0,Os.compareKeys)(u,l)!==0);case"sort":return()=>!0;default:throw new jr.ClientError(`Unknown query comparator "${o}"`)}function _(u,d,f,E){let h;f=f&&!s&&t?.indices[u]&&i>3,f&&(e.estimated_count==null&&df(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(f=!1));let m=0,S=3;function R(g){let A=g[u],P;if(typeof A!="object"||!A||E?P=d(A):Array.isArray(A)?P=A.some(d):A instanceof Date&&(P=d(A.getTime())),f&&(S++,!P&&!R.idFilter&&++m/S*(i-S)>h)){let v=oc(e,r.transaction.getReadTxn(),!1,t).map(jn),U=new Set(v);R.idFilter=F=>U.has(jn(F)),R.idFilter.idSet=U}return P}return a(R,"recordFilter"),s&&(R.idFilter=d),R}a(_,"attributeComparator")}function df(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/ei(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=RS[n]||n,n===SS.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=ti(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=df(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*ei(e.indices[i.relationship.from])/(ei(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=ei(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=nW*ei(e.primaryStore)+1:n==="between"?r.estimated_count=rW*ei(e.primaryStore)+1:n==="sort"?r.estimated_count=ei(e.primaryStore)+1:r.estimated_count=tW*ei(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function ff(e){if(e)if(Vi=e,sc.lastIndex=0,aW.test(e))try{let t=Wl(new ic,"");if(gr!==Vi.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 ${gr} in '${Vi}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Wl(e,t){let r=sc,n,s,i,o,c,l=decodeURIComponent,_;for(;n=r.exec(Vi);){gr=r.lastIndex;let[,u,d]=n;if(o){if(u)throw new SyntaxError(`expected operator, but encountered '${u}'`);o=!1,c=!1}else c=!0;let f;switch(d){case"=":if(s){if(u.length<=2)i=u;else throw new SyntaxError(`invalid FIQL operator ${u}`);l=DI}else{if(l=decodeURIComponent,i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");s=Ql(u)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=sW[d],l=TS[i]?DI:decodeURIComponent,!u)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=Ql(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"&&PI(h,u),_f(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(Ql(u)),s=void 0;break;case"(":sc.lastIndex=gr;let E=Wl(u?[]:new ic,")");switch(u){case"":_f(e,_),e.conditions.push(E);break;case"limit":switch(E.length){case 1:e.limit=+E[0];break;case 2:e.offset=+E[0],e.limit=E[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(E[0])&&E.length===1&&!E[0].name?(e.select=E[0],e.select.asArray=!0):E.length===1?e.select=E[0]:E.length===2&&E[1]===""?e.select=E.slice(0,1):e.select=E;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=MI(E);break;default:throw new SyntaxError(`unknown query function call ${u}`)}Vi[gr]===","?r.lastIndex=++gr: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");sc.lastIndex=gr,f=Wl([],"}"),f.name=u,e.push(f),Vi[gr]===","?r.lastIndex=++gr:o=!0;break;case"[":sc.lastIndex=gr,u?(f=Wl(new ic,"]"),f.name=u):f=Wl(e.conditions?new ic:[],"]"),e.conditions?(_f(e,_),e.conditions.push(f),s=null):e.push(f),Vi[gr]===","?r.lastIndex=++gr: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"&&PI(h,u),_f(e,_),e.conditions.push(h)}else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(Ql(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?cW:sc,r.lastIndex=gr),gr===Vi.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function _f(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 Ql(e){return e.indexOf(".")>-1?e.split(".").map(Ql):decodeURIComponent(e)}function DI(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(decodeURIComponent(r));if(t==="string")return decodeURIComponent(r);throw new jr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function PI(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new jr.ClientError("wildcard can only be used at the end of a string")}function MI(e){let t=UI(e[0]);return e.length>1&&(t.next=MI(e.slice(1))),t}function UI(e){if(Array.isArray(e)){let t=UI(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 jn(e){return Array.isArray(e)?e.join("\0"):e}function ei(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function lW(e,t,r){return t*r/ei(e)}var jr,SS,Os,$i,tW,rW,nW,sW,TS,RS,aW,sc,cW,gr,Vi,ic,Ef=Ne(()=>{jr=q(ie()),SS=q(_t()),Os=require("ordered-binary"),$i=require("lmdb"),tW=.3,rW=.1,nW=.05,sW={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},TS={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(gS,"executeConditions");a(oc,"searchByIndex");a(ti,"findAttribute");a(iW,"joinTo");a(oW,"joinFrom");RS={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(AS,"filterByType");a(df,"estimateCondition");aW=/[()[\]|!<>.]|(=\w*=)/,sc=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,cW=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(ff,"parseQuery");a(Wl,"parseBlock");a(_f,"assignOperator");a(Ql,"decodeProperty");a(DI,"typedDecoding");a(PI,"wildcardDecoding");a(MI,"toSortObject");a(UI,"toSortEntry");ic=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(jn,"flattenKey");a(ei,"estimatedEntryCount");a(lW,"intersectionEstimate")});var bS={};$e(bS,{CONTEXT:()=>be,ID_PROPERTY:()=>Ue,IS_COLLECTION:()=>In,RECORD_PROPERTY:()=>fe,Resource:()=>jt,snake_case:()=>_W,transformForSelect:()=>pf});function _W(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function vI(e,t){if(jl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(jl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new NS;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){jl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function zr(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,_,u;if(r?(o?(u=i,o=o[be]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(u=s,c=u[this.primaryKey]??null,o=i[be]||i):u=i:(u=s,c=u[Ue]??u[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[be]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(l=s,s[Symbol.iterator]){c=[],_=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let E=c.indexOf("?");if(E>-1){let m=this.parseQuery(c.slice(E+1));l?l=Object.assign(m,l):l=m,c=c.slice(0,E)}let h=this.parsePath(c,o,l);h?.id!==void 0?(h.query&&(l?l=Object.assign(h.query,l):l=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||_?(d=Object.assign({},t),l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),_&&(d.isCollection=!0)):d=t,o.transaction){let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)}else return Ze(o,()=>{let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)},d);function f(E){if(o.authorize){o.authorize=!1;let h=t.type==="read"?E.allowRead(o.user,l,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,u,o):E.allowUpdate(o.user,u,o):t.type==="create"?E.allowCreate(o.user,u,o):E.allowDelete(o.user,l,o);if(h?.then)return h.then(m=>{if(!m)throw new hf(o.user);return typeof u?.then=="function"?u.then(S=>e(E,l,o,S)):e(E,l,o,u)});if(!h)throw new hf(o.user)}return typeof u?.then=="function"?u.then(h=>e(E,l,o,h)):e(E,l,o,u)}a(f,"authorizeActionOnResource")}}function Jr(e,t){let r=new qI.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 OS(e,t,r){let n=e[fe];if(n){let s=e[Dt];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 pf(e,t){let r=t?.propertyResolvers,n=t[be],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):OS(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(OS(l,r,n));for(let d of e)_.push(u(d));return _},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(f=>f&&typeof f=="object"?c(f):f);let _={},u=i(OS(l,r,n)),d;for(let f of e){let E=u(f);E===void 0&&o&&(E=null),E?.then?(d||(d=[]),d.push(E.then(h=>_[f.name||f]=h))):_[f.name||f]=E}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let u=r[c.name]?.definition?.tableClass;l=s[c.name]=pf(c.select||c,u)}let _=o(c.name);return l(_)}else return o(c);else return c}}a(i,"handleProperty")}var BI,HI,qI,be,Ue,In,fe,uW,jt,hf,jl,NS,Qn=Ne(()=>{BI=require("crypto");kl();HI=require("../index"),qI=q(ie());lf();$o();Ef();be=Symbol.for("context"),Ue=Symbol.for("primary-key"),In=Symbol("is-collection"),fe=Symbol("stored-record"),uW={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},jt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Ue]=t;let n=r?.[be];this[be]=n!==void 0?n:r||null}static get=zr(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let _=pf(l,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=zr(function(t,r,n,s){if(Array.isArray(s)&&t[In]){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):Jr(t,"put")},{hasContent:!0,type:"update"});static patch=zr(function(t,r,n,s){return t.patch?t.patch(s,r):Jr(t,"patch")},{hasContent:!0,type:"update"});static delete=zr(function(t,r,n,s){return t.delete?t.delete(r):Jr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,BI.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),Ze(n,()=>{let i=new this(s,n),o=i.update?i.update(r):Jr(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=zr(function(t,r,n,s){return t.invalidate?t.invalidate(r):Jr(t,"delete")},{hasContent:!1,type:"update"});static post=zr(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=zr(function(t,r,n,s){return t.connect?t.connect(s,r):Jr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=zr(function(t,r,n,s){return t.subscribe?t.subscribe(r):Jr(t,"subscribe")},{type:"read"});static publish=zr(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.publish?t.publish(s,r):Jr(t,"publish")},{hasContent:!0,type:"create"});static search=zr(function(t,r,n,s){let i=t.search?t.search(r):Jr(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=pf(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=zr(function(t,r,n,s){return t.search?t.search(s,r):Jr(t,"search")},{hasContent:!0,type:"read"});static copy=zr(function(t,r,n,s){return t.copy?t.copy(s,r):Jr(t,"copy")},{type:"create"});static move=zr(function(t,r,n,s){return t.move?t.move(s,r):Jr(t,"move")},{type:"delete"});post(t){if(this[In])return this.constructor.create(this[Ue],t,this[be]);Jr(this,"post")}static isCollection(t){return t?.[In]}static coerceId(t){return t}static parseQuery(t){return ff(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&&uW[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:vI(t,this),isCollection:jl}}let i=vI(t,this);return jl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[be],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let _=l.asMap.get(t);if(s=_?.find(u=>u.constructor===c),s)return s;_||l.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=l.find(_=>_[Ue]===t&&_.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let _=new Map;for(let u of l){let d=u[Ue],f=_.get(d);f?f.push(u):_.set(d,[u])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[In]=!0),s}subscribe(t){return new Wn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Wn}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[be]}};jt.prototype[be]=null;(0,HI._assignPackageExport)("Resource",jt);a(_W,"snake_case");hf=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(vI,"pathToId");NS=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(zr,"transactional");a(Jr,"missingMethod");a(OS,"selectFromObject");a(pf,"transformForSelect")});var GI={};$e(GI,{Resources:()=>mf,keyArrayToString:()=>ac,resetResources:()=>dW,resources:()=>Yi});function dW(){return Yi=new mf}function ac(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var mf,Yi,zl=Ne(()=>{$o();mf=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,l]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let u=this.get(c.slice(0,_));u&&(u.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),l=this.get(c);if(l){if(l.relativeURL=t.slice(n),!l.hasSubPaths)return l;s=l}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),s?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return Ze(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(dW,"resetResources");a(ac,"keyArrayToString")});function FI(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;cc||((0,Sf.onMessageByType)(xI,u=>{kI(u.path)}),cc=Object.create(null));let o=cc[s]||(cc[s]=[]);o.auditStore=e.auditStore,o.lastTxnTime==null&&(o.lastTxnTime=Date.now());let c=o[i];c||(c=o[i]=new Map,c.envs=o,c.tableId=i,c.store=e.primaryStore),t=ac(t);let l=new IS(r);l.startTime=n;let _=c.get(t);return _?_.push(l):(c.set(t,_=[l]),_.tables=c,_.key=t),l.subscriptions=_,l}function kI(e,t){if(!cc)return;let r=cc[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(s){throw s.message+=" in "+e,s}let n;for(let{key:s,value:i}of r.auditStore.getRange({start:r.lastTxnTime,exclusiveStart:!0})){r.lastTxnTime=s;let o=xt(i),c=r[o.tableId];if(!c)continue;let l=o.recordId,_,u=ac(o.recordId),d=0;do{let f=c.get(u);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=s){(0,yS.info)("omitting",l,h.startTime,s);continue}try{if(h.crossThreads===!1&&!t)continue;let m;h.supportsTransactions&&h.txnInProgress!==o.version&&(m=!0,h.txnInProgress||(n?n.push(h):n=[h]),h.txnInProgress=o.version),h.listener(l,o,s,m)}catch(m){console.error(m),(0,yS.info)(m)}}}if(u==null)break;let E=u.lastIndexOf?.("/",u.length-2);E>-1?u=u.slice(0,E):u=null,d++}while(!0)}if(n)for(let s of n)s.txnInProgress=null,s.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function $I(e,t){let r=t||e,n=r.env;if(t&&!t.cache&&(t.cache=new Map),!n.hasBroadcastListener){n.hasBroadcastListener=!0;let s=n.path;r.on("aftercommit",()=>{(0,Sf.broadcast)({type:xI,path:s}),kI(s,!0)})}}var yS,Sf,xI,cc,rpe,IS,VI=Ne(()=>{yS=q(x()),Sf=q(tt());kl();zl();Go();xI="transaction",rpe=Buffer.alloc(4096);a(FI,"addSubscription");IS=class extends Wn{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(kI,"notifyFromTransactionData");a($I,"listenToCommits")});var KI=T((ipe,YI)=>{"use strict";var wS=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};YI.exports=wS});var QI=T((ape,WI)=>{"use strict";var CS=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};WI.exports=CS});var Tf=T((lpe,jI)=>{"use strict";var DS=X(),PS=C(),{RecordEncoder:fW}=(tc(),oe(uI));DS.initSync();var EW=DS.get(PS.CONFIG_PARAMS.STORAGE_COMPRESSION),hW=DS.get(PS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,pW=PS.UPDATES_PROPERTY,LS=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=EW&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=hW&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:fW},this.alwaysLazyProperty=n=>n===pW)}};jI.exports=LS});var Rf=T((_pe,JI)=>{"use strict";var lc=X(),Jl=C();lc.initSync();var mW=lc.get(Jl.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||lc.get(Jl.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||lc.get(Jl.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",zI=lc.get(Jl.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),SW=lc.get(Jl.CONFIG_PARAMS.STORAGE_NOREADAHEAD),gf=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=mW,this.noFSAccess=!0,zI!==void 0&&(this.overlappingSync=zI),this.noReadAhead=SW}};JI.exports=gf;gf.MAX_DBS=1e4});var Ve=T((fpe,aw)=>{"use strict";var US=require("lmdb"),zn=require("fs-extra"),Xr=require("path"),Af=Tr(),ew=x(),Rr=Wr().LMDB_ERRORS_ENUM,Of=QI(),vS=Tf(),tw=Rf(),Ki=_t(),XI=C(),{table:TW,resetDatabases:gW}=(ge(),oe(Fe)),ZI=X(),Jn=Ki.INTERNAL_DBIS_NAME,rw=Ki.DBI_DEFINITION_NAME,RW="data.mdb",AW="lock.mdb",Xl=".mdb",OW="-lock",MS=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=wn(t,r),this.key_type=this.dbi[Ki.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ki.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new US.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(Rr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Rr.ENV_NAME_REQUIRED)}a(Nf,"pathEnvNameValidation");async function BS(e,t,r=!0){try{await zn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Rr.INVALID_BASE_PATH):n}try{let n=Xr.join(e,t+Xl);return await zn.access(n,zn.constants.R_OK|zn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await zn.access(Xr.join(e,t,RW),zn.constants.R_OK|zn.constants.F_OK),Xr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Rr.INVALID_ENVIRONMENT)}else throw new Error(Rr.INVALID_ENVIRONMENT);throw n}}a(BS,"validateEnvironmentPath");function bf(e,t){if(Af.validateEnv(e),t===void 0)throw new Error(Rr.DBI_NAME_REQUIRED)}a(bf,"validateEnvDBIName");async function NW(e,t,r=!1,n=!1){Nf(e,t);let s=Xr.basename(e);t=t.toString();let i=ZI.get(XI.CONFIG_PARAMS.DATABASES);i||ZI.setProperty(XI.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await BS(e,t,n),nw(e,t,r)}catch(o){if(o.message===Rr.INVALID_ENVIRONMENT){let c=Xr.join(e,t);await zn.mkdirp(n?c:e);let l=new tw(n?c:c+Xl,!1),_=US.open(l);_.dbis=Object.create(null);let u=new vS(!1);_.openDB(Jn,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=HS(e,t,r);return _[Ki.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(NW,"createEnvironment");async function bW(e,t,r,n=!0){Nf(e,t),t=t.toString();let s=Xr.join(e,t);return TW({table:t,database:Xr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(bW,"copyEnvironment");async function nw(e,t,r=!1){Nf(e,t),t=t.toString();let n=HS(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 BS(e,t),i=Xr.join(e,t+Xl),o=s!=i,c=new tw(s,o),l=US.open(c);l.dbis=Object.create(null);let _=iw(l);for(let u=0;u<_.length;u++)wn(l,_[u]);return l[Ki.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(nw,"openEnvironment");async function yW(e,t,r=!1){Nf(e,t),t=t.toString();let n=Xr.join(e,t+Xl),s=await BS(e,t);if(global.lmdb_map!==void 0){let i=HS(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await sw(o),delete global.lmdb_map[i]}}await zn.remove(s),await zn.remove(s===n?s+OW:Xr.join(Xr.dirname(s),AW))}a(yW,"deleteEnvironment");async function sw(e){Af.validateEnv(e);let t=e[Ki.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(sw,"closeEnvironment");function HS(e,t,r=!1){let s=`${Xr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(HS,"getCachedEnvironmentName");function IW(e){Af.validateEnv(e);let t=Object.create(null),r=wn(e,Jn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Jn)try{t[n]=Object.assign(new Of,s)}catch{ew.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(IW,"listDBIDefinitions");function iw(e){Af.validateEnv(e);let t=[],r=wn(e,Jn);for(let{key:n}of r.getRange({start:!1}))n!==Jn&&t.push(n);return t}a(iw,"listDBIs");function wW(e,t){let n=wn(e,Jn).getEntry(t),s=new Of;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{ew.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(wW,"getDBIDefinition");function ow(e,t,r,n=!r){if(bf(e,t),t=t.toString(),t===Jn)throw new Error(Rr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return wn(e,t)}catch(s){if(s.message===Rr.DBI_DOES_NOT_EXIST){let i=new vS(r,n===!0),o=e.openDB(t,i),c=new Of(r===!0,n);return o[rw]=c,wn(e,Jn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(ow,"createDBI");function wn(e,t){if(bf(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Jn?r=wW(e,t):r=new Of,r===void 0)throw new Error(Rr.DBI_DOES_NOT_EXIST);let n;try{let s=new vS(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(Rr.DBI_DOES_NOT_EXIST):s}return n[rw]=r,e.dbis[t]=n,n}a(wn,"openDBI");function CW(e,t){bf(e,t),t=t.toString();let r=wn(e,t),n=r.getStats();return r[Ki.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(CW,"statDBI");async function LW(e,t){try{let r=Xr.join(e,t+Xl);return(await zn.stat(r)).size}catch{throw new Error(Rr.INVALID_ENVIRONMENT)}}a(LW,"environmentDataSize");function DW(e,t){if(bf(e,t),t=t.toString(),t===Jn)throw new Error(Rr.CANNOT_DROP_INTERNAL_DBIS_NAME);wn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],wn(e,Jn).removeSync(t)}a(DW,"dropDBI");function PW(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{wn(e,i)}catch(o){if(o.message===Rr.DBI_DOES_NOT_EXIST)ow(e,i,i!==t,i===t),n=!0;else throw o}}n&&gW()}a(PW,"initializeDBIs");aw.exports={openDBI:wn,openEnvironment:nw,createEnvironment:NW,listDBIs:iw,listDBIDefinitions:IW,createDBI:ow,dropDBI:DW,statDBI:CW,deleteEnvironment:yW,initializeDBIs:PW,TransactionCursor:MS,environmentDataSize:LW,copyEnvironment:bW,closeEnvironment:sw}});var uw=T((hpe,lw)=>{"use strict";var qS=Ve(),MW=x(),cw=Wr().LMDB_ERRORS_ENUM;lw.exports=UW;async function UW(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 qS.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==cw.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await qS.closeEnvironment(global.lmdb_map[n]),await qS.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==cw.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){MW.error(t)}}a(UW,"cleanLMDBMap")});var ri=T((mpe,vW)=>{vW.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var Ow=T((Tpe,Aw)=>{"use strict";var GS=require("recursive-iterator"),BW=require("alasql"),xS=require("clone"),_w=K(),{handleHDBError:dw,hdb_errors:HW}=ie(),{HDB_ERROR_MSGS:fw,HTTP_STATUS_CODES:Ew}=HW,{getDatabases:qW}=(ge(),oe(Fe)),GW=["DISTINCT_ARRAY"],hw=Symbol("validateTables"),FS=Symbol("validateTable"),Spe=Symbol("getAllColumns"),pw=Symbol("validateAllColumns"),yf=Symbol("findColumn"),mw=Symbol("validateOrderBy"),Zl=Symbol("validateSegment"),kS=Symbol("validateColumn"),Sw=Symbol("setColumnsForTable"),Tw=Symbol("checkColumnsForAsterisk"),gw=Symbol("validateGroupBy"),Rw=Symbol("hasColumns"),$S=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[hw](),this[Tw](),this[pw]()}[hw](){if(this[Rw]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[FS](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[FS](t.table)})}}[Rw](){let t=!1,r=new GS(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[FS](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=qW();if(!r[t.databaseid])throw dw(new Error,fw.SCHEMA_NOT_FOUND(t.databaseid),Ew.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw dw(new Error,fw.TABLE_NOT_FOUND(t.databaseid,t.tableid),Ew.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=xS(s);i.table=xS(t),this.attributes.push(i)})}[yf](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)}[Tw](){let t=new GS(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[Sw](r.tableid)}[Sw](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new BW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[pw](){this[Zl](this.statement.columns,!1),this[Zl](this.statement.joins,!1),this[Zl](this.statement.where,!1),this[gw](this.statement.group,!1),this[Zl](this.statement.order,!0)}[Zl](t,r){if(!t)return;let n=new GS(t),s=[];for(let{node:i,path:o}of n)!_w.isEmpty(i)&&!_w.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[mw](i):s.push(this[kS](i)));return s}[gw](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&GW.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=xS(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[yf](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[yf](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`}[mw](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[kS](t)}[kS](t){let r=this[yf](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]}};Aw.exports=$S});var bw=T((Rpe,Nw)=>{"use strict";var VS=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")}};Nw.exports=VS});var Iw=T((Ope,yw)=>{"use strict";var YS=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};yw.exports=YS});var Cw=T((bpe,ww)=>{"use strict";var KS=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}};ww.exports=KS});var Dw=T((Ipe,Lw)=>{"use strict";var WS=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};Lw.exports=WS});var Yo=T((Ppe,Uw)=>{"use strict";var xW=Ve(),FW=Iw(),kW=Cw(),$W=Dw(),Ns=Tr(),eu=Wr().LMDB_ERRORS_ENUM,VW=_t(),ni=C(),YW=K(),KW=require("uuid"),Cpe=require("lmdb"),{handleHDBError:WW,hdb_errors:QW}=ie(),{OVERFLOW_MARKER:Lpe,MAX_SEARCH_KEY_LENGTH:Dpe}=VW,Pw=X();Pw.initSync();var If=Pw.get(ni.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),QS=ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Vo=ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function jW(e,t,r,n,s=Ns.getNextMonotonicTime()){XS(e,t,r,n),jS(e,t,r);let i=new FW,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];Mw(_,!0,s);let u=zW(e,t,r,_),d=_[t];o.push(u),c.push(d)}return zS(o,c,n,i,s)}a(jW,"insertRecords");function zW(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][ni.FUNC_VAL],n[o]=c)}let l=Ns.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[Vo])})}a(zW,"insertRecord");function JW(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(JW,"removeSkippedRecords");function Mw(e,t,r){let n=r>0;(n||!Number.isInteger(e[Vo]))&&(e[Vo]=r||(r=Ns.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[QS]))&&(e[QS]=r||Ns.getNextMonotonicTime()):delete e[QS]}a(Mw,"setTimestamps");function jS(e,t,r){r.indexOf(ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),xW.initializeDBIs(e,t,r)}a(jS,"initializeTransaction");async function XW(e,t,r,n,s=Ns.getNextMonotonicTime()){XS(e,t,r,n),jS(e,t,r);let i=new kW,o=[],c=[],l=[];for(let _=0;_<n.length;_++){let u=n[_],d=u[t],f;try{f=JS(e,t,u,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),l.push(d)}return zS(c,l,n,i,s,o)}a(XW,"updateRecords");async function ZW(e,t,r,n,s=Ns.getNextMonotonicTime()){try{XS(e,t,r,n)}catch(l){throw WW(l,l.message,QW.HTTP_STATUS_CODES.BAD_REQUEST)}jS(e,t,r);let i=new $W,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l],u;YW.isEmpty(_[t])?(u=KW.v4(),_[t]=u):u=_[t];let d=JS(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return zS(o,c,n,i,s)}a(ZW,"upsertRecords");async function zS(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||Ns.getNextMonotonicTime(),JW(r,i),n}a(zS,"finalizeWrite");function JS(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),_=l?.value,u=_;if(!_){if(i)return!1;_={}}if(Mw(r,!u,o),Number.isInteger(r[Vo])&&_[Vo]>r[Vo])return!1;u&&s.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let m=r[h],S=e.dbis[h];if(S===void 0)continue;let R=_[h];if(typeof m=="function"){let A=m([[_]]);Array.isArray(A)&&(m=A[0][ni.FUNC_VAL],r[h]=m)}if(m===R)continue;let g=Ns.getIndexedValues(R);if(g){If&&S.prefetch(g.map(A=>({key:A,value:n})),wf);for(let A=0,P=g.length;A<P;A++)S.remove(g[A],n)}if(g=Ns.getIndexedValues(m),g){If&&S.prefetch(g.map(A=>({key:A,value:n})),wf);for(let A=0,P=g.length;A<P;A++)S.put(g[A],n)}}let E=Object.assign({},_,r);c.put(n,E,E[Vo])},"do_put");return l?d=c.ifVersion(n,l.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:JS(e,t,r,n,s,i,o))}a(JS,"updateUpsertRecord");function eQ(e,t,r){if(Ns.validateEnv(e),t===void 0)throw new Error(eu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(eu.WRITE_ATTRIBUTES_REQUIRED):new Error(eu.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(eQ,"validateBasic");function XS(e,t,r,n){if(eQ(e,t,r),!Array.isArray(n))throw n===void 0?new Error(eu.RECORDS_REQUIRED):new Error(eu.RECORDS_MUST_BE_ARRAY)}a(XS,"validateWrite");function wf(){}a(wf,"noop");Uw.exports={insertRecords:jW,updateRecords:XW,upsertRecords:ZW}});var ys=T((Upe,Hw)=>{"use strict";var Bw=K(),vw=C(),uc=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,bs=require("joi"),Wi={schema_format:{pattern:uc,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},tQ=bs.alternatives(bs.string().min(1).max(Wi.schema_length.maximum).pattern(uc).messages({"string.pattern.base":"{:#label} "+Wi.schema_format.message}),bs.number(),bs.array()).required(),rQ=bs.alternatives(bs.string().min(1).max(Wi.schema_length.maximum).pattern(uc).messages({"string.pattern.base":"{:#label} "+Wi.schema_format.message}),bs.number()),nQ=bs.alternatives(bs.string().min(1).max(Wi.schema_length.maximum).pattern(uc).messages({"string.pattern.base":"{:#label} "+Wi.schema_format.message}),bs.number()).required();function sQ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Wi.schema_length.maximum?`'${e}' maximum of 250 characters`:uc.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(sQ,"checkValidTable");function iQ(e,t){return Bw.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(iQ,"validateSchemaExists");function oQ(e,t){let r=t.state.ancestors[0].schema;return Bw.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(oQ,"validateTableExists");function aQ(e,t){return e.toLowerCase()===vw.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${vw.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(aQ,"validateSchemaName");Hw.exports={common_validators:Wi,schema_regex:uc,hdb_schema_table:tQ,validateSchemaExists:iQ,validateTableExists:oQ,validateSchemaName:aQ,checkValidTable:sQ,hdb_database:rQ,hdb_table:nQ}});var rt=T((Bpe,qw)=>{"use strict";var Ar=require("validate.js");Ar.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Ar.validators.type.checks[t](e)?null:` must be a '${t}' value`};Ar.validators.type.checks={Object:function(e){return Ar.isObject(e)&&!Ar.isArray(e)},Array:Ar.isArray,Integer:Ar.isInteger,Number:Ar.isNumber,String:Ar.isString,Date:Ar.isDate,Boolean:function(e){return typeof e=="boolean"}};Ar.validators.hasValidFileExt=function(e,t){return Ar.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};qw.exports={validateObject:cQ,validateObjectAsync:lQ,validateBySchema:uQ};function cQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Ar(e,t,{format:"flat"});return r?new Error(r):null}a(cQ,"validateObject");async function lQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Ar.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(lQ,"validateObjectAsync");function uQ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(uQ,"validateBySchema")});var Cf=T((qpe,Gw)=>{var{common_validators:Is}=ys(),ru=rt(),tu="is required",gt={database:{presence:!1,format:Is.schema_format,length:Is.schema_length},schema:{presence:!1,format:Is.schema_format,length:Is.schema_length},table:{presence:!0,format:Is.schema_format,length:Is.schema_length},attribute:{presence:!0,format:Is.schema_format,length:Is.schema_length},hash_attribute:{presence:!0,format:Is.schema_format,length:Is.schema_length}};function nu(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(nu,"makeAttributesStrings");function _Q(e){return e=nu(e),gt.table.presence=!1,gt.attribute.presence=!1,gt.hash_attribute.presence=!1,ru.validateObject(e,gt)}a(_Q,"schema_object");function dQ(e){return e=nu(e),gt.table.presence={message:tu},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,ru.validateObject(e,gt)}a(dQ,"table_object");function fQ(e){return e=nu(e),gt.table.presence={message:tu},gt.attribute.presence=!1,ru.validateObject(e,gt)}a(fQ,"create_table_object");function EQ(e){return e=nu(e),gt.table.presence={message:tu},gt.attribute.presence={message:tu},gt.hash_attribute.presence=!1,ru.validateObject(e,gt)}a(EQ,"attribute_object");function hQ(e){return e=nu(e),gt.table.presence={message:tu},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,ru.validateObject(e,gt)}a(hQ,"describe_table");function pQ(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(pQ,"validateTableResidence");Gw.exports={schema_object:_Q,create_table_object:fQ,table_object:dQ,attribute_object:EQ,describe_table:hQ,validateTableResidence:pQ}});var Fw=T((xpe,xw)=>{"use strict";var mQ=require("uuid"),ZS=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||mQ.v4(),this.schema_table=`${this.schema}.${this.table}`}};xw.exports=ZS});var Lf=T((kpe,kw)=>{"use strict";var SQ=Fw(),eT=class extends SQ{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}};kw.exports=eT});var Vw=T((Vpe,$w)=>{"use strict";$w.exports=gQ;var TQ="inserted";function gQ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===TQ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(gQ,"returnObject")});var Df=T((Kpe,jw)=>{"use strict";var RQ=C(),tT=Ve(),AQ=Yo(),{getSystemSchemaPath:OQ,getSchemaPath:NQ}=ze(),bQ=ri(),yQ=Cf(),IQ=Lf(),wQ=Vw(),{handleHDBError:Yw,hdb_errors:Ww}=ie(),Kw=K(),{HTTP_STATUS_CODES:CQ}=Ww,rT=bQ.hdb_attribute,Qw=[];for(let e=0;e<rT.attributes.length;e++)Qw.push(rT.attributes[e].attribute);var LQ="inserted";jw.exports=DQ;async function DQ(e){let t=yQ.attribute_object(e);if(t)throw Yw(new Error,t.message,Ww.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&Kw.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Yw(new Error,r,CQ.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Kw.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 IQ(e.schema,e.table,e.attribute,e.id);try{let i=await tT.openEnvironment(NQ(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}`);tT.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await tT.openEnvironment(OQ(),RQ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await AQ.insertRecords(o,rT.hash_attribute,Qw,[s]);return wQ(LQ,c,{records:[s]},l)}catch(i){throw i}}a(DQ,"lmdbCreateAttribute")});var sT=T((Qpe,Jw)=>{var{hdb_table:PQ,hdb_database:zw}=ys(),MQ=rt(),nT=require("joi"),UQ={undefined:"undefined",null:"null"},vQ=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||UQ[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"),BQ=nT.object({database:zw,schema:zw,table:PQ,records:nT.array().items(nT.object().custom(vQ)).required()});Jw.exports=function(e){return MQ.validateBySchema(e,BQ)}});var su=T((Jpe,Zw)=>{"use strict";var si=K(),Xw=x(),zpe=sT(),{getDatabases:HQ}=(ge(),oe(Fe)),{ClientError:Ko}=ie();Zw.exports=qQ;function qQ(e){if(si.isEmpty(e))throw new Ko("invalid update parameters defined.");if(si.isEmptyOrZeroLength(e.schema))throw new Ko("invalid schema specified.");if(si.isEmptyOrZeroLength(e.table))throw new Ko("invalid table specified.");if(!Array.isArray(e.records))throw new Ko("records must be an array");let t=HQ()[e.schema]?.[e.table];if(si.isEmpty(t))throw new Ko(`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&&si.isEmptyOrZeroLength(o[r]))throw Xw.error("a valid hash attribute must be provided with update record:",o),new Ko("a valid hash attribute must be provided with update record, check log for more info");if(!si.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Xw.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Ko(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!si.isEmpty(o[r])&&o[r]!==""&&n.has(si.autoCast(o[r]))&&(o.skip=!0),n.add(si.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(qQ,"insertUpdateValidate")});var iu=T((Zpe,eC)=>{"use strict";var GQ=C().OPERATIONS_ENUM,iT=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=GQ.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};eC.exports=iT});var ou=T((rme,rC)=>{"use strict";var tme=iu(),Pf=C(),oT=K(),tC=x(),xQ=require("uuid"),{handleHDBError:Mf,hdb_errors:FQ}=ie(),{HDB_ERROR_MSGS:Uf,HTTP_STATUS_CODES:vf}=FQ;rC.exports=kQ;function kQ(e,t,r){for(let s=0;s<t.length;s++)$Q(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];VQ(i,r,e.operation)}}a(kQ,"processRows");function $Q(e){if(Buffer.byteLength(String(e))>Pf.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Mf(new Error,Uf.ATTR_NAME_LENGTH_ERR(e),vf.BAD_REQUEST,void 0,void 0,!0);if(oT.isEmptyOrZeroLength(e)||oT.isEmpty(e.trim()))throw Mf(new Error,Uf.ATTR_NAME_NULLISH_ERR,vf.BAD_REQUEST,void 0,void 0,!0)}a($Q,"validateAttribute");function VQ(e,t,r){if(!e.hasOwnProperty(t)||oT.isEmptyOrZeroLength(e[t])){if(r===Pf.OPERATIONS_ENUM.INSERT||r===Pf.OPERATIONS_ENUM.UPSERT){e[t]=xQ.v4();return}throw tC.error("Update transaction aborted due to record with no hash value:",e),Mf(new Error,Uf.RECORD_MISSING_HASH_ERR,vf.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Pf.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw tC.error(e),Mf(new Error,Uf.HASH_VAL_LENGTH_ERR,vf.BAD_REQUEST,void 0,void 0,!0)}a(VQ,"validateHash")});var Bf=T((sme,sC)=>{"use strict";var nC=K(),YQ=C(),KQ=x(),WQ=Df(),QQ=Lf(),jQ=ii(),{SchemaEventMsg:zQ}=Xn(),JQ="already exists in";sC.exports=XQ;async function XQ(e,t,r){if(nC.isEmptyOrZeroLength(r))return r;let n=[];nC.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 ZQ(e,t.schema,t.name,i)})),s}a(XQ,"lmdbCheckForNewAttributes");async function ZQ(e,t,r,n){let s=new QQ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await ej(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(JQ))KQ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(ZQ,"createNewAttribute");async function ej(e){let t;return t=await WQ(e),jQ.signalSchemaChange(new zQ(process.pid,YQ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(ej,"createAttribute")});var _c=T((ome,iC)=>{"use strict";var aT=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}};iC.exports=aT});var aC=T((cme,oC)=>{"use strict";var tj=_c(),rj=C().OPERATIONS_ENUM,cT=class extends tj{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(rj.INSERT,r,n,s,i),this.records=t}};oC.exports=cT});var lC=T((ume,cC)=>{"use strict";var nj=_c(),sj=C().OPERATIONS_ENUM,lT=class extends nj{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(sj.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};cC.exports=lT});var _C=T((dme,uC)=>{"use strict";var ij=_c(),oj=C().OPERATIONS_ENUM,uT=class extends ij{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(oj.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};uC.exports=uT});var fC=T((Eme,dC)=>{"use strict";var aj=_c(),cj=C().OPERATIONS_ENUM,_T=class extends aj{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(cj.DELETE,n,s,t,i),this.original_records=r}};dC.exports=_T});var au=T((mme,mC)=>{"use strict";var pme=require("path"),EC=Ve(),lj=aC(),uj=lC(),_j=_C(),dj=fC(),dc=_t(),hC=K(),{CONFIG_PARAMS:fj}=C(),pC=X();pC.initSync();var Hf=C().OPERATIONS_ENUM,{getTransactionAuditStorePath:Ej}=ze();mC.exports=hj;async function hj(e,t){if(pC.get(fj.LOGGING_AUDITLOG)===!1)return;let r=Ej(e.schema,e.table),n=await EC.openEnvironment(r,e.table,!0),s=pj(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){EC.initializeDBIs(n,dc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,dc.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[dc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[dc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),hC.isEmpty(s.user_name)||n.dbis[dc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[dc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(hj,"writeTransaction");function pj(e,t){let r=hC.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Hf.INSERT)return new lj(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Hf.UPDATE)return new uj(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Hf.UPSERT)return new _j(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Hf.DELETE)return new dj(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(pj,"createTransactionObject")});var dT=T((gme,SC)=>{"use strict";var mj=su(),Tme=iu(),cu=C(),Sj=ou(),Tj=Yo().insertRecords,gj=Ve(),Rj=x(),Aj=Bf(),{getSchemaPath:Oj}=ze(),Nj=au();SC.exports=bj;async function bj(e){try{let{schema_table:t,attributes:r}=mj(e);Sj(e,r,t.hash_attribute),e.schema!==cu.SYSTEM_SCHEMA_NAME&&(r.includes(cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Aj(e.hdb_auth_header,t,r),s=Oj(e.schema,e.table),i=await gj.openEnvironment(s,e.table),o=await Tj(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Nj(e,o)}catch(c){Rj.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(bj,"lmdbCreateRecords")});var RC=T((Ame,gC)=>{"use strict";var TC=C(),yj=dT(),Ij=iu(),wj=require("fs-extra"),{getSchemaPath:Cj}=ze();gC.exports=Lj;async function Lj(e){let t=[{name:e.schema,createddate:Date.now()}],r=new Ij(TC.SYSTEM_SCHEMA_NAME,TC.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await yj(r),await wj.mkdirp(Cj(e.schema))}a(Lj,"lmdbCreateSchema")});var OC=T((Nme,AC)=>{"use strict";var fT=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}};AC.exports=fT});var IC=T((Cme,yC)=>{"use strict";var NC=Ve(),ET=Tr(),hT=Wr().LMDB_ERRORS_ENUM,Dj=_t(),bC=x(),yme=K(),Pj=require("lmdb"),Mj=OC(),Uj=C(),{OVERFLOW_MARKER:Ime,MAX_SEARCH_KEY_LENGTH:wme}=Dj,vj=Uj.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Bj(e,t,r,n){if(ET.validateEnv(e),t===void 0)throw new Error(hT.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(hT.IDS_REQUIRED):new Error(hT.IDS_MUST_BE_ITERABLE);try{let s=NC.listDBIs(e);NC.initializeDBIs(e,t,s);let i=new Mj,o,c=[],l=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||n&&h[vj]>n){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,Pj.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let R=s[S];if(!h.hasOwnProperty(R)||R===t)continue;let g=e.dbis[R],A=h[R];if(A!=null)try{let P=ET.getIndexedValues(A);if(P)for(let v=0,U=P.length;v<U;v++)g.remove(P[v],o)}catch{bC.warn(`cannot delete from attribute: ${R}, ${A}:${o}`)}}});c.push(m),l.push(o),i.original_records.push(h)}catch(h){bC.warn(h),i.skipped.push(o)}let _=[],u=await Promise.all(c);for(let f=0,E=u.length;f<E;f++)u[f]===!0?i.deleted.push(l[f]):(i.skipped.push(l[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=ET.getNextMonotonicTime(),i}catch(s){throw s}}a(Bj,"deleteRecords");yC.exports={deleteRecords:Bj}});var lu=T((Dme,CC)=>{"use strict";var fc=K(),Hj=IC(),qj=Ve(),{getSchemaPath:Gj}=ze(),xj=au(),Fj=x();CC.exports=kj;async function kj(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(fc.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(fc.isEmptyOrZeroLength(e.hash_values)&&!fc.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];fc.isEmpty(l)||e.hash_values.push(l)}}if(fc.isEmptyOrZeroLength(e.hash_values))return wC([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(fc.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=Gj(e.schema,e.table),i=await qj.openEnvironment(s,e.table),o=await Hj.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await xj(e,o)}catch(c){Fj.error(`unable to write transaction due to ${c.message}`)}return wC(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(kj,"lmdbDeleteRecords");function wC(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(wC,"createDeleteResponse")});var mT=T((Ume,LC)=>{"use strict";var $j=C(),Mme=Tr();function pT(e,t){let r=Object.create(null);if(t.length===1&&$j.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(pT,"parseRow");function Vj(e,t,r,n){let s=pT(r,e);n.push(s)}a(Vj,"searchAll");function Yj(e,t,r,n){let s=pT(r,e);n[t]=s}a(Yj,"searchAllToMap");function Kj(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Kj,"iterateDBI");function Wo(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(Wo,"pushResults");function Wj(e,t,r,n,s,i){t.toString().endsWith(e)&&Wo(t,r,n,s,i)}a(Wj,"endsWith");function Qj(e,t,r,n,s,i){t.toString().includes(e)&&Wo(t,r,n,s,i)}a(Qj,"contains");function jj(e,t,r,n,s,i){t>e&&Wo(t,r,n,s,i)}a(jj,"greaterThanCompare");function zj(e,t,r,n,s,i){t>=e&&Wo(t,r,n,s,i)}a(zj,"greaterThanEqualCompare");function Jj(e,t,r,n,s,i){t<e&&Wo(t,r,n,s,i)}a(Jj,"lessThanCompare");function Xj(e,t,r,n,s,i){t<=e&&Wo(t,r,n,s,i)}a(Xj,"lessThanEqualCompare");LC.exports={parseRow:pT,searchAll:Vj,searchAllToMap:Yj,iterateDBI:Kj,endsWith:Wj,contains:Qj,greaterThanCompare:jj,greaterThanEqualCompare:zj,lessThanCompare:Jj,lessThanEqualCompare:Xj,pushResults:Wo}});var Ec=T((Gme,HC)=>{"use strict";var Qi=Ve(),Bme=x(),Zr=Tr(),qf=_t(),dt=Wr().LMDB_ERRORS_ENUM,Hme=K(),Zj=C(),Gf=mT(),{parseRow:ez}=Gf,qme=require("lmdb"),{OVERFLOW_MARKER:DC,MAX_SEARCH_KEY_LENGTH:tz}=qf;function PC(e,t,r,n=!1,s=void 0,i=void 0){return Qo(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(PC,"iterateFullIndex");function uu(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return Qo(e,t,r,(u,d,f,E)=>{let g={transaction:u,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!_,exclusiveStart:i===!0?_:l};return E===r?(g.values=!1,d.getRange(g).map(A=>({value:A}))):d.getRange(g)})}a(uu,"iterateRangeBetween");function Qo(e,t,r,n){let s=e.database||e,i=Qi.openDBI(s,r);i[qf.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Qi.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(Qo,"setupTransaction");function MC(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(DC)){if(!s)if(r)s=Qi.openDBI(e,r);else{let l=Qi.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=Qi.openDBI(e,l[_]),!s[qf.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(MC,"getOverflowCheck");function rz(e,t,r,n=!1,s=void 0,i=void 0){if(Zr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);return Qo(e,t,t,(o,c,l)=>(xf(r),r=_u(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>ez(_.value,r))))}a(rz,"searchAll");function nz(e,t,r,n=!1,s=void 0,i=void 0){if(Zr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);xf(r),r=_u(e.database||e,r);let o=new Map;for(let{key:c,value:l}of PC(e,t,t,n,s,i))o.set(c,Gf.parseRow(l,r));return o}a(nz,"searchAllToMap");function sz(e,t,r=!1,n=void 0,s=void 0){if(Zr.validateEnv(e),t===void 0)throw new Error(dt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=PC(e,void 0,t,r,n,s),c=o.transaction,l=MC(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(sz,"iterateDBI");function iz(e,t){if(Zr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);return Qi.statDBI(e,t).entryCount}a(iz,"countAll");function oz(e,t,r,n,s=!1,i=void 0,o=void 0){return ji(e,r,n),Qo(e,t,r,(c,l,_,u)=>(n=Zr.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(oz,"equals");function az(e,t,r){return ji(e,t,r),Qi.openDBI(e,t).getValuesCount(r)}a(az,"count");function cz(e,t,r,n,s=!1,i=void 0,o=void 0){return ji(e,r,n),Qo(e,null,r,(c,l)=>{n=Zr.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let u;if(s===!0){let d;for(let f of l.getKeys({transaction:c,start:n}))if(!f.startsWith(n)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),u=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(n))return f;if(_===!0)return u.DONE}}),u.filter(f=>f)}else return u=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return u.DONE}),_?u:u.filter(d=>d)})}a(cz,"startsWith");function lz(e,t,r,n,s=!1,i=void 0,o=void 0){return UC(e,t,r,n,s,i,o,!0)}a(lz,"endsWith");function UC(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ji(e,r,n),Qo(e,null,r,(l,_,u,d)=>{let f=MC(u,l,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(E=>{let h=E.toString();return h.endsWith(DC)?_.getValues(E,{transaction:l}).map(m=>{let S=f(E,m);if(c?S.endsWith(n):S.includes(n))return{key:S,value:m}}).filter(m=>m):(c?h.endsWith(n):h.includes(n))?_[qf.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:l}).map(m=>({key:E,value:m})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(UC,"contains");function uz(e,t,r,n,s=!1,i=void 0,o=void 0){ji(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),uu(e,t,r,n,l,s,i,o,!0,!1)}a(uz,"greaterThan");function _z(e,t,r,n,s=!1,i=void 0,o=void 0){ji(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),uu(e,t,r,n,l,s,i,o,!1,!1)}a(_z,"greaterThanEqual");function dz(e,t,r,n,s=!1,i=void 0,o=void 0){ji(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),uu(e,t,r,l,n,s,i,o,!1,!0)}a(dz,"lessThan");function fz(e,t,r,n,s=!1,i=void 0,o=void 0){ji(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),uu(e,t,r,l,n,s,i,o,!1,!1)}a(fz,"lessThanEqual");function Ez(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Zr.validateEnv(e),r===void 0)throw new Error(dt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(dt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(dt.END_VALUE_REQUIRED);if(n=Zr.convertKeyValueToWrite(n),s=Zr.convertKeyValueToWrite(s),n>s)throw new Error(dt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return uu(e,t,r,n,s,i,o,c)}a(Ez,"between");function hz(e,t,r,n){Zr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(xf(r),r=_u(s,r),n===void 0)throw new Error(dt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Gf.parseRow(c,r)),o}a(hz,"searchByHash");function pz(e,t,r){Zr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(dt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(pz,"checkHashExists");function mz(e,t,r,n,s=[]){return BC(e,t,r,n,s),vC(e,t,r,n,s).map(i=>i[1])}a(mz,"batchSearchByHash");function Sz(e,t,r,n,s=[]){BC(e,t,r,n,s);let i=new Map;for(let[o,c]of vC(e,t,r,n,s))i.set(o,c);return i}a(Sz,"batchSearchByHashToMap");function vC(e,t,r,n,s=[]){return Qo(e,t,t,(i,o,c)=>{r=_u(c,r);let l=r.length<3;return n.map(_=>{let u=c.dbis[t].get(_,{transaction:i,lazy:l});if(u)return[_,Gf.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(vC,"batchHashSearch");function BC(e,t,r,n,s){if(Zr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(xf(r),n==null)throw new Error(dt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(dt.IDS_MUST_BE_ITERABLE)}a(BC,"initializeBatchSearchByHash");function xf(e){if(!Array.isArray(e))throw e===void 0?new Error(dt.FETCH_ATTRIBUTES_REQUIRED):new Error(dt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(xf,"validateFetchAttributes");function ji(e,t,r){if(Zr.validateEnv(e),t===void 0)throw new Error(dt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(dt.SEARCH_VALUE_REQUIRED);if(r?.length>tz)throw new Error(dt.SEARCH_VALUE_TOO_LARGE)}a(ji,"validateComparisonFunctions");function _u(e,t){return t.length===1&&Zj.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Qi.listDBIs(e)),t}a(_u,"setGetWholeRowAttributes");HC.exports={searchAll:rz,searchAllToMap:nz,count:az,countAll:iz,equals:oz,startsWith:cz,endsWith:lz,contains:UC,searchByHash:hz,setGetWholeRowAttributes:_u,batchSearchByHash:mz,batchSearchByHashToMap:Sz,checkHashExists:pz,iterateDBI:sz,greaterThan:uz,greaterThanEqual:_z,lessThan:dz,lessThanEqual:fz,between:Ez}});var hc=T((Fme,kC)=>{var qC=require("lodash"),GC=rt(),he=require("joi"),Tz=K(),{hdb_schema_table:du,checkValidTable:xC,hdb_table:FC,hdb_database:Ff}=ys(),{handleHDBError:gz,hdb_errors:Rz}=ie(),{getDatabases:Az}=(ge(),oe(Fe)),{HTTP_STATUS_CODES:Oz}=Rz,Nz=he.object({database:Ff,schema:Ff,table:FC,search_attribute:du,search_value:he.any().required(),get_attributes:he.array().min(1).items(he.alternatives(du,he.object())).optional(),desc:he.bool(),limit:he.number().integer().min(1),offset:he.number().integer().min(0)}),bz=he.object({database:Ff,schema:Ff,table:FC,operator:he.string().valid("and","or").default("and").lowercase(),offset:he.number().integer().min(0),limit:he.number().integer().min(1),get_attributes:he.array().min(1).items(he.alternatives(du,he.object())).optional(),sort:he.object({attribute:he.alternatives(du,he.array().min(1)),descending:he.bool().optional()}).optional(),conditions:he.array().min(1).items(he.alternatives(he.object({operator:he.string().valid("and","or").default("and").lowercase(),conditions:he.array()}),he.object({search_attribute:he.alternatives(du,he.array().min(1)),search_type:he.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:he.when("search_type",{switch:[{is:"equals",then:he.any()},{is:"between",then:he.array().items(he.alternatives([he.string(),he.number()])).length(2)}],otherwise:he.alternatives(he.string(),he.number())}).required()}))).required()});kC.exports=function(e,t){let r=null;switch(t){case"value":r=GC.validateBySchema(e,Nz);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(xC("database",e.schema)),i(xC("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=GC.validateBySchema(e,bz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Tz.checkGlobalSchemaTable(e.schema,e.table);if(s)return gz(new Error,s,Oz.NOT_FOUND);let o=Az()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(u=>{for(let d=0,f=u.conditions.length;d<f;d++){let E=u.conditions[d];E.conditions?l(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&l(e);let _=qC.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!Array.isArray(u)&&!qC.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 ST=T(($me,$C)=>{"use strict";var yz=Ve(),Iz=hc(),{getSchemaPath:wz}=ze();$C.exports=Cz;function Cz(e){let t=Iz(e,"hashes");if(t)throw t;let r=wz(e.schema,e.table);return yz.openEnvironment(r,e.table)}a(Cz,"initialize")});var TT=T((Yme,VC)=>{"use strict";var Lz=Ec(),Dz=ST();VC.exports=Pz;async function Pz(e){let t=await Dz(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Lz.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Pz,"lmdbGetDataByHash")});var pc=T((Wme,YC)=>{"use strict";var gT=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};YC.exports=gT});var WC=T((zme,KC)=>{"use strict";var jme=pc(),Mz=Ec(),Uz=ST();KC.exports=vz;async function vz(e){let t=await Uz(e),r=global.hdb_schema[e.schema][e.table];return Mz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(vz,"lmdbSearchByHash")});var Zn=T((Xme,QC)=>{"use strict";var RT=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}};QC.exports=RT});var kf=T((eSe,eL)=>{"use strict";var rr=Ec(),Bz=Ve(),Hz=K(),pe=_t(),jo=C(),qz=ri(),jC=Wr().LMDB_ERRORS_ENUM,{getSchemaPath:Gz}=ze(),oi=jo.SEARCH_WILDCARDS;async function xz(e,t,r){let n;e.schema===jo.SYSTEM_SCHEMA_NAME?n=qz[e.table]:n=global.hdb_schema[e.schema][e.table];let s=ZC(e,n.hash_attribute,r,t);return JC(e,s,n.hash_attribute,r)}a(xz,"prepSearch");async function JC(e,t,r,n){let s=Gz(e.schema,e.table),i=await Bz.openEnvironment(s,e.table),o=XC(i,e,t,r),c=o.transaction||i;if([pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,pe.SEARCH_TYPES.SEARCH_ALL,pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Fz(e,r)===!1){let u=e.search_attribute;if(u===r)return n?zC(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[u]:f.key}),"toObject");return n?zC(o,d):o.map(d)}let _=e.search_attribute===r?o.map(u=>u.key):o.map(u=>u.value);return n===!0?rr.batchSearchByHashToMap(c,r,e.get_attributes,_):rr.batchSearchByHash(c,r,e.get_attributes,_)}a(JC,"executeSearch");function XC(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case pe.SEARCH_TYPES.EQUALS:s=rr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.CONTAINS:s=rr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.ENDS_WITH:case pe.SEARCH_TYPES._ENDS_WITH:s=rr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.STARTS_WITH:case pe.SEARCH_TYPES._STARTS_WITH:s=rr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return rr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return rr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.SEARCH_ALL:return rr.searchAll(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return rr.searchAllToMap(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.BETWEEN:s=rr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case pe.SEARCH_TYPES.GREATER_THAN:case pe.SEARCH_TYPES._GREATER_THAN:s=rr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.GREATER_THAN_EQUAL:case pe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=rr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.LESS_THAN:case pe.SEARCH_TYPES._LESS_THAN:s=rr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.LESS_THAN_EQUAL:case pe.SEARCH_TYPES._LESS_THAN_EQUAL:s=rr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(XC,"searchByType");function zC(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(zC,"createMapFromIterable");function Fz(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(Fz,"checkToFetchMore");function ZC(e,t,r,n){if(Hz.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),oi.indexOf(s)>-1)return r===!0?pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:pe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(oi[0])<0&&s.indexOf(oi[1])<0)return c===!0?r===!0?pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:pe.SEARCH_TYPES.EQUALS;if(oi.indexOf(i)>=0&&oi.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),pe.SEARCH_TYPES.CONTAINS;if(oi.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),pe.SEARCH_TYPES.ENDS_WITH;if(oi.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),pe.SEARCH_TYPES.STARTS_WITH;if(s.includes(oi[0])||s.includes(oi[1]))return pe.SEARCH_TYPES.EQUALS;throw new Error(jC.UNKNOWN_SEARCH_TYPE)}else switch(n){case jo.VALUE_SEARCH_COMPARATORS.BETWEEN:return pe.SEARCH_TYPES.BETWEEN;case jo.VALUE_SEARCH_COMPARATORS.GREATER:return pe.SEARCH_TYPES.GREATER_THAN;case jo.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return pe.SEARCH_TYPES.GREATER_THAN_EQUAL;case jo.VALUE_SEARCH_COMPARATORS.LESS:return pe.SEARCH_TYPES.LESS_THAN;case jo.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return pe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(jC.UNKNOWN_SEARCH_TYPE)}}a(ZC,"createSearchTypeFromSearchObject");eL.exports={executeSearch:JC,createSearchTypeFromSearchObject:ZC,prepSearch:xz,searchByType:XC}});var rL=T((nSe,tL)=>{"use strict";var rSe=Zn(),kz=hc(),$z=K(),Vz=C(),Yz=kf();tL.exports=Kz;function Kz(e,t){if(!$z.isEmpty(t)&&Vz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=kz(e,"value");if(n)throw n;return Yz.prepSearch(e,t,!0)}a(Kz,"lmdbGetDataByValue")});var fu=T((oSe,nL)=>{"use strict";var iSe=Zn(),Wz=hc(),Qz=K(),jz=C(),zz=kf();nL.exports=Jz;async function Jz(e,t){if(!Qz.isEmpty(t)&&jz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Wz(e,"value");if(n)throw n;return zz.prepSearch(e,t,!1)}a(Jz,"lmdbSearchByValue")});var iL=T((lSe,sL)=>{"use strict";var cSe=_t(),AT=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}},OT=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},NT=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};sL.exports={SearchByConditionsObject:AT,SearchCondition:OT,SortAttribute:NT}});var uL=T((fSe,lL)=>{"use strict";var _Se=iL().SearchByConditionsObject,Xz=Zn(),Zz=hc(),bT=Ec(),$f=_t(),{Resource:dSe}=(Qn(),oe(bS)),cL=kf(),eJ=mT(),tJ=require("lodash"),{getSchemaPath:rJ}=ze(),oL=Ve(),{handleHDBError:nJ,hdb_errors:sJ}=ie(),{HTTP_STATUS_CODES:iJ}=sJ,oJ=1e8;lL.exports=aJ;async function aJ(e){let t=Zz(e,"conditions");if(t)throw nJ(t,t.message,iJ.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=rJ(e.schema,e.table),n=await oL.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)oL.openDBI(n,_.search_attribute);let i=tJ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===$f.SEARCH_TYPES.EQUALS?_.estimated_count=bT.count(n,_.search_attribute,_.search_value):u===$f.SEARCH_TYPES.CONTAINS||u===$f.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=oJ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await aL(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(cL.filterByType),d=u.length,f=bT.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(l=l.filter(E=>{for(let h=0;h<d;h++)if(!u[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(E=>eJ.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await aL(o,e,f,s.hash_attribute);c=c.concat(E)}let _=new Set,u=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(u,e.limit&&e.limit+u),l=bT.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(aJ,"lmdbSearchByConditions");async function aL(e,t,r,n){let s=new Xz(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===$f.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,cL.searchByType(e,s,i,n).map(o=>o.value)}a(aL,"executeConditionSearch")});var Eu=T((hSe,_L)=>{"use strict";var cJ=C().OPERATIONS_ENUM,yT=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=cJ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};_L.exports=yT});var IT=T((mSe,TL)=>{"use strict";var hL=Zn(),pL=Eu(),mL=fu(),SL=lu(),Or=C(),dL=K(),fL=Ve(),{getTransactionAuditStorePath:lJ,getSchemaPath:uJ}=ze(),EL=x();TL.exports=_J;async function _J(e){try{if(dL.isEmpty(global.hdb_schema[e.schema])||dL.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await dJ(e),await fJ(e);let t=uJ(e.schema,e.table);try{await fL.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")EL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=lJ(e.schema,e.table);await fL.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")EL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(_J,"lmdbDropTable");async function dJ(e){let t=new hL(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await mL(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 pL(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await SL(s)}a(dJ,"deleteAttributesFromSystem");async function fJ(e){let t=new hL(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await mL(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 pL(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await SL(s)}catch(i){throw i}}a(fJ,"dropTableFromSystem")});var RL=T((TSe,gL)=>{"use strict";var EJ=require("fs-extra"),hJ=Zn(),pJ=pc(),mJ=Eu(),SJ=IT(),TJ=lu(),gJ=TT(),RJ=fu(),ai=C(),{getSchemaPath:AJ}=ze(),{handleHDBError:OJ,hdb_errors:NJ}=ie(),{HDB_ERROR_MSGS:bJ,HTTP_STATUS_CODES:yJ}=NJ;gL.exports=IJ;async function IJ(e){let t;try{t=await wJ(e.schema);let r=new hJ(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ai.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ai.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await RJ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await SJ(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new mJ(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await TJ(s);let i=AJ(t);await EJ.remove(i)}catch(r){throw r}}a(IJ,"lmdbDropSchema");async function wJ(e){let t=new pJ(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ai.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await gJ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw OJ(new Error,bJ.SCHEMA_NOT_FOUND(e),yJ.NOT_FOUND,void 0,void 0,!0);return n}a(wJ,"validateDropSchema")});var hu=T((RSe,AL)=>{"use strict";var wT=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};AL.exports=wT});var LT=T((NSe,OL)=>{"use strict";var CJ=require("fs-extra"),Vf=Ve(),{getTransactionAuditStorePath:LJ}=ze(),CT=_t(),OSe=hu();OL.exports=DJ;async function DJ(e){let t;try{let r=LJ(e.schema,e.table);await CJ.mkdirp(r),t=await Vf.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{Vf.createDBI(t,CT.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Vf.createDBI(t,CT.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Vf.createDBI(t,CT.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(DJ,"createTransactionsAuditEnvironment")});var IL=T((ySe,yL)=>{"use strict";var DT=C(),NL=Ve(),PJ=Yo(),{getSystemSchemaPath:MJ,getSchemaPath:UJ}=ze(),vJ=ri(),BJ=Df(),PT=Lf(),HJ=x(),qJ=LT(),UT=vJ.hdb_table,bL=[];for(let e=0;e<UT.attributes.length;e++)bL.push(UT.attributes[e].attribute);yL.exports=GJ;async function GJ(e,t){let r=UJ(t.schema,t.table),n=new PT(t.schema,t.table,DT.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new PT(t.schema,t.table,DT.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new PT(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await NL.createEnvironment(r,t.table),e!==void 0){let o=await NL.openEnvironment(MJ(),DT.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await PJ.insertRecords(o,UT.hash_attribute,bL,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await MT(n),await MT(s),await MT(i)}await qJ(t)}catch(o){throw o}}a(GJ,"lmdbCreateTable");async function MT(e){try{await BJ(e)}catch(t){HJ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(MT,"createAttribute")});var CL=T((wSe,wL)=>{"use strict";var xJ=su(),FJ=ou(),kJ=Bf(),pu=C(),$J=Yo().updateRecords,VJ=Ve(),{getSchemaPath:YJ}=ze(),KJ=au(),WJ=x();wL.exports=QJ;async function QJ(e){try{let{schema_table:t,attributes:r}=xJ(e);FJ(e,r,t.hash_attribute),e.schema!==pu.SYSTEM_SCHEMA_NAME&&(r.includes(pu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(pu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(pu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(pu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await kJ(e.hdb_auth_header,t,r),s=YJ(e.schema,e.table),i=await VJ.openEnvironment(s,e.table),o=await $J(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await KJ(e,o)}catch(c){WJ.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(QJ,"lmdbUpdateRecords")});var DL=T((LSe,LL)=>{"use strict";var jJ=C().OPERATIONS_ENUM,vT=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=jJ.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};LL.exports=vT});var ML=T((MSe,PL)=>{"use strict";var PSe=DL(),zJ=su(),JJ=ou(),XJ=Bf(),mu=C(),ZJ=Yo().upsertRecords,e2=Ve(),{getSchemaPath:t2}=ze(),r2=au(),n2=x(),{handleHDBError:s2,hdb_errors:i2}=ie();PL.exports=o2;async function o2(e){let t;try{t=zJ(e)}catch(l){throw s2(l,l.message,i2.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;JJ(e,n,r.hash_attribute),e.schema!==mu.SYSTEM_SCHEMA_NAME&&(n.includes(mu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(mu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(mu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(mu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await XJ(e.hdb_auth_header,r,n),i=t2(e.schema,e.table),o=await e2.openEnvironment(i,e.table),c=await ZJ(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await r2(e,c)}catch(l){n2.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(o2,"lmdbUpsertRecords")});var vL=T((vSe,UL)=>{"use strict";var BT=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};UL.exports=BT});var HL=T((HSe,BL)=>{"use strict";var HT=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}};BL.exports=HT});var xL=T((xSe,GL)=>{"use strict";var qT=Ve(),{getTransactionAuditStorePath:a2}=ze(),GSe=vL(),Su=_t(),c2=K(),qL=HL(),l2=require("util").promisify,u2=l2(setTimeout),_2=1e4,d2=100;GL.exports=f2;async function f2(e){let t=a2(e.schema,e.table),r=await qT.openEnvironment(t,e.table,!0),n=qT.listDBIs(r);qT.initializeDBIs(r,Su.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new qL;do s=await E2(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 u2(d2);while(s.transactions_deleted>0);return i}a(f2,"deleteAuditLogsBefore");async function E2(e,t){let r=new qL;try{let n=e.dbis[Su.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[Su.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];c2.isEmpty(c)||(s=e.dbis[Su.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Su.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>_2)break}return await s,r}catch(n){throw n}}a(E2,"deleteTransactions")});var kL=T((kSe,FL)=>{"use strict";var GT=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};FL.exports=GT});var VL=T((YSe,$L)=>{"use strict";var h2=Zn(),p2=Eu(),VSe=kL(),ws=C(),m2=K(),xT=Ve(),S2=ri(),T2=fu(),g2=lu(),{getSchemaPath:R2}=ze();$L.exports=A2;async function A2(e,t=!0){let r;e.schema===ws.SYSTEM_SCHEMA_NAME?r=S2[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await N2(e),s=R2(e.schema,e.table),i=await xT.openEnvironment(s,e.table);return t===!0&&await O2(e,i,r.hash_attribute),xT.dropDBI(i,e.attribute),n}a(A2,"lmdbDropAttribute");async function O2(e,t,r){let n=xT.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(O2,"removeAttributeFromAllObjects");async function N2(e){let t=new h2(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await T2(t)).filter(o=>o[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(m2.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new p2(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return g2(i)}a(N2,"dropAttributeFromSystem")});var zL=T((QSe,jL)=>{"use strict";var FT=Ve(),mc=_t(),WSe=Tr(),kT=C(),YL=K(),{getTransactionAuditStorePath:b2}=ze(),y2=Ec(),Yf=_c(),I2=x();jL.exports=w2;async function w2(e){let t=b2(e.schema,e.table),r=await FT.openEnvironment(t,e.table,!0),n=FT.listDBIs(r);FT.initializeDBIs(r,mc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case kT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return KL(r,e.search_values);case kT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,L2(r,e.search_values,s);case kT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return C2(r,e.search_values);default:return KL(r)}}a(w2,"readAuditLog");function KL(e,t=[0,Date.now()]){YL.isEmpty(t[0])&&(t[0]=0),YL.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[mc.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 Yf,s))}a(KL,"searchTransactionsByTimestamp");function C2(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[mc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,QL(e,i))}return Object.fromEntries(r)}a(C2,"searchTransactionsByUsername");function L2(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=y2.equals(e,mc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,mc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of u){let f=Number(d);n.has(f)?n.get(f).push(_.toString()):n.set(f,[_.toString()])}}let s=Array.from(n.keys()),i=QL(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);WL(l,"records",r,u,o),WL(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(L2,"searchTransactionsByHashValues");function WL(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 Yf(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Yf(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(l,[_])}}}a(WL,"loopRecords");function QL(e,t){let r=[];try{let n=e.dbis[mc.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 Yf,i);r.push(o)}}catch(i){I2.warn(i)}return r}catch(n){throw n}}a(QL,"batchSearchTransactions")});var XL=T((XSe,JL)=>{"use strict";var{getSchemaPath:zSe}=ze(),JSe=Ve(),{database:D2}=(ge(),oe(Fe));JL.exports={writeTransaction:P2};async function P2(e,t,r){return D2({database:e,table:t}).transaction(r)}a(P2,"writeTransaction")});var rD=T((eTe,tD)=>{"use strict";var{getSchemaPath:ZL}=ze(),eD=Ve();tD.exports={flush:M2,resetReadTxn:U2};async function M2(e,t){return(await eD.openEnvironment(ZL(e,t),t.toString())).flushed}a(M2,"flush");async function U2(e,t){try{(await eD.openEnvironment(ZL(e,t),t.toString())).resetReadTxn()}catch{}}a(U2,"resetReadTxn")});var oD=T((rTe,iD)=>{"use strict";var{Readable:v2}=require("stream"),{getDatabases:B2}=(ge(),oe(Fe)),{readSync:H2,openSync:q2,createReadStream:nD}=require("fs"),{open:G2}=require("lmdb"),sD=Tf(),x2=Rf(),{AUDIT_STORE_OPTIONS:F2}=(Go(),oe(AI)),{INTERNAL_DBIS_NAME:k2,AUDIT_STORE_NAME:$2}=_t();iD.exports=Y2;var $T=32768,V2=100;async function Y2(e){let t=e.database||e.schema||"data",r=B2()[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=G2({noSync:!0,maxDbs:x2.MAX_DBS}),f,E=d.openDB(k2,new sD(!1)),h=u.useReadTransaction(),m=0,S=a(async function(g,A){A.encoding="binary",A.encoder=void 0;let P=d.openDB(g,A),v=u.openDB(g,A);for(let{key:U,version:F,value:H}of v.getRange({transaction:h,versions:v.useVersions}))f=P.put(U,H,F),m++%V2===0&&(await new Promise(j=>setTimeout(j,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:g,value:A}of u.getRange({transaction:h,start:!1}))if(s.some(P=>g.startsWith?.(P+"/"))){E.put(g,A);let[,P]=g.split("/"),v=!P,U=new sD(!v,v);await S(g,U)}e.include_audit&&await S($2,Object.assign({},F2)),await f;let R=nD(d.path);return R.headers=l(),R.on("close",()=>{h.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=q2(o.path);return o.transaction(()=>{let _=Buffer.alloc($T);H2(c,_,0,$T),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=nD(null,{fd:c,start:$T}),f=new v2.from(async function*(){yield _;for await(let E of d)u.openTimer&&(u.openTimer=0),yield E;u.done()}());return f.headers=l(),f});function l(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(Y2,"getBackup")});var lD=T((sTe,cD)=>{"use strict";var K2=x(),{handleHDBError:W2}=ie(),Q2=bw(),j2=Df(),z2=dT(),J2=RC(),X2=lu(),Z2=TT(),e4=WC(),t4=rL(),r4=fu(),n4=uL(),s4=RL(),i4=IL(),o4=CL(),a4=ML(),c4=xL(),l4=IT(),u4=VL(),_4=zL(),d4=XL(),aD=rD(),f4=oD(),VT=class extends Q2{static{a(this,"LMDBBridge")}async searchByConditions(t){return n4(t)}async getDataByHash(t){return await Z2(t)}async searchByHash(t){return await e4(t)}async getDataByValue(t,r){return await t4(t,r)}async searchByValue(t){return await r4(t)}async createSchema(t){return await J2(t)}async dropSchema(t){return await s4(t)}async createTable(t,r){return await i4(t,r)}async dropTable(t){return await l4(t)}async createAttribute(t){return await j2(t)}async createRecords(t){return await z2(t)}async updateRecords(t){return await o4(t)}async upsertRecords(t){try{return await a4(t)}catch(r){throw W2(r,null,null,K2.ERR,r)}}async deleteRecords(t){return await X2(t)}async dropAttribute(t){return await u4(t)}async deleteAuditLogsBefore(t){return await c4(t)}async readAuditLog(t){return await _4(t)}writeTransaction(t,r,n){return d4.writeTransaction(t,r,n)}flush(t,r){return aD.flush(t,r)}resetReadTxn(t,r){return aD.resetReadTxn(t,r)}getBackup(t){return f4(t)}};cD.exports=VT});var SD={};$e(SD,{ResourceBridge:()=>WT});function QT({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 _D(e,t){let r=Cs(e),n=QT(e,r);if(!r)throw new es.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user},o;Ze(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let _=c[l++],u=await r.get({id:_,lazy:s,select:n},i);return u=u&&cf(u),t?{value:{key:_,value:u}}:{value:u}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function Cs(e){let t=e.database||e.schema||h4,r=ts()[t];if(!r)throw(0,es.handleHDBError)(new Error,E4.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function dD(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*fD(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 ED,Kf,es,hD,pD,rs,YT,KT,mD,E4,h4,p4,m4,uD,WT,TD=Ne(()=>{"use strict";ED=q(lD()),Kf=q(hc()),es=q(ie());ge();hD=q(su()),pD=q(ou()),rs=q(C()),YT=q(ii()),KT=q(Xn()),mD=q(K());$o();lf();({HDB_ERROR_MSGS:E4}=es.hdb_errors),h4="data",p4=1e4,m4=10,WT=class extends ED.default{static{a(this,"ResourceBridge")}constructor(t){super(t),uD=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,Kf.default)(t,"conditions");if(r)throw(0,es.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Cs(t);if(!n)throw new es.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:QT(t,n),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new es.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}]}ft({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await Cs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Cs(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){Cs(t).dropTable()}createSchema(t){return Tu({database:t.schema,table:null}),YT.signalSchemaChange(new KT.SchemaEventMsg(process.pid,rs.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await jT(t.schema),YT.signalSchemaChange(new KT.SchemaEventMsg(process.pid,rs.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,uD.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,hD.default)(t);(0,pD.default)(t,n,r.primaryKey);let s,i=ts()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Ze(o,async c=>{if(!i.schemaDefined){s=[];for(let u of n)i.attributes.find(f=>f.name==u)||s.push(u);s.length>0&&await i.addAttributes(s.map(u=>({name:u,indexed:!0})))}let l=[],_=[];for(let u of t.records){let d=await i.get(u[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(u[i.primaryKey]);continue}d&&(d=cf(d));for(let f in u)if(Object.prototype.hasOwnProperty.call(u,f)){let E=u[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,u[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(u),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(u,f)||(u[f]=d[f]);await i.put(u,o),l.push(u[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=ts()[t.schema][t.table],n={user:t.hdb_user};return Ze(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return dD(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=ts()[t.schema][t.table];if(!r.createdTimeProperty)throw new es.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:rs.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,mD.async_set_timeout)(m4),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%p4===0&&await _();return l.length>0&&await _(),s?dD(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Kf.default)(t,"hashes");if(r)throw r;return _D(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of _D(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&rs.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,Kf.default)(t,"value");if(n)throw n;let s=Cs(t);if(!s)throw new es.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===rs.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:QT(t,s)})}async getDataByValue(t,r){let n=new Map,s=Cs(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){Cs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Cs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Cs(t),n={};switch(t.search_type){case rs.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 rs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of fD(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return fD(r,t.search_values?.[0],t.search_values?.[1])}}};a(QT,"getSelect");a(_D,"getRecords");a(Cs,"getTable");a(dD,"createDeleteResponse");a(fD,"groupRecordsInHistory")});var Cn=T((uTe,gD)=>{"use strict";var{ResourceBridge:S4}=(TD(),oe(SD)),T4=X();T4.initSync();var Wf;function g4(){return Wf||(Wf=new S4,Wf)}a(g4,"getBridge");gD.exports=g4()});var ND=T((dTe,OD)=>{"use strict";var RD=require("lodash"),gu=require("mathjs"),R4=require("jsonata"),AD=K();OD.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?RD.uniqWith(e,RD.isEqual):e,searchJSON:A4,mad:Ru.bind(null,gu.mad),mean:Ru.bind(null,gu.mean),mode:Ru.bind(null,gu.mode),prod:Ru.bind(null,gu.prod),median:Ru.bind(null,gu.median)};function Ru(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(Ru,"aggregateFunction");function A4(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(AD.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),AD.isEmpty(this.__ala__.res[r])){let n=R4(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(A4,"searchJSON")});var yD=T((ETe,bD)=>{"use strict";var Rt=require("moment"),zT="YYYY-MM-DDTHH:mm:ss.SSSZZ";Rt.suppressDeprecationWarnings=!0;bD.exports={current_date:()=>Rt().utc().format("YYYY-MM-DD"),current_time:()=>Rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Rt(e).utc().format("YYYY");case"month":return Rt(e).utc().format("MM");case"day":return Rt(e).utc().format("DD");case"hour":return Rt(e).utc().format("HH");case"minute":return Rt(e).utc().format("mm");case"second":return Rt(e).utc().format("ss");case"millisecond":return Rt(e).utc().format("SSS");default:break}},date:e=>Rt(e).utc().format(zT),date_format:(e,t)=>Rt(e).utc().format(t),date_add:(e,t,r)=>Rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=Rt(e).utc(),s=Rt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>Rt().utc().valueOf(),get_server_time:()=>Rt().format(zT),offset_utc:(e,t)=>Rt(e).utc().utcOffset(t).format(zT)}});var LD=T((hTe,CD)=>{"use strict";var O4=require("@turf/area"),N4=require("@turf/length"),b4=require("@turf/circle"),y4=require("@turf/difference"),I4=require("@turf/distance"),w4=require("@turf/boolean-contains"),C4=require("@turf/boolean-equal"),L4=require("@turf/boolean-disjoint"),D4=require("@turf/helpers"),ID=C(),Se=K(),ci=x();CD.exports={geoArea:P4,geoLength:M4,geoCircle:U4,geoDifference:v4,geoDistance:wD,geoNear:B4,geoContains:H4,geoEqual:q4,geoCrosses:G4,geoConvert:x4};function P4(e){if(Se.isEmpty(e))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e));try{return O4.default(e)}catch(t){return ci.trace(t,e),NaN}}a(P4,"geoArea");function M4(e,t){if(Se.isEmpty(e))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e));try{return N4.default(e,{units:t||"kilometers"})}catch(r){return ci.trace(r,e),NaN}}a(M4,"geoLength");function U4(e,t,r){if(Se.isEmpty(e))return NaN;if(Se.isEmpty(t))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e));try{return b4.default(e,t,{units:r||"kilometers"})}catch(n){return ci.trace(n,e,t),NaN}}a(U4,"geoCircle");function v4(e,t){if(Se.isEmpty(e))return NaN;if(Se.isEmpty(t))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return y4(e,t)}catch(r){return ci.trace(r,e,t),NaN}}a(v4,"geoDifference");function wD(e,t,r){if(Se.isEmpty(e))return NaN;if(Se.isEmpty(t))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return I4.default(e,t,{units:r||"kilometers"})}catch(n){return ci.trace(n,e,t),NaN}}a(wD,"geoDistance");function B4(e,t,r,n){if(Se.isEmpty(e)||Se.isEmpty(t))return!1;if(Se.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return wD(e,t,n)<=r}catch(s){return ci.trace(s,e,t),!1}}a(B4,"geoNear");function H4(e,t){if(Se.isEmpty(e)||Se.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return w4.default(e,t)}catch(r){return ci.trace(r,e,t),!1}}a(H4,"geoContains");function q4(e,t){if(Se.isEmpty(e)||Se.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return C4.default(e,t)}catch(r){return ci.trace(r,e,t),!1}}a(q4,"geoEqual");function G4(e,t){if(Se.isEmpty(e)||Se.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return!L4.default(e,t)}catch(r){return ci.trace(r,e,t),!1}}a(G4,"geoCrosses");function x4(e,t,r){if(Se.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Se.isEmpty(t))throw new Error("geo_type is required");if(Se.isEmpty(ID.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(ID.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Se.autoCastJSON(e)),D4[t](e,r)}a(x4,"geoConvert")});var Qf=T((mTe,DD)=>{var zo=ND(),en=yD(),Ls=LD();DD.exports=e=>{e.aggr.mad=e.aggr.MAD=zo.mad,e.aggr.mean=e.aggr.MEAN=zo.mean,e.aggr.mode=e.aggr.MODE=zo.mode,e.aggr.prod=e.aggr.PROD=zo.prod,e.aggr.median=e.aggr.MEDIAN=zo.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=zo.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=zo.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=en.current_date,e.fn.current_time=e.fn.CURRENT_TIME=en.current_time,e.fn.extract=e.fn.EXTRACT=en.extract,e.fn.date=e.fn.DATE=en.date,e.fn.date_format=e.fn.DATE_FORMAT=en.date_format,e.fn.date_add=e.fn.DATE_ADD=en.date_add,e.fn.date_sub=e.fn.DATE_SUB=en.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=en.date_diff,e.fn.now=e.fn.NOW=en.now,e.fn.offset_utc=e.fn.OFFSET_UTC=en.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=en.get_server_time,e.fn.getdate=e.fn.GETDATE=en.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=en.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ls.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ls.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ls.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ls.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ls.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ls.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ls.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ls.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ls.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ls.geoNear}});var vD=T((STe,UD)=>{"use strict";var Au=require("lodash"),Nr=require("alasql");Nr.options.cache=!1;var F4=Qf(),PD=require("clone"),jf=require("recursive-iterator"),de=x(),Le=K(),Sc=Cn(),k4=C(),{hdb_errors:$4}=ie(),{getDatabases:MD}=(ge(),oe(Fe)),V4="IS NULL",ns="There was a problem performing this search. Please check the logs and try again.";F4(Nr);var JT=class{static{a(this,"SQLSearch")}constructor(t,r){if(Le.isEmpty(t))throw de.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),Le.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Le.isEmptyOrZeroLength(n))return de.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw de.error("Error thrown from checkEmptySQL in SQLSearch class method search."),de.error(n),new Error(ns)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw de.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),de.error(n),new Error(ns)}if(Object.keys(this.data).length===0)return de.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw de.error("Error thrown from processJoins in SQLSearch class method search."),de.error(n),new Error(ns)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw de.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),de.error(n),new Error(ns)}try{return t=await this._finalSQL(),t}catch(n){throw de.error("Error thrown from finalSQL in SQLSearch class method search."),de.error(n),new Error(ns)}}_getColumns(){let t=new jf(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(PD(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Au.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=MD()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Le.isEmpty(this.statement.where)){de.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new jf(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Le.isEmpty(r)&&r.right)if(Le.isNotEmptyAndHasValue(r.right.value)){let n=Le.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Nr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Le.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Nr.yy.LogicValue({value:i}):n instanceof Nr.yy.StringValue&&Le.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Nr.yy.NumValue({value:i}))});if(t){de.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new jf(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Le.isEmpty(k4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Le.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Le.isEmptyOrZeroLength(r.left.columnid)||Le.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Le.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!Le.isEmpty(r.right.value)||!Le.isEmpty(r.left.value)?n.add(Le.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<l.length;_++)if(l[_].value)n.add(l[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from)&&Le.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Au.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Le.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Le.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&!Le.isEmptyOrZeroLength(this.columns.columns))return t;if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Nr.promise(r)}catch(r){throw de.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),de.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(PD(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Le.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(V4)>-1&&this.tables.forEach(s=>{let i={columnid:MD()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Au.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Le.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.exact_search_values[_].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[_].values);let u=await Sc.getDataByHash(c);for(let d of c.hash_values)u.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(u){throw de.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),de.error(u),new Error(ns)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async u=>{let d=Object.assign({},c);d.search_value=u;let f=await Sc.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]):(this.data[i].__merged_data[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,E))}))}catch(u){throw de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),de.error(u),new Error(ns)}else if(!Le.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let u=this.comparator_search_values[_].comparators;for(let d=0,f=u.length;d<f;d++){let E=u[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await Sc.getDataByValue(c,E.operation);if(l)for(let[m]of h)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...n[i]],this._setMergedHashAttribute(i,m));else for(let[m,S]of h)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]):(this.data[i].__merged_data[m]=[...n[i]],this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,m))}}catch(u){throw de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),de.error(u),new Error(ns)}else try{c.search_attribute=s.attribute,c.search_value="*";let u=await Sc.getDataByValue(c);if(l)for(let[d]of u)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of u)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]),this._setMergedHashAttribute(i,d))}catch(u){throw de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),de.error(u),new Error(ns)}}}_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 Nr.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 Nr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Nr.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 Nr.yy.FuncValue:new Nr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,m=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${m}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${m}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let u="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(u=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${_} ${u} ${d}`,h=this._convertColumnsToIndexes(E,s);f=await Nr.promise(h,t),t=null}catch(E){throw de.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),de.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let m=f[E];o.forEach(S=>{m[S.key]!==null&&m[S.key]!==void 0&&S.keys.add(m[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),m=Au.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,R=m.length;S<R;S++){let g=m[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[g]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new jf(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=Au.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw de.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),de.error(i),new Error(ns)}}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 Sc.getDataByHash(c),_=s.columns.length;for(let u=0,d=o.length;u<d;u++){let f=o[u],E=l.get(f);for(let h=0;h<_;h++){let m=s.columns[h],S=E[m]===void 0?null:E[m];this.data[n].__merged_data[f].push(S)}}}}catch(r){throw de.error("Error thrown from getDataByHash function in SQLSearch class method getData."),de.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();de.trace(`Final SQL: ${s}`),n=await Nr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),de.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw de.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),de.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return de.error($4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),de.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],_=new RegExp(`${l}.\`${o}\``,"g"),u=`${l}.[${c}]`;n=n.replace(_,u)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(l,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await Sc.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw de.error("There was an error when processing this SQL operation. Check your logs"),de.error(o),new Error(ns)}}return Object.values(Object.values(this.data)[0].__merged_data)}};UD.exports=JT});var nr=T((gTe,BD)=>{"use strict";var Y4=Ow();BD.exports={searchByConditions:W4,searchByHash:Q4,searchByValue:j4,search:z4};var XT=Cn(),{transformReq:ZT}=K(),K4=vD();async function W4(e){return ZT(e),XT.searchByConditions(e)}a(W4,"searchByConditions");async function Q4(e){ZT(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of XT.searchByHash(e))r&&t.push(r);return t}a(Q4,"searchByHash");async function j4(e){ZT(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of XT.searchByValue(e))t.push(r);return t}a(j4,"searchByValue");function z4(e,t){try{let r=new Y4(e);r.validate(),new K4(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(z4,"search")});var li=T((ATe,xD)=>{"use strict";var Ou=require("crypto"),J4=X(),{CONFIG_PARAMS:X4}=C(),qD="aes-256-cbc",Z4=32,e3=16,eg=64,GD=32,t3=eg+GD,HD=new Map;xD.exports={encrypt:r3,decrypt:n3,createNatsTableStreamName:s3};function r3(e){let t=Ou.randomBytes(Z4),r=Ou.randomBytes(e3),n=Ou.createCipheriv(qD,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(r3,"encrypt");function n3(e){let t=e.substr(0,eg),r=e.substr(eg,GD),n=e.substr(t3,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Ou.createDecipheriv(qD,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(n3,"decrypt");function s3(e,t){let r=J4.get(X4.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=HD.get(r);return n||(n=Ou.createHash("md5").update(r).digest("hex"),HD.set(r,n)),n}a(s3,"createNatsTableStreamName")});var zi=T((bTe,kD)=>{"use strict";var NTe=nr(),zf=x(),FD=Cf(),i3=li(),Jf=K(),{handleHDBError:Xf,hdb_errors:o3}=ie(),{HDB_ERROR_MSGS:Zf,HTTP_STATUS_CODES:tg}=o3,a3=X();a3.initSync();var{getDatabases:rg}=(ge(),oe(Fe));kD.exports={describeAll:c3,describeTable:eE,describeSchema:l3};async function c3(e){try{let t=Jf.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=rg(),i={},o={},c=[],l=e?.exact_count;for(let u in s){i[u]=!0,!t&&!n&&(o[u]=e.hdb_user.role.permission[u].describe);let d=s[u];for(let f in d)try{let E;if(t||n)E=await eE({schema:u,table:f,exact_count:l});else if(r&&r[u].describe&&r[u].tables[f].describe){let h=r[u].tables[f].attribute_permissions;E=await eE({schema:u,table:f,exact_count:l},h)}E&&c.push(E)}catch(E){zf.error(E)}}let _={};for(let u in c)t||n?(_[c[u].schema]==null&&(_[c[u].schema]={}),_[c[u].schema][c[u].name]=c[u],i[c[u].schema]&&delete i[c[u].schema]):o[c[u].schema]&&(_[c[u].schema]==null&&(_[c[u].schema]={}),_[c[u].schema][c[u].name]=c[u],i[c[u].schema]&&delete i[c[u].schema]);for(let u in i)t||n?_[u]={}:o[u]&&(_[u]={});return _}catch(t){return zf.error("Got an error in describeAll"),zf.error(t),Xf(new Error,Zf.DESCRIBE_ALL_ERR)}}a(c3,"describeAll");async function eE(e,t){Jf.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=FD.describe_table(e);if(i)throw i;let c=rg()[r];if(!c)throw Xf(new Error,Zf.SCHEMA_NOT_FOUND(e.schema),tg.NOT_FOUND);let l=c[n];if(!l)throw Xf(new Error,Zf.TABLE_NOT_FOUND(e.schema,e.table),tg.NOT_FOUND);function _(f){u.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let u=[];if(s){let f={};s.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),l.attributes.forEach(E=>{f[E.name]&&_(E)})}else l.attributes?.forEach(f=>_(f));let d={schema:r,name:l.tableName,hash_attribute:l.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:u};d.clustering_stream_name=i3.createNatsTableStreamName(d.schema,d.name);try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=l.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&l.indices.__updatedtime__)for(let h of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){zf.warn(`unable to stat table dbi due to ${f}`)}return d}a(eE,"descTable");async function l3(e){Jf.transformReq(e);let t=FD.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=rg()[n];if(!i)throw Xf(new Error,Zf.SCHEMA_NOT_FOUND(e.schema),tg.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Jf.isEmpty(l)||l.describe){let _=await eE({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(l3,"describeSchema")});var Ln=T((CTe,WD)=>{var u3=ri(),{callbackify:VD,promisify:_3}=require("util"),{getDatabases:YD}=(ge(),oe(Fe));WD.exports={setSchemaDataToGlobal:$D,getTableSchema:d3,getSystemSchema:f3,setSchemaDataToGlobalAsync:_3($D)};var KD=zi(),ITe=VD(KD.describeAll),wTe=VD(KD.describeTable);function $D(e){global.hdb_schema=YD(),e&&e()}a($D,"setSchemaDataToGlobal");function d3(e,t,r){let n=YD()[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(d3,"getTableSchema");function f3(){return u3}a(f3,"getSystemSchema")});var br=T((DTe,JD)=>{"use strict";var rE=sT(),zt=K(),E3=require("util"),nE=Cn(),h3=Ln(),QD=x(),{handleHDBError:Jo,hdb_errors:p3}=ie(),{HTTP_STATUS_CODES:Xo}=p3,m3=E3.promisify(h3.getTableSchema),S3="updated",jD="inserted",zD="upserted";JD.exports={insert:g3,update:R3,upsert:A3,validation:T3,flush:O3};async function T3(e){if(zt.isEmpty(e))throw new Error("invalid update parameters defined.");if(zt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(zt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await m3(e.schema,e.table),r=rE(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&&zt.isEmptyOrZeroLength(c[n]))throw QD.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(!zt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw QD.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!zt.isEmpty(c[n])&&c[n]!==""&&s.has(zt.autoCast(c[n]))&&(c.skip=!0),s.add(zt.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(T3,"validation");async function g3(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=rE(e);if(t)throw Jo(new Error,t.message,Xo.BAD_REQUEST);zt.transformReq(e);let r=zt.checkSchemaTableExist(e.schema,e.table);if(r)throw Jo(new Error,r,Xo.BAD_REQUEST);let n=await nE.createRecords(e);return tE(jD,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(g3,"insertData");async function R3(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=rE(e);if(t)throw Jo(new Error,t.message,Xo.BAD_REQUEST);zt.transformReq(e);let r=zt.checkSchemaTableExist(e.schema,e.table);if(r)throw Jo(new Error,r,Xo.BAD_REQUEST);let n=await nE.updateRecords(e);return zt.isEmpty(n.existing_rows)?tE(S3,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):tE(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(R3,"updateData");async function A3(e){if(e.operation!=="upsert")throw Jo(new Error,"invalid operation, must be upsert",Xo.INTERNAL_SERVER_ERROR);let t=rE(e);if(t)throw Jo(new Error,t.message,Xo.BAD_REQUEST);zt.transformReq(e);let r=zt.checkSchemaTableExist(e.schema,e.table);if(r)throw Jo(new Error,r,Xo.BAD_REQUEST);let n=await nE.upsertRecords(e);return tE(zD,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(A3,"upsertData");function tE(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===jD?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===zD?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(tE,"returnObject");function O3(e){return zt.transformReq(e),nE.flush(e.schema,e.table)}a(O3,"flush")});var sg=T((MTe,eP)=>{var N3=rt(),ng=require("joi"),{hdb_table:b3,hdb_database:XD}=ys(),ZD={schema:XD,database:XD,table:b3},y3={date:ng.date().iso().required()},I3={timestamp:ng.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};eP.exports=function(e,t){let r=t==="timestamp"?{...ZD,...I3}:{...ZD,...y3},n=ng.object(r);return N3.validateBySchema(e,n)}});var nP=T((UTe,rP)=>{var w3=rt(),ig=require("joi"),{hdb_table:C3,hdb_database:tP}=ys(),L3=ig.object({schema:tP,database:tP,table:C3,hash_values:ig.array().required(),ids:ig.array()});rP.exports=function(e){return w3.validateBySchema(e,L3)}});var lg=T((vTe,sP)=>{"use strict";var og=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}},ag=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}},cg=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};sP.exports={InsertObject:og,NoSQLSeachObject:ag,DeleteResponseObject:cg}});var ta=T((HTe,lP)=>{"use strict";var oP=sg(),D3=nP(),Zo=K(),iP=require("moment"),aP=x(),{promisify:P3,callbackify:M3}=require("util"),ea=C(),U3=Ln(),ug=P3(U3.getTableSchema),_g=Cn(),{DeleteResponseObject:v3}=lg(),{handleHDBError:Ji,hdb_errors:B3}=ie(),{HDB_ERROR_MSGS:sE,HTTP_STATUS_CODES:Xi}=B3,H3="records successfully deleted",q3=M3(cP);lP.exports={delete:q3,deleteRecord:cP,deleteFilesBefore:G3,deleteAuditLogsBefore:x3};async function G3(e){let t=oP(e,"date");if(t)throw Ji(t,t.message,Xi.BAD_REQUEST,void 0,void 0,!0);if(Zo.transformReq(e),!iP(e.date,iP.ISO_8601).isValid())throw Ji(new Error,sE.INVALID_DATE,Xi.BAD_REQUEST,ea.LOG_LEVELS.ERROR,sE.INVALID_DATE,!0);let n=Zo.checkSchemaTableExist(e.schema,e.table);if(n)throw Ji(new Error,n,Xi.NOT_FOUND,ea.LOG_LEVELS.ERROR,n,!0);let s=await _g.deleteRecordsBefore(e);if(await ug(e.schema,e.table),aP.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(G3,"deleteFilesBefore");async function x3(e){let t=oP(e,"timestamp");if(t)throw Ji(t,t.message,Xi.BAD_REQUEST,void 0,void 0,!0);if(Zo.transformReq(e),isNaN(e.timestamp))throw Ji(new Error,sE.INVALID_VALUE("Timestamp"),Xi.BAD_REQUEST,ea.LOG_LEVELS.ERROR,sE.INVALID_VALUE("Timestamp"),!0);let r=Zo.checkSchemaTableExist(e.schema,e.table);if(r)throw Ji(new Error,r,Xi.NOT_FOUND,ea.LOG_LEVELS.ERROR,r,!0);let n=await _g.deleteAuditLogsBefore(e);return await ug(e.schema,e.table),aP.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(x3,"deleteAuditLogsBefore");async function cP(e){e.ids&&(e.hash_values=e.ids);let t=D3(e);if(t)throw Ji(t,t.message,Xi.BAD_REQUEST,void 0,void 0,!0);Zo.transformReq(e);let r=Zo.checkSchemaTableExist(e.schema,e.table);if(r)throw Ji(new Error,r,Xi.NOT_FOUND,ea.LOG_LEVELS.ERROR,r,!0);try{await ug(e.schema,e.table);let n=await _g.deleteRecords(e);return Zo.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${H3}`),n}catch(n){if(n.message===ea.SEARCH_NOT_FOUND_MESSAGE){let s=new v3;return s.message=ea.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(cP,"deleteRecord")});var iE=T((GTe,dP)=>{var F3=require("crypto"),uP=9;function k3(e){let t=V3(uP),r=_P(e+t);return t+r}a(k3,"createHash");function $3(e,t){let r=e?.substr(0,uP),n=r+_P(t+r);return e===n}a($3,"validateHash");function V3(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(V3,"generateSalt");function _P(e){return F3.createHash("md5").update(e).digest("hex")}a(_P,"md5");dP.exports={hash:k3,validate:$3}});var EP=T((FTe,fP)=>{var dg=rt(),sr={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 Y3(e){return sr.password.presence=!0,sr.username.presence=!0,sr.role.presence=!0,sr.active.presence=!0,dg.validateObject(e,sr)}a(Y3,"addUserValidation");function K3(e){return sr.password.presence=!1,sr.username.presence=!0,sr.role.presence=!1,sr.active.presence=!1,dg.validateObject(e,sr)}a(K3,"alterUserValidation");function W3(e){return sr.password.presence=!1,sr.username.presence=!0,sr.role.presence=!1,sr.active.presence=!1,dg.validateObject(e,sr)}a(W3,"dropUserValidation");fP.exports={addUserValidation:Y3,alterUserValidation:K3,dropUserValidation:W3}});var et=T((VTe,pP)=>{"use strict";var{platform:$Te}=require("os"),Q3="nats-server.zip",fg="nats-server",j3=process.platform==="win32"?`${fg}.exe`:fg,z3=/^[^\s.,*>]+$/,hP="__request__",J3=a(e=>`${e}.${hP}`,"REQUEST_SUBJECT"),X3={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Z3={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},eX={HUB:"hub.pid",LEAF:"leaf.pid"},tX={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},rX={SUCCESS:"success",ERROR:"error"},nX={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},sX={TXN:"txn",MSGID:"msgid"},Tc={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},iX={[Tc.ERR]:1,[Tc.WRN]:2,[Tc.INF]:3,[Tc.DBG]:4,[Tc.TRC]:5},oX={debug:"-D",trace:"-DVV"};pP.exports={NATS_SERVER_ZIP:Q3,NATS_SERVER_NAME:fg,NATS_BINARY_NAME:j3,PID_FILES:eX,NATS_CONFIG_FILES:Z3,SERVER_SUFFIX:tX,NATS_TERM_CONSTRAINTS_RX:z3,REQUEST_SUFFIX:hP,UPDATE_REMOTE_RESPONSE_STATUSES:rX,CLUSTER_STATUS_STATUSES:nX,REQUEST_SUBJECT:J3,SUBJECT_PREFIXES:sX,MSG_HEADERS:X3,LOG_LEVELS:Tc,LOG_LEVEL_FLAGS:oX,LOG_LEVEL_HIERARCHY:iX}});var Eg=T((KTe,mP)=>{"use strict";var aX={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
6
6
  `),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
7
- `)},sX="certificate.pem",iX="privateKey.pem",oX="ca.pem";oP.exports={CERTIFICATE_VALUES:nX,CERTIFICATE_PEM_NAME:sX,PRIVATEKEY_PEM_NAME:iX,CA_PEM_NAME:oX}});var lg=g((kTe,_P)=>{"use strict";var uP=require("fs-extra"),oe=require("joi"),aX=require("os"),{boolean:Ie,string:Nr,number:Mt,array:cg}=oe.types(),{totalmem:aP}=require("os"),na=require("path"),cX=G(),eE=Q(),FTe=ag(),cP=C(),lX=nt(),lP="log",uX="components",_X="Invalid logging.rotation.maxSize unit. Available units are G, M or K",dX="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",fX="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",EX="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",hX="rootPath config parameter is undefined",pX="clustering.enabled config parameter is undefined",sa=Mt.min(0).required(),tE=cg.items({host:Nr.required(),port:sa}).empty(null),Cs;_P.exports={configValidator:mX,routesValidator:OX,route_constraints:tE};function mX(e){if(Cs=e.rootPath,eE.isEmpty(Cs))throw hX;let t=Ie.required(),r=Mt.min(0).max(1e3).empty(null).default(AX),n=Nr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Iu),s=Nr.optional().empty(null),i=Nr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=oe.string().empty(null).default(Iu),c=oe.custom(TX).empty(null).default(Iu),l=e.clustering?.enabled;if(eE.isEmpty(l))throw pX;let _;return l===!0?_=oe.object({enabled:t,hubServer:oe.object({cluster:oe.object({name:oe.required().empty(null),network:oe.object({port:sa,routes:tE}).required()}).required(),leafNodes:oe.object({network:oe.object({port:sa}).required()}).required(),network:oe.object({port:sa}).required()}).required(),leafServer:oe.object({network:oe.object({port:sa,routes:tE}).required(),streams:oe.object({maxAge:Mt.min(120).allow(null).optional(),maxBytes:Mt.min(1).allow(null).optional(),maxMsgs:Mt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:oe.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Ie.optional(),databaseLevel:Ie.optional(),tls:oe.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Ie.required(),verify:Ie.optional()}),user:Nr.optional().empty(null)}).required():_=oe.object({enabled:t,tls:oe.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Ie.required()})}).required(),oe.object({authentication:oe.object({authorizeLocal:Ie,cacheTTL:Mt.required(),enableSessions:Ie}),analytics:oe.object({aggregatePeriod:Mt}),componentsRoot:n.optional(),clustering:_,localStudio:oe.object({enabled:t}).required(),logging:oe.object({auditAuthEvents:oe.object({logFailed:Ie,logSuccessful:Ie}),file:Ie.required(),level:oe.valid("notify","fatal","error","warn","info","debug","trace"),rotation:oe.object({enabled:Ie.optional(),compress:Ie.optional(),interval:Nr.custom(RX).optional().empty(null),maxSize:Nr.custom(gX).optional().empty(null),path:Nr.optional().empty(null).default(Iu)}).required(),root:n,stdStreams:Ie.required(),auditLog:Ie.required()}).required(),operationsApi:oe.object({network:oe.object({cors:Ie.optional(),corsAccessList:cg.optional(),headersTimeout:Mt.min(1).optional(),keepAliveTimeout:Mt.min(1).optional(),port:Mt.optional().empty(null),domainSocket:oe.optional().empty("hdb/operations-server").default(Iu),securePort:Mt.optional().empty(null),timeout:Mt.min(1).optional()}).optional(),tls:oe.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:Nr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:oe.object({network:oe.object({port:sa,securePort:sa,mtls:oe.alternatives([Ie.optional(),oe.object({user:Nr.optional(),certificateAuthority:s,required:Ie.optional()})])}).required(),webSocket:Ie.optional(),requireAuthentication:Ie.optional()}),http:oe.object({compressionThreshold:Mt.optional(),cors:Ie.optional(),corsAccessList:cg.optional(),headersTimeout:Mt.min(1).optional(),port:Mt.min(0).optional().empty(null),securePort:Mt.min(0).optional().empty(null),mtls:oe.alternatives([Ie.optional(),oe.object({user:Nr.optional(),certificateAuthority:s,required:Ie.optional()})])}).required(),threads:oe.alternatives(r.optional(),oe.object({count:r.optional(),debug:oe.alternatives(Ie.optional(),oe.object({startingPort:Mt.min(1).optional(),host:Nr.optional(),waitForDebugger:Ie.optional()})),maxHeapMemory:Mt.min(0).optional()})),storage:oe.object({writeAsync:Ie.required(),overlappingSync:Ie.optional(),caching:Ie.optional(),compression:Ie.optional(),noReadAhead:Ie.optional(),path:c,prefetchWrites:Ie.optional()}).required(),ignoreScripts:Ie.optional(),tls:oe.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:Nr.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(mX,"configValidator");function SX(e){return uP.existsSync(e)?null:`Specified path ${e} does not exist.`}a(SX,"doesPathExist");function TX(e,t){oe.assert(e,Nr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=SX(e);if(r)return t.message(r)}a(TX,"validatePath");function gX(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(_X);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(fX):e}a(gX,"validateRotationMaxSize");function RX(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(dX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(EX):e}a(RX,"validateRotationInterval");function AX(e,t){let r=t.state.path.join("."),n=aX.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||aP();return i=Math.round(Math.min(i,aP())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),cX.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(AX,"setDefaultThreads");function Iu(e,t){let r=t.state.path.join(".");if(!eE.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(eE.isEmpty(Cs))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return na.join(Cs,uX);case"logging.root":return na.join(Cs,lP);case"clustering.leafServer.streams.path":return na.join(Cs,"clustering","leaf");case"storage.path":let n=na.join(Cs,cP.LEGACY_DATABASES_DIR_NAME);return uP.existsSync(n)?n:na.join(Cs,cP.DATABASES_DIR_NAME);case"logging.rotation.path":return na.join(Cs,lP);case"operationsApi.network.domainSocket":return r==null?null:na.join(Cs,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Iu,"setDefaultRoot");function OX(e){let t=oe.object({routes:tE});return lX.validateBySchema({routes:e},t)}a(OX,"routesValidator")});var ht=g((YTe,gP)=>{"use strict";var tn=C(),kt=Q(),Ut=G(),{configValidator:NX,routesValidator:dP}=lg(),br=require("fs-extra"),bX=require("yaml"),ns=require("path"),yX=require("is-number"),EP=require("properties-reader"),IX=require("lodash"),{handleHDBError:wX}=se(),{HTTP_STATUS_CODES:CX,HDB_ERROR_MSGS:rE}=Kr(),VTe=require("minimist"),{server:LX}=(Er(),ie(qo)),{DATABASES_PARAM_CONFIG:wu,CONFIG_PARAMS:en,CONFIG_PARAM_MAP:ss}=tn,DX="Unable to get config value because config is uninitialized",PX="Config successfully initialized",MX="Error backing up config file",UX="Empty parameter sent to getConfigValue",hP=ns.join(tn.PACKAGE_ROOT,"config","yaml",tn.HDB_DEFAULT_CONFIG_FILE),vX="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",fP={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"},nE,vt,sE;gP.exports={createConfigFile:BX,getDefaultConfig:HX,getConfigValue:mP,initConfig:_g,flattenConfig:Ac,updateConfigValue:SP,updateConfigObject:xX,getConfiguration:kX,setConfiguration:$X,readConfigFile:fg,getClusteringRoutes:VX,initOldConfig:TP,getConfigFromFile:YX,getConfigFilePath:ia,addConfig:KX,deleteConfigFromFile:WX,getConfigObj:QX};function BX(e){let t=Zi(hP);nE=Ac(t.toJSON());let r;for(let o in e){let c=ss[o.toLowerCase()];if(c===en.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let l=c.split("_"),_=ug(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...l],_)}catch(u){Ut.error(u)}}}r&&pP(t,r),dg(t);let n=t.toJSON();vt=Ac(n);let s=t.getIn(["rootPath"]),i=ns.join(s,tn.HDB_CONFIG_FILE);br.createFileSync(i),br.writeFileSync(i,String(t)),Ut.trace(`Config file written to ${i}`)}a(BX,"createConfigFile");function pP(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!kt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(wu.TABLES))for(let i in n[s][wu.TABLES])for(let o in n[s][wu.TABLES][i]){let c=n[s][wu.TABLES][i][o],l=[en.DATABASES,s,wu.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=[en.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Ut.error("Error parsing schemas CLI/env config arguments",n)}}a(pP,"setSchemasConfig");function HX(e){if(nE===void 0){let r=Zi(hP);nE=Ac(r.toJSON())}let t=ss[e.toLowerCase()];if(t!==void 0)return nE[t.toLowerCase()]}a(HX,"getDefaultConfig");function mP(e){if(e==null){Ut.error(UX);return}if(vt===void 0){Ut.trace(DX);return}let t=ss[e.toLowerCase()];if(t!==void 0)return vt[t.toLowerCase()]}a(mP,"getConfigValue");function ia(e=kt.getPropsFilePath()){let t=kt.getEnvCliRootPath();return t?ns.join(t,tn.HDB_CONFIG_FILE):EP(e).get(tn.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ia,"getConfigFilePath");function _g(e=!1){if(vt===void 0||e){let t;if(!kt.noBootFile()){t=kt.getPropsFilePath();try{br.accessSync(t,br.constants.F_OK|br.constants.R_OK)}catch(i){throw Ut.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ia(t),n;if(r.includes("config/settings.js"))try{TP(r);return}catch(i){if(i.code!==tn.NODE_ERROR_CODES.ENOENT)throw i}try{n=Zi(r)}catch(i){if(i.code===tn.NODE_ERROR_CODES.ENOENT){Ut.trace(`HarperDB config file not found at ${r}.
8
- This can occur during early stages of install where the config file has not yet been created`);return}else throw Ut.error(i),new Error(`Error reading HarperDB config file at ${r}`)}qX(n,r),dg(n);let s=n.toJSON();if(LX.config=s,vt=Ac(s),vt.logging_rotation_rotate)for(let i in fP)vt[i]&&Ut.error(`Config ${fP[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Ut.trace(PX)}}a(_g,"initConfig");function qX(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ns.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ns.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ns.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(Ut.trace("Updating config file with missing config params"),br.writeFileSync(t,String(e)))}a(qX,"checkForUpdatedConfig");function dg(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t?.http?.threads&&(t.threads=t?.http?.threads);let r=NX(t);if(r.error)throw rE.CONFIG_VALIDATION(r.error.message);typeof r.value.threads=="object"?e.setIn(["threads","count"],r.value.threads.count):e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],r.value?.operationsApi?.network?.domainSocket)}a(dg,"validateConfig");function xX(e,t){vt===void 0&&(vt={});let r=ss[e.toLowerCase()];if(r===void 0){Ut.trace(`Unable to update config object because config param '${e}' does not exist`);return}vt[r.toLowerCase()]=t}a(xX,"updateConfigObject");function SP(e,t,r=void 0,n=!1,s=!1,i=!1){vt===void 0&&_g();let o=mP(ss.hdb_root),c=ns.join(o,tn.HDB_CONFIG_FILE),l=Zi(c),_;if(r===void 0&&e.toLowerCase()===en.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=ss[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=ug(f,t);l.setIn([...E],h)}else for(let f in r){let E=ss[f.toLowerCase()];if(E===en.HTTP_SECUREPORT&&r[f]===vt[en.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),E===en.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===vt[en.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),E===en.DATABASES){_=r[f];continue}if(E?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),m=tn.LEGACY_CONFIG_PARAMS[f.toUpperCase()];m&&m.startsWith("customFunctions")&&l.hasIn(m.split("_"))&&(E=m,h=m.split("_"));let S=ug(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],S)}catch(A){Ut.error(A)}}}_&&pP(l,_),dg(l);let u=l.getIn(["rootPath"]),d=ns.join(u,tn.HDB_CONFIG_FILE);n===!0&&GX(c,u),br.writeFileSync(d,String(l)),s&&(vt=Ac(l.toJSON())),Ut.trace(`Config parameter: ${e} updated with value: ${t}`)}a(SP,"updateConfigValue");function GX(e,t){try{let r=ns.join(t,"backup",`${tn.HDB_CONFIG_FILE}.bak`);br.copySync(e,r),Ut.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Ut.error(MX),Ut.error(r)}}a(GX,"backupConfigFile");var FX=["databases"];function Ac(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)),sE=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])&&!FX.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;!en[l.toUpperCase()]&&ss[l]&&(s[ss[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Ac,"flattenConfig");function ug(e,t){if(e===en.CLUSTERING_NODENAME||e===en.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(yX(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||kt.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 kt.autoCast(t)}a(ug,"castConfigValue");function kX(){let e=kt.getPropsFilePath(),t=ia(e);return Zi(t).toJSON()}a(kX,"getConfiguration");async function $X(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return SP(void 0,void 0,s,!0),vX}catch(i){throw typeof i=="string"||i instanceof String?wX(i,i,CX.BAD_REQUEST,void 0,void 0,!0):i}}a($X,"setConfiguration");function fg(){let e=kt.getPropsFilePath();try{br.accessSync(e,br.constants.F_OK|br.constants.R_OK)}catch(n){if(!kt.noBootFile())throw Ut.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ia(e);return Zi(t).toJSON()}a(fg,"readConfigFile");function Zi(e){return bX.parseDocument(br.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Zi,"parseYamlDoc");function VX(){let e=fg(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=kt.isEmptyOrZeroLength(t)?[]:t;let r=dP(t);if(r)throw rE.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=kt.isEmptyOrZeroLength(n)?[]:n;let s=dP(n);if(s)throw rE.CONFIG_VALIDATION(s.message);if(!kt.isEmptyOrZeroLength(n)&&!kt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!kt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw rE.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(VX,"getClusteringRoutes");function TP(e){let t=EP(e);vt={};for(let r in ss){let n=t.get(r.toUpperCase());if(kt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ss[r].toLowerCase();s===en.LOGGING_ROOT?vt[s]=ns.dirname(n):vt[s]=n}return vt}a(TP,"initOldConfig");function YX(e){let t=fg();return IX.get(t,e.replaceAll("_","."))}a(YX,"getConfigFromFile");async function KX(e,t){let r=Zi(ia());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await br.writeFile(ia(),String(r))}a(KX,"addConfig");function WX(e){let t=ia(kt.getPropsFilePath()),r=Zi(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ns.join(n,tn.HDB_CONFIG_FILE);br.writeFileSync(s,String(r))}a(WX,"deleteConfigFromFile");function QX(){return sE||(_g(),sE)}a(QX,"getConfigObj")});var AP=g((WTe,RP)=>{"use strict";var iE=C(),oE=class{static{a(this,"BaseLicense")}constructor(t=0,r=iE.RAM_ALLOCATION_ENUM.DEFAULT,n=iE.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},Eg=class extends oE{static{a(this,"ExtendedLicense")}constructor(t=0,r=iE.RAM_ALLOCATION_ENUM.DEFAULT,n=iE.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};RP.exports={BaseLicense:oE,ExtendedLicense:Eg}});var oa=g((jTe,wP)=>{"use strict";var Nc=require("fs-extra"),NP=Zf(),bP=require("crypto"),jX=require("moment"),zX=require("uuid").v4,sr=G(),pg=require("path"),JX=Q(),eo=C(),{totalmem:OP}=require("os"),XX=AP().ExtendedLicense,Oc="invalid license key format",ZX="061183",eZ="mofi25",tZ="aes-256-cbc",rZ=16,nZ=32,yP=J();yP.initSync();var hg;wP.exports={validateLicense:IP,generateFingerPrint:iZ,licenseSearch:Tg,getLicense:cZ,checkMemoryLimit:lZ};function mg(){return pg.join(yP.getHdbBasePath(),eo.LICENSE_KEY_DIR_NAME,eo.LICENSE_FILE_NAME)}a(mg,"getLicenseDirPath");function sZ(){let e=mg();return pg.join(e,eo.LICENSE_FILE_NAME)}a(sZ,"getLicenseFilePath");function Sg(){let e=mg();return pg.join(e,eo.REG_KEY_FILE_NAME)}a(Sg,"getFingerPrintFilePath");async function iZ(){let e=Sg();try{return await Nc.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await oZ();throw sr.error(`Error writing fingerprint file to ${e}`),sr.error(t),new Error("There was an error generating the fingerprint")}}a(iZ,"generateFingerPrint");async function oZ(){let e=zX(),t=NP.hash(e),r=Sg();try{await Nc.mkdirp(mg()),await Nc.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw sr.error(`Error writing fingerprint file to ${r}`),sr.error(n),new Error("There was an error generating the fingerprint")}return t}a(oZ,"writeFingerprint");function IP(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:eo.RAM_ALLOCATION_ENUM.DEFAULT,version:eo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return sr.error("empty license key passed to validate."),r;let n=Sg(),s=!1;try{s=Nc.statSync(n)}catch(i){sr.error(i)}if(s){let i;try{i=Nc.readFileSync(n,"utf8")}catch{sr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(eZ),c=o[1];c=Buffer.concat([Buffer.from(c)],rZ);let l=Buffer.concat([Buffer.from(i)],nZ),_=bP.createDecipheriv(tZ,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let u=null;try{u=_.update(o[0],"hex","utf8"),u.trim(),u+=_.final("utf8")}catch{let E=aZ(o[0],i);if(E)u=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Oc),sr.error(Oc),new Error(Oc)}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(Oc),sr.error(Oc),new Error(Oc)}else r.exp_date=u;r.exp_date<jX().valueOf()&&(r.valid_date=!1),NP.validate(o[1],`${ZX}${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||sr.error("Invalid licence"),r}a(IP,"validateLicense");function aZ(e,t){try{let r=bP.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{sr.warn("Check old license failed")}}a(aZ,"checkOldLicense");function Tg(){let e=new XX,t=[];try{t=Nc.readFileSync(sZ(),"utf-8").split(eo.NEW_LINE)}catch(r){r.code==="ENOENT"?sr.info("no license file found"):sr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(JX.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=IP(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){sr.error("There was an error parsing the license string."),sr.error(s),e.ram_allocation=eo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return hg=e,e}a(Tg,"licenseSearch");async function cZ(){return hg||await Tg(),hg}a(cZ,"getLicense");function lZ(){let e=Tg().ram_allocation,t=process.constrainedMemory?.()||OP();if(t=Math.round(Math.min(t,OP())/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(lZ,"checkMemoryLimit")});var yr=g((ege,VP)=>{"use strict";var PP="username is required",MP="nothing to update, must supply active, role or password to update",UP="password cannot be an empty string",vP="If role is specified, it cannot be empty.",BP="active must be true or false";VP.exports={addUser:SZ,alterUser:TZ,dropUser:RZ,getSuperUser:bZ,userInfo:AZ,listUsers:cE,listUsersExternal:OZ,setUsersToGlobal:yc,findAndValidateUser:kP,getClusterUser:yZ,USERNAME_REQUIRED:PP,ALTERUSER_NOTHING_TO_UPDATE:MP,EMPTY_PASSWORD:UP,EMPTY_ROLE:vP,ACTIVE_BOOLEAN:BP};var HP=Or(),uZ=ra(),Ag=Zf(),qP=nP(),xP=Ar(),Og=ii(),rn=Q(),GP=require("validate.js"),Re=G(),{promisify:_Z}=require("util"),Ng=li(),CP=C(),LP=tt(),dZ=ht(),JTe=J(),XTe=oa(),fZ=ri(),{table:ZTe}=(ge(),ie(Ge)),{handleHDBError:Ls,hdb_errors:EZ}=se(),{HTTP_STATUS_CODES:Ds,AUTHENTICATION_ERROR_MSGS:gg,HDB_ERROR_MSGS:bc}=EZ,{UserEventMsg:bg}=Jn(),Rg=require("lodash"),{server:yg}=(Er(),ie(qo)),hZ=G();yg.getUser=(e,t)=>kP(e,t,t!=null);var FP={username:!0,active:!0,role:!0,password:!0},DP=new Map,aE=xP.searchByValue,pZ=xP.searchByHash,mZ=_Z(uZ.delete);async function SZ(e){let t=GP.cleanAttributes(e,FP),r=qP.addUserValidation(t);if(r)throw Ls(new Error,r.message,Ds.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 aE(n),s=s&&Array.from(s)}catch(l){throw Re.error("There was an error searching for a role in add user"),Re.error(l),l}if(!s||s.length<1)throw Ls(new Error,bc.ROLE_NAME_NOT_FOUND(t.role),Ds.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Ls(new Error,bc.DUP_ROLES_FOUND(t.role),Ds.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Ng.encrypt(t.password)),t.password=Ag.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await HP.insert(i)}catch(l){throw Re.error("There was an error searching for a user."),Re.error(l),l}Re.debug(o);try{await yc()}catch(l){throw Re.error("Got an error setting users to global"),Re.error(l),l}if(o.skipped_hashes.length===1)throw Ls(new Error,bc.USER_ALREADY_EXISTS(t.username),Ds.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],Og.signalUserChange(new bg(process.pid)),`${c.username} successfully added`}a(SZ,"addUser");async function TZ(e){let t=GP.cleanAttributes(e,FP);if(rn.isEmptyOrZeroLength(t.username))throw new Error(PP);if(rn.isEmptyOrZeroLength(t.password)&&rn.isEmptyOrZeroLength(t.role)&&rn.isEmptyOrZeroLength(t.active))throw new Error(MP);if(!rn.isEmpty(t.password)&&rn.isEmptyOrZeroLength(t.password.trim()))throw new Error(UP);if(!rn.isEmpty(t.active)&&!rn.isBoolean(t.active))throw new Error(BP);let r=gZ(t.username);if(!rn.isEmpty(t.password)&&!rn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Ng.encrypt(t.password)),t.password=Ag.hash(t.password)),t.role==="")throw new Error(vP);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 aE(i)||[])}catch(c){throw Re.error("Got an error searching for a role."),Re.error(c),c}if(!o||o.length===0){let c=bc.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Re.error(c),Ls(new Error,c,Ds.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=bc.ALTER_USER_DUP_ROLES(t.role);throw Re.error(c),Ls(new Error,c,Ds.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 HP.update(n)}catch(i){throw Re.error("Error during update."),Re.error(i),i}try{await yc()}catch(i){throw Re.error("Got an error setting users to global"),Re.error(i),i}return Og.signalUserChange(new bg(process.pid)),s}a(TZ,"alterUser");function gZ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(gZ,"isClusterUser");async function RZ(e){try{let t=qP.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(rn.isEmpty(global.hdb_users.get(e.username)))throw Ls(new Error,bc.USER_NOT_EXIST(e.username),Ds.NOT_FOUND,void 0,void 0,!0);let n;try{n=await mZ(r)}catch(s){throw Re.error("Got an error deleting a user."),Re.error(s),s}Re.debug(n);try{await yc()}catch(s){throw Re.error("Got an error setting users to global."),Re.error(s),s}return Og.signalUserChange(new bg(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(RZ,"dropUser");async function AZ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Rg.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await pZ(r)}catch(s){throw Re.error("Got an error searching for a role."),Re.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Re.error(r),r}return t}a(AZ,"userInfo");async function OZ(){let e;try{e=await cE()}catch(t){throw Re.error("Got an error listing users."),Re.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(OZ,"listUsersExternal");async function cE(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await aE(e)}catch(o){throw Re.error("Got an error searching for roles."),Re.error(o),o}let r={};for(let o of t)r[o.id]=Rg.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 aE(n)}catch(o){throw Re.error("Got an error searching for users."),Re.error(o),o}let i=new Map;for(let o of s)o=Rg.cloneDeep(o),o.role=r[o.role],NZ(o.role),i.set(o.username,o);return i}catch(e){throw Re.error("got an error listing users"),Re.error(e),rn.errorizeMessage(e)}return null}a(cE,"listUsers");function NZ(e){try{if(!e){Re.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(fZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Re.error("Got an error trying to set system permissions."),Re.error(t)}}a(NZ,"appendSystemTablesToRole");async function yc(){try{let e=await cE();global.hdb_users=e}catch(e){throw Re.error(e),e}}a(yc,"setUsersToGlobal");async function kP(e,t,r=!0){global.hdb_users||await yc();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Ls(new Error,gg.GENERIC_AUTH_FAIL,Ds.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Ls(new Error,gg.USER_INACTIVE,Ds.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(DP.get(t)===n.password)return s;if(Ag.validate(n.password,t))DP.set(t,n.password);else throw Ls(new Error,gg.GENERIC_AUTH_FAIL,Ds.UNAUTHORIZED,void 0,void 0,!0)}return s}a(kP,"findAndValidateUser");async function bZ(){global.hdb_users||await yc();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(bZ,"getSuperUser");async function yZ(){let e=await cE(),t=dZ.getConfigFromFile(CP.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!rn.isEmpty(r)&&r?.role?.role===CP.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Ng.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+LP.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+LP.SERVER_SUFFIX.ADMIN,r}a(yZ,"getClusterUser");var $P=[];yg.invalidateUser=function(e){for(let t of $P)try{t(e)}catch(r){hZ.error("Error invalidating user",r)}};yg.onInvalidatedUser=function(e){$P.push(e)}});var Lu=g((sge,QP)=>{"use strict";var aa=G(),nn=C(),IZ=ew(),rge=wn(),nge=zi(),wZ=yr(),{validateEvent:YP}=Jn(),Cu=In(),CZ=require("process"),{resetDatabases:LZ}=(ge(),ie(Ge)),DZ={[nn.ITC_EVENT_TYPES.SCHEMA]:PZ,[nn.ITC_EVENT_TYPES.USER]:WP};async function PZ(e){let t=YP(e);if(t){aa.error(t);return}aa.trace("ITC schemaHandler received schema event:",e),await IZ(e.message),await MZ(e.message)}a(PZ,"schemaHandler");async function MZ(e){try{Cu.resetReadTxn(nn.SYSTEM_SCHEMA_NAME,nn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Cu.resetReadTxn(nn.SYSTEM_SCHEMA_NAME,nn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Cu.resetReadTxn(nn.SYSTEM_SCHEMA_NAME,nn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=LZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){aa.error(t)}}a(MZ,"syncSchemaMetadata");var KP=[];async function WP(e){try{try{Cu.resetReadTxn(nn.SYSTEM_SCHEMA_NAME,nn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Cu.resetReadTxn(nn.SYSTEM_SCHEMA_NAME,nn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){aa.warn(r)}let t=YP(e);if(t){aa.error(t);return}aa.trace(`ITC userHandler ${nn.HDB_ITC_CLIENT_PREFIX}${CZ.pid} received user event:`,e),await wZ.setUsersToGlobal();for(let r of KP)r()}catch(t){aa.error(t)}}a(WP,"userHandler");WP.addListener=function(e){KP.push(e)};QP.exports=DZ});var Jn=g((uge,zP)=>{"use strict";var oge=G(),Ig=Q(),UZ=C(),{ITC_ERRORS:Du}=Kr(),{parentPort:age,threadId:vZ,isMainThread:BZ,workerData:cge}=require("worker_threads"),{onMessageFromWorkers:HZ,broadcast:lge,broadcastWithAcknowledgement:qZ}=rt();zP.exports={sendItcEvent:xZ,validateEvent:jP,SchemaEventMsg:GZ,UserEventMsg:FZ};var lE;HZ(async(e,t)=>{lE=lE||Lu(),jP(e),lE[e.type]&&await lE[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function xZ(e){return!BZ&&e.message&&(e.message.originator=vZ),qZ(e)}a(xZ,"sendItcEvent");function jP(e){if(typeof e!="object")return Du.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Ig.isEmpty(e.type))return Du.MISSING_TYPE;if(!e.hasOwnProperty("message")||Ig.isEmpty(e.message))return Du.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Ig.isEmpty(e.message.originator))return Du.MISSING_ORIGIN;if(UZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Du.INVALID_EVENT(e.type)}a(jP,"validateEvent");function GZ(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(GZ,"SchemaEventMsg");function FZ(e){this.originator=e}a(FZ,"UserEventMsg")});var ii=g((fge,eM)=>{"use strict";var JP=C(),dge=Q(),uE=G(),XP=BI(),Ic,{sendItcEvent:ZP}=Jn();function kZ(e){try{uE.trace("signalSchemaChange called with message:",e),Ic=Ic||Lu();let t=new XP(JP.ITC_EVENT_TYPES.SCHEMA,e);return Ic.schema(t),ZP(t)}catch(t){uE.error(t)}}a(kZ,"signalSchemaChange");function $Z(e){try{uE.trace("signalUserChange called with message:",e),Ic=Ic||Lu();let t=new XP(JP.ITC_EVENT_TYPES.USER,e);return Ic.user(t),ZP(t)}catch(t){uE.error(t)}}a($Z,"signalUserChange");eM.exports={signalSchemaChange:kZ,signalUserChange:$Z}});var Bu={};$e(Bu,{addAnalyticsListener:()=>vu,recordAction:()=>sn,recordActionBinary:()=>Cn,setAnalyticsEnabled:()=>VZ});function VZ(e){lM=e}function sn(e,t,r,n,s){if(!lM)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=fE.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},fE.set(i,o)}_E||YZ()}function Cn(e,t,r,n,s){sn(!!e,t,r,n,s)}function vu(e){dM.push(e)}function YZ(){_E=performance.now(),setTimeout(async()=>{let e=performance.now()-_E;_E=0;let t=[],r={time:Date.now(),period:e,threadId:ca.threadId,metrics:t};for(let[s,i]of fE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,_=[],u;for(let d of fM){let f=Math.floor(c*d),E=o[f-1];if(f>l){let h=f-l;if(E===u){let m=_[_.length-1];typeof m=="number"?_[_.length-1]={value:m,count:1+h}:m.count+=h}else _.push(h>1?{value:E,count:h}:E),u=E;l=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await EM()}let n=process.memoryUsage();t.push({metric:"memory",threadId:ca.threadId,byThread:!0,...n});for(let s of dM)s(t);fE=new Map,ca.parentPort?ca.parentPort.postMessage({type:_M,report:r}):mM({report:r})},uM).unref()}async function KZ(e,t=6e4){let r=Lg(),n=hM(),s=new Promise(m=>{let S=performance.now();setImmediate(()=>{let A=performance.now();A-S>5e3&&(0,Pu.warn)("Unusually high event queue latency on the main thread of "+Math.round(A-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let A=performance.now();A-S>5e3&&(0,Pu.warn)("Unusually high task queue latency on the main thread of "+Math.round(A-S)+"ms"),m(A-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:A,threadId:T}=S;for(let R of A||[]){let{path:U,method:B,type:v,metric:P,count:K,total:V,distribution:Y,threads:ue,...Ee}=R;K||(K=1);let Fe=P+(U?"-"+U:"");B!==void 0&&(Fe+="-"+B),v!==void 0&&(Fe+="-"+v);let le=c.get(Fe);if(le){if(le.threads){let je=le.threads[T];if(je)le=je;else{le.threads[T]=Object.assign({},Ee);continue}}le.count||(le.count=1);let be=le.count;for(let je in Ee){let ms=Ee[je];typeof ms=="number"&&(le[je]=(le[je]*be+ms*K)/(be+K))}le.count+=K,V>=0&&(le.total+=V,le.ratio=le.total/le.count)}else le=Object.assign({period:t},R),delete le.distribution,c.set(Fe,le),le.byThread&&(le.threads=[],le.threads[T]=Object.assign({},Ee),_.push(le));if(Y){Y=Y.map(je=>typeof je=="number"?{value:je,count:1}:je);let be=l.get(Fe);be?be.push(...Y):l.set(Fe,Y)}}await EM()}for(let m of _){let{path:S,method:A,type:T,metric:R,count:U,total:B,distribution:v,threads:P,...K}=m;P=P.filter(V=>V);for(let V in K){if(typeof m[V]!="number")continue;let Y=0;for(let ue of P){let Ee=ue[V];typeof Ee=="number"&&(Y+=Ee)}m[V]=Y}m.count=P.length,delete m.threads,delete m.byThread}for(let[m,S]of l){let A=c.get(m);S.sort((je,ms)=>je.value>ms.value?1:-1);let T=A.count-1,R=[],U=0,B=0,v;for(let je of fM){let ms=T*je;for(;U<ms;)v=S[B++],U+=v.count,B===1&&U--;let Ja=S[B>1?B-2:0];v||(v=S[0]),R.push(v.value-(v.value-Ja.value)*(U-ms)/v.count)}let[P,K,V,Y,ue,Ee,Fe,le,be]=R;Object.assign(A,{p1:P,p10:K,p25:V,median:Y,p75:ue,p90:Ee,p95:Fe,p99:le,p999:be})}let d;for(let[m,S]of c)S.id=(0,dE.getNextMonotonicTime)(),S.time=u,n.primaryStore.put(S.id,S,{append:!0}).then(A=>{A||n.primaryStore.put(S.id,S)}),d=!0;let f=Date.now(),{idle:E,active:h}=performance.eventLoopUtilization();if(d||h*10>E){let m=(0,dE.getNextMonotonicTime)(),S={id:m,metric:"main-thread-utilization",idle:E-tM,active:h-rM,taskQueueLatency:await s,time:f,...process.memoryUsage()};n.primaryStore.put(m,S,{append:!0}).then(A=>{A||n.primaryStore.put(m,S)})}tM=E,rM=h}async function nM(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Lg(){return sM||(sM=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function hM(){return iM||(iM=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function jZ(){pM=!0;let e=(0,Uu.get)(Cg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await KZ(uM,e),await nM(Lg(),WZ),await nM(hM(),QZ)},Math.min(e/2,2147483647)).unref()}function mM(e,t){let r=e.report;r.threadId=t?.threadId||ca.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(oM+=n.mean*n.count);r.totalBytesProcessed=oM,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(aM.get(t))}),aM.set(t,t.performance.eventLoopUtilization())),r.id=(0,dE.getNextMonotonicTime)(),Lg().primaryStore.put(r.id,r),pM||jZ(),zZ&&(SM=XZ(r))}async function XZ(e){if(await SM,!to){let r=(0,Mu.dirname)((0,Pu.getLogFilePath)());try{to=await(0,wg.open)((0,Mu.join)(r,"analytics.log"),"r+")}catch{to=await(0,wg.open)((0,Mu.join)(r,"analytics.log"),"w+")}}let t=(await to.stat()).size;if(t>JZ){let r=Buffer.alloc(t);await to.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await to.write(r,{position:0}),await to.truncate(r.length),t=r.length}await to.write(JSON.stringify(e)+`
9
- `,t)}var ca,cM,Pu,Mu,wg,dE,Uu,Cg,fE,lM,_E,uM,_M,dM,fM,tM,rM,EM,WZ,QZ,sM,iM,pM,oM,aM,zZ,SM,to,JZ,ui=Oe(()=>{ca=require("worker_threads"),cM=q(rt());ge();Pu=q(G()),Mu=require("path"),wg=require("fs/promises"),dE=q(pr()),Uu=q(J()),Cg=q(C());Er();(0,Uu.initSync)();fE=new Map,lM=(0,Uu.get)(Cg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(VZ,"setAnalyticsEnabled");a(sn,"recordAction");ot.recordAnalytics=sn;a(Cn,"recordActionBinary");_E=0,uM=1e3,_M="analytics-report",dM=[];a(vu,"addAnalyticsListener");fM=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(YZ,"sendAnalytics");a(KZ,"aggregation");tM=0,rM=0,EM=a(()=>new Promise(setImmediate),"rest");a(nM,"cleanup");WZ=36e5,QZ=31536e6;a(Lg,"getRawAnalyticsTable");a(hM,"getAnalyticsTable");(0,cM.setChildListenerByType)(_M,mM);a(jZ,"startScheduledTasks");oM=0,aM=new Map,zZ=!1;a(mM,"recordAnalytics");JZ=1e6;a(XZ,"logAnalytics")});var TM={};$e(TM,{Headers:()=>ro,appendHeader:()=>Dg});function Dg(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var ro,Hu=Oe(()=>{ro=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(Dg,"appendHeader")});var vg={};$e(vg,{coerceType:()=>EE,makeTable:()=>mE,setServerUtilities:()=>a5,updateResource:()=>hE});function mE(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:_,dbisDB:u}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:m}=e;m||(m=[]),MI(i,l);let S=Jm(i,n,l),A=0,T,R,U={},B=Promise.resolve(),v,P,K;for(let j of m)(j.assignCreatedTime||j.name==="__createdtime__")&&(v=j),(j.assignUpdatedTime||j.name==="__updatedtime__")&&(P=j),j.expiresAt&&(K=j),j.isPrimaryKey&&(U=j);let V,Y=[],ue=[],Ee=1,Fe=2,le={},be={},je=864e5,ms,Ja,Bi,Hb=!1,gm,nV=i.getRange({start:!1,end:!1}).constructor,sV=10,iV=6;E&&Gb();class Ze extends Qt{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=m;static expirationTimer;static createdTimeProperty=v;static updatedTimeProperty=P;static propertyResolvers;static sources=[];static get expirationMS(){return d}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),R=p.get&&(!p.get.reliesOnPrototype||p.prototype.get);let I=a(D=>{let y=this.sources.slice(0,-1);if(y=y.filter(M=>M[D]&&(!M[D].reliesOnPrototype||M.prototype[D])),y.length>0)if(y.length===1){let M=y[0];return(k,L,H)=>{if(k?.source!==M)return M[D](L,H,k)}}else return(M,k,L)=>{let H=[];for(let F of y){if(M?.source===F)break;H.push(F[D](k,L,M))}return Promise.all(H)}},"getApplyToIntermediateSource"),b=this.sources[this.sources.length-1],N=a(D=>{if(b[D]&&(!b[D].reliesOnPrototype||b.prototype[D]))return(y,M,k)=>{if(!y?.source)return b[D](M,k,y)}},"getApplyToCanonicalSource");return le={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish")},be={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish"),invalidate:I("invalidate")},(async()=>{let D=!1,y=a(async(M,k)=>{let L=M.value,H=M.table?at[c][M.table]:Ze;if(c===os.SYSTEM_SCHEMA_NAME&&(M.table===os.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===os.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),M.id===void 0&&(M.id=L[H.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=p;let F=await H.getResource(M.id,k,wc);switch(M.type){case"put":return F._writeUpdate(L,!0,wc);case"patch":return F._writeUpdate(L,!1,wc);case"delete":return F._writeDelete(wc);case"publish":return F._writePublish(L,wc);case"invalidate":return F.invalidate(wc);default:st.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=p.subscribe;M&&h==null&&(h=!0);let k=p.subscribeOnThisThread?p.subscribeOnThisThread((0,ua.getWorkerIndex)()):(0,ua.getWorkerIndex)()===0,L=M&&k&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(L){let H;for await(let F of L)try{if(!(F.type==="transaction"?F.writes[0]:F)){st.error("Bad subscription event",F);continue}if(F.source=p,H)if(F.beginTxn)H.resolve();else{y(F,H);continue}if(F.type==="end_txn")continue;let ye=et(F,()=>{if(F.type==="transaction"){let ee=[];for(let ve of F.writes)try{ee.push(y(ve,F))}catch(ce){throw ce.message+=" writing "+JSON.stringify(ve)+" of event "+JSON.stringify(F),ce}return Promise.all(ee)}else if(F.type==="define_schema"){let ee=this.attributes.slice(0),ve;for(let ce of F.attributes)ee.find(ke=>ke.name===ce.name)||(ee.push(ce),ve=!0);ve&&(Et({table:s,database:c,attributes:ee,origin:"cluster"}),Vu.signalSchemaChange(new Yu.SchemaEventMsg(process.pid,os.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return F.beginTxn?(H=F,y(F,F),new Promise(ee=>{H.resolve=ee})):y(F,F)});D&&(await ye,Vu.signalUserChange(new Yu.UserEventMsg(process.pid))),F.onCommit&&(ye?.then?ye.then(F.onCommit):F.onCommit())}catch(ae){st.error("error in subscription handler",ae)}}}catch(M){st.error(M)}})(),this}static getResource(p,O,I){let b=super.getResource(p,O,I);if(p!=null){Il(p);try{if(b.hasOwnProperty(fe))return b;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let N=!I?.async||i.cache?.get(p),D=Vn(O),y=D.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Rm(p,O,{transaction:y},N,M=>{if(M?hE(b,M):b[fe]=null,O.onlyIfCached&&O.noCacheStore){if(!b.doesExist())throw new Ln.ServerError("Entry is not cached",504)}else if(I?.ensureLoaded){let k=Am(p,M,O,b);if(k)return D?.disregardReadTxn(),b[Pg]=!0,Ug(k,L=>(hE(b,L),b))}return b})}catch(N){throw N.message.includes("Unable to serialize object")&&(N.message+=": "+JSON.stringify(p)),N}}return b}ensureLoaded(){let p=Am(this[Me],this[on],this[Ne]);if(p)return this[Pg]=!0,Ug(p,O=>{this[on]=O,this[fe]=O.value,this[ku]=O.version})}static setTTLExpiration(p){if(typeof p=="number")d=p*1e3,f||(f=0);else if(p&&typeof p=="object")d=p.expiration*1e3,f=(p.eviction||0)*1e3,je=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");je=je||(d+f)/4,Nm()}static enableAuditing(p=!0){E=p,p&&Gb(),Ze.audit=p}static coerceId(p){return p===""?null:EE(p,U)}static async dropTable(){if(delete at[c][s],c===o){for(let p of m)u.remove(Ze.tableName+"/"+p.name),r[p.name]?.drop();u.remove(Ze.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));Vu.signalSchemaChange(new Yu.SchemaEventMsg(process.pid,os.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(p){if(typeof p=="string")return this.getProperty(p);if(this[bn])return this.search(p);if(this[Me]===null){if(p?.conditions)return this.search(p);let O=Ze.getRecordCount();return{recordCount:O.recordCount,estimatedRecordRange:O.estimatedRange,records:"./",name:s,database:c,attributes:m}}if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[Ne]?.returnNonexistent)return this}allowRead(p,O){let I=yd(p);if(I?.read){if(I.isSuperUser)return!0;let b=I.attribute_permissions,N=O?.select;if(b?.length>0||Hb&&N){if(O||(O={}),N){let D=b?.length>0&&Mg(b,"read");O.select=N.map(y=>{let M=y.name||y;if(!D||D[M]){let k=Bi[M]?.definition?.tableClass;if(k){if(y.name||(y={name:y}),!k.prototype.allowRead.call(null,p,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else O.select=b.filter(D=>D.read&&!Bi[D.attribute_name]).map(D=>D.attribute_name);return O}else return!0}}allowUpdate(p,O){let I=yd(p);if(I?.update){let b=I.attribute_permissions;if(b?.length>0){let N=Mg(b,"update");for(let D in O)if(!N[D])return!1;for(let D of b){let y=D.attribute_name;!D.update&&!(y in O)&&(O[y]=this.getProperty(y))}}return!0}}allowCreate(p,O){if(this[bn]){let I=yd(p);if(I?.insert){let b=I.attribute_permissions;if(b?.length>0){let N=Mg(b,"insert");for(let D in O)if(!N[D])return!1}else return!0}}else return this.allowUpdate(p,{})}allowDelete(p){return yd(p)?.delete}update(p,O){if(!Vn(this[Ne]))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let b;return typeof p=="object"&&p&&(O?(Object.isFrozen(p)&&(p=Object.assign({},p)),this[fe]={},this[Pt]=p):(b=this[Pt],b&&(p=Object.assign(b,p)),this[Pt]=b=p)),this._writeUpdate(this[Pt],O),this}addTo(p,O){if(typeof O=="number")this[qu]===RM?this.set(p,(+this.getProperty(p)||0)+O):(this[qu]||this.update(),this.set(p,new rf(O)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,O){if(typeof O=="number")return this.addTo(p,-O);throw new Error("Can not subtract a non-numeric value")}invalidate(p){let O=this[Ne],I=this[Me];Il(I),Vn(this[Ne]).addWrite({key:I,store:i,invalidated:!0,entry:this[on],nodeName:this[Ne]?.nodeName,before:le.invalidate?.bind(this,O,I),beforeIntermediate:be.invalidate?.bind(this,O,I),commit:(N,D)=>{if(D?.version>N)return;let y=null;for(let M in r)y||(y={}),y[M]=this.getProperty(M);S(I,y,this[on],N,xu,E,this[Ne],0,"invalidate")}})}static evict(p,O,I){let b=this.Source,N;if(!((R||E)&&(!O||(N=i.getEntry(p),!N||!O)||N.version!==I))){if(R){if(i.hasLock(p,N.version))return;let D;for(let y in r)D||(D={}),D[y]=O[y];if(D)return S(p,D,N,I,Gu,null,null,0,null,!0)}return i.ifVersion(I,()=>{bd(p,O,null)}),E?S(p,null,N,I,Gu,null,null,0,null,!0):i.remove(p,I)}}lock(){throw new Error("Not yet implemented")}static operation(p,O){return p.table||=s,p.schema||=c,IM.operation(p,O)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,O,I){let b=this[Ne],N=Vn(b),D=this[Me];Il(D);let y=this[on];this[qu]=O?RM:s5;let M={key:D,store:i,entry:y,nodeName:b?.nodeName,validate:k=>{p||(p=this[Pt]),O||p&&ef(p)?(this.validate(p,!O),b?.source||(P&&(p[P.name]=P.type==="Date"?new Date(k):P.type==="String"?new Date(k).toISOString():k),O&&(t&&p[t]!==D&&(p[t]=D),v&&(y?.value?p[v.name]=y?.value[v.name]:p[v.name]=v.type==="Date"?new Date(k):v.type==="String"?new Date(k).toISOString():k),p=ko(p)))):N.removeWrite(M)},before:O?le.put?()=>le.put(b,D,p):null:le.patch?()=>le.patch(b,D,p):le.put?()=>le.put(b,D,ko(this)):null,beforeIntermediate:O?be.put?()=>be.put(b,D,p):null:be.patch?()=>be.patch(b,D,p):be.put?()=>be.put(b,D,ko(this)):null,commit:(k,L,H)=>{if(H){if(b&&L?.version>(b.lastModified||0)&&(b.lastModified=L.version),this[on]=L,L?.value?.[fe])throw new Error("Can not assign a record to a record, check for circular references");O||(this[fe]=L?.value??null)}this[Pt]=p,this[ku]=k;let F=L?.value,ae=p;if(this[qu]=0,L?.version>=k)if(E){let ce=L.localTime,ke=L.version;for(;ae&&(ce>k||ke>=k&&ce>0);){let re=l.get(ce),X=Ft(re);if(ke=X.version,ke>k){if(X.type==="patch"){let Ae=X.getValue(i);ae=Xd(ae,Ae)}else if(X.type==="put"||X.type==="delete")return}else if(ke===k)return;ce=X.previousLocalTime}}else{if(O)return;ae=Xd(ae,F)}let ye;if(O?ye=ae:(this[fe]=F,ye=O?ae:ko(this,ae)),this[fe]=ye,ye?.[fe])throw new Error("Can not assign a record to a record, check for circular references");let ee;O||(ee=p),bd(D,F,ye);let ve=O?"put":"patch";S(D,ye,L,k,0,E,b,b.expiresAt||(d?d+Date.now():0),ve,!1,ee)}};N.addWrite(M)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[bn]){for await(let O of this.search(p))(await Ze.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[fe]?this._writeDelete(p):!1}_writeDelete(p){let O=Vn(this[Ne]),I=this[Me];Il(I);let b=this[Ne];return O.addWrite({key:I,store:i,resource:this,nodeName:b?.nodeName,before:le.delete?.bind(this,b,I),beforeIntermediate:be.delete?.bind(this,b,I),commit:(N,D,y)=>{let M=D?.value;y&&(b&&D?.version>(b.lastModified||0)&&(b.lastModified=D.version),hE(this,D)),!(D?.version>N)&&(bd(this[Me],M),st.trace("Write delete entry",I,N),E||h?(S(I,null,this[on],N,0,E,this[Ne],0,"delete"),E||Nm()):i.remove(this[Me]))}}),!0}search(p){let O=this[Ne],I=Vn(O);if(!p)throw new Error("No query provided");let b=p.conditions;b?b.length===void 0&&(b=b[Symbol.iterator]?Array.from(b):[b]):b=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[Me]&&(b=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(b));let N,D={};function y(X,Ae){let qe;switch(Ae){case"and":case void 0:if(X.length<1)throw new Error('An "and" operator requires at least one condition');qe=!0;break;case"or":if(X.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Ae)}let Ss=qe&&{},Hi;for(let ze of X){if(ze.conditions){ze.conditions=y(ze.conditions,ze.operator);continue}let Kt=ze[0]??ze.attribute,Rn=Kt==null?U:ti(m,Kt);if(Rn){if(qe){let Ts=Qn(Kt),Wt=Ss[Ts];Wt?(Wt.push(ze),Hi=!0):Ss[Ts]=[ze]}(Rn.type||uS[ze.comparator])&&(ze[1]===void 0?ze.value=k(ze.value,Rn):ze[1]=k(ze[1],Rn))}else if(Kt!=null)throw(0,Ln.handleHDBError)(new Error,`${Kt} is not a defined attribute`,404)}if(p.enforceExecutionOrder)return X;if(Hi)for(let ze in Ss){let Kt=Ss[ze],Rn=Kt.length;if(Rn>1)for(let Ts=0;Ts<Rn;Ts++){let Wt=Kt[Ts];if(Wt.comparator==="ge"||Wt.comparator==="greater_than_equal")for(let qi=0;qi<Rn;qi++){let Xa=Kt[qi];(Xa.comparator==="le"||Xa.comparator==="less_than_equal")&&(Wt.comparator="between",Wt.value=[Wt.value,Xa.value],X.splice(X.indexOf(Xa),1))}if(Wt.comparator==="equals"||!Wt.comparator){for(let qi=0;qi<Rn;qi++)if(qi!==Ts){let Xa=Kt[qi];X.splice(X.indexOf(Xa),1)}break}}}return X}a(y,"prepareConditions");function M(X,Ae){if(p.enforceExecutionOrder)return X;for(let qe of X)qe.conditions&&(qe.conditions=M(qe.conditions,qe.operator));return X.length>1&&Ae!=="or"?(0,yM.sortBy)(X,lf(Ze)):X}a(M,"orderConditions");function k(X,Ae){return Array.isArray(X)?X.map(qe=>EE(qe,Ae)):EE(X,Ae)}a(k,"coerceTypedValues");let L=p.operator;(b.length>0||L)&&(b=y(b,L));let H=typeof p.sort=="object"&&p.sort,F;if(H&&L!=="or"){let X=H.attribute;if(N=b.find(Ae=>Qn(Ae.attribute)===Qn(X)),!N){if(!ti(m,X))throw(0,Ln.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not a defined attribute`,404);N={attribute:X,comparator:"sort"},b.push(N)}N.descending=!!H.descending}b=M(b,L),H&&(b[0]===N?H.next&&(F={dbOrderedAttribute:H.attribute,attribute:H.next.attribute,descending:H.next.descending,next:H.next.next}):(N&&b.splice(b.indexOf(N),1),F=H));let ae=p.select;if(b.length===0&&(b=[{attribute:t,comparator:"greater_than",value:!0}]),p.explain)return{conditions:b,operator:L,postOrdering:F,selectApplied:!!ae};let ye=I.useReadTxn(),ee=_S(b,L,Ze,ye,p,O,(X,Ae)=>qb(X,ae,O,ye,Ae),D),ve=p.ensureLoaded!==!1;F||(ee=re(ee));let ce=Ze.transformEntryForSelect(ae,O,ye,D,ve,!0),ke=Ze.transformToOrderedSelect(ee,ae,F,ye,O,ce);function re(X){return p.offset||p.limit!==void 0?X.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0):X}return a(re,"applyOffset"),F&&(ke=re(ke)),ke.onDone=()=>{ke.onDone=null,I.doneReadTxn()},ke.selectApplied=!0,ke.getColumns=()=>{if(ae){let X=[];for(let Ae of ae)Ae==="*"?X.push(...m.map(qe=>qe.name)):X.push(Ae.name||Ae);return X}return m.map(X=>X.name)},ke}static transformToOrderedSelect(p,O,I,b,N,D){let y=new nV;if(I){p=qb(p,O,b,N,null);let M;y.iterate=function(){let L,H=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),F,ae=I.dbOrderedAttribute,ye,ee,ve=!0;function ce(re){let X=re.next&&ce(re.next),Ae=re.descending;return(qe,Ss)=>{let Hi=Om(qe,re.attribute,b),ze=Om(Ss,re.attribute,b),Kt=Ae?(0,_a.compareKeys)(ze,Hi):(0,_a.compareKeys)(Hi,ze);return Kt===0?X?.(qe,Ss)||0:Kt}}a(ce,"createComparator");let ke=ce(I);return{async next(){let re;if(L)if(re=L.next(),re.done){if(F)return y.onDone&&y.onDone(),re}else return{value:await D.call(this,re.value)};M=[],ye&&M.push(ye);do if(re=await H.next(),re.done){if(F=!0,M.length)break;return y.onDone&&y.onDone(),re}else{let X=re.value;if(X?.then&&(X=await X),ae){let Ae=Om(X,ae,b);if(ve)ve=!1,ee=Ae;else if(Ae!==ee){ee=Ae,ye=X;break}}M.push(X)}while(!0);return I.isGrouped,M.sort(ke),L=M[Symbol.iterator](),re=L.next(),re.done?(y.onDone&&y.onDone(),re):{value:await D.call(this,re.value)}},return(){y.onDone&&y.onDone(),H.return()},throw(){y.onDone&&y.onDone(),H.throw()}}};let k=a(L=>{if(typeof O=="object"&&Array.isArray(L.attribute))for(let H=0;H<O.length;H++){let F=O[H],ae;if(F.name===L.attribute[0]){for(ae=F.sort||(F.sort={});ae.next;)ae=ae.next;ae.attribute=L.attribute.slice(1),ae.descending=L.descending}else F===L.attribute[0]&&(O[H]=ae={name:F,sort:{attribute:L.attribute.slice(1),descending:L.descending}})}L.next&&k(L.next)},"applySortingOnSelect");k(I)}else y.iterate=(p[Symbol.asyncIterator]||p[Symbol.iterator]).bind(p),y=y.map(D);return y}static transformEntryForSelect(p,O,I,b,N,D){if(p&&(p===t||p?.length===1&&p[0]===t)){let L=a(H=>H?.key??H,"transform");return p===t?L:p.asArray?H=>[L(H)]:H=>({[t]:L(H)})}let y;N&&R&&!p?.every(L=>{let H;return typeof L=="object"?H=L.name:H=L,r[H]||H===t})&&(y=!0);let M,k=a(function(L){let H;if(L!=null){if(gm=L,H=L.value||L.deref?.(),!H&&(L.key===void 0||L.deref)){if(L=Rm(L.key??L,O,{transaction:I,lazy:p?.length<4},this.isSync,F=>F),L?.then)return L.then(k.bind(this));H=L?.value}if(y&&(L.metadataFlags&(xu|Gu)||L.expiresAt&&L.expiresAt<Date.now())){let F=Am(L.key??L,L,O);if(F?.then)return F.then(k)}}if(H==null)return D?la.SKIP:H;if(p&&!(p[0]==="*"&&p.length===1)){let F,ae=a((ee,ve)=>{let ce;typeof ee=="object"?ce=ee.name:ce=ee;let ke=Bi?.[ce],re;if(ke){let X=b?.[ce];if(X)if(X.hasMappings){let qe=ke.from?H[ke.from]:Qn(L.key);re=X.get(qe),re||(re=[])}else re=X.fromRecord?.(H);else re=ke(H,O,L);let Ae=a(qe=>{if(qe&&typeof qe=="object"){let Ss=ke.definition?.tableClass||Ze;M||(M={});let Hi=M[ce]||(M[ce]=Ss.transformEntryForSelect(ce===ee?null:ee.select||(Array.isArray(ee)?ee:null),O,I,X,N));if(Array.isArray(qe)){let ze=[],Kt=Ss.transformToOrderedSelect(qe,ee.select,typeof ee.sort=="object"&&ee.sort,O,I,Hi)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Rn=a(Wt=>{for(;!Wt.done;){if(Wt?.then)return Wt.then(Rn);ze.push(Wt.value),Wt=Kt.next()}ve(ze,ce)},"nextValue"),Ts=Rn(Kt.next());Ts&&(F||(F=[]),F.push(Ts));return}else if(qe=Hi.call(this,qe),qe?.then){F||(F=[]),F.push(qe.then(ze=>ve(ze,ce)));return}}ve(qe,ce)},"handleResolvedValue");re?.then?(F||(F=[]),F.push(re.then(Ae))):Ae(re);return}else re=H[ce],re&&typeof re=="object"&&ce!==ee&&(re=Ze.transformEntryForSelect(ee.select||ee,O,I,null)({value:re}));ve(re,ce)},"selectAttribute"),ye;if(typeof p=="string")ae(p,ee=>{ye=ee});else if(Array.isArray(p))if(p.asArray)ye=[],p.forEach((ee,ve)=>{ee==="*"?p[ve]=H:ae(ee,ce=>ye[ve]=ce)});else{ye={};let ee=p.forceNulls;for(let ve of p)if(ve==="*")for(let ce in H)ye[ce]=H[ce];else ae(ve,(ce,ke)=>{ce===void 0&&ee&&(ce=null),ye[ke]=ce})}else throw new Ln.ClientError("Invalid select"+p);return F?Promise.all(F).then(()=>ye):ye}return H},"transform");return k}async subscribe(p){if(!l)throw new Error("Can not subscribe to a table without an audit log");E||Et({table:s,database:c,schemaDefined:_,attributes:m,audit:!0}),p||(p={});let O=!p.rawEvents,I=DI(Ze,this[Me]??null,function(y,M,k,L){try{let H=M.getValue?.(i,O);if(!H&&M.type==="patch"&&O){let F=i.getEntry(y);F?.version===M.version?H=F.value:H=M.getValue?.(i,!0,k),M.type="put"}this.send({id:y,timestamp:k,value:H,version:M.version,type:M.type,beginTxn:L})}catch(H){st.error(H)}},p.startTime||0,this[bn]);this[bn]&&(I.includeDescendants=!0,p.onlyChildren&&(I.onlyChildren=!0)),p.crossThreads===!1&&(I.crossThreads=!1),p.supportsTransactions&&(I.supportsTransactions=!0);let b=this[Me],N=p.previousCount;N>1e3&&(N=1e3);let D=p.startTime;if(this[bn]){if(D){if(N)throw new Ln.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:M}of l.getRange({start:D,exclusiveStart:!0})){let k=Ft(M);if(k.tableId!==n)continue;let L=k.recordId;if(b==null||NM(b,L)){let H=k.getValue(i,O,y);I.send({id:L,timestamp:y,value:H,version:k.version,type:k.type})}I.startTime=y}}else if(N){let y=[];for(let{key:M,value:k}of l.getRange({start:"z",end:!1,reverse:!0}))try{let L=Ft(k);if(L.tableId!==n)continue;let H=L.recordId;if(b==null||NM(b,H)){let F=L.getValue(i,O,M);if(y.push({id:H,timestamp:M,value:F,version:L.version,type:L.type}),--N<=0)break}}catch(L){st.error("Error getting history entry",M,L)}for(let M=y.length;M>0;)I.send(y[--M]);y[0]&&(I.startTime=y[0].timestamp)}else if(!p.omitCurrent)for(let{key:y,value:M,version:k,localTime:L}of i.getRange({start:b??!1,end:b==null?void 0:[b,_a.MAXIMUM_KEY],versions:!0}))M&&I.send({id:y,timestamp:L,value:M,version:k,type:"put"})}else{N&&!D&&(D=0);let y=this[on]?.localTime;if(y===zm&&(i.cache?.delete(b),this[on]=i.getEntry(b),st.trace("re-retrieved record",y,this[on]?.localTime),y=this[on]?.localTime),st.trace("Subscription from",D,"from",b,y),D<y){let M=[],k=y;do{let L=l.get(k);if(L){p.omitCurrent=!0;let H=Ft(L),F=H.getValue(i,O,k);O&&(H.type="put"),M.push({id:b,value:F,timestamp:k,...H}),k=H.previousLocalTime}else break;N&&N--}while(k>D&&N!==0);for(let L=M.length;L>0;)I.send(M[--L]);I.startTime=y}!p.omitCurrent&&this.doesExist()&&I.send({id:b,timestamp:y,value:this,version:this[ku],type:"put"})}return p.listener&&I.on("data",p.listener),I}doesExist(){return!!(this[fe]||this[qu])}publish(p,O){this._writePublish(p,O)}_writePublish(p,O){let I=Vn(this[Ne]),b=this[Me]||null;Il(b);let N=this[Ne];I.addWrite({key:b,store:i,entry:this[on],nodeName:N?.nodeName,validate:()=>{this.validate(p)},before:le.publish?.bind(this,N,b,p),beforeIntermediate:be.publish?.bind(this,N,b,p),commit:(D,y,M)=>{y===void 0&&h&&!E&&Nm(),S(b,y?.value??null,y,y?.version||D,0,!0,N,y?.expiresAt,"message",!1,p)}})}validate(p,O){let I,b=a((N,D,y)=>{if(D.type&&N!=null)if(O&&N.__op__&&(N=N.value),D.properties){typeof N!="object"&&(I||(I=[])).push(`Value ${is(N)} in property ${y} must be an object${D.type?" ("+D.type+")":""}`);let M=D.properties;for(let k=0,L=M.length;k<L;k++){let H=M[k],F=b(N[H.name],H,y+"."+H.name);F&&(N[H.name]=F)}}else switch(D.type){case"Int":(typeof N!="number"||N>>0!==N)&&(I||(I=[])).push(`Value ${is(N)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof N!="number"||!(Math.floor(N)===N&&Math.abs(N)<=9007199254740992))&&(I||(I=[])).push(`Value ${is(N)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof N!="number"&&(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a number`);break;case"ID":typeof N=="string"||N?.length>0&&N.every?.(M=>typeof M=="string")||(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof N!="string"&&(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a string`);break;case"Boolean":typeof N!="boolean"&&(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a boolean`);break;case"Date":if(!(N instanceof Date)){if(typeof N=="string"||typeof N=="number")return new Date(N);(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof N!="bigint"){if(typeof N=="string"||typeof N=="number")return BigInt(N);(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a bigint`)}break;case"Bytes":N instanceof Uint8Array||(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(N)){if(D.elements)for(let M=0,k=N.length;M<k;M++){let L=N[M],H=b(L,D.elements,y+"[*]");H&&(N[M]=H)}}else(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a Buffer or Uint8Array`);break}D.nullable===!1&&N==null&&(I||(I=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let N=0,D=m.length;N<D;N++){let y=m[N];if(!y.relationship&&(!O||y.name in p)){let M=b(p[y.name],y,y.name);M&&(p[y.name]=M)}}if(I)throw new Ln.ClientError(I.join(". "))}getUpdatedTime(){return this[ku]}wasLoadedFromSource(){return R?!!this[Pg]:void 0}static async addAttributes(p){let O=m.slice(0);for(let I of p){if(!I.name)throw new Ln.ClientError("Attribute name is required");if(I.name.match(/[`/]/))throw new Ln.ClientError("Attribute names cannot include backticks or forward slashes");O.push(I)}return Et({table:s,database:c,schemaDefined:_,attributes:O}),Ze.indexingOperation}static async removeAttributes(p){let O=m.filter(I=>!p.includes(I.name));return Et({table:s,database:c,schemaDefined:_,attributes:O}),Ze.indexingOperation}static getRecordCount(p){let O=i.getStats().entryCount,I=5e3,b=1e3,N;O>I&&!p?.exactCount&&(N=b);let D=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:N}))y!=null&&D++;if(N){let y=D;D=0;for(let{value:ve}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:N}))ve!=null&&D++;let M=N*2,k=(D+y)/M,L=Math.pow((D-y+1)/N/2,2)+k*(1-k)/M,H=Math.max(Math.sqrt(L)*O,1),F=Math.round(k*O),ae=Math.max(F-1.96*H,0),ye=Math.min(F+1.96*H,O),ee=Math.pow(10,Math.round(Math.log10(H)));return ee>F&&(ee=ee/10),D=Math.round(F/ee)*ee,{recordCount:D,estimatedRange:[Math.round(ae),Math.round(ye)]}}return{recordCount:D}}static updatedAttributes(){Bi=this.propertyResolvers={$id:(p,O,I)=>({value:I.key}),$updatedtime:(p,O,I)=>I.version,$record:(p,O,I)=>I?{value:p}:p};for(let p of this.attributes){p.resolve=null;let O=p.relationship;if(O)if(p.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),Hb=!0,O.to)p.elements?.definition?(Bi[p.name]=p.resolve=(I,b,N)=>{let D=I[O.from?O.from:t],y=p.elements.definition.tableClass;return N?cc({attribute:O.to,value:D},Vn(b).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:O.to,value:D}],b).asArray},p.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},p.resolve.definition=p.elements.definition,O.from&&(p.resolve.from=O.from)):console.error(`The one-to-many/many-to-many relationship property "${p.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(O.from){let I=p.definition||p.elements?.definition;I?(Bi[p.name]=p.resolve=(b,N,D)=>{let y=b[O.from];if(y!==void 0){if(p.elements){let M,k=y.map(L=>{let H=D?I.tableClass.primaryStore.getEntry(L,{transaction:Vn(N).getReadTxn()}):I.tableClass.get(L,N);return H?.then&&(M=!0),H});return O.filterMissing?M?Promise.all(k).then(L=>L.filter(bM)):k.filter(bM):M?Promise.all(k):k}return D?I.tableClass.primaryStore.getEntry(y,{transaction:Vn(N).getReadTxn()}):I.tableClass.get(y,N)}},p.set=(b,N)=>{if(Array.isArray(N)){let D=N.map(y=>y[Me]||y[I.tableClass.primaryKey]);b[O.from]=D}else{let D=N[Me]||N[I.tableClass.primaryKey];b[O.from]=D}},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`)}nf(this,this)}static async deleteHistory(p=0){let O;for(let{key:I,value:b}of l.getRange({start:0,end:p}))await Fu(),Ft(b).tableId===n&&(O=l.remove(I));await O}static async*getHistory(p=0,O=1/0){for(let{key:I,value:b}of l.getRange({start:p,end:O})){await Fu();let N=Ft(b);N.tableId===n&&(yield{id:N.recordId,localTime:I,version:N.version,type:N.type,value:N.getValue(i,!0,I),user:N.user})}}static async getHistoryOfRecord(p){let O=[];if(p==null)throw new Error("An id is required");let I=i.getEntry(p);if(!I)return O;let b=I.localTime;if(!b)throw new Error("The entry does not have a local audit time");let N=0;do{await Fu();let D=l.get(b);if(D){let y=Ft(D);O.push({id:y.recordId,localTime:b,version:y.version,type:y.type,value:y.getValue(i,!0,b),user:y.user}),b=y.previousLocalTime}else break}while(N<1e3&&b);return O.reverse()}static cleanup(){V?.remove()}}Ze.updatedAttributes();let oV=Ze.prototype;return oV[n5]=!0,d&&Ze.setTTLExpiration(d/1e3),K&&aV(),Ze;function bd(j,p,O){let I;for(let b in r){let N=r[b],D=N.isIndexing,y=O?.[b],M=p?.[b];if(y===M&&!D)continue;I=!0;let k=N.indexNulls,L=(0,$u.getIndexedValues)(M,k);if(L){gM&&N.prefetch(L.map(H=>({key:H,value:j})),OM);for(let H=0,F=L.length;H<F;H++)N.remove(L[H],j)}if(L=(0,$u.getIndexedValues)(y,k),L){gM&&N.prefetch(L.map(H=>({key:H,value:j})),OM);for(let H=0,F=L.length;H<F;H++)N.put(L[H],j)}}return I}a(bd,"updateIndices");function Il(j){switch(typeof j){case"number":return!0;case"string":if(j.length<659)return!0;if(j.length>AM)throw new Error("Primary key size is too large: "+j.length);break;case"object":if(j===null)return!0;break;case"bigint":if(j<2n**64n&&j>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof j)}if((0,_a.writeKey)(j,i5,0)>AM)throw new Error("Primary key size is too large: "+j.length);return!0}a(Il,"checkValidId");function Rm(j,p,O,I,b){let N=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),O.transaction?.isDone)return b(null,j);let D=i.getEntry(j,O);return D&&p&&(D?.version>(p.lastModified||0)&&(p.lastModified=D.version),D?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=D.localTime)),b(D,j)},"whenPrefetched");return I?N():Ee>0?(Ee--,N()):new Promise((D,y)=>{Ee===0?(Ee--,i.prefetch([j],()=>{M(),k()})):(Y.push(j),ue.push(k),Y.length>iV&&(Ee--,M()));function M(){if(Y.length>0){let L=ue;i.prefetch(Y,()=>{Ee===-1?M():Ee++;for(let H of L)H()}),Y=[],ue=[],Fe>2&&Fe--}else Ee=Fe,Fe<sV&&Fe++}a(M,"prefetch");function k(){try{D(N())}catch(L){y(L)}}a(k,"load")})}a(Rm,"loadLocalRecord");function yd(j){if(!j?.role)return;let p=j.role.permission;if(p.super_user)return o5;let O=p[c],I,b=O?.tables;if(b)return b[s];if(c==="data"&&(I=p[s])&&!I.tables)return I}a(yd,"getTablePermissions");function Am(j,p,O,I){if(R){let b;if(O.noCache?b=!0:(p?(!p.value||p.metadataFlags&(xu|Gu)||p.expiresAt&&p.expiresAt<Date.now())&&(b=!0):b=!0,Cn(!b,"cache-hit",s)),b){let N=xb(j,p,O).then(D=>(D?.value?.[fe]&&st.error("Can not assign a record with a record property"),O&&(D?.version>(O.lastModified||0)&&(O.lastModified=D.version),O.lastRefreshed=Date.now()),D));if(O?.onlyIfCached||p?.value&&I?.allowStaleWhileRevalidate?.(p,j)){if(N.catch(D=>st.warn(D)),O?.onlyIfCached&&!I.doesExist())throw new Ln.ServerError("Entry is not cached",504);return}else return N}}}a(Am,"ensureLoadedFromSource");function Vn(j){let p=j?.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 $o,p.lmdbDb=i,p;p=O}while(!0)}else return new af}a(Vn,"txnForContext");function Om(j,p,O){if(!j)return;gm=j;let I=j.value||j.deref?.()||(gm=i.getEntry(j.key))?.value;if(typeof p=="object"){let N=Bi,D=I;for(let y=0,M=p.length;y<M;y++){let k=p[y],L=N?.[k];D=L&&D?L(D,O,!0)?.value:D?.[k],N=L?.definition?.tableClass?.propertyResolvers}return D}let b=Bi[p];return b?b(I,O):I[p]}a(Om,"getAttributeValue");function qb(j,p,O,I,b){let N=b?.length,D={transaction:I,lazy:N>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},y;function M(k,L){let H=k?.value;if(!H)return la.SKIP;for(let F=0;F<N;F++)if(!y?.includes(F)&&!b[F](H,k))return la.SKIP;return L!==void 0&&(k.key=L),k}if(a(M,"processEntry"),N>0||!j.hasEntries){let k=j.map(L=>{if(y=null,typeof L=="object"&&L.key!==void 0)return N>0?M(L):L;if(L==null)return la.SKIP;for(let H=0;H<N;H++){let ae=b[H].idFilter;if(ae){if(!ae(L))return la.SKIP;y||(y=[]),y.push(H)}}return Rm(L,O,D,!1,M)});return Array.isArray(j)&&(k=k.filter(L=>L!==la.SKIP)),k.hasEntries=!0,k}return j}a(qb,"transformToEntries");async function xb(j,p,O){let I=p?.metadataFlags,b=p?.version,N,D;if(!i.attemptLock(j,b,()=>{clearTimeout(D);let L=i.getEntry(j);!L||!L.value||L.metadataFlags&(xu|Gu)?N(xb(j,i.getEntry(j),O)):N(L)}))return new Promise(L=>{N=L,D=setTimeout(()=>{i.unlock(j,b)},r5)});let y=p?.value,M={requestContext:O,replacingRecord:y,replacingVersion:b,source:null,resourceCache:O?.resourceCache},k=O?.responseHeaders;return new Promise((L,H)=>{let F;Ug(et(M,async ae=>{let ye=performance.now(),ee,ve,ce;try{for(let Ae of Ze.sources)if(Ae.get&&(!Ae.get.reliesOnPrototype||Ae.prototype.get)&&(M.source=Ae,ee=await Ae.get(j,M),ee))break;ce=I&xu;let re=M.lastModified||ce&&b;ve=ce||re>b||!y,re||(re=(0,$u.getNextMonotonicTime)());let X=performance.now()-ye;if(sn(X,"cache-resolution",s),k&&Dg(k,"Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`,!0),ae.timestamp=re,d&&!M.expiresAt&&(M.expiresAt=Date.now()+d),ee){if(typeof ee!="object")throw new Error("Only objects can be cached and stored in tables");typeof ee.toJSON=="function"&&(ee=ee.toJSON()),t&&ee[t]!==j&&(ee[t]=j)}F=!0,L({version:re,value:ee})}catch(re){re.message+=` while resolving record ${j} for ${s}`,y&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!O?.mustRevalidate||O?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(L({version:b,value:y}),st.trace(re.message,"(returned stale record)")):H(re),M.transaction.abort();return}if(O?.noCacheStore){M.transaction.abort();return}Vn(M).addWrite({key:j,store:i,entry:p,nodeName:"source",commit:(re,X)=>{if(X?.version!==b)return;let Ae=bd(j,y,ee);ee?(be.put?.(M,j,ee),S(j,ee,X,re,0,E&&ve||null,M,M.expiresAt,"put",!!ce)):(be.delete?.(M,j),E||h?S(j,null,X,re,0,E&&ve||null,M,0,"delete",!!ce):i.remove(j,b))}})}),()=>{i.unlock(j,b)},ae=>{i.unlock(j,b),F&&st.error("Error committing cache update",ae)})})}a(xb,"getFromSource");function Nm(){if(je!==ms&&(ms=je,(0,ua.getWorkerIndex)()===(0,ua.getWorkerCount)()-1)){if(Ja&&clearTimeout(Ja),!je)return;let j=new Date;j.setMonth(0),j.setDate(1),j.setHours(0),j.setMinutes(0),j.setSeconds(0);let p=Math.ceil((Date.now()-j.getTime())/je)*je+j.getTime(),O=a(I=>{st.trace(`Scheduled next cleanup scan at ${new Date(I)}ms`),Ja=setTimeout(()=>B=B.then(async()=>{if(O(Math.max(I+je,Date.now())),i.rootStore.status!=="open"){clearTimeout(Ja);return}let b=50,N=new Array(b),D=0;st.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:M,value:k,version:L,expiresAt:H}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let F;k===null&&!E&&L+t5<Date.now()?F=i.remove(M,L):H&&H+f<Date.now()&&(F=Ze.evict(M,k,L),y++),F&&(await N[D],N[D]=F.catch(ae=>{st.error("Cleanup error",ae)}),++D>=b&&(D=0)),await Fu()}st.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){st.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");O(p)}}a(Nm,"scheduleCleanup");function Gb(){V=l?.addDeleteRemovalCallback(n,j=>{let p=i.getEntry(j);p?.value===null&&i.remove(j,p.version)})}a(Gb,"addDeleteRemoval");function aV(){(0,ua.getWorkerIndex)()===0&&setInterval(async()=>{try{let j=K.name,p=r[j];if(!p)throw new Error(`expiresAt attribute ${K} must be indexed`);for(let{value:O}of p.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let I=i.getEntry(O);I?.value?.[j]<Date.now()&&Ze.evict(O,I.value,I.version),await Fu()}}catch(j){st.error("Error in evicting old records",j)}},e5).unref()}a(aV,"runRecordExpirationEviction")}function Mg(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 OM(){}function a5(e){IM=e}function EE(e,t){let r=t?.type;return e===null?e:e===""&&r&&r!=="String"&&r!=="Any"?null:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Boolean"?e==="true"?!0:e==="false"?!1:e:r==="Date"?(typeof e!="number"&&!c5.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,pE.autoCast)(e):e}function NM(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 Ug(e,t,r){return e?.then?e.then(t,r):t(e)}function hE(e,t){e[on]=t,e[fe]=t?.value??null,e[ku]=t?.version}function bM(e){return e!=null}function is(e){try{return JSON.stringify(e)}catch{return e}}var os,la,$u,yM,Ku,Ln,Vu,Yu,st,_a,ua,pE,ZZ,IM,e5,t5,gM,r5,ku,n5,on,qu,RM,s5,Pg,wc,xu,Gu,i5,AM,o5,Gge,c5,Fu,SE=Oe(()=>{os=q(C()),la=require("lmdb"),$u=q(pr()),yM=require("lodash");Wn();cS();Ku=q(J());UI();Ln=q(se()),Vu=q(ii()),Yu=q(Jn());ge();_f();st=q(G());of();Vo();_a=require("ordered-binary"),ua=q(rt());Go();pE=q(Q());nc();ui();zd();Hu();ZZ=new Uint8Array(9);ZZ[8]=192;e5=6e4,t5=864e5;Ku.initSync();gM=Ku.get(os.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),r5=1e4,ku=Symbol.for("version"),n5=Symbol.for("incremental-update"),on=Symbol("entry"),qu=Symbol("is-saving"),RM=1,s5=2,Pg=Symbol("loaded-from-source"),wc={isNotification:!0,ensureLoaded:!1},xu=1,Gu=8,i5=Buffer.allocUnsafeSlow(8192),AM=1978,o5={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},Gge=(0,pE.convertToMS)(Ku.get(os.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(mE,"makeTable");a(Mg,"attributesAsObject");a(OM,"noop");a(a5,"setServerUtilities");c5=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(EE,"coerceType");a(NM,"isDescendantId");Fu=a(()=>new Promise(setImmediate),"rest");a(Ug,"when");a(hE,"updateResource");a(bM,"exists");a(is,"stringify")});var Ge={};$e(Ge,{database:()=>Au,databases:()=>at,dropDatabase:()=>FT,dropTableMeta:()=>E5,getDatabases:()=>es,getTables:()=>l5,onUpdatedTable:()=>Gg,readMetaDb:()=>Wu,resetDatabases:()=>u5,table:()=>Et,tables:()=>cn});function l5(){return OE||es(),cn||{}}function es(){if(OE)return at;OE=!0,Dc=new Map;let e=(0,ir.getHdbBasePath)()&&(0,it.join)((0,ir.getHdbBasePath)(),ln.DATABASES_DIR_NAME),t=(0,ir.get)(ln.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,ir.get)(ln.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,an.existsSync)(e)?e:(0,it.join)((0,ir.getHdbBasePath)(),ln.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,an.existsSync)(e))for(let r of(0,an.readdirSync)(e,{withFileTypes:!0})){let n=(0,it.basename)(r.name,".mdb");r.isFile()&&(0,it.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Wu((0,it.join)(e,r.name),null,n)}if((0,an.existsSync)((0,Lc.getBaseSchemaPath)())){for(let r of(0,an.readdirSync)((0,Lc.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,it.join)((0,Lc.getBaseSchemaPath)(),r.name),s=(0,it.join)((0,Lc.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,an.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,it.extname)(i.name).toLowerCase()===".mdb"){let o=(0,it.join)(s,i.name);Wu((0,it.join)(n,i.name),(0,it.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,an.existsSync)(s))for(let o of(0,an.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,it.extname)(o.name).toLowerCase()===".mdb"&&Wu((0,it.join)(s,o.name),(0,it.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,it.join)(c.path,(0,it.basename)(o+".mdb"));(0,an.existsSync)(l)&&Wu(l,o,r,null,!0)}}for(let r in at){let n=Dc.get(r);if(n){let s=at[r];r.includes("delete")&&Dn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Dn.trace(`delete table class ${i}`),delete s[i])}else if(delete at[r],r==="data"){for(let s in cn)delete cn[s];delete cn[NE]}}return Dc=null,at}}function u5(){OE=!1;for(let[,e]of no)e.needsDeletion=!0;es();for(let[e,t]of no)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),no.delete(e));return at}function Wu(e,t,r=qg,n,s){let i=new Bg.default(e,!1);try{let o=no.get(e);o?o.needsDeletion=!1:(o=(0,gE.open)(i),no.set(e,o));let c=new da.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(TE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,an.existsSync)(n)&&(i.path=n,_=(0,gE.open)(i),_.isLegacy=!0):_=jd(o));let u=DM(r),d=u[NE],f=new Map;for(let{key:E,value:h}of l.getRange({start:!1})){let[m,S]=E.toString().split("/");S===""?S=h.name:S||(S=m,m=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(m);let A=f.get(m);A||f.set(m,A={attributes:[]}),(S==null||h.is_hash_attribute)&&(A.primary=h),S!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:m,primary:S}=h;if(!S){for(let Y of m)if(Y.is_hash_attribute||Y.isPrimaryKey){S=Y;break}if(!S){Dn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(m)}`);continue}}let A=u[E],T={},R=[],U,B,v=typeof S.audit=="boolean"?S.audit:(0,ir.get)(ln.CONFIG_PARAMS.LOGGING_AUDITLOG),P=S.trackDeletes,K=S.expiration,V=S.eviction;if(A)T=A.indices,R=A.attributes,A.schemaVersion++;else{U=S.tableId,U?U>=(l.get(Cc)||0)&&l.putSync(Cc,U+1):(S.tableId=U=l.get(Cc),U||(U=1),l.putSync(Cc,U+1),l.putSync(S.key,S));let Y=new da.default(!S.is_hash_attribute,S.is_hash_attribute);B=Yd(o.openDB(S.key,Y)),B.rootStore=o,B.tableId=U}for(let Y of m){Y.attribute=Y.name;try{if(!Y.is_hash_attribute&&(Y.indexed||Y.attribute&&!Y.name)){if(!T[Y.name]){let Ee=new da.default(!Y.is_hash_attribute,Y.is_hash_attribute);T[Y.name]=o.openDB(Y.key,Ee),T[Y.name].indexNulls=Y.indexNulls}let ue=R.find(Ee=>Ee.name===Y.name);ue?R.splice(R.indexOf(ue),1,Y):R.push(Y)}}catch(ue){Dn.error("Error trying to update attribute",Y,R,T,ue)}}if(!A){A=PM(u,E,mE({primaryStore:B,auditStore:_,audit:v,expirationMS:K&&K*1e3,evictionMS:V&&V*1e3,trackDeletes:P,tableName:E,tableId:U,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:T,attributes:m,schemaDefined:S.schemaDefined,dbisDB:l})),A.schemaVersion=1;for(let Y of xg)Y(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function DM(e){let t=at[e];if(t||(e==="data"?t=at[e]=cn:e==="system"?Object.defineProperty(at,"system",{value:t=Object.create(null),configurable:!0}):t=at[e]=Object.create(null)),Dc&&!Dc.has(e)){let r=new Set;t[NE]=r,Dc.set(e,r)}return t}function PM(e,t,r){return e[t]=r,r}function Au({database:e,table:t}){e||(e=qg),es();let r=DM(e),n=(0,it.join)((0,ir.getHdbBasePath)(),ln.DATABASES_DIR_NAME),s=(0,ir.get)(ln.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,ir.get)(ln.CONFIG_PARAMS.STORAGE_PATH)||((0,an.existsSync)(n)?n:(0,it.join)((0,ir.getHdbBasePath)(),ln.LEGACY_DATABASES_DIR_NAME));let o=(0,it.join)(n,(i?t:e)+".mdb"),c=no.get(o);if(!c){let l=new Bg.default(o,!1);c=(0,gE.open)(l),no.set(o,c)}return c}async function FT(e){if(!at[e])throw new Error("Schema does not exist");let t=at[e];for(let r in t){let s=t[r].primaryStore.rootStore;no.delete(s.path),s.status==="open"&&(await s.close(),await wM.remove(s.path))}if(e==="data"){for(let r in cn)delete cn[r];delete cn[NE]}delete at[e]}function Et({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,trackDeletes:c,schemaDefined:l,origin:_}){t||(t=qg);let u=Au({database:t,table:e}),d=at[t],f=d?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,m,S;l==null&&(l=!0);let A=new da.default(!1);for(let P of i)P.attribute?(P.name=P.attribute,P.indexed=!0):P.attribute=P.name,P.expiresAt&&(P.indexed=!0);let T,R;if(f){if(E=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 P=u.auditStore;P||(P=jd(u)),h=i.find(ue=>ue.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=l,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,ir.get)(ln.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),n&&(h.eviction=n),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Dn.trace(`${e} table loading, opening primary store`);let K=new da.default(!1,!0),V=e+"/",Y=Yd(u.openDB(V,K));Y.rootStore=u,S=u.dbisDb=u.openDB(TE.INTERNAL_DBIS_NAME,A),Y.tableId=S.get(Cc),Y.tableId||(Y.tableId=1),S.putSync(Cc,Y.tableId+1),h.tableId=Y.tableId,f=PM(d,e,mE({primaryStore:Y,auditStore:P,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:E,tableName:e,tableId:Y.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:l,dbisDB:S})),f.schemaVersion=1,T=!0,v(),S.put(V,h)}m=f.indices,S=S||(u.dbisDb=u.openDB(TE.INTERNAL_DBIS_NAME,A)),f.dbisDB=S;let U=[];for(let{key:P,value:K}of S.getRange({start:!0})){let[V,Y]=P.toString().split("/");if(Y===""&&(Y=K.name),Y){if(V!==e)continue}else Y=V;if(!i.find(Ee=>Ee.name===Y)?.indexed&&K.indexed&&!K.isPrimaryKey){v(),T=!0,S.remove(P);let Ee=f.indices[V];Ee&&U.push(Ee)}}let B=[];try{for(let P of i||[]){if(P.relationship)continue;let K=e+"/"+(P.name||"");Object.defineProperty(P,"key",{value:K,configurable:!0});let V=S.get(K);if(P.isPrimaryKey){if(V=V||S.get(K=e+"/")||{},o!==f.audit||(+r||void 0)!==(+V.expiration||void 0)||(+n||void 0)!==(+V.eviction||void 0)){let ue=Object.assign({},V);typeof o=="boolean"&&(o&&f.enableAuditing(o),ue.audit=o),r&&(ue.expiration=+r),n&&(ue.eviction=+n),T=!0,v(),S.put(K,ue)}continue}V?.attribute&&!V.name&&(V.indexed=!0);let Y=!V||V.type!==P.type||V.indexed!==P.indexed||V.nullable!==P.nullable||JSON.stringify(V.attributes)!==JSON.stringify(P.attributes)||JSON.stringify(V.elements)!==JSON.stringify(P.elements);if(P.indexed){let ue=new da.default(!0,!1),Ee=u.openDB(K,ue);(Y||V.indexingPID&&V.indexingPID!==process.pid||V.restartNumber<Qu.workerData?.restartNumber)&&(T=!0,v(),V=S.get(K),(Y||V.indexingPID&&V.indexingPID!==process.pid||V.restartNumber<Qu.workerData?.restartNumber)&&(T=!0,P.lastIndexedKey=V?.lastIndexedKey||!1,P.indexingPID=process.pid,Ee.isIndexing=!0,Object.defineProperty(P,"dbi",{value:Ee}),P.indexNulls===void 0&&(P.indexNulls=!0),B.push(P)),S.put(K,P)),V?.indexNulls&&P.indexNulls===void 0&&(P.indexNulls=!0),Ee.indexNulls=P.indexNulls,m[P.name]=Ee}else Y&&(T=!0,v(),S.put(K,P))}}finally{R&&R()}if(T&&(f.schemaVersion++,f.updatedAttributes()),Dn.trace(`${e} table loading, running index`),B.length>0||U.length>0?f.indexingOperation=f5(f,B,U):T&&RE.signalSchemaChange(new AE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,T)for(let P of xg)P(f,_!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),Dn.trace(`${e} table loaded`),f;function v(){R||u.transactionSync(()=>({then(P){R=P}}))}a(v,"startTxn")}async function f5(e,t,r){try{let n=e.schemaVersion;await RE.signalSchemaChange(new AE.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let l of r)s=l.drop();let i,o=0,c=t.length;if(await new Promise(l=>setImmediate(l)),c>0){let l=0;for(let{key:_,value:u,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(u){if(l++,s=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,m=(0,CM.getIndexedValues)(u[h]);if(m)for(let S=0,A=m.length;S<A;S++)E.dbi.put(m[S],_)}}),s.then(()=>l--,f=>{l--,Dn.error(f)}),Qu.workerData&&Qu.workerData.restartNumber!==LM.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}l>_5?await s:l>d5&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await RE.signalSchemaChange(new AE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){Dn.error("Error in indexing",n)}}function E5({table:e,database:t}){let r=Au({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 Gg(e){xg.push(e)}var ir,TE,gE,it,an,Lc,da,Bg,ln,wM,Hg,CM,RE,AE,Qu,Dn,LM,qg,NE,cn,at,Cc,xg,OE,no,Dc,_5,d5,ge=Oe(()=>{ir=q(J()),TE=q(dt()),gE=require("lmdb"),it=require("path"),an=require("fs"),Lc=q(Je());SE();da=q(pf()),Bg=q(Sf()),ln=q(C()),wM=q(require("fs-extra")),Hg=require("../index"),CM=q(pr()),RE=q(ii()),AE=q(Jn()),Qu=require("worker_threads"),Dn=q(G()),LM=q(rt());Go();nc();qg="data",NE=Symbol("defined-tables");(0,ir.initSync)();cn=Object.create(null),at=Object.create(null);(0,Hg._assignPackageExport)("databases",at);(0,Hg._assignPackageExport)("tables",cn);Cc=Symbol.for("next-table-id"),xg=[],no=new Map;a(l5,"getTables");a(es,"getDatabases");a(u5,"resetDatabases");a(Wu,"readMetaDb");a(DM,"ensureDB");a(PM,"setTable");a(Au,"database");a(FT,"dropDatabase");a(Et,"table");_5=1e3,d5=10;a(f5,"runIndexing");a(E5,"dropTableMeta");a(Gg,"onUpdatedTable")});var Q=g((jge,KM)=>{"use strict";var so=require("path"),HM=require("fs-extra"),Ir=G(),MM=require("fs-extra"),bE=require("os"),h5=require("net"),p5=require("recursive-iterator"),ct=C(),m5=qm(),UM=require("papaparse"),yE=require("moment"),{inspect:S5}=require("util"),vM=require("is-number"),Qge=require("lodash"),T5=require("minimist"),g5=require("https"),R5=require("http"),{hdb_errors:IE}=se(),A5=/^((\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)))$/,qM=require("util").promisify(setTimeout),O5=100,N5=5,b5="",y5=4,BM={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};KM.exports={isEmpty:un,isEmptyOrZeroLength:Ps,arrayHasEmptyValues:C5,arrayHasEmptyOrZeroLengthValues:L5,buildFolderPath:D5,isBoolean:xM,errorizeMessage:I5,stripFileExtension:M5,autoCast:U5,autoCastJSON:GM,autoCastJSONDeep:kg,removeDir:v5,compareVersions:B5,isCompatibleDataVersion:H5,escapeRawValue:q5,unescapeValue:x5,stringifyProps:G5,timeoutPromise:k5,isClusterOperation:V5,getClusterUser:K5,checkGlobalSchemaTable:Y5,getHomeDir:kM,getPropsFilePath:F5,promisifyPapaParse:W5,removeBOM:$M,createEventPromise:Q5,checkProcessRunning:j5,checkSchemaTableExist:z5,checkSchemaExists:VM,checkTableExists:YM,getStartOfTomorrowInSeconds:J5,getLimitKey:X5,isObject:P5,isNotEmptyAndHasValue:w5,autoCasterIsNumberCheck:FM,backtickASTSchemaItems:Z5,isPortTaken:$5,createForkArgs:e8,autoCastBoolean:t8,async_set_timeout:qM,getTableHashAttribute:r8,doesSchemaExist:n8,doesTableExist:s8,stringifyObj:i8,ms_to_time:o8,changeExtension:a8,getEnvCliRootPath:$g,noBootFile:c8,httpRequest:l8,transformReq:u8,convertToMS:_8,PACKAGE_ROOT:ct.PACKAGE_ROOT};function I5(e){return e instanceof Error?e:new Error(e)}a(I5,"errorizeMessage");function un(e){return e==null}a(un,"isEmpty");function w5(e){return!un(e)&&(e||e===0||e===""||xM(e))}a(w5,"isNotEmptyAndHasValue");function Ps(e){return un(e)||e.length===0||e.size===0}a(Ps,"isEmptyOrZeroLength");function C5(e){if(un(e))return!0;for(let t=0;t<e.length;t++)if(un(e[t]))return!0;return!1}a(C5,"arrayHasEmptyValues");function L5(e){if(Ps(e))return!0;for(let t=0;t<e.length;t++)if(Ps(e[t]))return!0;return!1}a(L5,"arrayHasEmptyOrZeroLengthValues");function D5(...e){try{return e.join(so.sep)}catch{console.error(e)}}a(D5,"buildFolderPath");function xM(e){return un(e)?!1:e===!0||e===!1}a(xM,"isBoolean");function P5(e){return un(e)?!1:typeof e=="object"}a(P5,"isObject");function M5(e){return Ps(e)?b5:e.slice(0,-y5)}a(M5,"stripFileExtension");function U5(e){return un(e)||e===""||typeof e!="string"?e:BM[e]!==void 0?BM[e]:FM(e)===!0?Number(e):A5.test(e)?new Date(e):e}a(U5,"autoCast");function GM(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(GM,"autoCastJSON");function kg(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=kg(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=kg(r);n!==r&&(e[t]=n)}return e}else return GM(e)}a(kg,"autoCastJSONDeep");function FM(e){if(e.startsWith("0.")&&vM(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&vM(e))}a(FM,"autoCasterIsNumberCheck");async function v5(e){if(Ps(e))throw new Error(`Directory path: ${e} does not exist`);try{await MM.emptyDir(e),await MM.remove(e)}catch(t){throw Ir.error(`Error removing files in ${e} -- ${t}`),t}}a(v5,"removeDir");function B5(e,t){if(Ps(e)){Ir.info("Invalid current version sent as parameter.");return}if(Ps(t)){Ir.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(B5,"compareVersions");function H5(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(H5,"isCompatibleDataVersion");function q5(e){if(un(e))return e;let t=String(e);return t==="."?ct.UNICODE_PERIOD:t===".."?ct.UNICODE_PERIOD+ct.UNICODE_PERIOD:t.replace(ct.FORWARD_SLASH_REGEX,ct.UNICODE_FORWARD_SLASH)}a(q5,"escapeRawValue");function x5(e){if(un(e))return e;let t=String(e);return t===ct.UNICODE_PERIOD?".":t===ct.UNICODE_PERIOD+ct.UNICODE_PERIOD?"..":String(e).replace(ct.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(x5,"unescapeValue");function G5(e,t){if(un(e))return Ir.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+bE.EOL}!Ps(n)&&n[0]===";"?r+=" "+n+s+bE.EOL:Ps(n)||(r+=n+"="+s+bE.EOL)}catch{Ir.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(G5,"stringifyProps");function kM(){let e;try{e=bE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(kM,"getHomeDir");function F5(){let e=so.join(kM(),ct.HDB_HOME_DIR_NAME,ct.BOOT_PROPS_FILE_NAME);return HM.existsSync(e)||(e=so.join(__dirname,"../","hdb_boot_properties.file")),e}a(F5,"getPropsFilePath");function k5(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(k5,"timeoutPromise");async function $5(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=h5.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a($5,"isPortTaken");function V5(e){try{return ct.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Ir.error(`Error checking operation against cluster ops ${t}`)}return!1}a(V5,"isClusterOperation");function Y5(e,t){let r=(ge(),ie(Ge)).getDatabases();if(!r[e])return IE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return IE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Y5,"checkGlobalSchemaTable");function K5(e,t){if(un(t)){Ir.warn("No CLUSTERING_USER defined, clustering disabled");return}if(un(e)||Ps(e)){Ir.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){Ir.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Ir.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(K5,"getClusterUser");function W5(){UM.parsePromise=function(e,t,r){return new Promise(function(n,s){UM.parse(e,{header:!0,transformHeader:$M,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(W5,"promisifyPapaParse");function $M(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a($M,"removeBOM");function Q5(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Ir.info(`Got cluster status event response: ${S5(s)}`);try{i.cancel()}catch{Ir.error("Error trying to cancel timeout.")}n(s)})})}a(Q5,"createEventPromise");async function j5(e){let t=!0,r=0;do await qM(O5*r++),(await m5.findPs(e)).length>0&&(t=!1);while(t&&r<N5);if(t)throw new Error(`process ${e} was not started`)}a(j5,"checkProcessRunning");function z5(e,t){let r=VM(e);if(r)return r;let n=YM(e,t);if(n)return n}a(z5,"checkSchemaTableExist");function VM(e){let{getDatabases:t}=(ge(),ie(Ge));if(!t()[e])return IE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(VM,"checkSchemaExists");function YM(e,t){let{getDatabases:r}=(ge(),ie(Ge));if(!r()[e][t])return IE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(YM,"checkTableExists");function J5(){let e=yE().utc().add(1,ct.MOMENT_DAYS_TAG).startOf(ct.MOMENT_DAYS_TAG).unix(),t=yE().utc().unix();return e-t}a(J5,"getStartOfTomorrowInSeconds");function X5(){return yE().utc().format("DD-MM-YYYY")}a(X5,"getLimitKey");function Z5(e){try{let t=new p5(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){Ir.error("Got an error back ticking items."),Ir.error(t)}}a(Z5,"backtickASTSchemaItems");function e8(e){return[e]}a(e8,"createForkArgs");function t8(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(t8,"autoCastBoolean");function r8(e,t){let{getDatabases:r}=(ge(),ie(Ge)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(r8,"getTableHashAttribute");function n8(e){let{getDatabases:t}=(ge(),ie(Ge));return t()[e]!==void 0}a(n8,"doesSchemaExist");function s8(e,t){let{getDatabases:r}=(ge(),ie(Ge));return r()[e]?.[t]!==void 0}a(s8,"doesTableExist");function i8(e){try{return JSON.stringify(e)}catch{return e}}a(i8,"stringifyObj");function o8(e){let t=yE.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(o8,"ms_to_time");function a8(e,t){let r=so.basename(e,so.extname(e));return so.join(so.dirname(e),r+t)}a(a8,"changeExtension");function $g(){if(process.env[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=T5(process.argv);if(e[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a($g,"getEnvCliRootPath");var Fg;function c8(){if(Fg)return Fg;let e=$g();$g()&&HM.pathExistsSync(so.join(e,ct.HDB_CONFIG_FILE))&&(Fg=!0)}a(c8,"noBootFile");function l8(e,t){let r;return e.protocol==="http:"?r=R5:r=g5,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",l=>{c.body+=l}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(l8,"httpRequest");function u8(e){if(!e.schema&&!e.database){e.schema=ct.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(u8,"transformReq");function _8(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(_8,"convertToMS")});var J=g((Jge,zM)=>{"use strict";var Vg=require("fs-extra"),fa=require("path"),WM=require("os"),d8=require("properties-reader"),zu=G(),ju=Q(),_e=C(),wE=ht(),f8="Error initializing environment manager",CE="BOOT_PROPS_FILE_PATH",QM=!1,E8={[_e.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},_i={};zM.exports={BOOT_PROPS_FILE_PATH:CE,getHdbBasePath:h8,setHdbBasePath:p8,get:jM,initSync:S8,setProperty:Ue,initTestEnvironment:T8};function h8(){return _i[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(h8,"getHdbBasePath");function p8(e){_i[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(p8,"setHdbBasePath");function jM(e){let t=wE.getConfigValue(e);return t===void 0?_i[e]:t}a(jM,"get");function Ue(e,t){E8[e]&&(_i[e]=t),wE.updateConfigObject(e,t)}a(Ue,"setProperty");function m8(){let e;try{e=ju.getPropsFilePath(),Vg.accessSync(e,Vg.constants.F_OK|Vg.constants.R_OK),QM=!0;let t=d8(e);return _i[_e.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(_e.HDB_SETTINGS_NAMES.INSTALL_USER),_i[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),_i[CE]=e,!0}catch{return zu.trace(`Environment manager found no properties file at ${e}`),!1}}a(m8,"doesPropFileExist");function S8(e=!1){try{(QM||m8()||ju.noBootFile())&&(wE.initConfig(e),_i[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=wE.getConfigValue(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){zu.error(f8),zu.error(t),console.error(t),process.exit(1)}}a(S8,"initSync");function T8(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=fa.join(__dirname,"../../","unitTests");_i[CE]=fa.join(l,"hdb_boot_properties.file"),Ue(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,fa.join(l,"settings.test")),Ue(_e.HDB_SETTINGS_NAMES.INSTALL_USER,WM.userInfo()?WM.userInfo().username:void 0),Ue(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ue(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY,fa.join(l,"envDir","log")),Ue(_e.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ue(_e.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ue(_e.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ue(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,fa.join(l,"envDir")),Ue(_e.CONFIG_PARAMS.STORAGE_PATH,fa.join(l,"envDir")),s&&(Ue(_e.CONFIG_PARAMS.HTTP_SECUREPORT,jM(_e.CONFIG_PARAMS.HTTP_PORT)),Ue(_e.CONFIG_PARAMS.HTTP_PORT,null)),Ue(_e.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ue(_e.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ue(_e.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,ju.isEmpty(i)?!1:i),Ue(_e.CONFIG_PARAMS.HTTP_CORS,ju.isEmpty(i)?!1:i),Ue(_e.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ue(_e.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ue(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ue(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ue(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,fa.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ue(_e.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,ju.isEmpty(c)?!1:c),o&&(Ue("CORS_ACCESSLIST",o),Ue(_e.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Ue(_e.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ue(_e.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ue(_e.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ue(_e.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ue(_e.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ue(_e.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${CE}. Please check your boot props and settings files`;zu.fatal(r),zu.error(t)}}a(T8,"initTestEnvironment")});var Wg={};$e(Wg,{loadGQLSchema:()=>A8,start:()=>Kg,startOnMainThread:()=>R8});function Kg({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:_,StringValueNode:u}=await import("graphql"),d=o(new c(r.toString(),s)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case l.OBJECT_TYPE_DEFINITION:let B=function(v){if(v.kind==="NonNullType"){let V=B(v.type);return V.nullable=!1,V}if(v.kind==="ListType")return{type:"array",elements:B(v.type)};let K={type:v.name?.value};return Object.defineProperty(K,"location",{value:v.loc.startToken}),K};a(B,"getProperty");let A=S.name.value,T=[],R={table:null,database:null,properties:T};f.set(A,R);for(let v of S.directives){if(v.name.value==="table"){for(let P of v.arguments)R[P.name.value]=P.value.value;R.schema&&(R.database=R.schema),R.table||(R.table=A),R.audit&&(R.audit=R.audit!=="false"),R.attributes=R.properties,E.push(R)}if(v.name.value==="sealed"&&(R.sealed=!0),v.name.value==="export"){R.export=!0;for(let P of v.arguments)P.name.value==="name"&&(R.export={name:P.value.value})}}let U=!1;for(let v of S.fields){let P=B(v.type);P.name=v.name.value,T.push(P);for(let K of v.directives)if(K.name.value==="primaryKey")U?console.warn("Can not define two attributes as a primary key"):(P.isPrimaryKey=!0,U=!0);else if(K.name.value==="indexed")P.indexed=!0;else if(K.name.value==="relationship"){let V={};for(let Y of K.arguments)V[Y.name.value]=Y.value.value;P.relationship=V}else if(K.name.value==="createdTime")P.assignCreatedTime=!0;else if(K.name.value==="updatedTime")P.assignUpdatedTime=!0;else if(K.name.value==="expiresAt")P.expiresAt=!0;else if(K.name.value==="allow"){let V=P.authorizedRoles=[];for(let Y of K.arguments)Y.name.value==="role"&&V.push(Y.value.value)}}R.type=A,A==="Query"&&(h=R)}function m(S){let A=f.get(S.type);A?(Object.defineProperty(S,"properties",{value:A.properties}),Object.defineProperty(S,"definition",{value:A})):S.type==="array"?m(S.elements):g8.includes(S.type)||(0,JM.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(m,"connectPropertyType");for(let S of f.values())for(let A of S.properties)m(A);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Yg.dirname)(n),S.tableClass):i.set((0,Yg.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var Yg,JM,g8,R8,A8,XM=Oe(()=>{Yg=require("path");ge();JM=q(rt()),g8=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(Kg,"start");R8=Kg,A8=Kg({ensureTable:Et}).handleFile});async function LE(e){return O8?(Ju||(Ju=N8(y8)),(await(await Ju).import(e)).namespace):import(e)}async function N8(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ju=new Compartment({console,Math,Date,fetch:b8,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,eU.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Qt,tables:cn,databases:at})}};let n=await(0,ZM.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Ju}function b8(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 y8(){return{Resource:Qt,tables:cn}}var ZM,eU,O8,Ju,Qg=Oe(()=>{Wn();ge();ZM=require("fs/promises"),eU=require("path"),O8=!1;a(LE,"secureImport");a(N8,"getCompartment");a(b8,"secureOnlyFetch");a(y8,"getGlobalVars")});var zg={};$e(zg,{handleFile:()=>I8});async function I8(e,t,r,n){let s=new Map,i=(0,tU.pathToFileURL)(r).toString(),o=await LE(i);l(o.default)&&n.set((0,jg.dirname)(t),o.default),c(o,(0,jg.dirname)(t));function c(_,u){for(let d in _){let f=_[d];l(f)?n.set(u+"/"+d,f):typeof f=="object"&&c(f,u+"/"+d)}}a(c,"recurseForResources");function l(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(l,"isResource"),s}var tU,jg,rU=Oe(()=>{tU=require("url");Qg();jg=require("path");a(I8,"handleFile")});var Xg={};$e(Xg,{start:()=>w8});function w8({resources:e}){e.set("login",Jg),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Jg,nU=Oe(()=>{Wn();a(w8,"start");Jg=class extends Qt{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 uU={};$e(uU,{parse:()=>eR,streamAsJSON:()=>Xu,stringify:()=>Ea});function Xu(e){return new Zg({value:e})}function sU(e){return console.error(e),JSON.stringify(e.toString())}function iU(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Ea(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===cU)return lU(e);if(t.resolution)return t.resolution.then(()=>Ea(e));throw t}}function lU(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+=lU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Ea(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function eR(e){return D8.test(e)?C8.parse(e):JSON.parse(e)}var oU,aU,C8,L8,cU,Zg,D8,tR=Oe(()=>{oU=require("stream"),aU=q(require("json-bigint-fixes")),C8=(0,aU.default)({useNativeBigInt:!0}),L8=1e4,cU={};BigInt.prototype.toJSON=function(){throw cU};a(Xu,"streamAsJSON");Zg=class extends oU.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),sU)}catch(s){yield sU(s)}else yield Ea(t)}else yield Ea(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);iU(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>L8?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 iU(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(sU,"handleError");a(iU,"when");a(Ea,"stringify");a(lU,"jsStringify");D8=/-?\d{16,}/;a(eR,"parse")});var DE=g((uRe,_U)=>{"use strict";var P8=In();_U.exports={writeTransaction:M8};function M8(e,t,r){return P8.writeTransaction(e,t,r)}a(M8,"writeTransaction")});var hU=g((fRe,EU)=>{"use strict";var U8=Ar(),v8=wn(),dU=G(),B8=Or(),dRe=DE(),H8=require("clone"),nR=require("alasql"),q8=kf(),fU=require("util"),x8=fU.promisify(v8.getTableSchema),G8=fU.promisify(U8.search),F8=C(),rR=Q();q8(nR);EU.exports={update:$8};var k8="There was a problem performing this update. Please check the logs and try again.";async function $8({statement:e,hdb_user:t}){let r=await x8(e.table.databaseid,e.table.tableid),n=V8(e.columns);rR.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=H8(s),c=rR.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=nR.parse(l).statements[0],u=await G8(_),d=Y8(n,u);return K8(o,d,t)}a($8,"update");function V8(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=nR.compile(`SELECT ${r.expression.toString()} AS [${F8.FUNC_VAL}] FROM ?`)}),t}catch(t){throw dU.error(t),new Error(k8)}}a(V8,"createUpdateRecord");function Y8(e,t){return rR.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Y8,"buildUpdateRecords");async function K8(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await B8.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){dU.error(`Error delete new_attributes from update response: ${i}`)}return s}a(K8,"updateRecords")});var mU=g((mRe,pU)=>{var W8=require("alasql"),Q8=Ar(),j8=G(),z8=In(),iR=require("util"),sR=Q(),J8=C(),X8=wn(),hRe=DE(),pRe=Or(),Z8="record",e6="successfully deleted",t6=iR.callbackify(i6),r6=iR.promisify(Q8.search),n6=iR.promisify(X8.getTableSchema);pU.exports={convertDelete:t6};function s6(e){return`${e.deleted_hashes.length} ${Z8}${e.deleted_hashes.length===1?"":"s"} ${e6}`}a(s6,"generateReturnMessage");async function i6({statement:e,hdb_user:t}){let r=await n6(e.table.databaseid,e.table.tableid);sR.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=sR.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=W8.parse(o).statements[0],l={operation:J8.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await r6(c);let _=await z8.deleteRecords(l);return sR.isEmptyOrZeroLength(_.message)&&(_.message=s6(_)),delete _.txn_time,_}catch(_){throw j8.error(_),_.hdb_code?_.message:_}}a(i6,"convertDelete")});var AU=g((TRe,RU)=>{"use strict";var o6=zi(),{hdb_errors:SU}=se(),{getDatabases:TU}=(ge(),ie(Ge));RU.exports={checkSchemaExists:gU,checkSchemaTableExists:a6,schema_describe:o6};async function gU(e){if(!TU()[e])return SU.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(gU,"checkSchemaExists");async function a6(e,t){let r=await gU(e);if(r)return r;if(!TU()[e][t])return SU.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(a6,"checkSchemaTableExists")});var pt=g((bRe,kU)=>{"use strict";var zt=J();zt.initSync();var c6=require("fs-extra"),l6=require("semver"),t_=require("path"),{monotonicFactory:u6}=require("ulidx"),NU=u6(),_6=require("util"),bU=require("child_process"),d6=_6.promisify(bU.exec),f6=bU.spawn,we=tt(),Be=C(),lR=Q(),_n=G(),PE=li(),E6=DE(),Zu=ht(),{onMessageByType:h6}=rt(),{isMainThread:p6}=require("worker_threads"),{Encoder:m6,decode:uR}=require("msgpackr"),yU=new m6,{isEmpty:Sa}=lR,IU=yr(),S6=48*36e11,T6=5e9;p6&&h6(Be.ITC_EVENT_TYPES.RESTART,()=>{Pn=void 0,ma=void 0});var{connect:g6,StorageType:wU,RetentionPolicy:CU,AckPolicy:ME,DeliverPolicy:UE,DiscardPolicy:R6,NatsConnection:RRe,JetStreamManager:ARe,JetStreamClient:ORe,StringCodec:NRe,JSONCodec:A6,createInbox:_R,headers:O6,ErrorCode:OU}=require("nats"),{PACKAGE_ROOT:N6}=C(),b6=Ho(),{recordAction:y6}=(ui(),ie(Bu)),LU=A6(),I6="clustering",w6=b6.engines[we.NATS_SERVER_NAME],C6=t_.join(N6,"dependencies"),cR=t_.join(C6,`${process.platform}-${process.arch}`,we.NATS_BINARY_NAME),oR,aR,e_,ha,pa;kU.exports={runCommand:DU,checkNATSServerInstalled:L6,createConnection:dR,getConnection:vE,getJetStreamManager:r_,getJetStream:MU,getNATSReferences:wr,getServerList:P6,createLocalStream:fR,listStreams:UU,deleteLocalStream:M6,getServerConfig:n_,listRemoteStreams:U6,viewStream:v6,viewStreamIterator:B6,publishToStream:H6,createWorkQueueStream:q6,addSourceToWorkStream:BU,request:G6,removeSourceFromWorkStream:qU,reloadNATS:ER,reloadNATSHub:F6,reloadNATSLeaf:k6,extractServerName:HU,requestErrorHandler:$6,updateWorkStream:V6,createLocalTableStream:GU,createTableStreams:Y6,purgeTableStream:FU,purgeSchemaTableStreams:K6,getStreamInfo:W6,updateLocalStreams:j6,closeConnection:D6,getJsmServerName:s_,addNatsMsgHeader:vU,updateIngestStreamConsumer:x6,clearClientCache:PU};async function DU(e,t=void 0){let{stdout:r,stderr:n}=await d6(e,{cwd:t});if(n)throw new Error(n.replace(`
7
+ `)},cX="certificate.pem",lX="privateKey.pem",uX="ca.pem";mP.exports={CERTIFICATE_VALUES:aX,CERTIFICATE_PEM_NAME:cX,PRIVATEKEY_PEM_NAME:lX,CA_PEM_NAME:uX}});var pg=T((QTe,AP)=>{"use strict";var RP=require("fs-extra"),ae=require("joi"),_X=require("os"),{boolean:Ie,string:yr,number:Pt,array:hg}=ae.types(),{totalmem:SP}=require("os"),ra=require("path"),dX=x(),oE=K(),WTe=Eg(),TP=C(),fX=rt(),gP="log",EX="components",hX="Invalid logging.rotation.maxSize unit. Available units are G, M or K",pX="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",mX="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",SX="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",TX="rootPath config parameter is undefined",gX="clustering.enabled config parameter is undefined",na=Pt.min(0).required(),aE=hg.items({host:yr.required(),port:na}).empty(null),Ds;AP.exports={configValidator:RX,routesValidator:IX,route_constraints:aE};function RX(e){if(Ds=e.rootPath,oE.isEmpty(Ds))throw TX;let t=Ie.required(),r=Pt.min(0).max(1e3).empty(null).default(yX),n=yr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Nu),s=yr.optional().empty(null),i=yr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ae.string().empty(null).default(Nu),c=ae.custom(OX).empty(null).default(Nu),l=e.clustering?.enabled;if(oE.isEmpty(l))throw gX;let _;return l===!0?_=ae.object({enabled:t,hubServer:ae.object({cluster:ae.object({name:ae.required().empty(null),network:ae.object({port:na,routes:aE}).required()}).required(),leafNodes:ae.object({network:ae.object({port:na}).required()}).required(),network:ae.object({port:na}).required()}).required(),leafServer:ae.object({network:ae.object({port:na,routes:aE}).required(),streams:ae.object({maxAge:Pt.min(120).allow(null).optional(),maxBytes:Pt.min(1).allow(null).optional(),maxMsgs:Pt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ae.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Ie.optional(),databaseLevel:Ie.optional(),tls:ae.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Ie.required(),verify:Ie.optional()}),user:yr.optional().empty(null)}).required():_=ae.object({enabled:t,tls:ae.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Ie.required()})}).required(),ae.object({authentication:ae.object({authorizeLocal:Ie,cacheTTL:Pt.required(),enableSessions:Ie}),analytics:ae.object({aggregatePeriod:Pt}),componentsRoot:n.optional(),clustering:_,localStudio:ae.object({enabled:t}).required(),logging:ae.object({auditAuthEvents:ae.object({logFailed:Ie,logSuccessful:Ie}),file:Ie.required(),level:ae.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ae.object({enabled:Ie.optional(),compress:Ie.optional(),interval:yr.custom(bX).optional().empty(null),maxSize:yr.custom(NX).optional().empty(null),path:yr.optional().empty(null).default(Nu)}).required(),root:n,stdStreams:Ie.required(),auditLog:Ie.required()}).required(),operationsApi:ae.object({network:ae.object({cors:Ie.optional(),corsAccessList:hg.optional(),headersTimeout:Pt.min(1).optional(),keepAliveTimeout:Pt.min(1).optional(),port:Pt.optional().empty(null),domainSocket:ae.optional().empty("hdb/operations-server").default(Nu),securePort:Pt.optional().empty(null),timeout:Pt.min(1).optional()}).optional(),tls:ae.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:yr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ae.object({network:ae.object({port:na,securePort:na,mtls:ae.alternatives([Ie.optional(),ae.object({user:yr.optional(),certificateAuthority:s,required:Ie.optional()})])}).required(),webSocket:Ie.optional(),requireAuthentication:Ie.optional()}),http:ae.object({compressionThreshold:Pt.optional(),cors:Ie.optional(),corsAccessList:hg.optional(),headersTimeout:Pt.min(1).optional(),port:Pt.min(0).optional().empty(null),securePort:Pt.min(0).optional().empty(null),mtls:ae.alternatives([Ie.optional(),ae.object({user:yr.optional(),certificateAuthority:s,required:Ie.optional()})])}).required(),threads:ae.alternatives(r.optional(),ae.object({count:r.optional(),debug:ae.alternatives(Ie.optional(),ae.object({startingPort:Pt.min(1).optional(),host:yr.optional(),waitForDebugger:Ie.optional()})),maxHeapMemory:Pt.min(0).optional()})),storage:ae.object({writeAsync:Ie.required(),overlappingSync:Ie.optional(),caching:Ie.optional(),compression:Ie.optional(),noReadAhead:Ie.optional(),path:c,prefetchWrites:Ie.optional()}).required(),ignoreScripts:Ie.optional(),tls:ae.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:yr.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(RX,"configValidator");function AX(e){return RP.existsSync(e)?null:`Specified path ${e} does not exist.`}a(AX,"doesPathExist");function OX(e,t){ae.assert(e,yr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=AX(e);if(r)return t.message(r)}a(OX,"validatePath");function NX(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(hX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(mX):e}a(NX,"validateRotationMaxSize");function bX(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(pX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(SX):e}a(bX,"validateRotationInterval");function yX(e,t){let r=t.state.path.join("."),n=_X.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||SP();return i=Math.round(Math.min(i,SP())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),dX.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(yX,"setDefaultThreads");function Nu(e,t){let r=t.state.path.join(".");if(!oE.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(oE.isEmpty(Ds))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return ra.join(Ds,EX);case"logging.root":return ra.join(Ds,gP);case"clustering.leafServer.streams.path":return ra.join(Ds,"clustering","leaf");case"storage.path":let n=ra.join(Ds,TP.LEGACY_DATABASES_DIR_NAME);return RP.existsSync(n)?n:ra.join(Ds,TP.DATABASES_DIR_NAME);case"logging.rotation.path":return ra.join(Ds,gP);case"operationsApi.network.domainSocket":return r==null?null:ra.join(Ds,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Nu,"setDefaultRoot");function IX(e){let t=ae.object({routes:aE});return fX.validateBySchema({routes:e},t)}a(IX,"routesValidator")});var Et=T((JTe,DP)=>{"use strict";var rn=C(),Ft=K(),Mt=x(),{configValidator:wX,routesValidator:OP}=pg(),Ir=require("fs-extra"),CX=require("yaml"),ss=require("path"),LX=require("is-number"),bP=require("properties-reader"),DX=require("lodash"),{handleHDBError:PX}=ie(),{HTTP_STATUS_CODES:MX,HDB_ERROR_MSGS:cE}=Wr(),zTe=require("minimist"),{server:UX}=(mr(),oe(Ho)),{DATABASES_PARAM_CONFIG:bu,CONFIG_PARAMS:tn,CONFIG_PARAM_MAP:is}=rn,vX="Unable to get config value because config is uninitialized",BX="Config successfully initialized",HX="Error backing up config file",qX="Empty parameter sent to getConfigValue",yP=ss.join(rn.PACKAGE_ROOT,"config","yaml",rn.HDB_DEFAULT_CONFIG_FILE),GX="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",NP={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"},lE,Ut,uE;DP.exports={createConfigFile:xX,getDefaultConfig:FX,getConfigValue:wP,initConfig:Sg,flattenConfig:gc,updateConfigValue:CP,updateConfigObject:$X,getConfiguration:KX,setConfiguration:WX,readConfigFile:gg,getClusteringRoutes:QX,initOldConfig:LP,getConfigFromFile:jX,getConfigFilePath:sa,addConfig:zX,deleteConfigFromFile:JX,getConfigObj:XX};function xX(e){let t=Zi(yP);lE=gc(t.toJSON());let r;for(let o in e){let c=is[o.toLowerCase()];if(c===tn.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let l=c.split("_"),_=mg(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...l],_)}catch(u){Mt.error(u)}}}r&&IP(t,r),Tg(t);let n=t.toJSON();Ut=gc(n);let s=t.getIn(["rootPath"]),i=ss.join(s,rn.HDB_CONFIG_FILE);Ir.createFileSync(i),Ir.writeFileSync(i,String(t)),Mt.trace(`Config file written to ${i}`)}a(xX,"createConfigFile");function IP(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Ft.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(bu.TABLES))for(let i in n[s][bu.TABLES])for(let o in n[s][bu.TABLES][i]){let c=n[s][bu.TABLES][i][o],l=[tn.DATABASES,s,bu.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[tn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Mt.error("Error parsing schemas CLI/env config arguments",n)}}a(IP,"setSchemasConfig");function FX(e){if(lE===void 0){let r=Zi(yP);lE=gc(r.toJSON())}let t=is[e.toLowerCase()];if(t!==void 0)return lE[t.toLowerCase()]}a(FX,"getDefaultConfig");function wP(e){if(e==null){Mt.error(qX);return}if(Ut===void 0){Mt.trace(vX);return}let t=is[e.toLowerCase()];if(t!==void 0)return Ut[t.toLowerCase()]}a(wP,"getConfigValue");function sa(e=Ft.getPropsFilePath()){let t=Ft.getEnvCliRootPath();return t?ss.join(t,rn.HDB_CONFIG_FILE):bP(e).get(rn.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(sa,"getConfigFilePath");function Sg(e=!1){if(Ut===void 0||e){let t;if(!Ft.noBootFile()){t=Ft.getPropsFilePath();try{Ir.accessSync(t,Ir.constants.F_OK|Ir.constants.R_OK)}catch(i){throw Mt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=sa(t),n;if(r.includes("config/settings.js"))try{LP(r);return}catch(i){if(i.code!==rn.NODE_ERROR_CODES.ENOENT)throw i}try{n=Zi(r)}catch(i){if(i.code===rn.NODE_ERROR_CODES.ENOENT){Mt.trace(`HarperDB config file not found at ${r}.
8
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw Mt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}kX(n,r),Tg(n);let s=n.toJSON();if(UX.config=s,Ut=gc(s),Ut.logging_rotation_rotate)for(let i in NP)Ut[i]&&Mt.error(`Config ${NP[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Mt.trace(BX)}}a(Sg,"initConfig");function kX(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),n&&(Mt.trace("Updating config file with missing config params"),Ir.writeFileSync(t,String(e)))}a(kX,"checkForUpdatedConfig");function Tg(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t?.http?.threads&&(t.threads=t?.http?.threads);let r=wX(t);if(r.error)throw cE.CONFIG_VALIDATION(r.error.message);typeof r.value.threads=="object"?e.setIn(["threads","count"],r.value.threads.count):e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],r.value?.operationsApi?.network?.domainSocket)}a(Tg,"validateConfig");function $X(e,t){Ut===void 0&&(Ut={});let r=is[e.toLowerCase()];if(r===void 0){Mt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ut[r.toLowerCase()]=t}a($X,"updateConfigObject");function CP(e,t,r=void 0,n=!1,s=!1,i=!1){Ut===void 0&&Sg();let o=wP(is.hdb_root),c=ss.join(o,rn.HDB_CONFIG_FILE),l=Zi(c),_;if(r===void 0&&e.toLowerCase()===tn.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=is[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=mg(f,t);l.setIn([...E],h)}else for(let f in r){let E=is[f.toLowerCase()];if(E===tn.HTTP_SECUREPORT&&r[f]===Ut[tn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),E===tn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===Ut[tn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),E===tn.DATABASES){_=r[f];continue}if(E?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),m=rn.LEGACY_CONFIG_PARAMS[f.toUpperCase()];m&&m.startsWith("customFunctions")&&l.hasIn(m.split("_"))&&(E=m,h=m.split("_"));let S=mg(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],S)}catch(R){Mt.error(R)}}}_&&IP(l,_),Tg(l);let u=l.getIn(["rootPath"]),d=ss.join(u,rn.HDB_CONFIG_FILE);n===!0&&VX(c,u),Ir.writeFileSync(d,String(l)),s&&(Ut=gc(l.toJSON())),Mt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(CP,"updateConfigValue");function VX(e,t){try{let r=ss.join(t,"backup",`${rn.HDB_CONFIG_FILE}.bak`);Ir.copySync(e,r),Mt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Mt.error(HX),Mt.error(r)}}a(VX,"backupConfigFile");var YX=["databases"];function gc(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)),uE=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])&&!YX.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!tn[l.toUpperCase()]&&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(gc,"flattenConfig");function mg(e,t){if(e===tn.CLUSTERING_NODENAME||e===tn.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(LX(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Ft.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 Ft.autoCast(t)}a(mg,"castConfigValue");function KX(){let e=Ft.getPropsFilePath(),t=sa(e);return Zi(t).toJSON()}a(KX,"getConfiguration");async function WX(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return CP(void 0,void 0,s,!0),GX}catch(i){throw typeof i=="string"||i instanceof String?PX(i,i,MX.BAD_REQUEST,void 0,void 0,!0):i}}a(WX,"setConfiguration");function gg(){let e=Ft.getPropsFilePath();try{Ir.accessSync(e,Ir.constants.F_OK|Ir.constants.R_OK)}catch(n){if(!Ft.noBootFile())throw Mt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=sa(e);return Zi(t).toJSON()}a(gg,"readConfigFile");function Zi(e){return CX.parseDocument(Ir.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Zi,"parseYamlDoc");function QX(){let e=gg(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Ft.isEmptyOrZeroLength(t)?[]:t;let r=OP(t);if(r)throw cE.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Ft.isEmptyOrZeroLength(n)?[]:n;let s=OP(n);if(s)throw cE.CONFIG_VALIDATION(s.message);if(!Ft.isEmptyOrZeroLength(n)&&!Ft.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Ft.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw cE.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(QX,"getClusteringRoutes");function LP(e){let t=bP(e);Ut={};for(let r in is){let n=t.get(r.toUpperCase());if(Ft.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=is[r].toLowerCase();s===tn.LOGGING_ROOT?Ut[s]=ss.dirname(n):Ut[s]=n}return Ut}a(LP,"initOldConfig");function jX(e){let t=gg();return DX.get(t,e.replaceAll("_","."))}a(jX,"getConfigFromFile");async function zX(e,t){let r=Zi(sa());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Ir.writeFile(sa(),String(r))}a(zX,"addConfig");function JX(e){let t=sa(Ft.getPropsFilePath()),r=Zi(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ss.join(n,rn.HDB_CONFIG_FILE);Ir.writeFileSync(s,String(r))}a(JX,"deleteConfigFromFile");function XX(){return uE||(Sg(),uE)}a(XX,"getConfigObj")});var MP=T((ZTe,PP)=>{"use strict";var _E=C(),dE=class{static{a(this,"BaseLicense")}constructor(t=0,r=_E.RAM_ALLOCATION_ENUM.DEFAULT,n=_E.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},Rg=class extends dE{static{a(this,"ExtendedLicense")}constructor(t=0,r=_E.RAM_ALLOCATION_ENUM.DEFAULT,n=_E.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};PP.exports={BaseLicense:dE,ExtendedLicense:Rg}});var ia=T((tge,GP)=>{"use strict";var Ac=require("fs-extra"),vP=iE(),BP=require("crypto"),ZX=require("moment"),eZ=require("uuid").v4,ir=x(),Og=require("path"),tZ=K(),eo=C(),{totalmem:UP}=require("os"),rZ=MP().ExtendedLicense,Rc="invalid license key format",nZ="061183",sZ="mofi25",iZ="aes-256-cbc",oZ=16,aZ=32,HP=X();HP.initSync();var Ag;GP.exports={validateLicense:qP,generateFingerPrint:lZ,licenseSearch:yg,getLicense:dZ,checkMemoryLimit:fZ};function Ng(){return Og.join(HP.getHdbBasePath(),eo.LICENSE_KEY_DIR_NAME,eo.LICENSE_FILE_NAME)}a(Ng,"getLicenseDirPath");function cZ(){let e=Ng();return Og.join(e,eo.LICENSE_FILE_NAME)}a(cZ,"getLicenseFilePath");function bg(){let e=Ng();return Og.join(e,eo.REG_KEY_FILE_NAME)}a(bg,"getFingerPrintFilePath");async function lZ(){let e=bg();try{return await Ac.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await uZ();throw ir.error(`Error writing fingerprint file to ${e}`),ir.error(t),new Error("There was an error generating the fingerprint")}}a(lZ,"generateFingerPrint");async function uZ(){let e=eZ(),t=vP.hash(e),r=bg();try{await Ac.mkdirp(Ng()),await Ac.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw ir.error(`Error writing fingerprint file to ${r}`),ir.error(n),new Error("There was an error generating the fingerprint")}return t}a(uZ,"writeFingerprint");function qP(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:eo.RAM_ALLOCATION_ENUM.DEFAULT,version:eo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return ir.error("empty license key passed to validate."),r;let n=bg(),s=!1;try{s=Ac.statSync(n)}catch(i){ir.error(i)}if(s){let i;try{i=Ac.readFileSync(n,"utf8")}catch{ir.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(sZ),c=o[1];c=Buffer.concat([Buffer.from(c)],oZ);let l=Buffer.concat([Buffer.from(i)],aZ),_=BP.createDecipheriv(iZ,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let u=null;try{u=_.update(o[0],"hex","utf8"),u.trim(),u+=_.final("utf8")}catch{let E=_Z(o[0],i);if(E)u=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Rc),ir.error(Rc),new Error(Rc)}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(Rc),ir.error(Rc),new Error(Rc)}else r.exp_date=u;r.exp_date<ZX().valueOf()&&(r.valid_date=!1),vP.validate(o[1],`${nZ}${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||ir.error("Invalid licence"),r}a(qP,"validateLicense");function _Z(e,t){try{let r=BP.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{ir.warn("Check old license failed")}}a(_Z,"checkOldLicense");function yg(){let e=new rZ,t=[];try{t=Ac.readFileSync(cZ(),"utf-8").split(eo.NEW_LINE)}catch(r){r.code==="ENOENT"?ir.info("no license file found"):ir.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(tZ.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=qP(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){ir.error("There was an error parsing the license string."),ir.error(s),e.ram_allocation=eo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Ag=e,e}a(yg,"licenseSearch");async function dZ(){return Ag||await yg(),Ag}a(dZ,"getLicense");function fZ(){let e=yg().ram_allocation,t=process.constrainedMemory?.()||UP();if(t=Math.round(Math.min(t,UP())/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(fZ,"checkMemoryLimit")});var wr=T((oge,tM)=>{"use strict";var $P="username is required",VP="nothing to update, must supply active, role or password to update",YP="password cannot be an empty string",KP="If role is specified, it cannot be empty.",WP="active must be true or false";tM.exports={addUser:AZ,alterUser:OZ,dropUser:bZ,getSuperUser:CZ,userInfo:yZ,listUsers:EE,listUsersExternal:IZ,setUsersToGlobal:Nc,findAndValidateUser:ZP,getClusterUser:LZ,USERNAME_REQUIRED:$P,ALTERUSER_NOTHING_TO_UPDATE:VP,EMPTY_PASSWORD:YP,EMPTY_ROLE:KP,ACTIVE_BOOLEAN:WP};var QP=br(),EZ=ta(),Cg=iE(),jP=EP(),zP=nr(),Lg=ii(),nn=K(),JP=require("validate.js"),Re=x(),{promisify:hZ}=require("util"),Dg=li(),xP=C(),FP=et(),pZ=Et(),nge=X(),sge=ia(),mZ=ri(),{table:ige}=(ge(),oe(Fe)),{handleHDBError:Ps,hdb_errors:SZ}=ie(),{HTTP_STATUS_CODES:Ms,AUTHENTICATION_ERROR_MSGS:Ig,HDB_ERROR_MSGS:Oc}=SZ,{UserEventMsg:Pg}=Xn(),wg=require("lodash"),{server:Mg}=(mr(),oe(Ho)),TZ=x();Mg.getUser=(e,t)=>ZP(e,t,t!=null);var XP={username:!0,active:!0,role:!0,password:!0},kP=new Map,fE=zP.searchByValue,gZ=zP.searchByHash,RZ=hZ(EZ.delete);async function AZ(e){let t=JP.cleanAttributes(e,XP),r=jP.addUserValidation(t);if(r)throw Ps(new Error,r.message,Ms.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await fE(n),s=s&&Array.from(s)}catch(l){throw Re.error("There was an error searching for a role in add user"),Re.error(l),l}if(!s||s.length<1)throw Ps(new Error,Oc.ROLE_NAME_NOT_FOUND(t.role),Ms.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Ps(new Error,Oc.DUP_ROLES_FOUND(t.role),Ms.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Dg.encrypt(t.password)),t.password=Cg.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await QP.insert(i)}catch(l){throw Re.error("There was an error searching for a user."),Re.error(l),l}Re.debug(o);try{await Nc()}catch(l){throw Re.error("Got an error setting users to global"),Re.error(l),l}if(o.skipped_hashes.length===1)throw Ps(new Error,Oc.USER_ALREADY_EXISTS(t.username),Ms.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],Lg.signalUserChange(new Pg(process.pid)),`${c.username} successfully added`}a(AZ,"addUser");async function OZ(e){let t=JP.cleanAttributes(e,XP);if(nn.isEmptyOrZeroLength(t.username))throw new Error($P);if(nn.isEmptyOrZeroLength(t.password)&&nn.isEmptyOrZeroLength(t.role)&&nn.isEmptyOrZeroLength(t.active))throw new Error(VP);if(!nn.isEmpty(t.password)&&nn.isEmptyOrZeroLength(t.password.trim()))throw new Error(YP);if(!nn.isEmpty(t.active)&&!nn.isBoolean(t.active))throw new Error(WP);let r=NZ(t.username);if(!nn.isEmpty(t.password)&&!nn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Dg.encrypt(t.password)),t.password=Cg.hash(t.password)),t.role==="")throw new Error(KP);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 fE(i)||[])}catch(c){throw Re.error("Got an error searching for a role."),Re.error(c),c}if(!o||o.length===0){let c=Oc.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Re.error(c),Ps(new Error,c,Ms.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Oc.ALTER_USER_DUP_ROLES(t.role);throw Re.error(c),Ps(new Error,c,Ms.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await QP.update(n)}catch(i){throw Re.error("Error during update."),Re.error(i),i}try{await Nc()}catch(i){throw Re.error("Got an error setting users to global"),Re.error(i),i}return Lg.signalUserChange(new Pg(process.pid)),s}a(OZ,"alterUser");function NZ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(NZ,"isClusterUser");async function bZ(e){try{let t=jP.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(nn.isEmpty(global.hdb_users.get(e.username)))throw Ps(new Error,Oc.USER_NOT_EXIST(e.username),Ms.NOT_FOUND,void 0,void 0,!0);let n;try{n=await RZ(r)}catch(s){throw Re.error("Got an error deleting a user."),Re.error(s),s}Re.debug(n);try{await Nc()}catch(s){throw Re.error("Got an error setting users to global."),Re.error(s),s}return Lg.signalUserChange(new Pg(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(bZ,"dropUser");async function yZ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=wg.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await gZ(r)}catch(s){throw Re.error("Got an error searching for a role."),Re.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Re.error(r),r}return t}a(yZ,"userInfo");async function IZ(){let e;try{e=await EE()}catch(t){throw Re.error("Got an error listing users."),Re.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(IZ,"listUsersExternal");async function EE(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await fE(e)}catch(o){throw Re.error("Got an error searching for roles."),Re.error(o),o}let r={};for(let o of t)r[o.id]=wg.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 fE(n)}catch(o){throw Re.error("Got an error searching for users."),Re.error(o),o}let i=new Map;for(let o of s)o=wg.cloneDeep(o),o.role=r[o.role],wZ(o.role),i.set(o.username,o);return i}catch(e){throw Re.error("got an error listing users"),Re.error(e),nn.errorizeMessage(e)}return null}a(EE,"listUsers");function wZ(e){try{if(!e){Re.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(mZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Re.error("Got an error trying to set system permissions."),Re.error(t)}}a(wZ,"appendSystemTablesToRole");async function Nc(){try{let e=await EE();global.hdb_users=e}catch(e){throw Re.error(e),e}}a(Nc,"setUsersToGlobal");async function ZP(e,t,r=!0){global.hdb_users||await Nc();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Ps(new Error,Ig.GENERIC_AUTH_FAIL,Ms.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Ps(new Error,Ig.USER_INACTIVE,Ms.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(kP.get(t)===n.password)return s;if(Cg.validate(n.password,t))kP.set(t,n.password);else throw Ps(new Error,Ig.GENERIC_AUTH_FAIL,Ms.UNAUTHORIZED,void 0,void 0,!0)}return s}a(ZP,"findAndValidateUser");async function CZ(){global.hdb_users||await Nc();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(CZ,"getSuperUser");async function LZ(){let e=await EE(),t=pZ.getConfigFromFile(xP.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!nn.isEmpty(r)&&r?.role?.role===xP.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Dg.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+FP.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+FP.SERVER_SUFFIX.ADMIN,r}a(LZ,"getClusterUser");var eM=[];Mg.invalidateUser=function(e){for(let t of eM)try{t(e)}catch(r){TZ.error("Error invalidating user",r)}};Mg.onInvalidatedUser=function(e){eM.push(e)}});var Iu=T((uge,iM)=>{"use strict";var oa=x(),sn=C(),DZ=uw(),cge=Ln(),lge=zi(),PZ=wr(),{validateEvent:rM}=Xn(),yu=Cn(),MZ=require("process"),{resetDatabases:UZ}=(ge(),oe(Fe)),vZ={[sn.ITC_EVENT_TYPES.SCHEMA]:BZ,[sn.ITC_EVENT_TYPES.USER]:sM};async function BZ(e){let t=rM(e);if(t){oa.error(t);return}oa.trace("ITC schemaHandler received schema event:",e),await DZ(e.message),await HZ(e.message)}a(BZ,"schemaHandler");async function HZ(e){try{yu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),yu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),yu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=UZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){oa.error(t)}}a(HZ,"syncSchemaMetadata");var nM=[];async function sM(e){try{try{yu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),yu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){oa.warn(r)}let t=rM(e);if(t){oa.error(t);return}oa.trace(`ITC userHandler ${sn.HDB_ITC_CLIENT_PREFIX}${MZ.pid} received user event:`,e),await PZ.setUsersToGlobal();for(let r of nM)r()}catch(t){oa.error(t)}}a(sM,"userHandler");sM.addListener=function(e){nM.push(e)};iM.exports=vZ});var Xn=T((pge,aM)=>{"use strict";var dge=x(),Ug=K(),qZ=C(),{ITC_ERRORS:wu}=Wr(),{parentPort:fge,threadId:GZ,isMainThread:xZ,workerData:Ege}=require("worker_threads"),{onMessageFromWorkers:FZ,broadcast:hge,broadcastWithAcknowledgement:kZ}=tt();aM.exports={sendItcEvent:$Z,validateEvent:oM,SchemaEventMsg:VZ,UserEventMsg:YZ};var hE;FZ(async(e,t)=>{hE=hE||Iu(),oM(e),hE[e.type]&&await hE[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function $Z(e){return!xZ&&e.message&&(e.message.originator=GZ),kZ(e)}a($Z,"sendItcEvent");function oM(e){if(typeof e!="object")return wu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Ug.isEmpty(e.type))return wu.MISSING_TYPE;if(!e.hasOwnProperty("message")||Ug.isEmpty(e.message))return wu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Ug.isEmpty(e.message.originator))return wu.MISSING_ORIGIN;if(qZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return wu.INVALID_EVENT(e.type)}a(oM,"validateEvent");function VZ(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(VZ,"SchemaEventMsg");function YZ(e){this.originator=e}a(YZ,"UserEventMsg")});var ii=T((Tge,_M)=>{"use strict";var cM=C(),Sge=K(),pE=x(),lM=KI(),bc,{sendItcEvent:uM}=Xn();function KZ(e){try{pE.trace("signalSchemaChange called with message:",e),bc=bc||Iu();let t=new lM(cM.ITC_EVENT_TYPES.SCHEMA,e);return bc.schema(t),uM(t)}catch(t){pE.error(t)}}a(KZ,"signalSchemaChange");function WZ(e){try{pE.trace("signalUserChange called with message:",e),bc=bc||Iu();let t=new lM(cM.ITC_EVENT_TYPES.USER,e);return bc.user(t),uM(t)}catch(t){pE.error(t)}}a(WZ,"signalUserChange");_M.exports={signalSchemaChange:KZ,signalUserChange:WZ}});var Mu={};$e(Mu,{addAnalyticsListener:()=>Pu,recordAction:()=>on,recordActionBinary:()=>Dn,setAnalyticsEnabled:()=>QZ});function QZ(e){gM=e}function on(e,t,r,n,s){if(!gM)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||jZ()}function Dn(e,t,r,n,s){on(!!e,t,r,n,s)}function Pu(e){OM.push(e)}function jZ(){mE=performance.now(),setTimeout(async()=>{let e=performance.now()-mE;mE=0;let t=[],r={time:Date.now(),period:e,threadId:aa.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 NM){let f=Math.floor(c*d),E=o[f-1];if(f>l){let h=f-l;if(E===u){let m=_[_.length-1];typeof m=="number"?_[_.length-1]={value:m,count:1+h}:m.count+=h}else _.push(h>1?{value:E,count:h}:E),u=E;l=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await bM()}let n=process.memoryUsage();t.push({metric:"memory",threadId:aa.threadId,byThread:!0,...n});for(let s of OM)s(t);TE=new Map,aa.parentPort?aa.parentPort.postMessage({type:AM,report:r}):wM({report:r})},RM).unref()}async function zZ(e,t=6e4){let r=Hg(),n=yM(),s=new Promise(m=>{let S=performance.now();setImmediate(()=>{let R=performance.now();R-S>5e3&&(0,Cu.warn)("Unusually high event queue latency on the main thread of "+Math.round(R-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let R=performance.now();R-S>5e3&&(0,Cu.warn)("Unusually high task queue latency on the main thread of "+Math.round(R-S)+"ms"),m(R-S)})}),i;for(let m of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(m.value?.time){i=m.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,_=[],u;for(let{key:m,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(m>o+t)break}else o=m;u=m;let{metrics:R,threadId:g}=S;for(let A of R||[]){let{path:P,method:v,type:U,metric:F,count:H,total:j,distribution:z,threads:J,...Ae}=A;H||(H=1);let ue=F+(P?"-"+P:"");v!==void 0&&(ue+="-"+v),U!==void 0&&(ue+="-"+U);let Ee=c.get(ue);if(Ee){if(Ee.threads){let qe=Ee.threads[g];if(qe)Ee=qe;else{Ee.threads[g]=Object.assign({},Ae);continue}}Ee.count||(Ee.count=1);let Me=Ee.count;for(let qe in Ae){let Gt=Ae[qe];typeof Gt=="number"&&(Ee[qe]=(Ee[qe]*Me+Gt*H)/(Me+H))}Ee.count+=H,j>=0&&(Ee.total+=j,Ee.ratio=Ee.total/Ee.count)}else Ee=Object.assign({period:t},A),delete Ee.distribution,c.set(ue,Ee),Ee.byThread&&(Ee.threads=[],Ee.threads[g]=Object.assign({},Ae),_.push(Ee));if(z){z=z.map(qe=>typeof qe=="number"?{value:qe,count:1}:qe);let Me=l.get(ue);Me?Me.push(...z):l.set(ue,z)}}await bM()}for(let m of _){let{path:S,method:R,type:g,metric:A,count:P,total:v,distribution:U,threads:F,...H}=m;F=F.filter(j=>j);for(let j in H){if(typeof m[j]!="number")continue;let z=0;for(let J of F){let Ae=J[j];typeof Ae=="number"&&(z+=Ae)}m[j]=z}m.count=F.length,delete m.threads,delete m.byThread}for(let[m,S]of l){let R=c.get(m);S.sort((qe,Gt)=>qe.value>Gt.value?1:-1);let g=R.count-1,A=[],P=0,v=0,U;for(let qe of NM){let Gt=g*qe;for(;P<Gt;)U=S[v++],P+=U.count,v===1&&P--;let yd=S[v>1?v-2:0];U||(U=S[0]),A.push(U.value-(U.value-yd.value)*(P-Gt)/U.count)}let[F,H,j,z,J,Ae,ue,Ee,Me]=A;Object.assign(R,{p1:F,p10:H,p25:j,median:z,p75:J,p90:Ae,p95:ue,p99:Ee,p999:Me})}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(R=>{R||n.primaryStore.put(S.id,S)}),d=!0;let f=Date.now(),{idle:E,active:h}=performance.eventLoopUtilization();if(d||h*10>E){let m=(0,SE.getNextMonotonicTime)(),S={id:m,metric:"main-thread-utilization",idle:E-dM,active:h-fM,taskQueueLatency:await s,time:f,...process.memoryUsage()};n.primaryStore.put(m,S,{append:!0}).then(R=>{R||n.primaryStore.put(m,S)})}dM=E,fM=h}async function EM(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Hg(){return hM||(hM=ft({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function yM(){return pM||(pM=ft({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function ZZ(){IM=!0;let e=(0,Du.get)(Bg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await zZ(RM,e),await EM(Hg(),JZ),await EM(yM(),XZ)},Math.min(e/2,2147483647)).unref()}function wM(e,t){let r=e.report;r.threadId=t?.threadId||aa.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(mM+=n.mean*n.count);r.totalBytesProcessed=mM,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(SM.get(t))}),SM.set(t,t.performance.eventLoopUtilization())),r.id=(0,SE.getNextMonotonicTime)(),Hg().primaryStore.put(r.id,r),IM||ZZ(),e5&&(CM=r5(r))}async function r5(e){if(await CM,!to){let r=(0,Lu.dirname)((0,Cu.getLogFilePath)());try{to=await(0,vg.open)((0,Lu.join)(r,"analytics.log"),"r+")}catch{to=await(0,vg.open)((0,Lu.join)(r,"analytics.log"),"w+")}}let t=(await to.stat()).size;if(t>t5){let r=Buffer.alloc(t);await to.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await to.write(r,{position:0}),await to.truncate(r.length),t=r.length}await to.write(JSON.stringify(e)+`
9
+ `,t)}var aa,TM,Cu,Lu,vg,SE,Du,Bg,TE,gM,mE,RM,AM,OM,NM,dM,fM,bM,JZ,XZ,hM,pM,IM,mM,SM,e5,CM,to,t5,ui=Ne(()=>{aa=require("worker_threads"),TM=q(tt());ge();Cu=q(x()),Lu=require("path"),vg=require("fs/promises"),SE=q(Tr()),Du=q(X()),Bg=q(C());mr();(0,Du.initSync)();TE=new Map,gM=(0,Du.get)(Bg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(QZ,"setAnalyticsEnabled");a(on,"recordAction");it.recordAnalytics=on;a(Dn,"recordActionBinary");mE=0,RM=1e3,AM="analytics-report",OM=[];a(Pu,"addAnalyticsListener");NM=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(jZ,"sendAnalytics");a(zZ,"aggregation");dM=0,fM=0,bM=a(()=>new Promise(setImmediate),"rest");a(EM,"cleanup");JZ=36e5,XZ=31536e6;a(Hg,"getRawAnalyticsTable");a(yM,"getAnalyticsTable");(0,TM.setChildListenerByType)(AM,wM);a(ZZ,"startScheduledTasks");mM=0,SM=new Map,e5=!1;a(wM,"recordAnalytics");t5=1e6;a(r5,"logAnalytics")});var LM={};$e(LM,{Headers:()=>ro,appendHeader:()=>qg});function qg(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var ro,Uu=Ne(()=>{ro=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(qg,"appendHeader")});var kg={};$e(kg,{coerceType:()=>gE,makeTable:()=>OE,setServerUtilities:()=>_5,updateResource:()=>RE});function OE(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:_,dbisDB:u,sealed:d}=e,{expirationMS:f,evictionMS:E,audit:h,trackDeletes:m}=e,{attributes:S}=e;S||(S=[]),$I(i,l);let R=oS(i,n,l),g=0,A,P,v={},U=Promise.resolve(),F,H,j;for(let W of S)(W.assignCreatedTime||W.name==="__createdtime__")&&(F=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(H=W),W.expiresAt&&(j=W),W.isPrimaryKey&&(v=W);let z,J=[],Ae=[],ue=1,Ee=2,Me={},qe={},Gt=864e5,yd,Id,Bi,Wb=!1,Cm,uV=i.getRange({start:!1,end:!1}).constructor,_V=10,dV=6;h&&zb();class Xe extends jt{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=F;static updatedTimeProperty=H;static propertyResolvers;static sources=[];static get expirationMS(){return f}static dbisDB=u;static schemaDefined=_;static sourcedFrom(p,N){N&&(this.sourceOptions=N,(N.expiration||N.eviction||N.scanInterval)&&this.setTTLExpiration(N)),N?.intermediateSource?(p.intermediateSource=!0,this.sources.unshift(p)):this.sources.push(p),P=p.get&&(!p.get.reliesOnPrototype||p.prototype.get);let I=a(D=>{let y=this.sources.slice(0,-1);if(y=y.filter(M=>M[D]&&(!M[D].reliesOnPrototype||M.prototype[D])),y.length>0)if(y.length===1){let M=y[0];return(k,L,B)=>{if(k?.source!==M)return M[D](L,B,k)}}else return(M,k,L)=>{let B=[];for(let $ of y){if(M?.source===$)break;B.push($[D](k,L,M))}return Promise.all(B)}},"getApplyToIntermediateSource"),b=this.sources[this.sources.length-1],O=a(D=>{if(b[D]&&(!b[D].reliesOnPrototype||b.prototype[D]))return(y,M,k)=>{if(!y?.source)return b[D](M,k,y)}},"getApplyToCanonicalSource");return Me={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},qe={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish"),invalidate:I("invalidate")},(async()=>{let D=!1,y=a(async(M,k)=>{let L=M.value,B=M.table?ot[c][M.table]:Xe;if(c===as.SYSTEM_SCHEMA_NAME&&(M.table===as.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===as.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),M.id===void 0&&(M.id=L[B.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=p;let $=await B.getResource(M.id,k,yc);switch(M.type){case"put":return $._writeUpdate(L,!0,yc);case"patch":return $._writeUpdate(L,!1,yc);case"delete":return $._writeDelete(yc);case"publish":return $._writePublish(L,yc);case"invalidate":return $.invalidate(yc);default:nt.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=p.subscribe;M&&m==null&&(m=!0);let k=p.subscribeOnThisThread?p.subscribeOnThisThread((0,la.getWorkerIndex)()):(0,la.getWorkerIndex)()===0,L=M&&k&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(L){let B;for await(let $ of L)try{if(!($.type==="transaction"?$.writes[0]:$)){nt.error("Bad subscription event",$);continue}if($.source=p,B)if($.beginTxn)B.resolve();else{y($,B);continue}if($.type==="end_txn")continue;let ye=Ze($,()=>{if($.type==="transaction"){let te=[];for(let Be of $.writes)try{te.push(y(Be,$))}catch(le){throw le.message+=" writing "+JSON.stringify(Be)+" of event "+JSON.stringify($),le}return Promise.all(te)}else if($.type==="define_schema"){let te=this.attributes.slice(0),Be;for(let le of $.attributes)te.find(ke=>ke.name===le.name)||(te.push(le),Be=!0);Be&&(ft({table:s,database:c,attributes:te,origin:"cluster"}),Fu.signalSchemaChange(new ku.SchemaEventMsg(process.pid,as.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return $.beginTxn?(B=$,y($,$),new Promise(te=>{B.resolve=te})):y($,$)});D&&(await ye,Fu.signalUserChange(new ku.UserEventMsg(process.pid))),$.onCommit&&(ye?.then?ye.then($.onCommit):$.onCommit())}catch(ce){nt.error("error in subscription handler",ce)}}}catch(M){nt.error(M)}})(),this}static getResource(p,N,I){let b=super.getResource(p,N,I);if(p!=null){Il(p);try{if(b.hasOwnProperty(fe))return b;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let O=!I?.async||i.cache?.get(p),D=Yn(N),y=D.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Lm(p,N,{transaction:y},O,M=>{if(M?RE(b,M):b[fe]=null,N.onlyIfCached&&N.noCacheStore){if(!b.doesExist())throw new Pn.ServerError("Entry is not cached",504)}else if(I?.ensureLoaded){let k=Dm(p,M,N,b);if(k)return D?.disregardReadTxn(),b[Gg]=!0,Fg(k,L=>(RE(b,L),b))}return b})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(p)),O}}return b}ensureLoaded(){let p=Dm(this[Ue],this[an],this[be]);if(p)return this[Gg]=!0,Fg(p,N=>{this[an]=N,this[fe]=N.value,this[Gu]=N.version})}static setTTLExpiration(p){if(typeof p=="number")f=p*1e3,E||(E=0);else if(p&&typeof p=="object")f=p.expiration*1e3,E=(p.eviction||0)*1e3,Gt=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(f<0)throw new Error("Expiration can not be negative");Gt=Gt||(f+E)/4,Mm()}static enableAuditing(p=!0){h=p,p&&zb(),Xe.audit=p}static coerceId(p){return p===""?null:gE(p,v)}static async dropTable(){if(delete ot[c][s],c===o){for(let p of S)u.remove(Xe.tableName+"/"+p.name),r[p.name]?.drop();u.remove(Xe.tableName+"/"),i.drop(),await u.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Fu.signalSchemaChange(new ku.SchemaEventMsg(process.pid,as.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(p){if(typeof p=="string")return this.getProperty(p);if(this[In])return this.search(p);if(this[Ue]===null){if(p?.conditions)return this.search(p);let N=Xe.getRecordCount();return{recordCount:N.recordCount,estimatedRecordRange:N.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[be]?.returnNonexistent)return this}allowRead(p,N){let I=Cd(p);if(I?.read){if(I.isSuperUser)return!0;let b=I.attribute_permissions,O=N?.select;if(b?.length>0||Wb&&O){if(N||(N={}),O){let D=b?.length>0&&xg(b,"read");N.select=O.map(y=>{let M=y.name||y;if(!D||D[M]){let k=Bi[M]?.definition?.tableClass;if(k){if(y.name||(y={name:y}),!k.prototype.allowRead.call(null,p,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else N.select=b.filter(D=>D.read&&!Bi[D.attribute_name]).map(D=>D.attribute_name);return N}else return!0}}allowUpdate(p,N){let I=Cd(p);if(I?.update){let b=I.attribute_permissions;if(b?.length>0){let O=xg(b,"update");for(let D in N)if(!O[D])return!1;for(let D of b){let y=D.attribute_name;!D.update&&!(y in N)&&(N[y]=this.getProperty(y))}}return!0}}allowCreate(p,N){if(this[In]){let I=Cd(p);if(I?.insert){let b=I.attribute_permissions;if(b?.length>0){let O=xg(b,"insert");for(let D in N)if(!O[D])return!1}else return!0}}else return this.allowUpdate(p,{})}allowDelete(p){return Cd(p)?.delete}update(p,N){if(!Yn(this[be]))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let b;return typeof p=="object"&&p&&(N?(Object.isFrozen(p)&&(p=Object.assign({},p)),this[fe]={},this[Dt]=p):(b=this[Dt],b&&(p=Object.assign(b,p)),this[Dt]=b=p)),this._writeUpdate(this[Dt],N),this}addTo(p,N){if(typeof N=="number")this[vu]===PM?this.set(p,(+this.getProperty(p)||0)+N):(this[vu]||this.update(),this.set(p,new of(N)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,N){if(typeof N=="number")return this.addTo(p,-N);throw new Error("Can not subtract a non-numeric value")}invalidate(p){let N=this[be],I=this[Ue];Il(I),Yn(this[be]).addWrite({key:I,store:i,invalidated:!0,entry:this[an],nodeName:this[be]?.nodeName,before:Me.invalidate?.bind(this,N,I),beforeIntermediate:qe.invalidate?.bind(this,N,I),commit:(O,D)=>{if(D?.version>O)return;let y=null;for(let M in r)y||(y={}),y[M]=this.getProperty(M);R(I,y,this[an],O,Bu,h,this[be],0,"invalidate")}})}static evict(p,N,I){let b=this.Source,O;if(!((P||h)&&(!N||(O=i.getEntry(p),!O||!N)||O.version!==I))){if(P){if(i.hasLock(p,O.version))return;let D;for(let y in r)D||(D={}),D[y]=N[y];if(D)return R(p,D,O,I,Hu,null,null,0,null,!0)}return i.ifVersion(p,I,()=>{wd(p,N,null)}),h?R(p,null,O,I,Hu,null,null,0,null,!0):i.remove(p,I)}}lock(){throw new Error("Not yet implemented")}static operation(p,N){return p.table||=s,p.schema||=c,qM.operation(p,N)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,N,I){let b=this[be],O=Yn(b),D=this[Ue];Il(D);let y=this[an];this[vu]=N?PM:c5;let M={key:D,store:i,entry:y,nodeName:b?.nodeName,validate:k=>{p||(p=this[Dt]),N||p&&nf(p)?b?.source||(O.checkOverloaded(),this.validate(p,!N),H&&(p[H.name]=H.type==="Date"?new Date(k):H.type==="String"?new Date(k).toISOString():k),N&&(t&&p[t]!==D&&(p[t]=D),F&&(y?.value?p[F.name]=y?.value[F.name]:p[F.name]=F.type==="Date"?new Date(k):F.type==="String"?new Date(k).toISOString():k),p=Fo(p))):O.removeWrite(M)},before:N?Me.put?()=>Me.put(b,D,p):null:Me.patch?()=>Me.patch(b,D,p):Me.put?()=>Me.put(b,D,Fo(this)):null,beforeIntermediate:N?qe.put?()=>qe.put(b,D,p):null:qe.patch?()=>qe.patch(b,D,p):qe.put?()=>qe.put(b,D,Fo(this)):null,commit:(k,L,B)=>{if(B){if(b&&L?.version>(b.lastModified||0)&&(b.lastModified=L.version),this[an]=L,L?.value?.[fe])throw new Error("Can not assign a record to a record, check for circular references");N||(this[fe]=L?.value??null)}this[Dt]=p,this[Gu]=k;let $=L?.value,ce=p;if(this[vu]=0,L?.version>=k)if(h){let le=L.localTime,ke=L.version;for(;ce&&(le>k||ke>=k&&le>0);){let ne=l.get(le),Z=xt(ne);if(ke=Z.version,ke>k){if(Z.type==="patch"){let Oe=Z.getValue(i);ce=tf(ce,Oe)}else if(Z.type==="put"||Z.type==="delete")return}else if(ke===k)return;le=Z.previousLocalTime}}else{if(N)return;ce=tf(ce,$)}let ye;if(N?ye=ce:(this[fe]=$,ye=N?ce:Fo(this,ce)),this[fe]=ye,ye?.[fe])throw new Error("Can not assign a record to a record, check for circular references");let te;N||(te=p),wd(D,$,ye);let Be=N?"put":"patch";R(D,ye,L,k,0,h,b,b.expiresAt||(f?f+Date.now():0),Be,!1,te)}};O.addWrite(M)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[In]){for await(let N of this.search(p))(await Xe.getResource(N[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[fe]?this._writeDelete(p):!1}_writeDelete(p){let N=Yn(this[be]),I=this[Ue];Il(I);let b=this[be];return N.addWrite({key:I,store:i,resource:this,nodeName:b?.nodeName,before:Me.delete?.bind(this,b,I),beforeIntermediate:qe.delete?.bind(this,b,I),commit:(O,D,y)=>{let M=D?.value;y&&(b&&D?.version>(b.lastModified||0)&&(b.lastModified=D.version),RE(this,D)),!(D?.version>O)&&(wd(this[Ue],M),nt.trace("Write delete entry",I,O),h||m?(R(I,null,this[an],O,0,h,this[be],0,"delete"),h||Mm()):i.remove(this[Ue]))}}),!0}search(p){let N=this[be],I=Yn(N);if(!p)throw new Error("No query provided");let b=p.conditions;b?b.length===void 0&&(b=b[Symbol.iterator]?Array.from(b):[b]):b=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[Ue]&&(b=[{attribute:null,comparator:"prefix",value:this[Ue]}].concat(b));let O,D={};function y(Z,Oe){let Ge;switch(Oe){case"and":case void 0:if(Z.length<1)throw new Error('An "and" operator requires at least one condition');Ge=!0;break;case"or":if(Z.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Oe)}let gs=Ge&&{},Hi;for(let je of Z){if(je.conditions){je.conditions=y(je.conditions,je.operator);continue}let Wt=je[0]??je.attribute,On=Wt==null?v:ti(S,Wt);if(On){if(Ge){let Rs=jn(Wt),Qt=gs[Rs];Qt?(Qt.push(je),Hi=!0):gs[Rs]=[je]}(On.type||TS[je.comparator])&&(je[1]===void 0?je.value=k(je.value,On):je[1]=k(je[1],On))}else if(Wt!=null)throw(0,Pn.handleHDBError)(new Error,`${Wt} is not a defined attribute`,404)}if(p.enforceExecutionOrder)return Z;if(Hi)for(let je in gs){let Wt=gs[je],On=Wt.length;if(On>1)for(let Rs=0;Rs<On;Rs++){let Qt=Wt[Rs];if(Qt.comparator==="ge"||Qt.comparator==="greater_than_equal")for(let qi=0;qi<On;qi++){let za=Wt[qi];(za.comparator==="le"||za.comparator==="less_than_equal")&&(Qt.comparator="between",Qt.value=[Qt.value,za.value],Z.splice(Z.indexOf(za),1))}if(Qt.comparator==="equals"||!Qt.comparator){for(let qi=0;qi<On;qi++)if(qi!==Rs){let za=Wt[qi];Z.splice(Z.indexOf(za),1)}break}}}return Z}a(y,"prepareConditions");function M(Z,Oe){if(p.enforceExecutionOrder)return Z;for(let Ge of Z)Ge.conditions&&(Ge.conditions=M(Ge.conditions,Ge.operator));return Z.length>1&&Oe!=="or"?(0,HM.sortBy)(Z,df(Xe)):Z}a(M,"orderConditions");function k(Z,Oe){return Array.isArray(Z)?Z.map(Ge=>gE(Ge,Oe)):gE(Z,Oe)}a(k,"coerceTypedValues");let L=p.operator;(b.length>0||L)&&(b=y(b,L));let B=typeof p.sort=="object"&&p.sort,$;if(B&&L!=="or"){let Z=B.attribute;if(O=b.find(Oe=>jn(Oe.attribute)===jn(Z)),!O){if(!ti(S,Z))throw(0,Pn.handleHDBError)(new Error,`${Array.isArray(Z)?Z.join("."):Z} is not a defined attribute`,404);O={attribute:Z,comparator:"sort"},b.push(O)}O.descending=!!B.descending}b=M(b,L),B&&(b[0]===O?B.next&&($={dbOrderedAttribute:B.attribute,attribute:B.next.attribute,descending:B.next.descending,next:B.next.next}):(O&&b.splice(b.indexOf(O),1),$=B));let ce=p.select;if(b.length===0&&(b=[{attribute:t,comparator:"greater_than",value:!0}]),p.explain)return{conditions:b,operator:L,postOrdering:$,selectApplied:!!ce};let ye=I.useReadTxn(),te=gS(b,L,Xe,ye,p,N,(Z,Oe)=>Qb(Z,ce,N,ye,Oe),D),Be=p.ensureLoaded!==!1;$||(te=ne(te));let le=Xe.transformEntryForSelect(ce,N,ye,D,Be,!0),ke=Xe.transformToOrderedSelect(te,ce,$,ye,N,le);function ne(Z){return p.offset||p.limit!==void 0?Z.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0):Z}return a(ne,"applyOffset"),$&&(ke=ne(ke)),ke.onDone=()=>{ke.onDone=null,I.doneReadTxn()},ke.selectApplied=!0,ke.getColumns=()=>{if(ce){let Z=[];for(let Oe of ce)Oe==="*"?Z.push(...S.map(Ge=>Ge.name)):Z.push(Oe.name||Oe);return Z}return S.map(Z=>Z.name)},ke}static transformToOrderedSelect(p,N,I,b,O,D){let y=new uV;if(I){p=Qb(p,N,b,O,null);let M;y.iterate=function(){let L,B=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),$,ce=I.dbOrderedAttribute,ye,te,Be=!0;function le(ne){let Z=ne.next&&le(ne.next),Oe=ne.descending;return(Ge,gs)=>{let Hi=Pm(Ge,ne.attribute,b),je=Pm(gs,ne.attribute,b),Wt=Oe?(0,ua.compareKeys)(je,Hi):(0,ua.compareKeys)(Hi,je);return Wt===0?Z?.(Ge,gs)||0:Wt}}a(le,"createComparator");let ke=le(I);return{async next(){let ne;if(L)if(ne=L.next(),ne.done){if($)return y.onDone&&y.onDone(),ne}else return{value:await D.call(this,ne.value)};M=[],ye&&M.push(ye);do if(ne=await B.next(),ne.done){if($=!0,M.length)break;return y.onDone&&y.onDone(),ne}else{let Z=ne.value;if(Z?.then&&(Z=await Z),ce){let Oe=Pm(Z,ce,b);if(Be)Be=!1,te=Oe;else if(Oe!==te){te=Oe,ye=Z;break}}M.push(Z)}while(!0);return I.isGrouped,M.sort(ke),L=M[Symbol.iterator](),ne=L.next(),ne.done?(y.onDone&&y.onDone(),ne):{value:await D.call(this,ne.value)}},return(){y.onDone&&y.onDone(),B.return()},throw(){y.onDone&&y.onDone(),B.throw()}}};let k=a(L=>{if(typeof N=="object"&&Array.isArray(L.attribute))for(let B=0;B<N.length;B++){let $=N[B],ce;if($.name===L.attribute[0]){for(ce=$.sort||($.sort={});ce.next;)ce=ce.next;ce.attribute=L.attribute.slice(1),ce.descending=L.descending}else $===L.attribute[0]&&(N[B]=ce={name:$,sort:{attribute:L.attribute.slice(1),descending:L.descending}})}L.next&&k(L.next)},"applySortingOnSelect");k(I)}else y.iterate=(p[Symbol.asyncIterator]||p[Symbol.iterator]).bind(p),y=y.map(D);return y}static transformEntryForSelect(p,N,I,b,O,D){if(p&&(p===t||p?.length===1&&p[0]===t)){let L=a(B=>B?.key??B,"transform");return p===t?L:p.asArray?B=>[L(B)]:B=>({[t]:L(B)})}let y;O&&P&&!p?.every(L=>{let B;return typeof L=="object"?B=L.name:B=L,r[B]||B===t})&&(y=!0);let M,k=a(function(L){let B;if(L!=null){if(Cm=L,B=L.value||L.deref?.(),!B&&(L.key===void 0||L.deref)){if(L=Lm(L.key??L,N,{transaction:I,lazy:p?.length<4},this.isSync,$=>$),L?.then)return L.then(k.bind(this));B=L?.value}if(y&&(L.metadataFlags&(Bu|Hu)||L.expiresAt&&L.expiresAt<Date.now())){let $=Dm(L.key??L,L,N);if($?.then)return $.then(k)}}if(B==null)return D?ca.SKIP:B;if(p&&!(p[0]==="*"&&p.length===1)){let $,ce=a((te,Be)=>{let le;typeof te=="object"?le=te.name:le=te;let ke=Bi?.[le],ne;if(ke){let Z=b?.[le];if(Z)if(Z.hasMappings){let Ge=ke.from?B[ke.from]:jn(L.key);ne=Z.get(Ge),ne||(ne=[])}else ne=Z.fromRecord?.(B);else ne=ke(B,N,L);let Oe=a(Ge=>{if(Ge&&typeof Ge=="object"){let gs=ke.definition?.tableClass||Xe;M||(M={});let Hi=M[le]||(M[le]=gs.transformEntryForSelect(le===te?null:te.select||(Array.isArray(te)?te:null),N,I,Z,O));if(Array.isArray(Ge)){let je=[],Wt=gs.transformToOrderedSelect(Ge,te.select,typeof te.sort=="object"&&te.sort,N,I,Hi)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),On=a(Qt=>{for(;!Qt.done;){if(Qt?.then)return Qt.then(On);je.push(Qt.value),Qt=Wt.next()}Be(je,le)},"nextValue"),Rs=On(Wt.next());Rs&&($||($=[]),$.push(Rs));return}else if(Ge=Hi.call(this,Ge),Ge?.then){$||($=[]),$.push(Ge.then(je=>Be(je,le)));return}}Be(Ge,le)},"handleResolvedValue");ne?.then?($||($=[]),$.push(ne.then(Oe))):Oe(ne);return}else ne=B[le],ne&&typeof ne=="object"&&le!==te&&(ne=Xe.transformEntryForSelect(te.select||te,N,I,null)({value:ne}));Be(ne,le)},"selectAttribute"),ye;if(typeof p=="string")ce(p,te=>{ye=te});else if(Array.isArray(p))if(p.asArray)ye=[],p.forEach((te,Be)=>{te==="*"?p[Be]=B:ce(te,le=>ye[Be]=le)});else{ye={};let te=p.forceNulls;for(let Be of p)if(Be==="*")for(let le in B)ye[le]=B[le];else ce(Be,(le,ke)=>{le===void 0&&te&&(le=null),ye[ke]=le})}else throw new Pn.ClientError("Invalid select"+p);return $?Promise.all($).then(()=>ye):ye}return B},"transform");return k}async subscribe(p){if(!l)throw new Error("Can not subscribe to a table without an audit log");h||ft({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),p||(p={});let N=!p.rawEvents,I=FI(Xe,this[Ue]??null,function(y,M,k,L){try{let B=M.getValue?.(i,N);if(!B&&M.type==="patch"&&N){let $=i.getEntry(y);$?.version===M.version?B=$.value:B=M.getValue?.(i,!0,k),M.type="put"}this.send({id:y,timestamp:k,value:B,version:M.version,type:M.type,beginTxn:L})}catch(B){nt.error(B)}},p.startTime||0,this[In]);this[In]&&(I.includeDescendants=!0,p.onlyChildren&&(I.onlyChildren=!0)),p.crossThreads===!1&&(I.crossThreads=!1),p.supportsTransactions&&(I.supportsTransactions=!0);let b=this[Ue],O=p.previousCount;O>1e3&&(O=1e3);let D=p.startTime;if(this[In]){if(D){if(O)throw new Pn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:M}of l.getRange({start:D,exclusiveStart:!0})){let k=xt(M);if(k.tableId!==n)continue;let L=k.recordId;if(b==null||vM(b,L)){let B=k.getValue(i,N,y);I.send({id:L,timestamp:y,value:B,version:k.version,type:k.type})}I.startTime=y}}else if(O){let y=[];for(let{key:M,value:k}of l.getRange({start:"z",end:!1,reverse:!0}))try{let L=xt(k);if(L.tableId!==n)continue;let B=L.recordId;if(b==null||vM(b,B)){let $=L.getValue(i,N,M);if(y.push({id:B,timestamp:M,value:$,version:L.version,type:L.type}),--O<=0)break}}catch(L){nt.error("Error getting history entry",M,L)}for(let M=y.length;M>0;)I.send(y[--M]);y[0]&&(I.startTime=y[0].timestamp)}else if(!p.omitCurrent)for(let{key:y,value:M,version:k,localTime:L}of i.getRange({start:b??!1,end:b==null?void 0:[b,ua.MAXIMUM_KEY],versions:!0}))M&&I.send({id:y,timestamp:L,value:M,version:k,type:"put"})}else{O&&!D&&(D=0);let y=this[an]?.localTime;if(y===iS&&(i.cache?.delete(b),this[an]=i.getEntry(b),nt.trace("re-retrieved record",y,this[an]?.localTime),y=this[an]?.localTime),nt.trace("Subscription from",D,"from",b,y),D<y){let M=[],k=y;do{let L=l.get(k);if(L){p.omitCurrent=!0;let B=xt(L),$=B.getValue(i,N,k);N&&(B.type="put"),M.push({id:b,value:$,timestamp:k,...B}),k=B.previousLocalTime}else break;O&&O--}while(k>D&&O!==0);for(let L=M.length;L>0;)I.send(M[--L]);I.startTime=y}!p.omitCurrent&&this.doesExist()&&I.send({id:b,timestamp:y,value:this,version:this[Gu],type:"put"})}return p.listener&&I.on("data",p.listener),I}doesExist(){return!!(this[fe]||this[vu])}publish(p,N){this._writePublish(p,N)}_writePublish(p,N){let I=Yn(this[be]),b=this[Ue]||null;Il(b);let O=this[be];I.addWrite({key:b,store:i,entry:this[an],nodeName:O?.nodeName,validate:()=>{O?.source||(I.checkOverloaded(),this.validate(p))},before:Me.publish?.bind(this,O,b,p),beforeIntermediate:qe.publish?.bind(this,O,b,p),commit:(D,y,M)=>{y===void 0&&m&&!h&&Mm(),R(b,y?.value??null,y,y?.version||D,0,!0,O,y?.expiresAt,"message",!1,p)}})}validate(p,N){let I,b=a((O,D,y)=>{if(D.type&&O!=null)if(N&&O.__op__&&(O=O.value),D.properties){typeof O!="object"&&(I||(I=[])).push(`Value ${os(O)} in property ${y} must be an object${D.type?" ("+D.type+")":""}`);let M=D.properties;for(let k=0,L=M.length;k<L;k++){let B=M[k],$=b(O[B.name],B,y+"."+B.name);$&&(O[B.name]=$)}if(D.sealed&&O!=null&&typeof O=="object")for(let k in O)M.find(L=>L.name===k)||(I||(I=[])).push(`Property ${k} is not allowed within object in property ${y}`)}else switch(D.type){case"Int":(typeof O!="number"||O>>0!==O)&&(I||(I=[])).push(`Value ${os(O)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(I||(I=[])).push(`Value ${os(O)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(M=>typeof M=="string")||(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a string`);break;case"Boolean":typeof O!="boolean"&&(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a bigint`)}break;case"Bytes":O instanceof Uint8Array||(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(O)){if(D.elements)for(let M=0,k=O.length;M<k;M++){let L=O[M],B=b(L,D.elements,y+"[*]");B&&(O[M]=B)}}else(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a Buffer or Uint8Array`);break}D.nullable===!1&&O==null&&(I||(I=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let O=0,D=S.length;O<D;O++){let y=S[O];if(!y.relationship&&(!N||y.name in p)){let M=b(p[y.name],y,y.name);M&&(p[y.name]=M)}}if(d)for(let O in p)S.find(D=>D.name===O)||(I||(I=[])).push(`Property ${O} is not allowed`);if(I)throw new Pn.ClientError(I.join(". "))}getUpdatedTime(){return this[Gu]}wasLoadedFromSource(){return P?!!this[Gg]:void 0}static async addAttributes(p){let N=S.slice(0);for(let I of p){if(!I.name)throw new Pn.ClientError("Attribute name is required");if(I.name.match(/[`/]/))throw new Pn.ClientError("Attribute names cannot include backticks or forward slashes");N.push(I)}return ft({table:s,database:c,schemaDefined:_,attributes:N}),Xe.indexingOperation}static async removeAttributes(p){let N=S.filter(I=>!p.includes(I.name));return ft({table:s,database:c,schemaDefined:_,attributes:N}),Xe.indexingOperation}static getRecordCount(p){let N=i.getStats().entryCount,I=5e3,b=1e3,O;N>I&&!p?.exactCount&&(O=b);let D=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:O}))y!=null&&D++;if(O){let y=D;D=0;for(let{value:Be}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:O}))Be!=null&&D++;let M=O*2,k=(D+y)/M,L=Math.pow((D-y+1)/O/2,2)+k*(1-k)/M,B=Math.max(Math.sqrt(L)*N,1),$=Math.round(k*N),ce=Math.max($-1.96*B,0),ye=Math.min($+1.96*B,N),te=Math.pow(10,Math.round(Math.log10(B)));return te>$&&(te=te/10),D=Math.round($/te)*te,{recordCount:D,estimatedRange:[Math.round(ce),Math.round(ye)]}}return{recordCount:D}}static updatedAttributes(){Bi=this.propertyResolvers={$id:(p,N,I)=>({value:I.key}),$updatedtime:(p,N,I)=>I.version,$record:(p,N,I)=>I?{value:p}:p};for(let p of this.attributes){p.resolve=null;let N=p.relationship;if(N)if(p.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),Wb=!0,N.to)p.elements?.definition?(Bi[p.name]=p.resolve=(I,b,O)=>{let D=I[N.from?N.from:t],y=p.elements.definition.tableClass;return O?oc({attribute:N.to,value:D},Yn(b).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:N.to,value:D}],b).asArray},p.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},p.resolve.definition=p.elements.definition,N.from&&(p.resolve.from=N.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(N.from){let I=p.definition||p.elements?.definition;I?(Bi[p.name]=p.resolve=(b,O,D)=>{let y=b[N.from];if(y!==void 0){if(p.elements){let M,k=y.map(L=>{let B=D?I.tableClass.primaryStore.getEntry(L,{transaction:Yn(O).getReadTxn()}):I.tableClass.get(L,O);return B?.then&&(M=!0),B});return N.filterMissing?M?Promise.all(k).then(L=>L.filter(BM)):k.filter(BM):M?Promise.all(k):k}return D?I.tableClass.primaryStore.getEntry(y,{transaction:Yn(O).getReadTxn()}):I.tableClass.get(y,O)}},p.set=(b,O)=>{if(Array.isArray(O)){let D=O.map(y=>y[Ue]||y[I.tableClass.primaryKey]);b[N.from]=D}else{let D=O[Ue]||O[I.tableClass.primaryKey];b[N.from]=D}},p.resolve.definition=p.definition||p.elements?.definition,p.resolve.from=N.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`)}af(this,this)}static async deleteHistory(p=0){let N;for(let{key:I,value:b}of l.getRange({start:0,end:p}))await qu(),xt(b).tableId===n&&(N=l.remove(I));await N}static async*getHistory(p=0,N=1/0){for(let{key:I,value:b}of l.getRange({start:p,end:N})){await qu();let O=xt(b);O.tableId===n&&(yield{id:O.recordId,localTime:I,version:O.version,type:O.type,value:O.getValue(i,!0,I),user:O.user})}}static async getHistoryOfRecord(p){let N=[];if(p==null)throw new Error("An id is required");let I=i.getEntry(p);if(!I)return N;let b=I.localTime;if(!b)throw new Error("The entry does not have a local audit time");let O=0;do{await qu();let D=l.get(b);if(D){let y=xt(D);N.push({id:y.recordId,localTime:b,version:y.version,type:y.type,value:y.getValue(i,!0,b),user:y.user}),b=y.previousLocalTime}else break}while(O<1e3&&b);return N.reverse()}static cleanup(){z?.remove()}}Xe.updatedAttributes();let fV=Xe.prototype;return fV[a5]=!0,f&&Xe.setTTLExpiration(f/1e3),j&&EV(),Xe;function wd(W,p,N){let I;for(let b in r){let O=r[b],D=O.isIndexing,y=N?.[b],M=p?.[b];if(y===M&&!D)continue;I=!0;let k=O.indexNulls,L=(0,xu.getIndexedValues)(M,k);if(L){DM&&O.prefetch(L.map(B=>({key:B,value:W})),UM);for(let B=0,$=L.length;B<$;B++)O.remove(L[B],W)}if(L=(0,xu.getIndexedValues)(y,k),L){DM&&O.prefetch(L.map(B=>({key:B,value:W})),UM);for(let B=0,$=L.length;B<$;B++)O.put(L[B],W)}}return I}a(wd,"updateIndices");function Il(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>MM)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)return!0;break;case"bigint":if(W<2n**64n&&W>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,ua.writeKey)(W,l5,0)>MM)throw new Error("Primary key size is too large: "+W.length);return!0}a(Il,"checkValidId");function Lm(W,p,N,I,b){let O=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),N.transaction?.isDone)return b(null,W);let D=i.getEntry(W,N);return D&&p&&(D?.version>(p.lastModified||0)&&(p.lastModified=D.version),D?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=D.localTime)),b(D,W)},"whenPrefetched");return I?O():ue>0?(ue--,O()):new Promise((D,y)=>{ue===0?(ue--,i.prefetch([W],()=>{M(),k()})):(J.push(W),Ae.push(k),J.length>dV&&(ue--,M()));function M(){if(J.length>0){let L=Ae;i.prefetch(J,()=>{ue===-1?M():ue++;for(let B of L)B()}),J=[],Ae=[],Ee>2&&Ee--}else ue=Ee,Ee<_V&&Ee++}a(M,"prefetch");function k(){try{D(O())}catch(L){y(L)}}a(k,"load")})}a(Lm,"loadLocalRecord");function Cd(W){if(!W?.role)return;let p=W.role.permission;if(p.super_user)return u5;let N=p[c],I,b=N?.tables;if(b)return b[s];if(c==="data"&&(I=p[s])&&!I.tables)return I}a(Cd,"getTablePermissions");function Dm(W,p,N,I){if(P){let b;if(N.noCache?b=!0:(p?(!p.value||p.metadataFlags&(Bu|Hu)||p.expiresAt&&p.expiresAt<Date.now())&&(b=!0):b=!0,Dn(!b,"cache-hit",s)),b){let O=jb(W,p,N).then(D=>(D?.value?.[fe]&&nt.error("Can not assign a record with a record property"),N&&(D?.version>(N.lastModified||0)&&(N.lastModified=D.version),N.lastRefreshed=Date.now()),D));if(N?.onlyIfCached||p?.value&&I?.allowStaleWhileRevalidate?.(p,W)){if(O.catch(D=>nt.warn(D)),N?.onlyIfCached&&!I.doesExist())throw new Pn.ServerError("Entry is not cached",504);return}else return O}}}a(Dm,"ensureLoadedFromSource");function Yn(W){let p=W?.transaction;if(p){if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let N=p.next;if(!N)return p=p.next=new ko,p.lmdbDb=i,p;p=N}while(!0)}else return new uf}a(Yn,"txnForContext");function Pm(W,p,N){if(!W)return;Cm=W;let I=W.value||W.deref?.()||(Cm=i.getEntry(W.key))?.value;if(typeof p=="object"){let O=Bi,D=I;for(let y=0,M=p.length;y<M;y++){let k=p[y],L=O?.[k];D=L&&D?L(D,N,!0)?.value:D?.[k],O=L?.definition?.tableClass?.propertyResolvers}return D}let b=Bi[p];return b?b(I,N):I[p]}a(Pm,"getAttributeValue");function Qb(W,p,N,I,b){let O=b?.length,D={transaction:I,lazy:O>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},y;function M(k,L){let B=k?.value;if(!B)return ca.SKIP;for(let $=0;$<O;$++)if(!y?.includes($)&&!b[$](B,k))return ca.SKIP;return L!==void 0&&(k.key=L),k}if(a(M,"processEntry"),O>0||!W.hasEntries){let k=W.map(L=>{if(y=null,typeof L=="object"&&L.key!==void 0)return O>0?M(L):L;if(L==null)return ca.SKIP;for(let B=0;B<O;B++){let ce=b[B].idFilter;if(ce){if(!ce(L))return ca.SKIP;y||(y=[]),y.push(B)}}return Lm(L,N,D,!1,M)});return Array.isArray(W)&&(k=k.filter(L=>L!==ca.SKIP)),k.hasEntries=!0,k}return W}a(Qb,"transformToEntries");async function jb(W,p,N){let I=p?.metadataFlags,b=p?.version,O,D;if(!i.attemptLock(W,b,()=>{clearTimeout(D);let L=i.getEntry(W);!L||!L.value||L.metadataFlags&(Bu|Hu)?O(jb(W,i.getEntry(W),N)):O(L)}))return new Promise(L=>{O=L,D=setTimeout(()=>{i.unlock(W,b)},o5)});let y=p?.value,M={requestContext:N,replacingRecord:y,replacingVersion:b,source:null,resourceCache:N?.resourceCache},k=N?.responseHeaders;return new Promise((L,B)=>{let $;Fg(Ze(M,async ce=>{let ye=performance.now(),te,Be,le;try{for(let Oe of Xe.sources)if(Oe.get&&(!Oe.get.reliesOnPrototype||Oe.prototype.get)&&(M.source=Oe,te=await Oe.get(W,M),te))break;le=I&Bu;let ne=M.lastModified||le&&b;Be=le||ne>b||!y,ne||(ne=(0,xu.getNextMonotonicTime)());let Z=performance.now()-ye;if(on(Z,"cache-resolution",s),k&&qg(k,"Server-Timing",`cache-resolve;dur=${Z.toFixed(2)}`,!0),ce.timestamp=ne,f&&!M.expiresAt&&(M.expiresAt=Date.now()+f),te){if(typeof te!="object")throw new Error("Only objects can be cached and stored in tables");typeof te.toJSON=="function"&&(te=te.toJSON()),t&&te[t]!==W&&(te[t]=W)}$=!0,L({version:ne,value:te})}catch(ne){ne.message+=` while resolving record ${W} for ${s}`,y&&((ne.code==="ECONNRESET"||ne.code==="ECONNREFUSED"||ne.code==="EAI_AGAIN")&&!N?.mustRevalidate||N?.staleIfError&&(ne.statusCode===500||ne.statusCode===502||ne.statusCode===503||ne.statusCode===504))?(L({version:b,value:y}),nt.trace(ne.message,"(returned stale record)")):B(ne),M.transaction.abort();return}if(N?.noCacheStore){M.transaction.abort();return}Yn(M).addWrite({key:W,store:i,entry:p,nodeName:"source",commit:(ne,Z)=>{if(Z?.version!==b)return;let Oe=wd(W,y,te);te?(qe.put?.(M,W,te),R(W,te,Z,ne,0,h&&Be||null,M,M.expiresAt,"put",!!le)):(qe.delete?.(M,W),h||m?R(W,null,Z,ne,0,h&&Be||null,M,0,"delete",!!le):i.remove(W,b))}})}),()=>{i.unlock(W,b)},ce=>{i.unlock(W,b),$&&nt.error("Error committing cache update",ce)})})}a(jb,"getFromSource");function Mm(){if(Gt!==yd&&(yd=Gt,(0,la.getWorkerIndex)()===(0,la.getWorkerCount)()-1)){if(Id&&clearTimeout(Id),!Gt)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let p=Math.ceil((Date.now()-W.getTime())/Gt)*Gt+W.getTime(),N=a(I=>{nt.trace(`Scheduled next cleanup scan at ${new Date(I)}ms`),Id=setTimeout(()=>U=U.then(async()=>{if(N(Math.max(I+Gt,Date.now())),i.rootStore.status!=="open"){clearTimeout(Id);return}let b=50,O=new Array(b),D=0;nt.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:M,value:k,version:L,expiresAt:B}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let $;k===null&&!h&&L+i5<Date.now()?$=i.remove(M,L):B&&B+E<Date.now()&&($=Xe.evict(M,k,L),y++),$&&(await O[D],O[D]=$.catch(ce=>{nt.error("Cleanup error",ce)}),++D>=b&&(D=0)),await qu()}nt.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){nt.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");N(p)}}a(Mm,"scheduleCleanup");function zb(){z=l?.addDeleteRemovalCallback(n,W=>{let p=i.getEntry(W);p?.value===null&&i.remove(W,p.version)})}a(zb,"addDeleteRemoval");function EV(){(0,la.getWorkerIndex)()===0&&setInterval(async()=>{try{let W=j.name,p=r[W];if(!p)throw new Error(`expiresAt attribute ${j} must be indexed`);for(let{key:N,value:I}of p.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let b=i.getEntry(I);b?.value?b.value[W]<Date.now()&&Xe.evict(I,b.value,b.version):i.ifVersion(I,b?.version,()=>p.remove(N,I)),await qu()}}catch(W){nt.error("Error in evicting old records",W)}},s5).unref()}a(EV,"runRecordExpirationEviction")}function xg(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 UM(){}function _5(e){qM=e}function gE(e,t){let r=t?.type;return e===null?e:e===""&&r&&r!=="String"&&r!=="Any"?null:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Boolean"?e==="true"?!0:e==="false"?!1:e:r==="Date"?(typeof e!="number"&&!d5.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,AE.autoCast)(e):e}function vM(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function Fg(e,t,r){return e?.then?e.then(t,r):t(e)}function RE(e,t){e[an]=t,e[fe]=t?.value??null,e[Gu]=t?.version}function BM(e){return e!=null}function os(e){try{return JSON.stringify(e)}catch{return e}}var as,ca,xu,HM,$u,Pn,Fu,ku,nt,ua,la,AE,n5,qM,s5,i5,DM,o5,Gu,a5,an,vu,PM,c5,Gg,yc,Bu,Hu,l5,MM,u5,Kge,d5,qu,NE=Ne(()=>{as=q(C()),ca=require("lmdb"),xu=q(Tr()),HM=require("lodash");Qn();mS();$u=q(X());VI();Pn=q(ie()),Fu=q(ii()),ku=q(Xn());ge();Ef();nt=q(x());lf();$o();ua=require("ordered-binary"),la=q(tt());Go();AE=q(K());tc();ui();Zd();Uu();n5=new Uint8Array(9);n5[8]=192;s5=6e4,i5=864e5;$u.initSync();DM=$u.get(as.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),o5=1e4,Gu=Symbol.for("version"),a5=Symbol.for("incremental-update"),an=Symbol("entry"),vu=Symbol("is-saving"),PM=1,c5=2,Gg=Symbol("loaded-from-source"),yc={isNotification:!0,ensureLoaded:!1},Bu=1,Hu=8,l5=Buffer.allocUnsafeSlow(8192),MM=1978,u5={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},Kge=(0,AE.convertToMS)($u.get(as.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(OE,"makeTable");a(xg,"attributesAsObject");a(UM,"noop");a(_5,"setServerUtilities");d5=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(gE,"coerceType");a(vM,"isDescendantId");qu=a(()=>new Promise(setImmediate),"rest");a(Fg,"when");a(RE,"updateResource");a(BM,"exists");a(os,"stringify")});var Fe={};$e(Fe,{database:()=>Tu,databases:()=>ot,dropDatabase:()=>jT,dropTableMeta:()=>S5,getDatabases:()=>ts,getTables:()=>f5,onUpdatedTable:()=>Wg,readMetaDb:()=>Vu,resetDatabases:()=>E5,table:()=>ft,tables:()=>ln});function f5(){return CE||ts(),ln||{}}function ts(){if(CE)return ot;CE=!0,Cc=new Map;let e=(0,or.getHdbBasePath)()&&(0,st.join)((0,or.getHdbBasePath)(),un.DATABASES_DIR_NAME),t=(0,or.get)(un.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,or.get)(un.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,cn.existsSync)(e)?e:(0,st.join)((0,or.getHdbBasePath)(),un.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,cn.existsSync)(e))for(let r of(0,cn.readdirSync)(e,{withFileTypes:!0})){let n=(0,st.basename)(r.name,".mdb");r.isFile()&&(0,st.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Vu((0,st.join)(e,r.name),null,n)}if((0,cn.existsSync)((0,wc.getBaseSchemaPath)())){for(let r of(0,cn.readdirSync)((0,wc.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,st.join)((0,wc.getBaseSchemaPath)(),r.name),s=(0,st.join)((0,wc.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,cn.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,st.extname)(i.name).toLowerCase()===".mdb"){let o=(0,st.join)(s,i.name);Vu((0,st.join)(n,i.name),(0,st.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,cn.existsSync)(s))for(let o of(0,cn.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,st.extname)(o.name).toLowerCase()===".mdb"&&Vu((0,st.join)(s,o.name),(0,st.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,st.join)(c.path,(0,st.basename)(o+".mdb"));(0,cn.existsSync)(l)&&Vu(l,o,r,null,!0)}}for(let r in ot){let n=Cc.get(r);if(n){let s=ot[r];r.includes("delete")&&Mn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Mn.trace(`delete table class ${i}`),delete s[i])}else if(delete ot[r],r==="data"){for(let s in ln)delete ln[s];delete ln[LE]}}return Cc=null,ot}}function E5(){CE=!1;for(let[,e]of no)e.needsDeletion=!0;ts();for(let[e,t]of no)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),no.delete(e));return ot}function Vu(e,t,r=Yg,n,s){let i=new $g.default(e,!1);try{let o=no.get(e);o?o.needsDeletion=!1:(o=(0,yE.open)(i),no.set(e,o));let c=new _a.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(bE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,cn.existsSync)(n)&&(i.path=n,_=(0,yE.open)(i),_.isLegacy=!0):_=Xd(o));let u=kM(r),d=u[LE],f=new Map;for(let{key:E,value:h}of l.getRange({start:!1})){let[m,S]=E.toString().split("/");S===""?S=h.name:S||(S=m,m=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(m);let R=f.get(m);R||f.set(m,R={attributes:[]}),(S==null||h.is_hash_attribute)&&(R.primary=h),S!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:m,primary:S}=h;if(!S){for(let J of m)if(J.is_hash_attribute||J.isPrimaryKey){S=J;break}if(!S){Mn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(m)}`);continue}}let R=u[E],g={},A=[],P,v,U=typeof S.audit=="boolean"?S.audit:(0,or.get)(un.CONFIG_PARAMS.LOGGING_AUDITLOG),F=S.trackDeletes,H=S.expiration,j=S.eviction,z=S.sealed;if(R)g=R.indices,A=R.attributes,R.schemaVersion++;else{P=S.tableId,P?P>=(l.get(Ic)||0)&&l.putSync(Ic,P+1):(S.tableId=P=l.get(Ic),P||(P=1),l.putSync(Ic,P+1),l.putSync(S.key,S));let J=new _a.default(!S.is_hash_attribute,S.is_hash_attribute);v=Qd(o.openDB(S.key,J)),v.rootStore=o,v.tableId=P}for(let J of m){J.attribute=J.name;try{if(!J.is_hash_attribute&&(J.indexed||J.attribute&&!J.name)){if(!g[J.name]){let ue=new _a.default(!J.is_hash_attribute,J.is_hash_attribute);g[J.name]=o.openDB(J.key,ue),g[J.name].indexNulls=J.indexNulls}let Ae=A.find(ue=>ue.name===J.name);Ae?A.splice(A.indexOf(Ae),1,J):A.push(J)}}catch(Ae){Mn.error("Error trying to update attribute",J,A,g,Ae)}}if(!R){R=$M(u,E,OE({primaryStore:v,auditStore:_,audit:U,sealed:z,expirationMS:H&&H*1e3,evictionMS:j&&j*1e3,trackDeletes:F,tableName:E,tableId:P,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:g,attributes:m,schemaDefined:S.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let J of Kg)J(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function kM(e){let t=ot[e];if(t||(e==="data"?t=ot[e]=ln:e==="system"?Object.defineProperty(ot,"system",{value:t=Object.create(null),configurable:!0}):t=ot[e]=Object.create(null)),Cc&&!Cc.has(e)){let r=new Set;t[LE]=r,Cc.set(e,r)}return t}function $M(e,t,r){return e[t]=r,r}function Tu({database:e,table:t}){e||(e=Yg),ts();let r=kM(e),n=(0,st.join)((0,or.getHdbBasePath)(),un.DATABASES_DIR_NAME),s=(0,or.get)(un.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,or.get)(un.CONFIG_PARAMS.STORAGE_PATH)||((0,cn.existsSync)(n)?n:(0,st.join)((0,or.getHdbBasePath)(),un.LEGACY_DATABASES_DIR_NAME));let o=(0,st.join)(n,(i?t:e)+".mdb"),c=no.get(o);if(!c){let l=new $g.default(o,!1);c=(0,yE.open)(l),no.set(o,c)}return c}async function jT(e){if(!ot[e])throw new Error("Schema does not exist");let t=ot[e];for(let r in t){let s=t[r].primaryStore.rootStore;no.delete(s.path),s.status==="open"&&(await s.close(),await GM.remove(s.path))}if(e==="data"){for(let r in ln)delete ln[r];delete ln[LE]}delete ot[e]}function ft({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:l,schemaDefined:_,origin:u}){t||(t=Yg);let d=Tu({database:t,table:e}),f=ot[t],E=f?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,m,S,R;_==null&&(_=!0);let g=new _a.default(!1);for(let H of i)H.attribute?(H.name=H.attribute,H.indexed=!0):H.attribute=H.name,H.expiresAt&&(H.indexed=!0);let A,P;if(E){if(h=E.primaryKey,E.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);E.attributes.splice(0,E.attributes.length,...i)}else{let H=d.auditStore;H||(H=Xd(d)),m=i.find(Ae=>Ae.isPrimaryKey)||{},h=m.name,m.is_hash_attribute=!0,m.schemaDefined=_,l&&(m.trackDeletes=!0),o=m.audit=typeof o=="boolean"?o:(0,or.get)(un.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]),Mn.trace(`${e} table loading, opening primary store`);let j=new _a.default(!1,!0),z=e+"/",J=Qd(d.openDB(z,j));J.rootStore=d,R=d.dbisDb=d.openDB(bE.INTERNAL_DBIS_NAME,g),J.tableId=R.get(Ic),J.tableId||(J.tableId=1),R.putSync(Ic,J.tableId+1),m.tableId=J.tableId,E=$M(f,e,OE({primaryStore:J,auditStore:H,audit:o,sealed:c,trackDeletes:l,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:J.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:R})),E.schemaVersion=1,A=!0,F(),R.put(z,m)}S=E.indices,R=R||(d.dbisDb=d.openDB(bE.INTERNAL_DBIS_NAME,g)),E.dbisDB=R;let v=[];for(let{key:H,value:j}of R.getRange({start:!0})){let[z,J]=H.toString().split("/");if(J===""&&(J=j.name),J){if(z!==e)continue}else J=z;if(!i.find(ue=>ue.name===J)?.indexed&&j.indexed&&!j.isPrimaryKey){F(),A=!0,R.remove(H);let ue=E.indices[z];ue&&v.push(ue)}}let U=[];try{for(let H of i||[]){if(H.relationship)continue;let j=e+"/"+(H.name||"");Object.defineProperty(H,"key",{value:j,configurable:!0});let z=R.get(j);if(H.isPrimaryKey){if(z=z||R.get(j=e+"/")||{},o!==E.audit||c!==c||(+r||void 0)!==(+z.expiration||void 0)||(+n||void 0)!==(+z.eviction||void 0)){let Ae=Object.assign({},z);typeof o=="boolean"&&(o&&E.enableAuditing(o),Ae.audit=o),r&&(Ae.expiration=+r),n&&(Ae.eviction=+n),c!==void 0&&(Ae.sealed=c),A=!0,F(),R.put(j,Ae)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let J=!z||z.type!==H.type||z.indexed!==H.indexed||z.nullable!==H.nullable||JSON.stringify(z.attributes)!==JSON.stringify(H.attributes)||JSON.stringify(z.elements)!==JSON.stringify(H.elements);if(H.indexed){let Ae=new _a.default(!0,!1),ue=d.openDB(j,Ae);(J||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Yu.workerData?.restartNumber)&&(A=!0,F(),z=R.get(j),(J||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Yu.workerData?.restartNumber)&&(A=!0,H.lastIndexedKey=z?.lastIndexedKey||!1,H.indexingPID=process.pid,ue.isIndexing=!0,Object.defineProperty(H,"dbi",{value:ue}),H.indexNulls===void 0&&(H.indexNulls=!0),U.push(H)),R.put(j,H)),z?.indexNulls&&H.indexNulls===void 0&&(H.indexNulls=!0),ue.indexNulls=H.indexNulls,S[H.name]=ue}else J&&(A=!0,F(),R.put(j,H))}}finally{P&&P()}if(A&&(E.schemaVersion++,E.updatedAttributes()),Mn.trace(`${e} table loading, running index`),U.length>0||v.length>0?E.indexingOperation=m5(E,U,v):A&&IE.signalSchemaChange(new wE.SchemaEventMsg(process.pid,"schema-change",E.databaseName,E.tableName)),E.origin=u,A)for(let H of Kg)H(E,u!=="cluster");return(r||n||s)&&E.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),Mn.trace(`${e} table loaded`),E;function F(){P||d.transactionSync(()=>({then(H){P=H}}))}a(F,"startTxn")}async function m5(e,t,r){try{let n=e.schemaVersion;await IE.signalSchemaChange(new wE.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let l of r)s=l.drop();let i,o=0,c=t.length;if(await new Promise(l=>setImmediate(l)),c>0){let l=0;for(let{key:_,value:u,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(u){if(l++,s=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,m=(0,xM.getIndexedValues)(u[h]);if(m)for(let S=0,R=m.length;S<R;S++)E.dbi.put(m[S],_)}}),s.then(()=>l--,f=>{l--,Mn.error(f)}),Yu.workerData&&Yu.workerData.restartNumber!==FM.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}l>h5?await s:l>p5&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await IE.signalSchemaChange(new wE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){Mn.error("Error in indexing",n)}}function S5({table:e,database:t}){let r=Tu({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 Wg(e){Kg.push(e)}var or,bE,yE,st,cn,wc,_a,$g,un,GM,Vg,xM,IE,wE,Yu,Mn,FM,Yg,LE,ln,ot,Ic,Kg,CE,no,Cc,h5,p5,ge=Ne(()=>{or=q(X()),bE=q(_t()),yE=require("lmdb"),st=require("path"),cn=require("fs"),wc=q(ze());NE();_a=q(Tf()),$g=q(Rf()),un=q(C()),GM=q(require("fs-extra")),Vg=require("../index"),xM=q(Tr()),IE=q(ii()),wE=q(Xn()),Yu=require("worker_threads"),Mn=q(x()),FM=q(tt());Go();tc();Yg="data",LE=Symbol("defined-tables");(0,or.initSync)();ln=Object.create(null),ot=Object.create(null);(0,Vg._assignPackageExport)("databases",ot);(0,Vg._assignPackageExport)("tables",ln);Ic=Symbol.for("next-table-id"),Kg=[],no=new Map;a(f5,"getTables");a(ts,"getDatabases");a(E5,"resetDatabases");a(Vu,"readMetaDb");a(kM,"ensureDB");a($M,"setTable");a(Tu,"database");a(jT,"dropDatabase");a(ft,"table");h5=1e3,p5=10;a(m5,"runIndexing");a(S5,"dropTableMeta");a(Wg,"onUpdatedTable")});var K=T((tRe,nU)=>{"use strict";var so=require("path"),QM=require("fs-extra"),Cr=x(),VM=require("fs-extra"),DE=require("os"),T5=require("net"),g5=require("recursive-iterator"),at=C(),R5=Wm(),YM=require("papaparse"),PE=require("moment"),{inspect:A5}=require("util"),KM=require("is-number"),eRe=require("lodash"),O5=require("minimist"),N5=require("https"),b5=require("http"),{hdb_errors:ME}=ie(),y5=/^((\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)))$/,jM=require("util").promisify(setTimeout),I5=100,w5=5,C5="",L5=4,WM={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};nU.exports={isEmpty:_n,isEmptyOrZeroLength:Us,arrayHasEmptyValues:M5,arrayHasEmptyOrZeroLengthValues:U5,buildFolderPath:v5,isBoolean:zM,errorizeMessage:D5,stripFileExtension:H5,autoCast:q5,autoCastJSON:JM,autoCastJSONDeep:jg,removeDir:G5,compareVersions:x5,isCompatibleDataVersion:F5,escapeRawValue:k5,unescapeValue:$5,stringifyProps:V5,timeoutPromise:K5,isClusterOperation:Q5,getClusterUser:z5,checkGlobalSchemaTable:j5,getHomeDir:ZM,getPropsFilePath:Y5,promisifyPapaParse:J5,removeBOM:eU,createEventPromise:X5,checkProcessRunning:Z5,checkSchemaTableExist:e6,checkSchemaExists:tU,checkTableExists:rU,getStartOfTomorrowInSeconds:t6,getLimitKey:r6,isObject:B5,isNotEmptyAndHasValue:P5,autoCasterIsNumberCheck:XM,backtickASTSchemaItems:n6,isPortTaken:W5,createForkArgs:s6,autoCastBoolean:i6,async_set_timeout:jM,getTableHashAttribute:o6,doesSchemaExist:a6,doesTableExist:c6,stringifyObj:l6,ms_to_time:u6,changeExtension:_6,getEnvCliRootPath:zg,noBootFile:d6,httpRequest:f6,transformReq:E6,convertToMS:h6,PACKAGE_ROOT:at.PACKAGE_ROOT};function D5(e){return e instanceof Error?e:new Error(e)}a(D5,"errorizeMessage");function _n(e){return e==null}a(_n,"isEmpty");function P5(e){return!_n(e)&&(e||e===0||e===""||zM(e))}a(P5,"isNotEmptyAndHasValue");function Us(e){return _n(e)||e.length===0||e.size===0}a(Us,"isEmptyOrZeroLength");function M5(e){if(_n(e))return!0;for(let t=0;t<e.length;t++)if(_n(e[t]))return!0;return!1}a(M5,"arrayHasEmptyValues");function U5(e){if(Us(e))return!0;for(let t=0;t<e.length;t++)if(Us(e[t]))return!0;return!1}a(U5,"arrayHasEmptyOrZeroLengthValues");function v5(...e){try{return e.join(so.sep)}catch{console.error(e)}}a(v5,"buildFolderPath");function zM(e){return _n(e)?!1:e===!0||e===!1}a(zM,"isBoolean");function B5(e){return _n(e)?!1:typeof e=="object"}a(B5,"isObject");function H5(e){return Us(e)?C5:e.slice(0,-L5)}a(H5,"stripFileExtension");function q5(e){return _n(e)||e===""||typeof e!="string"?e:WM[e]!==void 0?WM[e]:XM(e)===!0?Number(e):y5.test(e)?new Date(e):e}a(q5,"autoCast");function JM(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(JM,"autoCastJSON");function jg(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=jg(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=jg(r);n!==r&&(e[t]=n)}return e}else return JM(e)}a(jg,"autoCastJSONDeep");function XM(e){if(e.startsWith("0.")&&KM(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&KM(e))}a(XM,"autoCasterIsNumberCheck");async function G5(e){if(Us(e))throw new Error(`Directory path: ${e} does not exist`);try{await VM.emptyDir(e),await VM.remove(e)}catch(t){throw Cr.error(`Error removing files in ${e} -- ${t}`),t}}a(G5,"removeDir");function x5(e,t){if(Us(e)){Cr.info("Invalid current version sent as parameter.");return}if(Us(t)){Cr.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(x5,"compareVersions");function F5(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(F5,"isCompatibleDataVersion");function k5(e){if(_n(e))return e;let t=String(e);return t==="."?at.UNICODE_PERIOD:t===".."?at.UNICODE_PERIOD+at.UNICODE_PERIOD:t.replace(at.FORWARD_SLASH_REGEX,at.UNICODE_FORWARD_SLASH)}a(k5,"escapeRawValue");function $5(e){if(_n(e))return e;let t=String(e);return t===at.UNICODE_PERIOD?".":t===at.UNICODE_PERIOD+at.UNICODE_PERIOD?"..":String(e).replace(at.ESCAPED_FORWARD_SLASH_REGEX,"/")}a($5,"unescapeValue");function V5(e,t){if(_n(e))return Cr.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+DE.EOL}!Us(n)&&n[0]===";"?r+=" "+n+s+DE.EOL:Us(n)||(r+=n+"="+s+DE.EOL)}catch{Cr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(V5,"stringifyProps");function ZM(){let e;try{e=DE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(ZM,"getHomeDir");function Y5(){let e=so.join(ZM(),at.HDB_HOME_DIR_NAME,at.BOOT_PROPS_FILE_NAME);return QM.existsSync(e)||(e=so.join(__dirname,"../","hdb_boot_properties.file")),e}a(Y5,"getPropsFilePath");function K5(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(K5,"timeoutPromise");async function W5(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=T5.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(W5,"isPortTaken");function Q5(e){try{return at.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Cr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Q5,"isClusterOperation");function j5(e,t){let r=(ge(),oe(Fe)).getDatabases();if(!r[e])return ME.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return ME.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(j5,"checkGlobalSchemaTable");function z5(e,t){if(_n(t)){Cr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(_n(e)||Us(e)){Cr.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){Cr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Cr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(z5,"getClusterUser");function J5(){YM.parsePromise=function(e,t,r){return new Promise(function(n,s){YM.parse(e,{header:!0,transformHeader:eU,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(J5,"promisifyPapaParse");function eU(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(eU,"removeBOM");function X5(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Cr.info(`Got cluster status event response: ${A5(s)}`);try{i.cancel()}catch{Cr.error("Error trying to cancel timeout.")}n(s)})})}a(X5,"createEventPromise");async function Z5(e){let t=!0,r=0;do await jM(I5*r++),(await R5.findPs(e)).length>0&&(t=!1);while(t&&r<w5);if(t)throw new Error(`process ${e} was not started`)}a(Z5,"checkProcessRunning");function e6(e,t){let r=tU(e);if(r)return r;let n=rU(e,t);if(n)return n}a(e6,"checkSchemaTableExist");function tU(e){let{getDatabases:t}=(ge(),oe(Fe));if(!t()[e])return ME.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(tU,"checkSchemaExists");function rU(e,t){let{getDatabases:r}=(ge(),oe(Fe));if(!r()[e][t])return ME.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(rU,"checkTableExists");function t6(){let e=PE().utc().add(1,at.MOMENT_DAYS_TAG).startOf(at.MOMENT_DAYS_TAG).unix(),t=PE().utc().unix();return e-t}a(t6,"getStartOfTomorrowInSeconds");function r6(){return PE().utc().format("DD-MM-YYYY")}a(r6,"getLimitKey");function n6(e){try{let t=new g5(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){Cr.error("Got an error back ticking items."),Cr.error(t)}}a(n6,"backtickASTSchemaItems");function s6(e){return[e]}a(s6,"createForkArgs");function i6(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(i6,"autoCastBoolean");function o6(e,t){let{getDatabases:r}=(ge(),oe(Fe)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(o6,"getTableHashAttribute");function a6(e){let{getDatabases:t}=(ge(),oe(Fe));return t()[e]!==void 0}a(a6,"doesSchemaExist");function c6(e,t){let{getDatabases:r}=(ge(),oe(Fe));return r()[e]?.[t]!==void 0}a(c6,"doesTableExist");function l6(e){try{return JSON.stringify(e)}catch{return e}}a(l6,"stringifyObj");function u6(e){let t=PE.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(u6,"ms_to_time");function _6(e,t){let r=so.basename(e,so.extname(e));return so.join(so.dirname(e),r+t)}a(_6,"changeExtension");function zg(){if(process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=O5(process.argv);if(e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(zg,"getEnvCliRootPath");var Qg;function d6(){if(Qg)return Qg;let e=zg();zg()&&QM.pathExistsSync(so.join(e,at.HDB_CONFIG_FILE))&&(Qg=!0)}a(d6,"noBootFile");function f6(e,t){let r;return e.protocol==="http:"?r=b5:r=N5,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(f6,"httpRequest");function E6(e){if(!e.schema&&!e.database){e.schema=at.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(E6,"transformReq");function h6(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(h6,"convertToMS")});var X=T((nRe,aU)=>{"use strict";var Jg=require("fs-extra"),da=require("path"),sU=require("os"),p6=require("properties-reader"),Wu=x(),Ku=K(),_e=C(),UE=Et(),m6="Error initializing environment manager",vE="BOOT_PROPS_FILE_PATH",iU=!1,S6={[_e.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},_i={};aU.exports={BOOT_PROPS_FILE_PATH:vE,getHdbBasePath:T6,setHdbBasePath:g6,get:oU,initSync:A6,setProperty:ve,initTestEnvironment:O6};function T6(){return _i[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(T6,"getHdbBasePath");function g6(e){_i[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(g6,"setHdbBasePath");function oU(e){let t=UE.getConfigValue(e);return t===void 0?_i[e]:t}a(oU,"get");function ve(e,t){S6[e]&&(_i[e]=t),UE.updateConfigObject(e,t)}a(ve,"setProperty");function R6(){let e;try{e=Ku.getPropsFilePath(),Jg.accessSync(e,Jg.constants.F_OK|Jg.constants.R_OK),iU=!0;let t=p6(e);return _i[_e.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(_e.HDB_SETTINGS_NAMES.INSTALL_USER),_i[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),_i[vE]=e,!0}catch{return Wu.trace(`Environment manager found no properties file at ${e}`),!1}}a(R6,"doesPropFileExist");function A6(e=!1){try{(iU||R6()||Ku.noBootFile())&&(UE.initConfig(e),_i[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=UE.getConfigValue(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Wu.error(m6),Wu.error(t),console.error(t),process.exit(1)}}a(A6,"initSync");function O6(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=da.join(__dirname,"../../","unitTests");_i[vE]=da.join(l,"hdb_boot_properties.file"),ve(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,da.join(l,"settings.test")),ve(_e.HDB_SETTINGS_NAMES.INSTALL_USER,sU.userInfo()?sU.userInfo().username:void 0),ve(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),ve(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY,da.join(l,"envDir","log")),ve(_e.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),ve(_e.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),ve(_e.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),ve(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,da.join(l,"envDir")),ve(_e.CONFIG_PARAMS.STORAGE_PATH,da.join(l,"envDir")),s&&(ve(_e.CONFIG_PARAMS.HTTP_SECUREPORT,oU(_e.CONFIG_PARAMS.HTTP_PORT)),ve(_e.CONFIG_PARAMS.HTTP_PORT,null)),ve(_e.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),ve(_e.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),ve(_e.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Ku.isEmpty(i)?!1:i),ve(_e.CONFIG_PARAMS.HTTP_CORS,Ku.isEmpty(i)?!1:i),ve(_e.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),ve(_e.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,da.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),ve(_e.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Ku.isEmpty(c)?!1:c),o&&(ve("CORS_ACCESSLIST",o),ve(_e.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),ve(_e.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),ve(_e.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),ve(_e.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${vE}. Please check your boot props and settings files`;Wu.fatal(r),Wu.error(t)}}a(O6,"initTestEnvironment")});var eR={};$e(eR,{loadGQLSchema:()=>y6,start:()=>Zg,startOnMainThread:()=>b6});function Zg({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:_,StringValueNode:u}=await import("graphql"),d=o(new c(r.toString(),s)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case l.OBJECT_TYPE_DEFINITION:let v=function(U){if(U.kind==="NonNullType"){let j=v(U.type);return j.nullable=!1,j}if(U.kind==="ListType")return{type:"array",elements:v(U.type)};let H={type:U.name?.value};return Object.defineProperty(H,"location",{value:U.loc.startToken}),H};a(v,"getProperty");let R=S.name.value,g=[],A={table:null,database:null,properties:g};f.set(R,A);for(let U of S.directives){if(U.name.value==="table"){for(let F of U.arguments)A[F.name.value]=F.value.value;A.schema&&(A.database=A.schema),A.table||(A.table=R),A.audit&&(A.audit=A.audit!=="false"),A.attributes=A.properties,E.push(A)}if(U.name.value==="sealed"&&(A.sealed=!0),U.name.value==="export"){A.export=!0;for(let F of U.arguments)F.name.value==="name"&&(A.export={name:F.value.value})}}let P=!1;for(let U of S.fields){let F=v(U.type);F.name=U.name.value,g.push(F);for(let H of U.directives)if(H.name.value==="primaryKey")P?console.warn("Can not define two attributes as a primary key"):(F.isPrimaryKey=!0,P=!0);else if(H.name.value==="indexed")F.indexed=!0;else if(H.name.value==="relationship"){let j={};for(let z of H.arguments)j[z.name.value]=z.value.value;F.relationship=j}else if(H.name.value==="createdTime")F.assignCreatedTime=!0;else if(H.name.value==="updatedTime")F.assignUpdatedTime=!0;else if(H.name.value==="expiresAt")F.expiresAt=!0;else if(H.name.value==="allow"){let j=F.authorizedRoles=[];for(let z of H.arguments)z.name.value==="role"&&j.push(z.value.value)}}A.type=R,R==="Query"&&(h=A)}function m(S){let R=f.get(S.type);R?(Object.defineProperty(S,"properties",{value:R.properties}),Object.defineProperty(S,"definition",{value:R})):S.type==="array"?m(S.elements):N6.includes(S.type)||(0,cU.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(m,"connectPropertyType");for(let S of f.values())for(let R of S.properties)m(R);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Xg.dirname)(n),S.tableClass):i.set((0,Xg.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var Xg,cU,N6,b6,y6,lU=Ne(()=>{Xg=require("path");ge();cU=q(tt()),N6=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(Zg,"start");b6=Zg,y6=Zg({ensureTable:ft}).handleFile});async function BE(e){return I6?(Qu||(Qu=w6(L6)),(await(await Qu).import(e)).namespace):import(e)}async function w6(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Qu=new Compartment({console,Math,Date,fetch:C6,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,_U.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:jt,tables:ln,databases:ot})}};let n=await(0,uU.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Qu}function C6(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 L6(){return{Resource:jt,tables:ln}}var uU,_U,I6,Qu,tR=Ne(()=>{Qn();ge();uU=require("fs/promises"),_U=require("path"),I6=!1;a(BE,"secureImport");a(w6,"getCompartment");a(C6,"secureOnlyFetch");a(L6,"getGlobalVars")});var nR={};$e(nR,{handleFile:()=>D6});async function D6(e,t,r,n){let s=new Map,i=(0,dU.pathToFileURL)(r).toString(),o=await BE(i);l(o.default)&&n.set((0,rR.dirname)(t),o.default),c(o,(0,rR.dirname)(t));function c(_,u){for(let d in _){let f=_[d];l(f)?n.set(u+"/"+d,f):typeof f=="object"&&c(f,u+"/"+d)}}a(c,"recurseForResources");function l(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(l,"isResource"),s}var dU,rR,fU=Ne(()=>{dU=require("url");tR();rR=require("path");a(D6,"handleFile")});var iR={};$e(iR,{start:()=>P6});function P6({resources:e}){e.set("login",sR),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var sR,EU=Ne(()=>{Qn();a(P6,"start");sR=class extends jt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var RU={};$e(RU,{parse:()=>aR,streamAsJSON:()=>ju,stringify:()=>fa});function ju(e){return new oR({value:e})}function hU(e){return console.error(e),JSON.stringify(e.toString())}function pU(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function fa(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===TU)return gU(e);if(t.resolution)return t.resolution.then(()=>fa(e));throw t}}function gU(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+=gU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+fa(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function aR(e){return v6.test(e)?M6.parse(e):JSON.parse(e)}var mU,SU,M6,U6,TU,oR,v6,cR=Ne(()=>{mU=require("stream"),SU=q(require("json-bigint-fixes")),M6=(0,SU.default)({useNativeBigInt:!0}),U6=1e4,TU={};BigInt.prototype.toJSON=function(){throw TU};a(ju,"streamAsJSON");oR=class extends mU.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),hU)}catch(s){yield hU(s)}else yield fa(t)}else yield fa(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);pU(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>U6?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 pU(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(hU,"handleError");a(pU,"when");a(fa,"stringify");a(gU,"jsStringify");v6=/-?\d{16,}/;a(aR,"parse")});var HE=T((pRe,AU)=>{"use strict";var B6=Cn();AU.exports={writeTransaction:H6};function H6(e,t,r){return B6.writeTransaction(e,t,r)}a(H6,"writeTransaction")});var yU=T((TRe,bU)=>{"use strict";var q6=nr(),G6=Ln(),OU=x(),x6=br(),SRe=HE(),F6=require("clone"),uR=require("alasql"),k6=Qf(),NU=require("util"),$6=NU.promisify(G6.getTableSchema),V6=NU.promisify(q6.search),Y6=C(),lR=K();k6(uR);bU.exports={update:W6};var K6="There was a problem performing this update. Please check the logs and try again.";async function W6({statement:e,hdb_user:t}){let r=await $6(e.table.databaseid,e.table.tableid),n=Q6(e.columns);lR.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=F6(s),c=lR.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=uR.parse(l).statements[0],u=await V6(_),d=j6(n,u);return z6(o,d,t)}a(W6,"update");function Q6(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=uR.compile(`SELECT ${r.expression.toString()} AS [${Y6.FUNC_VAL}] FROM ?`)}),t}catch(t){throw OU.error(t),new Error(K6)}}a(Q6,"createUpdateRecord");function j6(e,t){return lR.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(j6,"buildUpdateRecords");async function z6(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await x6.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){OU.error(`Error delete new_attributes from update response: ${i}`)}return s}a(z6,"updateRecords")});var wU=T((ORe,IU)=>{var J6=require("alasql"),X6=nr(),Z6=x(),e8=Cn(),dR=require("util"),_R=K(),t8=C(),r8=Ln(),RRe=HE(),ARe=br(),n8="record",s8="successfully deleted",i8=dR.callbackify(l8),o8=dR.promisify(X6.search),a8=dR.promisify(r8.getTableSchema);IU.exports={convertDelete:i8};function c8(e){return`${e.deleted_hashes.length} ${n8}${e.deleted_hashes.length===1?"":"s"} ${s8}`}a(c8,"generateReturnMessage");async function l8({statement:e,hdb_user:t}){let r=await a8(e.table.databaseid,e.table.tableid);_R.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=_R.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=J6.parse(o).statements[0],l={operation:t8.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await o8(c);let _=await e8.deleteRecords(l);return _R.isEmptyOrZeroLength(_.message)&&(_.message=c8(_)),delete _.txn_time,_}catch(_){throw Z6.error(_),_.hdb_code?_.message:_}}a(l8,"convertDelete")});var MU=T((bRe,PU)=>{"use strict";var u8=zi(),{hdb_errors:CU}=ie(),{getDatabases:LU}=(ge(),oe(Fe));PU.exports={checkSchemaExists:DU,checkSchemaTableExists:_8,schema_describe:u8};async function DU(e){if(!LU()[e])return CU.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(DU,"checkSchemaExists");async function _8(e,t){let r=await DU(e);if(r)return r;if(!LU()[e][t])return CU.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(_8,"checkSchemaTableExists")});var SR=T((CRe,$U)=>{"use strict";var{decode:d8}=require("msgpackr"),{isMainThread:IRe,parentPort:f8,threadId:wRe}=require("worker_threads"),zu=ht(),Lc=et(),hR=C(),ar=x(),ER=X(),vU=C(),{onMessageByType:E8}=tt(),BU=li(),{recordAction:h8,recordActionBinary:p8}=(ui(),oe(Mu)),{publishToStream:m8}=zu,{ConsumerEvents:S8}=require("nats"),T8=nr(),{promisify:g8}=require("util"),HU=g8(setTimeout),xE=1e4,FE,GE,R8,A8,qU,Ju=new Map,Dc=new Map;$U.exports={initialize:pR,ingestConsumer:mR,setSubscription:O8,setIgnoreOrigin:y8,getDatabaseSubscriptions:b8,updateConsumer:GU};async function pR(){E8(hR.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await GU(n)}),qU=!0,ar.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await zu.getNATSReferences();FE=e,GE=e.info.server_name,R8=t,A8=r}a(pR,"initialize");async function GU(e){if(e.status==="start"){let{js:t,jsm:r}=await xU(e.node_domain_name);mR(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Ju.get(e.stream_name+e.node_domain_name);t&&(ar.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Ju.set(e.stream_name+e.node_domain_name,"close")),Dc.get(e.node_domain_name)==="failed"&&Dc.set(e.node_domain_name,"close")}}a(GU,"updateConsumer");var kE=new Map;function O8(e,t,r){let n=kE.get(e);n||kE.set(e,n=new Map),n.set(t,r),qU||pR().then(N8)}a(O8,"setSubscription");async function N8(){let e=await T8.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Lc.SERVER_SUFFIX.LEAF,{js:n,jsm:s}=await xU(r);if(s){for(let i of t.subscriptions)if(i.subscribe===!0){let{schema:o,table:c}=i,l=BU.createNatsTableStreamName(o,c);mR(l,n,s,r)}}}}a(N8,"accessConsumers");async function xU(e){let t,r,n=1;for(;!r;)try{t=await FE.jetstream({domain:e,timeout:6e4}),r=await FE.jetstreamManager({domain:e,timeout:6e4})}catch(s){if(Dc.get(e)==="close")break;Dc.set(e,"failed"),n%10===1&&ar.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<xE?n++*100:xE;await HU(i)}return{js:t,jsm:r}}a(xU,"connectToRemoteJS");function b8(){return kE}a(b8,"getDatabaseSubscriptions");var FU;function y8(e){FU=e}a(y8,"setIgnoreOrigin");var kU=100,UU=new Array(kU),qE=0;async function mR(e,t,r,n){let{connection:s}=await zu.getNATSReferences();FE=s,GE=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,GE),ar.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(Dc.get(n)==="close")break;o%10===1&&ar.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(ar.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await zu.createConsumer(r,e,GE,new Date(Date.now()).toISOString()));let u=o++*100<xE?o++*100:xE;await HU(u)}let c=!1,l;for(f8?.on("message",async _=>{let{type:u}=_;u===vU.ITC_EVENT_TYPES.SHUTDOWN&&(c=!0,l&&l.close?.()&&l.close())});!c;){if(Ju.get(e+n)==="close"||Dc.get(n)==="close"){Ju.delete(e+n),c=!0;continue}l=await i.consume({max_messages:ER.get(hR.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100}),Ju.set(e+n,l);let _=!1;(async()=>{for await(let u of await l.status())if(u.type===S8.HeartbeatsMissed){let d=u.data;ar.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===2&&(ar.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 UU[qE],UU[qE]=I8(u).catch(d=>{ar.error(d)}),++qE>=kU&&(qE=0)}catch(u){u.message==="consumer deleted"?(ar.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):ar.error("Error consuming clustering ingest, restarting consumer",u)}zu.clearClientCache(),!c&&_&&await pR()}}a(mR,"ingestConsumer");async function I8(e){let t=d8(e.data);h8(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),ar.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=ER.get(hR.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Lc.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Lc.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Lc.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!FU),p8(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Lc.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:_,records:u,hash_values:d,__origin:f,expiresAt:E}=t;ar.trace("processing message:",o,c,_,(u?"records: "+u.map(P=>P?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),ar.trace(`messageProcessor nats msg id: ${e.headers.get(Lc.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let m=new Promise(P=>h=P),{timestamp:S,user:R,node_name:g}=f||{},A=kE.get(c)?.get(_);if(!A)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,A.send(t);else if(u.length===1&&!l)A.send({type:fR(o),value:u[0],id:d?.[0],expiresAt:E,timestamp:S,table:_,onCommit:h,user:R,nodeName:g});else{let P=u.map((v,U)=>({type:fR(o),value:v,expiresAt:E,id:d?.[U],table:_}));for(;l;)P.push({type:fR(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;A.send({type:"transaction",writes:P,table:_,timestamp:S,onCommit:h,user:R,nodeName:g})}ER.get(vU.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&m8(e.subject.split(".").slice(0,-1).join("."),BU.createNatsTableStreamName(c,_),e.headers,e.data),await m}catch(o){ar.error(o)}e.ack()}a(I8,"messageProcessor");function fR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(fR,"convertOperation")});var ht=T((BRe,ov)=>{"use strict";var kt=X();kt.initSync();var w8=require("fs-extra"),C8=require("semver"),e_=require("path"),{monotonicFactory:L8}=require("ulidx"),YU=L8(),D8=require("util"),KU=require("child_process"),P8=D8.promisify(KU.exec),M8=KU.spawn,Jt=et(),De=C(),$E=K(),cs=x(),VE=li(),U8=HE(),Xu=Et(),{broadcast:v8,onMessageByType:B8,getWorkerIndex:H8}=tt(),{isMainThread:WU}=require("worker_threads"),{Encoder:q8,decode:AR}=require("msgpackr"),QU=new q8,{isEmpty:ma}=$E,jU=wr(),DRe=48*36e11;WU&&B8(De.ITC_EVENT_TYPES.RESTART,()=>{Lr=void 0,pa=void 0});var{connect:G8,StorageType:x8,RetentionPolicy:F8,AckPolicy:OR,DeliverPolicy:NR,DiscardPolicy:k8,NatsConnection:PRe,JetStreamManager:MRe,JetStreamClient:URe,StringCodec:vRe,JSONCodec:$8,createInbox:bR,headers:V8,ErrorCode:VU}=require("nats"),{PACKAGE_ROOT:Y8}=C(),K8=Bo(),{recordAction:W8}=(ui(),oe(Mu)),zU=$8(),Q8="clustering",j8=K8.engines[Jt.NATS_SERVER_NAME],z8=e_.join(Y8,"dependencies"),RR=e_.join(z8,`${process.platform}-${process.arch}`,Jt.NATS_BINARY_NAME),TR,gR,Zu,Ea,ha;ov.exports={runCommand:JU,checkNATSServerInstalled:J8,createConnection:yR,getConnection:YE,getJetStreamManager:t_,getJetStream:ZU,getNATSReferences:ls,getServerList:Z8,createLocalStream:IR,listStreams:ev,deleteLocalStream:e9,getServerConfig:r_,listRemoteStreams:t9,viewStream:r9,viewStreamIterator:n9,publishToStream:s9,request:a9,reloadNATS:wR,reloadNATSHub:c9,reloadNATSLeaf:l9,extractServerName:o9,requestErrorHandler:u9,createLocalTableStream:sv,createTableStreams:f9,purgeTableStream:iv,purgeSchemaTableStreams:E9,getStreamInfo:h9,updateLocalStreams:m9,closeConnection:X8,getJsmServerName:KE,addNatsMsgHeader:tv,clearClientCache:XU,updateRemoteConsumer:_9,createConsumer:rv,updateConsumerIterator:d9};async function JU(e,t=void 0){let{stdout:r,stderr:n}=await P8(e,{cwd:t});if(n)throw new Error(n.replace(`
10
10
  `,""));return r.replace(`
11
- `,"")}a(DU,"runCommand");async function L6(){try{await c6.access(cR)}catch{return!1}let e=await DU(`${cR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return l6.eq(t,w6)}a(L6,"checkNATSServerInstalled");async function dR(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await IU.getClusterUser();if(Sa(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}_n.trace("create nats connection called");let i=await g6({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:zt.get(Be.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:zt.get(Be.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:zt.get(Be.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),_n.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&_n.error("Error with Nats client connection, connection closed",o),PU()}),i}a(dR,"createConnection");function PU(){Pn=void 0,ha=void 0,pa=void 0,ma=void 0}a(PU,"clearClientCache");async function D6(){Pn&&(await Pn.drain(),Pn=void 0,ha=void 0,pa=void 0,ma=void 0)}a(D6,"closeConnection");var Pn,ma;async function vE(){return ma||(ma=dR(zt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Pn=await ma),Pn||ma}a(vE,"getConnection");async function r_(){if(ha)return ha;Sa(Pn)&&await vE();let{domain:e}=n_(Be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Sa(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ha=await Pn.jetstreamManager({domain:e,timeout:6e4}),ha}a(r_,"getJetStreamManager");async function MU(){if(pa)return pa;Sa(Pn)&&await vE();let{domain:e}=n_(Be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Sa(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return pa=Pn.jetstream({domain:e,timeout:6e4}),pa}a(MU,"getJetStream");async function wr(){let e=Pn||await vE(),t=ha||await r_(),r=pa||await MU();return{connection:e,jsm:t,js:r}}a(wr,"getNATSReferences");async function P6(e){let t=zt.get(Be.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await IU.getClusterUser(),s=await dR(t,r,n),i=_R(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=LU.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 lR.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(P6,"getServerList");async function fR(e,t){let{jsm:r}=await wr(),n=zt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=zt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=zt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:wU.File,retention:CU.Limits,subjects:t,discard:R6.Old,max_msgs:s,max_bytes:i,max_age:n})}a(fR,"createLocalStream");async function UU(){let{jsm:e}=await wr(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(UU,"listStreams");async function M6(e){let{jsm:t}=await wr();await t.streams.delete(e)}a(M6,"deleteLocalStream");async function U6(e){let{connection:t}=await wr(),r=[],n=_R(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(LU.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(U6,"listRemoteStreams");async function v6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await wr(),i=NU(),o={durable_name:i,ack_policy:ME.Explicit};t&&(o.deliver_policy=UE.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=uR(u.data),f={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};if(u.headers&&(f.origin=u.headers.get(we.MSG_HEADERS.ORIGIN)),_.push(f),u.ack(),u.info.pending===0)break}return await c.delete(),_}a(v6,"viewStream");async function*B6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await wr(),i=NU(),o={durable_name:i,ack_policy:ME.Explicit};t&&(o.deliver_policy=UE.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=uR(_.data);u[0]||(u=[u]);for(let d of u){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(we.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(B6,"viewStreamIterator");async function H6(e,t,r,n){_n.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=vU(n,r);let{js:s}=await wr(),i=await s_(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:yU.encode(n);try{_n.trace(`publishToStream publishing to subject: ${o}`),y6(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 xU(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){_n.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await fR(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(H6,"publishToStream");function vU(e,t){t===void 0&&(t=O6());let r=zt.get(Be.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(we.MSG_HEADERS.ORIGIN)&&r&&t.append(we.MSG_HEADERS.ORIGIN,r),t}a(vU,"addNatsMsgHeader");function n_(e){e=e.toLowerCase();let t=t_.join(zt.get(Be.CONFIG_PARAMS.ROOTPATH),I6);if(e===Be.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Sa(aR)&&(aR={port:Zu.getConfigFromFile(Be.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Zu.getConfigFromFile(Be.CONFIG_PARAMS.CLUSTERING_NODENAME)+we.SERVER_SUFFIX.HUB,config_file:we.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:t_.join(t,we.PID_FILES.HUB),hdb_nats_path:t}),aR;if(e===Be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Sa(oR)&&(oR={port:Zu.getConfigFromFile(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Zu.getConfigFromFile(Be.CONFIG_PARAMS.CLUSTERING_NODENAME)+we.SERVER_SUFFIX.LEAF,config_file:we.NATS_CONFIG_FILES.LEAF_SERVER,domain:Zu.getConfigFromFile(Be.CONFIG_PARAMS.CLUSTERING_NODENAME)+we.SERVER_SUFFIX.LEAF,pid_file_path:t_.join(t,we.PID_FILES.LEAF),hdb_nats_path:t}),oR;_n.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(n_,"getServerConfig");async function q6(e){let{jsm:t}=await wr(),r=await s_();try{await t.streams.add({name:e.stream_name,storage:wU.File,retention:CU.Limits,max_age:S6,max_bytes:T6,subjects:[`${we.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(n){if(n.code!=="400")throw n}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(n){if(n.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:ME.Explicit,durable_name:e.durable_name,deliver_policy:UE.All,max_ack_pending:1e4});else throw n}}a(q6,"createWorkQueueStream");async function x6(){let{jsm:e}=await wr();(await e.consumers.info(we.WORK_QUEUE_CONSUMER_NAMES.stream_name,we.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(_n.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(we.WORK_QUEUE_CONSUMER_NAMES.stream_name,we.WORK_QUEUE_CONSUMER_NAMES.durable_name),_n.info("Adding pull consumer to ingest stream"),await e.consumers.add(we.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:ME.Explicit,durable_name:we.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:UE.All,max_ack_pending:1e4}))}a(x6,"updateIngestStreamConsumer");async function BU(e,t,r){let{jsm:n}=await wr(),s=await n.streams.info(t),i=HU(n.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:l}=r,_=PE.createNatsTableStreamName(c,l),u=i===e,d,f,E=!1;if(!Array.isArray(s.config.sources)||s.config.sources.length===0)s.config.sources=[];else for(let m=0,S=s.config.sources.length;m<S;m++)if(d=s.config.sources[m],f=m,u&&d.name===_||!u&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let m=`txn.${c}.${l}.${e}`;await n.streams.purge(t,{filter:m}),s.config.sources.splice(f,1),await n.streams.update(t,s.config)}let h={name:_,opt_start_time:o,filter_subject:`${we.SUBJECT_PREFIXES.TXN}.>`};u||(h.external={api:`$JS.${e}.API`,deliver:""}),s.config.sources.push(h),await n.streams.update(t,s.config)}a(BU,"addSourceToWorkStream");function HU(e){return e.split(".")[1]}a(HU,"extractServerName");async function qU(e,t,r){let{jsm:n}=await wr(),{schema:s,table:i}=r,o=`txn.${s}.${i}.${e}`;await n.streams.purge(t,{filter:o});let c=PE.createNatsTableStreamName(s,i),l=await n.streams.info(t);if(!Array.isArray(l.config.sources)||l.config.sources.length===0)return;let _=l.config.sources.length,u;for(;_--;)if(u=l.config.sources[_],u.name===c&&u.external.api===`$JS.${e}.API`){l.config.sources.splice(_,1);break}await n.streams.update(t,l.config)}a(qU,"removeSourceFromWorkStream");async function G6(e,t,r=6e4,n=_R()){if(!lR.isObject(t))throw new Error("data param must be an object");let s=yU.encode(t),{connection:i}=await wr(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return uR(c.data)}a(G6,"request");function ER(e){return new Promise(async(t,r)=>{let n=f6(cR,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(ER,"reloadNATS");async function F6(){let{pid_file_path:e}=n_(Be.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await ER(e)}a(F6,"reloadNATSHub");async function k6(){let{pid_file_path:e}=n_(Be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await ER(e)}a(k6,"reloadNATSLeaf");function $6(e,t,r){let n;switch(e.code){case OU.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case OU.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a($6,"requestErrorHandler");async function V6(e,t){let r=t+we.SERVER_SUFFIX.LEAF;await xU(async()=>{e.subscribe===!0?await BU(r,we.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await qU(r,we.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(V6,"updateWorkStream");function xU(e){return E6.writeTransaction(Be.SYSTEM_SCHEMA_NAME,Be.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(xU,"exclusiveLock");async function GU(e,t){let r=PE.createNatsTableStreamName(e,t),n=await s_(),s=Q6(e,t,n);await fR(r,[s])}a(GU,"createLocalTableStream");async function Y6(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await GU(n,s)}}a(Y6,"createTableStreams");async function FU(e,t,r=!1){if(zt.get(Be.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=PE.createNatsTableStreamName(e,t),{jsm:s}=await wr();r?await s.streams.purge(we.WORK_QUEUE_CONSUMER_NAMES.stream_name):await s.streams.purge(n)}catch(n){if(n.message==="stream not found")_n.warn(n);else throw n}}a(FU,"purgeTableStream");async function K6(e,t){if(zt.get(Be.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await FU(e,t[r])}a(K6,"purgeSchemaTableStreams");async function W6(e){return(await r_()).streams.info(e)}a(W6,"getStreamInfo");function Q6(e,t,r){return`${we.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Q6,"createSubjectName");async function s_(){if(e_)return e_;if(e_=(await r_())?.nc?.info?.server_name,e_===void 0)throw new Error("Unable to get jetstream manager server name");return e_}a(s_,"getJsmServerName");async function j6(){let e=await r_(),t=await s_(),r=await UU();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=z6(n),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(s.name===we.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${we.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;_n.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else if(s.name===we.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${we.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;_n.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let u=_.join(".");_n.trace(`Updating stream subject name from: ${i} to: ${u}`),s.subjects[0]=u}await e.streams.update(s.name,s)}}}a(j6,"updateLocalStreams");function z6(e){let{config:t}=e,r=!1;if(t.name===we.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===we.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let n=zt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=zt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=zt.get(Be.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(z6,"updateStreamLimits")});var xE=g((wRe,KU)=>{"use strict";var Pc=yf(),Mc=AU(),J6=G(),X6=require("uuid").v4,IRe=require("clone"),HE=ii(),Uc=C(),Z6=require("util"),io=In(),{handleHDBError:Cr,hdb_errors:e9}=se(),{HDB_ERROR_MSGS:BE,HTTP_STATUS_CODES:Lr}=e9,{SchemaEventMsg:qE}=Jn(),$U=pt(),{getDatabases:t9}=(ge(),ie(Ge)),{transformReq:vc}=Q();KU.exports={createSchema:r9,createSchemaStructure:VU,createTable:n9,createTableStructure:YU,createAttribute:c9,dropSchema:s9,dropTable:i9,dropAttribute:o9,getBackup:l9};async function r9(e){let t=await VU(e);return HE.signalSchemaChange(new qE(process.pid,e.operation,e.schema)),t}a(r9,"createSchema");async function VU(e){let t=Pc.schema_object(e);if(t)throw Cr(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);if(vc(e),!await Mc.checkSchemaExists(e.schema))throw Cr(new Error,BE.SCHEMA_EXISTS_ERR(e.schema),Lr.BAD_REQUEST,Uc.LOG_LEVELS.ERROR,BE.SCHEMA_EXISTS_ERR(e.schema),!0);return await io.createSchema(e),`database '${e.schema}' successfully created`}a(VU,"createSchemaStructure");async function n9(e){return vc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await YU(e)}a(n9,"createTable");async function YU(e){let t=Pc.create_table_object(e);if(t)throw Cr(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);if(Pc.validateTableResidence(e.residence),!await Mc.checkSchemaTableExists(e.schema,e.table))throw Cr(new Error,BE.TABLE_EXISTS_ERR(e.schema,e.table),Lr.BAD_REQUEST,Uc.LOG_LEVELS.ERROR,BE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:X6(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await io.createTable(n,e);else throw Cr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Lr.BAD_REQUEST);else await io.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(YU,"createTableStructure");async function s9(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 Cr(n,n.message,Lr.BAD_REQUEST,void 0,void 0,!0);vc(e);let s=await Mc.checkSchemaExists(e.schema);if(s)throw Cr(new Error,s,Lr.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 io.dropSchema(e),HE.signalSchemaChange(new qE(process.pid,e.operation,e.schema)),await $U.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(s9,"dropSchema");async function i9(e){let t=Pc.table_object(e);if(t)throw Cr(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);vc(e);let r=await Mc.checkSchemaTableExists(e.schema,e.table);if(r)throw Cr(new Error,r,Lr.NOT_FOUND,Uc.LOG_LEVELS.ERROR,r,!0);return await io.dropTable(e),await $U.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(i9,"dropTable");async function o9(e){let t=Pc.attribute_object(e);if(t)throw Cr(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);vc(e);let r=await Mc.checkSchemaTableExists(e.schema,e.table);if(r)throw Cr(new Error,r,Lr.NOT_FOUND,Uc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Cr(new Error,"You cannot drop a hash attribute",Lr.BAD_REQUEST,void 0,void 0,!0);if(Uc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Cr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Lr.BAD_REQUEST,void 0,void 0,!0);try{return await io.dropAttribute(e),a9(e),HE.signalSchemaChange(new qE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw J6.error(`Got an error deleting attribute ${Z6.inspect(e)}.`),n}}a(o9,"dropAttribute");function a9(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(a9,"dropAttributeFromGlobal");async function c9(e){vc(e);let t=t9()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Cr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Lr.BAD_REQUEST,void 0,void 0,!0);return await io.createAttribute(e),HE.signalSchemaChange(new qE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(c9,"createAttribute");function l9(e){return io.getBackup(e)}a(l9,"getBackup")});var QU=g((LRe,WU)=>{"use strict";var{OPERATIONS_ENUM:u9}=C(),hR=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=u9.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};WU.exports=hR});var pR=g((MRe,ZU)=>{"use strict";var _9=In(),PRe=QU(),GE=Q(),FE=C(),d9=J(),{handleHDBError:jU,hdb_errors:f9}=se(),{HDB_ERROR_MSGS:zU,HTTP_STATUS_CODES:JU}=f9,E9=Object.values(FE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),XU="To use this operation audit log must be enabled in harperdb-config.yaml";ZU.exports=h9;async function h9(e){if(GE.isEmpty(e.schema))throw new Error(zU.SCHEMA_REQUIRED_ERR);if(GE.isEmpty(e.table))throw new Error(zU.TABLE_REQUIRED_ERR);if(!d9.get(FE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw jU(new Error,XU,JU.BAD_REQUEST,FE.LOG_LEVELS.ERROR,XU,!0);let t=GE.checkSchemaTableExist(e.schema,e.table);if(t)throw jU(new Error,t,JU.NOT_FOUND,FE.LOG_LEVELS.ERROR,t,!0);if(!GE.isEmpty(e.search_type)&&E9.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await _9.readAuditLog(e)}a(h9,"readAuditLog")});var tv=g((vRe,ev)=>{"use strict";var{OPERATIONS_ENUM:p9}=C(),mR=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=p9.GET_BACKUP,this.schema=t,this.table=r}};ev.exports=mR});var sv=g((xRe,nv)=>{"use strict";var m9=In(),HRe=tv(),SR=Q(),S9=C(),qRe=J(),{handleHDBError:T9,hdb_errors:g9}=se(),{HDB_ERROR_MSGS:rv,HTTP_STATUS_CODES:R9}=g9;nv.exports=A9;async function A9(e){if(SR.isEmpty(e.schema))throw new Error(rv.SCHEMA_REQUIRED_ERR);if(SR.isEmpty(e.table))throw new Error(rv.TABLE_REQUIRED_ERR);let t=SR.checkSchemaTableExist(e.schema,e.table);if(t)throw T9(new Error,t,R9.NOT_FOUND,S9.LOG_LEVELS.ERROR,t,!0);return await m9.getBackup(read_audit_log_object)}a(A9,"getBackup")});var uv=g((FRe,lv)=>{var oo=require("validate.js"),ov=nt(),Bc=C(),{handleHDBError:O9,hdb_errors:N9}=se(),{HDB_ERROR_MSGS:mt,HTTP_STATUS_CODES:b9}=N9,TR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),y9={STRUCTURE_USER:"structure_user"},iv=Object.values(Bc.ROLE_TYPES_ENUM),I9="attribute_permissions",w9="attribute_name",{PERMS_CRUD_ENUM:Hc}=Bc,C9=[I9,...Object.values(Hc)],av=[Hc.READ,Hc.INSERT,Hc.UPDATE],L9=[w9,...av];function D9(e){let t=TR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,cv(e,t)}a(D9,"addRoleValidation");function P9(e){let t=TR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,cv(e,t)}a(P9,"alterRoleValidation");function M9(e){let t=TR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,ov.validateObject(e,t)}a(M9,"dropRoleValidation");var U9=["operation","role","id","permission","hdb_user","hdb_auth_header"];function cv(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&&Ot(mt.INVALID_ROLE_JSON_KEYS(s),r);let i=ov.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Ot(o,r)}),e.permission){let o=v9(e);o&&Ot(o,r),iv.forEach(c=>{e.permission[c]&&!oo.isBoolean(e.permission[c])&&Ot(mt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(iv.indexOf(o)<0){if(o===y9.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]||Ot(mt.SCHEMA_NOT_FOUND(d),r)}continue}Ot(mt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Ot(mt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let _=c.tables[l];if(!l||!global.hdb_schema[o][l]){Ot(mt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(_).forEach(u=>{C9.includes(u)||Ot(mt.INVALID_PERM_KEY(u),r,o,l)}),Object.values(Hc).forEach(u=>{oo.isDefined(_[u])?oo.isBoolean(_[u])||Ot(mt.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):Ot(mt.TABLE_PERM_MISSING(u),r,o,l)}),oo.isDefined(_.attribute_permissions)){if(!oo.isArray(_.attribute_permissions)){Ot(mt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}}else{Ot(mt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}if(_.attribute_permissions){let u=global.hdb_schema[o][l].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(m=>{!L9.includes(m)&&m!==Hc.DELETE&&Ot(mt.INVALID_ATTR_PERM_KEY(m),r,o,l)}),!oo.isDefined(E.attribute_name)){Ot(mt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=E.attribute_name;if(!u.includes(h)){Ot(mt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}av.forEach(m=>{oo.isDefined(E[m])?oo.isBoolean(E[m])||Ot(mt.ATTR_PERM_NOT_BOOLEAN(m,h),r,o,l):Ot(mt.ATTR_PERM_MISSING(m,h),r,o,l)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${l}`;Ot(mt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,l)}}}}return B9(r)}a(cv,"customValidate");lv.exports={addRoleValidation:D9,alterRoleValidation:P9,dropRoleValidation:M9};function v9(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 mt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Bc.ROLE_TYPES_ENUM.SUPER_USER:Bc.ROLE_TYPES_ENUM.CLUSTER_USER;return mt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(v9,"validateNoSUPerms");function B9(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:mt.ROLE_PERMS_ERROR,...e};return O9(new Error,n,b9.BAD_REQUEST)}else return null}a(B9,"generateRolePermResponse");function Ot(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(Ot,"addPermError")});var $E=g(($Re,Ev)=>{"use strict";var _v=Or(),dv=Ar(),H9=ra(),RR=uv(),AR=ii(),q9=require("uuid").v4,x9=require("util"),kE=C(),G9=Q(),OR=dv.searchByValue,F9=dv.searchByHash,k9=x9.promisify(H9.delete),$9=Xn(),V9=Sc(),{hdb_errors:Y9,handleHDBError:Ta}=se(),{HDB_ERROR_MSGS:fv,HTTP_STATUS_CODES:i_}=Y9,{UserEventMsg:NR}=Jn();Ev.exports={addRole:K9,alterRole:W9,dropRole:Q9,listRoles:j9};function gR(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(gR,"scrubRoleDetails");async function K9(e){let t=RR.addRoleValidation(e);if(t)throw t;e=gR(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await OR(r)||[])}catch(i){throw Ta(i)}if(n&&n.length>0)throw Ta(new Error,fv.ROLE_ALREADY_EXISTS(e.role),i_.CONFLICT,void 0,void 0,!0);e.id||(e.id=q9());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await _v.insert(s),AR.signalUserChange(new NR(process.pid)),e=gR(e),e}a(K9,"addRole");async function W9(e){let t=RR.alterRoleValidation(e);if(t)throw t;e=gR(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await _v.update(r)}catch(s){throw Ta(s)}if(n&&n?.message==="updated 0 of 1 records")throw Ta(new Error,"Invalid role id",i_.BAD_REQUEST,void 0,void 0,!0);return await AR.signalUserChange(new NR(process.pid)),e}a(W9,"alterRole");async function Q9(e){let t=RR.dropRoleValidation(e);if(t)throw Ta(new Error,t,i_.BAD_REQUEST,void 0,void 0,!0);let r=new V9(kE.SYSTEM_SCHEMA_NAME,kE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await F9(r));if(n.length===0)throw Ta(new Error,fv.ROLE_NOT_FOUND,i_.NOT_FOUND,void 0,void 0,!0);let s=new $9(kE.SYSTEM_SCHEMA_NAME,kE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await OR(s)),o=!1;if(G9.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Ta(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,i_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await k9(c),AR.signalUserChange(new NR(process.pid)),`${n[0].role} successfully deleted`}a(Q9,"dropRole");async function j9(){return OR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(j9,"listRoles")});var Sv=g((YRe,mv)=>{"use strict";var z9=J(),ao=require("joi"),J9=nt(),hv=require("moment"),X9=require("fs-extra"),bR=require("path"),Z9=require("lodash"),o_=C(),{LOG_LEVELS:ga}=C(),e7="YYYY-MM-DD hh:mm:ss",t7=bR.resolve(__dirname,"../logs");mv.exports=function(e){return J9.validateBySchema(e,r7)};var r7=ao.object({from:ao.custom(pv),until:ao.custom(pv),level:ao.valid(ga.NOTIFY,ga.FATAL,ga.ERROR,ga.WARN,ga.INFO,ga.DEBUG,ga.TRACE),order:ao.valid("asc","desc"),limit:ao.number().min(1),start:ao.number().min(0),log_name:ao.custom(n7)});function pv(e,t){if(hv(e,hv.ISO_8601).format(e7)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(pv,"validateDatetime");function n7(e,t){if(Z9.invert(o_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=z9.get(o_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?o_.LOG_NAMES.HDB:e,i=s===o_.LOG_NAMES.INSTALL?bR.join(t7,o_.LOG_NAMES.INSTALL):bR.join(n,s);return X9.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(n7,"validateReadLogPath")});var IR=g((WRe,gv)=>{"use strict";var VE=C(),s7=G(),i7=J(),o7=Sv(),yR=require("path"),Tv=require("fs-extra"),{once:a7}=require("events"),{handleHDBError:c7,hdb_errors:l7}=se(),{PACKAGE_ROOT:u7}=C(),_7=yR.join(u7,"logs"),d7=1e3,f7=200;gv.exports=E7;async function E7(e){let t=o7(e);if(t)throw c7(t,t.message,l7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=i7.get(VE.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?VE.LOG_NAMES.HDB:e.log_name,s=n===VE.LOG_NAMES.INSTALL?yR.join(_7,VE.LOG_NAMES.INSTALL):yR.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,_=e.until!==void 0,u=_?new Date(e.until):void 0,d=e.limit===void 0?d7:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,m=0;f==="desc"&&!l&&!u&&(m=Math.max(Tv.statSync(s).size-(h+5)*f7,0));let S=Tv.createReadStream(s,{start:m});S.on("error",v=>{s7.error(v)});let A=0,T=[],R="",U;S.on("data",v=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;v=R+v;let K=0,V;for(;(V=P.exec(v))&&!S.destroyed;){U&&(U.message=v.slice(K,V.index),B(U));let[Y,ue,Ee]=V,Fe=Ee.split("] ["),le=Fe[0],be=Fe[1];Fe.splice(0,2),U={timestamp:ue,thread:le,level:be,tags:Fe,message:""},K=V.index+Y.length}R=v.slice(K)}),S.on("end",v=>{S.destroyed||U&&(U.message=R.trim(),B(U))}),S.resume();function B(v){let P,K,V;switch(!0){case(i&&c&&_):P=new Date(v.timestamp),K=new Date(l),V=new Date(u),v.level===o&&P>=K&&P<=V&&A<E?A++:v.level===o&&P>=K&&P<=V&&(co(v,f,T),A++,A===h&&S.destroy());break;case(i&&c):P=new Date(v.timestamp),K=new Date(l),v.level===o&&P>=K&&A<E?A++:v.level===o&&P>=K&&(co(v,f,T),A++,A===h&&S.destroy());break;case(i&&_):P=new Date(v.timestamp),V=new Date(u),v.level===o&&P<=V&&A<E?A++:v.level===o&&P<=V&&(co(v,f,T),A++,A===h&&S.destroy());break;case(c&&_):P=new Date(v.timestamp),K=new Date(l),V=new Date(u),P>=K&&P<=V&&A<E?A++:P>=K&&P<=V&&(co(v,f,T),A++,A===h&&S.destroy());break;case i:v.level===o&&A<E?A++:v.level===o&&(co(v,f,T),A++,A===h&&S.destroy());break;case c:P=new Date(v.timestamp),K=new Date(l),P>=K&&A<E?A++:P>=K&&A>=E&&(co(v,f,T),A++,A===h&&S.destroy());break;case _:P=new Date(v.timestamp),V=new Date(u),P<=V&&A<E?A++:P<=V&&A>=E&&(co(v,f,T),A++,A===h&&S.destroy());break;default:A<E?A++:(co(v,f,T),A++,A===h&&S.destroy())}}return a(B,"onLogMessage"),await a7(S,"close"),T}a(E7,"readLog");function co(e,t,r){t==="desc"?h7(e,r):t==="asc"?p7(e,r):r.push(e)}a(co,"pushLineToResult");function h7(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(h7,"insertDescending");function p7(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(p7,"insertAscending")});var YE=g((XRe,Nv)=>{"use strict";var wR=require("joi"),{string:a_,boolean:Rv,date:m7}=wR.types(),S7=nt(),{validateSchemaExists:jRe,validateTableExists:zRe,validateSchemaName:JRe}=Ns(),T7=C(),g7=tt(),Av=J();Av.initSync();var R7=a_.invalid(Av.get(T7.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(g7.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(),Ov={operation:a_.valid("add_node","update_node","set_node_replication"),node_name:R7,subscriptions:wR.array().items({table:a_.optional(),schema:a_.optional(),database:a_.optional(),subscribe:Rv.required(),publish:Rv.required().custom(O7),start_time:m7.iso()}).min(1).required()};function A7(e){return S7.validateBySchema(e,wR.object(Ov))}a(A7,"addUpdateNodeValidator");function O7(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(O7,"checkForFalsy");Nv.exports={addUpdateNodeValidator:A7,validation_schema:Ov}});var yv=g((eAe,bv)=>{var N7=nt(),b7={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};bv.exports=function(e){return N7.validateObject(e,b7)}});var KE=g((tAe,Iv)=>{"use strict";var y7=C().OPERATIONS_ENUM,CR=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=y7.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Iv.exports=CR});var Cv=g((nAe,wv)=>{"use strict";var I7={OPERATION:"operation",REFRESH:"refresh"},LR=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},DR=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};wv.exports={JWTTokens:LR,TOKEN_TYPE_ENUM:I7,JWTRSAKeys:DR}});var u_=g((iAe,Mv)=>{"use strict";var l_=require("jsonwebtoken"),PR=require("fs-extra"),MR=Q(),Mn=C(),{handleHDBError:Dr,hdb_errors:w7}=se(),{HTTP_STATUS_CODES:Pr,AUTHENTICATION_ERROR_MSGS:Mr}=w7,c_=G(),Lv=Zf(),BR=yr(),C7=Or().update,L7=KE(),D7=ii(),{UserEventMsg:P7}=Jn(),lo=J();lo.initSync();var UR=require("path"),{JWTTokens:M7,JWTRSAKeys:U7,TOKEN_TYPE_ENUM:WE}=Cv(),v7=lo.get(Mn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?lo.get(Mn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",B7=lo.get(Mn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?lo.get(Mn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",QE="RS256",vR;Mv.exports={createTokens:H7,validateOperationToken:x7,refreshOperationToken:q7,validateRefreshToken:Pv};async function H7(e){if(MR.isEmpty(e)||typeof e!="object")throw Dr(new Error,Mr.INVALID_AUTH_OBJECT,Pr.BAD_REQUEST,void 0,void 0,!0);if(MR.isEmpty(e.username))throw Dr(new Error,Mr.USERNAME_REQUIRED,Pr.BAD_REQUEST,void 0,void 0,!0);if(MR.isEmpty(e.password))throw Dr(new Error,Mr.PASSWORD_REQUIRED,Pr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await BR.findAndValidateUser(e.username,e.password),!t)throw Dr(new Error,Mr.INVALID_CREDENTIALS,Pr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw c_.error(f),Dr(new Error,Mr.INVALID_CREDENTIALS,Pr.UNAUTHORIZED,void 0,void 0,!0)}let r=await jE(),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 Dv(i,r.private_key,r.passphrase),c=await l_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:B7,algorithm:QE,subject:WE.REFRESH}),l=Lv.hash(c),_=new L7(Mn.SYSTEM_SCHEMA_NAME,Mn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await C7(_)}catch(f){c_.error(f),d=f}if(d!==void 0||u.skipped_hashes.length>0)throw Dr(new Error,Mr.REFRESH_TOKEN_SAVE_FAILED,Pr.INTERNAL_SERVER_ERROR);return D7.signalUserChange(new P7(process.pid)),new M7(o,c)}a(H7,"createTokens");async function Dv(e,t,r){return await l_.sign(e,{key:t,passphrase:r},{expiresIn:v7,algorithm:QE,subject:WE.OPERATION})}a(Dv,"signOperationToken");async function jE(){if(vR===void 0)try{let e=UR.join(lo.getHdbBasePath(),Mn.LICENSE_KEY_DIR_NAME,Mn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=UR.join(lo.getHdbBasePath(),Mn.LICENSE_KEY_DIR_NAME,Mn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=UR.join(lo.getHdbBasePath(),Mn.LICENSE_KEY_DIR_NAME,Mn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await PR.readFile(e)).toString(),s=(await PR.readFile(t)).toString(),i=(await PR.readFile(r)).toString();vR=new U7(i,s,n)}catch(e){throw c_.error(e),Dr(new Error,Mr.NO_ENCRYPTION_KEYS,Pr.INTERNAL_SERVER_ERROR)}return vR}a(jE,"getJWTRSAKeys");async function q7(e){if(!e)throw Dr(new Error,Mr.INVALID_BODY,Pr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Dr(new Error,Mr.REFRESH_TOKEN_REQUIRED,Pr.BAD_REQUEST,void 0,void 0,!0);await Pv(e.refresh_token);let t=await jE(),r=await l_.decode(e.refresh_token);return{operation_token:await Dv({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(q7,"refreshOperationToken");async function x7(e){try{let t=await jE(),r=await l_.verify(e,t.public_key,{algorithms:QE,subject:WE.OPERATION});return await BR.findAndValidateUser(r.username,void 0,!1)}catch(t){throw c_.warn(t),t.name&&t.name==="TokenExpiredError"?Dr(new Error,Mr.TOKEN_EXPIRED,Pr.FORBIDDEN):Dr(new Error,Mr.INVALID_TOKEN,Pr.UNAUTHORIZED)}}a(x7,"validateOperationToken");async function Pv(e){let t;try{let r=await jE(),n=await l_.verify(e,r.public_key,{algorithms:QE,subject:WE.REFRESH});t=await BR.findAndValidateUser(n.username,void 0,!1)}catch(r){throw c_.warn(r),r.name&&r.name==="TokenExpiredError"?Dr(new Error,Mr.TOKEN_EXPIRED,Pr.FORBIDDEN):Dr(new Error,Mr.INVALID_TOKEN,Pr.UNAUTHORIZED)}if(!Lv.validate(t.refresh_token,e))throw Dr(new Error,Mr.INVALID_TOKEN,Pr.UNAUTHORIZED);return t}a(Pv,"validateRefreshToken")});var HR=g((cAe,Bv)=>{"use strict";var G7=yv(),qc=require("passport"),F7=require("passport-local").Strategy,k7=require("passport-http").BasicStrategy,$7=require("util"),V7=yr(),vv=$7.callbackify(V7.findAndValidateUser),aAe=Kr(),Y7=C(),Uv=u_();qc.use(new F7(function(e,t,r){vv(e,t,r)}));qc.use(new k7(function(e,t,r){vv(e,t,r)}));qc.serializeUser(function(e,t){t(null,e)});qc.deserializeUser(function(e,t){t(null,e)});function K7(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":qc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Y7.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Uv.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):Uv.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:qc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(K7,"authorize");function W7(e,t){let r=G7(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(W7,"checkPermissions");Bv.exports={authorize:K7,checkPermissions:W7}});var xc=g((uAe,Hv)=>{"use strict";var qR=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},xR=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};Hv.exports={Node:qR,NodeSubscription:xR}});var xv=g((dAe,qv)=>{"use strict";var Q7=C().OPERATIONS_ENUM,GR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Q7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};qv.exports=GR});var __=g((EAe,Gv)=>{"use strict";var FR=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},kR=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};Gv.exports={RemotePayloadObject:FR,RemotePayloadSubscription:kR}});var kv=g((pAe,Fv)=>{"use strict";var $R=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};Fv.exports=$R});var Yv=g((RAe,Vv)=>{"use strict";var j7=kv(),SAe=dt(),$v=Ve(),z7=G(),{getSchemaPath:TAe,getTransactionAuditStorePath:gAe}=Je(),{getDatabases:J7}=(ge(),ie(Ge));Vv.exports=X7;async function X7(e){let t=new j7;try{let r=J7()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await $v.environmentDataSize(schema_path,e.name),o=await $v.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){z7.warn(`unable to stat table dbi due to ${r}`)}return t}a(X7,"lmdbGetTableSize")});var Wv=g((OAe,Kv)=>{"use strict";var VR=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};Kv.exports=VR});var di=g((IAe,Jv)=>{"use strict";var Z7=require("fs-extra"),eee=require("path"),or=require("systeminformation"),uo=G(),tee=pt(),YR=tt(),JE=C(),ree=Yv(),zv=zi(),{getThreadInfo:Qv}=rt(),tA=J();tA.initSync();var nee=Wv(),{openEnvironment:bAe}=Ve(),{getSchemaPath:yAe}=Je(),{database:see}=(ge(),ie(Ge)),zE;Jv.exports={getHDBProcessInfo:jR,getNetworkInfo:JR,getDiskInfo:zR,getMemoryInfo:QR,getCPUInfo:WR,getTimeInfo:KR,getSystemInformation:XR,systemInformation:iee,getTableSize:ZR,getMetrics:eA};function KR(){return or.time()}a(KR,"getTimeInfo");async function WR(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:_,...u}=await or.cpu();u.cpu_speed=await or.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:m,raw_currentload_user:S,cpus:A,...T}=await or.currentLoad();return T.cpus=[],A.forEach(R=>{let{raw_load:U,raw_load_idle:B,raw_load_irq:v,raw_load_nice:P,raw_load_system:K,raw_load_user:V,...Y}=R;T.cpus.push(Y)}),u.current_load=T,u}catch(e){return uo.error(`error in getCPUInfo: ${e}`),{}}}a(WR,"getCPUInfo");async function QR(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await or.mem();return Object.assign(s,process.memoryUsage())}catch(e){return uo.error(`error in getMemoryInfo: ${e}`),{}}}a(QR,"getMemoryInfo");async function jR(){let e={core:[],clustering:[]};try{let t=await or.processes(),r;try{r=Number.parseInt(await Z7.readFile(eee.join(tA.get(JE.CONFIG_PARAMS.ROOTPATH),JE.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===JE.NODE_ERROR_CODES.ENOENT)uo.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");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 uo.error(`error in getHDBProcessInfo: ${t}`),e}}a(jR,"getHDBProcessInfo");async function zR(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await or.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,..._}=await or.fsStats();return e.read_write=_,e.size=await or.fsSize(),e}catch(t){return uo.error(`error in getDiskInfo: ${t}`),e}}a(zR,"getDiskInfo");async function JR(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await or.networkInterfaceDefault(),e.latency=await or.inetChecksite("google.com"),(await or.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:_,ieee8021xState:u,carrier_changes:d,...f}=n;e.interfaces.push(f)}),(await or.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return uo.error(`error in getNetworkInfo: ${t}`),e}}a(JR,"getNetworkInfo");async function XR(){if(zE!==void 0)return zE;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await or.osInfo();e=c;let l=await or.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,zE=e,zE}catch(t){return uo.error(`error in getSystemInformation: ${t}`),e}}a(XR,"getSystemInformation");async function ZR(){let e=[],t=await zv.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await ree(n));return e}a(ZR,"getTableSize");async function eA(){let e=await zv.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=see({database:r,table:s}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[l,_,u]=c.trim().split(" ");return{pid:l,thread:_,txnid:u}}),n[s]=o}catch(i){uo.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(eA,"getMetrics");async function jv(){if(tA.get(JE.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await tee.getNATSReferences(),r=await t.streams.info(YR.WORK_QUEUE_CONSUMER_NAMES.stream_name),n=await e.consumers.get(YR.WORK_QUEUE_CONSUMER_NAMES.stream_name,YR.WORK_QUEUE_CONSUMER_NAMES.durable_name),s={ingest:{stream:{...r.state},consumer:{num_ack_pending:n._info.num_ack_pending,num_redelivered:n._info.num_redelivered,num_waiting:n._info.num_waiting,num_pending:n._info.num_pending}}};return r.sources&&(s.ingest.stream.sources=r.sources),s}}a(jv,"getNatsStreamInfo");async function iee(e){let t=new nee;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await XR(),t.time=KR(),t.cpu=await WR(),t.memory=await QR(),t.disk=await zR(),t.network=await JR(),t.harperdb_processes=await jR(),t.table_size=await ZR(),t.metrics=await eA(),t.threads=await Qv(),t.replication=await jv(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await XR();break;case"time":t.time=KR();break;case"cpu":t.cpu=await WR();break;case"memory":t.memory=await QR();break;case"disk":t.disk=await zR();break;case"network":t.network=await JR();break;case"harperdb_processes":t.harperdb_processes=await jR();break;case"table_size":t.table_size=await ZR();break;case"database_metrics":case"metrics":t.metrics=await eA();break;case"threads":t.threads=await Qv();break;case"replication":t.replication=await jv();break;default:break}return t}a(iee,"systemInformation")});var fi=g((DAe,t0)=>{"use strict";var oee=Or(),rA=Q(),aee=require("util"),Ra=C(),Xv=J();Xv.initSync();var cee=HR(),Zv=Ar(),{Node:CAe,NodeSubscription:LAe}=xc(),lee=Sc(),uee=xv(),{RemotePayloadObject:_ee,RemotePayloadSubscription:dee}=__(),{handleHDBError:fee,hdb_errors:Eee}=se(),{HTTP_STATUS_CODES:hee,HDB_ERROR_MSGS:pee}=Eee,mee=Xn(),See=di(),Tee=Fi(),{getDatabases:gee}=(ge(),ie(Ge)),Ree=aee.promisify(cee.authorize),Aee=Zv.searchByHash,Oee=Zv.searchByValue;t0.exports={authHeaderToUser:Nee,isEmpty:bee,getNodeRecord:yee,upsertNodeRecord:Iee,buildNodePayloads:wee,checkClusteringEnabled:Cee,getAllNodeRecords:Lee,getSystemInfo:Dee,reverseSubscription:e0};async function Nee(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Ree(t,null),e}a(Nee,"authHeaderToUser");function bee(e){return e==null}a(bee,"isEmpty");async function yee(e){let t=new lee(Ra.SYSTEM_SCHEMA_NAME,Ra.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Aee(t)}a(yee,"getNodeRecord");async function Iee(e){let t=new uee(Ra.SYSTEM_SCHEMA_NAME,Ra.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return oee.upsert(t)}a(Iee,"upsertNodeRecord");function e0(e){if(rA.isEmpty(e.subscribe)||rA.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(e0,"reverseSubscription");function wee(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:_}=c,u=rA.getTableHashAttribute(l,_),{subscribe:d,publish:f}=e0(c),E=gee()[l]?.[_],h=new dee(l,_,u,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new _ee(r,t,s,n)}a(wee,"buildNodePayloads");function Cee(){if(!Xv.get(Ra.CONFIG_PARAMS.CLUSTERING_ENABLED))throw fee(new Error,pee.CLUSTERING_NOT_ENABLED,hee.BAD_REQUEST,void 0,void 0,!0)}a(Cee,"checkClusteringEnabled");async function Lee(){let e=new mee(Ra.SYSTEM_SCHEMA_NAME,Ra.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Oee(e))}a(Lee,"getAllNodeRecords");async function Dee(){let e=await See.getSystemInformation();return{hdb_version:Tee.version(),node_version:e.node_version,platform:e.platform}}a(Dee,"getSystemInfo")});var nA=g((MAe,l0)=>{"use strict";var XE=pt(),r0=Q(),n0=tt(),s0=C(),ZE=G(),i0=xE(),Pee=Su(),{RemotePayloadObject:Mee}=__(),{handleHDBError:o0,hdb_errors:Uee}=se(),{HTTP_STATUS_CODES:a0}=Uee,{NodeSubscription:c0}=xc();l0.exports=vee;async function vee(e,t){let r;try{r=await XE.request(`${t}.${n0.REQUEST_SUFFIX}`,new Mee(s0.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),ZE.trace("Response from remote describe all request:",r)}catch(o){ZE.error(`addNode received error from describe all request to remote node: ${o}`);let c=XE.requestErrorHandler(o,"add_node",t);throw o0(new Error,c,a0.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===n0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw o0(new Error,o,a0.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===s0.SYSTEM_SCHEMA_NAME){await XE.createLocalTableStream(l,c);let h=new c0(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=r0.doesSchemaExist(l),u=n[l]!==void 0,d=c?r0.doesTableExist(l,c):!0,f=c?n?.[l]?.[c]!==void 0:!0;if(!_&&!u||!d&&!f){s.push(o);continue}if(!_&&u&&(ZE.trace(`addNode creating schema: ${l}`),await i0.createSchema({operation:"create_schema",schema:l})),!d&&f){ZE.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Pee(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await i0.createTable(h)}await XE.createLocalTableStream(l,c);let E=new c0(l,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(vee,"reviewSubscriptions")});var E_=g((vAe,d0)=>{"use strict";var{handleHDBError:eh,hdb_errors:Bee}=se(),{HTTP_STATUS_CODES:th}=Bee,{addUpdateNodeValidator:Hee}=YE(),d_=G(),_0=C(),u0=tt(),qee=Q(),sA=pt(),f_=fi(),xee=J(),Gee=nA(),{Node:Fee,NodeSubscription:kee}=xc(),{broadcast:$ee}=rt(),Vee="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Yee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Kee=xee.get(_0.CONFIG_PARAMS.CLUSTERING_NODENAME);d0.exports=Wee;async function Wee(e,t=!1){d_.trace("addNode called with:",e),f_.checkClusteringEnabled();let r=Hee(e);if(r)throw eh(r,r.message,th.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await f_.getNodeRecord(n);if(!qee.isEmptyOrZeroLength(d))throw eh(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,th.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Gee(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Vee,o;let c=f_.buildNodePayloads(s,Kee,_0.OPERATIONS_ENUM.ADD_NODE,await f_.getSystemInfo());d_.trace("addNode sending remote payload:",c);let l;try{l=await sA.request(`${n}.${u0.REQUEST_SUFFIX}`,c)}catch(d){d_.error(`addNode received error from request: ${d}`);let f=sA.requestErrorHandler(d,"add_node",n);throw eh(new Error,f,th.INTERNAL_SERVER_ERROR,"error",f)}if(l.status===u0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${l.message}`;throw eh(new Error,d,th.INTERNAL_SERVER_ERROR,"error",d)}d_.trace(l);let _=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];d_.trace("Add node updating work stream for node:",n,"subscriptions:",E),await sA.updateWorkStream(E,n),s[d].start_time===void 0&&delete s[d].start_time,_.push(new kee(E.schema,E.table,E.publish,E.subscribe))}let u=new Fee(n,_,l.system_info);return await f_.upsertNodeRecord(u),$ee({type:"nats_update"}),i.length>0?o.message=Yee:o.message=`Successfully added '${n}' to manifest`,o}a(Wee,"addNode")});var cA=g((qAe,h0)=>{"use strict";var{handleHDBError:iA,hdb_errors:Qee}=se(),{HTTP_STATUS_CODES:oA}=Qee,{addUpdateNodeValidator:jee}=YE(),h_=G(),E0=C(),f0=tt(),HAe=Q(),aA=pt(),p_=fi(),zee=J(),{cloneDeep:Jee}=require("lodash"),Xee=nA(),{Node:Zee,NodeSubscription:ete}=xc(),{broadcast:tte}=rt(),rte="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",nte="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",ste=zee.get(E0.CONFIG_PARAMS.CLUSTERING_NODENAME);h0.exports=ite;async function ite(e){h_.trace("updateNode called with:",e),p_.checkClusteringEnabled();let t=jee(e);if(t)throw iA(t,t.message,oA.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await p_.getNodeRecord(r);s.length>0&&(n=Jee(s));let{added:i,skipped:o}=await Xee(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=rte,c;let l=p_.buildNodePayloads(i,ste,E0.OPERATIONS_ENUM.UPDATE_NODE,await p_.getSystemInfo());h_.trace("updateNode sending remote payload:",l);let _;try{_=await aA.request(`${r}.${f0.REQUEST_SUFFIX}`,l)}catch(u){h_.error(`updateNode received error from request: ${u}`);let d=aA.requestErrorHandler(u,"update_node",r);throw iA(new Error,d,oA.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===f0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw iA(new Error,u,oA.INTERNAL_SERVER_ERROR,"error",u)}h_.trace(_);for(let u=0,d=i.length;u<d;u++){let f=i[u];h_.trace(`updateNode updating work stream for node: ${r} subscription:`,f),await aA.updateWorkStream(f,r),i[u].start_time===void 0&&delete i[u].start_time}return n||(n=[new Zee(r,[],_.system_info)]),await ote(n[0],i,_.system_info),o.length>0?c.message=nte:c.message=`Successfully updated '${r}'`,c}a(ite,"updateNode");async function ote(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 ete(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await p_.upsertNodeRecord(n),tte({type:"nats_update"})}a(ote,"updateNodeTable")});var g0=g((GAe,T0)=>{"use strict";var S0=require("joi"),{string:p0}=S0.types(),ate=nt(),m0=C(),cte=J(),lte=tt();T0.exports=ute;function ute(e){let t=p0.invalid(cte.get(m0.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(lte.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=S0.object({operation:p0.valid(m0.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return ate.validateBySchema(e,r)}a(ute,"removeNodeValidator")});var nh=g((kAe,y0)=>{"use strict";var{handleHDBError:R0,hdb_errors:_te}=se(),{HTTP_STATUS_CODES:A0}=_te,dte=g0(),m_=G(),O0=fi(),fte=Q(),rh=C(),N0=tt(),b0=pt(),Ete=J(),{RemotePayloadObject:hte}=__(),{NodeSubscription:pte}=xc(),mte=mu(),Ste=ra(),{broadcast:Tte}=rt(),gte=Ete.get(rh.CONFIG_PARAMS.CLUSTERING_NODENAME);y0.exports=Rte;async function Rte(e){m_.trace("removeNode called with:",e),O0.checkClusteringEnabled();let t=dte(e);if(t)throw R0(t,t.message,A0.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await O0.getNodeRecord(r);if(fte.isEmptyOrZeroLength(n))throw R0(new Error,`Node '${r}' was not found.`,A0.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new hte(rh.OPERATIONS_ENUM.REMOVE_NODE,gte,[]),i,o=!1;try{i=await b0.request(`${r}.${N0.REQUEST_SUFFIX}`,s),m_.trace("Remove node reply from remote node:",r,i)}catch(l){m_.error("removeNode received error from request:",l),o=!0}for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];m_.trace(`Remove node removing subscription: ${u.schema}.${u.table} for node: ${r}`);let d=new pte(u.schema,u.table,!1,!1);await b0.updateWorkStream(d,r)}let c=new mte(rh.SYSTEM_SCHEMA_NAME,rh.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Ste.deleteRecord(c),Tte({type:"nats_update"}),i?.status===N0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(m_.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(Rte,"removeNode")});var C0=g((VAe,w0)=>{"use strict";var I0=require("joi"),{string:Ate,array:Ote}=I0.types(),Nte=nt(),bte=YE();w0.exports=yte;function yte(e){let t=I0.object({operation:Ate.valid("configure_cluster").required(),connections:Ote.items(bte.validation_schema).required()});return Nte.validateBySchema(e,t)}a(yte,"configureClusterValidator")});var ih=g((KAe,U0)=>{"use strict";var Ite=C(),sh=G(),wte=Q(),Cte=nh(),Lte=E_(),L0=fi(),Dte=C0(),{handleHDBError:D0,hdb_errors:Pte}=se(),{HTTP_STATUS_CODES:P0}=Pte,Mte="Configure cluster complete.",Ute="Failed to configure the cluster. Check the logs for more details.",vte="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";U0.exports=Bte;async function Bte(e){sh.trace("configure cluster called with:",e),L0.checkClusteringEnabled();let t=Dte(e);if(t)throw D0(t,t.message,P0.BAD_REQUEST,void 0,void 0,!0);let r=await L0.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(M0(Cte,{operation:Ite.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);sh.trace("All results from configure_cluster remove node:",s);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(M0(Lte,E,E.node_name))}let c=await Promise.allSettled(i);sh.trace("All results from configure_cluster add node:",c);let l=[],_=[],u=!1,d=s.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(sh.error(h.reason),l.includes(h.reason.node_name)||l.push(h.reason.node_name)),h.status==="fulfilled"&&(u=!0);let m=h?.value?.result;typeof m=="string"&&m.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(wte.isEmptyOrZeroLength(l))return{message:Mte,connections:_};if(u)return{message:vte,failed_nodes:l,connections:_};throw D0(new Error,Ute,P0.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Bte,"configureCluster");async function M0(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(M0,"functionWrapper")});var B0=g((QAe,v0)=>{"use strict";var oh=require("joi"),Hte=nt(),{validateSchemaExists:qte,validateTableExists:xte,validateSchemaName:Gte}=Ns(),Fte=oh.object({operation:oh.string().valid("purge_stream"),schema:oh.string().custom(qte).custom(Gte).required(),table:oh.string().custom(xte).required()});function kte(e){return Hte.validateBySchema(e,Fte)}a(kte,"purgeStreamValidator");v0.exports=kte});var lA=g((zAe,H0)=>{"use strict";var{handleHDBError:$te,hdb_errors:Vte}=se(),{HTTP_STATUS_CODES:Yte}=Vte,Kte=B0(),Wte=pt(),Qte=fi();H0.exports=jte;async function jte(e){if(e.purge_ingest!==!0){let s=Kte(e);if(s)throw $te(s,s.message,Yte.BAD_REQUEST,void 0,void 0,!0)}Qte.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await Wte.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(jte,"purgeStream")});var ch=g((XAe,$0)=>{"use strict";var _A=fi(),zte=pt(),G0=J(),ah=C(),Aa=tt(),Jte=Q(),uA=G(),{RemotePayloadObject:Xte}=__(),{ErrorCode:q0}=require("nats"),x0=G0.get(ah.CONFIG_PARAMS.CLUSTERING_ENABLED),F0=G0.get(ah.CONFIG_PARAMS.CLUSTERING_NODENAME);$0.exports={clusterStatus:Zte,buildNodeStatus:k0};async function Zte(){let e={node_name:F0,is_enabled:x0,connections:[]};if(!x0)return e;let t=await _A.getAllNodeRecords();if(Jte.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(k0(t[n],e.connections));return await Promise.allSettled(r),e}a(Zte,"clusterStatus");async function k0(e,t){let r=e.name,n=new Xte(ah.OPERATIONS_ENUM.CLUSTER_STATUS,F0,void 0,await _A.getSystemInfo()),s,i,o=Aa.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await zte.request(Aa.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Aa.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Aa.CLUSTER_STATUS_STATUSES.CLOSED,uA.error(`Error getting node status from ${r} `,s))}catch(l){uA.warn(`Error getting node status from ${r}`,l),l.code===q0.NoResponders?o=Aa.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===q0.Timeout?o=Aa.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Aa.CLUSTER_STATUS_STATUSES.CLOSED}let c=new ere(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!==ah.PRE_4_0_0_VERSION&&await _A.upsertNodeRecord(l)}catch(l){uA.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(k0,"buildNodeStatus");function ere(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(ere,"NodeStatusObject")});var uh=g((eOe,V0)=>{"use strict";var{handleHDBError:tre,hdb_errors:rre}=se(),{HTTP_STATUS_CODES:nre}=rre,sre=pt(),ire=fi(),dA=Q(),lh=require("joi"),ore=nt(),are=2e3,cre=lh.object({timeout:lh.number().min(1),connected_nodes:lh.boolean(),routes:lh.boolean()});V0.exports=lre;async function lre(e){ire.checkClusteringEnabled();let t=ore.validateBySchema(e,cre);if(t)throw tre(t,t.message,nre.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||dA.autoCastBoolean(n),o=s===void 0||dA.autoCastBoolean(s),c={nodes:[]},l=await sre.getServerList(r??are),_={};if(i)for(let u=0,d=l.length;u<d;u++){let f=l[u].statsz;f&&(_[l[u].server.name]=f.routes)}for(let u=0,d=l.length;u<d;u++){if(l[u].statsz)continue;let f=l[u].server,E=l[u].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:l[u].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(m=>{h.connected_nodes.includes(m.name.slice(0,-4))||h.connected_nodes.push(m.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(m=>({host:m.split(":")[0],port:dA.autoCast(m.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(lre,"clusterNetwork")});var Q0=g((rOe,W0)=>{"use strict";var fA=require("joi"),Y0=nt(),{route_constraints:K0}=lg();W0.exports={setRoutesValidator:ure,deleteRoutesValidator:_re};function ure(e){let t=fA.object({server:fA.valid("hub","leaf").required(),routes:K0.required()});return Y0.validateBySchema(e,t)}a(ure,"setRoutesValidator");function _re(e){let t=fA.object({routes:K0.required()});return Y0.validateBySchema(e,t)}a(_re,"deleteRoutesValidator")});var dh=g((sOe,X0)=>{"use strict";var Oa=ht(),EA=Q(),_h=C(),j0=Q0(),{handleHDBError:z0,hdb_errors:dre}=se(),{HTTP_STATUS_CODES:J0}=dre,fre="cluster routes successfully set",Ere="cluster routes successfully deleted";X0.exports={setRoutes:hre,getRoutes:pre,deleteRoutes:mre};function hre(e){let t=j0.setRoutesValidator(e);if(t)throw z0(t,t.message,J0.BAD_REQUEST,void 0,void 0,!0);let r=Oa.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=EA.autoCast(_.port);let u=n.some(f=>f.host===_.host&&f.port===_.port),d=s.some(f=>f.host===_.host&&f.port===_.port);u||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?Oa.updateConfigValue(_h.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):Oa.updateConfigValue(_h.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:fre,set:o,skipped:i}}a(hre,"setRoutes");function pre(){let e=Oa.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(pre,"getRoutes");function mre(e){let t=j0.deleteRoutesValidator(e);if(t)throw z0(t,t.message,J0.BAD_REQUEST,void 0,void 0,!0);let r=Oa.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,l=!1;for(let _=0,u=e.routes.length;_<u;_++){let d=e.routes[_],f=!1;for(let E=0,h=n.length;E<h;E++){let m=n[E];if(d.host===m.host&&d.port===m.port){n.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,m=s.length;h<m;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),l=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(n=EA.isEmptyOrZeroLength(n)?null:n,Oa.updateConfigValue(_h.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=EA.isEmptyOrZeroLength(s)?null:s,Oa.updateConfigValue(_h.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:Ere,deleted:i,skipped:o}}a(mre,"deleteRoutes")});var eB=g((oOe,Z0)=>{"use strict";var S_=require("alasql"),Na=require("recursive-iterator"),as=G(),Sre=Q(),T_=C(),hA=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,gre(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=>T_.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=>!T_.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][T_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Tre(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(_=>!T_.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new S_.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 Tre(e){return e.filter(t=>t[T_.PERMS_CRUD_ENUM.READ])}a(Tre,"filterReadRestrictedAttrs");function gre(e,t,r,n,s){Rre(e,t,r,n,s)}a(gre,"interpretAST");function g_(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(g_,"addSchemaTableToMap");function Rre(e,t,r,n,s){if(!e){as.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof S_.yy.Insert?bre(e,t,r):e instanceof S_.yy.Select?Are(e,t,r,n,s):e instanceof S_.yy.Update?Ore(e,t,r):e instanceof S_.yy.Delete?Nre(e,t,r):as.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Rre,"getRecordAttributesAST");function Are(e,t,r,n,s){if(!e){as.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Sre.isEmptyOrZeroLength(i)){as.error("No schema specified");return}e.from.forEach(c=>{g_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),g_(c.table,t,r,n,s)});let o=new Na(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,_=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{as.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(c.columnid)<0&&t.get(_).get(l).push(c.columnid)}if(e.where){let c=new Na(e.where),l=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid?_.tableid:l;if(!t.get(i).has(u))if(r.has(u))u=r.get(u);else{as.info(`table specified as ${u} not found.`);continue}t.get(i).get(u).indexOf(_.columnid)<0&&t.get(i).get(u).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Na(c.on);for(let{node:_}of l)if(_&&_.columnid){let u=_.tableid,d=s.get(u);if(!t.get(d).has(u))if(r.has(u))u=r.get(u);else{as.info(`table specified as ${u} not found.`);continue}t.get(d).get(u).indexOf(_.columnid)<0&&t.get(d).get(u).push(_.columnid)}}),e.order){let c=new Na(e.order);for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid,u=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{as.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(l.columnid)<0&&t.get(u).get(_).push(l.columnid)}}}a(Are,"getSelectAttributes");function Ore(e,t,r){if(!e){as.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Na(e.columns),s=e.table.databaseid;g_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&pA(e.table.tableid,s,i.columnid,t,r)}a(Ore,"getUpdateAttributes");function Nre(e,t,r){if(!e){as.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Na(e.where),s=e.table.databaseid;g_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&pA(e.table.tableid,s,i.columnid,t,r)}a(Nre,"getDeleteAttributes");function bre(e,t,r){if(!e){as.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Na(e.columns),s=e.into.databaseid;g_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&pA(e.into.tableid,s,i.columnid,t,r)}a(bre,"getInsertAttributes");function pA(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(pA,"pushAttribute");Z0.exports=hA});var Eh=g((cOe,sB)=>{var fh=oa(),tB=require("chalk"),dn=G(),rB=require("prompt"),{promisify:yre}=require("util"),mA=C(),Ire=require("fs-extra"),wre=require("path"),Cre=Q(),Lre=Fi(),nB=J();nB.initSync();var Dre=require("moment"),Pre=yre(rB.get),Mre=wre.join(nB.getHdbBasePath(),mA.LICENSE_KEY_DIR_NAME,mA.LICENSE_FILE_NAME,mA.LICENSE_FILE_NAME);sB.exports={getFingerprint:vre,setLicense:Ure,parseLicense:SA,register:Bre,getRegistrationInfo:qre};async function Ure(e){if(e&&e.key&&e.company){try{dn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await SA(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw dn.error(r),dn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Ure,"setLicense");async function vre(){let e={};try{e=await fh.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw dn.error(r),dn.error(t),new Error(r)}return e}a(vre,"getFingerprint");async function SA(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");dn.info("Validating license input...");let r=fh.validateLicense(e,t);if(dn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(dn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(dn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{dn.info("writing license to disk"),await Ire.writeFile(Mre,JSON.stringify({license_key:e,company:t}))}catch(n){throw dn.error("Failed to write License"),n}return"Registration successful."}a(SA,"parseLicense");async function Bre(){let e=await Hre();return SA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Bre,"register");async function Hre(){let e=await fh.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:tB.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:tB.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{rB.start()}catch(n){dn.error(n)}let r;try{r=await Pre(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(Hre,"promptForRegistration");async function qre(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await fh.getLicense()}catch(r){throw dn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Cre.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Lre.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Dre.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(qre,"getRegistrationInfo")});var oB=g((uOe,iB)=>{"use strict";var xre=tt(),TA=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+xre.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:d,routes:f,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};iB.exports=TA});var lB=g((dOe,cB)=>{"use strict";var aB=tt(),gA=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+aB.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+aB.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"}};cB.exports=gA});var _B=g((EOe,uB)=>{"use strict";var RA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};uB.exports=RA});var fB=g((pOe,dB)=>{"use strict";var Gre=tt(),AA=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Gre.SERVER_SUFFIX.ADMIN,this.password=r}};dB.exports=AA});var Th=g((SOe,pB)=>{"use strict";var Gc=require("path"),mh=require("fs-extra"),Fre=oB(),kre=lB(),$re=_B(),Vre=fB(),OA=yr(),kc=Q(),Ur=ht(),ph=C(),R_=tt(),{CONFIG_PARAMS:St}=ph,A_=G(),O_=J(),EB=li(),NA=pt(),Fc="clustering",Yre=1e4,hB=5;pB.exports={generateNatsConfig:Wre,removeNatsConfig:Qre,getHubConfigPath:Kre};function Kre(){let e=O_.get(St.ROOTPATH);return Gc.join(e,Fc,R_.NATS_CONFIG_FILES.HUB_SERVER)}a(Kre,"getHubConfigPath");async function Wre(e=!1,t=void 0){O_.initSync();let r=O_.get(St.ROOTPATH),n=Gc.join(r,Fc,R_.PID_FILES.HUB),s=Gc.join(r,Fc,R_.PID_FILES.LEAF),i=Ur.getConfigFromFile(St.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Gc.join(r,Fc,R_.NATS_CONFIG_FILES.HUB_SERVER),c=Gc.join(r,Fc,R_.NATS_CONFIG_FILES.LEAF_SERVER),l=Ur.getConfigFromFile(St.CLUSTERING_TLS_CERTIFICATE),_=Ur.getConfigFromFile(St.CLUSTERING_TLS_PRIVATEKEY),u=Ur.getConfigFromFile(St.CLUSTERING_TLS_CERT_AUTH),d=Ur.getConfigFromFile(St.CLUSTERING_TLS_INSECURE),f=Ur.getConfigFromFile(St.CLUSTERING_TLS_VERIFY),E=Ur.getConfigFromFile(St.CLUSTERING_NODENAME),h=Ur.getConfigFromFile(St.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await NA.checkNATSServerInstalled()||Sh("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await OA.listUsers(),S=Ur.getConfigFromFile(St.CLUSTERING_USER),A=await OA.getClusterUser();(kc.isEmpty(A)||A.active!==!0)&&Sh(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await hh(St.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await hh(St.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await hh(St.CLUSTERING_HUBSERVER_NETWORK_PORT),await hh(St.CLUSTERING_LEAFSERVER_NETWORK_PORT));let T=[],R=[];for(let[Y,ue]of m.entries())ue.role.role===ph.ROLE_TYPES_ENUM.CLUSTER_USER&&ue.active&&(T.push(new Vre(ue.username,EB.decrypt(ue.hash))),R.push(new $re(ue.username,EB.decrypt(ue.hash))));let U=[],{hub_routes:B}=Ur.getClusteringRoutes();if(!kc.isEmptyOrZeroLength(B))for(let Y of B)U.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${Y.host}:${Y.port}`);let v=new Fre(Ur.getConfigFromFile(St.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,l,_,u,d,f,h,Ur.getConfigFromFile(St.CLUSTERING_HUBSERVER_CLUSTER_NAME),Ur.getConfigFromFile(St.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),U,T,R);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===ph.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await mh.writeJson(o,v),A_.trace(`Hub server config written to ${o}`));let P=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,V=new kre(Ur.getConfigFromFile(St.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[P],[K],T,R,l,_,u,d);u==null&&delete V.tls.ca_file,(t===void 0||t===ph.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await mh.writeJson(c,V),A_.trace(`Leaf server config written to ${c}`))}a(Wre,"generateNatsConfig");async function hh(e){let t=O_.get(e);return kc.isEmpty(t)&&Sh(`port undefined for '${e}'`),await kc.isPortTaken(t)&&Sh(`'${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(hh,"isPortAvailable");function Sh(e){let t=`Error generating clustering config: ${e}`;A_.error(t),console.error(t),process.exit(1)}a(Sh,"generateNatsConfigError");async function Qre(e){let{port:t,config_file:r}=NA.getServerConfig(e),{username:n,decrypt_hash:s}=await OA.getClusterUser(),i=0,o=2e3;for(;i<hB;){try{let _=await NA.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){A_.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=hB)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);await kc.async_set_timeout(o*(i*2))}let c="0".repeat(Yre),l=Gc.join(O_.get(St.ROOTPATH),Fc,r);await mh.writeFile(l,c),await mh.remove(l),A_.notify(e,"started.")}a(Qre,"removeNatsConfig")});var AB=g((gOe,RB)=>{"use strict";var fn=J(),jre=oa(),me=C(),N_=tt(),Ei=require("path"),{PACKAGE_ROOT:Rh}=C(),mB=J(),gh=Q(),$c="/dev/null",zre=Ei.join(Rh,"launchServiceScripts"),SB=Ei.join(Rh,"utility/scripts"),Jre=Ei.join(SB,me.HDB_RESTART_SCRIPT),TB=Ei.resolve(Rh,"dependencies",`${process.platform}-${process.arch}`,N_.NATS_BINARY_NAME);function gB(){let t=jre.licenseSearch().ram_allocation||me.RAM_ALLOCATION_ENUM.DEFAULT,r=me.MEM_SETTING_KEY+t,n={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return gh.noBootFile()&&(n[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=gh.getEnvCliRootPath()),{name:me.PROCESS_DESCRIPTORS.HDB,script:me.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Rh}}a(gB,"generateMainServerConfig");var Xre=9930;function Zre(){fn.initSync(!0);let e=fn.get(me.CONFIG_PARAMS.ROOTPATH),t=Ei.join(e,"clustering",N_.NATS_CONFIG_FILES.HUB_SERVER),r=Ei.join(fn.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=mB.get(me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=N_.LOG_LEVEL_FLAGS[fn.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Xre?"-"+n:""),script:TB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return fn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=$c,i.error_file=$c),i}a(Zre,"generateNatsHubServerConfig");var ene=9940;function tne(){fn.initSync(!0);let e=fn.get(me.CONFIG_PARAMS.ROOTPATH),t=Ei.join(e,"clustering",N_.NATS_CONFIG_FILES.LEAF_SERVER),r=Ei.join(fn.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=mB.get(me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=N_.LOG_LEVEL_FLAGS[fn.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==ene?"-"+n:""),script:TB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return fn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=$c,i.error_file=$c),i}a(tne,"generateNatsLeafServerConfig");function rne(){fn.initSync();let e=Ei.join(fn.get(me.CONFIG_PARAMS.LOGGING_ROOT),me.LOG_NAMES.HDB),t={name:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:me.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:zre,autorestart:!1};return fn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=$c,t.error_file=$c),t}a(rne,"generateClusteringUpgradeV4ServiceConfig");function nne(){let e={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.RESTART_HDB};return gh.noBootFile()&&(e[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=gh.getEnvCliRootPath()),{...{name:me.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:SB},script:Jre}}a(nne,"generateRestart");function sne(){return{apps:[gB()]}}a(sne,"generateAllServiceConfigs");RB.exports={generateAllServiceConfigs:sne,generateMainServerConfig:gB,generateRestart:nne,generateNatsHubServerConfig:Zre,generateNatsLeafServerConfig:tne,generateClusteringUpgradeV4ServiceConfig:rne}});var Vc=g((OOe,vB)=>{"use strict";var He=C(),ine=Q(),hi=Th(),b_=pt(),Ms=tt(),_o=AB(),Ah=J(),fo=G(),one=fi(),{startWorker:OB,onMessageFromWorkers:ane}=rt(),cne=di(),AOe=require("util"),lne=require("child_process"),une=require("fs"),{execFile:_ne}=lne,Ce;vB.exports={enterPM2Mode:dne,start:Eo,stop:bA,reload:bB,restart:yB,list:yA,describe:wB,connect:pi,kill:mne,startAllServices:Sne,startService:IA,getUniqueServicesList:CB,restartAllServices:Tne,isServiceRegistered:LB,reloadStopStart:DB,restartHdb:IB,deleteProcess:hne,startClusteringProcesses:MB,startClusteringThreads:UB,isHdbRestartRunning:pne,isClusteringRunning:Rne,stopClustering:gne,reloadClustering:Ane};var y_=!1;ane(e=>{e.type==="restart"&&Ah.initSync(!0)});function dne(){y_=!0}a(dne,"enterPM2Mode");function pi(){return Ce||(Ce=require("pm2")),new Promise((e,t)=>{Ce.connect((r,n)=>{fo.setupConsoleLogging(),r&&t(r),e(n)})})}a(pi,"connect");var vr,fne=10,NB;function Eo(e,t=!1){if(y_)return Ene(e);let r=_ne(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=vr.indexOf(r);o>-1&&vr.splice(o,1),!NB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<fne&&(une.existsSync(hi.getHubConfigPath())?Eo(e):(await hi.generateNatsConfig(!0),Eo(e),await new Promise(c=>setTimeout(c,3e3)),await hi.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await hi.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Ah.get(He.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,_=0,u;for(;l=c.exec(i);){if(l.index&&Ms.LOG_LEVEL_HIERARCHY[o]>=Ms.LOG_LEVEL_HIERARCHY[u||"info"]){let E=u===Ms.LOG_LEVELS.ERR||u===Ms.LOG_LEVELS.WRN?fo.OUTPUTS.STDERR:fo.OUTPUTS.STDOUT;fo.logCustomLevel(u||"info",E,n,i.slice(_,l.index).trim())}let[d,f]=l;_=l.index+d.length,u=Ms.LOG_LEVELS[f]}if(Ms.LOG_LEVEL_HIERARCHY[o]>=Ms.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===Ms.LOG_LEVELS.ERR||u===Ms.LOG_LEVELS.WRN?fo.OUTPUTS.STDERR:fo.OUTPUTS.STDOUT;fo.logCustomLevel(u||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),vr=[],!vr&&!t){let i=a(()=>{NB=!0,vr&&(vr.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)}vr.push(r)}a(Eo,"start");function Ene(e){return new Promise(async(t,r)=>{try{await pi()}catch(n){r(n)}Ce.start(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(Ene,"startWithPM2");function bA(e){if(!y_){for(let t of vr||[])t.name===e&&(vr.splice(vr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await pi()}catch(n){r(n)}Ce.stop(e,async(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.delete(e,(i,o)=>{i&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(o)})})})}a(bA,"stop");function bB(e){return new Promise(async(t,r)=>{try{await pi()}catch(n){r(n)}Ce.reload(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(bB,"reload");function yB(e){if(!y_)for(let t of vr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await pi()}catch(n){r(n)}Ce.restart(e,(n,s)=>{Ce.disconnect(),t(s)})})}a(yB,"restart");function hne(e){return new Promise(async(t,r)=>{try{await pi()}catch(n){r(n)}Ce.delete(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(hne,"deleteProcess");async function IB(){await Eo(_o.generateRestart())}a(IB,"restartHdb");async function pne(){let e=await yA();for(let t in e)if(e[t].name===He.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(pne,"isHdbRestartRunning");function yA(){return new Promise(async(e,t)=>{try{await pi()}catch(r){t(r)}Ce.list((r,n)=>{r&&(Ce.disconnect(),t(r)),Ce.disconnect(),e(n)})})}a(yA,"list");function wB(e){return new Promise(async(t,r)=>{try{await pi()}catch(n){r(n)}Ce.describe(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(wB,"describe");function mne(){if(!y_){for(let e of vr||[])e.kill();vr=[];return}return new Promise(async(e,t)=>{try{await pi()}catch(r){t(r)}Ce.killDaemon((r,n)=>{r&&(Ce.disconnect(),t(r)),Ce.disconnect(),e(n)})})}a(mne,"kill");async function Sne(){try{await MB(),await UB(),await Eo(_o.generateAllServiceConfigs())}catch(e){throw Ce?.disconnect(),e}}a(Sne,"startAllServices");async function IA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case He.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=_o.generateMainServerConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=_o.generateNatsIngestServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=_o.generateNatsReplyServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=_o.generateNatsHubServerConfig(),await Eo(r,t),await hi.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=_o.generateNatsLeafServerConfig(),await Eo(r,t),await hi.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=_o.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Eo(r)}catch(r){throw Ce?.disconnect(),r}}a(IA,"startService");async function CB(){try{let e=await yA(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Ce?.disconnect(),e}}a(CB,"getUniqueServicesList");async function Tne(e=[]){try{let t=!1,r=await CB();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 yB(o))}t&&await DB(He.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ce?.disconnect(),t}}a(Tne,"restartAllServices");async function LB(e){if(vr?.find(r=>r.name===e))return!0;let t=await cne.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(LB,"isServiceRegistered");async function DB(e){let t=Ah.get(He.CONFIG_PARAMS.THREADS_COUNT)??Ah.get(He.CONFIG_PARAMS.THREADS),r=await wB(e),n=ine.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await bA(e),await IA(e)):e===He.PROCESS_DESCRIPTORS.HDB?await IB():await bB(e)}a(DB,"reloadStopStart");var PB;async function MB(e=!1){for(let t in He.CLUSTERING_PROCESSES){let r=He.CLUSTERING_PROCESSES[t];await IA(r,e)}}a(MB,"startClusteringProcesses");async function UB(){PB=OB(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await b_.createWorkQueueStream(Ms.WORK_QUEUE_CONSUMER_NAMES),await b_.updateIngestStreamConsumer(),await b_.updateLocalStreams();let e=await one.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===He.PRE_4_0_0_VERSION){fo.info("Starting clustering upgrade 4.0.0 process"),OB(He.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(UB,"startClusteringThreads");async function gne(){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 PB.terminate();else{let t=He.CLUSTERING_PROCESSES[e];await bA(t)}}a(gne,"stopClustering");async function Rne(){for(let e in He.CLUSTERING_PROCESSES){let t=He.CLUSTERING_PROCESSES[e];if(await LB(t)===!1)return!1}return!0}a(Rne,"isClusteringRunning");async function Ane(){await hi.generateNatsConfig(!0),await b_.reloadNATSHub(),await b_.reloadNATSLeaf(),await hi.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await hi.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Ane,"reloadClustering")});var ba=g((bOe,kB)=>{"use strict";var One=require("minimist"),{isMainThread:LA,parentPort:qB}=require("worker_threads"),lt=C(),{PROCESS_DESCRIPTORS_VALIDATE:I_}=lt,Us=G(),DA=Q(),Oh=Th(),Yc=pt(),wA=tt(),xB=ht(),vs=Vc(),BB=di(),Nne=vo(),{restartWorkers:Nh,onMessageByType:bne}=rt(),{handleHDBError:yne,hdb_errors:Ine}=se(),{HTTP_STATUS_CODES:wne}=Ine,bh=J();bh.initSync();var w_=`Restarting HarperDB. This may take up to ${lt.RESTART_TIMEOUT_MS/1e3} seconds.`,Cne="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",HB="Clustering is not enabled so cannot be restarted",Lne="Invalid service",Kc,Un;kB.exports={restart:GB,restartService:PA};LA&&bne(lt.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?PA({service:e.workerType}):GB({operation:"restart"})});async function GB(e){Un=Object.keys(e).length===0,Kc=await vs.isServiceRegistered(lt.HDB_PROC_DESCRIPTOR);let t=One(process.argv);if(t.service){await PA(t);return}if(Un&&!Kc){console.error(Cne);return}if(Un&&console.log(w_),Kc){vs.enterPM2Mode(),Us.notify(w_);let r=Nne(Object.keys(lt.CONFIG_PARAM_MAP),!0);return DA.isEmptyOrZeroLength(Object.keys(r))||xB.updateConfigValue(void 0,void 0,r,!0,!0),Pne(),w_}return LA?(Us.notify(w_),setTimeout(()=>{Nh()},50)):qB.postMessage({type:lt.ITC_EVENT_TYPES.RESTART}),w_}a(GB,"restart");async function PA(e){let{service:t}=e;if(lt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw yne(new Error,Lne,wne.BAD_REQUEST,void 0,void 0,!0);if(Kc=await vs.isServiceRegistered(lt.HDB_PROC_DESCRIPTOR),!LA)return qB.postMessage({type:lt.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case I_.clustering:if(!bh.get(lt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=HB;break}Un&&console.log("Restarting clustering"),Us.notify("Restarting clustering"),await FB();break;case I_.clustering_config:case I_["clustering config"]:if(!bh.get(lt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=HB;break}Un&&console.log("Restarting clustering_config"),Us.notify("Restarting clustering_config"),await vs.reloadClustering();break;case"custom_functions":case"custom functions":case I_.harperdb:case I_.http_workers:if(Un&&!Kc){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Un&&console.log("Restarting http_workers"),Us.notify("Restarting http_workers"),Un?await vs.restart(lt.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Nh("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Us.error(r),Un&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(PA,"restartService");async function Dne(){await Yc.publishToStream(`${wA.SUBJECT_PREFIXES.TXN}.${wA.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,wA.WORK_QUEUE_CONSUMER_NAMES.stream_name,Yc.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(Dne,"postDummyNatsMsg");async function Pne(){await FB(),await vs.restart(lt.HDB_PROC_DESCRIPTOR),await DA.async_set_timeout(2e3),bh.get(lt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await CA(),Un&&(await Yc.closeConnection(),process.exit(0))}a(Pne,"restartPM2Mode");async function FB(){if(!xB.getConfigFromFile(lt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await BB.getHDBProcessInfo()).clustering.length===0)Us.trace("Clustering not running, restart will start clustering services"),await Oh.generateNatsConfig(!0),await vs.startClusteringProcesses(),await vs.startClusteringThreads(),await CA(),Un&&await Yc.closeConnection();else{await Dne(),await Oh.generateNatsConfig(!0),Kc?(Us.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await vs.restart(lt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await vs.restart(lt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await BB.getHDBProcessInfo()).clustering.forEach(s=>{Us.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await DA.async_set_timeout(3e3),await CA(),await Yc.updateLocalStreams(),Un&&await Yc.closeConnection(),Us.trace("Restart clustering restarting ingest and reply service threads");let t=Nh(lt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Nh(lt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(FB,"restartClustering");async function CA(){await Oh.removeNatsConfig(lt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Oh.removeNatsConfig(lt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(CA,"removeNatsConfig")});var ZB=g((wOe,XB)=>{"use strict";var IOe=require("lodash"),Br=C(),{handleHDBError:$B,hdb_errors:Mne}=se(),{HDB_ERROR_MSGS:Une,HTTP_STATUS_CODES:vne}=Mne,MA=G();XB.exports={getRolePermissions:Hne};var ya=Object.create(null),Bne=a(e=>({key:e,perms:{}}),"perms_template_obj"),WB=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),QB=a((e=!1,t=!1,r=!1,n=!1)=>({[Br.PERMS_CRUD_ENUM.READ]:e,[Br.PERMS_CRUD_ENUM.INSERT]:t,[Br.PERMS_CRUD_ENUM.UPDATE]:r,[Br.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),UA=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...QB(t,r,n,s)}),"table_perms_template"),VB=a((e,t=QB())=>({attribute_name:e,describe:JB(t),[C_]:t[C_],[vA]:t[vA],[BA]:t[BA]}),"attr_perms_template"),YB=a((e,t=!1)=>({attribute_name:e,describe:t,[C_]:t}),"timestamp_attr_perms_template"),{READ:C_,INSERT:vA,UPDATE:BA}=Br.PERMS_CRUD_ENUM,jB=Object.values(Br.PERMS_CRUD_ENUM),zB=[C_,vA,BA];function Hne(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[Br.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(ya[t]&&ya[t].key===n)return ya[t].perms;let s=qne(e,r);return ya[t]?ya[t].key=n:ya[t]=Bne(n),ya[t].perms=s,s}catch(r){if(!e[Br.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Br.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Br.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw MA.error(n),MA.debug(r),$B(new Error,Une.OUTDATED_PERMS_TRANSLATION_ERROR,vne.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
12
- ${r.stack}`;throw MA.error(n),$B(new Error)}}}a(Hne,"getRolePermissions");function qne(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Br.SYSTEM_SCHEMA_NAME]=n[Br.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]=xne(t[i]);return}r[i]=WB(),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],_=Gne(c,l);r[i].describe||jB.forEach(u=>{_[u]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=UA()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=UA()})}),r}a(qne,"translateRolePermissions");function xne(e){let t=WB(!0);return Object.keys(e).forEach(r=>{t.tables[r]=UA(!0,!0,!0,!0,!0)}),t}a(xne,"createStructureUserPermissions");function Gne(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,u)=>{let{attribute_name:d}=u,f=u;return Br.TIME_STAMP_NAMES.includes(d)&&(f=YB(d,u[C_])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=VB(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let u=i[_];u.describe=JB(u),s.attribute_permissions.push(u),c||Fne(u,l)}else if(_!==o){let u;Br.TIME_STAMP_NAMES.includes(_)?u=YB(_):u=VB(_),s.attribute_permissions.push(u)}}),c||s.attribute_permissions.push(l),s.describe=KB(s),s}else return e.describe=KB(e),e}a(Gne,"getTableAttrPerms");function KB(e){return jB.filter(t=>e[t]).length>0}a(KB,"getSchemaTableDescribePerm");function JB(e){return zB.filter(t=>e[t]).length>0}a(JB,"getAttributeDescribePerm");function Fne(e,t){zB.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Fne,"checkForHashPerms")});var L_={};$e(L_,{authentication:()=>aH,bypassAuth:()=>Qne,login:()=>zne,logout:()=>Jne,start:()=>jne});function Qne(){oH=!0}async function aH(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?Yne?Vne:[]:$ne?kne:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new ro([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return yh&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),yh&&o.push("Access-Control-Allow-Credentials","true")}}let l,_;if(yh){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.indexOf(E);if(h>=0){let m=s.indexOf(";",h),S=s.indexOf("=",h);l=s.slice(S+1,m===-1?s.length:m),_=await tH.get(l)}e.session=_||(_={})}e.user=null;let u=a((E,h,m)=>{let S=new wh.AuthAuditLog(E,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?eH.notify(S):eH.error(S)},"authAuditLog");if(e.mtlsConfig&&e.authorized){let E=e.mtlsConfig.user;E!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=e.peerCertificate.subject.CN),e.user=await ot.getUser(E,null,null))}let d;if(!e.user)if(n){if(d=Ia.get(n),!d){let[E,h]=n.split(" "),m,S;try{switch(E){case"Basic":[m,S]=atob(h).split(":"),d=m||S?await ot.getUser(m,S,e):null;break;case"Bearer":try{d=await(0,Ih.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,Ih.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return Wne&&(Ia.get(h)||(Ia.set(h,h),u(m,Jt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:ho({error:A.message},e)})}Ia.set(n,d),Kne&&u(d.username,Jt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await ot.getUser(_.user,null,e):(oH&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,nH.getSuperUser)());yh&&(e.session.update=function(E){if(!l){l=(0,sH.v4)();let m=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",m):f?.headers?.set&&f.headers.set("Set-Cookie",m)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=l,tH.put(E)},e.login=async function(E,h){e.user=await ot.getUser(E,h,e),e.session.update({user:e.user.username})},(d&&!_||_?.user?.username!==d?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let f=await t(e);return f&&(f.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Yi.loginPath?(f.status=302,f.headers.set("Location",Yi.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(l){throw c(l)}function c(l){let _=o.length;if(_>0){let u=l.headers;u||(l.headers=u=new ro);for(let d=0;d<_;){let f=o[d++];u.set(f,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function jne({server:e,port:t}){e.request(aH,{port:t||"all"}),rH||(rH=!0,setInterval(()=>{Ia=new Map},vn.get(Jt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),iH.user.addListener(()=>{Ia=new Map}))}async function zne(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 Jne(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var nH,Ih,sH,vn,Jt,wh,iH,eH,kne,$ne,Vne,Yne,tH,yh,oH,Kne,Wne,Ia,rH,Ch=Oe(()=>{nH=q(yr());Er();zl();Ih=q(u_());ge();sH=require("uuid"),vn=q(J()),Jt=q(C()),wh=q(G()),iH=q(Lu());Hu();Wc();eH=(0,wh.loggerWithTag)("auth-event");vn.initSync();kne=vn.get(Jt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),$ne=vn.get(Jt.CONFIG_PARAMS.HTTP_CORS),Vne=vn.get(Jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Yne=vn.get(Jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),tH=Et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),yh=vn.get(Jt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,oH=vn.get(Jt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Kne=vn.get(Jt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Wne=vn.get(Jt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Ia=new Map;ot.onInvalidatedUser(()=>{Ia=new Map});a(Qne,"bypassAuth");a(aH,"authentication");a(jne,"start");a(zne,"login");a(Jne,"logout")});var EH=g((BOe,fH)=>{"use strict";var Le=require("joi"),cH=require("fs-extra"),lH=require("path"),Si=nt(),uH=J(),_H=C(),dH=G(),{hdb_errors:Xne}=se(),{HDB_ERROR_MSGS:ar}=Xne,mi=/^[a-zA-Z0-9-_]+$/;fH.exports={getDropCustomFunctionValidator:ese,setCustomFunctionValidator:tse,addComponentValidator:ise,dropCustomFunctionProjectValidator:ose,packageComponentValidator:ase,deployComponentValidator:cse,setComponentFileValidator:rse,getComponentFileValidator:sse,dropComponentFileValidator:nse};function Lh(e,t,r){try{let n=uH.get(_H.CONFIG_PARAMS.COMPONENTSROOT),s=lH.join(n,t);return cH.existsSync(s)?e?t:r.message(ar.PROJECT_EXISTS):e?r.message(ar.NO_PROJECT):t}catch(n){return dH.error(n),r.message(ar.VALIDATION_ERR)}}a(Lh,"checkProjectExists");function D_(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(D_,"checkFilePath");function Zne(e,t,r,n){try{let s=uH.get(_H.CONFIG_PARAMS.COMPONENTSROOT),i=lH.join(s,e,t,r+".js");return cH.existsSync(i)?r:n.message(ar.NO_FILE)}catch(s){return dH.error(s),n.message(ar.VALIDATION_ERR)}}a(Zne,"checkFileExists");function ese(e){let t=Le.object({project:Le.string().pattern(mi).custom(Lh.bind(null,!0)).required().messages({"string.pattern.base":ar.BAD_PROJECT_NAME}),type:Le.string().valid("helpers","routes").required(),file:Le.string().pattern(mi).custom(Zne.bind(null,e.project,e.type)).custom(D_).required().messages({"string.pattern.base":ar.BAD_FILE_NAME})});return Si.validateBySchema(e,t)}a(ese,"getDropCustomFunctionValidator");function tse(e){let t=Le.object({project:Le.string().pattern(mi).custom(Lh.bind(null,!0)).required().messages({"string.pattern.base":ar.BAD_PROJECT_NAME}),type:Le.string().valid("helpers","routes").required(),file:Le.string().custom(D_).required(),function_content:Le.string().required()});return Si.validateBySchema(e,t)}a(tse,"setCustomFunctionValidator");function rse(e){let t=Le.object({project:Le.string().pattern(mi).required().messages({"string.pattern.base":ar.BAD_PROJECT_NAME}),file:Le.string().custom(D_).required(),payload:Le.string().allow("").optional(),encoding:Le.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Si.validateBySchema(e,t)}a(rse,"setComponentFileValidator");function nse(e){let t=Le.object({project:Le.string().pattern(mi).required().messages({"string.pattern.base":ar.BAD_PROJECT_NAME}),file:Le.string().custom(D_).optional()});return Si.validateBySchema(e,t)}a(nse,"dropComponentFileValidator");function sse(e){let t=Le.object({project:Le.string().required(),file:Le.string().custom(D_).required(),encoding:Le.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Si.validateBySchema(e,t)}a(sse,"getComponentFileValidator");function ise(e){let t=Le.object({project:Le.string().pattern(mi).custom(Lh.bind(null,!1)).required().messages({"string.pattern.base":ar.BAD_PROJECT_NAME})});return Si.validateBySchema(e,t)}a(ise,"addComponentValidator");function ose(e){let t=Le.object({project:Le.string().pattern(mi).custom(Lh.bind(null,!0)).required().messages({"string.pattern.base":ar.BAD_PROJECT_NAME})});return Si.validateBySchema(e,t)}a(ose,"dropCustomFunctionProjectValidator");function ase(e){let t=Le.object({project:Le.string().pattern(mi).required().messages({"string.pattern.base":ar.BAD_PROJECT_NAME}),skip_node_modules:Le.boolean()});return Si.validateBySchema(e,t)}a(ase,"packageComponentValidator");function cse(e){let t=Le.object({project:Le.string().pattern(mi).required().messages({"string.pattern.base":ar.BAD_PROJECT_NAME}),payload:Le.string().optional().messages({"string.pattern.base":ar.BAD_PACKAGE}),package:Le.string().optional()});return Si.validateBySchema(e,t)}a(cse,"deployComponentValidator")});var Uh=g((qOe,RH)=>{"use strict";var Dh=require("joi"),Ph=require("path"),hH=require("fs-extra"),{exec:lse}=require("child_process"),use=require("util"),pH=use.promisify(lse),P_=C(),{handleHDBError:Qc,hdb_errors:_se}=se(),{HTTP_STATUS_CODES:jc}=_se,M_=J(),dse=nt(),zc=G();M_.initSync();var HA=M_.get(P_.CONFIG_PARAMS.COMPONENTSROOT),mH="npm install --omit=dev --json",fse=`${mH} --dry-run`;RH.exports={installModules:mse,auditModules:Sse,installAllRootModules:Ese,uninstallRootModule:hse,linkHarperdb:pse};async function Ese(e=!1){await Mh(),await U_(e?"npm install --ignore-scripts":"npm install",M_.get(P_.CONFIG_PARAMS.ROOTPATH))}a(Ese,"installAllRootModules");async function hse(e){await U_(`npm uninstall ${e}`,M_.get(P_.CONFIG_PARAMS.ROOTPATH))}a(hse,"uninstallRootModule");async function pse(){await Mh(),await U_(`npm link ${P_.PACKAGE_ROOT}`,M_.get(P_.CONFIG_PARAMS.ROOTPATH))}a(pse,"linkHarperdb");async function U_(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await pH(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
11
+ `,"")}a(JU,"runCommand");async function J8(){try{await w8.access(RR)}catch{return!1}let e=await JU(`${RR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return C8.eq(t,j8)}a(J8,"checkNATSServerInstalled");async function yR(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await jU.getClusterUser();if(ma(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}cs.trace("create nats connection called");let i=await G8({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:kt.get(De.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:kt.get(De.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:kt.get(De.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),cs.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&cs.error("Error with Nats client connection, connection closed",o),XU()}),i}a(yR,"createConnection");function XU(){Lr=void 0,Ea=void 0,ha=void 0,pa=void 0}a(XU,"clearClientCache");async function X8(){Lr&&(await Lr.drain(),Lr=void 0,Ea=void 0,ha=void 0,pa=void 0)}a(X8,"closeConnection");var Lr,pa;async function YE(){return pa||(pa=yR(kt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Lr=await pa),Lr||pa}a(YE,"getConnection");async function t_(){if(Ea)return Ea;ma(Lr)&&await YE();let{domain:e}=r_(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ma(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ea=await Lr.jetstreamManager({domain:e,timeout:6e4}),Ea}a(t_,"getJetStreamManager");async function ZU(){if(ha)return ha;ma(Lr)&&await YE();let{domain:e}=r_(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ma(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ha=Lr.jetstream({domain:e,timeout:6e4}),ha}a(ZU,"getJetStream");async function ls(){let e=Lr||await YE(),t=Ea||await t_(),r=ha||await ZU();return{connection:e,jsm:t,js:r}}a(ls,"getNATSReferences");async function Z8(e){let t=kt.get(De.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await jU.getClusterUser(),s=await yR(t,r,n),i=bR(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=zU.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 $E.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(Z8,"getServerList");async function IR(e,t){let{jsm:r}=await ls(),n=kt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=kt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=kt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:x8.File,retention:F8.Limits,subjects:t,discard:k8.Old,max_msgs:s,max_bytes:i,max_age:n})}a(IR,"createLocalStream");async function ev(){let{jsm:e}=await ls(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(ev,"listStreams");async function e9(e){let{jsm:t}=await ls();await t.streams.delete(e)}a(e9,"deleteLocalStream");async function t9(e){let{connection:t}=await ls(),r=[],n=bR(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(zU.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(t9,"listRemoteStreams");async function r9(e,t=void 0,r=void 0){let{jsm:n,js:s}=await ls(),i=YU(),o={durable_name:i,ack_policy:OR.Explicit};t&&(o.deliver_policy=NR.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let u of l){let d=AR(u.data),f={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};if(u.headers&&(f.origin=u.headers.get(Jt.MSG_HEADERS.ORIGIN)),_.push(f),u.ack(),u.info.pending===0)break}return await c.delete(),_}a(r9,"viewStream");async function*n9(e,t=void 0,r=void 0){let{jsm:n,js:s}=await ls(),i=YU(),o={durable_name:i,ack_policy:OR.Explicit};t&&(o.deliver_policy=NR.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of l){let u=AR(_.data);u[0]||(u=[u]);for(let d of u){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(Jt.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(n9,"viewStreamIterator");async function s9(e,t,r,n){cs.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=tv(n,r);let{js:s}=await ls(),i=await KE(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:QU.encode(n);try{cs.trace(`publishToStream publishing to subject: ${o}`),W8(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 nv(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){cs.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await IR(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(s9,"publishToStream");function tv(e,t){t===void 0&&(t=V8());let r=kt.get(De.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Jt.MSG_HEADERS.ORIGIN)&&r&&t.append(Jt.MSG_HEADERS.ORIGIN,r),t}a(tv,"addNatsMsgHeader");function r_(e){e=e.toLowerCase();let t=e_.join(kt.get(De.CONFIG_PARAMS.ROOTPATH),Q8);if(e===De.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ma(gR)&&(gR={port:Xu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Xu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_NODENAME)+Jt.SERVER_SUFFIX.HUB,config_file:Jt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:e_.join(t,Jt.PID_FILES.HUB),hdb_nats_path:t}),gR;if(e===De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ma(TR)&&(TR={port:Xu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Xu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_NODENAME)+Jt.SERVER_SUFFIX.LEAF,config_file:Jt.NATS_CONFIG_FILES.LEAF_SERVER,domain:Xu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_NODENAME)+Jt.SERVER_SUFFIX.LEAF,pid_file_path:e_.join(t,Jt.PID_FILES.LEAF),hdb_nats_path:t}),TR;cs.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(r_,"getServerConfig");async function rv(e,t,r,n){try{await e.consumers.add(t,{ack_policy:OR.Explicit,durable_name:r,deliver_policy:NR.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(rv,"createConsumer");async function i9(e,t,r){await e.consumers.delete(t,r)}a(i9,"removeConsumer");function o9(e){return e.split(".")[1]}a(o9,"extractServerName");async function a9(e,t,r=6e4,n=bR()){if(!$E.isObject(t))throw new Error("data param must be an object");let s=QU.encode(t),{connection:i}=await ls(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return AR(c.data)}a(a9,"request");function wR(e){return new Promise(async(t,r)=>{let n=M8(RR,["--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(wR,"reloadNATS");async function c9(){let{pid_file_path:e}=r_(De.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await wR(e)}a(c9,"reloadNATSHub");async function l9(){let{pid_file_path:e}=r_(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await wR(e)}a(l9,"reloadNATSLeaf");function u9(e,t,r){let n;switch(e.code){case VU.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case VU.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(u9,"requestErrorHandler");async function _9(e,t){let r=t+Jt.SERVER_SUFFIX.LEAF,{connection:n}=await ls(),{jsm:s}=await T9(r),{schema:i,table:o}=e,c=VE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await nv(async()=>{if(e.subscribe===!0)await rv(s,c,n.info.server_name,l);else try{await i9(s,c,n.info.server_name)}catch(_){cs.trace(_)}})}a(_9,"updateRemoteConsumer");async function d9(e,t,r,n){let s=VE.createNatsTableStreamName(e,t),i=r+Jt.SERVER_SUFFIX.LEAF,o={type:De.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!WU&&H8()<kt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=SR();await c(o)}await v8(o),n==="stop"&&await $E.async_set_timeout(1e3)}a(d9,"updateConsumerIterator");function nv(e){return U8.writeTransaction(De.SYSTEM_SCHEMA_NAME,De.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(nv,"exclusiveLock");async function sv(e,t){let r=VE.createNatsTableStreamName(e,t),n=await KE(),s=p9(e,t,n);await IR(r,[s])}a(sv,"createLocalTableStream");async function f9(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await sv(n,s)}}a(f9,"createTableStreams");async function iv(e,t){if(kt.get(De.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=VE.createNatsTableStreamName(e,t),{jsm:n}=await ls();await n.streams.purge(r)}catch(r){if(r.message==="stream not found")cs.warn(r);else throw r}}a(iv,"purgeTableStream");async function E9(e,t){if(kt.get(De.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await iv(e,t[r])}a(E9,"purgeSchemaTableStreams");async function h9(e){return(await t_()).streams.info(e)}a(h9,"getStreamInfo");function p9(e,t,r){return`${Jt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(p9,"createSubjectName");async function KE(){if(Zu)return Zu;if(Zu=(await t_())?.nc?.info?.server_name,Zu===void 0)throw new Error("Unable to get jetstream manager server name");return Zu}a(KE,"getJsmServerName");async function m9(){let e=await t_(),t=await KE(),r=await ev();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=S9(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(".");cs.trace(`Updating stream subject name from: ${i} to: ${u}`),s.subjects[0]=u,await e.streams.update(s.name,s)}}a(m9,"updateLocalStreams");function S9(e){let{config:t}=e,r=!1,n=kt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=kt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=kt.get(De.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(S9,"updateStreamLimits");async function T9(e){let t,r;try{t=await Lr.jetstream({domain:e,timeout:6e4}),r=await Lr.jetstreamManager({domain:e,timeout:6e4})}catch(n){throw cs.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(T9,"connectToRemoteJS")});var zE=T((GRe,uv)=>{"use strict";var Pc=Cf(),Mc=MU(),g9=x(),R9=require("uuid").v4,qRe=require("clone"),QE=ii(),Uc=C(),A9=require("util"),io=Cn(),{handleHDBError:Dr,hdb_errors:O9}=ie(),{HDB_ERROR_MSGS:WE,HTTP_STATUS_CODES:Pr}=O9,{SchemaEventMsg:jE}=Xn(),av=ht(),{getDatabases:N9}=(ge(),oe(Fe)),{transformReq:vc}=K();uv.exports={createSchema:b9,createSchemaStructure:cv,createTable:y9,createTableStructure:lv,createAttribute:D9,dropSchema:I9,dropTable:w9,dropAttribute:C9,getBackup:P9};async function b9(e){let t=await cv(e);return QE.signalSchemaChange(new jE(process.pid,e.operation,e.schema)),t}a(b9,"createSchema");async function cv(e){let t=Pc.schema_object(e);if(t)throw Dr(t,t.message,Pr.BAD_REQUEST,void 0,void 0,!0);if(vc(e),!await Mc.checkSchemaExists(e.schema))throw Dr(new Error,WE.SCHEMA_EXISTS_ERR(e.schema),Pr.BAD_REQUEST,Uc.LOG_LEVELS.ERROR,WE.SCHEMA_EXISTS_ERR(e.schema),!0);return await io.createSchema(e),`database '${e.schema}' successfully created`}a(cv,"createSchemaStructure");async function y9(e){return vc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await lv(e)}a(y9,"createTable");async function lv(e){let t=Pc.create_table_object(e);if(t)throw Dr(t,t.message,Pr.BAD_REQUEST,void 0,void 0,!0);if(Pc.validateTableResidence(e.residence),!await Mc.checkSchemaTableExists(e.schema,e.table))throw Dr(new Error,WE.TABLE_EXISTS_ERR(e.schema,e.table),Pr.BAD_REQUEST,Uc.LOG_LEVELS.ERROR,WE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:R9(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await io.createTable(n,e);else throw Dr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Pr.BAD_REQUEST);else await io.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(lv,"createTableStructure");async function I9(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 Dr(n,n.message,Pr.BAD_REQUEST,void 0,void 0,!0);vc(e);let s=await Mc.checkSchemaExists(e.schema);if(s)throw Dr(new Error,s,Pr.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 io.dropSchema(e),QE.signalSchemaChange(new jE(process.pid,e.operation,e.schema)),await av.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(I9,"dropSchema");async function w9(e){let t=Pc.table_object(e);if(t)throw Dr(t,t.message,Pr.BAD_REQUEST,void 0,void 0,!0);vc(e);let r=await Mc.checkSchemaTableExists(e.schema,e.table);if(r)throw Dr(new Error,r,Pr.NOT_FOUND,Uc.LOG_LEVELS.ERROR,r,!0);return await io.dropTable(e),await av.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(w9,"dropTable");async function C9(e){let t=Pc.attribute_object(e);if(t)throw Dr(t,t.message,Pr.BAD_REQUEST,void 0,void 0,!0);vc(e);let r=await Mc.checkSchemaTableExists(e.schema,e.table);if(r)throw Dr(new Error,r,Pr.NOT_FOUND,Uc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Dr(new Error,"You cannot drop a hash attribute",Pr.BAD_REQUEST,void 0,void 0,!0);if(Uc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Dr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Pr.BAD_REQUEST,void 0,void 0,!0);try{return await io.dropAttribute(e),L9(e),QE.signalSchemaChange(new jE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw g9.error(`Got an error deleting attribute ${A9.inspect(e)}.`),n}}a(C9,"dropAttribute");function L9(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(L9,"dropAttributeFromGlobal");async function D9(e){vc(e);let t=N9()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Dr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Pr.BAD_REQUEST,void 0,void 0,!0);return await io.createAttribute(e),QE.signalSchemaChange(new jE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(D9,"createAttribute");function P9(e){return io.getBackup(e)}a(P9,"getBackup")});var dv=T((FRe,_v)=>{"use strict";var{OPERATIONS_ENUM:M9}=C(),CR=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=M9.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};_v.exports=CR});var LR=T((VRe,mv)=>{"use strict";var U9=Cn(),$Re=dv(),JE=K(),XE=C(),v9=X(),{handleHDBError:fv,hdb_errors:B9}=ie(),{HDB_ERROR_MSGS:Ev,HTTP_STATUS_CODES:hv}=B9,H9=Object.values(XE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),pv="To use this operation audit log must be enabled in harperdb-config.yaml";mv.exports=q9;async function q9(e){if(JE.isEmpty(e.schema))throw new Error(Ev.SCHEMA_REQUIRED_ERR);if(JE.isEmpty(e.table))throw new Error(Ev.TABLE_REQUIRED_ERR);if(!v9.get(XE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw fv(new Error,pv,hv.BAD_REQUEST,XE.LOG_LEVELS.ERROR,pv,!0);let t=JE.checkSchemaTableExist(e.schema,e.table);if(t)throw fv(new Error,t,hv.NOT_FOUND,XE.LOG_LEVELS.ERROR,t,!0);if(!JE.isEmpty(e.search_type)&&H9.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await U9.readAuditLog(e)}a(q9,"readAuditLog")});var Tv=T((KRe,Sv)=>{"use strict";var{OPERATIONS_ENUM:G9}=C(),DR=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=G9.GET_BACKUP,this.schema=t,this.table=r}};Sv.exports=DR});var Av=T((zRe,Rv)=>{"use strict";var x9=Cn(),QRe=Tv(),PR=K(),F9=C(),jRe=X(),{handleHDBError:k9,hdb_errors:$9}=ie(),{HDB_ERROR_MSGS:gv,HTTP_STATUS_CODES:V9}=$9;Rv.exports=Y9;async function Y9(e){if(PR.isEmpty(e.schema))throw new Error(gv.SCHEMA_REQUIRED_ERR);if(PR.isEmpty(e.table))throw new Error(gv.TABLE_REQUIRED_ERR);let t=PR.checkSchemaTableExist(e.schema,e.table);if(t)throw k9(new Error,t,V9.NOT_FOUND,F9.LOG_LEVELS.ERROR,t,!0);return await x9.getBackup(read_audit_log_object)}a(Y9,"getBackup")});var wv=T((XRe,Iv)=>{var oo=require("validate.js"),Nv=rt(),Bc=C(),{handleHDBError:K9,hdb_errors:W9}=ie(),{HDB_ERROR_MSGS:pt,HTTP_STATUS_CODES:Q9}=W9,MR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),j9={STRUCTURE_USER:"structure_user"},Ov=Object.values(Bc.ROLE_TYPES_ENUM),z9="attribute_permissions",J9="attribute_name",{PERMS_CRUD_ENUM:Hc}=Bc,X9=[z9,...Object.values(Hc)],bv=[Hc.READ,Hc.INSERT,Hc.UPDATE],Z9=[J9,...bv];function e7(e){let t=MR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,yv(e,t)}a(e7,"addRoleValidation");function t7(e){let t=MR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,yv(e,t)}a(t7,"alterRoleValidation");function r7(e){let t=MR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Nv.validateObject(e,t)}a(r7,"dropRoleValidation");var n7=["operation","role","id","permission","hdb_user","hdb_auth_header"];function yv(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)n7.includes(n[o])||s.push(n[o]);s.length>0&&At(pt.INVALID_ROLE_JSON_KEYS(s),r);let i=Nv.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{At(o,r)}),e.permission){let o=s7(e);o&&At(o,r),Ov.forEach(c=>{e.permission[c]&&!oo.isBoolean(e.permission[c])&&At(pt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(Ov.indexOf(o)<0){if(o===j9.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]||At(pt.SCHEMA_NOT_FOUND(d),r)}continue}At(pt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){At(pt.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]){At(pt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(_).forEach(u=>{X9.includes(u)||At(pt.INVALID_PERM_KEY(u),r,o,l)}),Object.values(Hc).forEach(u=>{oo.isDefined(_[u])?oo.isBoolean(_[u])||At(pt.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):At(pt.TABLE_PERM_MISSING(u),r,o,l)}),oo.isDefined(_.attribute_permissions)){if(!oo.isArray(_.attribute_permissions)){At(pt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}}else{At(pt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}if(_.attribute_permissions){let u=global.hdb_schema[o][l].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(m=>{!Z9.includes(m)&&m!==Hc.DELETE&&At(pt.INVALID_ATTR_PERM_KEY(m),r,o,l)}),!oo.isDefined(E.attribute_name)){At(pt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=E.attribute_name;if(!u.includes(h)){At(pt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}bv.forEach(m=>{oo.isDefined(E[m])?oo.isBoolean(E[m])||At(pt.ATTR_PERM_NOT_BOOLEAN(m,h),r,o,l):At(pt.ATTR_PERM_MISSING(m,h),r,o,l)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${l}`;At(pt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,l)}}}}return i7(r)}a(yv,"customValidate");Iv.exports={addRoleValidation:e7,alterRoleValidation:t7,dropRoleValidation:r7};function s7(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 pt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Bc.ROLE_TYPES_ENUM.SUPER_USER:Bc.ROLE_TYPES_ENUM.CLUSTER_USER;return pt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(s7,"validateNoSUPerms");function i7(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:pt.ROLE_PERMS_ERROR,...e};return K9(new Error,n,Q9.BAD_REQUEST)}else return null}a(i7,"generateRolePermResponse");function At(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(At,"addPermError")});var eh=T((eAe,Pv)=>{"use strict";var Cv=br(),Lv=nr(),o7=ta(),vR=wv(),BR=ii(),a7=require("uuid").v4,c7=require("util"),ZE=C(),l7=K(),HR=Lv.searchByValue,u7=Lv.searchByHash,_7=c7.promisify(o7.delete),d7=Zn(),f7=pc(),{hdb_errors:E7,handleHDBError:Sa}=ie(),{HDB_ERROR_MSGS:Dv,HTTP_STATUS_CODES:n_}=E7,{UserEventMsg:qR}=Xn();Pv.exports={addRole:h7,alterRole:p7,dropRole:m7,listRoles:S7};function UR(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(UR,"scrubRoleDetails");async function h7(e){let t=vR.addRoleValidation(e);if(t)throw t;e=UR(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 HR(r)||[])}catch(i){throw Sa(i)}if(n&&n.length>0)throw Sa(new Error,Dv.ROLE_ALREADY_EXISTS(e.role),n_.CONFLICT,void 0,void 0,!0);e.id||(e.id=a7());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await Cv.insert(s),BR.signalUserChange(new qR(process.pid)),e=UR(e),e}a(h7,"addRole");async function p7(e){let t=vR.alterRoleValidation(e);if(t)throw t;e=UR(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await Cv.update(r)}catch(s){throw Sa(s)}if(n&&n?.message==="updated 0 of 1 records")throw Sa(new Error,"Invalid role id",n_.BAD_REQUEST,void 0,void 0,!0);return await BR.signalUserChange(new qR(process.pid)),e}a(p7,"alterRole");async function m7(e){let t=vR.dropRoleValidation(e);if(t)throw Sa(new Error,t,n_.BAD_REQUEST,void 0,void 0,!0);let r=new f7(ZE.SYSTEM_SCHEMA_NAME,ZE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await u7(r));if(n.length===0)throw Sa(new Error,Dv.ROLE_NOT_FOUND,n_.NOT_FOUND,void 0,void 0,!0);let s=new d7(ZE.SYSTEM_SCHEMA_NAME,ZE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await HR(s)),o=!1;if(l7.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Sa(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,n_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await _7(c),BR.signalUserChange(new qR(process.pid)),`${n[0].role} successfully deleted`}a(m7,"dropRole");async function S7(){return HR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(S7,"listRoles")});var Bv=T((rAe,vv)=>{"use strict";var T7=X(),ao=require("joi"),g7=rt(),Mv=require("moment"),R7=require("fs-extra"),GR=require("path"),A7=require("lodash"),s_=C(),{LOG_LEVELS:Ta}=C(),O7="YYYY-MM-DD hh:mm:ss",N7=GR.resolve(__dirname,"../logs");vv.exports=function(e){return g7.validateBySchema(e,b7)};var b7=ao.object({from:ao.custom(Uv),until:ao.custom(Uv),level:ao.valid(Ta.NOTIFY,Ta.FATAL,Ta.ERROR,Ta.WARN,Ta.INFO,Ta.DEBUG,Ta.TRACE),order:ao.valid("asc","desc"),limit:ao.number().min(1),start:ao.number().min(0),log_name:ao.custom(y7)});function Uv(e,t){if(Mv(e,Mv.ISO_8601).format(O7)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Uv,"validateDatetime");function y7(e,t){if(A7.invert(s_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=T7.get(s_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?s_.LOG_NAMES.HDB:e,i=s===s_.LOG_NAMES.INSTALL?GR.join(N7,s_.LOG_NAMES.INSTALL):GR.join(n,s);return R7.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(y7,"validateReadLogPath")});var FR=T((sAe,qv)=>{"use strict";var th=C(),I7=x(),w7=X(),C7=Bv(),xR=require("path"),Hv=require("fs-extra"),{once:L7}=require("events"),{handleHDBError:D7,hdb_errors:P7}=ie(),{PACKAGE_ROOT:M7}=C(),U7=xR.join(M7,"logs"),v7=1e3,B7=200;qv.exports=H7;async function H7(e){let t=C7(e);if(t)throw D7(t,t.message,P7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=w7.get(th.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?th.LOG_NAMES.HDB:e.log_name,s=n===th.LOG_NAMES.INSTALL?xR.join(U7,th.LOG_NAMES.INSTALL):xR.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?v7:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,m=0;f==="desc"&&!l&&!u&&(m=Math.max(Hv.statSync(s).size-(h+5)*B7,0));let S=Hv.createReadStream(s,{start:m});S.on("error",U=>{I7.error(U)});let R=0,g=[],A="",P;S.on("data",U=>{let F=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;U=A+U;let H=0,j;for(;(j=F.exec(U))&&!S.destroyed;){P&&(P.message=U.slice(H,j.index),v(P));let[z,J,Ae]=j,ue=Ae.split("] ["),Ee=ue[0],Me=ue[1];ue.splice(0,2),P={timestamp:J,thread:Ee,level:Me,tags:ue,message:""},H=j.index+z.length}A=U.slice(H)}),S.on("end",U=>{S.destroyed||P&&(P.message=A.trim(),v(P))}),S.resume();function v(U){let F,H,j;switch(!0){case(i&&c&&_):F=new Date(U.timestamp),H=new Date(l),j=new Date(u),U.level===o&&F>=H&&F<=j&&R<E?R++:U.level===o&&F>=H&&F<=j&&(co(U,f,g),R++,R===h&&S.destroy());break;case(i&&c):F=new Date(U.timestamp),H=new Date(l),U.level===o&&F>=H&&R<E?R++:U.level===o&&F>=H&&(co(U,f,g),R++,R===h&&S.destroy());break;case(i&&_):F=new Date(U.timestamp),j=new Date(u),U.level===o&&F<=j&&R<E?R++:U.level===o&&F<=j&&(co(U,f,g),R++,R===h&&S.destroy());break;case(c&&_):F=new Date(U.timestamp),H=new Date(l),j=new Date(u),F>=H&&F<=j&&R<E?R++:F>=H&&F<=j&&(co(U,f,g),R++,R===h&&S.destroy());break;case i:U.level===o&&R<E?R++:U.level===o&&(co(U,f,g),R++,R===h&&S.destroy());break;case c:F=new Date(U.timestamp),H=new Date(l),F>=H&&R<E?R++:F>=H&&R>=E&&(co(U,f,g),R++,R===h&&S.destroy());break;case _:F=new Date(U.timestamp),j=new Date(u),F<=j&&R<E?R++:F<=j&&R>=E&&(co(U,f,g),R++,R===h&&S.destroy());break;default:R<E?R++:(co(U,f,g),R++,R===h&&S.destroy())}}return a(v,"onLogMessage"),await L7(S,"close"),g}a(H7,"readLog");function co(e,t,r){t==="desc"?q7(e,r):t==="asc"?G7(e,r):r.push(e)}a(co,"pushLineToResult");function q7(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(q7,"insertDescending");function G7(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(G7,"insertAscending")});var rh=T((lAe,kv)=>{"use strict";var kR=require("joi"),{string:i_,boolean:Gv,date:x7}=kR.types(),F7=rt(),{validateSchemaExists:oAe,validateTableExists:aAe,validateSchemaName:cAe}=ys(),k7=C(),$7=et(),xv=X();xv.initSync();var V7=i_.invalid(xv.get(k7.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern($7.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(),Fv={operation:i_.valid("add_node","update_node","set_node_replication"),node_name:V7,subscriptions:kR.array().items({table:i_.optional(),schema:i_.optional(),database:i_.optional(),subscribe:Gv.required(),publish:Gv.required().custom(K7),start_time:x7.iso()}).min(1).required()};function Y7(e){return F7.validateBySchema(e,kR.object(Fv))}a(Y7,"addUpdateNodeValidator");function K7(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(K7,"checkForFalsy");kv.exports={addUpdateNodeValidator:Y7,validation_schema:Fv}});var Vv=T((_Ae,$v)=>{var W7=rt(),Q7={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};$v.exports=function(e){return W7.validateObject(e,Q7)}});var nh=T((dAe,Yv)=>{"use strict";var j7=C().OPERATIONS_ENUM,$R=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=j7.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Yv.exports=$R});var Wv=T((EAe,Kv)=>{"use strict";var z7={OPERATION:"operation",REFRESH:"refresh"},VR=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},YR=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};Kv.exports={JWTTokens:VR,TOKEN_TYPE_ENUM:z7,JWTRSAKeys:YR}});var c_=T((pAe,Jv)=>{"use strict";var a_=require("jsonwebtoken"),KR=require("fs-extra"),WR=K(),Un=C(),{handleHDBError:Mr,hdb_errors:J7}=ie(),{HTTP_STATUS_CODES:Ur,AUTHENTICATION_ERROR_MSGS:vr}=J7,o_=x(),Qv=iE(),zR=wr(),X7=br().update,Z7=nh(),eee=ii(),{UserEventMsg:tee}=Xn(),lo=X();lo.initSync();var QR=require("path"),{JWTTokens:ree,JWTRSAKeys:nee,TOKEN_TYPE_ENUM:sh}=Wv(),see=lo.get(Un.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?lo.get(Un.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",iee=lo.get(Un.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?lo.get(Un.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",ih="RS256",jR;Jv.exports={createTokens:oee,validateOperationToken:cee,refreshOperationToken:aee,validateRefreshToken:zv};async function oee(e){if(WR.isEmpty(e)||typeof e!="object")throw Mr(new Error,vr.INVALID_AUTH_OBJECT,Ur.BAD_REQUEST,void 0,void 0,!0);if(WR.isEmpty(e.username))throw Mr(new Error,vr.USERNAME_REQUIRED,Ur.BAD_REQUEST,void 0,void 0,!0);if(WR.isEmpty(e.password))throw Mr(new Error,vr.PASSWORD_REQUIRED,Ur.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await zR.findAndValidateUser(e.username,e.password),!t)throw Mr(new Error,vr.INVALID_CREDENTIALS,Ur.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw o_.error(f),Mr(new Error,vr.INVALID_CREDENTIALS,Ur.UNAUTHORIZED,void 0,void 0,!0)}let r=await oh(),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 jv(i,r.private_key,r.passphrase),c=await a_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:iee,algorithm:ih,subject:sh.REFRESH}),l=Qv.hash(c),_=new Z7(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await X7(_)}catch(f){o_.error(f),d=f}if(d!==void 0||u.skipped_hashes.length>0)throw Mr(new Error,vr.REFRESH_TOKEN_SAVE_FAILED,Ur.INTERNAL_SERVER_ERROR);return eee.signalUserChange(new tee(process.pid)),new ree(o,c)}a(oee,"createTokens");async function jv(e,t,r){return await a_.sign(e,{key:t,passphrase:r},{expiresIn:see,algorithm:ih,subject:sh.OPERATION})}a(jv,"signOperationToken");async function oh(){if(jR===void 0)try{let e=QR.join(lo.getHdbBasePath(),Un.LICENSE_KEY_DIR_NAME,Un.JWT_ENUM.JWT_PASSPHRASE_NAME),t=QR.join(lo.getHdbBasePath(),Un.LICENSE_KEY_DIR_NAME,Un.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=QR.join(lo.getHdbBasePath(),Un.LICENSE_KEY_DIR_NAME,Un.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await KR.readFile(e)).toString(),s=(await KR.readFile(t)).toString(),i=(await KR.readFile(r)).toString();jR=new nee(i,s,n)}catch(e){throw o_.error(e),Mr(new Error,vr.NO_ENCRYPTION_KEYS,Ur.INTERNAL_SERVER_ERROR)}return jR}a(oh,"getJWTRSAKeys");async function aee(e){if(!e)throw Mr(new Error,vr.INVALID_BODY,Ur.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Mr(new Error,vr.REFRESH_TOKEN_REQUIRED,Ur.BAD_REQUEST,void 0,void 0,!0);await zv(e.refresh_token);let t=await oh(),r=await a_.decode(e.refresh_token);return{operation_token:await jv({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(aee,"refreshOperationToken");async function cee(e){try{let t=await oh(),r=await a_.verify(e,t.public_key,{algorithms:ih,subject:sh.OPERATION});return await zR.findAndValidateUser(r.username,void 0,!1)}catch(t){throw o_.warn(t),t.name&&t.name==="TokenExpiredError"?Mr(new Error,vr.TOKEN_EXPIRED,Ur.FORBIDDEN):Mr(new Error,vr.INVALID_TOKEN,Ur.UNAUTHORIZED)}}a(cee,"validateOperationToken");async function zv(e){let t;try{let r=await oh(),n=await a_.verify(e,r.public_key,{algorithms:ih,subject:sh.REFRESH});t=await zR.findAndValidateUser(n.username,void 0,!1)}catch(r){throw o_.warn(r),r.name&&r.name==="TokenExpiredError"?Mr(new Error,vr.TOKEN_EXPIRED,Ur.FORBIDDEN):Mr(new Error,vr.INVALID_TOKEN,Ur.UNAUTHORIZED)}if(!Qv.validate(t.refresh_token,e))throw Mr(new Error,vr.INVALID_TOKEN,Ur.UNAUTHORIZED);return t}a(zv,"validateRefreshToken")});var JR=T((TAe,e0)=>{"use strict";var lee=Vv(),qc=require("passport"),uee=require("passport-local").Strategy,_ee=require("passport-http").BasicStrategy,dee=require("util"),fee=wr(),Zv=dee.callbackify(fee.findAndValidateUser),SAe=Wr(),Eee=C(),Xv=c_();qc.use(new uee(function(e,t,r){Zv(e,t,r)}));qc.use(new _ee(function(e,t,r){Zv(e,t,r)}));qc.serializeUser(function(e,t){t(null,e)});qc.deserializeUser(function(e,t){t(null,e)});function hee(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":qc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Eee.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Xv.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):Xv.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:qc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(hee,"authorize");function pee(e,t){let r=lee(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(pee,"checkPermissions");e0.exports={authorize:hee,checkPermissions:pee}});var Gc=T((RAe,t0)=>{"use strict";var XR=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},ZR=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};t0.exports={Node:XR,NodeSubscription:ZR}});var n0=T((OAe,r0)=>{"use strict";var mee=C().OPERATIONS_ENUM,eA=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=mee.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};r0.exports=eA});var l_=T((bAe,s0)=>{"use strict";var tA=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},rA=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)}};s0.exports={RemotePayloadObject:tA,RemotePayloadSubscription:rA}});var o0=T((IAe,i0)=>{"use strict";var nA=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}};i0.exports=nA});var l0=T((PAe,c0)=>{"use strict";var See=o0(),CAe=_t(),a0=Ve(),Tee=x(),{getSchemaPath:LAe,getTransactionAuditStorePath:DAe}=ze(),{getDatabases:gee}=(ge(),oe(Fe));c0.exports=Ree;async function Ree(e){let t=new See;try{let r=gee()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await a0.environmentDataSize(schema_path,e.name),o=await a0.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){Tee.warn(`unable to stat table dbi due to ${r}`)}return t}a(Ree,"lmdbGetTableSize")});var _0=T((UAe,u0)=>{"use strict";var sA=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}};u0.exports=sA});var di=T((GAe,p0)=>{"use strict";var Aee=require("fs-extra"),Oee=require("path"),cr=require("systeminformation"),uo=x(),d0=ht(),BAe=et(),ch=C(),Nee=l0(),h0=zi(),{getThreadInfo:f0}=tt(),EA=X();EA.initSync();var bee=_0(),{openEnvironment:HAe}=Ve(),{getSchemaPath:qAe}=ze(),{database:yee}=(ge(),oe(Fe)),ah;p0.exports={getHDBProcessInfo:cA,getNetworkInfo:uA,getDiskInfo:lA,getMemoryInfo:aA,getCPUInfo:oA,getTimeInfo:iA,getSystemInformation:_A,systemInformation:Iee,getTableSize:dA,getMetrics:fA};function iA(){return cr.time()}a(iA,"getTimeInfo");async function oA(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:_,...u}=await cr.cpu();u.cpu_speed=await cr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:m,raw_currentload_user:S,cpus:R,...g}=await cr.currentLoad();return g.cpus=[],R.forEach(A=>{let{raw_load:P,raw_load_idle:v,raw_load_irq:U,raw_load_nice:F,raw_load_system:H,raw_load_user:j,...z}=A;g.cpus.push(z)}),u.current_load=g,u}catch(e){return uo.error(`error in getCPUInfo: ${e}`),{}}}a(oA,"getCPUInfo");async function aA(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await cr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return uo.error(`error in getMemoryInfo: ${e}`),{}}}a(aA,"getMemoryInfo");async function cA(){let e={core:[],clustering:[]};try{let t=await cr.processes(),r;try{r=Number.parseInt(await Aee.readFile(Oee.join(EA.get(ch.CONFIG_PARAMS.ROOTPATH),ch.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===ch.NODE_ERROR_CODES.ENOENT)uo.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");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 uo.error(`error in getHDBProcessInfo: ${t}`),e}}a(cA,"getHDBProcessInfo");async function lA(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await cr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,..._}=await cr.fsStats();return e.read_write=_,e.size=await cr.fsSize(),e}catch(t){return uo.error(`error in getDiskInfo: ${t}`),e}}a(lA,"getDiskInfo");async function uA(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await cr.networkInterfaceDefault(),e.latency=await cr.inetChecksite("google.com"),(await cr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:_,ieee8021xState:u,carrier_changes:d,...f}=n;e.interfaces.push(f)}),(await cr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return uo.error(`error in getNetworkInfo: ${t}`),e}}a(uA,"getNetworkInfo");async function _A(){if(ah!==void 0)return ah;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await cr.osInfo();e=c;let l=await cr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,ah=e,ah}catch(t){return uo.error(`error in getSystemInformation: ${t}`),e}}a(_A,"getSystemInformation");async function dA(){let e=[],t=await h0.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Nee(n));return e}a(dA,"getTableSize");async function fA(){let e=await h0.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=yee({database:r,table:s}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[l,_,u]=c.trim().split(" ");return{pid:l,thread:_,txnid:u}}),n[s]=o}catch(i){uo.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(fA,"getMetrics");async function E0(){if(EA.get(ch.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await d0.getNATSReferences(),t=await d0.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(E0,"getNatsStreamInfo");async function Iee(e){let t=new bee;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await _A(),t.time=iA(),t.cpu=await oA(),t.memory=await aA(),t.disk=await lA(),t.network=await uA(),t.harperdb_processes=await cA(),t.table_size=await dA(),t.metrics=await fA(),t.threads=await f0(),t.replication=await E0(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await _A();break;case"time":t.time=iA();break;case"cpu":t.cpu=await oA();break;case"memory":t.memory=await aA();break;case"disk":t.disk=await lA();break;case"network":t.network=await uA();break;case"harperdb_processes":t.harperdb_processes=await cA();break;case"table_size":t.table_size=await dA();break;case"database_metrics":case"metrics":t.metrics=await fA();break;case"threads":t.threads=await f0();break;case"replication":t.replication=await E0();break;default:break}return t}a(Iee,"systemInformation")});var fi=T(($Ae,g0)=>{"use strict";var wee=br(),hA=K(),Cee=require("util"),ga=C(),m0=X();m0.initSync();var Lee=JR(),S0=nr(),{Node:FAe,NodeSubscription:kAe}=Gc(),Dee=pc(),Pee=n0(),{RemotePayloadObject:Mee,RemotePayloadSubscription:Uee}=l_(),{handleHDBError:vee,hdb_errors:Bee}=ie(),{HTTP_STATUS_CODES:Hee,HDB_ERROR_MSGS:qee}=Bee,Gee=Zn(),xee=di(),Fee=Fi(),{getDatabases:kee}=(ge(),oe(Fe)),$ee=Cee.promisify(Lee.authorize),Vee=S0.searchByHash,Yee=S0.searchByValue;g0.exports={authHeaderToUser:Kee,isEmpty:Wee,getNodeRecord:Qee,upsertNodeRecord:jee,buildNodePayloads:zee,checkClusteringEnabled:Jee,getAllNodeRecords:Xee,getSystemInfo:Zee,reverseSubscription:T0};async function Kee(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await $ee(t,null),e}a(Kee,"authHeaderToUser");function Wee(e){return e==null}a(Wee,"isEmpty");async function Qee(e){let t=new Dee(ga.SYSTEM_SCHEMA_NAME,ga.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Vee(t)}a(Qee,"getNodeRecord");async function jee(e){let t=new Pee(ga.SYSTEM_SCHEMA_NAME,ga.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return wee.upsert(t)}a(jee,"upsertNodeRecord");function T0(e){if(hA.isEmpty(e.subscribe)||hA.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(T0,"reverseSubscription");function zee(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=hA.getTableHashAttribute(l,_),{subscribe:d,publish:f}=T0(c),E=kee()[l]?.[_],h=new Uee(l,_,u,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new Mee(r,t,s,n)}a(zee,"buildNodePayloads");function Jee(){if(!m0.get(ga.CONFIG_PARAMS.CLUSTERING_ENABLED))throw vee(new Error,qee.CLUSTERING_NOT_ENABLED,Hee.BAD_REQUEST,void 0,void 0,!0)}a(Jee,"checkClusteringEnabled");async function Xee(){let e=new Gee(ga.SYSTEM_SCHEMA_NAME,ga.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Yee(e))}a(Xee,"getAllNodeRecords");async function Zee(){let e=await xee.getSystemInformation();return{hdb_version:Fee.version(),node_version:e.node_version,platform:e.platform}}a(Zee,"getSystemInfo")});var pA=T((YAe,w0)=>{"use strict";var lh=ht(),R0=K(),A0=et(),O0=C(),uh=x(),N0=zE(),ete=hu(),{RemotePayloadObject:tte}=l_(),{handleHDBError:b0,hdb_errors:rte}=ie(),{HTTP_STATUS_CODES:y0}=rte,{NodeSubscription:I0}=Gc();w0.exports=nte;async function nte(e,t){let r;try{r=await lh.request(`${t}.${A0.REQUEST_SUFFIX}`,new tte(O0.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),uh.trace("Response from remote describe all request:",r)}catch(o){uh.error(`addNode received error from describe all request to remote node: ${o}`);let c=lh.requestErrorHandler(o,"add_node",t);throw b0(new Error,c,y0.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===A0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw b0(new Error,o,y0.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===O0.SYSTEM_SCHEMA_NAME){await lh.createLocalTableStream(l,c);let h=new I0(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=R0.doesSchemaExist(l),u=n[l]!==void 0,d=c?R0.doesTableExist(l,c):!0,f=c?n?.[l]?.[c]!==void 0:!0;if(!_&&!u||!d&&!f){s.push(o);continue}if(!_&&u&&(uh.trace(`addNode creating schema: ${l}`),await N0.createSchema({operation:"create_schema",schema:l})),!d&&f){uh.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new ete(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await N0.createTable(h)}await lh.createLocalTableStream(l,c);let E=new I0(l,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(nte,"reviewSubscriptions")});var d_=T((WAe,D0)=>{"use strict";var{handleHDBError:_h,hdb_errors:ste}=ie(),{HTTP_STATUS_CODES:dh}=ste,{addUpdateNodeValidator:ite}=rh(),fh=x(),L0=C(),C0=et(),ote=K(),u_=ht(),__=fi(),ate=X(),cte=pA(),{Node:lte,NodeSubscription:ute}=Gc(),{broadcast:_te}=tt(),dte="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",fte="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Ete=ate.get(L0.CONFIG_PARAMS.CLUSTERING_NODENAME);D0.exports=hte;async function hte(e,t=!1){fh.trace("addNode called with:",e),__.checkClusteringEnabled();let r=ite(e);if(r)throw _h(r,r.message,dh.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await __.getNodeRecord(n);if(!ote.isEmptyOrZeroLength(d))throw _h(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,dh.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await cte(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=dte,o;let c=__.buildNodePayloads(s,Ete,L0.OPERATIONS_ENUM.ADD_NODE,await __.getSystemInfo()),l=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new ute(E.schema,E.table,E.publish,E.subscribe))}fh.trace("addNode sending remote payload:",c);let _;try{_=await u_.request(`${n}.${C0.REQUEST_SUFFIX}`,c)}catch(d){fh.error(`addNode received error from request: ${d}`);for(let E=0,h=s.length;E<h;E++){let m=s[E];m.publish=!1,m.subscribe=!1,await u_.updateRemoteConsumer(m,n)}let f=u_.requestErrorHandler(d,"add_node",n);throw _h(new Error,f,dh.INTERNAL_SERVER_ERROR,"error",f)}if(_.status===C0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw _h(new Error,d,dh.INTERNAL_SERVER_ERROR,"error",d)}fh.trace(_);for(let d=0,f=s.length;d<f;d++){let E=s[d];await u_.updateRemoteConsumer(E,n),E.subscribe===!0&&await u_.updateConsumerIterator(E.schema,E.table,n,"start")}let u=new lte(n,l,_.system_info);return await __.upsertNodeRecord(u),_te({type:"nats_update"}),i.length>0?o.message=fte:o.message=`Successfully added '${n}' to manifest`,o}a(hte,"addNode")});var TA=T((zAe,U0)=>{"use strict";var{handleHDBError:mA,hdb_errors:pte}=ie(),{HTTP_STATUS_CODES:SA}=pte,{addUpdateNodeValidator:mte}=rh(),f_=x(),M0=C(),P0=et(),jAe=K(),E_=ht(),h_=fi(),Ste=X(),{cloneDeep:Tte}=require("lodash"),gte=pA(),{Node:Rte,NodeSubscription:Ate}=Gc(),{broadcast:Ote}=tt(),Nte="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",bte="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",yte=Ste.get(M0.CONFIG_PARAMS.CLUSTERING_NODENAME);U0.exports=Ite;async function Ite(e){f_.trace("updateNode called with:",e),h_.checkClusteringEnabled();let t=mte(e);if(t)throw mA(t,t.message,SA.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await h_.getNodeRecord(r);s.length>0&&(n=Tte(s));let{added:i,skipped:o}=await gte(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Nte,c;let l=h_.buildNodePayloads(i,yte,M0.OPERATIONS_ENUM.UPDATE_NODE,await h_.getSystemInfo());for(let u=0,d=i.length;u<d;u++){let f=i[u];f_.trace(`updateNode updating work stream for node: ${r} subscription:`,f),i[u].start_time===void 0&&delete i[u].start_time}f_.trace("updateNode sending remote payload:",l);let _;try{_=await E_.request(`${r}.${P0.REQUEST_SUFFIX}`,l)}catch(u){f_.error(`updateNode received error from request: ${u}`);let d=E_.requestErrorHandler(u,"update_node",r);throw mA(new Error,d,SA.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===P0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw mA(new Error,u,SA.INTERNAL_SERVER_ERROR,"error",u)}f_.trace(_);for(let u=0,d=i.length;u<d;u++){let f=i[u];await E_.updateRemoteConsumer(f,r),f.subscribe===!0?await E_.updateConsumerIterator(f.schema,f.table,r,"start"):await E_.updateConsumerIterator(f.schema,f.table,r,"stop")}return n||(n=[new Rte(r,[],_.system_info)]),await wte(n[0],i,_.system_info),o.length>0?c.message=bte:c.message=`Successfully updated '${r}'`,c}a(Ite,"updateNode");async function wte(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 Ate(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await h_.upsertNodeRecord(n),Ote({type:"nats_update"})}a(wte,"updateNodeTable")});var G0=T((XAe,q0)=>{"use strict";var H0=require("joi"),{string:v0}=H0.types(),Cte=rt(),B0=C(),Lte=X(),Dte=et();q0.exports=Pte;function Pte(e){let t=v0.invalid(Lte.get(B0.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Dte.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=H0.object({operation:v0.valid(B0.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Cte.validateBySchema(e,r)}a(Pte,"removeNodeValidator")});var hh=T((eOe,V0)=>{"use strict";var{handleHDBError:x0,hdb_errors:Mte}=ie(),{HTTP_STATUS_CODES:F0}=Mte,Ute=G0(),p_=x(),k0=fi(),vte=K(),Eh=C(),$0=et(),gA=ht(),Bte=X(),{RemotePayloadObject:Hte}=l_(),{NodeSubscription:qte}=Gc(),Gte=Eu(),xte=ta(),{broadcast:Fte}=tt(),kte=Bte.get(Eh.CONFIG_PARAMS.CLUSTERING_NODENAME);V0.exports=$te;async function $te(e){p_.trace("removeNode called with:",e),k0.checkClusteringEnabled();let t=Ute(e);if(t)throw x0(t,t.message,F0.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await k0.getNodeRecord(r);if(vte.isEmptyOrZeroLength(n))throw x0(new Error,`Node '${r}' was not found.`,F0.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Hte(Eh.OPERATIONS_ENUM.REMOVE_NODE,kte,[]),i,o=!1;for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];u.subscribe===!0&&await gA.updateConsumerIterator(u.schema,u.table,r,"stop");try{await gA.updateRemoteConsumer(new qte(u.schema,u.table,!1,!1),r)}catch(d){p_.error(d)}}try{i=await gA.request(`${r}.${$0.REQUEST_SUFFIX}`,s),p_.trace("Remove node reply from remote node:",r,i)}catch(l){p_.error("removeNode received error from request:",l),o=!0}let c=new Gte(Eh.SYSTEM_SCHEMA_NAME,Eh.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await xte.deleteRecord(c),Fte({type:"nats_update"}),i?.status===$0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(p_.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($te,"removeNode")});var W0=T((rOe,K0)=>{"use strict";var Y0=require("joi"),{string:Vte,array:Yte}=Y0.types(),Kte=rt(),Wte=rh();K0.exports=Qte;function Qte(e){let t=Y0.object({operation:Vte.valid("configure_cluster").required(),connections:Yte.items(Wte.validation_schema).required()});return Kte.validateBySchema(e,t)}a(Qte,"configureClusterValidator")});var mh=T((sOe,X0)=>{"use strict";var jte=C(),ph=x(),zte=K(),Jte=hh(),Xte=d_(),Q0=fi(),Zte=W0(),{handleHDBError:j0,hdb_errors:ere}=ie(),{HTTP_STATUS_CODES:z0}=ere,tre="Configure cluster complete.",rre="Failed to configure the cluster. Check the logs for more details.",nre="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";X0.exports=sre;async function sre(e){ph.trace("configure cluster called with:",e),Q0.checkClusteringEnabled();let t=Zte(e);if(t)throw j0(t,t.message,z0.BAD_REQUEST,void 0,void 0,!0);let r=await Q0.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(J0(Jte,{operation:jte.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);ph.trace("All results from configure_cluster remove node:",s);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(J0(Xte,E,E.node_name))}let c=await Promise.allSettled(i);ph.trace("All results from configure_cluster add node:",c);let l=[],_=[],u=!1,d=s.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(ph.error(h.reason),l.includes(h.reason.node_name)||l.push(h.reason.node_name)),h.status==="fulfilled"&&(u=!0);let m=h?.value?.result;typeof m=="string"&&m.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(zte.isEmptyOrZeroLength(l))return{message:tre,connections:_};if(u)return{message:nre,failed_nodes:l,connections:_};throw j0(new Error,rre,z0.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(sre,"configureCluster");async function J0(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(J0,"functionWrapper")});var eB=T((oOe,Z0)=>{"use strict";var Sh=require("joi"),ire=rt(),{validateSchemaExists:ore,validateTableExists:are,validateSchemaName:cre}=ys(),lre=Sh.object({operation:Sh.string().valid("purge_stream"),schema:Sh.string().custom(ore).custom(cre).required(),table:Sh.string().custom(are).required()});function ure(e){return ire.validateBySchema(e,lre)}a(ure,"purgeStreamValidator");Z0.exports=ure});var RA=T((cOe,tB)=>{"use strict";var{handleHDBError:_re,hdb_errors:dre}=ie(),{HTTP_STATUS_CODES:fre}=dre,Ere=eB(),hre=ht(),pre=fi();tB.exports=mre;async function mre(e){if(e.purge_ingest!==!0){let s=Ere(e);if(s)throw _re(s,s.message,fre.BAD_REQUEST,void 0,void 0,!0)}pre.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await hre.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(mre,"purgeStream")});var gh=T((uOe,aB)=>{"use strict";var OA=fi(),Sre=ht(),sB=X(),Th=C(),Ra=et(),Tre=K(),AA=x(),{RemotePayloadObject:gre}=l_(),{ErrorCode:rB}=require("nats"),nB=sB.get(Th.CONFIG_PARAMS.CLUSTERING_ENABLED),iB=sB.get(Th.CONFIG_PARAMS.CLUSTERING_NODENAME);aB.exports={clusterStatus:Rre,buildNodeStatus:oB};async function Rre(){let e={node_name:iB,is_enabled:nB,connections:[]};if(!nB)return e;let t=await OA.getAllNodeRecords();if(Tre.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(oB(t[n],e.connections));return await Promise.allSettled(r),e}a(Rre,"clusterStatus");async function oB(e,t){let r=e.name,n=new gre(Th.OPERATIONS_ENUM.CLUSTER_STATUS,iB,void 0,await OA.getSystemInfo()),s,i,o=Ra.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Sre.request(Ra.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Ra.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ra.CLUSTER_STATUS_STATUSES.CLOSED,AA.error(`Error getting node status from ${r} `,s))}catch(l){AA.warn(`Error getting node status from ${r}`,l),l.code===rB.NoResponders?o=Ra.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===rB.Timeout?o=Ra.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ra.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Are(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 OA.upsertNodeRecord(l)}catch(l){AA.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(oB,"buildNodeStatus");function Are(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(Are,"NodeStatusObject")});var Ah=T((dOe,cB)=>{"use strict";var{handleHDBError:Ore,hdb_errors:Nre}=ie(),{HTTP_STATUS_CODES:bre}=Nre,yre=ht(),Ire=fi(),NA=K(),Rh=require("joi"),wre=rt(),Cre=2e3,Lre=Rh.object({timeout:Rh.number().min(1),connected_nodes:Rh.boolean(),routes:Rh.boolean()});cB.exports=Dre;async function Dre(e){Ire.checkClusteringEnabled();let t=wre.validateBySchema(e,Lre);if(t)throw Ore(t,t.message,bre.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||NA.autoCastBoolean(n),o=s===void 0||NA.autoCastBoolean(s),c={nodes:[]},l=await yre.getServerList(r??Cre),_={};if(i)for(let u=0,d=l.length;u<d;u++){let f=l[u].statsz;f&&(_[l[u].server.name]=f.routes)}for(let u=0,d=l.length;u<d;u++){if(l[u].statsz)continue;let f=l[u].server,E=l[u].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:l[u].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(m=>{h.connected_nodes.includes(m.name.slice(0,-4))||h.connected_nodes.push(m.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(m=>({host:m.split(":")[0],port:NA.autoCast(m.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Dre,"clusterNetwork")});var dB=T((EOe,_B)=>{"use strict";var bA=require("joi"),lB=rt(),{route_constraints:uB}=pg();_B.exports={setRoutesValidator:Pre,deleteRoutesValidator:Mre};function Pre(e){let t=bA.object({server:bA.valid("hub","leaf").required(),routes:uB.required()});return lB.validateBySchema(e,t)}a(Pre,"setRoutesValidator");function Mre(e){let t=bA.object({routes:uB.required()});return lB.validateBySchema(e,t)}a(Mre,"deleteRoutesValidator")});var Nh=T((pOe,pB)=>{"use strict";var Aa=Et(),yA=K(),Oh=C(),fB=dB(),{handleHDBError:EB,hdb_errors:Ure}=ie(),{HTTP_STATUS_CODES:hB}=Ure,vre="cluster routes successfully set",Bre="cluster routes successfully deleted";pB.exports={setRoutes:Hre,getRoutes:qre,deleteRoutes:Gre};function Hre(e){let t=fB.setRoutesValidator(e);if(t)throw EB(t,t.message,hB.BAD_REQUEST,void 0,void 0,!0);let r=Aa.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=yA.autoCast(_.port);let u=n.some(f=>f.host===_.host&&f.port===_.port),d=s.some(f=>f.host===_.host&&f.port===_.port);u||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?Aa.updateConfigValue(Oh.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):Aa.updateConfigValue(Oh.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:vre,set:o,skipped:i}}a(Hre,"setRoutes");function qre(){let e=Aa.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(qre,"getRoutes");function Gre(e){let t=fB.deleteRoutesValidator(e);if(t)throw EB(t,t.message,hB.BAD_REQUEST,void 0,void 0,!0);let r=Aa.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,l=!1;for(let _=0,u=e.routes.length;_<u;_++){let d=e.routes[_],f=!1;for(let E=0,h=n.length;E<h;E++){let m=n[E];if(d.host===m.host&&d.port===m.port){n.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,m=s.length;h<m;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),l=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(n=yA.isEmptyOrZeroLength(n)?null:n,Aa.updateConfigValue(Oh.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=yA.isEmptyOrZeroLength(s)?null:s,Aa.updateConfigValue(Oh.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:Bre,deleted:i,skipped:o}}a(Gre,"deleteRoutes")});var SB=T((SOe,mB)=>{"use strict";var m_=require("alasql"),Oa=require("recursive-iterator"),us=x(),xre=K(),S_=C(),IA=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,kre(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=Fre(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 Fre(e){return e.filter(t=>t[S_.PERMS_CRUD_ENUM.READ])}a(Fre,"filterReadRestrictedAttrs");function kre(e,t,r,n,s){$re(e,t,r,n,s)}a(kre,"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 $re(e,t,r,n,s){if(!e){us.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof m_.yy.Insert?Wre(e,t,r):e instanceof m_.yy.Select?Vre(e,t,r,n,s):e instanceof m_.yy.Update?Yre(e,t,r):e instanceof m_.yy.Delete?Kre(e,t,r):us.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a($re,"getRecordAttributesAST");function Vre(e,t,r,n,s){if(!e){us.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(xre.isEmptyOrZeroLength(i)){us.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 Oa(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{us.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 Oa(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{us.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 Oa(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{us.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 Oa(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{us.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(l.columnid)<0&&t.get(u).get(_).push(l.columnid)}}}a(Vre,"getSelectAttributes");function Yre(e,t,r){if(!e){us.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Oa(e.columns),s=e.table.databaseid;T_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&wA(e.table.tableid,s,i.columnid,t,r)}a(Yre,"getUpdateAttributes");function Kre(e,t,r){if(!e){us.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Oa(e.where),s=e.table.databaseid;T_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&wA(e.table.tableid,s,i.columnid,t,r)}a(Kre,"getDeleteAttributes");function Wre(e,t,r){if(!e){us.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Oa(e.columns),s=e.into.databaseid;T_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&wA(e.into.tableid,s,i.columnid,t,r)}a(Wre,"getInsertAttributes");function wA(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(wA,"pushAttribute");mB.exports=IA});var yh=T((gOe,AB)=>{var bh=ia(),TB=require("chalk"),dn=x(),gB=require("prompt"),{promisify:Qre}=require("util"),CA=C(),jre=require("fs-extra"),zre=require("path"),Jre=K(),Xre=Fi(),RB=X();RB.initSync();var Zre=require("moment"),ene=Qre(gB.get),tne=zre.join(RB.getHdbBasePath(),CA.LICENSE_KEY_DIR_NAME,CA.LICENSE_FILE_NAME,CA.LICENSE_FILE_NAME);AB.exports={getFingerprint:nne,setLicense:rne,parseLicense:LA,register:sne,getRegistrationInfo:one};async function rne(e){if(e&&e.key&&e.company){try{dn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await LA(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw dn.error(r),dn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(rne,"setLicense");async function nne(){let e={};try{e=await bh.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw dn.error(r),dn.error(t),new Error(r)}return e}a(nne,"getFingerprint");async function LA(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");dn.info("Validating license input...");let r=bh.validateLicense(e,t);if(dn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(dn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(dn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{dn.info("writing license to disk"),await jre.writeFile(tne,JSON.stringify({license_key:e,company:t}))}catch(n){throw dn.error("Failed to write License"),n}return"Registration successful."}a(LA,"parseLicense");async function sne(){let e=await ine();return LA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(sne,"register");async function ine(){let e=await bh.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:TB.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:TB.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{gB.start()}catch(n){dn.error(n)}let r;try{r=await ene(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(ine,"promptForRegistration");async function one(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await bh.getLicense()}catch(r){throw dn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Jre.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Xre.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Zre.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(one,"getRegistrationInfo")});var NB=T((AOe,OB)=>{"use strict";var ane=et(),DA=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+ane.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:d,routes:f,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};OB.exports=DA});var IB=T((NOe,yB)=>{"use strict";var bB=et(),PA=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d){this.port=t,d===null&&(d=void 0),this.server_name=r+bB.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+bB.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:u,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};yB.exports=PA});var CB=T((yOe,wB)=>{"use strict";var MA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};wB.exports=MA});var DB=T((wOe,LB)=>{"use strict";var cne=et(),UA=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+cne.SERVER_SUFFIX.ADMIN,this.password=r}};LB.exports=UA});var Dh=T((LOe,UB)=>{"use strict";var xc=require("path"),Ch=require("fs-extra"),lne=NB(),une=IB(),_ne=CB(),dne=DB(),vA=wr(),kc=K(),Br=Et(),wh=C(),g_=et(),{CONFIG_PARAMS:mt}=wh,R_=x(),A_=X(),PB=li(),BA=ht(),Fc="clustering",fne=1e4,MB=5;UB.exports={generateNatsConfig:hne,removeNatsConfig:pne,getHubConfigPath:Ene};function Ene(){let e=A_.get(mt.ROOTPATH);return xc.join(e,Fc,g_.NATS_CONFIG_FILES.HUB_SERVER)}a(Ene,"getHubConfigPath");async function hne(e=!1,t=void 0){A_.initSync();let r=A_.get(mt.ROOTPATH),n=xc.join(r,Fc,g_.PID_FILES.HUB),s=xc.join(r,Fc,g_.PID_FILES.LEAF),i=Br.getConfigFromFile(mt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=xc.join(r,Fc,g_.NATS_CONFIG_FILES.HUB_SERVER),c=xc.join(r,Fc,g_.NATS_CONFIG_FILES.LEAF_SERVER),l=Br.getConfigFromFile(mt.CLUSTERING_TLS_CERTIFICATE),_=Br.getConfigFromFile(mt.CLUSTERING_TLS_PRIVATEKEY),u=Br.getConfigFromFile(mt.CLUSTERING_TLS_CERT_AUTH),d=Br.getConfigFromFile(mt.CLUSTERING_TLS_INSECURE),f=Br.getConfigFromFile(mt.CLUSTERING_TLS_VERIFY),E=Br.getConfigFromFile(mt.CLUSTERING_NODENAME),h=Br.getConfigFromFile(mt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await BA.checkNATSServerInstalled()||Lh("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await vA.listUsers(),S=Br.getConfigFromFile(mt.CLUSTERING_USER),R=await vA.getClusterUser();(kc.isEmpty(R)||R.active!==!0)&&Lh(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Ih(mt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Ih(mt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Ih(mt.CLUSTERING_HUBSERVER_NETWORK_PORT),await Ih(mt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let g=[],A=[];for(let[z,J]of m.entries())J.role.role===wh.ROLE_TYPES_ENUM.CLUSTER_USER&&J.active&&(g.push(new dne(J.username,PB.decrypt(J.hash))),A.push(new _ne(J.username,PB.decrypt(J.hash))));let P=[],{hub_routes:v}=Br.getClusteringRoutes();if(!kc.isEmptyOrZeroLength(v))for(let z of v)P.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${z.host}:${z.port}`);let U=new lne(Br.getConfigFromFile(mt.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,l,_,u,d,f,h,Br.getConfigFromFile(mt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Br.getConfigFromFile(mt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),P,g,A);u==null&&(delete U.tls.ca_file,delete U.leafnodes.tls.ca_file),t=kc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===wh.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Ch.writeJson(o,U),R_.trace(`Hub server config written to ${o}`));let F=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,H=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,j=new une(Br.getConfigFromFile(mt.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[F],[H],g,A,l,_,u,d);u==null&&delete j.tls.ca_file,(t===void 0||t===wh.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Ch.writeJson(c,j),R_.trace(`Leaf server config written to ${c}`))}a(hne,"generateNatsConfig");async function Ih(e){let t=A_.get(e);return kc.isEmpty(t)&&Lh(`port undefined for '${e}'`),await kc.isPortTaken(t)&&Lh(`'${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(Ih,"isPortAvailable");function Lh(e){let t=`Error generating clustering config: ${e}`;R_.error(t),console.error(t),process.exit(1)}a(Lh,"generateNatsConfigError");async function pne(e){let{port:t,config_file:r}=BA.getServerConfig(e),{username:n,decrypt_hash:s}=await vA.getClusterUser(),i=0,o=2e3;for(;i<MB;){try{let _=await BA.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){R_.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=MB)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);await kc.async_set_timeout(o*(i*2))}let c="0".repeat(fne),l=xc.join(A_.get(mt.ROOTPATH),Fc,r);await Ch.writeFile(l,c),await Ch.remove(l),R_.notify(e,"started.")}a(pne,"removeNatsConfig")});var xB=T((POe,GB)=>{"use strict";var fn=X(),mne=ia(),me=C(),O_=et(),Ei=require("path"),{PACKAGE_ROOT:Mh}=C(),vB=X(),Ph=K(),$c="/dev/null",Sne=Ei.join(Mh,"launchServiceScripts"),BB=Ei.join(Mh,"utility/scripts"),Tne=Ei.join(BB,me.HDB_RESTART_SCRIPT),HB=Ei.resolve(Mh,"dependencies",`${process.platform}-${process.arch}`,O_.NATS_BINARY_NAME);function qB(){let t=mne.licenseSearch().ram_allocation||me.RAM_ALLOCATION_ENUM.DEFAULT,r=me.MEM_SETTING_KEY+t,n={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Ph.noBootFile()&&(n[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Ph.getEnvCliRootPath()),{name:me.PROCESS_DESCRIPTORS.HDB,script:me.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Mh}}a(qB,"generateMainServerConfig");var gne=9930;function Rne(){fn.initSync(!0);let e=fn.get(me.CONFIG_PARAMS.ROOTPATH),t=Ei.join(e,"clustering",O_.NATS_CONFIG_FILES.HUB_SERVER),r=Ei.join(fn.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=vB.get(me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=O_.LOG_LEVEL_FLAGS[fn.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==gne?"-"+n:""),script:HB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return fn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=$c,i.error_file=$c),i}a(Rne,"generateNatsHubServerConfig");var Ane=9940;function One(){fn.initSync(!0);let e=fn.get(me.CONFIG_PARAMS.ROOTPATH),t=Ei.join(e,"clustering",O_.NATS_CONFIG_FILES.LEAF_SERVER),r=Ei.join(fn.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=vB.get(me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=O_.LOG_LEVEL_FLAGS[fn.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Ane?"-"+n:""),script:HB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return fn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=$c,i.error_file=$c),i}a(One,"generateNatsLeafServerConfig");function Nne(){fn.initSync();let e=Ei.join(fn.get(me.CONFIG_PARAMS.LOGGING_ROOT),me.LOG_NAMES.HDB),t={name:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:me.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Sne,autorestart:!1};return fn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=$c,t.error_file=$c),t}a(Nne,"generateClusteringUpgradeV4ServiceConfig");function bne(){let e={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.RESTART_HDB};return Ph.noBootFile()&&(e[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Ph.getEnvCliRootPath()),{...{name:me.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:BB},script:Tne}}a(bne,"generateRestart");function yne(){return{apps:[qB()]}}a(yne,"generateAllServiceConfigs");GB.exports={generateAllServiceConfigs:yne,generateMainServerConfig:qB,generateRestart:bne,generateNatsHubServerConfig:Rne,generateNatsLeafServerConfig:One,generateClusteringUpgradeV4ServiceConfig:Nne}});var Vc=T((vOe,ZB)=>{"use strict";var He=C(),Ine=K(),pi=Dh(),Uh=ht(),hi=et(),_o=xB(),vh=X(),fo=x(),wne=fi(),{startWorker:FB,onMessageFromWorkers:Cne}=tt(),Lne=di(),UOe=require("util"),Dne=require("child_process"),Pne=require("fs"),{execFile:Mne}=Dne,we;ZB.exports={enterPM2Mode:Une,start:Eo,stop:HA,reload:$B,restart:VB,list:qA,describe:KB,connect:mi,kill:Gne,startAllServices:xne,startService:GA,getUniqueServicesList:WB,restartAllServices:Fne,isServiceRegistered:QB,reloadStopStart:jB,restartHdb:YB,deleteProcess:Hne,startClusteringProcesses:JB,startClusteringThreads:XB,isHdbRestartRunning:qne,isClusteringRunning:$ne,stopClustering:kne,reloadClustering:Vne};var N_=!1;Cne(e=>{e.type==="restart"&&vh.initSync(!0)});function Une(){N_=!0}a(Une,"enterPM2Mode");function mi(){return we||(we=require("pm2")),new Promise((e,t)=>{we.connect((r,n)=>{fo.setupConsoleLogging(),r&&t(r),e(n)})})}a(mi,"connect");var Hr,vne=10,kB;function Eo(e,t=!1){if(N_)return Bne(e);let r=Mne(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Hr.indexOf(r);o>-1&&Hr.splice(o,1),!kB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<vne&&(Pne.existsSync(pi.getHubConfigPath())?Eo(e):(await pi.generateNatsConfig(!0),Eo(e),await new Promise(c=>setTimeout(c,3e3)),await pi.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await pi.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=vh.get(He.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,_=0,u;for(;l=c.exec(i);){if(l.index&&hi.LOG_LEVEL_HIERARCHY[o]>=hi.LOG_LEVEL_HIERARCHY[u||"info"]){let E=u===hi.LOG_LEVELS.ERR||u===hi.LOG_LEVELS.WRN?fo.OUTPUTS.STDERR:fo.OUTPUTS.STDOUT;fo.logCustomLevel(u||"info",E,n,i.slice(_,l.index).trim())}let[d,f]=l;_=l.index+d.length,u=hi.LOG_LEVELS[f]}if(hi.LOG_LEVEL_HIERARCHY[o]>=hi.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===hi.LOG_LEVELS.ERR||u===hi.LOG_LEVELS.WRN?fo.OUTPUTS.STDERR:fo.OUTPUTS.STDOUT;fo.logCustomLevel(u||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),Hr=[],!Hr&&!t){let i=a(()=>{kB=!0,Hr&&(Hr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}Hr.push(r)}a(Eo,"start");function Bne(e){return new Promise(async(t,r)=>{try{await mi()}catch(n){r(n)}we.start(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(Bne,"startWithPM2");function HA(e){if(!N_){for(let t of Hr||[])t.name===e&&(Hr.splice(Hr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await mi()}catch(n){r(n)}we.stop(e,async(n,s)=>{n&&(we.disconnect(),r(n)),we.delete(e,(i,o)=>{i&&(we.disconnect(),r(n)),we.disconnect(),t(o)})})})}a(HA,"stop");function $B(e){return new Promise(async(t,r)=>{try{await mi()}catch(n){r(n)}we.reload(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a($B,"reload");function VB(e){if(!N_)for(let t of Hr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await mi()}catch(n){r(n)}we.restart(e,(n,s)=>{we.disconnect(),t(s)})})}a(VB,"restart");function Hne(e){return new Promise(async(t,r)=>{try{await mi()}catch(n){r(n)}we.delete(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(Hne,"deleteProcess");async function YB(){await Eo(_o.generateRestart())}a(YB,"restartHdb");async function qne(){let e=await qA();for(let t in e)if(e[t].name===He.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(qne,"isHdbRestartRunning");function qA(){return new Promise(async(e,t)=>{try{await mi()}catch(r){t(r)}we.list((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(qA,"list");function KB(e){return new Promise(async(t,r)=>{try{await mi()}catch(n){r(n)}we.describe(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(KB,"describe");function Gne(){if(!N_){for(let e of Hr||[])e.kill();Hr=[];return}return new Promise(async(e,t)=>{try{await mi()}catch(r){t(r)}we.killDaemon((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(Gne,"kill");async function xne(){try{await JB(),await XB(),await Eo(_o.generateAllServiceConfigs())}catch(e){throw we?.disconnect(),e}}a(xne,"startAllServices");async function GA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case He.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=_o.generateMainServerConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=_o.generateNatsIngestServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=_o.generateNatsReplyServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=_o.generateNatsHubServerConfig(),await Eo(r,t),await pi.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=_o.generateNatsLeafServerConfig(),await Eo(r,t),await pi.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=_o.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Eo(r)}catch(r){throw we?.disconnect(),r}}a(GA,"startService");async function WB(){try{let e=await qA(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw we?.disconnect(),e}}a(WB,"getUniqueServicesList");async function Fne(e=[]){try{let t=!1,r=await WB();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 VB(o))}t&&await jB(He.PROCESS_DESCRIPTORS.HDB)}catch(t){throw we?.disconnect(),t}}a(Fne,"restartAllServices");async function QB(e){if(Hr?.find(r=>r.name===e))return!0;let t=await Lne.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(QB,"isServiceRegistered");async function jB(e){let t=vh.get(He.CONFIG_PARAMS.THREADS_COUNT)??vh.get(He.CONFIG_PARAMS.THREADS),r=await KB(e),n=Ine.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await HA(e),await GA(e)):e===He.PROCESS_DESCRIPTORS.HDB?await YB():await $B(e)}a(jB,"reloadStopStart");var zB;async function JB(e=!1){for(let t in He.CLUSTERING_PROCESSES){let r=He.CLUSTERING_PROCESSES[t];await GA(r,e)}}a(JB,"startClusteringProcesses");async function XB(){zB=FB(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Uh.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Uh.updateLocalStreams();let e=await wne.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===He.PRE_4_0_0_VERSION){fo.info("Starting clustering upgrade 4.0.0 process"),FB(He.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(XB,"startClusteringThreads");async function kne(){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 zB.terminate();else{let t=He.CLUSTERING_PROCESSES[e];await HA(t)}}a(kne,"stopClustering");async function $ne(){for(let e in He.CLUSTERING_PROCESSES){let t=He.CLUSTERING_PROCESSES[e];if(await QB(t)===!1)return!1}return!0}a($ne,"isClusteringRunning");async function Vne(){await pi.generateNatsConfig(!0),await Uh.reloadNATSHub(),await Uh.reloadNATSLeaf(),await pi.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await pi.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Vne,"reloadClustering")});var Na=T((qOe,oH)=>{"use strict";var Yne=require("minimist"),{isMainThread:FA,parentPort:rH}=require("worker_threads"),ct=C(),{PROCESS_DESCRIPTORS_VALIDATE:b_}=ct,vs=x(),kA=K(),Hh=Dh(),Bh=ht(),HOe=et(),nH=Et(),Bs=Vc(),eH=di(),Kne=Uo(),{restartWorkers:qh,onMessageByType:Wne}=tt(),{handleHDBError:Qne,hdb_errors:jne}=ie(),{HTTP_STATUS_CODES:zne}=jne,Gh=X();Gh.initSync();var y_=`Restarting HarperDB. This may take up to ${ct.RESTART_TIMEOUT_MS/1e3} seconds.`,Jne="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",tH="Clustering is not enabled so cannot be restarted",Xne="Invalid service",Yc,vn;oH.exports={restart:sH,restartService:$A};FA&&Wne(ct.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?$A({service:e.workerType}):sH({operation:"restart"})});async function sH(e){vn=Object.keys(e).length===0,Yc=await Bs.isServiceRegistered(ct.HDB_PROC_DESCRIPTOR);let t=Yne(process.argv);if(t.service){await $A(t);return}if(vn&&!Yc){console.error(Jne);return}if(vn&&console.log(y_),Yc){Bs.enterPM2Mode(),vs.notify(y_);let r=Kne(Object.keys(ct.CONFIG_PARAM_MAP),!0);return kA.isEmptyOrZeroLength(Object.keys(r))||nH.updateConfigValue(void 0,void 0,r,!0,!0),Zne(),y_}return FA?(vs.notify(y_),setTimeout(()=>{qh()},50)):rH.postMessage({type:ct.ITC_EVENT_TYPES.RESTART}),y_}a(sH,"restart");async function $A(e){let{service:t}=e;if(ct.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Qne(new Error,Xne,zne.BAD_REQUEST,void 0,void 0,!0);if(Yc=await Bs.isServiceRegistered(ct.HDB_PROC_DESCRIPTOR),!FA)return rH.postMessage({type:ct.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case b_.clustering:if(!Gh.get(ct.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=tH;break}vn&&console.log("Restarting clustering"),vs.notify("Restarting clustering"),await iH();break;case b_.clustering_config:case b_["clustering config"]:if(!Gh.get(ct.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=tH;break}vn&&console.log("Restarting clustering_config"),vs.notify("Restarting clustering_config"),await Bs.reloadClustering();break;case"custom_functions":case"custom functions":case b_.harperdb:case b_.http_workers:if(vn&&!Yc){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}vn&&console.log("Restarting http_workers"),vs.notify("Restarting http_workers"),vn?await Bs.restart(ct.HDB_PROC_DESCRIPTOR):setTimeout(()=>{qh("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(vs.error(r),vn&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a($A,"restartService");async function Zne(){await iH(),await Bs.restart(ct.HDB_PROC_DESCRIPTOR),await kA.async_set_timeout(2e3),Gh.get(ct.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await xA(),vn&&(await Bh.closeConnection(),process.exit(0))}a(Zne,"restartPM2Mode");async function iH(){if(!nH.getConfigFromFile(ct.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await eH.getHDBProcessInfo()).clustering.length===0)vs.trace("Clustering not running, restart will start clustering services"),await Hh.generateNatsConfig(!0),await Bs.startClusteringProcesses(),await Bs.startClusteringThreads(),await xA(),vn&&await Bh.closeConnection();else{await Hh.generateNatsConfig(!0),Yc?(vs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Bs.restart(ct.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Bs.restart(ct.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await eH.getHDBProcessInfo()).clustering.forEach(s=>{vs.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await kA.async_set_timeout(3e3),await xA(),await Bh.updateLocalStreams(),vn&&await Bh.closeConnection(),vs.trace("Restart clustering restarting ingest and reply service threads");let t=qh(ct.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=qh(ct.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(iH,"restartClustering");async function xA(){await Hh.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Hh.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(xA,"removeNatsConfig")});var mH=T((FOe,pH)=>{"use strict";var xOe=require("lodash"),qr=C(),{handleHDBError:aH,hdb_errors:ese}=ie(),{HDB_ERROR_MSGS:tse,HTTP_STATUS_CODES:rse}=ese,VA=x();pH.exports={getRolePermissions:sse};var ba=Object.create(null),nse=a(e=>({key:e,perms:{}}),"perms_template_obj"),_H=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),dH=a((e=!1,t=!1,r=!1,n=!1)=>({[qr.PERMS_CRUD_ENUM.READ]:e,[qr.PERMS_CRUD_ENUM.INSERT]:t,[qr.PERMS_CRUD_ENUM.UPDATE]:r,[qr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),YA=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...dH(t,r,n,s)}),"table_perms_template"),cH=a((e,t=dH())=>({attribute_name:e,describe:hH(t),[I_]:t[I_],[KA]:t[KA],[WA]:t[WA]}),"attr_perms_template"),lH=a((e,t=!1)=>({attribute_name:e,describe:t,[I_]:t}),"timestamp_attr_perms_template"),{READ:I_,INSERT:KA,UPDATE:WA}=qr.PERMS_CRUD_ENUM,fH=Object.values(qr.PERMS_CRUD_ENUM),EH=[I_,KA,WA];function sse(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[qr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(ba[t]&&ba[t].key===n)return ba[t].perms;let s=ise(e,r);return ba[t]?ba[t].key=n:ba[t]=nse(n),ba[t].perms=s,s}catch(r){if(!e[qr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[qr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<qr.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 VA.error(n),VA.debug(r),aH(new Error,tse.OUTDATED_PERMS_TRANSLATION_ERROR,rse.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
12
+ ${r.stack}`;throw VA.error(n),aH(new Error)}}}a(sse,"getRolePermissions");function ise(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[qr.SYSTEM_SCHEMA_NAME]=n[qr.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]=ose(t[i]);return}r[i]=_H(),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],_=ase(c,l);r[i].describe||fH.forEach(u=>{_[u]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=YA()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=YA()})}),r}a(ise,"translateRolePermissions");function ose(e){let t=_H(!0);return Object.keys(e).forEach(r=>{t.tables[r]=YA(!0,!0,!0,!0,!0)}),t}a(ose,"createStructureUserPermissions");function ase(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,u)=>{let{attribute_name:d}=u,f=u;return qr.TIME_STAMP_NAMES.includes(d)&&(f=lH(d,u[I_])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=cH(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let u=i[_];u.describe=hH(u),s.attribute_permissions.push(u),c||cse(u,l)}else if(_!==o){let u;qr.TIME_STAMP_NAMES.includes(_)?u=lH(_):u=cH(_),s.attribute_permissions.push(u)}}),c||s.attribute_permissions.push(l),s.describe=uH(s),s}else return e.describe=uH(e),e}a(ase,"getTableAttrPerms");function uH(e){return fH.filter(t=>e[t]).length>0}a(uH,"getSchemaTableDescribePerm");function hH(e){return EH.filter(t=>e[t]).length>0}a(hH,"getAttributeDescribePerm");function cse(e,t){EH.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(cse,"checkForHashPerms")});var w_={};$e(w_,{authentication:()=>bH,bypassAuth:()=>hse,login:()=>mse,logout:()=>Sse,start:()=>pse});function hse(){NH=!0}async function bH(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?dse?_se:[]:use?lse:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new ro([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return xh&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),xh&&o.push("Access-Control-Allow-Credentials","true")}}let l,_;if(xh){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.indexOf(E);if(h>=0){let m=s.indexOf(";",h),S=s.indexOf("=",h);l=s.slice(S+1,m===-1?s.length:m),_=await TH.get(l)}e.session=_||(_={})}e.user=null;let u=a((E,h,m)=>{let S=new Kc.AuthAuditLog(E,h,$t.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===$t.AUTH_AUDIT_STATUS.SUCCESS?SH.notify(S):SH.error(S)},"authAuditLog");if(e.mtlsConfig&&e.authorized){let E=e.mtlsConfig.user;E!==null?((E===void 0||E==="Common Name"||E==="CN")&&(E=e.peerCertificate.subject.CN),e.user=await it.getUser(E,null,null),u(E,$t.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Kc.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=ya.get(n),!d){let[E,h]=n.split(" "),m,S;try{switch(E){case"Basic":[m,S]=atob(h).split(":"),d=m||S?await it.getUser(m,S,e):null;break;case"Bearer":try{d=await(0,Fh.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,Fh.validateRefreshToken)(h),c({status:-1})}catch{throw R}}break}}catch(R){return Ese&&(ya.get(h)||(ya.set(h,h),u(m,$t.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:ho({error:R.message},e)})}ya.set(n,d),fse&&u(d.username,$t.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await it.getUser(_.user,null,e):(NH&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,RH.getSuperUser)());xh&&(e.session.update=function(E){if(!l){l=(0,AH.v4)();let m=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",m):f?.headers?.set&&f.headers.set("Set-Cookie",m)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=l,TH.put(E)},e.login=async function(E,h){e.user=await it.getUser(E,h,e),e.session.update({user:e.user.username})},(d&&!_||_?.user?.username!==d?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let f=await t(e);return f&&(f.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Yi.loginPath?(f.status=302,f.headers.set("Location",Yi.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(l){throw c(l)}function c(l){let _=o.length;if(_>0){let u=l.headers;u||(l.headers=u=new ro);for(let d=0;d<_;){let f=o[d++];u.set(f,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function pse({server:e,port:t}){e.request(bH,{port:t||"all"}),gH||(gH=!0,setInterval(()=>{ya=new Map},Bn.get($t.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),OH.user.addListener(()=>{ya=new Map}))}async function mse(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 Sse(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var RH,Fh,AH,Bn,$t,Kc,OH,SH,lse,use,_se,dse,TH,xh,NH,fse,Ese,ya,gH,kh=Ne(()=>{RH=q(wr());mr();zl();Fh=q(c_());ge();AH=require("uuid"),Bn=q(X()),$t=q(C()),Kc=q(x()),OH=q(Iu());Uu();Wc();SH=(0,Kc.loggerWithTag)("auth-event");Bn.initSync();lse=Bn.get($t.CONFIG_PARAMS.HTTP_CORSACCESSLIST),use=Bn.get($t.CONFIG_PARAMS.HTTP_CORS),_se=Bn.get($t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),dse=Bn.get($t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),TH=ft({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),xh=Bn.get($t.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,NH=Bn.get($t.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,fse=Bn.get($t.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Ese=Bn.get($t.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,ya=new Map;it.onInvalidatedUser(()=>{ya=new Map});a(hse,"bypassAuth");a(bH,"authentication");a(pse,"start");a(mse,"login");a(Sse,"logout")});var PH=T((jOe,DH)=>{"use strict";var Ce=require("joi"),yH=require("fs-extra"),IH=require("path"),Ti=rt(),wH=X(),CH=C(),LH=x(),{hdb_errors:Tse}=ie(),{HDB_ERROR_MSGS:lr}=Tse,Si=/^[a-zA-Z0-9-_]+$/;DH.exports={getDropCustomFunctionValidator:Rse,setCustomFunctionValidator:Ase,addComponentValidator:yse,dropCustomFunctionProjectValidator:Ise,packageComponentValidator:wse,deployComponentValidator:Cse,setComponentFileValidator:Ose,getComponentFileValidator:bse,dropComponentFileValidator:Nse};function $h(e,t,r){try{let n=wH.get(CH.CONFIG_PARAMS.COMPONENTSROOT),s=IH.join(n,t);return yH.existsSync(s)?e?t:r.message(lr.PROJECT_EXISTS):e?r.message(lr.NO_PROJECT):t}catch(n){return LH.error(n),r.message(lr.VALIDATION_ERR)}}a($h,"checkProjectExists");function C_(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(C_,"checkFilePath");function gse(e,t,r,n){try{let s=wH.get(CH.CONFIG_PARAMS.COMPONENTSROOT),i=IH.join(s,e,t,r+".js");return yH.existsSync(i)?r:n.message(lr.NO_FILE)}catch(s){return LH.error(s),n.message(lr.VALIDATION_ERR)}}a(gse,"checkFileExists");function Rse(e){let t=Ce.object({project:Ce.string().pattern(Si).custom($h.bind(null,!0)).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(Si).custom(gse.bind(null,e.project,e.type)).custom(C_).required().messages({"string.pattern.base":lr.BAD_FILE_NAME})});return Ti.validateBySchema(e,t)}a(Rse,"getDropCustomFunctionValidator");function Ase(e){let t=Ce.object({project:Ce.string().pattern(Si).custom($h.bind(null,!0)).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(C_).required(),function_content:Ce.string().required()});return Ti.validateBySchema(e,t)}a(Ase,"setCustomFunctionValidator");function Ose(e){let t=Ce.object({project:Ce.string().pattern(Si).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),file:Ce.string().custom(C_).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ti.validateBySchema(e,t)}a(Ose,"setComponentFileValidator");function Nse(e){let t=Ce.object({project:Ce.string().pattern(Si).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),file:Ce.string().custom(C_).optional()});return Ti.validateBySchema(e,t)}a(Nse,"dropComponentFileValidator");function bse(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(C_).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ti.validateBySchema(e,t)}a(bse,"getComponentFileValidator");function yse(e){let t=Ce.object({project:Ce.string().pattern(Si).custom($h.bind(null,!1)).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME})});return Ti.validateBySchema(e,t)}a(yse,"addComponentValidator");function Ise(e){let t=Ce.object({project:Ce.string().pattern(Si).custom($h.bind(null,!0)).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME})});return Ti.validateBySchema(e,t)}a(Ise,"dropCustomFunctionProjectValidator");function wse(e){let t=Ce.object({project:Ce.string().pattern(Si).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean()});return Ti.validateBySchema(e,t)}a(wse,"packageComponentValidator");function Cse(e){let t=Ce.object({project:Ce.string().pattern(Si).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),payload:Ce.string().optional().messages({"string.pattern.base":lr.BAD_PACKAGE}),package:Ce.string().optional()});return Ti.validateBySchema(e,t)}a(Cse,"deployComponentValidator")});var Wh=T((JOe,GH)=>{"use strict";var Vh=require("joi"),Yh=require("path"),MH=require("fs-extra"),{exec:Lse}=require("child_process"),Dse=require("util"),UH=Dse.promisify(Lse),L_=C(),{handleHDBError:Qc,hdb_errors:Pse}=ie(),{HTTP_STATUS_CODES:jc}=Pse,D_=X(),Mse=rt(),zc=x();D_.initSync();var QA=D_.get(L_.CONFIG_PARAMS.COMPONENTSROOT),vH="npm install --omit=dev --json",Use=`${vH} --dry-run`;GH.exports={installModules:qse,auditModules:Gse,installAllRootModules:vse,uninstallRootModule:Bse,linkHarperdb:Hse};async function vse(e=!1){await Kh(),await P_(e?"npm install --ignore-scripts":"npm install",D_.get(L_.CONFIG_PARAMS.ROOTPATH))}a(vse,"installAllRootModules");async function Bse(e){await P_(`npm uninstall ${e}`,D_.get(L_.CONFIG_PARAMS.ROOTPATH))}a(Bse,"uninstallRootModule");async function Hse(){await Kh(),await P_(`npm link ${L_.PACKAGE_ROOT}`,D_.get(L_.CONFIG_PARAMS.ROOTPATH))}a(Hse,"linkHarperdb");async function P_(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await UH(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
13
13
  `,""))}return n&&!n.includes("Debugger listening")&&zc.error("Error running NPM command:",e,n),zc.trace(r,n),r?.replace(`
14
- `,"")}a(U_,"runCommand");async function mse(e){zc.info(`starting installModules for request: ${e}`);let t=gH(e);if(t)throw Qc(t,t.message,jc.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?fse:mH;await Mh(),await TH(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 _=Ph.join(HA,l),u,d=null;try{let{stdout:f,stderr:E}=await pH(s,{cwd:_});u=f?f.replace(`
14
+ `,"")}a(P_,"runCommand");async function qse(e){zc.info(`starting installModules for request: ${e}`);let t=qH(e);if(t)throw Qc(t,t.message,jc.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?Use:vH;await Kh(),await HH(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 _=Yh.join(QA,l),u,d=null;try{let{stdout:f,stderr:E}=await UH(s,{cwd:_});u=f?f.replace(`
15
15
  `,""):null,d=E?E.replace(`
16
- `,""):null}catch(f){f.stderr?i[l].npm_error=SH(f.stderr):i[l].npm_error=f.message;continue}try{i[l].npm_output=JSON.parse(u)}catch{i[l].npm_output=u}try{i[l].npm_error=JSON.parse(d)}catch{i[l].npm_error=d}}return zc.info(`finished installModules with response ${i}`),i}a(mse,"installModules");function SH(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
17
- `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(SH,"parseNPMStdErr");async function Sse(e){zc.info(`starting auditModules for request: ${e}`);let t=gH(e);if(t)throw Qc(t,t.message,jc.BAD_REQUEST);let{projects:r}=e;await Mh(),await TH(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Ph.join(HA,o);n[o]={npm_output:null,npm_error:null};try{let l=await U_("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=SH(l.stderr)}}return zc.info(`finished auditModules with response ${n}`),n}a(Sse,"auditModules");async function Mh(){try{return await U_("npm -v"),!0}catch{throw Qc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",jc.BAD_REQUEST,void 0,void 0,!0)}}a(Mh,"checkNPMInstalled");async function TH(e){if(!Array.isArray(e)||e.length===0)throw Qc(new Error,"projects argument must be an array with at least 1 element",jc.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=Ph.join(HA,i.toString());if(!await hH.pathExists(o)){t.push(i);continue}let l=Ph.join(o,"package.json");await hH.pathExists(l)||r.push(i)}if(t.length>0)throw Qc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,jc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Qc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,jc.BAD_REQUEST,void 0,void 0,!0)}a(TH,"checkProjectPaths");function gH(e){let t=Dh.object({projects:Dh.array().min(1).items(Dh.string()).required(),dry_run:Dh.boolean().default(!1)});return dse.validateBySchema(e,t)}a(gH,"modulesValidator")});var xA=g((GOe,yH)=>{"use strict";var Jc=require("fs-extra"),qA=require("path"),vh=G(),AH=Q(),Bh=C(),bH=J(),Tse=ht();yH.exports=gse;async function gse(){let e=Rse(),t=bH.get(Bh.CONFIG_PARAMS.ROOTPATH),r=qA.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Bh.PACKAGE_ROOT}},s=qA.join(t,"node_modules");await Jc.ensureDir(s);let i,o=!0,c=!1;try{i=await Jc.readJson(r)}catch(l){if(AH.isEmptyOrZeroLength(e))return;if(l.code!==Bh.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!AH.isEmptyOrZeroLength(e)){for(let{name:l,package:_}of e){let u=await OH(_);n.dependencies[l]=u+_}if(!o){vh.notify("Installing components"),await NH(r,n,null);return}for(let{name:l,package:_}of e){let u=i.dependencies[l],d=await OH(_);if(u===void 0||u!==d+_){c=!0;break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(vh.notify("Removing component",l),c=!0);c&&(vh.notify("Updating components."),await NH(r,n,i))}a(gse,"installComponents");function Rse(){let e=Tse.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(Rse,"getComponentsConfig");async function OH(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":qA.extname(e)||await Jc.pathExists(e)?"file:":"github:"}a(OH,"getPkgPrefix");async function NH(e,t,r){vh.trace("npm installing components package.json",t),await Jc.writeFile(e,JSON.stringify(t,null," "));try{await Uh().installAllRootModules(bH.get(Bh.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await Jc.writeFile(e,JSON.stringify(r,null," ")):await Jc.unlink(e),n}}a(NH,"installPackages")});var Hh=g(($Oe,LH)=>{"use strict";var Ye=require("fs-extra"),GA=require("fast-glob"),Te=require("path"),wH=require("tar-fs"),kOe=require("uuid").v4,FA=require("normalize-path"),Bs=EH(),Bt=G(),Xe=C(),Nt=J(),v_=ht(),Ase=Q(),{PACKAGE_ROOT:Ose}=C(),{handleHDBError:$t,hdb_errors:Nse}=se(),{basename:bse}=require("path"),yse=xA(),CH=J(),Ise=C(),{Readable:wse}=require("stream"),{isMainThread:Cse}=require("worker_threads"),{HDB_ERROR_MSGS:wa,HTTP_STATUS_CODES:Vt}=Nse,Lse=Te.join(Ose,"application-template"),IH=Te.join(Nt.get(Xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Dse(){Bt.trace("getting custom api status");let e={};try{e={port:Nt.get(Xe.CONFIG_PARAMS.HTTP_PORT),directory:Nt.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw $t(new Error,wa.FUNCTION_STATUS,Vt.INTERNAL_SERVER_ERROR,Bt.ERR,t)}return e}a(Dse,"customFunctionsStatus");function Pse(){Bt.trace("getting custom api endpoints");let e={},t=Nt.get(Xe.CONFIG_PARAMS.COMPONENTSROOT);try{GA.sync(FA(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:GA.sync(FA(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:GA.sync(FA(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw $t(new Error,wa.GET_FUNCTIONS,Vt.INTERNAL_SERVER_ERROR,Bt.ERR,r)}return e}a(Pse,"getCustomFunctions");function Mse(e){e.project&&(e.project=Te.parse(e.project).name),e.file&&(e.file=Te.parse(e.file).name);let t=Bs.getDropCustomFunctionValidator(e);if(t)throw $t(t,t.message,Vt.BAD_REQUEST);Bt.trace("getting custom api endpoint file content");let r=Nt.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=Te.join(r,n,s,i+".js");try{return Ye.readFileSync(o,{encoding:"utf8"})}catch(c){throw $t(new Error,wa.GET_FUNCTION,Vt.INTERNAL_SERVER_ERROR,Bt.ERR,c)}}a(Mse,"getCustomFunction");function Use(e){e.project&&(e.project=Te.parse(e.project).name),e.file&&(e.file=Te.parse(e.file).name);let t=Bs.setCustomFunctionValidator(e);if(t)throw $t(t,t.message,Vt.BAD_REQUEST);Bt.trace("setting custom function file content");let r=Nt.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return Ye.outputFileSync(Te.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw $t(new Error,wa.SET_FUNCTION,Vt.INTERNAL_SERVER_ERROR,Bt.ERR,c)}}a(Use,"setCustomFunction");function vse(e){e.project&&(e.project=Te.parse(e.project).name),e.file&&(e.file=Te.parse(e.file).name);let t=Bs.getDropCustomFunctionValidator(e);if(t)throw $t(t,t.message,Vt.BAD_REQUEST);Bt.trace("dropping custom function file");let r=Nt.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return Ye.unlinkSync(Te.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw $t(new Error,wa.DROP_FUNCTION,Vt.INTERNAL_SERVER_ERROR,Bt.ERR,o)}}a(vse,"dropCustomFunction");function Bse(e){e.project&&(e.project=Te.parse(e.project).name);let t=Bs.addComponentValidator(e);if(t)throw $t(t,t.message,Vt.BAD_REQUEST);Bt.trace("adding component");let r=Nt.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Te.join(r,n);return Ye.mkdirSync(s,{recursive:!0}),Ye.copySync(Lse,s),`Successfully added project: ${n}`}catch(s){throw $t(new Error,wa.ADD_FUNCTION,Vt.INTERNAL_SERVER_ERROR,Bt.ERR,s)}}a(Bse,"addComponent");function Hse(e){e.project&&(e.project=Te.parse(e.project).name);let t=Bs.dropCustomFunctionProjectValidator(e);if(t)throw $t(t,t.message,Vt.BAD_REQUEST);Bt.trace("dropping custom function project");let r=Nt.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Nt.get(Xe.CONFIG_PARAMS.APPS);if(!Ase.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 v_.updateConfigValue(Xe.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Te.join(r,n);return Ye.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw $t(new Error,wa.DROP_FUNCTION_PROJECT,Vt.INTERNAL_SERVER_ERROR,Bt.ERR,i)}}a(Hse,"dropCustomFunctionProject");async function qse(e){e.project&&(e.project=Te.parse(e.project).name);let t=Bs.packageComponentValidator(e);if(t)throw $t(t,t.message,Vt.BAD_REQUEST);let r=Nt.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Bt.trace("packaging component",n);let s;try{s=await Ye.realpath(Te.join(r,n))}catch(l){if(l.code!==Xe.NODE_ERROR_CODES.ENOENT)throw l;try{s=await Ye.realpath(Te.join(Nt.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 Ye.ensureDir(IH);let i=Te.join(IH,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:l=>l.includes(Te.join(s,"node_modules"))}),wH.pack(s,o).pipe(Ye.createWriteStream(i,{overwrite:!0})),await new Promise(l=>setTimeout(l,2e3));let c=Ye.readFileSync(i,{encoding:"base64"});return await Ye.remove(i),{project:n,payload:c}}a(qse,"packageComponent");async function xse(e){e.project&&(e.project=Te.parse(e.project).name);let t=Bs.deployComponentValidator(e);if(t)throw $t(t,t.message,Vt.BAD_REQUEST);let r=Nt.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(Bt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=Te.join(r,n),i="file:"+o,await Ye.ensureDir(o);let f=wse.from(Buffer.from(s,"base64"));await new Promise((h,m)=>{f.pipe(wH.extract(o,{finish:h})).on("error",m)});let E=await Ye.readdir(o);E.length===1&&E[0]==="package"&&(await Ye.copy(Te.join(o,"package"),o),await Ye.remove(Te.join(o,"package")))}if(await v_.addConfig(n,{package:i}),!s){await yse();let f=CH.get(Ise.CONFIG_PARAMS.ROOTPATH);o=Te.join(f,"node_modules",n)}if(Cse)return;let c=new Map;c.isWorker=!0;let l=(xh(),ie(qh)),_;l.setErrorReporter(f=>_=f);let u=bse(o),d=l.component_errors.get(u);try{await l.loadComponent(o,c)}finally{l.component_errors.set(u,d)}if(_)throw _;return Bt.info("Installed component"),`Successfully deployed: ${n}`}a(xse,"deployComponent");async function Gse(){let e=v_.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let l=await Ye.readdir(o,{withFileTypes:!0});for(let _ of l){let u=_.name;if(u.startsWith(".")||u==="node_modules")continue;let d=Te.join(o,u);if(_.isDirectory()||_.isSymbolicLink()){let f={name:u,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Ye.stat(d),E={name:Te.basename(u),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(l){return Bt.warn("Error loading package",l),{error:l.toString(),entries:[]}}},"walk_dir"),n=await r(Nt.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{name:Nt.get(Xe.CONFIG_PARAMS.COMPONENTSROOT).split(Te.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(Te.join(Nt.get(Xe.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(xh(),ie(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(Gse,"getComponents");async function Fse(e){let t=Bs.getComponentFileValidator(e);if(t)throw $t(t,t.message,Vt.BAD_REQUEST);let n=v_.getConfigObj()[e.project]||e.project==="harperdb"?Te.join(CH.get(Xe.CONFIG_PARAMS.ROOTPATH),"node_modules"):Nt.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ye.stat(Te.join(n,e.project,e.file));return{message:await Ye.readFile(Te.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 '${Te.join(e.project,e.file)}'`):i}}a(Fse,"getComponentFile");async function kse(e){let t=Bs.setComponentFileValidator(e);if(t)throw $t(t,t.message,Vt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Te.join(Nt.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Ye.ensureFile(n),await Ye.outputFile(n,e.payload,r)):await Ye.ensureDir(n),"Successfully set component: "+e.file}a(kse,"setComponentFile");async function $se(e){let t=Bs.dropComponentFileValidator(e);if(t)throw $t(t,t.message,Vt.BAD_REQUEST);let r=e.file?Te.join(e.project,e.file):e.project,n=Te.join(Nt.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),r);return await Ye.pathExists(n)&&await Ye.remove(n),v_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a($se,"dropComponent");LH.exports={customFunctionsStatus:Dse,getCustomFunctions:Pse,getCustomFunction:Mse,setCustomFunction:Use,dropCustomFunction:vse,addComponent:Bse,dropCustomFunctionProject:Hse,packageComponent:qse,deployComponent:xse,getComponents:Gse,getComponentFile:Fse,setComponentFile:kse,dropComponent:$se}});var kA=g((YOe,PH)=>{"use strict";var Hs=require("joi"),DH=nt();PH.exports={readTransactionLogValidator:Vse,deleteTransactionLogsBeforeValidator:Yse};function Vse(e){let t=Hs.object({schema:Hs.string().required(),table:Hs.string().required(),from:Hs.date().timestamp(),to:Hs.date().timestamp(),limit:Hs.number().min(1)});return DH.validateBySchema(e,t)}a(Vse,"readTransactionLogValidator");function Yse(e){let t=Hs.object({schema:Hs.string().required(),table:Hs.string().required(),timestamp:Hs.date().timestamp().required()});return DH.validateBySchema(e,t)}a(Yse,"deleteTransactionLogsBeforeValidator")});var Fh=g((WOe,HH)=>{"use strict";var $A=C(),Gh=pt(),MH=Q(),UH=J(),vH=li(),{handleHDBError:Xc,hdb_errors:Kse}=se(),{HTTP_STATUS_CODES:Zc}=Kse,{readTransactionLogValidator:Wse,deleteTransactionLogsBeforeValidator:Qse}=kA(),BH="This operation relies on clustering and cannot run with it disable.",jse="Logs successfully deleted from transaction log.",zse="All logs successfully deleted from transaction log.";HH.exports={readTransactionLog:Jse,deleteTransactionLogsBefore:Xse};async function*Jse(e){let t=Wse(e);if(t)throw Xc(t,t.message,Zc.BAD_REQUEST,void 0,void 0,!0);if(!UH.get($A.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Xc(new Error,BH,Zc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=MH.checkSchemaTableExist(r,n);if(s)throw Xc(new Error,s,Zc.NOT_FOUND,void 0,void 0,!0);let i=vH.createNatsTableStreamName(r,n),o=await Gh.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===$A.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(Jse,"readTransactionLog");async function Xse(e){let t=Qse(e);if(t)throw Xc(t,t.message,Zc.BAD_REQUEST,void 0,void 0,!0);if(!UH.get($A.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Xc(new Error,BH,Zc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=MH.checkSchemaTableExist(r,n);if(i)throw Xc(new Error,i,Zc.NOT_FOUND,void 0,void 0,!0);let o=vH.createNatsTableStreamName(r,n),{jsm:c}=await Gh.getNATSReferences(),l=await Gh.getStreamInfo(o),_=new Date(l.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let u=jse,d,f=new Date(l.state.last_ts).getTime();return s>f?(d=l.state.last_seq+1,u=zse):d=(await Gh.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),u}a(Xse,"deleteTransactionLogsBefore")});var xH=g((jOe,qH)=>{"use strict";var VA=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}};qH.exports=VA});var FH=g((JOe,GH)=>{"use strict";var YA=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};GH.exports=YA});var WA=g((ZOe,$H)=>{"use strict";var kH=xH(),Zse=FH(),{HDB_ERROR_MSGS:eie}=Kr(),KA=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=eie.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 kH(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Zse(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 kH(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}};$H.exports=KA});var Yh=g((tNe,iq)=>{"use strict";var QA=Or(),kh=Ar(),Hn=xE(),q_=zi(),jA=ra(),tie=pR(),rie=sv(),x_=yr(),$h=$E(),Ht=G(),nie=IR(),sie=E_(),iie=cA(),oie=nh(),aie=ih(),cie=lA(),lie=ch(),uie=uh(),zA=dh(),Ti=Q(),_ie=eB(),JA=Eh(),KH=ba(),Bn=C(),WH=ZB(),die=di(),QH=u_(),jH=(Ch(),ie(L_)),zH=ht(),En=Hh(),fie=require("alasql"),JH=Fh(),XH=Uh(),ZH=WA(),{handleHDBError:Hr,hdb_errors:eq}=se(),{HDB_ERROR_MSGS:Xt,HTTP_STATUS_CODES:B_}=eq,$=new Map,tq="delete",po="insert",gi="read",Ca="update",H_="describe",VH=q_.describeSchema.name,YH=q_.describeTable.name,rq={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Eie="catchup",hie="handleGetJob",pie="handleGetJobsByStartDate",Vh={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},mie=[Hn.createTable.name,Hn.createAttribute.name,Hn.dropTable.name,Hn.dropAttribute.name],nq={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},z=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};$.set(QA.insert.name,new z(!1,[po]));$.set(QA.update.name,new z(!1,[Ca]));$.set(QA.upsert.name,new z(!1,[po,Ca]));$.set(kh.searchByConditions.name,new z(!1,[gi]));$.set(kh.searchByHash.name,new z(!1,[gi]));$.set(kh.searchByValue.name,new z(!1,[gi]));$.set(kh.search.name,new z(!1,[gi]));$.set(Hn.createSchema.name,new z(!0,[]));$.set(Hn.createTable.name,new z(!0,[]));$.set(Hn.createAttribute.name,new z(!1,[po]));$.set(Hn.dropSchema.name,new z(!0,[]));$.set(Hn.dropTable.name,new z(!0,[]));$.set(Hn.dropAttribute.name,new z(!0,[]));$.set(q_.describeSchema.name,new z(!1,[gi]));$.set(q_.describeTable.name,new z(!1,[gi]));$.set(jA.deleteRecord.name,new z(!1,[tq]));$.set(x_.addUser.name,new z(!0,[]));$.set(x_.alterUser.name,new z(!0,[]));$.set(x_.dropUser.name,new z(!0,[]));$.set(x_.listUsersExternal.name,new z(!0,[]));$.set($h.listRoles.name,new z(!0,[]));$.set($h.addRole.name,new z(!0,[]));$.set($h.alterRole.name,new z(!0,[]));$.set($h.dropRole.name,new z(!0,[]));$.set(nie.name,new z(!0,[]));$.set(sie.name,new z(!0,[]));$.set(iie.name,new z(!0,[]));$.set(oie.name,new z(!0,[]));$.set(aie.name,new z(!0,[]));$.set(cie.name,new z(!0,[]));$.set(zA.setRoutes.name,new z(!0,[]));$.set(zA.getRoutes.name,new z(!0,[]));$.set(zA.deleteRoutes.name,new z(!0,[]));$.set(zH.setConfiguration.name,new z(!0,[]));$.set(lie.clusterStatus.name,new z(!0,[]));$.set(uie.name,new z(!0,[]));$.set(JA.getFingerprint.name,new z(!0,[]));$.set(JA.setLicense.name,new z(!0,[]));$.set(jA.deleteFilesBefore.name,new z(!0,[]));$.set(jA.deleteAuditLogsBefore.name,new z(!0,[]));$.set(KH.restart.name,new z(!0,[]));$.set(KH.restartService.name,new z(!0,[]));$.set(tie.name,new z(!0,[]));$.set(rie.name,new z(!0,[gi]));$.set(die.systemInformation.name,new z(!0,[]));$.set(zH.getConfiguration.name,new z(!0,[]));$.set(JH.readTransactionLog.name,new z(!0,[]));$.set(JH.deleteTransactionLogsBefore.name,new z(!0,[]));$.set(XH.installModules.name,new z(!0,[]));$.set(XH.auditModules.name,new z(!0,[]));$.set(QH.createTokens.name,new z(!1,[]));$.set(QH.refreshOperationToken.name,new z(!1,[]));$.set(jH.login.name,new z(!1,[]));$.set(jH.logout.name,new z(!1,[]));$.set(En.customFunctionsStatus.name,new z(!0,[]));$.set(En.getCustomFunctions.name,new z(!0,[]));$.set(En.getComponents.name,new z(!0,[]));$.set(En.getComponentFile.name,new z(!0,[]));$.set(En.setComponentFile.name,new z(!0,[]));$.set(En.dropComponent.name,new z(!0,[]));$.set(En.getCustomFunction.name,new z(!0,[]));$.set(En.setCustomFunction.name,new z(!0,[]));$.set(En.dropCustomFunction.name,new z(!0,[]));$.set(En.addComponent.name,new z(!0,[]));$.set(En.dropCustomFunctionProject.name,new z(!0,[]));$.set(En.packageComponent.name,new z(!0,[]));$.set(En.deployComponent.name,new z(!0,[]));$.set(JA.getRegistrationInfo.name,new z(!1,[]));$.set(x_.userInfo.name,new z(!1,[]));$.set(q_.describeAll.name,new z(!1,[]));$.set(hie,new z(!1,[]));$.set(pie,new z(!0,[]));$.set(Eie,new z(!0,[]));$.set(Vh.CSV_DATA_LOAD,new z(!1,[po,Ca]));$.set(Vh.CSV_URL_LOAD,new z(!1,[po,Ca]));$.set(Vh.CSV_FILE_LOAD,new z(!1,[po,Ca]));$.set(Vh.IMPORT_FROM_S3,new z(!1,[po,Ca]));$.set(nq.EXPORT_TO_S3,new z(!0,[]));$.set(nq.EXPORT_LOCAL,new z(!0,[]));$.set(Bn.VALID_SQL_OPS_ENUM.DELETE,new z(!1,[tq]));$.set(Bn.VALID_SQL_OPS_ENUM.SELECT,new z(!1,[gi]));$.set(Bn.VALID_SQL_OPS_ENUM.INSERT,new z(!1,[po]));$.set(Bn.VALID_SQL_OPS_ENUM.UPDATE,new z(!1,[Ca]));iq.exports={verifyPerms:Tie,verifyPermsAst:Sie,verifyBulkLoadAttributePerms:Rie};function Sie(e,t,r){if(Ti.isEmptyOrZeroLength(e))throw Ht.info("verify_perms_ast has an empty user parameter"),Hr(new Error);if(Ti.isEmptyOrZeroLength(t))throw Ht.info("verify_perms_ast has an empty user parameter"),Hr(new Error);if(Ti.isEmptyOrZeroLength(r))throw Ht.info("verify_perms_ast has a null operation parameter"),Hr(new Error);try{let n=new ZH,s=new _ie(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Ht.info("No schemas defined in verifyPermsAst(), will not continue."),Hr(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&rq[r])throw Hr(new Error,Xt.DROP_SYSTEM,B_.FORBIDDEN);if(c&&!l)return null;let _=WH.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof fie.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=s.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let u=sq(t,r,o,n);return u||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=s.getAttributesBySchemaTableName(f,d[E]),m=ZA(t.role.permission,f,d[E]);XA(h,m,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw Hr(n)}}a(Sie,"verifyPermsAst");function Tie(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Ht.info("null required parameter in verifyPerms"),Hr(new Error,Xt.DEFAULT_INVALID_REQUEST,B_.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new ZH;if(Ti.isEmptyOrZeroLength(e.hdb_user.role)||Ti.isEmptyOrZeroLength(e.hdb_user.role.permission))return Ht.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Xt.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(Bn.SYSTEM_SCHEMA_NAME)||s===Bn.SYSTEM_SCHEMA_NAME;if(u&&rq[r])throw Hr(new Error,Xt.DROP_SYSTEM,B_.FORBIDDEN);if(l&&!u||_===!0&&(r===Hn.createSchema.name||r===Hn.dropSchema.name))return null;if(mie.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=WH.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===VH||r===YH){if(s===Bn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Xt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===VH&&(!d[s]||!d[s][H_]))return c.handleInvalidItem(Xt.SCHEMA_NOT_FOUND(s));if(r===YH&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][H_]))return c.handleInvalidItem(Xt.TABLE_NOT_FOUND(s,i))}}let f=sq(e.hdb_user,r,o,c,n);if(f)return f;if($.get(r)&&$.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Bn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let m=[],S=d[s].tables[i];S[Bn.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(T=>T[Bn.PERMS_CRUD_ENUM.READ]).forEach(T=>{m.push(T.attribute_name)}):m=global.hdb_schema[s][i].attributes.map(A=>A.attribute),e.get_attributes=m)}let E=gie(e),h=ZA(e.hdb_user.role.permission,s,i);return XA(E,h,r,i,s,c,n),c.getPermsResponse()}a(Tie,"verifyPerms");function sq(e,t,r,n,s){if(Ti.arrayHasEmptyValues([e,t,r]))throw Ht.info("hasPermissions has an invalid parameter"),Hr(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 Ht.info(`operation ${t} not found.`),Hr(new Error,Xt.OP_NOT_FOUND(t),B_.BAD_REQUEST);if($.get(t)&&$.get(t).requires_su)return Ht.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Xt.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][H_]===!1){n.addInvalidItem(Xt.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(Xt.SCHEMA_NOT_FOUND(l));continue}let _=r.get(l);for(let u of _){let d=o[l].tables[u];if(!d||d[H_]===!1)n.addInvalidItem(Xt.TABLE_NOT_FOUND(l,u));else try{let f=[],E=$.get(t).perms;!Ti.isEmpty(s)&&E.includes(s)&&(E=[s]);for(let h=0;h<E.length;h++){let m=E[h],S=d[m];(S==null||S===!1)&&(Ht.info(`Required ${m} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),f.push(m))}f.length>0&&n.addUnauthorizedTable(l,u,f)}catch(f){let E=Xt.UNKNOWN_OP_AUTH_ERROR(t,l,u);throw Ht.error(E),Ht.error(f),Hr(eq.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(sq,"hasPermissions");function XA(e,t,r,n,s,i,o){if(!e||!t)throw Ht.info("no attributes specified in checkAttributePerms."),Hr(new Error);let c=$.get(r).perms;if(!c||c==="")throw Ht.info(`no permissions found for ${r} in checkAttributePerms().`),Hr(new Error);if(Ti.isEmptyOrZeroLength(t))return Ht.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let u of e){let d=t.get(u);if(d){if(d[H_]===!1){i.addInvalidItem(Xt.ATTR_NOT_FOUND(s,n,u),s,n);continue}if(c)for(let f of c){if(Bn.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==gi)throw Hr(new Error,Xt.SYSTEM_TIMESTAMP_PERMS_ERR,B_.FORBIDDEN);d[f]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(f):l[d.attribute_name]=[f])}}else i.addInvalidItem(Xt.ATTR_NOT_FOUND(s,n,u),s,n)}let _=Object.keys(l);_.length>0&&i.addUnauthorizedAttributes(_,s,n,l)}a(XA,"checkAttributePerms");function gie(e){let t=new Set;try{if(e.action)return t;if(e.operation===Bn.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){Ht.info(r)}return t}a(gie,"getRecordAttributes");function ZA(e,t,r){let n=new Map;if(Ti.isEmpty(e))return Ht.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{Ht.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(ZA,"getAttributePermissions");function Rie(e,t,r,n,s,i,o){let c=new Set(i),l=ZA(e,n,s);XA(c,l,t,s,n,o,r)}a(Rie,"verifyBulkLoadAttributePerms")});var Wh=g((nNe,uq)=>{"use strict";uq.exports={evaluateSQL:Uie,processAST:lq,convertSQLToAST:cq,checkASTPermissions:aq};var Aie=Or(),oq=require("util"),Oie=oq.callbackify(Aie.insert),Nie=Ar().search,bie=hU().update,yie=oq.callbackify(bie),Iie=mU().convertDelete,mo=require("alasql"),wie=Yh(),Kh=G(),Cie=kf(),Lie=Q(),G_=C(),{hdb_errors:Die,handleHDBError:eO}=se(),{HTTP_STATUS_CODES:tO}=Die;Cie(mo);var Pie=403,Mie="There was a problem performing this insert. Please check the logs and try again.",rO=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Uie(e,t){let r=e.parsed_sql_object;if(!r){r=cq(e.sql);let n,s=r.ast.statements[0];if(s instanceof mo.yy.Insert?n=s.into.databaseid:s instanceof mo.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof mo.yy.Update||s instanceof mo.yy.Delete?n=s.table.databaseid:Kh.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof mo.yy.Select)&&Lie.isEmptyOrZeroLength(n))return t("No schema specified",null)}lq(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Uie,"evaluateSQL");function aq(e,t){let r;try{r=wie.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(aq,"checkASTPermissions");function cq(e){let t=new rO;if(!e)throw eO(new Error,"The 'sql' parameter is missing from the request body",tO.BAD_REQUEST);try{let r=e.trim(),n=mo.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
18
- `);throw n[1]?eO(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,tO.BAD_REQUEST):eO(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",tO.BAD_REQUEST)}return t}a(cq,"convertSQLToAST");function lq(e,t,r){try{let n=vie;if(!e.bypass_auth&&!t.permissions_checked){let i=aq(e,t);if(i&&i.length>0)return r(Pie,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case G_.VALID_SQL_OPS_ENUM.SELECT:n=Nie,s=t.ast.statements[0];break;case G_.VALID_SQL_OPS_ENUM.INSERT:n=Bie;break;case G_.VALID_SQL_OPS_ENUM.UPDATE:n=yie;break;case G_.VALID_SQL_OPS_ENUM.DELETE:n=Iie;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(lq,"processAST");function vie(e,t){Kh.info(e),t("unknown sql statement")}a(vie,"nullFunction");function Bie({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=Hie(i,e.values)}catch(o){return r(o)}Oie(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){Kh.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(Bie,"convertInsert");function Hie(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]]=mo.compile(`SELECT ${s.toString()} AS [${G_.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Kh.error(r),new Error(Mie)}}a(Hie,"createDataObjects")});var nO=g((iNe,dq)=>{"use strict";var{S3:qie,GetObjectCommand:xie}=require("@aws-sdk/client-s3");dq.exports={getFileStreamFromS3:Gie,getS3AuthObj:_q};async function Gie(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await _q(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new xie(r))).Body}a(Gie,"getFileStreamFromS3");function _q(e,t,r){return new qie({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(_q,"getS3AuthObj")});var Qh=g((aNe,Rq)=>{"use strict";var iO=Ar(),Fie=Wh(),kie=nO(),{AsyncParser:$ie,Transform:Vie}=require("json2csv"),k_=require("stream"),hn=Q(),sO=require("fs-extra"),Yie=require("path"),qn=G(),{promisify:hq}=require("util"),F_=Q(),{handleHDBError:bt,hdb_errors:Kie}=se(),{HDB_ERROR_MSGS:qr,HTTP_STATUS_CODES:yt}=Kie,{streamAsJSON:Wie}=(tR(),ie(uU)),{Upload:Qie}=require("@aws-sdk/lib-storage"),fq=["search_by_value","search_by_hash","sql","search_by_conditions"],Eq=["json","csv"],pq="json",mq="csv",jie="Successfully exported JSON locally.",zie="Successfully exported CSV locally.",Jie=1e3,Xie=iO.searchByHash,Zie=iO.searchByValue,eoe=hq(Fie.evaluateSQL),toe=hq(k_.finished);Rq.exports={export_to_s3:ioe,export_local:roe,toCsvStream:Sq};async function roe(e){qn.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Tq(e);if(!hn.isEmpty(t))throw qn.error(t),bt(new Error,t,yt.BAD_REQUEST,void 0,void 0,!0);if(hn.isEmpty(e.path))throw qn.error(qr.MISSING_VALUE("path")),bt(new Error,qr.MISSING_VALUE("path"),yt.BAD_REQUEST,void 0,void 0,!0);let r=(hn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Yie.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=hn.buildFolderPath(e.path,r);await noe(e.path);let s=await gq(e);return await soe(n,e.format,s)}a(roe,"export_local");async function noe(e){if(qn.trace("in confirmPath"),hn.isEmptyOrZeroLength(e))throw bt(new Error,`Invalid path: ${e}`,yt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await sO.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,qn.error(n),bt(new Error,n,yt.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 qn.error(r),bt(new Error,r,yt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(noe,"confirmPath");async function soe(e,t,r){if(qn.trace("in saveToLocal"),F_.isEmptyOrZeroLength(e))throw bt(new Error,qr.INVALID_VALUE("file_path"),yt.BAD_REQUEST,void 0,void 0,!0);if(F_.isEmptyOrZeroLength(t))throw bt(new Error,qr.INVALID_VALUE("Source format"),yt.BAD_REQUEST,void 0,void 0,!0);if(F_.isEmpty(r))throw bt(new Error,qr.NOT_FOUND("Data"),yt.BAD_REQUEST,void 0,void 0,!0);if(t===pq){let n=sO.createWriteStream(e);return Wie(r).pipe(n),await toe(n),{message:jie,path:e}}else if(t===mq){let n=sO.createWriteStream(e),s=k_.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(u=>({label:u,value:u})));let c={objectMode:!0};return await new $ie(i,c).fromInput(s).toOutput(n).promise(!1),{message:zie,path:e}}throw bt(new Error,qr.INVALID_VALUE("format"),yt.BAD_REQUEST)}a(soe,"saveToLocal");async function ioe(e){if(!e.s3||Object.keys(e.s3).length===0)throw bt(new Error,qr.MISSING_VALUE("S3 object"),yt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw bt(new Error,qr.MISSING_VALUE("aws_access_key_id"),yt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw bt(new Error,qr.MISSING_VALUE("aws_secret_access_key"),yt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.bucket))throw bt(new Error,qr.MISSING_VALUE("bucket"),yt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.key))throw bt(new Error,qr.MISSING_VALUE("key"),yt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.region))throw bt(new Error,qr.MISSING_VALUE("region"),yt.BAD_REQUEST);let t=Tq(e);if(!hn.isEmpty(t))throw bt(new Error,t,yt.BAD_REQUEST);qn.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await gq(e)}catch(l){throw qn.error(l),l}let n,s=await kie.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new k_.PassThrough;if(e.format===mq){i=e.s3.key+".csv";let l=Sq(r,r.getColumns?.());l.on("error",_=>{throw _}),l.pipe(o)}else if(e.format===pq){i=e.s3.key+".json";let l=new k_.Readable;l.pipe(o),l.on("error",d=>{throw d}),l.push("[");let _=r.length,u="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";u+=E,d!==0&&d%Jie===0&&(l.push(u),u="")}u.length!==0&&l.push(u),l.push("]"),l.push(null)}else throw bt(new Error,qr.INVALID_VALUE("format"),yt.BAD_REQUEST);return new Qie({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(ioe,"export_to_s3");function Sq(e,t){let r=k_.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new Vie(n,s);return r.pipe(i)}a(Sq,"toCsvStream");function Tq(e){if(qn.trace("in exportCoreValidation"),hn.isEmpty(e.format))return"format missing";if(Eq.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Eq.join(", ")}`;let t=e.search_operation.operation;if(hn.isEmpty(t))return"search_operation.operation missing";if(fq.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${fq.join(", ")}`}a(Tq,"exportCoreValidation");async function gq(e){qn.trace("in getRecords");let t,r;if(F_.isEmpty(e.search_operation)||F_.isEmptyOrZeroLength(e.search_operation.operation))throw bt(new Error,qr.INVALID_VALUE("Search operation"),yt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Zie;break;case"search_by_hash":t=Xie;break;case"search_by_conditions":t=iO.searchByConditions;break;case"sql":t=eoe;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,qn.error(r),bt(new Error,r,yt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(gq,"getRecords")});var Cq={};$e(Cq,{contentTypes:()=>uO,findBestSerializer:()=>zh,getDeserializer:()=>Da,registerContentHandlers:()=>_O,serialize:()=>Jh,serializeMessage:()=>ho});function ooe(e){try{return e?.[0]===123?lO(e):e}catch{return e}}function _O(e){e.register(coe,{serializers:[{regex:/^application\/json$/,serializer:Xu},{regex:/^application\/cbor$/,serializer:function(t){return new La.EncoderStream(V_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?jh.Readable.from((0,qs.encodeIter)(t,V_)):(0,qs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,oO.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,qs.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,La.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function zh(e){let r=(e.headers.asObject||e.headers).accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[_,...u]=l.split(/\s*;\s*/),d=1,f={q:1};for(let h of u){let m=h.indexOf("=");f[h.substring(0,m)]=h.substring(m+1)}d=+f.q;let E=Yt.get(_);if(E){let h=(E.q||1)*d;h>s&&(n=E,i=E.type||_,s=h,o=f)}}if(!n){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Yt.keys()).join(", "))}};n=Yt.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function Jh(e,t,r){let n=Oq&&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=zh(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,Ri.createBrotliCompress)({params:{[Ri.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Ri.constants.BROTLI_MODE_TEXT:Ri.constants.BROTLI_MODE_GENERIC,[Ri.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>Oq?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Ri.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function ho(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return $_(e);let r=t.serialize;if(r)return r(e);let n=zh(t);return r=t.serialize=n.serializer.serialize,r(e)}function loe(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 Da(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Yt.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Yt.get(e)?.deserialize||Nq(e,n);return o=>loe(o).then(i)}return e&&Yt.get(e)?.deserialize||Nq(e,n)}function Nq(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return n=>({contentType:e,data:n.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return lO(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function uoe(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 oO,qs,La,Ri,jh,bq,aO,cO,yq,Iq,$_,lO,V_,Yt,uO,Aq,wq,aoe,coe,Oq,Wc=Oe(()=>{tR();oO=q(Qh()),qs=require("msgpackr"),La=require("cbor-x"),Ri=require("zlib"),jh=require("stream");Er();bq=require("../index"),aO=q(J()),cO=q(C()),yq=q(require("yaml")),Iq=aO.default.get(cO.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,$_=Iq?Ea:JSON.stringify,lO=Iq?eR:JSON.parse,V_={useRecords:!1,useToJSON:!0},Yt=new Map,uO=Yt;ot.contentTypes=uO;(0,bq._assignPackageExport)("contentTypes",uO);Yt.set("application/json",{serializeStream:Xu,serialize:$_,deserialize:lO,q:.8});Aq=new La.Encoder(V_);Yt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new La.EncoderStream(V_).end(e)},serialize:Aq.encode,deserialize:Aq.decode,q:1});Yt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?jh.Readable.from((0,qs.encodeIter)(e,V_)):(0,qs.pack)(e)},serialize:qs.pack,deserialize:qs.unpack,q:.9});Yt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,oO.toCsvStream)(e,e?.getColumns?.())},q:.1});Yt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Yt.set("text/yaml",{serialize(e){return yq.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Yt.set("text/event-stream",{serializeStream:function(e){return jh.Readable.from(uoe(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+`
19
- `),e.data){let r=e.data;typeof r=="object"&&(r=$_(r)),t+="data: "+r+`
16
+ `,""):null}catch(f){f.stderr?i[l].npm_error=BH(f.stderr):i[l].npm_error=f.message;continue}try{i[l].npm_output=JSON.parse(u)}catch{i[l].npm_output=u}try{i[l].npm_error=JSON.parse(d)}catch{i[l].npm_error=d}}return zc.info(`finished installModules with response ${i}`),i}a(qse,"installModules");function BH(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
17
+ `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(BH,"parseNPMStdErr");async function Gse(e){zc.info(`starting auditModules for request: ${e}`);let t=qH(e);if(t)throw Qc(t,t.message,jc.BAD_REQUEST);let{projects:r}=e;await Kh(),await HH(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Yh.join(QA,o);n[o]={npm_output:null,npm_error:null};try{let l=await P_("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=BH(l.stderr)}}return zc.info(`finished auditModules with response ${n}`),n}a(Gse,"auditModules");async function Kh(){try{return await P_("npm -v"),!0}catch{throw Qc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",jc.BAD_REQUEST,void 0,void 0,!0)}}a(Kh,"checkNPMInstalled");async function HH(e){if(!Array.isArray(e)||e.length===0)throw Qc(new Error,"projects argument must be an array with at least 1 element",jc.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=Yh.join(QA,i.toString());if(!await MH.pathExists(o)){t.push(i);continue}let l=Yh.join(o,"package.json");await MH.pathExists(l)||r.push(i)}if(t.length>0)throw Qc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,jc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Qc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,jc.BAD_REQUEST,void 0,void 0,!0)}a(HH,"checkProjectPaths");function qH(e){let t=Vh.object({projects:Vh.array().min(1).items(Vh.string()).required(),dry_run:Vh.boolean().default(!1)});return Mse.validateBySchema(e,t)}a(qH,"modulesValidator")});var zA=T((ZOe,VH)=>{"use strict";var Jc=require("fs-extra"),jA=require("path"),Qh=x(),xH=K(),jh=C(),$H=X(),xse=Et();VH.exports=Fse;async function Fse(){let e=kse(),t=$H.get(jh.CONFIG_PARAMS.ROOTPATH),r=jA.join(t,"package.json"),n={dependencies:{harperdb:"file:"+jh.PACKAGE_ROOT}},s=jA.join(t,"node_modules");await Jc.ensureDir(s);let i,o=!0,c=!1;try{i=await Jc.readJson(r)}catch(l){if(xH.isEmptyOrZeroLength(e))return;if(l.code!==jh.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!xH.isEmptyOrZeroLength(e)){for(let{name:l,package:_}of e){let u=await FH(_);n.dependencies[l]=u+_}if(!o){Qh.notify("Installing components"),await kH(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&&(Qh.notify("Removing component",l),c=!0);c&&(Qh.notify("Updating components."),await kH(r,n,i))}a(Fse,"installComponents");function kse(){let e=xse.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(kse,"getComponentsConfig");async function FH(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":jA.extname(e)||await Jc.pathExists(e)?"file:":"github:"}a(FH,"getPkgPrefix");async function kH(e,t,r){Qh.trace("npm installing components package.json",t),await Jc.writeFile(e,JSON.stringify(t,null," "));try{await Wh().installAllRootModules($H.get(jh.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await Jc.writeFile(e,JSON.stringify(r,null," ")):await Jc.unlink(e),n}}a(kH,"installPackages")});var zh=T((rNe,QH)=>{"use strict";var Ye=require("fs-extra"),JA=require("fast-glob"),Te=require("path"),KH=require("tar-fs"),tNe=require("uuid").v4,XA=require("normalize-path"),Hs=PH(),vt=x(),Je=C(),Ot=X(),M_=Et(),$se=K(),{PACKAGE_ROOT:Vse}=C(),{handleHDBError:Vt,hdb_errors:Yse}=ie(),{basename:Kse}=require("path"),Wse=zA(),WH=X(),Qse=C(),{Readable:jse}=require("stream"),{isMainThread:zse}=require("worker_threads"),{HDB_ERROR_MSGS:Ia,HTTP_STATUS_CODES:Yt}=Yse,Jse=Te.join(Vse,"application-template"),YH=Te.join(Ot.get(Je.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Xse(){vt.trace("getting custom api status");let e={};try{e={port:Ot.get(Je.CONFIG_PARAMS.HTTP_PORT),directory:Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Vt(new Error,Ia.FUNCTION_STATUS,Yt.INTERNAL_SERVER_ERROR,vt.ERR,t)}return e}a(Xse,"customFunctionsStatus");function Zse(){vt.trace("getting custom api endpoints");let e={},t=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT);try{JA.sync(XA(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:JA.sync(XA(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:JA.sync(XA(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Vt(new Error,Ia.GET_FUNCTIONS,Yt.INTERNAL_SERVER_ERROR,vt.ERR,r)}return e}a(Zse,"getCustomFunctions");function eie(e){e.project&&(e.project=Te.parse(e.project).name),e.file&&(e.file=Te.parse(e.file).name);let t=Hs.getDropCustomFunctionValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);vt.trace("getting custom api endpoint file content");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=Te.join(r,n,s,i+".js");try{return Ye.readFileSync(o,{encoding:"utf8"})}catch(c){throw Vt(new Error,Ia.GET_FUNCTION,Yt.INTERNAL_SERVER_ERROR,vt.ERR,c)}}a(eie,"getCustomFunction");function tie(e){e.project&&(e.project=Te.parse(e.project).name),e.file&&(e.file=Te.parse(e.file).name);let t=Hs.setCustomFunctionValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);vt.trace("setting custom function file content");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return Ye.outputFileSync(Te.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Vt(new Error,Ia.SET_FUNCTION,Yt.INTERNAL_SERVER_ERROR,vt.ERR,c)}}a(tie,"setCustomFunction");function rie(e){e.project&&(e.project=Te.parse(e.project).name),e.file&&(e.file=Te.parse(e.file).name);let t=Hs.getDropCustomFunctionValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);vt.trace("dropping custom function file");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return Ye.unlinkSync(Te.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Vt(new Error,Ia.DROP_FUNCTION,Yt.INTERNAL_SERVER_ERROR,vt.ERR,o)}}a(rie,"dropCustomFunction");function nie(e){e.project&&(e.project=Te.parse(e.project).name);let t=Hs.addComponentValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);vt.trace("adding component");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Te.join(r,n);return Ye.mkdirSync(s,{recursive:!0}),Ye.copySync(Jse,s),`Successfully added project: ${n}`}catch(s){throw Vt(new Error,Ia.ADD_FUNCTION,Yt.INTERNAL_SERVER_ERROR,vt.ERR,s)}}a(nie,"addComponent");function sie(e){e.project&&(e.project=Te.parse(e.project).name);let t=Hs.dropCustomFunctionProjectValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);vt.trace("dropping custom function project");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Ot.get(Je.CONFIG_PARAMS.APPS);if(!$se.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 M_.updateConfigValue(Je.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Te.join(r,n);return Ye.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Vt(new Error,Ia.DROP_FUNCTION_PROJECT,Yt.INTERNAL_SERVER_ERROR,vt.ERR,i)}}a(sie,"dropCustomFunctionProject");async function iie(e){e.project&&(e.project=Te.parse(e.project).name);let t=Hs.packageComponentValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;vt.trace("packaging component",n);let s;try{s=await Ye.realpath(Te.join(r,n))}catch(l){if(l.code!==Je.NODE_ERROR_CODES.ENOENT)throw l;try{s=await Ye.realpath(Te.join(Ot.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===Je.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await Ye.ensureDir(YH);let i=Te.join(YH,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:l=>l.includes(Te.join(s,"node_modules"))}),KH.pack(s,o).pipe(Ye.createWriteStream(i,{overwrite:!0})),await new Promise(l=>setTimeout(l,2e3));let c=Ye.readFileSync(i,{encoding:"base64"});return await Ye.remove(i),{project:n,payload:c}}a(iie,"packageComponent");async function oie(e){e.project&&(e.project=Te.parse(e.project).name);let t=Hs.deployComponentValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(vt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=Te.join(r,n),i="file:"+o,await Ye.ensureDir(o);let f=jse.from(Buffer.from(s,"base64"));await new Promise((h,m)=>{f.pipe(KH.extract(o,{finish:h})).on("error",m)});let E=await Ye.readdir(o);E.length===1&&E[0]==="package"&&(await Ye.copy(Te.join(o,"package"),o),await Ye.remove(Te.join(o,"package")))}if(await M_.addConfig(n,{package:i}),!s){await Wse();let f=WH.get(Qse.CONFIG_PARAMS.ROOTPATH);o=Te.join(f,"node_modules",n)}if(zse)return;let c=new Map;c.isWorker=!0;let l=(Xh(),oe(Jh)),_;l.setErrorReporter(f=>_=f);let u=Kse(o),d=l.component_errors.get(u);try{await l.loadComponent(o,c)}finally{l.component_errors.set(u,d)}if(_)throw _;return vt.info("Installed component"),`Successfully deployed: ${n}`}a(oie,"deployComponent");async function aie(){let e=M_.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let l=await Ye.readdir(o,{withFileTypes:!0});for(let _ of l){let u=_.name;if(u.startsWith(".")||u==="node_modules")continue;let d=Te.join(o,u);if(_.isDirectory()||_.isSymbolicLink()){let f={name:u,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Ye.stat(d),E={name:Te.basename(u),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(l){return vt.warn("Error loading package",l),{error:l.toString(),entries:[]}}},"walk_dir"),n=await r(Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{name:Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT).split(Te.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(Te.join(Ot.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(Xh(),oe(Jh)).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(aie,"getComponents");async function cie(e){let t=Hs.getComponentFileValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);let n=M_.getConfigObj()[e.project]||e.project==="harperdb"?Te.join(WH.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules"):Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ye.stat(Te.join(n,e.project,e.file));return{message:await Ye.readFile(Te.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Je.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Te.join(e.project,e.file)}'`):i}}a(cie,"getComponentFile");async function lie(e){let t=Hs.setComponentFileValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Te.join(Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Ye.ensureFile(n),await Ye.outputFile(n,e.payload,r)):await Ye.ensureDir(n),"Successfully set component: "+e.file}a(lie,"setComponentFile");async function uie(e){let t=Hs.dropComponentFileValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);let r=e.file?Te.join(e.project,e.file):e.project,n=Te.join(Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),r);return await Ye.pathExists(n)&&await Ye.remove(n),M_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(uie,"dropComponent");QH.exports={customFunctionsStatus:Xse,getCustomFunctions:Zse,getCustomFunction:eie,setCustomFunction:tie,dropCustomFunction:rie,addComponent:nie,dropCustomFunctionProject:sie,packageComponent:iie,deployComponent:oie,getComponents:aie,getComponentFile:cie,setComponentFile:lie,dropComponent:uie}});var ZA=T((sNe,zH)=>{"use strict";var qs=require("joi"),jH=rt();zH.exports={readTransactionLogValidator:_ie,deleteTransactionLogsBeforeValidator:die};function _ie(e){let t=qs.object({schema:qs.string().required(),table:qs.string().required(),from:qs.date().timestamp(),to:qs.date().timestamp(),limit:qs.number().min(1)});return jH.validateBySchema(e,t)}a(_ie,"readTransactionLogValidator");function die(e){let t=qs.object({schema:qs.string().required(),table:qs.string().required(),timestamp:qs.date().timestamp().required()});return jH.validateBySchema(e,t)}a(die,"deleteTransactionLogsBeforeValidator")});var ep=T((oNe,tq)=>{"use strict";var eO=C(),Zh=ht(),JH=K(),XH=X(),ZH=li(),{handleHDBError:Xc,hdb_errors:fie}=ie(),{HTTP_STATUS_CODES:Zc}=fie,{readTransactionLogValidator:Eie,deleteTransactionLogsBeforeValidator:hie}=ZA(),eq="This operation relies on clustering and cannot run with it disable.",pie="Logs successfully deleted from transaction log.",mie="All logs successfully deleted from transaction log.";tq.exports={readTransactionLog:Sie,deleteTransactionLogsBefore:Tie};async function*Sie(e){let t=Eie(e);if(t)throw Xc(t,t.message,Zc.BAD_REQUEST,void 0,void 0,!0);if(!XH.get(eO.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Xc(new Error,eq,Zc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=JH.checkSchemaTableExist(r,n);if(s)throw Xc(new Error,s,Zc.NOT_FOUND,void 0,void 0,!0);let i=ZH.createNatsTableStreamName(r,n),o=await Zh.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===eO.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(Sie,"readTransactionLog");async function Tie(e){let t=hie(e);if(t)throw Xc(t,t.message,Zc.BAD_REQUEST,void 0,void 0,!0);if(!XH.get(eO.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Xc(new Error,eq,Zc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=JH.checkSchemaTableExist(r,n);if(i)throw Xc(new Error,i,Zc.NOT_FOUND,void 0,void 0,!0);let o=ZH.createNatsTableStreamName(r,n),{jsm:c}=await Zh.getNATSReferences(),l=await Zh.getStreamInfo(o),_=new Date(l.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let u=pie,d,f=new Date(l.state.last_ts).getTime();return s>f?(d=l.state.last_seq+1,u=mie):d=(await Zh.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),u}a(Tie,"deleteTransactionLogsBefore")});var nq=T((cNe,rq)=>{"use strict";var tO=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}};rq.exports=tO});var iq=T((uNe,sq)=>{"use strict";var rO=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};sq.exports=rO});var sO=T((dNe,aq)=>{"use strict";var oq=nq(),gie=iq(),{HDB_ERROR_MSGS:Rie}=Wr(),nO=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Rie.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 oq(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new gie(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 oq(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}};aq.exports=nO});var sp=T((ENe,Oq)=>{"use strict";var iO=br(),tp=nr(),qn=zE(),B_=zi(),oO=ta(),Aie=LR(),Oie=Av(),H_=wr(),rp=eh(),Bt=x(),Nie=FR(),bie=d_(),yie=TA(),Iie=hh(),wie=mh(),Cie=RA(),Lie=gh(),Die=Ah(),aO=Nh(),gi=K(),Pie=SB(),cO=yh(),uq=Na(),Hn=C(),_q=mH(),Mie=di(),dq=c_(),fq=(kh(),oe(w_)),Eq=Et(),En=zh(),Uie=require("alasql"),hq=ep(),pq=Wh(),mq=sO(),{handleHDBError:Gr,hdb_errors:Sq}=ie(),{HDB_ERROR_MSGS:Xt,HTTP_STATUS_CODES:U_}=Sq,V=new Map,Tq="delete",po="insert",Ri="read",wa="update",v_="describe",cq=B_.describeSchema.name,lq=B_.describeTable.name,gq={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},vie="catchup",Bie="handleGetJob",Hie="handleGetJobsByStartDate",np={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},qie=[qn.createTable.name,qn.createAttribute.name,qn.dropTable.name,qn.dropAttribute.name],Rq={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},Q=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};V.set(iO.insert.name,new Q(!1,[po]));V.set(iO.update.name,new Q(!1,[wa]));V.set(iO.upsert.name,new Q(!1,[po,wa]));V.set(tp.searchByConditions.name,new Q(!1,[Ri]));V.set(tp.searchByHash.name,new Q(!1,[Ri]));V.set(tp.searchByValue.name,new Q(!1,[Ri]));V.set(tp.search.name,new Q(!1,[Ri]));V.set(qn.createSchema.name,new Q(!0,[]));V.set(qn.createTable.name,new Q(!0,[]));V.set(qn.createAttribute.name,new Q(!1,[po]));V.set(qn.dropSchema.name,new Q(!0,[]));V.set(qn.dropTable.name,new Q(!0,[]));V.set(qn.dropAttribute.name,new Q(!0,[]));V.set(B_.describeSchema.name,new Q(!1,[Ri]));V.set(B_.describeTable.name,new Q(!1,[Ri]));V.set(oO.deleteRecord.name,new Q(!1,[Tq]));V.set(H_.addUser.name,new Q(!0,[]));V.set(H_.alterUser.name,new Q(!0,[]));V.set(H_.dropUser.name,new Q(!0,[]));V.set(H_.listUsersExternal.name,new Q(!0,[]));V.set(rp.listRoles.name,new Q(!0,[]));V.set(rp.addRole.name,new Q(!0,[]));V.set(rp.alterRole.name,new Q(!0,[]));V.set(rp.dropRole.name,new Q(!0,[]));V.set(Nie.name,new Q(!0,[]));V.set(bie.name,new Q(!0,[]));V.set(yie.name,new Q(!0,[]));V.set(Iie.name,new Q(!0,[]));V.set(wie.name,new Q(!0,[]));V.set(Cie.name,new Q(!0,[]));V.set(aO.setRoutes.name,new Q(!0,[]));V.set(aO.getRoutes.name,new Q(!0,[]));V.set(aO.deleteRoutes.name,new Q(!0,[]));V.set(Eq.setConfiguration.name,new Q(!0,[]));V.set(Lie.clusterStatus.name,new Q(!0,[]));V.set(Die.name,new Q(!0,[]));V.set(cO.getFingerprint.name,new Q(!0,[]));V.set(cO.setLicense.name,new Q(!0,[]));V.set(oO.deleteFilesBefore.name,new Q(!0,[]));V.set(oO.deleteAuditLogsBefore.name,new Q(!0,[]));V.set(uq.restart.name,new Q(!0,[]));V.set(uq.restartService.name,new Q(!0,[]));V.set(Aie.name,new Q(!0,[]));V.set(Oie.name,new Q(!0,[Ri]));V.set(Mie.systemInformation.name,new Q(!0,[]));V.set(Eq.getConfiguration.name,new Q(!0,[]));V.set(hq.readTransactionLog.name,new Q(!0,[]));V.set(hq.deleteTransactionLogsBefore.name,new Q(!0,[]));V.set(pq.installModules.name,new Q(!0,[]));V.set(pq.auditModules.name,new Q(!0,[]));V.set(dq.createTokens.name,new Q(!1,[]));V.set(dq.refreshOperationToken.name,new Q(!1,[]));V.set(fq.login.name,new Q(!1,[]));V.set(fq.logout.name,new Q(!1,[]));V.set(En.customFunctionsStatus.name,new Q(!0,[]));V.set(En.getCustomFunctions.name,new Q(!0,[]));V.set(En.getComponents.name,new Q(!0,[]));V.set(En.getComponentFile.name,new Q(!0,[]));V.set(En.setComponentFile.name,new Q(!0,[]));V.set(En.dropComponent.name,new Q(!0,[]));V.set(En.getCustomFunction.name,new Q(!0,[]));V.set(En.setCustomFunction.name,new Q(!0,[]));V.set(En.dropCustomFunction.name,new Q(!0,[]));V.set(En.addComponent.name,new Q(!0,[]));V.set(En.dropCustomFunctionProject.name,new Q(!0,[]));V.set(En.packageComponent.name,new Q(!0,[]));V.set(En.deployComponent.name,new Q(!0,[]));V.set(cO.getRegistrationInfo.name,new Q(!1,[]));V.set(H_.userInfo.name,new Q(!1,[]));V.set(B_.describeAll.name,new Q(!1,[]));V.set(Bie,new Q(!1,[]));V.set(Hie,new Q(!0,[]));V.set(vie,new Q(!0,[]));V.set(np.CSV_DATA_LOAD,new Q(!1,[po,wa]));V.set(np.CSV_URL_LOAD,new Q(!1,[po,wa]));V.set(np.CSV_FILE_LOAD,new Q(!1,[po,wa]));V.set(np.IMPORT_FROM_S3,new Q(!1,[po,wa]));V.set(Rq.EXPORT_TO_S3,new Q(!0,[]));V.set(Rq.EXPORT_LOCAL,new Q(!0,[]));V.set(Hn.VALID_SQL_OPS_ENUM.DELETE,new Q(!1,[Tq]));V.set(Hn.VALID_SQL_OPS_ENUM.SELECT,new Q(!1,[Ri]));V.set(Hn.VALID_SQL_OPS_ENUM.INSERT,new Q(!1,[po]));V.set(Hn.VALID_SQL_OPS_ENUM.UPDATE,new Q(!1,[wa]));Oq.exports={verifyPerms:xie,verifyPermsAst:Gie,verifyBulkLoadAttributePerms:kie};function Gie(e,t,r){if(gi.isEmptyOrZeroLength(e))throw Bt.info("verify_perms_ast has an empty user parameter"),Gr(new Error);if(gi.isEmptyOrZeroLength(t))throw Bt.info("verify_perms_ast has an empty user parameter"),Gr(new Error);if(gi.isEmptyOrZeroLength(r))throw Bt.info("verify_perms_ast has a null operation parameter"),Gr(new Error);try{let n=new mq,s=new Pie(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Bt.info("No schemas defined in verifyPermsAst(), will not continue."),Gr(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&gq[r])throw Gr(new Error,Xt.DROP_SYSTEM,U_.FORBIDDEN);if(c&&!l)return null;let _=_q.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof Uie.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=s.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let u=Aq(t,r,o,n);return u||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=s.getAttributesBySchemaTableName(f,d[E]),m=uO(t.role.permission,f,d[E]);lO(h,m,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw Gr(n)}}a(Gie,"verifyPermsAst");function xie(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Bt.info("null required parameter in verifyPerms"),Gr(new Error,Xt.DEFAULT_INVALID_REQUEST,U_.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 mq;if(gi.isEmptyOrZeroLength(e.hdb_user.role)||gi.isEmptyOrZeroLength(e.hdb_user.role.permission))return Bt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Xt.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(Hn.SYSTEM_SCHEMA_NAME)||s===Hn.SYSTEM_SCHEMA_NAME;if(u&&gq[r])throw Gr(new Error,Xt.DROP_SYSTEM,U_.FORBIDDEN);if(l&&!u||_===!0&&(r===qn.createSchema.name||r===qn.dropSchema.name))return null;if(qie.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=_q.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===cq||r===lq){if(s===Hn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Xt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===cq&&(!d[s]||!d[s][v_]))return c.handleInvalidItem(Xt.SCHEMA_NOT_FOUND(s));if(r===lq&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][v_]))return c.handleInvalidItem(Xt.TABLE_NOT_FOUND(s,i))}}let f=Aq(e.hdb_user,r,o,c,n);if(f)return f;if(V.get(r)&&V.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Hn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let m=[],S=d[s].tables[i];S[Hn.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(g=>g[Hn.PERMS_CRUD_ENUM.READ]).forEach(g=>{m.push(g.attribute_name)}):m=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=m)}let E=Fie(e),h=uO(e.hdb_user.role.permission,s,i);return lO(E,h,r,i,s,c,n),c.getPermsResponse()}a(xie,"verifyPerms");function Aq(e,t,r,n,s){if(gi.arrayHasEmptyValues([e,t,r]))throw Bt.info("hasPermissions has an invalid parameter"),Gr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||V.get(t).requires_su))return null;if(!V.get(t))throw Bt.info(`operation ${t} not found.`),Gr(new Error,Xt.OP_NOT_FOUND(t),U_.BAD_REQUEST);if(V.get(t)&&V.get(t).requires_su)return Bt.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Xt.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][v_]===!1){n.addInvalidItem(Xt.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(Xt.SCHEMA_NOT_FOUND(l));continue}let _=r.get(l);for(let u of _){let d=o[l].tables[u];if(!d||d[v_]===!1)n.addInvalidItem(Xt.TABLE_NOT_FOUND(l,u));else try{let f=[],E=V.get(t).perms;!gi.isEmpty(s)&&E.includes(s)&&(E=[s]);for(let h=0;h<E.length;h++){let m=E[h],S=d[m];(S==null||S===!1)&&(Bt.info(`Required ${m} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),f.push(m))}f.length>0&&n.addUnauthorizedTable(l,u,f)}catch(f){let E=Xt.UNKNOWN_OP_AUTH_ERROR(t,l,u);throw Bt.error(E),Bt.error(f),Gr(Sq.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(Aq,"hasPermissions");function lO(e,t,r,n,s,i,o){if(!e||!t)throw Bt.info("no attributes specified in checkAttributePerms."),Gr(new Error);let c=V.get(r).perms;if(!c||c==="")throw Bt.info(`no permissions found for ${r} in checkAttributePerms().`),Gr(new Error);if(gi.isEmptyOrZeroLength(t))return Bt.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let u of e){let d=t.get(u);if(d){if(d[v_]===!1){i.addInvalidItem(Xt.ATTR_NOT_FOUND(s,n,u),s,n);continue}if(c)for(let f of c){if(Hn.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Ri)throw Gr(new Error,Xt.SYSTEM_TIMESTAMP_PERMS_ERR,U_.FORBIDDEN);d[f]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(f):l[d.attribute_name]=[f])}}else i.addInvalidItem(Xt.ATTR_NOT_FOUND(s,n,u),s,n)}let _=Object.keys(l);_.length>0&&i.addUnauthorizedAttributes(_,s,n,l)}a(lO,"checkAttributePerms");function Fie(e){let t=new Set;try{if(e.action)return t;if(e.operation===Hn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){Bt.info(r)}return t}a(Fie,"getRecordAttributes");function uO(e,t,r){let n=new Map;if(gi.isEmpty(e))return Bt.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Bt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(uO,"getAttributePermissions");function kie(e,t,r,n,s,i,o){let c=new Set(i),l=uO(e,n,s);lO(c,l,t,s,n,o,r)}a(kie,"verifyBulkLoadAttributePerms")});var op=T((pNe,wq)=>{"use strict";wq.exports={evaluateSQL:toe,processAST:Iq,convertSQLToAST:yq,checkASTPermissions:bq};var $ie=br(),Nq=require("util"),Vie=Nq.callbackify($ie.insert),Yie=nr().search,Kie=yU().update,Wie=Nq.callbackify(Kie),Qie=wU().convertDelete,mo=require("alasql"),jie=sp(),ip=x(),zie=Qf(),Jie=K(),q_=C(),{hdb_errors:Xie,handleHDBError:_O}=ie(),{HTTP_STATUS_CODES:dO}=Xie;zie(mo);var Zie=403,eoe="There was a problem performing this insert. Please check the logs and try again.",fO=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function toe(e,t){let r=e.parsed_sql_object;if(!r){r=yq(e.sql);let n,s=r.ast.statements[0];if(s instanceof mo.yy.Insert?n=s.into.databaseid:s instanceof mo.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof mo.yy.Update||s instanceof mo.yy.Delete?n=s.table.databaseid:ip.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof mo.yy.Select)&&Jie.isEmptyOrZeroLength(n))return t("No schema specified",null)}Iq(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(toe,"evaluateSQL");function bq(e,t){let r;try{r=jie.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(bq,"checkASTPermissions");function yq(e){let t=new fO;if(!e)throw _O(new Error,"The 'sql' parameter is missing from the request body",dO.BAD_REQUEST);try{let r=e.trim(),n=mo.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
18
+ `);throw n[1]?_O(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,dO.BAD_REQUEST):_O(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",dO.BAD_REQUEST)}return t}a(yq,"convertSQLToAST");function Iq(e,t,r){try{let n=roe;if(!e.bypass_auth&&!t.permissions_checked){let i=bq(e,t);if(i&&i.length>0)return r(Zie,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case q_.VALID_SQL_OPS_ENUM.SELECT:n=Yie,s=t.ast.statements[0];break;case q_.VALID_SQL_OPS_ENUM.INSERT:n=noe;break;case q_.VALID_SQL_OPS_ENUM.UPDATE:n=Wie;break;case q_.VALID_SQL_OPS_ENUM.DELETE:n=Qie;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(Iq,"processAST");function roe(e,t){ip.info(e),t("unknown sql statement")}a(roe,"nullFunction");function noe({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=soe(i,e.values)}catch(o){return r(o)}Vie(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){ip.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(noe,"convertInsert");function soe(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=mo.compile(`SELECT ${s.toString()} AS [${q_.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw ip.error(r),new Error(eoe)}}a(soe,"createDataObjects")});var EO=T((SNe,Lq)=>{"use strict";var{S3:ioe,GetObjectCommand:ooe}=require("@aws-sdk/client-s3");Lq.exports={getFileStreamFromS3:aoe,getS3AuthObj:Cq};async function aoe(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await Cq(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new ooe(r))).Body}a(aoe,"getFileStreamFromS3");function Cq(e,t,r){return new ioe({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(Cq,"getS3AuthObj")});var ap=T((gNe,Gq)=>{"use strict";var pO=nr(),coe=op(),loe=EO(),{AsyncParser:uoe,Transform:_oe}=require("json2csv"),x_=require("stream"),hn=K(),hO=require("fs-extra"),doe=require("path"),Gn=x(),{promisify:Mq}=require("util"),G_=K(),{handleHDBError:Nt,hdb_errors:foe}=ie(),{HDB_ERROR_MSGS:xr,HTTP_STATUS_CODES:bt}=foe,{streamAsJSON:Eoe}=(cR(),oe(RU)),{Upload:hoe}=require("@aws-sdk/lib-storage"),Dq=["search_by_value","search_by_hash","sql","search_by_conditions"],Pq=["json","csv"],Uq="json",vq="csv",poe="Successfully exported JSON locally.",moe="Successfully exported CSV locally.",Soe=1e3,Toe=pO.searchByHash,goe=pO.searchByValue,Roe=Mq(coe.evaluateSQL),Aoe=Mq(x_.finished);Gq.exports={export_to_s3:yoe,export_local:Ooe,toCsvStream:Bq};async function Ooe(e){Gn.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Hq(e);if(!hn.isEmpty(t))throw Gn.error(t),Nt(new Error,t,bt.BAD_REQUEST,void 0,void 0,!0);if(hn.isEmpty(e.path))throw Gn.error(xr.MISSING_VALUE("path")),Nt(new Error,xr.MISSING_VALUE("path"),bt.BAD_REQUEST,void 0,void 0,!0);let r=(hn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(doe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=hn.buildFolderPath(e.path,r);await Noe(e.path);let s=await qq(e);return await boe(n,e.format,s)}a(Ooe,"export_local");async function Noe(e){if(Gn.trace("in confirmPath"),hn.isEmptyOrZeroLength(e))throw Nt(new Error,`Invalid path: ${e}`,bt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await hO.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,Gn.error(n),Nt(new Error,n,bt.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 Gn.error(r),Nt(new Error,r,bt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Noe,"confirmPath");async function boe(e,t,r){if(Gn.trace("in saveToLocal"),G_.isEmptyOrZeroLength(e))throw Nt(new Error,xr.INVALID_VALUE("file_path"),bt.BAD_REQUEST,void 0,void 0,!0);if(G_.isEmptyOrZeroLength(t))throw Nt(new Error,xr.INVALID_VALUE("Source format"),bt.BAD_REQUEST,void 0,void 0,!0);if(G_.isEmpty(r))throw Nt(new Error,xr.NOT_FOUND("Data"),bt.BAD_REQUEST,void 0,void 0,!0);if(t===Uq){let n=hO.createWriteStream(e);return Eoe(r).pipe(n),await Aoe(n),{message:poe,path:e}}else if(t===vq){let n=hO.createWriteStream(e),s=x_.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(u=>({label:u,value:u})));let c={objectMode:!0};return await new uoe(i,c).fromInput(s).toOutput(n).promise(!1),{message:moe,path:e}}throw Nt(new Error,xr.INVALID_VALUE("format"),bt.BAD_REQUEST)}a(boe,"saveToLocal");async function yoe(e){if(!e.s3||Object.keys(e.s3).length===0)throw Nt(new Error,xr.MISSING_VALUE("S3 object"),bt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Nt(new Error,xr.MISSING_VALUE("aws_access_key_id"),bt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Nt(new Error,xr.MISSING_VALUE("aws_secret_access_key"),bt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.bucket))throw Nt(new Error,xr.MISSING_VALUE("bucket"),bt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.key))throw Nt(new Error,xr.MISSING_VALUE("key"),bt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.region))throw Nt(new Error,xr.MISSING_VALUE("region"),bt.BAD_REQUEST);let t=Hq(e);if(!hn.isEmpty(t))throw Nt(new Error,t,bt.BAD_REQUEST);Gn.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await qq(e)}catch(l){throw Gn.error(l),l}let n,s=await loe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new x_.PassThrough;if(e.format===vq){i=e.s3.key+".csv";let l=Bq(r,r.getColumns?.());l.on("error",_=>{throw _}),l.pipe(o)}else if(e.format===Uq){i=e.s3.key+".json";let l=new x_.Readable;l.pipe(o),l.on("error",d=>{throw d}),l.push("[");let _=r.length,u="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";u+=E,d!==0&&d%Soe===0&&(l.push(u),u="")}u.length!==0&&l.push(u),l.push("]"),l.push(null)}else throw Nt(new Error,xr.INVALID_VALUE("format"),bt.BAD_REQUEST);return new hoe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(yoe,"export_to_s3");function Bq(e,t){let r=x_.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 _oe(n,s);return r.pipe(i)}a(Bq,"toCsvStream");function Hq(e){if(Gn.trace("in exportCoreValidation"),hn.isEmpty(e.format))return"format missing";if(Pq.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Pq.join(", ")}`;let t=e.search_operation.operation;if(hn.isEmpty(t))return"search_operation.operation missing";if(Dq.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${Dq.join(", ")}`}a(Hq,"exportCoreValidation");async function qq(e){Gn.trace("in getRecords");let t,r;if(G_.isEmpty(e.search_operation)||G_.isEmptyOrZeroLength(e.search_operation.operation))throw Nt(new Error,xr.INVALID_VALUE("Search operation"),bt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=goe;break;case"search_by_hash":t=Toe;break;case"search_by_conditions":t=pO.searchByConditions;break;case"sql":t=Roe;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Gn.error(r),Nt(new Error,r,bt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(qq,"getRecords")});var Wq={};$e(Wq,{contentTypes:()=>RO,findBestSerializer:()=>lp,getDeserializer:()=>La,registerContentHandlers:()=>AO,serialize:()=>up,serializeMessage:()=>ho});function Ioe(e){try{return e?.[0]===123?gO(e):e}catch{return e}}function AO(e){e.register(Coe,{serializers:[{regex:/^application\/json$/,serializer:ju},{regex:/^application\/cbor$/,serializer:function(t){return new Ca.EncoderStream(k_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?cp.Readable.from((0,Gs.encodeIter)(t,k_)):(0,Gs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,mO.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Gs.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Ca.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function lp(e){let r=(e.headers.asObject||e.headers).accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[_,...u]=l.split(/\s*;\s*/),d=1,f={q:1};for(let h of u){let m=h.indexOf("=");f[h.substring(0,m)]=h.substring(m+1)}d=+f.q;let E=Kt.get(_);if(E){let h=(E.q||1)*d;h>s&&(n=E,i=E.type||_,s=h,o=f)}}if(!n){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Kt.keys()).join(", "))}};n=Kt.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function up(e,t,r){let n=Fq&&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=lp(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,Ai.createBrotliCompress)({params:{[Ai.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Ai.constants.BROTLI_MODE_TEXT:Ai.constants.BROTLI_MODE_GENERIC,[Ai.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>Fq?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Ai.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function ho(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return F_(e);let r=t.serialize;if(r)return r(e);let n=lp(t);return r=t.serialize=n.serializer.serialize,r(e)}function Loe(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 La(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Kt.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Kt.get(e)?.deserialize||kq(e,n);return o=>Loe(o).then(i)}return e&&Kt.get(e)?.deserialize||kq(e,n)}function kq(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 gO(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function Doe(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 mO,Gs,Ca,Ai,cp,$q,SO,TO,Vq,Yq,F_,gO,k_,Kt,RO,xq,Kq,woe,Coe,Fq,Wc=Ne(()=>{cR();mO=q(ap()),Gs=require("msgpackr"),Ca=require("cbor-x"),Ai=require("zlib"),cp=require("stream");mr();$q=require("../index"),SO=q(X()),TO=q(C()),Vq=q(require("yaml")),Yq=SO.default.get(TO.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,F_=Yq?fa:JSON.stringify,gO=Yq?aR:JSON.parse,k_={useRecords:!1,useToJSON:!0},Kt=new Map,RO=Kt;it.contentTypes=RO;(0,$q._assignPackageExport)("contentTypes",RO);Kt.set("application/json",{serializeStream:ju,serialize:F_,deserialize:gO,q:.8});xq=new Ca.Encoder(k_);Kt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Ca.EncoderStream(k_).end(e)},serialize:xq.encode,deserialize:xq.decode,q:1});Kt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?cp.Readable.from((0,Gs.encodeIter)(e,k_)):(0,Gs.pack)(e)},serialize:Gs.pack,deserialize:Gs.unpack,q:.9});Kt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,mO.toCsvStream)(e,e?.getColumns?.())},q:.1});Kt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Kt.set("text/yaml",{serialize(e){return Vq.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Kt.set("text/event-stream",{serializeStream:function(e){return cp.Readable.from(Doe(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+`
19
+ `),e.data){let r=e.data;typeof r=="object"&&(r=F_(r)),t+="data: "+r+`
20
20
  `}return e.id&&(t+="id: "+e.id+`
21
21
  `),e.retry&&(t+="retry: "+e.retry+`
22
22
  `),t+`
23
- `}else return typeof e=="object"?`data: ${$_(e)}
23
+ `}else return typeof e=="object"?`data: ${F_(e)}
24
24
 
25
25
  `:`data: ${e}
26
26
 
27
- `},compressible:!1,q:.8});Yt.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()}});wq={type:"application/json",serializeStream:Xu,serialize:$_,deserialize:ooe,q:.8};Yt.set("*/*",wq);Yt.set("",wq);a(ooe,"tryJSONParse");a(_O,"registerContentHandlers");aoe=require("fastify-plugin"),coe=aoe(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=zh(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(zh,"findBestSerializer");Oq=aO.default.get(cO.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Jh,"serialize");a(ho,"serializeMessage");a(loe,"streamToBuffer");a(Da,"getDeserializer");a(Nq,"deserializerUnknownType");a(uoe,"transformIterable")});function Uq(e){let t={openapi:_oe,info:{title:"HarperDB HTTP REST interface",version:(0,Mq.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:R,name:U,elements:B,relationship:v,definition:P}of o){if(v)R==="array"?_[U]={type:"array",items:{$ref:So+B.type}}:_[U]={$ref:So+R};else{let K=P??B?.definition;if(K){if(!t.components.schemas[K.type]){let V={};K.properties.forEach(Y=>{V[Y.name]=new hO(dO[Y.type],Y.type)}),t.components.schemas[K.type]=new Pq(V)}R==="array"?_[U]={type:"array",items:{$ref:So+K.type}}:_[U]={$ref:So+K.type}}else R==="array"?B.type==="Any"||B.type=="ID"?_[U]={type:"array",items:{format:B.type}}:_[U]={type:"array",items:new hO(dO[B.type],B.type)}:R==="Any"||R=="ID"?_[U]={format:R}:_[U]=new hO(dO[R],R)}u.push(new pO(U,"query",_[U]))}let d=Object.keys(_),f=new pO(c,"path",{format:"ID"});f.required=!0,f.description="primary key of record";let E=new pO("property","path",{enum:d});E.required=!0,t.components.schemas[i]=new Pq(_);let h=l.post!==Resource.prototype.post||l.update,m=typeof l.put=="function",S=typeof l.get=="function",A=typeof l.delete=="function",T="/"+s+"/";h&&(t.paths[T]={},t.paths[T].post=new doe(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[T]||(t.paths[T]={}),t.paths[T].get=new fO(u,r,{200:new EO({$ref:So+i})},"search for records by the specified property name and value pairs")),A&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new Dq(u,r,"delete all the records that match the provided query",{204:new Lq})),T="/"+s+"/{"+c+"}",S&&(t.paths[T]={},t.paths[T].get=new fO([f],r,{200:new EO({$ref:So+i})},"retrieve a record by its primary key")),m&&(t.paths[T]||(t.paths[T]={}),t.paths[T].put=new foe([f],r,i,"create or update the record with the URL path that maps to the record's primary key")),A&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new Dq([f],r,"delete a record with the given primary key",{204:new Lq})),S&&E.schema.enum.length>0&&(T="/"+s+"/{"+c+"}.{property}",t.paths[T]={},t.paths[T].get=new fO([f,E],r,{200:new EO({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function doe(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:So+e}}}},this.security=t,this.responses={200:{description:mO,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function fO(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function EO(e){this.description=mO,this.content={"application/json":{schema:e}}}function Lq(){this.description="successfully processed request, no content returned to client"}function foe(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:So+r}}}},this.responses={200:{description:mO}}}function Dq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function Pq(e){this.type="object",this.properties=e}function hO(e,t){this.type=e,this.format=t}function pO(e,t,r){this.name=e,this.in=t,this.schema=r}var Mq,_oe,dO,So,mO,vq=Oe(()=>{Mq=q(Fi()),_oe="3.0.3",dO={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},So="#/components/schemas/",mO="successful operation";a(Uq,"generateJsonApi");a(doe,"Post");a(fO,"Get");a(EO,"Response200");a(Lq,"Response204");a(foe,"Put");a(Dq,"Delete");a(Pq,"ResourceSchema");a(hO,"Type");a(pO,"Parameter")});var Zh={};$e(Zh,{start:()=>poe});async function hoe(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&uf(e);let s=new ro;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==Bq){let h=Xh.getMatch(i);if(!h)return t(e);e.handlerPath=h.path,o={url:h.relativeURL,async:!0},c=h.Resource}let l=r["cache-control"];if(l){l=l.toLowerCase();let h=l.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),l.includes("only-if-cached")&&(e.onlyIfCached=!0),l.includes("no-cache")&&(e.noCache=!0),l.includes("no-store")&&(e.noCacheStore=!0),l.includes("stale-if-error")&&(e.staleIfError=!0),l.includes("must-revalidate")&&(e.mustRevalidate=!0)}let _=await et(e,()=>{if(n==="POST"||n==="PUT"||n==="PATCH"||n==="QUERY")try{e.data=Da(r["content-type"],!0)(e.body)}catch(h){throw new el.ClientError(h,400)}if(e.authorize=!0,i===Bq&&n==="GET"){if(e?.user?.role?.permission?.super_user)return Uq(Xh);throw new el.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 el.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new el.ServerError(`Method ${n} is not recognized`,501)}}),u=200,d;if(_==null)u=n==="GET"||n==="HEAD"?404:204,SO.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){Eoe[0]=d;let h=String.fromCharCode(34,(Zt[0]&63)+62,(Zt[0]>>6)+(Zt[1]<<2&63)+62,(Zt[1]>>4)+(Zt[2]<<4&63)+62,(Zt[2]>>2)+62,(Zt[3]&63)+62,(Zt[3]>>6)+(Zt[4]<<2&63)+62,(Zt[4]>>4)+(Zt[5]<<4&63)+62,(Zt[5]>>2)+62,(Zt[6]&63)+62,(Zt[6]>>6)+(Zt[7]<<2&63)+62,34),m=r["if-none-match"];m&&h==m?(_?.onDone&&_.onDone(),u=304,_=void 0):s.setIfNone("ETag",h),SO.lastModified&&s.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(u=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let f={status:u,headers:s,body:void 0},E=_?.wasLoadedFromSource?.();return E!==void 0&&(f.wasCacheMiss=E,!E&&d&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||d))/1e3))),_!==void 0&&(f.body=Jh(_,e,f),n==="HEAD"&&(f.body=void 0)),f}catch(i){i.statusCode?i.statusCode===500?Pa.warn(i):Pa.info(i):Pa.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=Jh(i.contentType?i:i.toString(),e,o),o}}function poe(e){SO=e,!Hq&&(Hq=!0,Xh=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return hoe(t,r)}),e.server.ws(async(t,r,n)=>{Y_++;let s=new Kn;qq||(qq=!0,vu(u=>{Y_>0&&u.push({metric:"ws-connections",connections:Y_,byThread:!0})}));let i;t.on("error",u=>{i=!0,Pa.warn(u)});let o;t.on("message",a(function(d){o||(o=Da(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{Y_--,Cn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let l=r.url.slice(1),_=Xh.getMatch(l);if(Cn(!!_,"connection","ws","connect"),!_)t.send(ho(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,sn(h=>({count:h.count,total:Y_}),"connections",r.handlerPath,"connect","ws");let u={url:_.relativeURL,async:!0},d=_.Resource;c=(await et(r,()=>d.connect(u,s,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=ho(E.value,r);t.send(h),sn(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var Pa,el,Zt,Eoe,SO,Bq,Hq,Xh,qq,Y_,xq=Oe(()=>{Wc();ui();Pa=q(G()),el=q(se());_f();kl();Vo();Hu();vq();Zt=new Uint8Array(8),Eoe=new Float64Array(Zt.buffer,0,1),SO={},Bq="openapi";a(hoe,"http");Y_=0;a(poe,"start")});var TO=g((ANe,Gq)=>{var{recordAction:ep,recordActionBinary:moe}=(ui(),ie(Bu)),Soe=require("fastify-plugin"),Toe=200;Gq.exports=Soe(function(e,t,r){e.addHook("onResponse",async(n,s)=>{s.getResponseTime()}),e.addHook("onSend",async(n,s,i)=>{let o=s.getResponseTime(),c=performance.now(),l=s.request.routeOptions,_,u,d;l.config?.isOperation?(_=n.body?.operation,u="operation"):(_=l.url,u="fastify-route",d=l.method),ep(o,"duration",_,d,u),moe(s.raw.statusCode<400,"success",_,d,u);let f=Toe;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{ep(performance.now()-c,"transfer",_,d,u),ep(f,"bytes-sent",_,d,u)})):(f+=i?.length||0,ep(f,"bytes-sent",_,d,u));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var bO=g((bNe,Vq)=>{var sp=require("clone"),ip=nt(),goe=Q(),rp=C(),ONe=G(),gO=require("fs"),AO=require("joi"),{string:np}=AO.types(),{hdb_errors:Roe,handleHDBError:tp}=se(),{HDB_ERROR_MSGS:NNe,HTTP_STATUS_CODES:RO}=Roe,{common_validators:tl}=Ns(),Fq=" is required",Aoe=["insert","update","upsert"],OO={database:{presence:!1,format:tl.schema_format,length:tl.schema_length},schema:{presence:!1,format:tl.schema_format,length:tl.schema_length},table:{presence:!0,format:tl.schema_format,length:tl.schema_length},action:{inclusion:{within:Aoe,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Ooe={schema:np.required(),table:np.required(),action:np.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Noe,AWS_SECRET:boe,AWS_BUCKET:yoe,AWS_FILE_KEY:Ioe,REGION:woe}=rp.S3_BUCKET_AUTH_KEYS,Coe={s3:{presence:!0},[`s3.${Noe}`]:{presence:!0,type:"String"},[`s3.${boe}`]:{presence:!0,type:"String"},[`s3.${yoe}`]:{presence:!0,type:"String"},[`s3.${Ioe}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${woe}`]:{presence:!0,type:"String"}},kq=sp(OO);kq.data.presence={message:Fq};var $q=sp(OO);$q.file_path.presence={message:Fq};var Loe=Object.assign(sp(OO),Coe),NO=sp(Ooe);NO.csv_url=np.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();NO.passthrough_headers=AO.object();function Doe(e){let t=ip.validateObject(e,kq);return op(e,t)}a(Doe,"dataObject");function Poe(e){let t=ip.validateBySchema(e,AO.object(NO));return op(e,t)}a(Poe,"urlObject");function Moe(e){let t=ip.validateObject(e,$q);return op(e,t)}a(Moe,"fileObject");function Uoe(e){let t=ip.validateObject(e,Loe);return op(e,t)}a(Uoe,"s3FileObject");function op(e,t){if(!t){let r=goe.checkGlobalSchemaTable(e.schema,e.table);if(r)return tp(new Error,r,RO.BAD_REQUEST);if(e.operation===rp.OPERATIONS_ENUM.CSV_FILE_LOAD)try{gO.accessSync(e.file_path,gO.constants.R_OK|gO.constants.F_OK)}catch(n){return n.code===rp.NODE_ERROR_CODES.ENOENT?tp(n,`No such file or directory ${n.path}`,RO.BAD_REQUEST):n.code===rp.NODE_ERROR_CODES.EACCES?tp(n,`Permission denied ${n.path}`,RO.BAD_REQUEST):tp(n)}}return t}a(op,"postValidateChecks");Vq.exports={dataObject:Doe,urlObject:Poe,fileObject:Moe,s3FileObject:Uoe}});var yO=g((INe,Yq)=>{"use strict";var K_=G(),ap=C();async function voe(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===ap.OPERATIONS_ENUM.INSERT||t.operation===ap.OPERATIONS_ENUM.UPDATE||t.operation===ap.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===ap.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(K_.info(i.message),i):i.http_resp_msg?(K_.error(`Error calling operation: ${e.name}`),K_.error(i.http_resp_msg),i):(K_.error(`Error calling operation: ${e.name}`),K_.error(i),i)}}a(voe,"callOperationFunctionAsAwait");Yq.exports={callOperationFunctionAsAwait:voe}});var Wq=g((CNe,Kq)=>{"use strict";var IO=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},wO=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};Kq.exports={BulkLoadFileObject:IO,BulkLoadDataObject:wO}});var jq=g((DNe,Qq)=>{"use strict";var CO=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};Qq.exports=CO});var vO=g((HNe,dx)=>{"use strict";var cp=Or(),up=bO(),Boe=require("needle"),cs=C(),MNe=tt(),rl=Q(),{handleHDBError:ut,hdb_errors:sx}=se(),{HTTP_STATUS_CODES:er,HDB_ERROR_MSGS:qt,CHECK_LOGS_WRAPPER:Ua}=sx,nl=G(),LO=require("papaparse");rl.promisifyPapaParse();var ls=require("fs-extra"),Hoe=require("path"),{chain:zq}=require("stream-chain"),Jq=require("stream-json/streamers/StreamArray"),Xq=require("stream-json/utils/Batch"),Zq=require("stream-chain/utils/comp"),{finished:ex}=require("stream"),qoe=J(),ix=yO(),xoe=nO(),{BulkLoadFileObject:PO,BulkLoadDataObject:Goe}=Wq(),MO=WA(),{verifyBulkLoadAttributePerms:ox}=Yh(),UNe=jq(),vNe=pt(),BNe=li(),{databases:Foe}=(ge(),ie(Ge)),{coerceType:koe}=(SE(),ie(vg)),tx="No records parsed from csv file.",Ma=`${qoe.get("HDB_ROOT")}/tmp`,{schema_regex:$oe}=Ns(),rx=1024*1024*2,nx=5e3,Voe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};dx.exports={csvDataLoad:Yoe,csvURLLoad:Koe,csvFileLoad:Woe,importFromS3:Qoe};async function Yoe(e,t){let r=up.dataObject(e);if(r)throw ut(r,r.message,er.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=lx(e.schema,e.table),i=LO.parse(e.data,{header:!0,skipEmptyLines:!0,transform:DO.bind(null,s),dynamicTyping:!1}),o=new MO;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&ox(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 ut(new Error,c,er.BAD_REQUEST,void 0,void 0,!0);let l=new Goe(e.action,e.schema,e.table,i.data);return n=await ix.callOperationFunctionAsAwait(ux,l,null),n.message===tx?tx:_x(n.records,n.number_written)}catch(s){throw va(s)}}a(Yoe,"csvDataLoad");async function Koe(e){let t=up.urlObject(e);if(t)throw ut(t,t.message,er.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Ma}/${r}`;try{await joe(e,r)}catch(s){throw nl.error(qt.DOWNLOAD_FILE_ERR(r)+" - "+s),ut(s,Ua(qt.DOWNLOAD_FILE_ERR(r)))}try{let s=new PO(this.job_operation_function.name,e.action,e.schema,e.table,n,cs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await UO(s);return await lp(n),i}catch(s){throw await lp(n),va(s)}}a(Koe,"csvURLLoad");async function Woe(e){let t=up.fileObject(e);if(t)throw ut(t,t.message,er.BAD_REQUEST,void 0,void 0,!0);let r=new PO(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,cs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await UO(r)}catch(n){throw va(n)}}a(Woe,"csvFileLoad");async function Qoe(e){let t=up.s3FileObject(e);if(t)throw ut(t,t.message,er.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Hoe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Ma}/${s}`;let i=new PO(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await zoe(s,e);let o=await UO(i);return await lp(r),o}catch(n){throw await lp(r),va(n)}}a(Qoe,"importFromS3");async function joe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Boe("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 ut(n,s,n.statusCode,cs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Xoe(r,e.csv_url),await Joe(t,r.raw)}a(joe,"downloadCSVFile");async function zoe(e,t){try{let r=`${Ma}/${e}`;await ls.mkdirp(Ma),await ls.writeFile(`${Ma}/${e}`,"",{flag:"a+"});let n=await ls.createWriteStream(r),s=await xoe.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(){nl.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw nl.error(qt.S3_DOWNLOAD_ERR+" - "+r),ut(r,Ua(qt.S3_DOWNLOAD_ERR))}}a(zoe,"downloadFileFromS3");async function Joe(e,t){try{await ls.mkdirp(Ma),await ls.writeFile(`${Ma}/${e}`,t)}catch(r){throw nl.error(qt.WRITE_TEMP_FILE_ERR),ut(r,Ua(qt.DEFAULT_BULK_LOAD_ERR))}}a(Joe,"writeFileToTempFolder");async function lp(e){if(e)try{await ls.access(e),await ls.unlink(e)}catch{nl.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(lp,"deleteTempFile");function Xoe(e,t){if(e.statusCode!==sx.HTTP_STATUS_CODES.OK)throw ut(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,er.BAD_REQUEST);if(!Voe[e.headers["content-type"]])throw ut(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,er.BAD_REQUEST);if(!e.raw)throw ut(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,er.BAD_REQUEST)}a(Xoe,"validateURLResponse");async function UO(e){try{let t;switch(e.file_type){case cs.VALID_S3_FILE_TYPES.CSV:t=await Zoe(e);break;case cs.VALID_S3_FILE_TYPES.JSON:t=await eae(e);break;default:throw ut(new Error,qt.DEFAULT_BULK_LOAD_ERR,er.BAD_REQUEST,cs.LOG_LEVELS.ERROR,qt.INVALID_FILE_EXT_ERR(e))}return _x(t.records,t.number_written)}catch(t){throw va(t)}}a(UO,"fileLoad");async function ax(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 cp.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&ox(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=ut(c);r(l)}}a(ax,"validateChunk");async function cx(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;rl.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!rl.isEmpty(c)&&!rl.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 ix.callOperationFunctionAsAwait(ux,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=ut(c,Ua(qt.INSERT_CSV_ERR),er.INTERNAL_SERVER_ERROR,cs.LOG_LEVELS.ERROR,qt.INSERT_CSV_ERR+" - "+c);r(l)}}a(cx,"insertChunk");async function Zoe(e){let t={records:0,number_written:0},r=lx(e.schema,e.table);try{let n=new MO,s=ls.createReadStream(e.file_path,{highWaterMark:rx});s.setEncoding("utf8"),await LO.parsePromise(s,ax.bind(null,e,n),DO.bind(null,r));let i=n.getPermsResponse();if(i)throw ut(new Error,i,er.BAD_REQUEST);return s=ls.createReadStream(e.file_path,{highWaterMark:rx}),s.setEncoding("utf8"),await LO.parsePromise(s,cx.bind(null,e,t),DO.bind(null,r)),s.destroy(),t}catch(n){throw ut(n,Ua(qt.PAPA_PARSE_ERR),er.INTERNAL_SERVER_ERROR,cs.LOG_LEVELS.ERROR,qt.PAPA_PARSE_ERR+n)}}a(Zoe,"callPapaParse");function lx(e,t){let r=Foe[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>koe(i,s));return n}a(lx,"createTransformMap");function DO(e,t,r){let n=e.get(r);return n?n(t):rl.autoCast(t)}a(DO,"typeFunction");async function eae(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new MO,s=zq([ls.createReadStream(e.file_path,{encoding:"utf-8"}),Jq.withParser(),c=>c.value,new Xq({batchSize:nx}),Zq(async c=>{await ax(e,n,r,c)})]);await new Promise((c,l)=>{ex(s,_=>{_?l(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw ut(new Error,i,er.BAD_REQUEST);let o=zq([ls.createReadStream(e.file_path,{encoding:"utf-8"}),Jq.withParser(),c=>c.value,new Xq({batchSize:nx}),Zq(async c=>{await cx(e,t,r,c)})]);return await new Promise((c,l)=>{ex(o,_=>{_?l(_):c()}),o.resume()}),t}catch(n){throw ut(n,Ua(qt.INSERT_JSON_ERR),er.INTERNAL_SERVER_ERROR,cs.LOG_LEVELS.ERROR,qt.INSERT_JSON_ERR+n)}}a(eae,"insertJson");async function ux(e){let t={};try{e.data&&e.data.length>0&&tae(e.data[0])?t=await rae(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",nl.info(t.message))}catch(r){throw va(r)}return t}a(ux,"callBulkFileLoad");function tae(e){let t=Object.keys(e);for(let r of t)if(!$oe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(tae,"validateColumnNames");async function rae(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=cp.insert;break;case"update":i=cp.update;break;case"upsert":i=cp.upsert;break;default:throw ut(new Error,qt.INVALID_ACTION_PARAM_ERR(n),er.BAD_REQUEST,cs.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=rl.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw va(o)}}a(rae,"bulkFileLoad");function _x(e,t){return`successfully loaded ${t} of ${e} records`}a(_x,"buildResponseMsg");function va(e){return ut(e,Ua(qt.DEFAULT_BULK_LOAD_ERR),er.INTERNAL_SERVER_ERROR,cs.LOG_LEVELS.ERROR,qt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(va,"buildTopLevelErrMsg")});var Ex=g((xNe,fx)=>{"use strict";var BO=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};fx.exports=BO});var mx=g((FNe,px)=>{"use strict";var nae=C(),hx=require("moment"),sae=require("uuid").v4,HO=class{static{a(this,"JobObject")}constructor(){this.id=sae(),this.type=void 0,this.start_datetime=hx().valueOf(),this.created_datetime=hx().valueOf(),this.end_datetime=void 0,this.status=nae.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};px.exports=HO});var qO=g(($Ne,Ox)=>{"use strict";var iae=require("uuid").v4,gx=Or(),Rx=Ar(),oae=Xn(),aae=Sc(),cae=Ex(),_t=C(),lae=mx(),uae=KE(),xn=G(),_ae=iu(),sl=Q(),{promisify:dae}=require("util"),Ba=require("moment"),fae=Wh(),_p=bO(),Sx=zT(),{deleteTransactionLogsBeforeValidator:Eae}=kA(),{handleHDBError:hae,hdb_errors:pae}=se(),{HTTP_STATUS_CODES:mae}=pae,Tx=Rx.searchByValue,Sae=Rx.searchByHash,Tae=gx.insert,gae=dae(fae.evaluateSQL),Rae=gx.update;Ox.exports={addJob:Nae,updateJob:yae,handleGetJob:Aae,handleGetJobsByStartDate:Oae,getJobById:Ax};async function Aae(e){try{let t=await Ax(e.id);return sl.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 xn.error("There was an error getting job",t),new Error(r)}}a(Aae,"handleGetJob");async function Oae(e){try{let t=await bae(e);if(xn.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=Ba(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Ba(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 xn.error(r),new Error(r)}}a(Oae,"handleGetJobsByStartDate");async function Nae(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||sl.isEmptyOrZeroLength(e.operation)){let u="job parameter is invalid";return xn.info(u),t.error=u,t}if(!_t.JOB_TYPE_ENUM[e.operation])return xn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case _t.OPERATIONS_ENUM.CSV_FILE_LOAD:n=_p.fileObject(e);break;case _t.OPERATIONS_ENUM.CSV_URL_LOAD:n=_p.urlObject(e);break;case _t.OPERATIONS_ENUM.CSV_DATA_LOAD:n=_p.dataObject(e);break;case _t.OPERATIONS_ENUM.IMPORT_FROM_S3:n=_p.s3FileObject(e);break;case _t.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case _t.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=Sx(e,"date");break;case _t.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=Sx(e,"timestamp");break;case _t.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Eae(e);break;default:break}if(n)throw hae(n,n.message,mae.BAD_REQUEST,void 0,void 0,!0);let s=new lae;s.type=e.operation===_t.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?_t.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new oae(_t.SYSTEM_SCHEMA_NAME,_t.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await Tx(i))}catch(u){let d=`There was an error inserting a new job: ${u}`;return xn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=iae();try{o=await Tx(i)}catch(u){let d=`There was an error inserting a new job: ${u}`;return xn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return xn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new _ae(_t.SYSTEM_SCHEMA_NAME,_t.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await Tae(l)}catch(u){return xn.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,xn.trace(u)}return t}a(Nae,"addJob");async function bae(e){let t=Ba(e.from_date,Ba.ISO_8601),r=Ba(e.to_date,Ba.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 cae(n,e.hdb_user);try{return await gae(s)}catch(i){throw xn.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(bae,"getJobsInDateRange");async function Ax(e){if(sl.isEmptyOrZeroLength(e))return sl.errorizeMessage("Invalid job ID specified.");let t=new aae(_t.SYSTEM_SCHEMA_NAME,_t.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Sae(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return xn.error(n),sl.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Ax,"getJobById");async function yae(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(sl.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===_t.JOB_STATUS_ENUM.COMPLETE||e.status===_t.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Ba().valueOf());let t=new uae(_t.SYSTEM_SCHEMA_NAME,_t.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Rae(t),r}a(yae,"updateJob")});var Cx=g((YNe,wx)=>{"use strict";var Nx=Q(),xr=C(),Iae=require("moment"),dp=vO(),fp=G(),bx=qO(),yx=Qh(),Ix=ra(),wae=rt(),Cae=Fh(),xO=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Lae(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(Nx.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Nx.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case xr.JOB_TYPE_ENUM.csv_file_load:await Ai(e,dp.csvFileLoad);break;case xr.JOB_TYPE_ENUM.csv_url_load:await Ai(e,dp.csvURLLoad);break;case xr.JOB_TYPE_ENUM.csv_data_load:await Ai(e,dp.csvDataLoad);break;case xr.JOB_TYPE_ENUM.import_from_s3:await Ai(e,dp.importFromS3);break;case xr.JOB_TYPE_ENUM.empty_trash:break;case xr.JOB_TYPE_ENUM.export_local:await Ai(e,yx.export_local);break;case xr.JOB_TYPE_ENUM.export_to_s3:await Ai(e,yx.export_to_s3);break;case xr.JOB_TYPE_ENUM.delete_files_before:case xr.JOB_TYPE_ENUM.delete_records_before:await Ai(e,Ix.deleteFilesBefore);break;case xr.JOB_TYPE_ENUM.delete_audit_logs_before:await Ai(e,Ix.deleteAuditLogsBefore);break;case xr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Ai(e,Cae.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(Lae,"parseMessage");async function Ai(e,t){try{e.job.status=xr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Iae().valueOf(),await bx.updateJob(e.job),await Dae(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):fp.error(`There was an error running ${t.name} job with id ${e.job.id}`),fp.error(n),e.job.message=n,e.job.status=xr.JOB_STATUS_ENUM.ERROR;try{await bx.updateJob(e.job)}catch(s){throw fp.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Ai,"runJob");async function Dae(e){fp.trace("launching job thread:",e),wae.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[xr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Dae,"launchJobThread");wx.exports={parseMessage:Lae,RunnerMessage:xO}});var Dx=g((WNe,Lx)=>{"use strict";var GO=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};Lx.exports=GO});var Qx=g((jNe,KO)=>{"use strict";var mp=Ar(),$O=Wh(),Ep=vO(),Oi=xE(),hp=zi(),Q_=ra(),Pae=pR(),W_=yr(),pp=$E(),tr=Hh(),xt=G(),Mae=IR(),Uae=E_(),Px=cA(),vae=nh(),Bae=ih(),Hae=lA(),qae=ch(),xae=uh(),FO=dh(),Mx=Qh(),Gae=Yh(),VO=qO(),x=C(),{hdb_errors:z_,handleHDBError:j_}=se(),{HTTP_STATUS_CODES:Ux}=z_,kO=Eh(),vx=ba(),Vx=require("util"),il=Or(),Fae=wn(),kae=di(),Bx=Cx(),Hx=u_(),qx=(Ch(),ie(L_)),xx=ht(),Gx=Fh(),Fx=Uh(),{setServerUtilities:$ae}=(SE(),ie(vg)),{CONTEXT:Vae}=(Wn(),ie(pS)),{_assignPackageExport:Yae}=require("../index"),{transformReq:Kae}=Q(),{server:Wae}=(Er(),ie(qo)),Qae=yO(),kx=mp.searchByHash,jae=mp.searchByValue,zae=Vx.promisify(mp.search),Jae=Vx.promisify($O.evaluateSQL),Xae={[x.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[x.OPERATIONS_ENUM.CREATE_TABLE]:!0,[x.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[x.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[x.OPERATIONS_ENUM.DROP_TABLE]:!0,[x.OPERATIONS_ENUM.DROP_SCHEMA]:!0},W=Dx();async function Yx(e,t){try{if(e.body.operation!=="read_log"&&(xt.log_level===x.LOG_LEVELS.INFO||xt.log_level===x.LOG_LEVELS.DEBUG||xt.log_level===x.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;xt.info(o)}}catch(n){xt.error(n)}let r=await Qae.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Xae[e.body.operation]&&Fae.setSchemaDataToGlobal(n=>{n&&xt.error(n)}),r}a(Yx,"processLocalTransaction");var $x=ece();KO.exports={chooseOperation:Kx,getOperationFunction:Wx,operation:YO,processLocalTransaction:Yx};$ae(KO.exports);Wae.operation=YO;function Kx(e){let t;try{t=Wx(e)}catch(s){throw xt.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=$O.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=$O.checkASTPermissions(e,i);if(o)throw xt.error(`${Ux.FORBIDDEN} from operation ${e.operation}`),xt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),j_(new Error,o,z_.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==x.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==x.OPERATIONS_ENUM.LOGIN&&e.operation!==x.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=Gae.verifyPerms(i,s);if(o)throw xt.error(`${Ux.FORBIDDEN} from operation ${e.operation}`),xt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),j_(new Error,o,z_.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw j_(s,"There was an error when trying to choose an operation path")}return r}a(Kx,"chooseOperation");function Wx(e){if(xt.trace(`getOperationFunction with operation: ${e.operation}`),$x.has(e.operation))return $x.get(e.operation);throw j_(new Error,z_.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),z_.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(Wx,"getOperationFunction");Yae("operation",YO);function YO(e,t){e.hdb_user=this[Vae]?.user,e.bypass_auth=!t;let r=Kx(e);return Yx({body:e},r)}a(YO,"operation");async function Zae(e){xt.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[x.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case x.OPERATIONS_ENUM.INSERT:o=await il.insert(i);break;case x.OPERATIONS_ENUM.UPDATE:o=await il.update(i);break;case x.OPERATIONS_ENUM.UPSERT:o=await il.upsert(i);break;case x.OPERATIONS_ENUM.DELETE:o=await Q_.deleteRecord(i);break;default:xt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){xt.info("Invalid operation in transaction"),xt.error(o)}}a(Zae,"catchup");async function xs(e){Kae(e);let t,r;try{r=await VO.addJob(e),t=r.createdJob,xt.info("addJob result",r);let n=new Bx.RunnerMessage(t,e);return await Bx.parseMessage(n),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw xt.error(s),j_(n,s)}}a(xs,"executeJob");function ece(){let e=new Map;return e.set(x.OPERATIONS_ENUM.INSERT,new W(il.insert)),e.set(x.OPERATIONS_ENUM.UPDATE,new W(il.update)),e.set(x.OPERATIONS_ENUM.UPSERT,new W(il.upsert)),e.set(x.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new W(mp.searchByConditions)),e.set(x.OPERATIONS_ENUM.SEARCH_BY_HASH,new W(kx)),e.set(x.OPERATIONS_ENUM.SEARCH_BY_ID,new W(kx)),e.set(x.OPERATIONS_ENUM.SEARCH_BY_VALUE,new W(jae)),e.set(x.OPERATIONS_ENUM.SEARCH,new W(zae)),e.set(x.OPERATIONS_ENUM.SQL,new W(Jae)),e.set(x.OPERATIONS_ENUM.CSV_DATA_LOAD,new W(xs,Ep.csvDataLoad)),e.set(x.OPERATIONS_ENUM.CSV_FILE_LOAD,new W(xs,Ep.csvFileLoad)),e.set(x.OPERATIONS_ENUM.CSV_URL_LOAD,new W(xs,Ep.csvURLLoad)),e.set(x.OPERATIONS_ENUM.IMPORT_FROM_S3,new W(xs,Ep.importFromS3)),e.set(x.OPERATIONS_ENUM.CREATE_SCHEMA,new W(Oi.createSchema)),e.set(x.OPERATIONS_ENUM.CREATE_DATABASE,new W(Oi.createSchema)),e.set(x.OPERATIONS_ENUM.CREATE_TABLE,new W(Oi.createTable)),e.set(x.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new W(Oi.createAttribute)),e.set(x.OPERATIONS_ENUM.DROP_SCHEMA,new W(Oi.dropSchema)),e.set(x.OPERATIONS_ENUM.DROP_DATABASE,new W(Oi.dropSchema)),e.set(x.OPERATIONS_ENUM.DROP_TABLE,new W(Oi.dropTable)),e.set(x.OPERATIONS_ENUM.DROP_ATTRIBUTE,new W(Oi.dropAttribute)),e.set(x.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new W(hp.describeSchema)),e.set(x.OPERATIONS_ENUM.DESCRIBE_DATABASE,new W(hp.describeSchema)),e.set(x.OPERATIONS_ENUM.DESCRIBE_TABLE,new W(hp.describeTable)),e.set(x.OPERATIONS_ENUM.DESCRIBE_ALL,new W(hp.describeAll)),e.set(x.OPERATIONS_ENUM.DELETE,new W(Q_.deleteRecord)),e.set(x.OPERATIONS_ENUM.ADD_USER,new W(W_.addUser)),e.set(x.OPERATIONS_ENUM.ALTER_USER,new W(W_.alterUser)),e.set(x.OPERATIONS_ENUM.DROP_USER,new W(W_.dropUser)),e.set(x.OPERATIONS_ENUM.LIST_USERS,new W(W_.listUsersExternal)),e.set(x.OPERATIONS_ENUM.LIST_ROLES,new W(pp.listRoles)),e.set(x.OPERATIONS_ENUM.ADD_ROLE,new W(pp.addRole)),e.set(x.OPERATIONS_ENUM.ALTER_ROLE,new W(pp.alterRole)),e.set(x.OPERATIONS_ENUM.DROP_ROLE,new W(pp.dropRole)),e.set(x.OPERATIONS_ENUM.USER_INFO,new W(W_.userInfo)),e.set(x.OPERATIONS_ENUM.READ_LOG,new W(Mae)),e.set(x.OPERATIONS_ENUM.ADD_NODE,new W(Uae)),e.set(x.OPERATIONS_ENUM.UPDATE_NODE,new W(Px)),e.set(x.OPERATIONS_ENUM.SET_NODE_REPLICATION,new W(Px)),e.set(x.OPERATIONS_ENUM.REMOVE_NODE,new W(vae)),e.set(x.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new W(Bae)),e.set(x.OPERATIONS_ENUM.PURGE_STREAM,new W(Hae)),e.set(x.OPERATIONS_ENUM.SET_CONFIGURATION,new W(xx.setConfiguration)),e.set(x.OPERATIONS_ENUM.CLUSTER_STATUS,new W(qae.clusterStatus)),e.set(x.OPERATIONS_ENUM.CLUSTER_NETWORK,new W(xae)),e.set(x.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new W(FO.setRoutes)),e.set(x.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new W(FO.getRoutes)),e.set(x.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new W(FO.deleteRoutes)),e.set(x.OPERATIONS_ENUM.EXPORT_TO_S3,new W(xs,Mx.export_to_s3)),e.set(x.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new W(xs,Q_.deleteFilesBefore)),e.set(x.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new W(xs,Q_.deleteFilesBefore)),e.set(x.OPERATIONS_ENUM.EXPORT_LOCAL,new W(xs,Mx.export_local)),e.set(x.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new W(VO.handleGetJobsByStartDate)),e.set(x.OPERATIONS_ENUM.GET_JOB,new W(VO.handleGetJob)),e.set(x.OPERATIONS_ENUM.GET_FINGERPRINT,new W(kO.getFingerprint)),e.set(x.OPERATIONS_ENUM.SET_LICENSE,new W(kO.setLicense)),e.set(x.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new W(kO.getRegistrationInfo)),e.set(x.OPERATIONS_ENUM.RESTART,new W(vx.restart)),e.set(x.OPERATIONS_ENUM.RESTART_SERVICE,new W(vx.restartService)),e.set(x.OPERATIONS_ENUM.CATCHUP,new W(Zae)),e.set(x.OPERATIONS_ENUM.SYSTEM_INFORMATION,new W(kae.systemInformation)),e.set(x.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new W(xs,Q_.deleteAuditLogsBefore)),e.set(x.OPERATIONS_ENUM.READ_AUDIT_LOG,new W(Pae)),e.set(x.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new W(Hx.createTokens)),e.set(x.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new W(Hx.refreshOperationToken)),e.set(x.OPERATIONS_ENUM.LOGIN,new W(qx.login)),e.set(x.OPERATIONS_ENUM.LOGOUT,new W(qx.logout)),e.set(x.OPERATIONS_ENUM.GET_CONFIGURATION,new W(xx.getConfiguration)),e.set(x.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new W(tr.customFunctionsStatus)),e.set(x.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new W(tr.getCustomFunctions)),e.set(x.OPERATIONS_ENUM.GET_COMPONENT_FILE,new W(tr.getComponentFile)),e.set(x.OPERATIONS_ENUM.GET_COMPONENTS,new W(tr.getComponents)),e.set(x.OPERATIONS_ENUM.SET_COMPONENT_FILE,new W(tr.setComponentFile)),e.set(x.OPERATIONS_ENUM.DROP_COMPONENT,new W(tr.dropComponent)),e.set(x.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new W(tr.getCustomFunction)),e.set(x.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new W(tr.setCustomFunction)),e.set(x.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new W(tr.dropCustomFunction)),e.set(x.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new W(tr.addComponent)),e.set(x.OPERATIONS_ENUM.ADD_COMPONENT,new W(tr.addComponent)),e.set(x.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new W(tr.dropCustomFunctionProject)),e.set(x.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new W(tr.packageComponent)),e.set(x.OPERATIONS_ENUM.PACKAGE_COMPONENT,new W(tr.packageComponent)),e.set(x.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new W(tr.deployComponent)),e.set(x.OPERATIONS_ENUM.DEPLOY_COMPONENT,new W(tr.deployComponent)),e.set(x.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new W(Gx.readTransactionLog)),e.set(x.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new W(xs,Gx.deleteTransactionLogsBefore)),e.set(x.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new W(Fx.installModules)),e.set(x.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new W(Fx.auditModules)),e.set(x.OPERATIONS_ENUM.GET_BACKUP,new W(Oi.getBackup)),e}a(ece,"initializeOperationFunctionMap")});var Tp=g((JNe,Jx)=>{"use strict";var WO=C(),tce=Q(),J_=G(),{handleHDBError:QO,hdb_errors:Sp}=se(),{isMainThread:rce}=require("worker_threads"),{Readable:nce}=require("stream"),jx=require("os"),sce=require("util"),ice=HR(),oce=sce.promisify(ice.authorize),zx=Qx(),{createGzip:ace,constants:cce}=require("zlib");function lce(e){let t=`Found an uncaught exception with message: ${e.message}. ${jx.EOL}Stack: ${e.stack} ${jx.EOL}Terminating ${rce?"HDB":"thread"}.`;console.error(t),J_.fatal(t),process.exit(1)}a(lce,"handleServerUncaughtException");function uce(e,t,r){if(J_[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:Sp.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(uce,"serverErrorHandler");function _ce(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=QO(new Error,"Invalid JSON.",Sp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(tce.isEmpty(e.body.operation)){let n=QO(new Error,"Request body must include an 'operation' property.",Sp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(_ce,"reqBodyValidationHandler");function dce(e,t,r){let n;e.body.operation!==WO.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==WO.OPERATIONS_ENUM.LOGIN&&e.body.operation!==WO.OPERATIONS_ENUM.LOGOUT?oce(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{J_.warn(s),J_.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(QO(s,i,Sp.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(dce,"authHandler");async function fce(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=zx.chooseOperation(e.body);let s=await zx.processLocalTransaction(e,n);if(s instanceof nce&&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(ace({level:cce.Z_BEST_SPEED})))}return s}catch(s){throw J_.error(s),s}}a(fce,"handlePostRequest");Jx.exports={authHandler:dce,handlePostRequest:fce,handleServerUncaughtException:lce,serverErrorHandler:uce,reqBodyValidationHandler:_ce}});var tG=g((ZNe,eG)=>{"use strict";var Ece=require("fastify-plugin"),{handlePostRequest:Xx,authHandler:hce,reqBodyValidationHandler:pce}=Tp();async function mce(e){e.decorate("hdbCore",{preValidation:[pce,hce],request:t=>Zx(Xx(t,response)),requestWithoutAuthentication:(t,r)=>Zx(Xx(t,r,!0))})}a(mce,"hdbCore");async function Zx(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(Zx,"convertAsyncIterators");eG.exports=Ece(mce)});var sG=g((rbe,nG)=>{"use strict";var tbe=require("fs"),jO=J();jO.initSync();var{CONFIG_PARAMS:rG}=C(),Sce=1024*1024*1024;function Tce(e){let t=jO.get(rG.HTTP_TIMEOUT),r=jO.get(rG.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Sce,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(Tce,"getServerOptions");nG.exports=Tce});var aG=g((sbe,oG)=>{"use strict";var zO=J();zO.initSync();var{CONFIG_PARAMS:iG}=C();function gce(){let e=zO.get(iG.HTTP_CORSACCESSLIST),t=zO.get(iG.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(gce,"getCORSOptions");oG.exports=gce});var uG=g((obe,lG)=>{"use strict";var cG=J();cG.initSync();var Rce=C();function Ace(){return cG.get(Rce.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Ace,"getHeaderTimeoutConfig");lG.exports=Ace});var XO={};$e(XO,{customFunctionsServer:()=>bce,ready:()=>bG,start:()=>Nce});function Nce(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Ni||(Ni=NG(t),ot.http((await Ni).server));let o=await Ni,c=(0,JO.dirname)(s),l=(0,JO.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!_G.has(c)){_G.add(c);try{o.register(Ice(c,l))}catch(_){if(_.message==="Root plugin has already booted")Ke.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:bG}}async function bce(){try{Ke.info("In Custom Functions Fastify server"+process.cwd()),Ke.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ke.debug(`Custom Functions server process ${process.pid} starting up.`),await yce();let e=mG.get(SG.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Ni=await NG(e)}catch(r){throw Ke.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ke.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ke.error(`Custom Functions ${process.pid} Error: ${e}`),Ke.error(e),process.exit(1)}}async function yce(){try{Ke.info("Custom Functions starting configuration."),await TG.setUsersToGlobal(),Ke.info("Custom Functions completed configuration.")}catch(e){Ke.error(e)}}function Ice(e,t){return async function(r){try{Ke.info("Custom Functions starting buildRoutes"),Ke.trace("Loading fastify routes folder "+e),(0,dG.existsSync)(e)&&r.register(pG.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Ke.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Ke.error(s.message):s&&Ke.error(s),o()})}catch(n){Ke.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function NG(e){Ke.info("Custom Functions starting buildServer.");let t=(0,gG.default)(e),r=(0,fG.default)(t);r.server.headersTimeout=(0,AG.default)(),r.setErrorHandler(OG.serverErrorHandler);let n=(0,RG.default)();return n&&r.register(EG.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(hG.default),await r.register(Oce),await r.after(),_O(r),Ke.info("Custom Functions completed buildServer."),r}function bG(){if(Ni)return Ni.then?Ni.then(e=>e.ready()):Ni.ready()}var JO,dG,fG,EG,hG,pG,mG,SG,Ke,Oce,TG,gG,RG,AG,OG,Ni,_G,yG=Oe(()=>{JO=require("path"),dG=require("fs"),fG=q(require("fastify")),EG=q(require("@fastify/cors")),hG=q(TO()),pG=q(require("@fastify/autoload")),mG=q(J()),SG=q(C()),Ke=q(G()),Oce=q(tG()),TG=q(yr()),gG=q(sG()),RG=q(aG()),AG=q(uG()),OG=q(Tp());Wc();Er();_G=new Set;a(Nce,"start");a(bce,"customFunctionsServer");a(yce,"setUp");a(Ice,"buildRouteFolder");a(NG,"buildServer");a(bG,"ready")});var ZO={};$e(ZO,{start:()=>wce});function wce(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,DG.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){wG||(wG=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=IG.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,CG.default)(s,(0,LG.realpathSync)(o))}}return i(s)},{runFirst:!0})),IG.set(r,n)}}}var CG,LG,DG,IG,wG,PG=Oe(()=>{CG=q(require("send")),LG=require("fs"),DG=q(require("serve-static")),IG=new Map;a(wce,"start")});var nN={};$e(nN,{Request:()=>eN,createReuseportFd:()=>gp});var MG,eN,tN,rN,gp,Rp=Oe(()=>{MG=require("os"),eN=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 rN(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 tN(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},tN=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},rN=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,MG.platform)()!="win32"&&(gp=require("node-unix-socket").createReuseportFd)});var HG=g((Sbe,BG)=>{"use strict";var Cce=require("cluster"),Ha=J();Ha.initSync();var vG=C(),fbe=require("util"),bi=G(),Ebe=require("fs"),Lce=require("fastify"),hbe=Ho(),Dce=require("@fastify/cors"),Pce=require("@fastify/compress"),Mce=require("@fastify/static"),Uce=TO(),vce=require("path"),{PACKAGE_ROOT:Bce}=C(),Hce=wn(),qce=Q(),xce=yr(),Gce=oa(),{server:Fce}=(Er(),ie(qo)),{node_request_key:pbe}=(Rp(),ie(nN)),{authHandler:kce,handlePostRequest:$ce,serverErrorHandler:Vce,reqBodyValidationHandler:Yce}=Tp(),mbe=require("net"),{registerContentHandlers:Kce}=(Wc(),ie(Cq)),Wce=6e4,Qce=1024*1024*1024,jce="TRUE",{CONFIG_PARAMS:X_}=vG,ol;BG.exports={hdbServer:UG,start:UG};async function UG(e){try{bi.info("In Fastify server"+process.cwd()),bi.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),bi.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Cce.isMaster,await zce();let t=e.securePort>0;ol=Jce(t),await ol.ready(),e||(e={}),e.isOperationsServer=!0;try{Fce.http(ol.server,e),ol.server.closeIdleConnections||await ol.listen({port:0,host:"::"})}catch(r){throw ol.close(),bi.error(r),bi.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),bi.fatal(t),process.exit(1)}}a(UG,"operationsServer");async function zce(){bi.trace("Configuring HarperDB process."),Hce.setSchemaDataToGlobal(),await xce.setUsersToGlobal(),await Gce.getLicense()}a(zce,"setUp");function Jce(e){bi.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Xce(e),r=Lce(t);r.server.headersTimeout=ele(),r.setErrorHandler(Vce);let n=Zce();n&&r.register(Dce,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,_){r.server.emit("unhandled",l.raw,_.raw)}),c()}),r.register(Uce),r.register(Pce),r.register(Mce,{root:vce.join(Bce,"studio/build-local")}),Kce(r);let s=Ha.get(vG.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!qce.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Yce,kce],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),$ce(i,o)}),r.get("/health",()=>"HarperDB is running."),bi.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Jce,"buildServer");function Xce(e){let t=Ha.get(X_.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ha.get(X_.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Qce,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Xce,"getServerOptions");function Zce(){let e=Ha.get(X_.OPERATIONSAPI_NETWORK_CORS),t=Ha.get(X_.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===jce)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(Zce,"getCORSOpts");function ele(){return Ha.get(X_.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Wce}a(ele,"getHeaderTimeoutConfig")});var WG=g((Obe,KG)=>{"use strict";var{decode:tle}=require("msgpackr"),{isMainThread:gbe,parentPort:rle,threadId:Rbe}=require("worker_threads"),iN=pt(),yi=tt(),nle=C(),To=G(),qG=J(),GG=C();rt();var sle=li(),{recordAction:ile,recordActionBinary:ole}=(ui(),ie(Bu)),{publishToStream:ale}=iN,{ConsumerEvents:cle}=require("nats"),Abe={durable:yi.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:yi.WORK_QUEUE_CONSUMER_NAMES.deliver_group},lle,ule,_le,FG,kG;KG.exports={initialize:oN,workQueueListener:YG,setSubscription:dle,setIgnoreOrigin:Ele,getDatabaseSubscriptions:fle};async function oN(){kG=!0,To.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await iN.getNATSReferences();lle=e,ule=e.info.server_name,_le=t,FG=r}a(oN,"initialize");var Op=new Map;function dle(e,t,r){let n=Op.get(e);n||Op.set(e,n=new Map),n.set(t,r),kG||oN().then(YG)}a(dle,"setSubscription");function fle(){return Op}a(fle,"getDatabaseSubscriptions");var $G;function Ele(e){$G=e}a(Ele,"setIgnoreOrigin");var VG=100,xG=new Array(VG),Ap=0;async function YG(){let e=await FG.consumers.get(yi.WORK_QUEUE_CONSUMER_NAMES.stream_name,yi.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(rle?.on("message",async n=>{let{type:s}=n;s===GG.ITC_EVENT_TYPES.SHUTDOWN&&(t=!0,r&&r.close?.()&&r.close())});!t;){r=await e.consume(),(async()=>{for await(let n of await r.status())if(n.type===cle.HeartbeatsMissed){let s=n.data;To.trace(`${s} clustering ingest consumer heartbeats missed`),s===2&&(To.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let n of r)await xG[Ap],xG[Ap]=hle(n).catch(s=>{To.error(s)}),++Ap>=VG&&(Ap=0)}catch(n){To.error("Error consuming clustering ingest, restarting consumer",n)}iN.clearClientCache(),await oN()}}a(YG,"workQueueListener");async function hle(e){let t=tle(e.data);ile(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,n=!1,s=qG.get(nle.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(yi.MSG_HEADERS.TRANSACTED_NODES)&&r.values(yi.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(yi.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!$G),ole(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(yi.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:_,records:u,hash_values:d,__origin:f,expiresAt:E}=t;To.trace("processing message:",o,c,_,(u?"records: "+u.map(R=>R?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),To.trace(`messageProcessor nats msg id: ${e.headers.get(yi.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let{timestamp:m,user:S,node_name:A}=f||{},T=Op.get(c)?.get(_);if(!T)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,T.send(t);else if(u.length===1&&!l)T.send({type:sN(o),value:u[0],id:d?.[0],expiresAt:E,timestamp:m,table:_,onCommit:h,user:S,nodeName:A});else{let R=u.map((U,B)=>({type:sN(o),value:U,expiresAt:E,id:d?.[B],table:_}));for(;l;)R.push({type:sN(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;T.send({type:"transaction",writes:R,table:_,timestamp:m,onCommit:h,user:S,nodeName:A})}qG.get(GG.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&ale(e.subject.split(".").slice(0,-1).join("."),sle.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){To.error(o)}e.ack()}a(hle,"messageProcessor");function sN(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(sN,"convertOperation")});var dN={};$e(dN,{disableNATS:()=>mle,publishToStream:()=>wp,setNATSReplicator:()=>aN,setPublishToStream:()=>Sle,setSubscription:()=>_N,start:()=>ple});function ple(){bp.default.get(yp.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&gle()}function mle(e=!0){XG=e}function Sle(e,t){wp=e,_N=t}function gle(){if(XG||process.env._DISABLE_NATS)return;let e=es(),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];aN(s,r,i)}}Gg((r,n)=>{aN(r.tableName,r.databaseName,r),n&&eF(r)}),!QG&&(QG=!0)}function aN(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 Qt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Me],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Me]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Me],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Me],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Me]})}static defineSchema(i){eF(i)}static subscribe(){let i=new Kn;return _N(t,e,i),i}static subscribeOnThisThread(i){return i<Tle}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new Np(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=ZG;return i}a(n,"getNATSTransaction")}function eF(e){let t=bp.default.get(yp.default.CONFIG_PARAMS.CLUSTERING_NODENAME);wp(`${lN.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,uN.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 jG,lN,uN,zG,JG,bp,yp,Ip,XG,wp,_N,Tle,ZG,QG,Np,cN,tF=Oe(()=>{ge();Wn();jG=q(pt()),lN=q(tt()),uN=q(li());kl();zG=q(WG()),JG=q(pr()),bp=q(J()),yp=q(C()),Ip=q(G());a(ple,"start");a(mle,"disableNATS");wp=jG.publishToStream,_N=zG.setSubscription;a(Sle,"setPublishToStream");Tle=2;a(gle,"assignReplicationSource");a(aN,"setNATSReplicator");a(eF,"publishSchema");Np=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=bp.default.get(yp.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,_;for(let u of i){let d=u.table,f=u.operation=="put"?"upsert":u.operation;l||(Ip.trace(`Sending transaction event ${f}`),_=l={operation:f,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,f!=="delete"&&f!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===f?(o.push(u.record),c.push(u.id)):_=_.next={operation:f,table:d,id:u.id,record:u.record},u.expiresAt&&(_.expiresAt=u.expiresAt)}l&&n.push(wp(`${lN.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,uN.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(u=>{throw Ip.error("An error has occurred trying to replicate transaction",l,u),u.statusCode=504,u}))}return Promise.all(n)}},cN=class extends Np{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,JG.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};ZG=new cN});var TN=g(qa=>{"use strict";var{isMainThread:aF,parentPort:ed,threadId:Cp}=require("worker_threads"),{Socket:Rle,createServer:Ale}=require("net"),{createServer:Ole,IncomingMessage:Nle}=require("http"),{createServer:ble}=require("https"),{readFileSync:al,unlinkSync:rF,existsSync:yle}=require("fs"),cr=G(),Pe=J(),It=C(),{server:Mp}=(Er(),ie(qo)),{WebSocketServer:Ile}=require("ws"),{createServer:wle}=require("tls"),{getTicketKeys:Cle,restartNumber:Lle,getWorkerIndex:Dp}=rt(),{Headers:cF,appendHeader:Dle}=(Hu(),ie(TM)),{recordAction:Z_,recordActionBinary:Ple}=(ui(),ie(Bu)),{Request:lF,createReuseportFd:nF}=(Rp(),ie(nN)),{checkMemoryLimit:Mle}=oa(),uF=require("tls"),sF=uF.createSecureContext;uF.createSecureContext=function(e){if(!e.cert||!e.key)return sF(e);let t={...e};delete t.key,delete t.cert;let r=sF(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var _F=Pe.get(It.CONFIG_PARAMS.THREADS_DEBUG);if(_F){let e;if(aF)e=Pe.get(It.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){cr.info("Could not close debugger",t)}});else{let t=Pe.get(It.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Dp()>=0&&(e=t+Dp())}if(e){let t=Pe.get(It.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=Pe.get(It.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){cr.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){Lle<=1&&cr.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:Lbe,CONFIG_PARAMS:Ule}=It;Pe.initSync();var vle=Pe.get(Ule.HTTP_SESSIONAFFINITY),Gs={};qa.registerServer=mN;qa.httpServer=SN;qa.deliverSocket=pN;qa.startServers=dF;qa.when_components_loaded=null;Mp.http=SN;Mp.request=xle;Mp.socket=Gle;Mp.ws=Fle;var fN={},Lp={},Ble,go={},Pp={},Hle=[],EN=[];function dF(){return qa.when_components_loaded=Up().loadRootComponents(!0).then(()=>{ed?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)pN(n,r,s);else if(t.requestId)qle(t);else if(t.type===It.ITC_EVENT_TYPES.SHUTDOWN){cr.trace("received shutdown request",Cp);for(let i in Gs){let o=Gs[i],c;if(o.closeIdleConnections){let _=Object.getOwnPropertySymbols(o).find(f=>f.description.includes("connections")),u=0,d=setInterval(()=>{u++;let f=u>=100,E=o[_][f?"all":"idle"]();if(E.length===0){f&&clearInterval(d);return}u===1?cr.info(`Closing ${E.length} idle connections`):f&&cr.warn(`Forcefully closing ${E.length} active connections`);for(let h=0,m=E.length;h<m;h++){let S=E[h].socket;S._httpMessage&&!S._httpMessage.finished&&!f||(f?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
27
+ `},compressible:!1,q:.8});Kt.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()}});Kq={type:"application/json",serializeStream:ju,serialize:F_,deserialize:Ioe,q:.8};Kt.set("*/*",Kq);Kt.set("",Kq);a(Ioe,"tryJSONParse");a(AO,"registerContentHandlers");woe=require("fastify-plugin"),Coe=woe(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=lp(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(lp,"findBestSerializer");Fq=SO.default.get(TO.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(up,"serialize");a(ho,"serializeMessage");a(Loe,"streamToBuffer");a(La,"getDeserializer");a(kq,"deserializerUnknownType");a(Doe,"transformIterable")});function Xq(e){let t={openapi:Poe,info:{title:"HarperDB HTTP REST interface",version:(0,Jq.version)()},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let _={},u=[];if(o)for(let{type:A,name:P,elements:v,relationship:U,definition:F}of o){if(U)A==="array"?_[P]={type:"array",items:{$ref:So+v.type}}:_[P]={$ref:So+A};else{let H=F??v?.definition;if(H){if(!t.components.schemas[H.type]){let j={};H.properties.forEach(z=>{j[z.name]=new yO(OO[z.type],z.type)}),t.components.schemas[H.type]=new zq(j)}A==="array"?_[P]={type:"array",items:{$ref:So+H.type}}:_[P]={$ref:So+H.type}}else A==="array"?v.type==="Any"||v.type=="ID"?_[P]={type:"array",items:{format:v.type}}:_[P]={type:"array",items:new yO(OO[v.type],v.type)}:A==="Any"||A=="ID"?_[P]={format:A}:_[P]=new yO(OO[A],A)}u.push(new IO(P,"query",_[P]))}let d=Object.keys(_),f=new IO(c,"path",{format:"ID"});f.required=!0,f.description="primary key of record";let E=new IO("property","path",{enum:d});E.required=!0,t.components.schemas[i]=new zq(_);let h=l.post!==Resource.prototype.post||l.update,m=typeof l.put=="function",S=typeof l.get=="function",R=typeof l.delete=="function",g="/"+s+"/";h&&(t.paths[g]={},t.paths[g].post=new Moe(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[g]||(t.paths[g]={}),t.paths[g].get=new NO(u,r,{200:new bO({$ref:So+i})},"search for records by the specified property name and value pairs")),R&&(t.paths[g]||(t.paths[g]={}),t.paths[g].delete=new jq(u,r,"delete all the records that match the provided query",{204:new Qq})),g="/"+s+"/{"+c+"}",S&&(t.paths[g]={},t.paths[g].get=new NO([f],r,{200:new bO({$ref:So+i})},"retrieve a record by its primary key")),m&&(t.paths[g]||(t.paths[g]={}),t.paths[g].put=new Uoe([f],r,i,"create or update the record with the URL path that maps to the record's primary key")),R&&(t.paths[g]||(t.paths[g]={}),t.paths[g].delete=new jq([f],r,"delete a record with the given primary key",{204:new Qq})),S&&E.schema.enum.length>0&&(g="/"+s+"/{"+c+"}.{property}",t.paths[g]={},t.paths[g].get=new NO([f,E],r,{200:new bO({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function Moe(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:So+e}}}},this.security=t,this.responses={200:{description:wO,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function NO(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function bO(e){this.description=wO,this.content={"application/json":{schema:e}}}function Qq(){this.description="successfully processed request, no content returned to client"}function Uoe(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:So+r}}}},this.responses={200:{description:wO}}}function jq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function zq(e){this.type="object",this.properties=e}function yO(e,t){this.type=e,this.format=t}function IO(e,t,r){this.name=e,this.in=t,this.schema=r}var Jq,Poe,OO,So,wO,Zq=Ne(()=>{Jq=q(Fi()),Poe="3.0.3",OO={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},So="#/components/schemas/",wO="successful operation";a(Xq,"generateJsonApi");a(Moe,"Post");a(NO,"Get");a(bO,"Response200");a(Qq,"Response204");a(Uoe,"Put");a(jq,"Delete");a(zq,"ResourceSchema");a(yO,"Type");a(IO,"Parameter")});var dp={};$e(dp,{start:()=>Hoe});async function Boe(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&ff(e);let s=new ro;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==eG){let h=_p.getMatch(i);if(!h)return t(e);e.handlerPath=h.path,o={url:h.relativeURL,async:!0},c=h.Resource}let l=r["cache-control"];if(l){l=l.toLowerCase();let h=l.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),l.includes("only-if-cached")&&(e.onlyIfCached=!0),l.includes("no-cache")&&(e.noCache=!0),l.includes("no-store")&&(e.noCacheStore=!0),l.includes("stale-if-error")&&(e.staleIfError=!0),l.includes("must-revalidate")&&(e.mustRevalidate=!0)}let _=await Ze(e,()=>{if(n==="POST"||n==="PUT"||n==="PATCH"||n==="QUERY")try{e.data=La(r["content-type"],!0)(e.body)}catch(h){throw new el.ClientError(h,400)}if(e.authorize=!0,i===eG&&n==="GET"){if(e?.user?.role?.permission?.super_user)return Xq(_p);throw new el.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 el.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new el.ServerError(`Method ${n} is not recognized`,501)}}),u=200,d;if(_==null)u=n==="GET"||n==="HEAD"?404:204,CO.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){voe[0]=d;let h=String.fromCharCode(34,(Zt[0]&63)+62,(Zt[0]>>6)+(Zt[1]<<2&63)+62,(Zt[1]>>4)+(Zt[2]<<4&63)+62,(Zt[2]>>2)+62,(Zt[3]&63)+62,(Zt[3]>>6)+(Zt[4]<<2&63)+62,(Zt[4]>>4)+(Zt[5]<<4&63)+62,(Zt[5]>>2)+62,(Zt[6]&63)+62,(Zt[6]>>6)+(Zt[7]<<2&63)+62,34),m=r["if-none-match"];m&&h==m?(_?.onDone&&_.onDone(),u=304,_=void 0):s.setIfNone("ETag",h),CO.lastModified&&s.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(u=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let f={status:u,headers:s,body:void 0},E=_?.wasLoadedFromSource?.();return E!==void 0&&(f.wasCacheMiss=E,!E&&d&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||d))/1e3))),_!==void 0&&(f.body=up(_,e,f),n==="HEAD"&&(f.body=void 0)),f}catch(i){i.statusCode?i.statusCode===500?Da.warn(i):Da.info(i):Da.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=up(i.contentType?i:i.toString(),e,o),o}}function Hoe(e){CO=e,!tG&&(tG=!0,_p=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Boe(t,r)}),e.server.ws(async(t,r,n)=>{$_++;let s=new Wn;rG||(rG=!0,Pu(u=>{$_>0&&u.push({metric:"ws-connections",connections:$_,byThread:!0})}));let i;t.on("error",u=>{i=!0,Da.warn(u)});let o;t.on("message",a(function(d){o||(o=La(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{$_--,Dn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let l=r.url.slice(1),_=_p.getMatch(l);if(Dn(!!_,"connection","ws","connect"),!_)t.send(ho(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,on(h=>({count:h.count,total:$_}),"connections",r.handlerPath,"connect","ws");let u={url:_.relativeURL,async:!0},d=_.Resource;c=(await Ze(r,()=>d.connect(u,s,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=ho(E.value,r);t.send(h),on(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var Da,el,Zt,voe,CO,eG,tG,_p,rG,$_,nG=Ne(()=>{Wc();ui();Da=q(x()),el=q(ie());Ef();kl();$o();Uu();Zq();Zt=new Uint8Array(8),voe=new Float64Array(Zt.buffer,0,1),CO={},eG="openapi";a(Boe,"http");$_=0;a(Hoe,"start")});var LO=T((vNe,sG)=>{var{recordAction:fp,recordActionBinary:qoe}=(ui(),oe(Mu)),Goe=require("fastify-plugin"),xoe=200;sG.exports=Goe(function(e,t,r){e.addHook("onResponse",async(n,s)=>{s.getResponseTime()}),e.addHook("onSend",async(n,s,i)=>{let o=s.getResponseTime(),c=performance.now(),l=s.request.routeOptions,_,u,d;l.config?.isOperation?(_=n.body?.operation,u="operation"):(_=l.url,u="fastify-route",d=l.method),fp(o,"duration",_,d,u),qoe(s.raw.statusCode<400,"success",_,d,u);let f=xoe;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{fp(performance.now()-c,"transfer",_,d,u),fp(f,"bytes-sent",_,d,u)})):(f+=i?.length||0,fp(f,"bytes-sent",_,d,u));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var BO=T((qNe,cG)=>{var mp=require("clone"),Sp=rt(),Foe=K(),hp=C(),BNe=x(),DO=require("fs"),MO=require("joi"),{string:pp}=MO.types(),{hdb_errors:koe,handleHDBError:Ep}=ie(),{HDB_ERROR_MSGS:HNe,HTTP_STATUS_CODES:PO}=koe,{common_validators:tl}=ys(),iG=" is required",$oe=["insert","update","upsert"],UO={database:{presence:!1,format:tl.schema_format,length:tl.schema_length},schema:{presence:!1,format:tl.schema_format,length:tl.schema_length},table:{presence:!0,format:tl.schema_format,length:tl.schema_length},action:{inclusion:{within:$oe,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Voe={schema:pp.required(),table:pp.required(),action:pp.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Yoe,AWS_SECRET:Koe,AWS_BUCKET:Woe,AWS_FILE_KEY:Qoe,REGION:joe}=hp.S3_BUCKET_AUTH_KEYS,zoe={s3:{presence:!0},[`s3.${Yoe}`]:{presence:!0,type:"String"},[`s3.${Koe}`]:{presence:!0,type:"String"},[`s3.${Woe}`]:{presence:!0,type:"String"},[`s3.${Qoe}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${joe}`]:{presence:!0,type:"String"}},oG=mp(UO);oG.data.presence={message:iG};var aG=mp(UO);aG.file_path.presence={message:iG};var Joe=Object.assign(mp(UO),zoe),vO=mp(Voe);vO.csv_url=pp.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();vO.passthrough_headers=MO.object();function Xoe(e){let t=Sp.validateObject(e,oG);return Tp(e,t)}a(Xoe,"dataObject");function Zoe(e){let t=Sp.validateBySchema(e,MO.object(vO));return Tp(e,t)}a(Zoe,"urlObject");function eae(e){let t=Sp.validateObject(e,aG);return Tp(e,t)}a(eae,"fileObject");function tae(e){let t=Sp.validateObject(e,Joe);return Tp(e,t)}a(tae,"s3FileObject");function Tp(e,t){if(!t){let r=Foe.checkGlobalSchemaTable(e.schema,e.table);if(r)return Ep(new Error,r,PO.BAD_REQUEST);if(e.operation===hp.OPERATIONS_ENUM.CSV_FILE_LOAD)try{DO.accessSync(e.file_path,DO.constants.R_OK|DO.constants.F_OK)}catch(n){return n.code===hp.NODE_ERROR_CODES.ENOENT?Ep(n,`No such file or directory ${n.path}`,PO.BAD_REQUEST):n.code===hp.NODE_ERROR_CODES.EACCES?Ep(n,`Permission denied ${n.path}`,PO.BAD_REQUEST):Ep(n)}}return t}a(Tp,"postValidateChecks");cG.exports={dataObject:Xoe,urlObject:Zoe,fileObject:eae,s3FileObject:tae}});var HO=T((xNe,lG)=>{"use strict";var V_=x(),gp=C();async function rae(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===gp.OPERATIONS_ENUM.INSERT||t.operation===gp.OPERATIONS_ENUM.UPDATE||t.operation===gp.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===gp.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(V_.info(i.message),i):i.http_resp_msg?(V_.error(`Error calling operation: ${e.name}`),V_.error(i.http_resp_msg),i):(V_.error(`Error calling operation: ${e.name}`),V_.error(i),i)}}a(rae,"callOperationFunctionAsAwait");lG.exports={callOperationFunctionAsAwait:rae}});var _G=T((kNe,uG)=>{"use strict";var qO=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}},GO=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};uG.exports={BulkLoadFileObject:qO,BulkLoadDataObject:GO}});var fG=T((VNe,dG)=>{"use strict";var xO=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};dG.exports=xO});var KO=T((zNe,LG)=>{"use strict";var Rp=br(),Op=BO(),nae=require("needle"),_s=C(),KNe=et(),rl=K(),{handleHDBError:lt,hdb_errors:AG}=ie(),{HTTP_STATUS_CODES:er,HDB_ERROR_MSGS:Ht,CHECK_LOGS_WRAPPER:Ma}=AG,nl=x(),FO=require("papaparse");rl.promisifyPapaParse();var ds=require("fs-extra"),sae=require("path"),{chain:EG}=require("stream-chain"),hG=require("stream-json/streamers/StreamArray"),pG=require("stream-json/utils/Batch"),mG=require("stream-chain/utils/comp"),{finished:SG}=require("stream"),iae=X(),OG=HO(),oae=EO(),{BulkLoadFileObject:$O,BulkLoadDataObject:aae}=_G(),VO=sO(),{verifyBulkLoadAttributePerms:NG}=sp(),WNe=fG(),QNe=ht(),jNe=li(),{databases:cae}=(ge(),oe(Fe)),{coerceType:lae}=(NE(),oe(kg)),TG="No records parsed from csv file.",Pa=`${iae.get("HDB_ROOT")}/tmp`,{schema_regex:uae}=ys(),gG=1024*1024*2,RG=5e3,_ae={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};LG.exports={csvDataLoad:dae,csvURLLoad:fae,csvFileLoad:Eae,importFromS3:hae};async function dae(e,t){let r=Op.dataObject(e);if(r)throw lt(r,r.message,er.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=IG(e.schema,e.table),i=FO.parse(e.data,{header:!0,skipEmptyLines:!0,transform:kO.bind(null,s),dynamicTyping:!1}),o=new VO;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&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 lt(new Error,c,er.BAD_REQUEST,void 0,void 0,!0);let l=new aae(e.action,e.schema,e.table,i.data);return n=await OG.callOperationFunctionAsAwait(wG,l,null),n.message===TG?TG:CG(n.records,n.number_written)}catch(s){throw Ua(s)}}a(dae,"csvDataLoad");async function fae(e){let t=Op.urlObject(e);if(t)throw lt(t,t.message,er.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Pa}/${r}`;try{await pae(e,r)}catch(s){throw nl.error(Ht.DOWNLOAD_FILE_ERR(r)+" - "+s),lt(s,Ma(Ht.DOWNLOAD_FILE_ERR(r)))}try{let s=new $O(this.job_operation_function.name,e.action,e.schema,e.table,n,_s.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await YO(s);return await Ap(n),i}catch(s){throw await Ap(n),Ua(s)}}a(fae,"csvURLLoad");async function Eae(e){let t=Op.fileObject(e);if(t)throw lt(t,t.message,er.BAD_REQUEST,void 0,void 0,!0);let r=new $O(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,_s.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await YO(r)}catch(n){throw Ua(n)}}a(Eae,"csvFileLoad");async function hae(e){let t=Op.s3FileObject(e);if(t)throw lt(t,t.message,er.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=sae.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Pa}/${s}`;let i=new $O(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await mae(s,e);let o=await YO(i);return await Ap(r),o}catch(n){throw await Ap(r),Ua(n)}}a(hae,"importFromS3");async function pae(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await nae("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 lt(n,s,n.statusCode,_s.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Tae(r,e.csv_url),await Sae(t,r.raw)}a(pae,"downloadCSVFile");async function mae(e,t){try{let r=`${Pa}/${e}`;await ds.mkdirp(Pa),await ds.writeFile(`${Pa}/${e}`,"",{flag:"a+"});let n=await ds.createWriteStream(r),s=await oae.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(){nl.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw nl.error(Ht.S3_DOWNLOAD_ERR+" - "+r),lt(r,Ma(Ht.S3_DOWNLOAD_ERR))}}a(mae,"downloadFileFromS3");async function Sae(e,t){try{await ds.mkdirp(Pa),await ds.writeFile(`${Pa}/${e}`,t)}catch(r){throw nl.error(Ht.WRITE_TEMP_FILE_ERR),lt(r,Ma(Ht.DEFAULT_BULK_LOAD_ERR))}}a(Sae,"writeFileToTempFolder");async function Ap(e){if(e)try{await ds.access(e),await ds.unlink(e)}catch{nl.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Ap,"deleteTempFile");function Tae(e,t){if(e.statusCode!==AG.HTTP_STATUS_CODES.OK)throw lt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,er.BAD_REQUEST);if(!_ae[e.headers["content-type"]])throw lt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,er.BAD_REQUEST);if(!e.raw)throw lt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,er.BAD_REQUEST)}a(Tae,"validateURLResponse");async function YO(e){try{let t;switch(e.file_type){case _s.VALID_S3_FILE_TYPES.CSV:t=await gae(e);break;case _s.VALID_S3_FILE_TYPES.JSON:t=await Rae(e);break;default:throw lt(new Error,Ht.DEFAULT_BULK_LOAD_ERR,er.BAD_REQUEST,_s.LOG_LEVELS.ERROR,Ht.INVALID_FILE_EXT_ERR(e))}return CG(t.records,t.number_written)}catch(t){throw Ua(t)}}a(YO,"fileLoad");async function bG(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 Rp.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=lt(c);r(l)}}a(bG,"validateChunk");async function yG(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;rl.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!rl.isEmpty(c)&&!rl.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 OG.callOperationFunctionAsAwait(wG,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=lt(c,Ma(Ht.INSERT_CSV_ERR),er.INTERNAL_SERVER_ERROR,_s.LOG_LEVELS.ERROR,Ht.INSERT_CSV_ERR+" - "+c);r(l)}}a(yG,"insertChunk");async function gae(e){let t={records:0,number_written:0},r=IG(e.schema,e.table);try{let n=new VO,s=ds.createReadStream(e.file_path,{highWaterMark:gG});s.setEncoding("utf8"),await FO.parsePromise(s,bG.bind(null,e,n),kO.bind(null,r));let i=n.getPermsResponse();if(i)throw lt(new Error,i,er.BAD_REQUEST);return s=ds.createReadStream(e.file_path,{highWaterMark:gG}),s.setEncoding("utf8"),await FO.parsePromise(s,yG.bind(null,e,t),kO.bind(null,r)),s.destroy(),t}catch(n){throw lt(n,Ma(Ht.PAPA_PARSE_ERR),er.INTERNAL_SERVER_ERROR,_s.LOG_LEVELS.ERROR,Ht.PAPA_PARSE_ERR+n)}}a(gae,"callPapaParse");function IG(e,t){let r=cae[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>lae(i,s));return n}a(IG,"createTransformMap");function kO(e,t,r){let n=e.get(r);return n?n(t):rl.autoCast(t)}a(kO,"typeFunction");async function Rae(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new VO,s=EG([ds.createReadStream(e.file_path,{encoding:"utf-8"}),hG.withParser(),c=>c.value,new pG({batchSize:RG}),mG(async c=>{await bG(e,n,r,c)})]);await new Promise((c,l)=>{SG(s,_=>{_?l(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw lt(new Error,i,er.BAD_REQUEST);let o=EG([ds.createReadStream(e.file_path,{encoding:"utf-8"}),hG.withParser(),c=>c.value,new pG({batchSize:RG}),mG(async c=>{await yG(e,t,r,c)})]);return await new Promise((c,l)=>{SG(o,_=>{_?l(_):c()}),o.resume()}),t}catch(n){throw lt(n,Ma(Ht.INSERT_JSON_ERR),er.INTERNAL_SERVER_ERROR,_s.LOG_LEVELS.ERROR,Ht.INSERT_JSON_ERR+n)}}a(Rae,"insertJson");async function wG(e){let t={};try{e.data&&e.data.length>0&&Aae(e.data[0])?t=await Oae(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",nl.info(t.message))}catch(r){throw Ua(r)}return t}a(wG,"callBulkFileLoad");function Aae(e){let t=Object.keys(e);for(let r of t)if(!uae.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Aae,"validateColumnNames");async function Oae(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=Rp.insert;break;case"update":i=Rp.update;break;case"upsert":i=Rp.upsert;break;default:throw lt(new Error,Ht.INVALID_ACTION_PARAM_ERR(n),er.BAD_REQUEST,_s.LOG_LEVELS.ERROR,Ht.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let u=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][u])>=0&&e.splice(d,1)}let l=rl.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw Ua(o)}}a(Oae,"bulkFileLoad");function CG(e,t){return`successfully loaded ${t} of ${e} records`}a(CG,"buildResponseMsg");function Ua(e){return lt(e,Ma(Ht.DEFAULT_BULK_LOAD_ERR),er.INTERNAL_SERVER_ERROR,_s.LOG_LEVELS.ERROR,Ht.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ua,"buildTopLevelErrMsg")});var PG=T((XNe,DG)=>{"use strict";var WO=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};DG.exports=WO});var vG=T((ebe,UG)=>{"use strict";var Nae=C(),MG=require("moment"),bae=require("uuid").v4,QO=class{static{a(this,"JobObject")}constructor(){this.id=bae(),this.type=void 0,this.start_datetime=MG().valueOf(),this.created_datetime=MG().valueOf(),this.end_datetime=void 0,this.status=Nae.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};UG.exports=QO});var jO=T((rbe,FG)=>{"use strict";var yae=require("uuid").v4,qG=br(),GG=nr(),Iae=Zn(),wae=pc(),Cae=PG(),ut=C(),Lae=vG(),Dae=nh(),xn=x(),Pae=iu(),sl=K(),{promisify:Mae}=require("util"),va=require("moment"),Uae=op(),Np=BO(),BG=sg(),{deleteTransactionLogsBeforeValidator:vae}=ZA(),{handleHDBError:Bae,hdb_errors:Hae}=ie(),{HTTP_STATUS_CODES:qae}=Hae,HG=GG.searchByValue,Gae=GG.searchByHash,xae=qG.insert,Fae=Mae(Uae.evaluateSQL),kae=qG.update;FG.exports={addJob:Yae,updateJob:Wae,handleGetJob:$ae,handleGetJobsByStartDate:Vae,getJobById:xG};async function $ae(e){try{let t=await xG(e.id);return sl.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 xn.error("There was an error getting job",t),new Error(r)}}a($ae,"handleGetJob");async function Vae(e){try{let t=await Kae(e);if(xn.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=va(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=va(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 xn.error(r),new Error(r)}}a(Vae,"handleGetJobsByStartDate");async function Yae(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||sl.isEmptyOrZeroLength(e.operation)){let u="job parameter is invalid";return xn.info(u),t.error=u,t}if(!ut.JOB_TYPE_ENUM[e.operation])return xn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case ut.OPERATIONS_ENUM.CSV_FILE_LOAD:n=Np.fileObject(e);break;case ut.OPERATIONS_ENUM.CSV_URL_LOAD:n=Np.urlObject(e);break;case ut.OPERATIONS_ENUM.CSV_DATA_LOAD:n=Np.dataObject(e);break;case ut.OPERATIONS_ENUM.IMPORT_FROM_S3:n=Np.s3FileObject(e);break;case ut.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case ut.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=BG(e,"date");break;case ut.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=BG(e,"timestamp");break;case ut.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=vae(e);break;default:break}if(n)throw Bae(n,n.message,qae.BAD_REQUEST,void 0,void 0,!0);let s=new Lae;s.type=e.operation===ut.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?ut.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new Iae(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await HG(i))}catch(u){let d=`There was an error inserting a new job: ${u}`;return xn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=yae();try{o=await HG(i)}catch(u){let d=`There was an error inserting a new job: ${u}`;return xn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return xn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new Pae(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await xae(l)}catch(u){return xn.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,xn.trace(u)}return t}a(Yae,"addJob");async function Kae(e){let t=va(e.from_date,va.ISO_8601),r=va(e.to_date,va.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 Cae(n,e.hdb_user);try{return await Fae(s)}catch(i){throw xn.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(Kae,"getJobsInDateRange");async function xG(e){if(sl.isEmptyOrZeroLength(e))return sl.errorizeMessage("Invalid job ID specified.");let t=new wae(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Gae(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return xn.error(n),sl.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(xG,"getJobById");async function Wae(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(sl.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===ut.JOB_STATUS_ENUM.COMPLETE||e.status===ut.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=va().valueOf());let t=new Dae(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await kae(t),r}a(Wae,"updateJob")});var WG=T((sbe,KG)=>{"use strict";var kG=K(),Fr=C(),Qae=require("moment"),bp=KO(),yp=x(),$G=jO(),VG=ap(),YG=ta(),jae=tt(),zae=ep(),zO=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Jae(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(kG.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(kG.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Fr.JOB_TYPE_ENUM.csv_file_load:await Oi(e,bp.csvFileLoad);break;case Fr.JOB_TYPE_ENUM.csv_url_load:await Oi(e,bp.csvURLLoad);break;case Fr.JOB_TYPE_ENUM.csv_data_load:await Oi(e,bp.csvDataLoad);break;case Fr.JOB_TYPE_ENUM.import_from_s3:await Oi(e,bp.importFromS3);break;case Fr.JOB_TYPE_ENUM.empty_trash:break;case Fr.JOB_TYPE_ENUM.export_local:await Oi(e,VG.export_local);break;case Fr.JOB_TYPE_ENUM.export_to_s3:await Oi(e,VG.export_to_s3);break;case Fr.JOB_TYPE_ENUM.delete_files_before:case Fr.JOB_TYPE_ENUM.delete_records_before:await Oi(e,YG.deleteFilesBefore);break;case Fr.JOB_TYPE_ENUM.delete_audit_logs_before:await Oi(e,YG.deleteAuditLogsBefore);break;case Fr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Oi(e,zae.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(Jae,"parseMessage");async function Oi(e,t){try{e.job.status=Fr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Qae().valueOf(),await $G.updateJob(e.job),await Xae(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):yp.error(`There was an error running ${t.name} job with id ${e.job.id}`),yp.error(n),e.job.message=n,e.job.status=Fr.JOB_STATUS_ENUM.ERROR;try{await $G.updateJob(e.job)}catch(s){throw yp.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Oi,"runJob");async function Xae(e){yp.trace("launching job thread:",e),jae.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Fr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Xae,"launchJobThread");KG.exports={parseMessage:Jae,RunnerMessage:zO}});var jG=T((obe,QG)=>{"use strict";var JO=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};QG.exports=JO});var dx=T((cbe,nN)=>{"use strict";var Dp=nr(),eN=op(),Ip=KO(),Ni=zE(),wp=zi(),K_=ta(),Zae=LR(),Y_=wr(),Cp=eh(),tr=zh(),Lp=x(),ece=FR(),tce=d_(),zG=TA(),rce=hh(),nce=mh(),sce=RA(),ice=gh(),oce=Ah(),XO=Nh(),JG=ap(),ace=sp(),tN=jO(),G=C(),{hdb_errors:Q_,handleHDBError:W_}=ie(),{HTTP_STATUS_CODES:XG}=Q_,ZO=yh(),ZG=Na(),cx=require("util"),il=br(),cce=Ln(),lce=di(),ex=WG(),tx=c_(),rx=(kh(),oe(w_)),nx=Et(),sx=ep(),ix=Wh(),{setServerUtilities:uce}=(NE(),oe(kg)),{CONTEXT:_ce}=(Qn(),oe(bS)),{_assignPackageExport:dce}=require("../index"),{transformReq:fce}=K(),{server:Ece}=(mr(),oe(Ho)),ur=Lp.loggerWithTag("operation"),hce=HO(),ox=Dp.searchByHash,pce=Dp.searchByValue,mce=cx.promisify(Dp.search),Sce=cx.promisify(eN.evaluateSQL),Tce={[G.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[G.OPERATIONS_ENUM.CREATE_TABLE]:!0,[G.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[G.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[G.OPERATIONS_ENUM.DROP_TABLE]:!0,[G.OPERATIONS_ENUM.DROP_SCHEMA]:!0},Y=jG();async function lx(e,t){try{if(e.body.operation!=="read_log"&&(Lp.log_level===G.LOG_LEVELS.INFO||Lp.log_level===G.LOG_LEVELS.DEBUG||Lp.log_level===G.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;ur.info(o)}}catch(n){ur.error(n)}let r=await hce.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Tce[e.body.operation]&&cce.setSchemaDataToGlobal(n=>{n&&ur.error(n)}),r}a(lx,"processLocalTransaction");var ax=Rce();nN.exports={chooseOperation:ux,getOperationFunction:_x,operation:rN,processLocalTransaction:lx};uce(nN.exports);Ece.operation=rN;function ux(e){let t;try{t=_x(e)}catch(s){throw ur.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=eN.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=eN.checkASTPermissions(e,i);if(o)throw ur.error(`${XG.FORBIDDEN} from operation ${e.operation}`),ur.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),W_(new Error,o,Q_.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==G.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==G.OPERATIONS_ENUM.LOGIN&&e.operation!==G.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=ace.verifyPerms(i,s);if(o)throw ur.error(`${XG.FORBIDDEN} from operation ${e.operation}`),ur.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),W_(new Error,o,Q_.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw W_(s,"There was an error when trying to choose an operation path")}return r}a(ux,"chooseOperation");function _x(e){if(ur.trace(`getOperationFunction with operation: ${e.operation}`),ax.has(e.operation))return ax.get(e.operation);throw W_(new Error,Q_.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Q_.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(_x,"getOperationFunction");dce("operation",rN);function rN(e,t){e.hdb_user=this[_ce]?.user,e.bypass_auth=!t;let r=ux(e);return lx({body:e},r)}a(rN,"operation");async function gce(e){ur.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[G.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case G.OPERATIONS_ENUM.INSERT:o=await il.insert(i);break;case G.OPERATIONS_ENUM.UPDATE:o=await il.update(i);break;case G.OPERATIONS_ENUM.UPSERT:o=await il.upsert(i);break;case G.OPERATIONS_ENUM.DELETE:o=await K_.deleteRecord(i);break;default:ur.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){ur.info("Invalid operation in transaction"),ur.error(o)}}a(gce,"catchup");async function xs(e){fce(e);let t,r;try{r=await tN.addJob(e),t=r.createdJob,ur.info("addJob result",r);let n=new ex.RunnerMessage(t,e);return await ex.parseMessage(n),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw ur.error(s),W_(n,s)}}a(xs,"executeJob");function Rce(){let e=new Map;return e.set(G.OPERATIONS_ENUM.INSERT,new Y(il.insert)),e.set(G.OPERATIONS_ENUM.UPDATE,new Y(il.update)),e.set(G.OPERATIONS_ENUM.UPSERT,new Y(il.upsert)),e.set(G.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new Y(Dp.searchByConditions)),e.set(G.OPERATIONS_ENUM.SEARCH_BY_HASH,new Y(ox)),e.set(G.OPERATIONS_ENUM.SEARCH_BY_ID,new Y(ox)),e.set(G.OPERATIONS_ENUM.SEARCH_BY_VALUE,new Y(pce)),e.set(G.OPERATIONS_ENUM.SEARCH,new Y(mce)),e.set(G.OPERATIONS_ENUM.SQL,new Y(Sce)),e.set(G.OPERATIONS_ENUM.CSV_DATA_LOAD,new Y(xs,Ip.csvDataLoad)),e.set(G.OPERATIONS_ENUM.CSV_FILE_LOAD,new Y(xs,Ip.csvFileLoad)),e.set(G.OPERATIONS_ENUM.CSV_URL_LOAD,new Y(xs,Ip.csvURLLoad)),e.set(G.OPERATIONS_ENUM.IMPORT_FROM_S3,new Y(xs,Ip.importFromS3)),e.set(G.OPERATIONS_ENUM.CREATE_SCHEMA,new Y(Ni.createSchema)),e.set(G.OPERATIONS_ENUM.CREATE_DATABASE,new Y(Ni.createSchema)),e.set(G.OPERATIONS_ENUM.CREATE_TABLE,new Y(Ni.createTable)),e.set(G.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new Y(Ni.createAttribute)),e.set(G.OPERATIONS_ENUM.DROP_SCHEMA,new Y(Ni.dropSchema)),e.set(G.OPERATIONS_ENUM.DROP_DATABASE,new Y(Ni.dropSchema)),e.set(G.OPERATIONS_ENUM.DROP_TABLE,new Y(Ni.dropTable)),e.set(G.OPERATIONS_ENUM.DROP_ATTRIBUTE,new Y(Ni.dropAttribute)),e.set(G.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new Y(wp.describeSchema)),e.set(G.OPERATIONS_ENUM.DESCRIBE_DATABASE,new Y(wp.describeSchema)),e.set(G.OPERATIONS_ENUM.DESCRIBE_TABLE,new Y(wp.describeTable)),e.set(G.OPERATIONS_ENUM.DESCRIBE_ALL,new Y(wp.describeAll)),e.set(G.OPERATIONS_ENUM.DELETE,new Y(K_.deleteRecord)),e.set(G.OPERATIONS_ENUM.ADD_USER,new Y(Y_.addUser)),e.set(G.OPERATIONS_ENUM.ALTER_USER,new Y(Y_.alterUser)),e.set(G.OPERATIONS_ENUM.DROP_USER,new Y(Y_.dropUser)),e.set(G.OPERATIONS_ENUM.LIST_USERS,new Y(Y_.listUsersExternal)),e.set(G.OPERATIONS_ENUM.LIST_ROLES,new Y(Cp.listRoles)),e.set(G.OPERATIONS_ENUM.ADD_ROLE,new Y(Cp.addRole)),e.set(G.OPERATIONS_ENUM.ALTER_ROLE,new Y(Cp.alterRole)),e.set(G.OPERATIONS_ENUM.DROP_ROLE,new Y(Cp.dropRole)),e.set(G.OPERATIONS_ENUM.USER_INFO,new Y(Y_.userInfo)),e.set(G.OPERATIONS_ENUM.READ_LOG,new Y(ece)),e.set(G.OPERATIONS_ENUM.ADD_NODE,new Y(tce)),e.set(G.OPERATIONS_ENUM.UPDATE_NODE,new Y(zG)),e.set(G.OPERATIONS_ENUM.SET_NODE_REPLICATION,new Y(zG)),e.set(G.OPERATIONS_ENUM.REMOVE_NODE,new Y(rce)),e.set(G.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new Y(nce)),e.set(G.OPERATIONS_ENUM.PURGE_STREAM,new Y(sce)),e.set(G.OPERATIONS_ENUM.SET_CONFIGURATION,new Y(nx.setConfiguration)),e.set(G.OPERATIONS_ENUM.CLUSTER_STATUS,new Y(ice.clusterStatus)),e.set(G.OPERATIONS_ENUM.CLUSTER_NETWORK,new Y(oce)),e.set(G.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new Y(XO.setRoutes)),e.set(G.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new Y(XO.getRoutes)),e.set(G.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new Y(XO.deleteRoutes)),e.set(G.OPERATIONS_ENUM.EXPORT_TO_S3,new Y(xs,JG.export_to_s3)),e.set(G.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new Y(xs,K_.deleteFilesBefore)),e.set(G.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new Y(xs,K_.deleteFilesBefore)),e.set(G.OPERATIONS_ENUM.EXPORT_LOCAL,new Y(xs,JG.export_local)),e.set(G.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new Y(tN.handleGetJobsByStartDate)),e.set(G.OPERATIONS_ENUM.GET_JOB,new Y(tN.handleGetJob)),e.set(G.OPERATIONS_ENUM.GET_FINGERPRINT,new Y(ZO.getFingerprint)),e.set(G.OPERATIONS_ENUM.SET_LICENSE,new Y(ZO.setLicense)),e.set(G.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new Y(ZO.getRegistrationInfo)),e.set(G.OPERATIONS_ENUM.RESTART,new Y(ZG.restart)),e.set(G.OPERATIONS_ENUM.RESTART_SERVICE,new Y(ZG.restartService)),e.set(G.OPERATIONS_ENUM.CATCHUP,new Y(gce)),e.set(G.OPERATIONS_ENUM.SYSTEM_INFORMATION,new Y(lce.systemInformation)),e.set(G.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new Y(xs,K_.deleteAuditLogsBefore)),e.set(G.OPERATIONS_ENUM.READ_AUDIT_LOG,new Y(Zae)),e.set(G.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new Y(tx.createTokens)),e.set(G.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new Y(tx.refreshOperationToken)),e.set(G.OPERATIONS_ENUM.LOGIN,new Y(rx.login)),e.set(G.OPERATIONS_ENUM.LOGOUT,new Y(rx.logout)),e.set(G.OPERATIONS_ENUM.GET_CONFIGURATION,new Y(nx.getConfiguration)),e.set(G.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new Y(tr.customFunctionsStatus)),e.set(G.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new Y(tr.getCustomFunctions)),e.set(G.OPERATIONS_ENUM.GET_COMPONENT_FILE,new Y(tr.getComponentFile)),e.set(G.OPERATIONS_ENUM.GET_COMPONENTS,new Y(tr.getComponents)),e.set(G.OPERATIONS_ENUM.SET_COMPONENT_FILE,new Y(tr.setComponentFile)),e.set(G.OPERATIONS_ENUM.DROP_COMPONENT,new Y(tr.dropComponent)),e.set(G.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new Y(tr.getCustomFunction)),e.set(G.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new Y(tr.setCustomFunction)),e.set(G.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new Y(tr.dropCustomFunction)),e.set(G.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new Y(tr.addComponent)),e.set(G.OPERATIONS_ENUM.ADD_COMPONENT,new Y(tr.addComponent)),e.set(G.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new Y(tr.dropCustomFunctionProject)),e.set(G.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Y(tr.packageComponent)),e.set(G.OPERATIONS_ENUM.PACKAGE_COMPONENT,new Y(tr.packageComponent)),e.set(G.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Y(tr.deployComponent)),e.set(G.OPERATIONS_ENUM.DEPLOY_COMPONENT,new Y(tr.deployComponent)),e.set(G.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new Y(sx.readTransactionLog)),e.set(G.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new Y(xs,sx.deleteTransactionLogsBefore)),e.set(G.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new Y(ix.installModules)),e.set(G.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new Y(ix.auditModules)),e.set(G.OPERATIONS_ENUM.GET_BACKUP,new Y(Ni.getBackup)),e}a(Rce,"initializeOperationFunctionMap")});var Mp=T((ube,hx)=>{"use strict";var sN=C(),Ace=K(),j_=x(),{handleHDBError:iN,hdb_errors:Pp}=ie(),{isMainThread:Oce}=require("worker_threads"),{Readable:Nce}=require("stream"),fx=require("os"),bce=require("util"),yce=JR(),Ice=bce.promisify(yce.authorize),Ex=dx(),{createGzip:wce,constants:Cce}=require("zlib");function Lce(e){let t=`Found an uncaught exception with message: ${e.message}. ${fx.EOL}Stack: ${e.stack} ${fx.EOL}Terminating ${Oce?"HDB":"thread"}.`;console.error(t),j_.fatal(t),process.exit(1)}a(Lce,"handleServerUncaughtException");function Dce(e,t,r){if(j_[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:Pp.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(Dce,"serverErrorHandler");function Pce(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=iN(new Error,"Invalid JSON.",Pp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(Ace.isEmpty(e.body.operation)){let n=iN(new Error,"Request body must include an 'operation' property.",Pp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(Pce,"reqBodyValidationHandler");function Mce(e,t,r){let n;e.body.operation!==sN.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==sN.OPERATIONS_ENUM.LOGIN&&e.body.operation!==sN.OPERATIONS_ENUM.LOGOUT?Ice(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{j_.warn(s),j_.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(iN(s,i,Pp.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(Mce,"authHandler");async function Uce(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=Ex.chooseOperation(e.body);let s=await Ex.processLocalTransaction(e,n);if(s instanceof Nce&&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(wce({level:Cce.Z_BEST_SPEED})))}return s}catch(s){throw j_.error(s),s}}a(Uce,"handlePostRequest");hx.exports={authHandler:Mce,handlePostRequest:Uce,handleServerUncaughtException:Lce,serverErrorHandler:Dce,reqBodyValidationHandler:Pce}});var Tx=T((dbe,Sx)=>{"use strict";var vce=require("fastify-plugin"),{handlePostRequest:px,authHandler:Bce,reqBodyValidationHandler:Hce}=Mp();async function qce(e){e.decorate("hdbCore",{preValidation:[Hce,Bce],request:t=>mx(px(t,response)),requestWithoutAuthentication:(t,r)=>mx(px(t,r,!0))})}a(qce,"hdbCore");async function mx(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(mx,"convertAsyncIterators");Sx.exports=vce(qce)});var Ax=T((hbe,Rx)=>{"use strict";var Ebe=require("fs"),oN=X();oN.initSync();var{CONFIG_PARAMS:gx}=C(),Gce=1024*1024*1024;function xce(e){let t=oN.get(gx.HTTP_TIMEOUT),r=oN.get(gx.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Gce,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(xce,"getServerOptions");Rx.exports=xce});var bx=T((mbe,Nx)=>{"use strict";var aN=X();aN.initSync();var{CONFIG_PARAMS:Ox}=C();function Fce(){let e=aN.get(Ox.HTTP_CORSACCESSLIST),t=aN.get(Ox.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(Fce,"getCORSOptions");Nx.exports=Fce});var wx=T((Tbe,Ix)=>{"use strict";var yx=X();yx.initSync();var kce=C();function $ce(){return yx.get(kce.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a($ce,"getHeaderTimeoutConfig");Ix.exports=$ce});var lN={};$e(lN,{customFunctionsServer:()=>Kce,ready:()=>$x,start:()=>Yce});function Yce(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){bi||(bi=kx(t),it.http((await bi).server));let o=await bi,c=(0,cN.dirname)(s),l=(0,cN.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!Cx.has(c)){Cx.add(c);try{o.register(Qce(c,l))}catch(_){if(_.message==="Root plugin has already booted")Ke.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:$x}}async function Kce(){try{Ke.info("In Custom Functions Fastify server"+process.cwd()),Ke.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ke.debug(`Custom Functions server process ${process.pid} starting up.`),await Wce();let e=vx.get(Bx.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=bi=await kx(e)}catch(r){throw Ke.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ke.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ke.error(`Custom Functions ${process.pid} Error: ${e}`),Ke.error(e),process.exit(1)}}async function Wce(){try{Ke.info("Custom Functions starting configuration."),await Hx.setUsersToGlobal(),Ke.info("Custom Functions completed configuration.")}catch(e){Ke.error(e)}}function Qce(e,t){return async function(r){try{Ke.info("Custom Functions starting buildRoutes"),Ke.trace("Loading fastify routes folder "+e),(0,Lx.existsSync)(e)&&r.register(Ux.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Ke.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Ke.error(s.message):s&&Ke.error(s),o()})}catch(n){Ke.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function kx(e){Ke.info("Custom Functions starting buildServer.");let t=(0,qx.default)(e),r=(0,Dx.default)(t);r.server.headersTimeout=(0,xx.default)(),r.setErrorHandler(Fx.serverErrorHandler);let n=(0,Gx.default)();return n&&r.register(Px.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(Mx.default),await r.register(Vce),await r.after(),AO(r),Ke.info("Custom Functions completed buildServer."),r}function $x(){if(bi)return bi.then?bi.then(e=>e.ready()):bi.ready()}var cN,Lx,Dx,Px,Mx,Ux,vx,Bx,Ke,Vce,Hx,qx,Gx,xx,Fx,bi,Cx,Vx=Ne(()=>{cN=require("path"),Lx=require("fs"),Dx=q(require("fastify")),Px=q(require("@fastify/cors")),Mx=q(LO()),Ux=q(require("@fastify/autoload")),vx=q(X()),Bx=q(C()),Ke=q(x()),Vce=q(Tx()),Hx=q(wr()),qx=q(Ax()),Gx=q(bx()),xx=q(wx()),Fx=q(Mp());Wc();mr();Cx=new Set;a(Yce,"start");a(Kce,"customFunctionsServer");a(Wce,"setUp");a(Qce,"buildRouteFolder");a(kx,"buildServer");a($x,"ready")});var uN={};$e(uN,{start:()=>jce});function jce(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,jx.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){Kx||(Kx=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=Yx.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,Wx.default)(s,(0,Qx.realpathSync)(o))}}return i(s)},{runFirst:!0})),Yx.set(r,n)}}}var Wx,Qx,jx,Yx,Kx,zx=Ne(()=>{Wx=q(require("send")),Qx=require("fs"),jx=q(require("serve-static")),Yx=new Map;a(jce,"start")});var EN={};$e(EN,{Request:()=>_N,createReuseportFd:()=>Up});var Jx,_N,dN,fN,Up,vp=Ne(()=>{Jx=require("os"),_N=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 fN(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 dN(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},dN=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},fN=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,Jx.platform)()!="win32"&&(Up=require("node-unix-socket").createReuseportFd)});var tF=T((Dbe,eF)=>{"use strict";var zce=require("cluster"),Ba=X();Ba.initSync();var Zx=C(),ybe=require("util"),yi=x(),Ibe=require("fs"),Jce=require("fastify"),wbe=Bo(),Xce=require("@fastify/cors"),Zce=require("@fastify/compress"),ele=require("@fastify/static"),tle=LO(),rle=require("path"),{PACKAGE_ROOT:nle}=C(),sle=Ln(),ile=K(),ole=wr(),ale=ia(),{server:cle}=(mr(),oe(Ho)),{node_request_key:Cbe}=(vp(),oe(EN)),{authHandler:lle,handlePostRequest:ule,serverErrorHandler:_le,reqBodyValidationHandler:dle}=Mp(),Lbe=require("net"),{registerContentHandlers:fle}=(Wc(),oe(Wq)),Ele=6e4,hle=1024*1024*1024,ple="TRUE",{CONFIG_PARAMS:z_}=Zx,ol;eF.exports={hdbServer:Xx,start:Xx};async function Xx(e){try{yi.info("In Fastify server"+process.cwd()),yi.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),yi.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=zce.isMaster,await mle();let t=e.securePort>0;ol=Sle(t),await ol.ready(),e||(e={}),e.isOperationsServer=!0;try{cle.http(ol.server,e),ol.server.closeIdleConnections||await ol.listen({port:0,host:"::"})}catch(r){throw ol.close(),yi.error(r),yi.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),yi.fatal(t),process.exit(1)}}a(Xx,"operationsServer");async function mle(){yi.trace("Configuring HarperDB process."),sle.setSchemaDataToGlobal(),await ole.setUsersToGlobal(),await ale.getLicense()}a(mle,"setUp");function Sle(e){yi.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Tle(e),r=Jce(t);r.server.headersTimeout=Rle(),r.setErrorHandler(_le);let n=gle();n&&r.register(Xce,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,_){r.server.emit("unhandled",l.raw,_.raw)}),c()}),r.register(tle),r.register(Zce),r.register(ele,{root:rle.join(nle,"studio/build-local")}),fle(r);let s=Ba.get(Zx.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!ile.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[dle,lle],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),ule(i,o)}),r.get("/health",()=>"HarperDB is running."),yi.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Sle,"buildServer");function Tle(e){let t=Ba.get(z_.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ba.get(z_.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:hle,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Tle,"getServerOptions");function gle(){let e=Ba.get(z_.OPERATIONSAPI_NETWORK_CORS),t=Ba.get(z_.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===ple)&&(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(gle,"getCORSOpts");function Rle(){return Ba.get(z_.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Ele}a(Rle,"getHeaderTimeoutConfig")});var gN={};$e(gN,{disableNATS:()=>Ole,publishToStream:()=>qp,setNATSReplicator:()=>hN,setPublishToStream:()=>Nle,setSubscription:()=>TN,start:()=>Ale});function Ale(){J_.default.get(X_.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&yle()}function Ole(e=!0){oF=e}function Nle(e,t){qp=e,TN=t}function yle(){if(oF||process.env._DISABLE_NATS)return;let e=ts(),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];hN(s,r,i)}}Wg((r,n)=>{hN(r.tableName,r.databaseName,r),n&&cF(r)}),!rF&&(rF=!0)}function hN(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends jt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Ue],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Ue]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Ue],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Ue],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Ue]})}static defineSchema(i){cF(i)}static subscribe(){let i=new Wn;return TN(t,e,i),i}static subscribeOnThisThread(i){return i<(J_.default.get(X_.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??ble)}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 Bp(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=aF;return i}a(n,"getNATSTransaction")}function cF(e){let t=J_.default.get(X_.default.CONFIG_PARAMS.CLUSTERING_NODENAME);qp(`${mN.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,SN.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 nF,mN,SN,sF,iF,J_,X_,Hp,oF,qp,TN,ble,aF,rF,Bp,pN,lF=Ne(()=>{ge();Qn();nF=q(ht()),mN=q(et()),SN=q(li());kl();sF=q(SR()),iF=q(Tr()),J_=q(X()),X_=q(C()),Hp=q(x());a(Ale,"start");a(Ole,"disableNATS");qp=nF.publishToStream,TN=sF.setSubscription;a(Nle,"setPublishToStream");ble=2;a(yle,"assignReplicationSource");a(hN,"setNATSReplicator");a(cF,"publishSchema");Bp=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=J_.default.get(X_.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,_;for(let u of i){let d=u.table,f=u.operation=="put"?"upsert":u.operation;l||(Hp.trace(`Sending transaction event ${f}`),_=l={operation:f,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,f!=="delete"&&f!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===f?(o.push(u.record),c.push(u.id)):_=_.next={operation:f,table:d,id:u.id,record:u.record},u.expiresAt&&(_.expiresAt=u.expiresAt)}l&&n.push(qp(`${mN.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,SN.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(u=>{throw Hp.error("An error has occurred trying to replicate transaction",l,u),u.statusCode=504,u}))}return Promise.all(n)}},pN=class extends Bp{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,iF.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};aF=new pN});var IN=T(Ha=>{"use strict";var{isMainThread:hF,parentPort:ed,threadId:Gp}=require("worker_threads"),{Socket:Ile,createServer:wle}=require("net"),{createServer:Cle,IncomingMessage:Lle}=require("http"),{createServer:Dle}=require("https"),{readFileSync:al,unlinkSync:uF,existsSync:Ple}=require("fs"),_r=x(),Pe=X(),yt=C(),{server:$p}=(mr(),oe(Ho)),{WebSocketServer:Mle}=require("ws"),{createServer:Ule}=require("tls"),{getTicketKeys:vle,restartNumber:Ble,getWorkerIndex:Fp}=tt(),{Headers:pF,appendHeader:Hle}=(Uu(),oe(LM)),{recordAction:Z_,recordActionBinary:qle}=(ui(),oe(Mu)),{Request:mF,createReuseportFd:_F}=(vp(),oe(EN)),{checkMemoryLimit:Gle}=ia(),SF=require("tls"),dF=SF.createSecureContext;SF.createSecureContext=function(e){if(!e.cert||!e.key)return dF(e);let t={...e};delete t.key,delete t.cert;let r=dF(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var TF=Pe.get(yt.CONFIG_PARAMS.THREADS_DEBUG);if(TF){let e;if(hF)e=Pe.get(yt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){_r.info("Could not close debugger",t)}});else{let t=Pe.get(yt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Fp()>=0&&(e=t+Fp())}if(e){let t=Pe.get(yt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=Pe.get(yt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){_r.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){Ble<=1&&_r.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:qbe,CONFIG_PARAMS:xle}=yt;Pe.initSync();var Fle=Pe.get(xle.HTTP_SESSIONAFFINITY),Fs={};Ha.registerServer=bN;Ha.httpServer=yN;Ha.deliverSocket=NN;Ha.startServers=gF;Ha.when_components_loaded=null;$p.http=yN;$p.request=Yle;$p.socket=Kle;$p.ws=Wle;var RN={},xp={},kle,To={},kp={},$le=[],AN=[];function gF(){return Ha.when_components_loaded=Vp().loadRootComponents(!0).then(()=>{ed?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)NN(n,r,s);else if(t.requestId)Vle(t);else if(t.type===yt.ITC_EVENT_TYPES.SHUTDOWN){_r.trace("received shutdown request",Gp);for(let i in Fs){let o=Fs[i],c;if(o.closeIdleConnections){let _=Object.getOwnPropertySymbols(o).find(f=>f.description.includes("connections")),u=0,d=setInterval(()=>{u++;let f=u>=100,E=o[_][f?"all":"idle"]();if(E.length===0){f&&clearInterval(d);return}u===1?_r.info(`Closing ${E.length} idle connections`):f&&_r.warn(`Forcefully closing ${E.length} active connections`);for(let h=0,m=E.length;h<m;h++){let S=E[h].socket;S._httpMessage&&!S._httpMessage.finished&&!f||(f?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
28
28
  Connection: close\r
29
29
  \r
30
- `))}},25).unref()}o.close?.(()=>{if(Pe.get(It.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Dp()==0)try{rF(Pe.get(It.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,Cp),o.cantCleanupProperly||cr.warn("Had to forcefully exit the thread",Cp),process.exit(0)},5e3).unref()})}if(_F||process.env.DEV_MODE)try{require("inspector").close()}catch(i){cr.info("Could not close debugger",i)}}}).ref();let e=[];if(nF&&!vle)for(let t in Gs){let r=Gs[t];if(isNaN(t)&&Dp()==0){yle(t)&&rF(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),cr.info("Domain socket listening on "+t)}).on("error",i)}));continue}let n;try{n=nF(+t,"::")}catch(s){console.error(`Unable to bind to port ${t}`,s);continue}e.push(new Promise((s,i)=>{r.listen({fd:n},()=>{s(),cr.trace("Listening on port "+t,Cp)}).on("error",i)}))}Promise.all(e).then(()=>{ed?.postMessage({type:It.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(dF,"startServers");aF||dF();function pN(e,t,r){let n=e?.read?e:new Rle({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Gs[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=Gs[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(cr.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(pN,"deliverSocket");var iF=new Map;function qle(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=iF.get(s),r){case"connection":i=pN(void 0,t),iF.set(s,i),i.write=(c,l,_)=>(ed.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,l,_)=>(ed.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),ed.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(qle,"proxyRequest");function mN(e,t,r=!0){!+t&&t!==Pe.get(It.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(Pe.get(It.CONFIG_PARAMS.HTTP_PORT),10));let n=Gs[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",oF),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Gs[t]=e;e.on("unhandled",oF)}a(mN,"registerServer");function fF(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=[],Pe.get(It.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Pe.get(It.CONFIG_PARAMS.HTTP_PORT),secure:Pe.get(It.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Pe.get(It.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Pe.get(It.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Pe.get(It.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:Pe.get(It.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(fF,"getPorts");function SN(e,t){for(let{port:r,secure:n}of fF(t))EF(r,n,t?.isOperationsServer),typeof e=="function"?EN[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,mN(e,r,!1)),Pp[r]=hN(EN,r),Ble=hN(Hle,r)}a(SN,"httpServer");function EF(e,t,r){if(!go[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:Pe.get(n+"_keepAliveTimeout"),headersTimeout:Pe.get(n+"_headersTimeout"),requestTimeout:Pe.get(n+"_timeout")},i=Pe.get(n+"_mtls"),o=Pe.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let l=Pe.get(n+"tls_privateKey"),_=Pe.get(n+"tls_certificate"),u=Pe.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:al(l),ciphers:Pe.get("tls_ciphers"),cert:al(_),ca:u&&al(u),rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:Cle()})}let c=Mle();go[e]=(t?ble:Ole)(s,async(l,_)=>{try{let d=performance.now(),f=new lF(l,_);r&&(f.isOperationsServer=!0);let E=await Pp[e](f);if(!E){if(f._nodeResponse.statusCode)return;E=hF(f)}if(c?E.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):E.headers?.set?.("Server","HarperDB"),E.status===-1){for(let B of E.headers||[])_.setHeader(B[0],B[1]);return l.baseRequest=f,_.baseResponse=E,go[e].emit("unhandled",l,_)}let h=E.status||200,m=performance.now(),S=m-d,A=E.body,T;if(!E.handlesHeaders){let B=E.headers||new cF;A?A.length>=0&&(typeof A=="string"?B.set("Content-Length",Buffer.byteLength(A)):B.set("Content-Length",A.length),T=!0):(B.set("Content-Length","0"),T=!0);let v=`hdb;dur=${S.toFixed(2)}`;E.wasCacheMiss&&(v+=", miss"),Dle(B,"Server-Timing",v,!0),_.writeHead(h,B&&(B[Symbol.iterator]?Array.from(B):B)),T&&_.end(A)}let R=f.handlerPath,U=f.method;if(Z_(S,"duration",R,U,E.wasCacheMiss==null?void 0:E.wasCacheMiss?"cache-miss":"cache-hit"),Ple(h<400,"success",R,U),!T)if(A?.pipe){A.pipe(_),A.destroy&&_.on("close",()=>{A.destroy()});let B=0;A.on("data",v=>{B+=v.length}),A.on("end",()=>{Z_(performance.now()-m,"transfer",R,U),Z_(B,"bytes-sent",R,U)})}else A?.then?A.then(B=>{_.end(B)},u):_.end(A)}catch(d){u(d)}function u(d){let f=d.headers;_.writeHead(d.statusCode||500,f&&(f[Symbol.iterator]?Array.from(f):f)),_.end(d.toString()),d.statusCode?d.statusCode===500?cr.warn(d):cr.info(d):cr.error(d)}a(u,"onError")}),i&&(go[e].mtlsConfig=i),t&&(go[e].on("secureConnection",l=>{l._parent.startTime&&Z_(performance.now()-l._parent.startTime,"tls-handshake",e),Z_(l.isSessionReused(),"tls-reused",e)}),go[e].isSecure=!0),mN(go[e],e)}return go[e]}a(EF,"getHTTPServer");function hN(e,t){let r=hF;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(hN,"makeCallbackChain");function hF(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new cF}}a(hF,"unhandled");function xle(e,t){SN(e,{requestOnly:!0,...t})}a(xle,"onRequest");function Gle(e,t){let r;if(t.securePort){let n=Pe.get("tls_privateKey"),s=Pe.get("tls_certificate"),i=t.mtls?.certificateAuthority||Pe.get("tls_certificateAuthority");r=wle({ciphers:Pe.get("tls_ciphers"),key:al(n),cert:al(s),ca:i&&al(i),rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls},e),Gs[t.securePort]=r}return t.port&&(r=Ale(e),Gs[t.port]=r),r}a(Gle,"onSocket");Object.defineProperty(Nle.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.startsWith("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function Fle(e,t){let r;for(let{port:n,secure:s}of fF(t)){Lp[n]||(Lp[n]=new Ile({server:r=EF(n,s)}),Lp[n].on("connection",async(c,l)=>{try{let _=new lF(l);_.isWebSocket=!0;let u=Pp[n](_),d=l.headers["sec-websocket-protocol"]||"",f=fN[n];if(d){let E;for(let h=0;h<f.length;h++){let m=f[h];m.protocol===d&&(E=!0,m.listener(c,_,u))}if(E)return}for(let E=0;E<f.length;E++){let h=f[E];h.protocol||h.listener(c,_,u)}}catch(_){cr.warn("Error handling WebSocket connection",_)}}),Lp[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=fN[n];o||(o=fN[n]=[]),o.push({listener:e,protocol:i}),Pp[n]=hN(EN,n)}return r}a(Fle,"onWebSocket");function oF(e,t){t.writeHead(404),t.end(`Not found
31
- `)}a(oF,"defaultNotFound")});async function TF({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await gN.get(e,{returnNonexistent:!0});s=new ON(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await gN.get(e);i&&i.delete()}s=new Bp(e,t)}return n&&(n.id=e,n.user={username:t?.username},td.put(n)),s}function RN(){return vp++,vp>65500&&(vp=1),vp}function AN(e,t,r=e){let{topic:n,retain:s}=e;e.data=t,e.async=!0,e.authorize=!0;let i=Yi.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 et(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var pF,Ro,mF,SF,gN,td,vp,Bp,ON,gF=Oe(()=>{ge();zl();pF=q(pr()),Ro=q(G());Vo();mF=q(rt()),SF=q(TN());Er();gN=Et({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),td=Et({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,mF.getWorkerIndex)()===0&&(async()=>{await SF.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of td.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await ot.getUser(r.user.username)),et(r,()=>{try{AN(r,t)}catch{(0,Ro.warn)("Failed to publish will",t)}td.delete(e.id,r)})}})();a(TF,"getSession");vp=1;a(RN,"getNextMessageId");Bp=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,_;if(c>-1?(l=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let u=this.subscriptions.find(A=>A.topic===s),d;u?(d=i>0,u.end(),this.subscriptions.splice(this.subscriptions.indexOf(u),1)):d=i===2;let f={search:l,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Ro.trace)("Resuming subscription from",s,"from",o);let E=Yi.getMatch(_);if(!E){let A=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw A.statusCode=404,A}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let A=f.url.slice(1);if(A.indexOf("#")>-1&&A.indexOf("#")!==A.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,A.indexOf("+")===A.length-1)f.onlyChildren=!0,f.url="/"+A.slice(0,A.length-1);else{let T=A.split("/"),R;for(let v=0;v<T.length;v++)if(T[v].indexOf("+")>-1)if(T[v]==="+")R=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&R)throw new Error("Filters can not be combined");let U=!0;T[T.length-1]==="#"&&(T.length--,U=!1),R&&(n=a(v=>{let P=v.id;if(!Array.isArray(P)||U&&P.length!==T.length)return!1;for(let K=0;K<T.length;K++)if(T[K]!=="+"&&T[K]!==P[K])return!1;return!0},"filter"));let B=T.indexOf("+");f.url="/"+(B>-1?T.slice(0,B):T).concat("").join("/")}}let h=E.path,m=E.Resource,S=await et(f,async()=>{let A=await m.subscribe(f);if(!A)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!A[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let T of A)try{let R;if(T.type&&T.type!=="put"&&T.type!=="delete"&&T.type!=="message"&&T.type!=="patch"||n&&!n(T))continue;r?(T.topic=s,R=this.needsAcknowledge(T)):(T.acknowledge?.(),R=RN());let U=T.id;Array.isArray(U)&&(U=lc(U)),U==null&&(U=""),this.listener(h+"/"+U,T.value,R,t)}catch(R){(0,Ro.warn)(R)}})(),A});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=RN();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(),!0}async publish(t,r){return t.user=this.user,AN(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};et(r,async()=>{if(!t){let n=await td.get(this.sessionId,r);n?.doesExist()&&await AN(n,n.data,r)}await td.delete(this.sessionId,r)}).catch(n=>{(0,Ro.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(AN,"publish");ON=class extends Bp{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=RN(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Ro.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.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,pF.getNextMonotonicTime)()),(0,Ro.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),gN.put(this.sessionRecord)),t.qos}}});var NN={};$e(NN,{bypassAuth:()=>kle,start:()=>$le});function kle(){bF=!0}function $le({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i,sessions:new Set},c,l=r?.mtls;return n&&(c=e.ws((_,u,d)=>{if(_.protocol==="mqtt"){let{onMessage:f,onClose:E}=OF(_,(h,m)=>{if(_.send(h),m&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},u,Promise.resolve(d).then(()=>u?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{(0,Gr.info)("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let u;if(l){if(_.authorized)try{let E=l.user;E!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),u=await e.getUser(E,null,null))}catch(E){(0,Gr.error)(E)}else if(l.required)return(0,Gr.info)(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!u&&bF&&_.remoteAddress.includes("127.0.0.1")&&(u=await(0,NF.getSuperUser)());let{onMessage:d,onClose:f}=OF(_,E=>_.write(E),null,u,o);_.on("data",d),_.on("close",f),_.on("error",E=>{(0,Gr.info)("Socket error",E)})},{port:t,securePort:s,mtls:l})),c}function OF(e,t,r,n,s){AF||(AF=!0,vu(d=>{Hp>0&&d.push({metric:"mqtt-connections",connections:Hp,byThread:!0})}));let i;Hp++;let o,c={protocolVersion:4},l=(0,xp.parser)({protocolVersion:5});function _(d){l.parse(d)}a(_,"onMessage");function u(){Hp--,i||(i=!0,o?.disconnect(),s.sessions.delete(o),Cn(!1,"connection","mqtt","disconnect"))}return a(u,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await ot.getUser(d.username,d.password.toString(),r),(0,qp.get)(Fs.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&RF.notify({username:n.username,status:Fs.AUTH_AUDIT_STATUS.SUCCESS,type:Fs.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,qp.get)(Fs.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&RF.error({username:n.username,status:Fs.AUTH_AUDIT_STATUS.FAILURE,type:Fs.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return Cn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let R=e.deserialize||(e.deserialize=Da(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?R(d.will.payload):void 0,delete d.will.payload}o=TF({user:n,...d}),o=await o,s.sessions.add(o)}catch(R){return(0,Gr.error)(R),Cn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:R.code||5,returnCode:R.code||128})}Cn(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((R,U,B,v)=>{try{let P=R.indexOf("/",1),K=P>0?R.slice(0,P):R;f({cmd:"publish",topic:R,payload:E(U),messageId:B||Math.floor(Math.random()*1e8),qos:v.qos},K)}catch(P){(0,Gr.error)(P),o?.disconnect(),s.sessions.delete(o)}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let R of d.subscriptions){let U;try{U=(await o.addSubscription(R,R.qos>=1)).qos||0}catch(B){(0,Gr.error)(B),U=c.protocolVersion<5?128:B.statusCode===403?135:B.statusCode===404?143:128}h.push(U)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let R=[];for(let U of d.unsubscriptions)R.push(o.removeSubscription(U)?0:17);f({cmd:"unsuback",granted:R,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let m=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=Da(r?.headers.get?.("content-type"))),A=d.payload?.length>0?S(d.payload):void 0,T;try{T=await o.publish(d,A)}catch(R){(0,Gr.warn)(R),d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:T===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.sessions.delete(o),Cn(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Gr.error)(h),f({cmd:"disconnect"})}function f(h,m){let S=(0,xp.generate)(h,c);t(S),sn(S.length,"bytes-sent",m,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return ho(h,r)}a(E,"serialize")}),{onMessage:_,onClose:u}}var xp,NF,qp,Fs,Gr,RF,bF,AF,Hp,yF=Oe(()=>{xp=require("mqtt-packet");gF();NF=q(yr());Wc();ui();Er();qp=q(J()),Fs=q(C()),Gr=q(G()),RF=(0,Gr.loggerWithTag)("auth-event"),bF=(0,qp.get)(Fs.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(kle,"bypassAuth");a($le,"start");Hp=0;a(OF,"onSocket")});var qh={};$e(qh,{component_errors:()=>ll,loadComponent:()=>Gp,loadComponentDirectories:()=>vF,setErrorReporter:()=>Wle});function vF(e,t){t&&(yN=t),e&&(IN=e);let r=[];if((0,us.existsSync)(bN)){let s=(0,us.readdirSync)(bN,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,wt.join)(bN,o);r.push(Gp(c,yN,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Gp(n,yN,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{UF=!0})}function Wle(e){nd=e}async function Gp(e,t,r,n,s,i){if(!wF.has(e)){wF.set(e,!0),s&&(IN=s);try{let o;n&&(ll=new Map);let c=(0,wt.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,us.existsSync)(c)?o=n?(0,MF.getConfigObj)():(0,CF.parseDocument)((0,us.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=wN;let l=[],_=n;for(let u in o){let d=o[u];if(ll.set(n?u:(0,wt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let T=e,R;for(;!(0,us.existsSync)(R=(0,wt.join)(T,"node_modules",u));)if(T=(0,wt.dirname)(T),T.length<(0,PF.getHdbBasePath)().length){R=null;break}if(R)f=await Gp(R,t,r,!1),_=!0;else throw new Error(`Unable to find package ${u}:${E}`)}else f=Kle[u];if(!f)continue;l.push(f);let h=a(T=>(T.origin=r,Et(T)),"ensureTable"),m=d.network||(d.port||d.securePort)&&d,S=m?.securePort||m?.https&&m.port,A=!m?.https&&m?.port;if(cl.isMainThread&&(f=await f.startOnMainThread?.({server:ot,ensureTable:h,port:A,securePort:S,resources:t,...d})||f,n&&m))for(let T of[A,S])try{if(+T&&!IF.includes(T)){let R=CN.get(LN.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);R&&rd.default.warn("Session affinity is not recommended and may cause memory leaks"),(R||!gp)&&(IF.push(T),DN(T,R))}}catch(R){console.error("Error listening on socket",T,R,u)}if(t.isWorker&&(f=await f.start?.({server:ot,ensureTable:h,port:A,securePort:S,resources:t,...d})||f),IN.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,DF.handleHDBError)("Can not reference parent directories");let T=(0,wt.join)(e,d.files).replace(/\\/g,"/"),R=T.indexOf("/*");if(R>-1&&d.files!==wN[u]?.files&&!(0,us.existsSync)(T.slice(0,R)))throw new Error(`The path '${T.slice(0,R)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let U=(0,wt.basename)(e),B=d.path||"/";B=B.startsWith("/")?B:B.startsWith("./")?"/"+U+B.slice(2):B==="."?"/"+U:"/"+U+"/"+B;let v,P,K;if(d.root){let Y=d.root;Y.startsWith("/")&&(Y=Y.slice(1)),Y.endsWith("/")&&(Y=Y.slice(0,-1)),Y+="/",P=(0,wt.join)(e,Y)}else(K=T.indexOf("/*"))>-1&&(P=T.slice(0,K+1),v=(0,wt.relative)(e,P));let V=!1;if(cl.isMainThread&&f.setupDirectory&&(V=await f.setupDirectory?.(B,P,t)),t.isWorker&&f.handleDirectory&&(V=await f.handleDirectory?.(B,P,t)),V)continue;for(let Y of await(0,LF.default)(T,{onlyFiles:!1,objectMode:!0})){let{path:ue,dirent:Ee}=Y;_=!0;let Fe=(0,wt.relative)(e,ue).replace(/\\/g,"/");if(v)if(Fe.startsWith(v))Fe=Fe.slice(v.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${Fe}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let le=B+(B.endsWith("/")?"":"/")+Fe;try{if(Ee.isFile()){let be=await Yle(ue);cl.isMainThread&&await f.setupFile?.(be,le,ue,t),t.isWorker&&await f.handleFile?.(be,le,ue,t)}else cl.isMainThread&&await f.setupDirectory?.(le,ue,t),t.isWorker&&await f.handleDirectory?.(le,ue,t)}catch(be){be.message=`Could not load ${Ee.isFile()?"file":"directory"} '${ue}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${be.message}`,nd?.(be),((0,ul.getWorkerIndex)()===0?console:rd.default).error(be),t.set(d.path||"/",new sd(be)),ll.set(n?u:(0,wt.basename)(e),be.message)}}}}catch(h){h.message=`Could not load component '${u}' for application '${(0,wt.basename)(e)}' due to: ${h.message}`,nd?.(h),((0,ul.getWorkerIndex)()===0?console:rd.default).error(h),t.set(d.path||"/",new sd(h),null,!0),ll.set(n?u:(0,wt.basename)(e),h.message)}}if(cl.isMainThread&&!UF&&i&&(0,ul.watchDir)(e,async()=>vF()),o.extensionModule)return await LE((0,wt.join)(e,o.extensionModule));if(!_&&t.isWorker){let u=`${e} did not load any modules, resources, or files, is this a valid component?`;nd?.(new Error(u)),((0,ul.getWorkerIndex)()===0?console:rd.default).error(u),ll.set((0,wt.basename)(e),u)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,nd?.(o),t.set("",new sd(o))}}}var us,wt,cl,CF,CN,LN,LF,ul,rd,DF,PF,Vle,MF,Yle,bN,IN,UF,yN,ll,Kle,wN,IF,wF,nd,sd,xh=Oe(()=>{us=require("fs"),wt=require("path"),cl=require("worker_threads"),CF=require("yaml"),CN=q(J()),LN=q(C());XM();rU();nU();xq();yG();PG();LF=q(require("fast-glob")),ul=q(rt()),rd=q(G());Qg();Er();DF=q(se());Wn();ge();Fp();PF=q(J()),Vle=q(HG());Ch();tF();yF();MF=q(ht());Rp();({readFile:Yle}=us.promises),bN=CN.get(LN.CONFIG_PARAMS.COMPONENTSROOT),IN=new Map,ll=new Map;a(vF,"loadComponentDirectories");Kle={REST:Zh,rest:Zh,graphqlSchema:Wg,jsResource:zg,fastifyRoutes:XO,login:Xg,static:ZO,operationsApi:Vle,customFunctions:{},http:{},clustering:dN,authentication:L_,mqtt:NN},wN={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(wN,"static",{value:{files:"web/**"}});IF=[],wF=new Map;a(Wle,"setErrorReporter");a(Gp,"loadComponent");sd=class extends Qt{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var Up=g((rye,HF)=>{var{isMainThread:BF}=require("worker_threads"),{getTables:Qle}=(ge(),ie(Ge)),{loadComponentDirectories:jle,loadComponent:zle}=(xh(),ie(qh)),{resetResources:Jle}=(zl(),ie(CI)),Xle=xA(),Zle=ht(),{dirname:eue}=require("path"),{getConnection:tue}=pt(),rue=J(),nue=C(),PN=new Map;async function sue(e=!1){!BF&&rue.get(nue.CONFIG_PARAMS.CLUSTERING_ENABLED)&&tue();try{BF&&await Xle()}catch(n){console.error(n)}let t=Jle();Qle(),t.isWorker=e,await zle(eue(Zle.getConfigFilePath()),t,"hdb",!0,PN),await jle(PN,t);let r=[];for(let[n]of PN)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(sue,"loadRootComponents");HF.exports.loadRootComponents=sue});var rt=g((sye,Oo)=>{"use strict";var{Worker:iue,MessageChannel:oue,parentPort:ks,isMainThread:HN,threadId:aue,workerData:Ii}=require("worker_threads"),{PACKAGE_ROOT:cue}=C(),{join:FF,isAbsolute:lue,extname:uue}=require("path"),{server:kF}=(Er(),ie(qo)),{watch:_ue,readdir:due}=require("fs/promises"),{totalmem:qF}=require("os"),id=C(),$F=J(),wi=G(),{randomBytes:fue}=require("crypto"),{_assignPackageExport:Eue}=require("../index"),hue=C(),xF=1024*1024,Ao=[],Gn=[],pue=50,qN=1e4,mue="restart",VF="request_thread_info",YF="resource_report",KF="thread_info",WF="added-port",Sue="ack",MN;Eue("threads",Gn);Oo.exports={startWorker:UN,restartWorkers:GN,shutdownWorkers:Oue,workers:Ao,setMonitorListener:Due,onMessageFromWorkers:Nue,onMessageByType:ek,broadcast:yue,broadcastWithAcknowledgement:wue,setChildListenerByType:Aue,getWorkerIndex:QF,getWorkerCount:jF,getTicketKeys:JF,setMainIsWorker:gue,setTerminateTimeout:Tue,restartNumber:Ii?.restartNumber||1};Gn.onMessageByType=ek;Gn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Gn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var xN;function Tue(e){qN=e}a(Tue,"setTerminateTimeout");function QF(){return Ii?Ii.workerIndex:xN?0:void 0}a(QF,"getWorkerIndex");function jF(){return Ii?Ii.workerCount:xN?1:void 0}a(jF,"getWorkerCount");function gue(e){xN=e}a(gue,"setMainIsWorker");var zF=1,kp;function JF(){return kp||(kp=HN?fue(48):Ii.ticketKeys,kp)}a(JF,"getTicketKeys");Object.defineProperty(kF,"workerIndex",{get(){return QF()}});Object.defineProperty(kF,"workerCount",{get(){return jF()}});var XF={[VF](e,t){Cue(t)},[YF](e,t){Lue(t,e)}};function UN(e,t={}){let r=process.constrainedMemory?.()||qF();r=Math.min(r,qF(),2e4*xF);let n=$F.get(id.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/xF/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Gn){let _=new oue;_.existingPort=l,i.push(_),o.push(_.port2)}uue(e)||(e+=".js");let c=new iue(lue(e)?e:FF(cue,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:zF=t.threadCount,name:t.name,restartNumber:Oo.exports.restartNumber,ticketKeys:JF()},transferList:o},t));for(let{port1:l,existingPort:_}of i)_.postMessage({type:WF,port:l,threadId:c.threadId},[l]);return Vp(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>UN(e,t),c.on("error",l=>{console.error("Worker error:",l),wi.error("Worker error:",l)}),c.on("exit",l=>{Ao.splice(Ao.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<pue?(t.unexpectedRestarts=c.unexpectedRestarts+1,UN(e,t)):wi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{XF[l.type]?.(l,c)}),Ao.push(c),Mue(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(UN,"startWorker");var Rue=[id.THREAD_TYPES.HTTP];async function GN(e=null,t=Math.max(zF>3,1),r=!0){if(HN){if(r){let{loadRootComponents:o}=Up();await o()}Oo.exports.restartNumber++,t<1&&(t=t*Ao.length);let n=[],s=[];for(let o of Ao.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;wi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Oo.exports.restartNumber,type:id.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Rue.indexOf(o.name)>-1,l=new Promise(_=>{let u=setTimeout(()=>o.terminate(),qN*2).unref();o.on("exit",()=>{clearTimeout(u),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),_()})});if(n.push(l),c&&r){let _=o.startCopy(),u=new Promise(d=>{let f=a(E=>{E.type===hue.ITC_EVENT_TYPES.CHILD_STARTED&&(wi.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(u)),_.off("message",f))},"startListener");wi.trace("Waiting for worker to start",_.threadId),_.on("message",f)});s.push(u),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=ba();r&&(e==="http"||!e)&&$F.get(id.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else ks.postMessage({type:mue,workerType:e})}a(GN,"restartWorkers");function Aue(e,t){XF[e]=t}a(Aue,"setChildListenerByType");function Oue(e){return GN(e,1/0,!1)}a(Oue,"shutdownWorkers");var ZF=[];function Nue(e){ZF.push(e)}a(Nue,"onMessageFromWorkers");var vN=new Map;function ek(e,t){let r=vN.get(e);r||vN.set(e,r=[]),r.push(t)}a(ek,"onMessageByType");var bue=10;async function yue(e){let t=0;for(let r of Gn)try{r.postMessage(e),t++>bue&&(t=0,await new Promise(setImmediate))}catch(n){wi.error("Unable to send message to worker",n)}}a(yue,"broadcast");var $p=new Map,Iue=1;function wue(e){return new Promise(t=>{let r=0;for(let n of Gn)try{let s=Iue++,i=a(()=>{$p.delete(s),--r===0&&t(),n!==ks&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,$p.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of $p)o.port===n&&o()})),n.postMessage(e),r++}catch(s){wi.error("Unable to send message to worker",s)}r===0&&t()})}a(wue,"broadcastWithAcknowledgement");function Cue(e){e.postMessage({type:KF,workers:tk()})}a(Cue,"sendThreadInfo");function tk(){let e=Date.now();return Ao.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(tk,"getChildWorkerInfo");function Lue(e,t){e.resources=t,e.resources.updated=Date.now()}a(Lue,"recordResourceReport");var BN;function Due(e){BN=e}a(Due,"setMonitorListener");var Pue=1e3,GF=!1;function Mue(){GF||(GF=!0,setInterval(()=>{for(let e of Ao){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}BN&&BN()},Pue).unref())}a(Mue,"startMonitoring");var Uue=1e3;if(ks){Vp(ks);for(let e=0,t=Ii.addPorts.length;e<t;e++){let r=Ii.addPorts[e];r.threadId=Ii.addThreadIds[e],Vp(r)}setInterval(()=>{let e=process.memoryUsage();ks.postMessage({type:YF,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Uue).unref(),MN=a(()=>new Promise((e,t)=>{ks.on("message",r),ks.postMessage({type:VF});function r(n){n.type===KF&&(ks.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else MN=tk;Oo.exports.getThreadInfo=MN;function Vp(e,t){Gn.push(e),e.on("message",r=>{if(r.type===WF)r.port.threadId=r.threadId,Vp(r.port);else if(r.type===Sue){let n=$p.get(r.id);n&&n()}else{for(let s of ZF)s(r,e);let n=vN.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){wi.error(i)}}}).on("close",()=>{Gn.splice(Gn.indexOf(e),1)}).on("exit",()=>{Gn.splice(Gn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Vp,"addPort");if(HN){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await due(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(FF(n,i.name));try{for await(let{filename:i}of _ue(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await GN(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");Oo.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else ks.on("message",async e=>{let{type:t}=e;t===id.ITC_EVENT_TYPES.SHUTDOWN&&(Oo.exports.restartNumber=e.restartNumber,ks.unref(),setTimeout(()=>{wi.warn("Thread did not voluntarily terminate",aue),process.exit(0)},qN).unref())})});var YN={};$e(YN,{startHTTPThreads:()=>Bue,startSocketServer:()=>DN,updateWorkerIdleness:()=>ck});async function Bue(e=2,t){if(t)kN(0,1,!0);else{let{loadRootComponents:n}=Up();if(e===0)return(0,No.setMainIsWorker)(!0),await TN().startServers(),Promise.resolve([]);await n()}let r=(0,ik.checkMemoryLimit)();r&&!process.env.DEV_MODE&&(console.error(r),setInterval(()=>{Qp.notify(r)},vue).unref());for(let n=0;n<e;n++)kN(n,e);return Promise.all(ak)}function kN(e,t=1,r){if(FN++,(0,No.startWorker)("server/threads/threadServer.js",{name:Wp.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(_){_.type===Wp.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});ak.push(s),await s,_l.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=Kp.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=_l.indexOf(n);o>-1&&_l.splice(o,1)}if(a(i,"removeWorker"),dl){let o=dl;dl=[];for(let c of o)ok[c.localPort](null,c)}}}),r){let n=setInterval(()=>{$N?$N=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,No.shutdownWorkers)(),FN=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function DN(e=0,t){if(typeof e=="string")try{(0,jp.existsSync)(e)&&(0,jp.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Hue:r=que(t):r=VN;let n=(0,fl.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=ok[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),$N=!0,r(o,(c,l)=>{if(!c){if(rk){let u=o._socket||new fl.Socket({handle:o,writable:!0,readable:!0});rk.deliverSocket(u,e,l),u.resume()}else FN>0?(dl.length===0&&setTimeout(()=>{dl.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,dl.push(o)):(console.log("start up a dynamic thread to handle request"),kN(0));sn(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:l});else{let u=o._socket||new fl.Socket({handle:o,writable:!0,readable:!0});Fue(u,c,e)}sn(!0,"socket-routed")})};let s=Ho();Qp.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 VN(e,t){let r,n=0;for(let s of _l){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Yp)return Yp=i,t(r);n=i}Yp=0,t(r)}function Hue(e,t){let r={};e.getpeername(r);let n=r.address,s=El.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);VN(e,o=>{El.set(n,{worker:o,lastUsed:i}),t(o)})}function que(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new fl.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],_=El.get(l),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,s(_.worker);VN(n,d=>{El.set(l,{worker:d,lastUsed:u}),s(d,o)})})}a(r,"findByHeaderAffinity")}function ck(){Yp=0;for(let e of _l)e.expectedIdle=e.recentELU.idle+xue,e.requests=1;_l.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Fue(e,t,r){let n=Gue++;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(),Kp.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")),Kp.delete(n)),s.event=="destroy"&&(e.destroy(),Kp.delete(n))})}var No,fl,Wp,Qp,jp,sk,ik,_l,dl,ok,rk,FN,ak,vue,$N,Yp,nk,El,xue,Kp,Gue,Fp=Oe(()=>{No=q(rt()),fl=require("net"),Wp=q(C()),Qp=q(G()),jp=require("fs");ui();sk=require("worker_threads"),ik=q(oa()),_l=[],dl=[],ok=[],FN=0,ak=[];sk.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});vue=6e5;a(Bue,"startHTTPThreads");a(kN,"startHTTPWorker");a(DN,"startSocketServer");Yp=0;a(VN,"findMostIdleWorker");nk=36e5,El=new Map;a(Hue,"findByRemoteAddressAffinity");a(que,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of El)r.lastUsed+nk<e&&El.delete(t)},nk).unref();xue=1e3;a(ck,"updateWorkerIdleness");(0,No.setMonitorListener)(ck);Kp=new Map,Gue=1;a(Fue,"proxySocket")});var _k=g((cye,uk)=>{"use strict";var Jp=J();Jp.initSync();var zp=C(),{httpRequest:kue}=Q(),$ue=require("path"),lk=require("fs-extra"),Vue=require("yaml"),Yue={describe_table:!0,describe_all:!0,describe_database:!0,list_users:!0,list_roles:!0,drop_role:!0,add_user:!0,alter_user:!0,drop_user:!0,restart_service:!0,restart:!0,create_database:!0,drop_database:!0,create_table:!0,drop_table:!0,create_attribute:!0,drop_attribute:!0,search_by_id:!0,delete:!0,search_by_value:!0,csv_file_load:!0,csv_url_load:!0,cluster_get_routes:!0,cluster_network:!0,cluster_status:!0,remove_node:!0,add_component:!0,deploy_component:!0,package_component:!0,drop_component:!0,get_components:!0,get_component_file:!0,set_component_file:!0,registration_info:!0,get_fingerprint:!0,set_license:!0,get_job:!0,search_jobs_by_start_date:!0,read_log:!0,read_transaction_log:!0,read_audit_log:!0,delete_transaction_logs_before:!0,purge_stream:!0,delete_records_before:!0,install_node_modules:!0,set_configuration:!0,get_configuration:!0,create_authentication_tokens:!0,refresh_operation_token:!0,system_information:!0,sql:!0};uk.exports={cliOperations:Wue,buildRequest:Kue};function Kue(){let e={};for(let t of process.argv){if(Yue[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(Kue,"buildRequest");async function Wue(e){await lk.exists($ue.join(Jp.get(zp.CONFIG_PARAMS.ROOTPATH),zp.HDB_PID_FILE))||(console.error("HarperDB must be running to perform this operation"),process.exit()),await lk.exists(Jp.get(zp.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))||(console.error("No domain socket found, unable to perform this operation"),process.exit());try{let t=await kue({method:"POST",protocol:"http:",socketPath:Jp.get(zp.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(Vue.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(Wue,"cliOperations")});var WN=g((uye,dk)=>{"use strict";var od=J();od.initSync();var hl=require("fs-extra"),KN=require("path"),pl=C(),Que=require("crypto"),jue=require("uuid").v4;dk.exports=zue;function zue(){if(od.getHdbBasePath()!==void 0){let e=KN.join(od.getHdbBasePath(),pl.LICENSE_KEY_DIR_NAME,pl.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=KN.join(od.getHdbBasePath(),pl.LICENSE_KEY_DIR_NAME,pl.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=KN.join(od.getHdbBasePath(),pl.LICENSE_KEY_DIR_NAME,pl.JWT_ENUM.JWT_PASSPHRASE_NAME);try{hl.accessSync(r),hl.accessSync(e),hl.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=jue(),i=Que.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});hl.writeFileSync(r,s),hl.writeFileSync(e,i.privateKey),hl.writeFileSync(t,i.publicKey)}else throw n}}}a(zue,"checkJWTTokenExist")});var Ek=g((dye,fk)=>{"use strict";var QN=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};fk.exports={HdbInfoInsertObject:QN}});var mk=g((Eye,pk)=>{"use strict";var hk=C(),jN=class{static{a(this,"UpgradeObject")}constructor(t,r){this[hk.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[hk.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};pk.exports={UpgradeObject:jN}});var Xp=g((pye,Tk)=>{"use strict";var Fn=require("prompt"),ml=require("chalk"),Sk=G(),_s=require("os"),zN=vo(),JN=["yes","y"];async function Jue(e){let t=`${_s.EOL}`+ml.bold.green("Your current HarperDB version requires that we complete an update process.")+`${_s.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${_s.EOL}${_s.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${_s.EOL}`;Fn.override=zN(["CONFIRM_UPGRADE"]),Fn.start(),Fn.message=t;let r={properties:{CONFIRM_UPGRADE:{description:ml.magenta(`${_s.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 Fn.get([r])}catch(s){return Sk.error("There was an error when prompting user about an upgrade."),Sk.error(s),!1}return JN.includes(n.CONFIRM_UPGRADE)}a(Jue,"forceUpdatePrompt");async function Xue(e){let t=`${_s.EOL}`+ml.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.${_s.EOL}`);Fn.override=zN(["CONFIRM_DOWNGRADE"]),Fn.start(),Fn.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:ml.magenta(`${_s.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 Fn.get([r]);return JN.includes(n.CONFIRM_DOWNGRADE)}a(Xue,"forceDowngradePrompt");async function Zue(){let e=`${_s.EOL}`+ml.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");Fn.override=zN(["GENERATE_CERTS"]),Fn.start(),Fn.message=e;let t={properties:{GENERATE_CERTS:{description:ml.magenta(`${_s.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 Fn.get([t]);return JN.includes(r.GENERATE_CERTS)}a(Zue,"upgradeCertsPrompt");Tk.exports={forceUpdatePrompt:Jue,forceDowngradePrompt:Xue,upgradeCertsPrompt:Zue}});var ZN=g((Sye,gk)=>{"use strict";var XN=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};gk.exports=XN});var Ak=g((Nye,Rk)=>{"use strict";var e_e=Q(),t_e=ht(),gye=G(),Rye=require("path"),Aye=require("fs"),Oye=C();Rk.exports={getOldPropsValue:r_e};function r_e(e,t,r=!1){let n=t.getRaw(e);return e_e.isNotEmptyAndHasValue(n)?n:r?t_e.getDefaultConfig(e):""}a(r_e,"getOldPropsValue")});var yk=g((yye,bk)=>{"use strict";var bo=require("path"),yo=require("fs-extra"),n_e=require("properties-reader"),s_e=ZN(),Ct=G(),{getOldPropsValue:We}=Ak(),{HDB_SETTINGS_NAMES:ne,CONFIG_PARAMS:xa}=C(),Ga=ht(),Zp=J(),Ok=Q(),$s=C(),eb=new s_e("3.1.0"),Nk=[];function i_e(){let e=n_e(Zp.get(ne.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Ct.info(t);let r=` ;Settings for the HarperDB process.
30
+ `))}},25).unref()}o.close?.(()=>{if(Pe.get(yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Fp()==0)try{uF(Pe.get(yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,Gp),o.cantCleanupProperly||_r.warn("Had to forcefully exit the thread",Gp),process.exit(0)},5e3).unref()})}if(TF||process.env.DEV_MODE)try{require("inspector").close()}catch(i){_r.info("Could not close debugger",i)}}}).ref();let e=[];if(_F&&!Fle)for(let t in Fs){let r=Fs[t];if(isNaN(t)&&Fp()==0){Ple(t)&&uF(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),_r.info("Domain socket listening on "+t)}).on("error",i)}));continue}let n;try{n=_F(+t,"::")}catch(s){console.error(`Unable to bind to port ${t}`,s);continue}e.push(new Promise((s,i)=>{r.listen({fd:n},()=>{s(),_r.trace("Listening on port "+t,Gp)}).on("error",i)}))}Promise.all(e).then(()=>{ed?.postMessage({type:yt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(gF,"startServers");hF||gF();function NN(e,t,r){let n=e?.read?e:new Ile({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Fs[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=Fs[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(_r.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(NN,"deliverSocket");var fF=new Map;function Vle(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=fF.get(s),r){case"connection":i=NN(void 0,t),fF.set(s,i),i.write=(c,l,_)=>(ed.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,l,_)=>(ed.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),ed.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(Vle,"proxyRequest");function bN(e,t,r=!0){!+t&&t!==Pe.get(yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(Pe.get(yt.CONFIG_PARAMS.HTTP_PORT),10));let n=Fs[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",EF),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Fs[t]=e;e.on("unhandled",EF)}a(bN,"registerServer");function RF(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=[],Pe.get(yt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Pe.get(yt.CONFIG_PARAMS.HTTP_PORT),secure:Pe.get(yt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Pe.get(yt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Pe.get(yt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Pe.get(yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:Pe.get(yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(RF,"getPorts");function yN(e,t){for(let{port:r,secure:n}of RF(t))AF(r,n,t?.isOperationsServer),typeof e=="function"?AN[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,bN(e,r,!1)),kp[r]=ON(AN,r),kle=ON($le,r)}a(yN,"httpServer");function AF(e,t,r){if(!To[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:Pe.get(n+"_keepAliveTimeout"),headersTimeout:Pe.get(n+"_headersTimeout"),requestTimeout:Pe.get(n+"_timeout")},i=Pe.get(n+"_mtls"),o=Pe.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let l=Pe.get(n+"tls_privateKey"),_=Pe.get(n+"tls_certificate"),u=Pe.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:al(l),ciphers:Pe.get("tls_ciphers"),cert:al(_),ca:u&&al(u),rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:vle()})}let c=Gle();To[e]=(t?Dle:Cle)(s,async(l,_)=>{try{let d=performance.now(),f=new mF(l,_);r&&(f.isOperationsServer=!0);let E=await kp[e](f);if(!E){if(f._nodeResponse.statusCode)return;E=OF(f)}if(c?E.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):E.headers?.set?.("Server","HarperDB"),E.status===-1){for(let v of E.headers||[])_.setHeader(v[0],v[1]);return l.baseRequest=f,_.baseResponse=E,To[e].emit("unhandled",l,_)}let h=E.status||200,m=performance.now(),S=m-d,R=E.body,g;if(!E.handlesHeaders){let v=E.headers||new pF;R?R.length>=0&&(typeof R=="string"?v.set("Content-Length",Buffer.byteLength(R)):v.set("Content-Length",R.length),g=!0):(v.set("Content-Length","0"),g=!0);let U=`hdb;dur=${S.toFixed(2)}`;E.wasCacheMiss&&(U+=", miss"),Hle(v,"Server-Timing",U,!0),_.writeHead(h,v&&(v[Symbol.iterator]?Array.from(v):v)),g&&_.end(R)}let A=f.handlerPath,P=f.method;if(Z_(S,"duration",A,P,E.wasCacheMiss==null?void 0:E.wasCacheMiss?"cache-miss":"cache-hit"),qle(h<400,"success",A,P),!g)if(R?.pipe){R.pipe(_),R.destroy&&_.on("close",()=>{R.destroy()});let v=0;R.on("data",U=>{v+=U.length}),R.on("end",()=>{Z_(performance.now()-m,"transfer",A,P),Z_(v,"bytes-sent",A,P)})}else R?.then?R.then(v=>{_.end(v)},u):_.end(R)}catch(d){u(d)}function u(d){let f=d.headers;_.writeHead(d.statusCode||500,f&&(f[Symbol.iterator]?Array.from(f):f)),_.end(d.toString()),d.statusCode?d.statusCode===500?_r.warn(d):_r.info(d):_r.error(d)}a(u,"onError")}),i&&(To[e].mtlsConfig=i),t&&(To[e].on("secureConnection",l=>{l._parent.startTime&&Z_(performance.now()-l._parent.startTime,"tls-handshake",e),Z_(l.isSessionReused(),"tls-reused",e)}),To[e].isSecure=!0),bN(To[e],e)}return To[e]}a(AF,"getHTTPServer");function ON(e,t){let r=OF;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(ON,"makeCallbackChain");function OF(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new pF}}a(OF,"unhandled");function Yle(e,t){yN(e,{requestOnly:!0,...t})}a(Yle,"onRequest");function Kle(e,t){let r;if(t.securePort){let n=Pe.get("tls_privateKey"),s=Pe.get("tls_certificate"),i=t.mtls?.certificateAuthority||Pe.get("tls_certificateAuthority");r=Ule({ciphers:Pe.get("tls_ciphers"),key:al(n),cert:al(s),ca:i&&al(i),rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls},e),Fs[t.securePort]=r}return t.port&&(r=wle(e),Fs[t.port]=r),r}a(Kle,"onSocket");Object.defineProperty(Lle.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.startsWith("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function Wle(e,t){let r;for(let{port:n,secure:s}of RF(t)){xp[n]||(xp[n]=new Mle({server:r=AF(n,s)}),xp[n].on("connection",async(c,l)=>{try{let _=new mF(l);_.isWebSocket=!0;let u=kp[n](_),d=l.headers["sec-websocket-protocol"]||"",f=RN[n];if(d){let E;for(let h=0;h<f.length;h++){let m=f[h];m.protocol===d&&(E=!0,m.listener(c,_,u))}if(E)return}for(let E=0;E<f.length;E++){let h=f[E];h.protocol||h.listener(c,_,u)}}catch(_){_r.warn("Error handling WebSocket connection",_)}}),xp[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=RN[n];o||(o=RN[n]=[]),o.push({listener:e,protocol:i}),kp[n]=ON(AN,n)}return r}a(Wle,"onWebSocket");function EF(e,t){t.writeHead(404),t.end(`Not found
31
+ `)}a(EF,"defaultNotFound")});async function IF({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await wN.get(e,{returnNonexistent:!0});s=new DN(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await wN.get(e);i&&i.delete()}s=new Kp(e,t)}return n&&(n.id=e,n.user={username:t?.username},td.put(n)),s}function CN(){return Yp++,Yp>65500&&(Yp=1),Yp}function LN(e,t,r=e){let{topic:n,retain:s}=e;e.data=t,e.async=!0,e.authorize=!0;let i=Yi.getMatch(n);if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return Ze(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var NF,go,bF,yF,wN,td,Yp,Kp,DN,wF=Ne(()=>{ge();zl();NF=q(Tr()),go=q(x());$o();bF=q(tt()),yF=q(IN());mr();wN=ft({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),td=ft({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,bF.getWorkerIndex)()===0&&(async()=>{await yF.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of td.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await it.getUser(r.user.username)),Ze(r,()=>{try{LN(r,t)}catch{(0,go.warn)("Failed to publish will",t)}td.delete(e.id,r)})}})();a(IF,"getSession");Yp=1;a(CN,"getNextMessageId");Kp=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,_;if(c>-1?(l=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let u=this.subscriptions.find(R=>R.topic===s),d;u?(d=i>0,u.end(),this.subscriptions.splice(this.subscriptions.indexOf(u),1)):d=i===2;let f={search:l,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,go.trace)("Resuming subscription from",s,"from",o);let E=Yi.getMatch(_);if(!E){let R=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw R.statusCode=404,R}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let R=f.url.slice(1);if(R.indexOf("#")>-1&&R.indexOf("#")!==R.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,R.indexOf("+")===R.length-1)f.onlyChildren=!0,f.url="/"+R.slice(0,R.length-1);else{let g=R.split("/"),A;for(let U=0;U<g.length;U++)if(g[U].indexOf("+")>-1)if(g[U]==="+")A=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&A)throw new Error("Filters can not be combined");let P=!0;g[g.length-1]==="#"&&(g.length--,P=!1),A&&(n=a(U=>{let F=U.id;if(!Array.isArray(F)||P&&F.length!==g.length)return!1;for(let H=0;H<g.length;H++)if(g[H]!=="+"&&g[H]!==F[H])return!1;return!0},"filter"));let v=g.indexOf("+");f.url="/"+(v>-1?g.slice(0,v):g).concat("").join("/")}}let h=E.path,m=E.Resource,S=await Ze(f,async()=>{let R=await m.subscribe(f);if(!R)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let g of R)try{let A;if(g.type&&g.type!=="put"&&g.type!=="delete"&&g.type!=="message"&&g.type!=="patch"||n&&!n(g))continue;r?(g.topic=s,A=this.needsAcknowledge(g)):(g.acknowledge?.(),A=CN());let P=g.id;Array.isArray(P)&&(P=ac(P)),P==null&&(P=""),this.listener(h+"/"+P,g.value,A,t)}catch(A){(0,go.warn)(A)}})(),R});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=CN();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(),!0}async publish(t,r){return t.user=this.user,LN(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};Ze(r,async()=>{if(!t){let n=await td.get(this.sessionId,r);n?.doesExist()&&await LN(n,n.data,r)}await td.delete(this.sessionId,r)}).catch(n=>{(0,go.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(LN,"publish");DN=class extends Kp{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=CN(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,go.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.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,NF.getNextMonotonicTime)()),(0,go.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),wN.put(this.sessionRecord)),t.qos}}});var UN={};$e(UN,{bypassAuth:()=>Qle,start:()=>jle});function Qle(){PF=!0}function jle({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i,sessions:new Set},c,l=r?.mtls;return n&&(c=e.ws((_,u,d)=>{if(_.protocol==="mqtt"){pn.debug("Received WSS connection for MQTT from",_._socket.remoteAddress);let{onMessage:f,onClose:E}=LF(_,(h,m)=>{if(_.send(h),m&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},u,Promise.resolve(d).then(()=>u?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{pn.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let u;if(pn.debug("Received connection for MQTT from",_.remoteAddress),l){if(_.authorized)try{let E=l.user;E!==null?((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),u=await e.getUser(E,null,null),(0,rd.get)(mn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&PN.notify({username:u.username,status:mn.AUTH_AUDIT_STATUS.SUCCESS,type:mn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})):pn.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(E){pn.error(E)}else if(l.required)return pn.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!u&&PF&&_.remoteAddress.includes("127.0.0.1")&&(u=await(0,DF.getSuperUser)(),pn.debug("Auto-authorizing local connection",u?.username));let{onMessage:d,onClose:f}=LF(_,E=>_.write(E),null,u,o);_.on("data",d),_.on("close",f),_.on("error",E=>{pn.info("Socket error",E)})},{port:t,securePort:s,mtls:l})),c}function LF(e,t,r,n,s){CF||(CF=!0,Pu(d=>{Wp>0&&d.push({metric:"mqtt-connections",connections:Wp,byThread:!0})}));let i;Wp++;let o,c={protocolVersion:4},l=(0,Qp.parser)({protocolVersion:5});function _(d){l.parse(d)}a(_,"onMessage");function u(){Wp--,i||(i=!0,o?.disconnect(),s.sessions.delete(o),Dn(!1,"connection","mqtt","disconnect"))}return a(u,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await it.getUser(d.username,d.password.toString(),r),(0,rd.get)(mn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&PN.notify({username:n.username,status:mn.AUTH_AUDIT_STATUS.SUCCESS,type:mn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,rd.get)(mn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&PN.error({username:n.username,status:mn.AUTH_AUDIT_STATUS.FAILURE,type:mn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return Dn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let A=e.deserialize||(e.deserialize=La(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?A(d.will.payload):void 0,delete d.will.payload}o=IF({user:n,...d}),o=await o,s.sessions.add(o)}catch(A){return pn.error(A),Dn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:A.code||5,returnCode:A.code||128})}Dn(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((A,P,v,U)=>{try{let F=A.indexOf("/",1),H=F>0?A.slice(0,F):A;f({cmd:"publish",topic:A,payload:E(P),messageId:v||Math.floor(Math.random()*1e8),qos:U.qos},H)}catch(F){pn.error(F),o?.disconnect(),s.sessions.delete(o)}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let A of d.subscriptions){let P;try{P=(await o.addSubscription(A,A.qos>=1)).qos||0}catch(v){pn.error(v),P=c.protocolVersion<5?128:v.statusCode===403?135:v.statusCode===404?143:128}h.push(P)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let A=[];for(let P of d.unsubscriptions)A.push(o.removeSubscription(P)?0:17);f({cmd:"unsuback",granted:A,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let m=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=La(r?.headers.get?.("content-type"))),R=d.payload?.length>0?S(d.payload):void 0,g;try{g=await o.publish(d,R)}catch(A){pn.warn(A),d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:g===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.sessions.delete(o),Dn(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){pn.error(h),f({cmd:"disconnect"})}function f(h,m){let S=(0,Qp.generate)(h,c);t(S),on(S.length,"bytes-sent",m,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return ho(h,r)}a(E,"serialize")}),{onMessage:_,onClose:u}}var Qp,DF,rd,mn,MN,PN,pn,PF,CF,Wp,MF=Ne(()=>{Qp=require("mqtt-packet");wF();DF=q(wr());Wc();ui();mr();rd=q(X()),mn=q(C()),MN=q(x()),PN=(0,MN.loggerWithTag)("auth-event"),pn=(0,MN.loggerWithTag)("mqtt"),PF=(0,rd.get)(mn.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Qle,"bypassAuth");a(jle,"start");Wp=0;a(LF,"onSocket")});var Jh={};$e(Jh,{component_errors:()=>ll,loadComponent:()=>jp,loadComponentDirectories:()=>kF,setErrorReporter:()=>Zle});function kF(e,t){t&&(BN=t),e&&(HN=e);let r=[];if((0,Es.existsSync)(vN)){let s=(0,Es.readdirSync)(vN,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,It.join)(vN,o);r.push(jp(c,BN,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(jp(n,BN,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{FF=!0})}function Zle(e){sd=e}async function jp(e,t,r,n,s,i){if(!vF.has(e)){vF.set(e,!0),s&&(HN=s);try{let o;n&&(ll=new Map);let c=(0,It.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,Es.existsSync)(c)?o=n?(0,xF.getConfigObj)():(0,BF.parseDocument)((0,Es.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=qN;let l=[],_=n;for(let u in o){let d=o[u];if(ll.set(n?u:(0,It.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let g=e,A;for(;!(0,Es.existsSync)(A=(0,It.join)(g,"node_modules",u));)if(g=(0,It.dirname)(g),g.length<(0,GF.getHdbBasePath)().length){A=null;break}if(A)f=await jp(A,t,r,!1),_=!0;else throw new Error(`Unable to find package ${u}:${E}`)}else f=Xle[u];if(!f)continue;l.push(f);let h=a(g=>(g.origin=r,ft(g)),"ensureTable"),m=d.network||(d.port||d.securePort)&&d,S=m?.securePort||m?.https&&m.port,R=!m?.https&&m?.port;if(cl.isMainThread&&(f=await f.startOnMainThread?.({server:it,ensureTable:h,port:R,securePort:S,resources:t,...d})||f,n&&m))for(let g of[R,S])try{if(+g&&!UF.includes(g)){let A=GN.get(xN.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);A&&nd.default.warn("Session affinity is not recommended and may cause memory leaks"),(A||!Up)&&(UF.push(g),FN(g,A))}}catch(A){console.error("Error listening on socket",g,A,u)}if(t.isWorker&&(f=await f.start?.({server:it,ensureTable:h,port:R,securePort:S,resources:t,...d})||f),HN.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,qF.handleHDBError)("Can not reference parent directories");let g=(0,It.join)(e,d.files).replace(/\\/g,"/"),A=g.indexOf("/*");if(A>-1&&d.files!==qN[u]?.files&&!(0,Es.existsSync)(g.slice(0,A)))throw new Error(`The path '${g.slice(0,A)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let P=(0,It.basename)(e),v=d.path||"/";v=v.startsWith("/")?v:v.startsWith("./")?"/"+P+v.slice(2):v==="."?"/"+P:"/"+P+"/"+v;let U,F,H;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",F=(0,It.join)(e,z)}else(H=g.indexOf("/*"))>-1&&(F=g.slice(0,H+1),U=(0,It.relative)(e,F));let j=!1;if(cl.isMainThread&&f.setupDirectory&&(j=await f.setupDirectory?.(v,F,t)),t.isWorker&&f.handleDirectory&&(j=await f.handleDirectory?.(v,F,t)),j)continue;for(let z of await(0,HF.default)(g,{onlyFiles:!1,objectMode:!0})){let{path:J,dirent:Ae}=z;_=!0;let ue=(0,It.relative)(e,J).replace(/\\/g,"/");if(U)if(ue.startsWith(U))ue=ue.slice(U.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${ue}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Ee=v+(v.endsWith("/")?"":"/")+ue;try{if(Ae.isFile()){let Me=await Jle(J);cl.isMainThread&&await f.setupFile?.(Me,Ee,J,t),t.isWorker&&await f.handleFile?.(Me,Ee,J,t)}else cl.isMainThread&&await f.setupDirectory?.(Ee,J,t),t.isWorker&&await f.handleDirectory?.(Ee,J,t)}catch(Me){Me.message=`Could not load ${Ae.isFile()?"file":"directory"} '${J}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${Me.message}`,sd?.(Me),((0,ul.getWorkerIndex)()===0?console:nd.default).error(Me),t.set(d.path||"/",new id(Me)),ll.set(n?u:(0,It.basename)(e),Me.message)}}}}catch(h){h.message=`Could not load component '${u}' for application '${(0,It.basename)(e)}' due to: ${h.message}`,sd?.(h),((0,ul.getWorkerIndex)()===0?console:nd.default).error(h),t.set(d.path||"/",new id(h),null,!0),ll.set(n?u:(0,It.basename)(e),h.message)}}if(cl.isMainThread&&!FF&&i&&(0,ul.watchDir)(e,async()=>kF()),o.extensionModule)return await BE((0,It.join)(e,o.extensionModule));if(!_&&t.isWorker){let u=`${e} did not load any modules, resources, or files, is this a valid component?`;sd?.(new Error(u)),((0,ul.getWorkerIndex)()===0?console:nd.default).error(u),ll.set((0,It.basename)(e),u)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,sd?.(o),t.set("",new id(o))}}}var Es,It,cl,BF,GN,xN,HF,ul,nd,qF,GF,zle,xF,Jle,vN,HN,FF,BN,ll,Xle,qN,UF,vF,sd,id,Xh=Ne(()=>{Es=require("fs"),It=require("path"),cl=require("worker_threads"),BF=require("yaml"),GN=q(X()),xN=q(C());lU();fU();EU();nG();Vx();zx();HF=q(require("fast-glob")),ul=q(tt()),nd=q(x());tR();mr();qF=q(ie());Qn();ge();zp();GF=q(X()),zle=q(tF());kh();lF();MF();xF=q(Et());vp();({readFile:Jle}=Es.promises),vN=GN.get(xN.CONFIG_PARAMS.COMPONENTSROOT),HN=new Map,ll=new Map;a(kF,"loadComponentDirectories");Xle={REST:dp,rest:dp,graphqlSchema:eR,jsResource:nR,fastifyRoutes:lN,login:iR,static:uN,operationsApi:zle,customFunctions:{},http:{},clustering:gN,authentication:w_,mqtt:UN},qN={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(qN,"static",{value:{files:"web/**"}});UF=[],vF=new Map;a(Zle,"setErrorReporter");a(jp,"loadComponent");id=class extends jt{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var Vp=T((uye,VF)=>{var{isMainThread:$F}=require("worker_threads"),{getTables:eue}=(ge(),oe(Fe)),{loadComponentDirectories:tue,loadComponent:rue}=(Xh(),oe(Jh)),{resetResources:nue}=(zl(),oe(GI)),sue=zA(),iue=Et(),{dirname:oue}=require("path"),{getConnection:aue}=ht(),cue=X(),lue=C(),kN=new Map;async function uue(e=!1){!$F&&cue.get(lue.CONFIG_PARAMS.CLUSTERING_ENABLED)&&aue();try{$F&&await sue()}catch(n){console.error(n)}let t=nue();eue(),t.isWorker=e,await rue(oue(iue.getConfigFilePath()),t,"hdb",!0,kN),await tue(kN,t);let r=[];for(let[n]of kN)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(uue,"loadRootComponents");VF.exports.loadRootComponents=uue});var tt=T((dye,Ao)=>{"use strict";var{Worker:_ue,MessageChannel:due,parentPort:ks,isMainThread:WN,threadId:fue,workerData:Ii}=require("worker_threads"),{PACKAGE_ROOT:Eue}=C(),{join:QF,isAbsolute:hue,extname:pue}=require("path"),{server:jF}=(mr(),oe(Ho)),{watch:mue,readdir:Sue}=require("fs/promises"),{totalmem:YF}=require("os"),od=C(),zF=X(),wi=x(),{randomBytes:Tue}=require("crypto"),{_assignPackageExport:gue}=require("../index"),Rue=C(),KF=1024*1024,Ro=[],Fn=[],Aue=50,QN=1e4,Oue="restart",JF="request_thread_info",XF="resource_report",ZF="thread_info",ek="added-port",Nue="ack",$N;gue("threads",Fn);Ao.exports={startWorker:VN,restartWorkers:zN,shutdownWorkers:Cue,workers:Ro,setMonitorListener:Hue,onMessageFromWorkers:Lue,onMessageByType:ak,broadcast:Pue,broadcastWithAcknowledgement:Uue,setChildListenerByType:wue,getWorkerIndex:tk,getWorkerCount:rk,getTicketKeys:sk,setMainIsWorker:yue,setTerminateTimeout:bue,restartNumber:Ii?.restartNumber||1};Fn.onMessageByType=ak;Fn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Fn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var jN;function bue(e){QN=e}a(bue,"setTerminateTimeout");function tk(){return Ii?Ii.workerIndex:jN?0:void 0}a(tk,"getWorkerIndex");function rk(){return Ii?Ii.workerCount:jN?1:void 0}a(rk,"getWorkerCount");function yue(e){jN=e}a(yue,"setMainIsWorker");var nk=1,Jp;function sk(){return Jp||(Jp=WN?Tue(48):Ii.ticketKeys,Jp)}a(sk,"getTicketKeys");Object.defineProperty(jF,"workerIndex",{get(){return tk()}});Object.defineProperty(jF,"workerCount",{get(){return rk()}});var ik={[JF](e,t){vue(t)},[XF](e,t){Bue(t,e)}};function VN(e,t={}){let r=process.constrainedMemory?.()||YF();r=Math.min(r,YF(),2e4*KF);let n=zF.get(od.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/KF/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Fn){let _=new due;_.existingPort=l,i.push(_),o.push(_.port2)}pue(e)||(e+=".js");let c=new _ue(hue(e)?e:QF(Eue,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:nk=t.threadCount,name:t.name,restartNumber:Ao.exports.restartNumber,ticketKeys:sk()},transferList:o},t));for(let{port1:l,existingPort:_}of i)_.postMessage({type:ek,port:l,threadId:c.threadId},[l]);return Zp(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>VN(e,t),c.on("error",l=>{console.error("Worker error:",l),wi.error("Worker error:",l)}),c.on("exit",l=>{Ro.splice(Ro.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Aue?(t.unexpectedRestarts=c.unexpectedRestarts+1,VN(e,t)):wi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{ik[l.type]?.(l,c)}),Ro.push(c),Gue(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(VN,"startWorker");var Iue=[od.THREAD_TYPES.HTTP];async function zN(e=null,t=Math.max(nk>3,1),r=!0){if(WN){if(r){let{loadRootComponents:o}=Vp();await o()}Ao.exports.restartNumber++,t<1&&(t=t*Ro.length);let n=[],s=[];for(let o of Ro.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;wi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Ao.exports.restartNumber,type:od.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Iue.indexOf(o.name)>-1,l=new Promise(_=>{let u=setTimeout(()=>o.terminate(),QN*2).unref();o.on("exit",()=>{clearTimeout(u),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),_()})});if(n.push(l),c&&r){let _=o.startCopy(),u=new Promise(d=>{let f=a(E=>{E.type===Rue.ITC_EVENT_TYPES.CHILD_STARTED&&(wi.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(u)),_.off("message",f))},"startListener");wi.trace("Waiting for worker to start",_.threadId),_.on("message",f)});s.push(u),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=Na();r&&(e==="http"||!e)&&zF.get(od.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else ks.postMessage({type:Oue,workerType:e})}a(zN,"restartWorkers");function wue(e,t){ik[e]=t}a(wue,"setChildListenerByType");function Cue(e){return zN(e,1/0,!1)}a(Cue,"shutdownWorkers");var ok=[];function Lue(e){ok.push(e)}a(Lue,"onMessageFromWorkers");var YN=new Map;function ak(e,t){let r=YN.get(e);r||YN.set(e,r=[]),r.push(t)}a(ak,"onMessageByType");var Due=10;async function Pue(e){let t=0;for(let r of Fn)try{r.postMessage(e),t++>Due&&(t=0,await new Promise(setImmediate))}catch(n){wi.error("Unable to send message to worker",n)}}a(Pue,"broadcast");var Xp=new Map,Mue=1;function Uue(e){return new Promise(t=>{let r=0;for(let n of Fn)try{let s=Mue++,i=a(()=>{Xp.delete(s),--r===0&&t(),n!==ks&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Xp.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of Xp)o.port===n&&o()})),n.postMessage(e),r++}catch(s){wi.error("Unable to send message to worker",s)}r===0&&t()})}a(Uue,"broadcastWithAcknowledgement");function vue(e){e.postMessage({type:ZF,workers:ck()})}a(vue,"sendThreadInfo");function ck(){let e=Date.now();return Ro.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(ck,"getChildWorkerInfo");function Bue(e,t){e.resources=t,e.resources.updated=Date.now()}a(Bue,"recordResourceReport");var KN;function Hue(e){KN=e}a(Hue,"setMonitorListener");var que=1e3,WF=!1;function Gue(){WF||(WF=!0,setInterval(()=>{for(let e of Ro){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}KN&&KN()},que).unref())}a(Gue,"startMonitoring");var xue=1e3;if(ks){Zp(ks);for(let e=0,t=Ii.addPorts.length;e<t;e++){let r=Ii.addPorts[e];r.threadId=Ii.addThreadIds[e],Zp(r)}setInterval(()=>{let e=process.memoryUsage();ks.postMessage({type:XF,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},xue).unref(),$N=a(()=>new Promise((e,t)=>{ks.on("message",r),ks.postMessage({type:JF});function r(n){n.type===ZF&&(ks.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else $N=ck;Ao.exports.getThreadInfo=$N;function Zp(e,t){Fn.push(e),e.on("message",r=>{if(r.type===ek)r.port.threadId=r.threadId,Zp(r.port);else if(r.type===Nue){let n=Xp.get(r.id);n&&n()}else{for(let s of ok)s(r,e);let n=YN.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){wi.error(i)}}}).on("close",()=>{Fn.splice(Fn.indexOf(e),1)}).on("exit",()=>{Fn.splice(Fn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Zp,"addPort");if(WN){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await Sue(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(QF(n,i.name));try{for await(let{filename:i}of mue(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await zN(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");Ao.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else ks.on("message",async e=>{let{type:t}=e;t===od.ITC_EVENT_TYPES.SHUTDOWN&&(Ao.exports.restartNumber=e.restartNumber,ks.unref(),setTimeout(()=>{wi.warn("Thread did not voluntarily terminate",fue),process.exit(0)},QN).unref())})});var tb={};$e(tb,{startHTTPThreads:()=>kue,startSocketServer:()=>FN,updateWorkerIdleness:()=>hk});async function kue(e=2,t){if(t)XN(0,1,!0);else{let{loadRootComponents:n}=Vp();if(e===0)return(0,Oo.setMainIsWorker)(!0),await IN().startServers(),Promise.resolve([]);await n()}let r=(0,dk.checkMemoryLimit)();r&&!process.env.DEV_MODE&&(console.error(r),setInterval(()=>{nm.notify(r)},Fue).unref());for(let n=0;n<e;n++)XN(n,e);return Promise.all(Ek)}function XN(e,t=1,r){if(JN++,(0,Oo.startWorker)("server/threads/threadServer.js",{name:rm.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(_){_.type===rm.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});Ek.push(s),await s,_l.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=tm.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=_l.indexOf(n);o>-1&&_l.splice(o,1)}if(a(i,"removeWorker"),dl){let o=dl;dl=[];for(let c of o)fk[c.localPort](null,c)}}}),r){let n=setInterval(()=>{ZN?ZN=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Oo.shutdownWorkers)(),JN=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function FN(e=0,t){if(typeof e=="string")try{(0,sm.existsSync)(e)&&(0,sm.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=$ue:r=Vue(t):r=eb;let n=(0,fl.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=fk[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),ZN=!0,r(o,(c,l)=>{if(!c){if(lk){let u=o._socket||new fl.Socket({handle:o,writable:!0,readable:!0});lk.deliverSocket(u,e,l),u.resume()}else JN>0?(dl.length===0&&setTimeout(()=>{dl.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,dl.push(o)):(console.log("start up a dynamic thread to handle request"),XN(0));on(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:l});else{let u=o._socket||new fl.Socket({handle:o,writable:!0,readable:!0});Wue(u,c,e)}on(!0,"socket-routed")})};let s=Bo();nm.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 eb(e,t){let r,n=0;for(let s of _l){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=em)return em=i,t(r);n=i}em=0,t(r)}function $ue(e,t){let r={};e.getpeername(r);let n=r.address,s=El.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);eb(e,o=>{El.set(n,{worker:o,lastUsed:i}),t(o)})}function Vue(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new fl.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],_=El.get(l),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,s(_.worker);eb(n,d=>{El.set(l,{worker:d,lastUsed:u}),s(d,o)})})}a(r,"findByHeaderAffinity")}function hk(){em=0;for(let e of _l)e.expectedIdle=e.recentELU.idle+Yue,e.requests=1;_l.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Wue(e,t,r){let n=Kue++;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(),tm.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")),tm.delete(n)),s.event=="destroy"&&(e.destroy(),tm.delete(n))})}var Oo,fl,rm,nm,sm,_k,dk,_l,dl,fk,lk,JN,Ek,Fue,ZN,em,uk,El,Yue,tm,Kue,zp=Ne(()=>{Oo=q(tt()),fl=require("net"),rm=q(C()),nm=q(x()),sm=require("fs");ui();_k=require("worker_threads"),dk=q(ia()),_l=[],dl=[],fk=[],JN=0,Ek=[];_k.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});Fue=6e5;a(kue,"startHTTPThreads");a(XN,"startHTTPWorker");a(FN,"startSocketServer");em=0;a(eb,"findMostIdleWorker");uk=36e5,El=new Map;a($ue,"findByRemoteAddressAffinity");a(Vue,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of El)r.lastUsed+uk<e&&El.delete(t)},uk).unref();Yue=1e3;a(hk,"updateWorkerIdleness");(0,Oo.setMonitorListener)(hk);tm=new Map,Kue=1;a(Wue,"proxySocket")});var Sk=T((pye,mk)=>{"use strict";var om=X();om.initSync();var im=C(),{httpRequest:Que}=K(),jue=require("path"),pk=require("fs-extra"),zue=require("yaml"),Jue={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};mk.exports={cliOperations:Zue,buildRequest:Xue};function Xue(){let e={};for(let t of process.argv){if(Jue[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(Xue,"buildRequest");async function Zue(e){await pk.exists(jue.join(om.get(im.CONFIG_PARAMS.ROOTPATH),im.HDB_PID_FILE))||(console.error("HarperDB must be running to perform this operation"),process.exit()),await pk.exists(om.get(im.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))||(console.error("No domain socket found, unable to perform this operation"),process.exit());try{let t=await Que({method:"POST",protocol:"http:",socketPath:om.get(im.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(zue.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(Zue,"cliOperations")});var nb=T((Sye,Tk)=>{"use strict";var ad=X();ad.initSync();var hl=require("fs-extra"),rb=require("path"),pl=C(),e_e=require("crypto"),t_e=require("uuid").v4;Tk.exports=r_e;function r_e(){if(ad.getHdbBasePath()!==void 0){let e=rb.join(ad.getHdbBasePath(),pl.LICENSE_KEY_DIR_NAME,pl.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=rb.join(ad.getHdbBasePath(),pl.LICENSE_KEY_DIR_NAME,pl.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=rb.join(ad.getHdbBasePath(),pl.LICENSE_KEY_DIR_NAME,pl.JWT_ENUM.JWT_PASSPHRASE_NAME);try{hl.accessSync(r),hl.accessSync(e),hl.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=t_e(),i=e_e.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});hl.writeFileSync(r,s),hl.writeFileSync(e,i.privateKey),hl.writeFileSync(t,i.publicKey)}else throw n}}}a(r_e,"checkJWTTokenExist")});var Rk=T((gye,gk)=>{"use strict";var sb=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};gk.exports={HdbInfoInsertObject:sb}});var Nk=T((Aye,Ok)=>{"use strict";var Ak=C(),ib=class{static{a(this,"UpgradeObject")}constructor(t,r){this[Ak.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[Ak.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};Ok.exports={UpgradeObject:ib}});var am=T((Nye,yk)=>{"use strict";var kn=require("prompt"),ml=require("chalk"),bk=x(),hs=require("os"),ob=Uo(),ab=["yes","y"];async function n_e(e){let t=`${hs.EOL}`+ml.bold.green("Your current HarperDB version requires that we complete an update process.")+`${hs.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${hs.EOL}${hs.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${hs.EOL}`;kn.override=ob(["CONFIRM_UPGRADE"]),kn.start(),kn.message=t;let r={properties:{CONFIRM_UPGRADE:{description:ml.magenta(`${hs.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 kn.get([r])}catch(s){return bk.error("There was an error when prompting user about an upgrade."),bk.error(s),!1}return ab.includes(n.CONFIRM_UPGRADE)}a(n_e,"forceUpdatePrompt");async function s_e(e){let t=`${hs.EOL}`+ml.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.${hs.EOL}`);kn.override=ob(["CONFIRM_DOWNGRADE"]),kn.start(),kn.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:ml.magenta(`${hs.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 kn.get([r]);return ab.includes(n.CONFIRM_DOWNGRADE)}a(s_e,"forceDowngradePrompt");async function i_e(){let e=`${hs.EOL}`+ml.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");kn.override=ob(["GENERATE_CERTS"]),kn.start(),kn.message=e;let t={properties:{GENERATE_CERTS:{description:ml.magenta(`${hs.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 kn.get([t]);return ab.includes(r.GENERATE_CERTS)}a(i_e,"upgradeCertsPrompt");yk.exports={forceUpdatePrompt:n_e,forceDowngradePrompt:s_e,upgradeCertsPrompt:i_e}});var lb=T((yye,Ik)=>{"use strict";var cb=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};Ik.exports=cb});var Ck=T((Pye,wk)=>{"use strict";var o_e=K(),a_e=Et(),wye=x(),Cye=require("path"),Lye=require("fs"),Dye=C();wk.exports={getOldPropsValue:c_e};function c_e(e,t,r=!1){let n=t.getRaw(e);return o_e.isNotEmptyAndHasValue(n)?n:r?a_e.getDefaultConfig(e):""}a(c_e,"getOldPropsValue")});var Mk=T((Uye,Pk)=>{"use strict";var No=require("path"),bo=require("fs-extra"),l_e=require("properties-reader"),u_e=lb(),wt=x(),{getOldPropsValue:We}=Ck(),{HDB_SETTINGS_NAMES:se,CONFIG_PARAMS:qa}=C(),Ga=Et(),cm=X(),Lk=K(),$s=C(),ub=new u_e("3.1.0"),Dk=[];function __e(){let e=l_e(cm.get(se.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),wt.info(t);let r=` ;Settings for the HarperDB process.
32
32
 
33
33
  ;The directory selected during install where the database files reside.
34
- ${ne.HDB_ROOT_KEY} = ${We(ne.HDB_ROOT_KEY,e)}
34
+ ${se.HDB_ROOT_KEY} = ${We(se.HDB_ROOT_KEY,e)}
35
35
  ;The port the HarperDB REST interface will listen on.
36
- ${ne.SERVER_PORT_KEY} = ${We(ne.SERVER_PORT_KEY,e)}
36
+ ${se.SERVER_PORT_KEY} = ${We(se.SERVER_PORT_KEY,e)}
37
37
  ;Set to true to enable HTTPS on the HarperDB REST endpoint. Requires a valid certificate and key.
38
- ${ne.HTTP_SECURE_ENABLED_KEY} = ${We(ne.HTTP_SECURE_ENABLED_KEY,e)}
38
+ ${se.HTTP_SECURE_ENABLED_KEY} = ${We(se.HTTP_SECURE_ENABLED_KEY,e)}
39
39
  ;The path to the SSL certificate used when running with HTTPS enabled.
40
- ${ne.CERT_KEY} = ${We(ne.CERT_KEY,e)}
40
+ ${se.CERT_KEY} = ${We(se.CERT_KEY,e)}
41
41
  ;The path to the SSL private key used when running with HTTPS enabled.
42
- ${ne.PRIVATE_KEY_KEY} = ${We(ne.PRIVATE_KEY_KEY,e)}
42
+ ${se.PRIVATE_KEY_KEY} = ${We(se.PRIVATE_KEY_KEY,e)}
43
43
  ;Set to true to enable Cross Origin Resource Sharing, which allows requests across a domain.
44
- ${ne.CORS_ENABLED_KEY} = ${We(ne.CORS_ENABLED_KEY,e)}
44
+ ${se.CORS_ENABLED_KEY} = ${We(se.CORS_ENABLED_KEY,e)}
45
45
  ;Allows for setting allowable domains with CORS. Comma separated list.
46
- ${ne.CORS_WHITELIST_KEY} = ${We(ne.CORS_WHITELIST_KEY,e)}
46
+ ${se.CORS_WHITELIST_KEY} = ${We(se.CORS_WHITELIST_KEY,e)}
47
47
  ;Length of time in milliseconds after which a request will timeout. Defaults to 120,000 ms (2 minutes).
48
- ${ne.SERVER_TIMEOUT_KEY} = ${We(ne.SERVER_TIMEOUT_KEY,e,!0)}
48
+ ${se.SERVER_TIMEOUT_KEY} = ${We(se.SERVER_TIMEOUT_KEY,e,!0)}
49
49
  ;The number of milliseconds of inactivity a server needs to wait for additional incoming data, after it has finished writing the last response. Defaults to 5,000 ms (5 seconds).
50
- ${ne.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${We(ne.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
50
+ ${se.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${We(se.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
51
51
  ;Limit the amount of time the parser will wait to receive the complete HTTP headers.. Defaults to 60,000 ms (1 minute).
52
- ${ne.SERVER_HEADERS_TIMEOUT_KEY} = ${We(ne.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
52
+ ${se.SERVER_HEADERS_TIMEOUT_KEY} = ${We(se.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
53
53
  ;Define whether to log to file or not.
54
- ${ne.LOG_TO_FILE} = ${Ga.getDefaultConfig(xa.LOGGING_FILE)}
54
+ ${se.LOG_TO_FILE} = ${Ga.getDefaultConfig(qa.LOGGING_FILE)}
55
55
  ;Define whether to log to stdout/stderr or not. NOTE HarperDB must run in foreground in order to receive the std stream from HarperDB.
56
- ${ne.LOG_TO_STDSTREAMS} = ${Ga.getDefaultConfig(xa.LOGGING_STDSTREAMS)}
56
+ ${se.LOG_TO_STDSTREAMS} = ${Ga.getDefaultConfig(qa.LOGGING_STDSTREAMS)}
57
57
  ;Set to control amount of logging generated. Accepted levels are trace, debug, warn, error, fatal.
58
- ${ne.LOG_LEVEL_KEY} = ${We(ne.LOG_LEVEL_KEY,e)}
58
+ ${se.LOG_LEVEL_KEY} = ${We(se.LOG_LEVEL_KEY,e)}
59
59
  ;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'
60
- ${ne.LOG_PATH_KEY} = ${We(ne.LOG_PATH_KEY,e)}
60
+ ${se.LOG_PATH_KEY} = ${We(se.LOG_PATH_KEY,e)}
61
61
  ;Set to true to enable daily log file rotations - each log file name will be prepended with YYYY-MM-DD.
62
- ${ne.LOG_DAILY_ROTATE_KEY} = ${We(ne.LOG_DAILY_ROTATE_KEY,e)}
62
+ ${se.LOG_DAILY_ROTATE_KEY} = ${We(se.LOG_DAILY_ROTATE_KEY,e)}
63
63
  ;Set the number of daily log files to maintain when LOG_DAILY_ROTATE is enabled. If no integer value is set, no limit will be set for
64
64
  ;daily log files which may consume a large amount of storage depending on your log settings.
65
- ${ne.LOG_MAX_DAILY_FILES_KEY} = ${We(ne.LOG_MAX_DAILY_FILES_KEY,e)}
65
+ ${se.LOG_MAX_DAILY_FILES_KEY} = ${We(se.LOG_MAX_DAILY_FILES_KEY,e)}
66
66
  ;The environment used by NodeJS. Setting to production will be the most performant, settings to development will generate more logging.
67
- ${ne.PROPS_ENV_KEY} = ${We(ne.PROPS_ENV_KEY,e)}
67
+ ${se.PROPS_ENV_KEY} = ${We(se.PROPS_ENV_KEY,e)}
68
68
  ;This allows self signed certificates to be used in clustering. This is a security risk
69
69
  ;as clustering will not validate the cert, so should only be used internally.
70
70
  ;The HDB install creates a self signed certificate, if you use that cert this must be set to true.
71
- ${ne.ALLOW_SELF_SIGNED_SSL_CERTS} = ${We(ne.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
71
+ ${se.ALLOW_SELF_SIGNED_SSL_CERTS} = ${We(se.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
72
72
  ;Set the max number of processes HarperDB will start. This can also be limited by number of cores and licenses.
73
- ${ne.MAX_HDB_PROCESSES} = ${We(ne.MAX_HDB_PROCESSES,e)}
73
+ ${se.MAX_HDB_PROCESSES} = ${We(se.MAX_HDB_PROCESSES,e)}
74
74
  ;Set to true to enable clustering. Requires a valid enterprise license.
75
- ${ne.CLUSTERING_ENABLED_KEY} = ${We(ne.CLUSTERING_ENABLED_KEY,e,!0)}
75
+ ${se.CLUSTERING_ENABLED_KEY} = ${We(se.CLUSTERING_ENABLED_KEY,e,!0)}
76
76
  ;The port that will be used for HarperDB clustering.
77
- ${ne.CLUSTERING_PORT_KEY} = ${We(ne.CLUSTERING_PORT_KEY,e)}
77
+ ${se.CLUSTERING_PORT_KEY} = ${We(se.CLUSTERING_PORT_KEY,e)}
78
78
  ;The name of this node in your HarperDB cluster topology. This must be a value unique from the rest of your cluster node names.
79
- ${ne.CLUSTERING_NODE_NAME_KEY} = ${We(ne.CLUSTERING_NODE_NAME_KEY,e)}
79
+ ${se.CLUSTERING_NODE_NAME_KEY} = ${We(se.CLUSTERING_NODE_NAME_KEY,e)}
80
80
  ;The user used to connect to other instances of HarperDB, this user must have a role of cluster_user.
81
- ${ne.CLUSTERING_USER_KEY} = ${We(ne.CLUSTERING_USER_KEY,e)}
81
+ ${se.CLUSTERING_USER_KEY} = ${We(se.CLUSTERING_USER_KEY,e)}
82
82
  ;Defines if this instance does not record transactions. Note, if Clustering is enabled and Transaction Log is disabled your nodes will not catch up.
83
- ${ne.DISABLE_TRANSACTION_LOG_KEY} = ${We(ne.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
83
+ ${se.DISABLE_TRANSACTION_LOG_KEY} = ${We(se.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
84
84
  ;Defines the length of time an operation token will be valid until it expires. Example values: https://github.com/vercel/ms
85
- ${ne.OPERATION_TOKEN_TIMEOUT_KEY} = ${We(ne.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
85
+ ${se.OPERATION_TOKEN_TIMEOUT_KEY} = ${We(se.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
86
86
  ;Defines the length of time a refresh token will be valid until it expires. Example values: https://github.com/vercel/ms
87
- ${ne.REFRESH_TOKEN_TIMEOUT_KEY} = ${We(ne.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
87
+ ${se.REFRESH_TOKEN_TIMEOUT_KEY} = ${We(se.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
88
88
  ;The port the IPC server will run on.
89
- ${ne.IPC_SERVER_PORT} = ${Ga.getDefaultConfig(xa.IPC_NETWORK_PORT)}
89
+ ${se.IPC_SERVER_PORT} = ${Ga.getDefaultConfig(qa.IPC_NETWORK_PORT)}
90
90
  ;Run HDB in the foreground.
91
- ${ne.RUN_IN_FOREGROUND} = ${Ga.getDefaultConfig(xa.OPERATIONSAPI_FOREGROUND)}
91
+ ${se.RUN_IN_FOREGROUND} = ${Ga.getDefaultConfig(qa.OPERATIONSAPI_FOREGROUND)}
92
92
  ;Set to true to enable custom API endpoints. Requires a valid enterprise license.
93
- ${ne.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${Ga.getDefaultConfig(xa.CUSTOMFUNCTIONS_ENABLED)}
93
+ ${se.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${Ga.getDefaultConfig(qa.CUSTOMFUNCTIONS_ENABLED)}
94
94
  ;The port used to access the custom functions server.
95
- ${ne.CUSTOM_FUNCTIONS_PORT_KEY} = ${Ga.getDefaultConfig(xa.HTTP_PORT)}
95
+ ${se.CUSTOM_FUNCTIONS_PORT_KEY} = ${Ga.getDefaultConfig(qa.HTTP_PORT)}
96
96
  ;The path to the folder containing HarperDB custom function files.
97
- ${ne.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${bo.join(We(ne.HDB_ROOT_KEY,e),"custom_functions")}
97
+ ${se.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${No.join(We(se.HDB_ROOT_KEY,e),"custom_functions")}
98
98
  ;Set the max number of processes HarperDB will start for the Custom Functions server
99
- ${ne.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Ga.getDefaultConfig(xa.HTTP_THREADS)}
100
- `,n=Zp.get("settings_path"),s=bo.dirname(n),i=bo.join(s,"3_1_0_upgrade_settings.bak");try{Ct.info(`Backing up old settings file to: ${i}`),yo.copySync(n,i)}catch(c){throw Ct.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Ct.info("New settings file values for 3.1.0 upgrade:",r),Ct.info(`Creating new/upgraded settings file at '${n}'`),yo.writeFileSync(n,r),Ct.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),Ct.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Ct.error(c),yo.copySync(i,n),c}Zp.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),Ct.info(o),o}a(i_e,"updateSettingsFile_3_1_0");function o_e(){let e=bo.join(Ok.getHomeDir(),$s.HDB_HOME_DIR_NAME,$s.LICENSE_KEY_DIR_NAME,$s.LICENSE_FILE_NAME),t=bo.join(Ok.getHomeDir(),$s.HDB_HOME_DIR_NAME,$s.LICENSE_KEY_DIR_NAME,$s.REG_KEY_FILE_NAME),r=bo.join(Zp.getHdbBasePath(),$s.LICENSE_KEY_DIR_NAME,$s.LICENSE_FILE_NAME),n=bo.join(r,$s.LICENSE_FILE_NAME),s=bo.join(r,$s.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Ct.info(i);let o="Creating .license directory";console.log(o),Ct.info(o),yo.mkdirpSync(r);try{yo.accessSync(e);try{let c="Moving licence file";console.log(c),Ct.info(c),yo.moveSync(e,n);let l="License file successfully moved.";console.log(l),Ct.info(l)}catch{let l="moving license file failed";console.error(l),Ct.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Ct.warn(l)}try{yo.accessSync(t);try{let c="Moving registration file";console.log(c),Ct.info(c),yo.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Ct.info(l)}catch{let l="moving registration file failed";console.error(l),Ct.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Ct.warn(l)}}a(o_e,"moveLicenseFiles");eb.sync_functions.push(i_e);eb.sync_functions.push(o_e);Nk.push(eb);bk.exports=Nk});var Dk=g((wye,Lk)=>{"use strict";var pn=Ve(),{insertRecords:a_e}=Ko(),c_e=pr(),Io=dt(),l_e=Q(),Ci=G(),u_e=Q(),Vs=require("fs-extra"),Li=require("path"),__e=require("cli-progress"),ad=require("assert"),d_e=require("pino"),f_e=J();Lk.exports=E_e;var em,Ik,tm,tb,lr,cd=!1;async function E_e(e=!0){return em=f_e.getHdbBasePath(),Ik=Li.join(em,"schema"),tm=Li.join(em,"4_0_0_upgrade_tmp"),tb=Li.join(em,"transactions"),console.info("Reindexing upgrade started for schemas"),Ci.notify("Reindexing upgrade started for schemas"),await wk(Ik,!1,e),await Vs.pathExists(tb)&&(console.info(`
99
+ ${se.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Ga.getDefaultConfig(qa.HTTP_THREADS)}
100
+ `,n=cm.get("settings_path"),s=No.dirname(n),i=No.join(s,"3_1_0_upgrade_settings.bak");try{wt.info(`Backing up old settings file to: ${i}`),bo.copySync(n,i)}catch(c){throw wt.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{wt.info("New settings file values for 3.1.0 upgrade:",r),wt.info(`Creating new/upgraded settings file at '${n}'`),bo.writeFileSync(n,r),wt.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."),wt.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),wt.error(c),bo.copySync(i,n),c}cm.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),wt.info(o),o}a(__e,"updateSettingsFile_3_1_0");function d_e(){let e=No.join(Lk.getHomeDir(),$s.HDB_HOME_DIR_NAME,$s.LICENSE_KEY_DIR_NAME,$s.LICENSE_FILE_NAME),t=No.join(Lk.getHomeDir(),$s.HDB_HOME_DIR_NAME,$s.LICENSE_KEY_DIR_NAME,$s.REG_KEY_FILE_NAME),r=No.join(cm.getHdbBasePath(),$s.LICENSE_KEY_DIR_NAME,$s.LICENSE_FILE_NAME),n=No.join(r,$s.LICENSE_FILE_NAME),s=No.join(r,$s.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),wt.info(i);let o="Creating .license directory";console.log(o),wt.info(o),bo.mkdirpSync(r);try{bo.accessSync(e);try{let c="Moving licence file";console.log(c),wt.info(c),bo.moveSync(e,n);let l="License file successfully moved.";console.log(l),wt.info(l)}catch{let l="moving license file failed";console.error(l),wt.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),wt.warn(l)}try{bo.accessSync(t);try{let c="Moving registration file";console.log(c),wt.info(c),bo.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),wt.info(l)}catch{let l="moving registration file failed";console.error(l),wt.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),wt.warn(l)}}a(d_e,"moveLicenseFiles");ub.sync_functions.push(__e);ub.sync_functions.push(d_e);Dk.push(ub);Pk.exports=Dk});var qk=T((Bye,Hk)=>{"use strict";var Sn=Ve(),{insertRecords:f_e}=Yo(),E_e=Tr(),yo=_t(),h_e=K(),Ci=x(),p_e=K(),Vs=require("fs-extra"),Li=require("path"),m_e=require("cli-progress"),cd=require("assert"),S_e=require("pino"),T_e=X();Hk.exports=g_e;var lm,Uk,um,_b,dr,ld=!1;async function g_e(e=!0){return lm=T_e.getHdbBasePath(),Uk=Li.join(lm,"schema"),um=Li.join(lm,"4_0_0_upgrade_tmp"),_b=Li.join(lm,"transactions"),console.info("Reindexing upgrade started for schemas"),Ci.notify("Reindexing upgrade started for schemas"),await vk(Uk,!1,e),await Vs.pathExists(_b)&&(console.info(`
101
101
 
102
- Reindexing upgrade started for transaction logs`),Ci.notify("Reindexing upgrade started for transaction logs"),await wk(tb,!0,e)),Ci.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(cd?", but errors occurred":"")}a(E_e,"reindexUpgrade");async function wk(e,t,r){let n=await Vs.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=Li.join(e,o.toString());if(o===".DS_Store")continue;let l=await Vs.readdir(c),_=l.length;for(let u=0;u<_;u++){let d=l[u];if(d!==".DS_Store"&&Vs.statSync(Li.join(c,d)).isDirectory())try{await h_e(o,d,t),lr.info(`Reindexing started for ${o}.${d}`),Ci.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await m_e(o,d,c,t,r),lr.info(`Reindexing completed for ${o}.${d}`),Ci.notify(`Reindexing completed for ${o}.${d}`)}catch(f){cd=!0,f.schema_path=c,f.table_name=d,Ci.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Ci.error(f),lr.error(f),console.error(f)}}}if(!cd)try{await Vs.rm(tm,{recursive:!0})}catch{}}a(wk,"processTables");async function h_e(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Li.join(tm,s);await Vs.ensureDir(tm),await Vs.writeFile(i,""),lr=d_e({level:"debug",formatters:{bindings(){}}},i)}a(h_e,"initPinoLogger");var p_e=20;async function m_e(e,t,r,n,s){let i;try{i=await pn.openEnvironment(r,t,n)}catch(T){if(T.message==="MDB_INVALID: File is not an LMDB file"){Ci.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`),lr.error(T);return}throw T}let o=g_e(i.dbis),c=pn.openDBI(i,o),l=Object.keys(i.dbis),_=pn.statDBI(i,o);lr.info(`Old environment stats: ${JSON.stringify(_)}`);let u=new __e.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});u.start(_.entryCount,0,{});let d=await pn.createEnvironment(r,t,!1);pn.createDBI(d,o,!1,!0);let f=[];try{for(let T of c.getRange({start:!1}))T.value=Object.assign({},T.value),f.push(T),n||e==="system"&&(t==="hdb_schema"&&(T.key=T.key.toString(),T.value.name=T.value.name.toString()),t==="hdb_table"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.name=T.value.name.toString()),t==="hdb_attribute"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.table=T.value.table.toString(),T.value.attribute=T.value.attribute.toString())),f.length>p_e&&await E();await E()}catch(T){throw cd=!0,lr.error(T),T}async function E(){let T,R=f.map(({value:B})=>B);n?T=await Promise.all(R.map(B=>S_e(d,B))):T=await a_e(d,o,l.filter(B=>B!=="__blob__"),R,!1);for(let B=0,v=f.length;B<v;B++){let{key:P,value:K}=f[B];lr.info(`Record hash value: ${P} hash: ${o}`);let V;n?V=T[B]:V=T.written_hashes.indexOf(P)>-1,ad(V,!0),T_e(d,o,K[o],n),lr.info(`Insert success, written hashes: ${T.written_hashes}`),u.increment()}f=[],u.value/u.total*100%10===0&&Ci.notify(`${e}.${t} ${u.value}/${u.total} records inserted`),lr.info(`${u.value}/${u.total} records inserted`)}a(E,"finishOutstanding"),u.stop();let h=pn.statDBI(i,o),m=pn.statDBI(d,o);if(lr.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${m.entryCount}`),ad.deepStrictEqual(h.entryCount,m.entryCount),await pn.closeEnvironment(i),await pn.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let T=Li.join(r,t),R=Li.join(T,"data.mdb"),U=Li.join(T,"lock.mdb");await Vs.unlink(R),await Vs.unlink(U),await Vs.rmdir(T),lr.info(`Deleted old environment files from schema folder: ${R}, ${U}`)}let S=await pn.openEnvironment(r,t),A=pn.statDBI(S,o);lr.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify(A)}`),ad.deepStrictEqual(A.entryCount,m.entryCount),await pn.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(m_e,"processTable");async function S_e(e,t){pn.initializeDBIs(e,Io.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Io.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Io.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Io.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),u_e.isEmpty(t.user_name)||e.dbis[Io.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Io.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(S_e,"insertTransaction");function T_e(e,t,r,n){let i=e.dbis[t].get(r);ad.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Io.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Io.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&&!l_e.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let _=0,u=l.length;_<u;_++){let d=l[_];Ck(e,c,d,r)}else Ck(e,c,l,r)}a(T_e,"validateIndices");function Ck(e,t,r,n){try{let s=!1,i=c_e.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||lr.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),ad.deepStrictEqual(s,!0)}catch(s){cd=!0,lr.error(s),console.error(s)}}a(Ck,"validateIndex");function g_e(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(g_e,"getHashDBI")});var nm=g((Lye,Mk)=>{"use strict";var R_e=require("mkcert"),rm=require("path"),rb=require("fs-extra"),nb=G(),A_e=J(),sb=C(),Sl=ag(),O_e=vo(),N_e=ht();Mk.exports={generateKeys:b_e,updateConfigCert:Pk};async function b_e(){let e=A_e.getHdbBasePath(),t=rm.join(e,sb.LICENSE_KEY_DIR_NAME),r=await R_e.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:3650,caKey:Sl.CERTIFICATE_VALUES.key,caCert:Sl.CERTIFICATE_VALUES.cert}),n=rm.join(t,Sl.CERTIFICATE_PEM_NAME),s=rm.join(t,Sl.PRIVATEKEY_PEM_NAME),i=rm.join(t,Sl.CA_PEM_NAME);try{await rb.writeFile(n,r.cert)}catch(o){throw nb.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await rb.writeFile(s,r.key)}catch(o){throw nb.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await rb.writeFile(i,Sl.CERTIFICATE_VALUES.cert)}catch(o){throw nb.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}Pk(n,s,i)}a(b_e,"generateKeys");function Pk(e,t,r){let n=O_e(Object.keys(sb.CONFIG_PARAM_MAP),!0),s=sb.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()]),N_e.updateConfigValue(void 0,void 0,i,!1,!0)}a(Pk,"updateConfigCert")});var qk=g((Mye,Hk)=>{"use strict";var sm=require("path"),wo=require("fs-extra"),y_e=ZN(),Fa=G(),Uk=ht(),ib=J(),ds=C(),im=Q(),I_e=require("properties-reader"),w_e=Xn(),C_e=KE(),L_e=Ar(),Pye=require("util"),D_e=L_e.searchByValue,P_e=Or(),M_e=dh(),U_e=tt(),v_e=Dk(),vk=nm(),B_e=Xp(),_d=new y_e("4.0.0"),Bk=[],ld,ud;async function H_e(){try{if(await B_e.upgradeCertsPrompt()){if(console.log("Generating new certificates."),ld){let t=im.changeExtension(ld,".bak");await wo.move(ld,t)}if(ud){let t=im.changeExtension(ud,".bak");await wo.move(ud,t)}await vk.generateKeys()}else console.log("Using existing certificates."),vk.updateConfigCert(ld,ud,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(H_e,"generateNewKeys");async function q_e(){console.log("Updating HarperDB nodes."),Fa.info("Updating HarperDB nodes.");let e=[];try{let t=new w_e(ds.SYSTEM_SCHEMA_NAME,ds.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await D_e(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!U_e.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let u=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(u),u}let l={host:c.host,port:c.port};e.push(l);let _=[];for(let u=0,d=c.subscriptions.length;u<d;u++){let f=c.subscriptions[u],E=f.channel.split(":");_.push({schema:E[0],table:E[1],publish:f.publish,subscribe:f.subscribe})}n.push({name:c.name,subscriptions:_,system_info:{hdb_version:ds.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(im.isEmptyOrZeroLength(n))return;let s=new C_e(ds.SYSTEM_SCHEMA_NAME,ds.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await P_e.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{M_e.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(q_e,"updateNodes");async function x_e(){let e=ib.get(ds.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(sm.join("config","settings.js"))){Fa.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),Fa.info(t);let r=sm.dirname(e),n=ib.get(ds.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=sm.join(n,"backup","4_0_0_upgrade_settings.bak"),i=sm.join(n,ds.HDB_CONFIG_FILE);try{Fa.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),wo.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{Fa.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),Fa.info("Updating env variables with new settings values");let d=Uk.initOldConfig(e);ld=d[ds.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],ud=d[ds.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],Uk.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=im.getPropsFilePath();wo.accessSync(o,wo.constants.F_OK|wo.constants.R_OK);let l=I_e(o).get(ds.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
103
- install_user = ${l}`;try{wo.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{ib.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{wo.removeSync(r),console.log(u),Fa.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(x_e,"updateSettingsFile_4_0_0");_d.async_functions.push(x_e);_d.async_functions.push(H_e);_d.async_functions.push(v_e);_d.async_functions.push(q_e);Bk.push(_d);Hk.exports=Bk});var ob=g((vye,kk)=>{"use strict";var ka=Q(),G_e=C(),xk=G(),{DATA_VERSION:F_e,UPGRADE_VERSION:k_e}=G_e.UPGRADE_JSON_FIELD_NAMES_ENUM,Gk=yk(),om=qk(),$a=new Map;Gk&&Gk.forEach(e=>{$a.set(e.version,e)});om&&om.forEach(e=>{$a.set(e.version,e)});om&&om.forEach(e=>{$a.set(e.version,e)});function $_e(){return[...$a.keys()].sort(ka.compareVersions)}a($_e,"getSortedVersions");function Fk(e){let t=e[F_e],r=e[k_e];return ka.isEmptyOrZeroLength(t)||ka.isEmptyOrZeroLength(r)?(xk.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),xk.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."),[]):[...$a.keys()].sort(ka.compareVersions).filter(function(n){return ka.compareVersions(n,t)>0&&ka.compareVersions(n,r)<=0})}a(Fk,"getVersionsForUpgrade");function V_e(e){return Fk(e).length>0}a(V_e,"hasUpgradesRequired");function Y_e(e){return ka.isEmptyOrZeroLength(e)?null:$a.has(e)?$a.get(e):null}a(Y_e,"getDirectiveByVersion");kk.exports={getSortedVersions:$_e,getDirectiveByVersion:Y_e,getVersionsForUpgrade:Fk,hasUpgradesRequired:V_e}});var am=g((Hye,Wk)=>{"use strict";var K_e=require("util"),ab=require("chalk"),W_e=require("os"),Vk=Or(),Q_e=Ar(),mn=C(),Yk=Ek(),lb=tg(),{UpgradeObject:$k}=mk(),{forceDowngradePrompt:j_e}=Xp(),z_e=Fi(),dd=G(),Tl=Q(),ub=wn(),J_e=(ge(),ie(Ge)),X_e=ob(),Z_e=K_e.promisify(ub.setSchemaDataToGlobal),ede=Q_e.searchByValue,tde="info_id",rde="2.9.9",nde="3.0.0";async function sde(e){let t=new Yk.HdbInfoInsertObject(1,e,e),r=new lb.InsertObject(mn.OPERATIONS_ENUM.INSERT,mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,mn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return ub.setSchemaDataToGlobal(),Vk.insert(r)}a(sde,"insertHdbInstallInfo");async function cb(e){let t,r=await Kk(),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 Yk.HdbInfoInsertObject(i,e,e);let o=new lb.InsertObject(mn.OPERATIONS_ENUM.INSERT,mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,mn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Z_e(),Vk.insert(o)}a(cb,"insertHdbUpgradeInfo");async function Kk(){let e=new lb.NoSQLSeachObject(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,tde,mn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await ede(e))}catch(r){dd.info(r)}return t}a(Kk,"getAllHdbInfoRecords");async function ide(){let e=await Kk();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(ide,"getLatestHdbInfoRecord");async function ode(){dd.info("Checking if HDB software has been updated");try{let e=z_e.version(),t=await ide(),r;if(Tl.isEmpty(t))r=rde;else if(r=t.data_version_num,Tl.compareVersions(r.toString(),e.toString())>0){if(!Tl.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(ab.yellow(`This instance's data was last run on version ${r}`)),console.error(ab.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.${W_e.EOL}${mn.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Tl.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(ab.yellow(`This instance's data was last run on version ${r}`)),await j_e(new $k(r,e))?await cb(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(ub.setSchemaDataToGlobal(),ade(r),e.toString()===r.toString())return;let n=new $k(r,e);if(X_e.hasUpgradesRequired(n))return n;Tl.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await cb(n.upgrade_version),dd.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw dd.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),dd.fatal(e),e}}a(ode,"getVersionUpdateInfo");function ade(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 ${mn.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in J_e.databases.system))throw console.log(t),new Error(t);if(!Tl.isEmpty(e)&&e<nde)throw console.log(t),new Error(t)}a(ade,"checkIfInstallIsSupported");Wk.exports={insertHdbInstallInfo:sde,insertHdbUpgradeInfo:cb,getVersionUpdateInfo:ode}});var Xk=g((xye,Jk)=>{"use strict";var _b=require("joi"),{boolean:cde,string:Qk,number:lde}=_b.types(),jk=require("fs-extra"),fd=C(),zk=require("path"),ude=nt();Jk.exports=_de;function _de(e){let t=Qk.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=_b.object({[fd.INSTALL_PROMPTS.ROOTPATH]:_b.custom(dde),[fd.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:lde.min(0),[fd.INSTALL_PROMPTS.TC_AGREEMENT]:Qk.valid("yes","YES","Yes"),[fd.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[fd.INSTALL_PROMPTS.CLUSTERING_ENABLED]:cde});return ude.validateBySchema(e,r)}a(_de,"installValidator");function dde(e,t){if(jk.existsSync(zk.join(e,"system/hdb_user/data.mdb"))||jk.existsSync(zk.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(dde,"validateRootAvailable")});var e$=g((Fye,Zk)=>{"use strict";var{mkdirpSync:fde}=require("fs-extra"),Ys=require("path"),gl=C(),fb=G(),Ede=In(),db=ri(),hde=Je();Zk.exports=pde;async function pde(e){fb.trace("Mounting HarperDB"),Es(e),Es(Ys.join(e,"backup")),Es(Ys.join(e,"trash")),Es(Ys.join(e,"keys")),Es(Ys.join(e,"keys",gl.LICENSE_FILE_NAME)),Es(Ys.join(e,"log")),Es(Ys.join(e,"doc")),Es(Ys.join(e,"database")),Es(Ys.join(e,gl.TRANSACTIONS_DIR_NAME)),Es(Ys.join(e,"clustering","leaf")),Es(Ys.join(e,"components")),await mde()}a(pde,"mountHdb");async function mde(){let e=Su(),t=Object.keys(db);for(let r=0;r<t.length;r++){let n=t[r],s=db[n].hash_attribute;try{hde.initSystemSchemaPaths(gl.SYSTEM_SCHEMA_NAME,n);let i=new e(gl.SYSTEM_SCHEMA_NAME,n,s);i.attributes=db[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,await Ede.createTable(n,i)}catch(i){throw fb.error(`issue creating environment for ${gl.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(mde,"createLMDBTables");function Es(e){fde(e,{mode:gl.HDB_FILE_PERMISSIONS}),fb.info(`Directory ${e} created`)}a(Es,"makeDirectory")});var lm=g(($ye,_$)=>{"use strict";var hb=require("os"),s$=require("inquirer"),kn=require("fs-extra"),Sde=require("properties-reader"),Va=require("chalk"),Qs=require("path"),Tde=require("human-readable-ids").hri,gde=require("ora"),Rde=require("yaml"),Lt=G(),Do=J(),Ed=Q(),cm=vo(),i$=am(),o$=Fi(),te=C(),Ade=Xk(),Ode=e$(),pb=ht(),Nde=yr(),bde=$E(),yde=WN(),Ide=wn(),wde=require("util").promisify,Cde=wde(Ide.setSchemaDataToGlobal),Lde=nm(),Rl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),ur=a(e=>Va.magenta.bold(e),"HDB_PROMPT_MSG"),Dde="https://harperdb.io/legal/end-user-license-agreement",Po=hb.EOL,Co="",Pde="yes",t$="Starting HarperDB install...",r$="HarperDB installation was successful.",n$="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Mde="An out of date version of HarperDB is already installed.",Eb="It appears that HarperDB is already installed. Exiting install...",Ude="Aborting install",vde=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])$/),Bde=new RegExp(/^[^\s.,*>]+$/),Hde=hb.homedir(),qde=Qs.join(Hde,te.HDB_ROOT_DIR_NAME),xde=9925,Gde="HDB_ADMIN",Fde="CLUSTER_USER",Fr={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:"},Al=cm([te.INSTALL_PROMPTS.HDB_CONFIG]),Ws,a$=!1;_$.exports=c$;c$.createSuperUser=u$;async function c$(){console.log(ur(Po+t$+Po)),Lt.notify(t$);let e;Al[te.INSTALL_PROMPTS.HDB_CONFIG]&&(e=kde());let t=Vde();Object.assign(t,e);let r=Ade(t);if(r)throw r.message;await Yde(),await Kde(t);let n=await $de(t);n[te.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT]&&(n[te.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]=null),Ws=n[te.INSTALL_PROMPTS.ROOTPATH],Al[te.INSTALL_PROMPTS.HDB_CONFIG]&&Qs.dirname(Al[te.INSTALL_PROMPTS.HDB_CONFIG])===Ws&&(a$=!0),!Al[te.INSTALL_PROMPTS.HDB_CONFIG]&&await kn.pathExists(Qs.join(Ws,te.HDB_CONFIG_FILE))&&(console.error(Eb),process.exit());let s=gde({prefixText:ur("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),Ed.isEmpty(Ws))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Do.setHdbBasePath(Ws),await Ode(Ws),await Wde(),await Qde(n),Lt.initLogSettings(!0),await u$(n),await zde(n),await Lde.generateKeys(),await Jde(),yde(),s.stop(),console.log(ur(Po+r$+Po)),Lt.notify(r$)}a(c$,"install");function kde(){let e=Rde.parseDocument(kn.readFileSync(Al[te.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=pb.flattenConfig(e.toJSON());return t[te.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[te.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(kde,"getConfigFromFile");async function $de(e){Lt.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Rl,when:Lo(e[te.INSTALL_PROMPTS.ROOTPATH],Fr.DESTINATION),name:te.INSTALL_PROMPTS.ROOTPATH,prefix:Co,default:qde,validate:async s=>Ks(s)?Ks(s):await kn.pathExists(Qs.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,message:ur(Fr.DESTINATION)},{type:"input",transformer:Rl,when:Lo(e[te.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]??e[te.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT],Fr.HDB_PORT),name:te.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:Co,default:xde,validate:s=>vde.test(s)?!0:"Invalid port.",message:ur(Fr.HDB_PORT)},{type:"input",transformer:Rl,when:Lo(e[te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Fr.HDB_USERNAME),name:te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Co,default:Gde,validate:s=>Ks(s)?Ks(s):(t=s,!0),message:ur(Fr.HDB_USERNAME)},{type:"password",when:Lo(e[te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Fr.HDB_PASS),name:te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Co,validate:s=>Ks(s)?Ks(s):!0,message:ur(Fr.HDB_PASS)}];if(Ed.autoCastBoolean(e[te.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Rl,when:Lo(e[te.INSTALL_PROMPTS.CLUSTERING_NODENAME],Fr.NODE_NAME),name:te.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Co,default:Tde.random(),validate:i=>Bde.test(i)?!0:"Invalid node name, must not contain ., * or >",message:ur(Fr.NODE_NAME)},{type:"input",transformer:Rl,when:Lo(e[te.INSTALL_PROMPTS.CLUSTERING_USER],Fr.CLUSTER_USERNAME),name:te.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Co,default:Fde,validate:i=>Ks(i)?Ks(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:ur(Fr.CLUSTER_USERNAME)},{type:"password",when:Lo(e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Fr.CLUSTER_PASS),name:te.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Co,validate:i=>Ks(i)?Ks(i):!0,message:ur(Fr.CLUSTER_PASS)}];r.push(...s)}let n=await s$.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($de,"installPrompts");function Lo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${ur(t)} ${Va.gray("[hidden]")}`),Lt.trace(`${ur(t)} [hidden]`)):(console.log(`${ur(t)} ${e}`),Lt.trace(`${ur(t)} ${e}`)),!1):!0}a(Lo,"displayCmdEnvVar");function Ks(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Ks,"checkForEmptyValue");function Vde(){let e=Object.keys(te.INSTALL_PROMPTS),t=cm(e),r=cm(Object.keys(te.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=te.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(Vde,"checkForPromptOverride");async function Yde(){Lt.trace("Checking for existing install.");let e=Ed.getPropsFilePath(),t=await kn.pathExists(e),r;if(t){Lt.trace(`Install found an existing boot prop file at:${e}`);let n=Sde(e),s=pb.getConfigValue(te.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(te.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await kn.pathExists(s)}if(!t&&Ed.noBootFile()&&(r=!0),r){if(Lt.trace(`Install found existing HDB config at:${e}`),await i$.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${o$.version()}. Exiting install...`;console.log(Po+Va.magenta.bold(Mde)),console.log(Va.magenta.bold(s)),Lt.error(s)}else console.log(Po+Va.magenta.bold(Eb)),Lt.error(Eb);process.exit(0)}}a(Yde,"checkForExistingInstall");async function Kde(e){Lt.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Dde}${Po}and can be viewed by typing or copying and pasting the URL into your web browser.${Po}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:Co,transformer:Rl,when:Lo(e[te.INSTALL_PROMPTS.TC_AGREEMENT],t),name:te.INSTALL_PROMPTS.TC_AGREEMENT,message:ur(t),validate:s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:Va.yellow("Please enter 'yes' or 'no'")},n=await s$.prompt([r]);n[te.INSTALL_PROMPTS.TC_AGREEMENT]&&n[te.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Pde&&(console.log(Va.yellow(n$)),Lt.error(n$),process.exit(0))}a(Kde,"termsAgreement");async function Wde(){let e=Qs.join(Ws,te.HDB_CONFIG_FILE),t;try{t=hb.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}
104
- install_user = ${t}`,n=Ed.getHomeDir(),s=Qs.join(n,te.HDB_HOME_DIR_NAME),i=Qs.join(s,te.LICENSE_KEY_DIR_NAME);try{kn.mkdirpSync(s,{mode:te.HDB_FILE_PERMISSIONS}),kn.mkdirpSync(i,{mode:te.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${te.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Qs.join(s,te.BOOT_PROPS_FILE_NAME);try{await kn.writeFile(o,r)}catch(c){throw Lt.error(`There was an error creating the boot file at path: ${o}`),c}Do.setProperty(te.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Do.setProperty(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Do.setProperty(Do.BOOT_PROPS_FILE_PATH,o)}}a(Wde,"createBootPropertiesFile");async function Qde(e){Lt.trace("Creating HarperDB config file");let t=cm(Object.keys(te.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{pb.createConfigFile(t),Do.initSync()}catch(r){jde(r)}}a(Qde,"createConfigFile");function jde(e){Lt.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Ude);let t=Qs.resolve(Do.get(Do.BOOT_PROPS_FILE_PATH),"../");t&&kn.removeSync(t),Ws&&(a$?kn.readdirSync(Ws,{withFileTypes:!0}).forEach(n=>{let s=Qs.join(n.path,n.name);s!==Al[te.INSTALL_PROMPTS.HDB_CONFIG]&&kn.removeSync(s)}):kn.removeSync(Ws)),process.exit(1)}a(jde,"rollbackInstall");async function l$(e,t){Lt.trace("Creating admin user"),await Cde();let r;try{r=await bde.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 Nde.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(l$,"createAdminUser");async function u$(e){Lt.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await l$(t,r),delete e[te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(u$,"createSuperUser");async function zde(e){Lt.trace("Creating Cluster user.");let t;e[te.INSTALL_PROMPTS.CLUSTERING_USER]&&e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[te.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await l$({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[te.INSTALL_PROMPTS.CLUSTERING_USER],delete e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(zde,"createClusterUser");async function Jde(){let e=o$.version();if(e)await i$.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(Jde,"insertHdbVersionInfo")});var E$=g((Yye,f$)=>{"use strict";var mb=Q(),Sn=G(),d$=ob();f$.exports={processDirectives:Xde};async function Xde(e){console.log("Starting upgrade process...");let t=d$.getVersionsForUpgrade(e),r=tfe(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;Sn.notify(c),console.log(c);let l=[],_=[];try{l=Zde(o.sync_functions)}catch(u){throw Sn.error(`Error while running an upgrade script for ${o.version}`),u}try{_=await efe(o.async_functions)}catch(u){throw Sn.error(`Error while running an upgrade script for ${o.version}`),u}n.push(...l,..._)}return n}a(Xde,"processDirectives");function Zde(e){if(mb.isEmptyOrZeroLength(e))return Sn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Sn.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Sn.info(`Running function ${r.name}`),!(r instanceof Function)){Sn.info("Variable being processed is not a function");continue}let n=r();Sn.info(n),t.push(n)}return t}a(Zde,"runSyncFunctions");async function efe(e){if(mb.isEmptyOrZeroLength(e))return Sn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Sn.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(Sn.info(`Running function ${s.name}`),!(s instanceof Function)){Sn.info("Variable being processed is not a function");continue}let i=await s();Sn.info(i),t.push(i)}return t}a(efe,"runAsyncFunctions");function tfe(e){if(mb.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=d$.getDirectiveByVersion(r);n&&t.push(n)}return t}a(tfe,"getUpgradeDirectivesToInstall")});var gb=g((Wye,g$)=>{"use strict";var um=J();um.initSync();var S$=require("chalk"),h$=require("fs-extra"),Pi=G(),Di=C(),p$=Fi(),rfe=E$(),Sb=Q(),T$=am(),nfe=Xp(),m$=qm(),sfe=wn(),ife=require("util").promisify,ofe=ife(sfe.setSchemaDataToGlobal),Tb,{UPGRADE_VERSION:_m}=Di.UPGRADE_JSON_FIELD_NAMES_ENUM;g$.exports={upgrade:afe};async function afe(e){await ofe(),Tb===void 0&&(Tb=Vc()),h$.existsSync(um.get(um.BOOT_PROPS_FILE_PATH))||(hd("The hdb_boot_properties file was not found. Please install HDB.",Di.LOG_LEVELS.ERROR),process.exit(1)),h$.existsSync(um.get(Di.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(hd("The hdb settings file was not found. Please make sure HDB is installed.",Di.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await T$.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),hd(`This version of HarperDB is ${p$.version()}`,Di.LOG_LEVELS.INFO);let r=t[_m]?t[_m]:p$.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Di.HDB_SUPPORT_ADDRESS}`),Pi.notify("Missing new version field from upgrade info object"),process.exit(1)),await cfe();let n,s=0;try{n=await nfe.forceUpdatePrompt(t)}catch(i){Pi.error("There was an error when prompting user about upgrade."),Pi.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Pi.info(`Starting upgrade to version ${r}`),await lfe(t),hd(`HarperDB was successfully upgraded to version ${t[_m]}`,Di.LOG_LEVELS.INFO)}a(afe,"upgrade");async function cfe(){let e=!1,t=await m$.findPs(Di.HDB_PROC_NAME);if(Sb.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await m$.findPs("hdb_express");Sb.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await Tb.list();Sb.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(S$.red(r)),Pi.error(r),process.exit(1)}}a(cfe,"checkIfRunning");async function lfe(e){try{await rfe.processDirectives(e)}catch(t){throw hd("There was an error during the data upgrade. Please check the logs.",Di.LOG_LEVELS.ERROR),t}try{await T$.insertHdbUpgradeInfo(e[_m])}catch(t){Pi.error("Error updating the 'hdb_info' system table."),Pi.error(t)}}a(lfe,"runUpgrade");function hd(e,t=void 0){t||(t=Pi.info),Pi[t](e),console.log(S$.magenta(e))}a(hd,"printToLogAndConsole")});var b$=g((jye,N$)=>{"use strict";var{promises:Ab,createReadStream:ufe,createWriteStream:_fe}=require("fs"),{createGzip:dfe}=require("zlib"),{promisify:ffe}=require("util"),{pipeline:Efe}=require("stream"),hfe=ffe(Efe),pfe=require("path"),Ka=J();Ka.initSync();var Ya=G(),{CONFIG_PARAMS:pd,ITC_EVENT_TYPES:mfe}=C(),{onMessageFromWorkers:Sfe}=rt(),Tfe=6e4,gfe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Rfe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",Rb,A$;N$.exports=O$;Sfe(e=>{e.type===mfe.RESTART&&(Ka.initSync(!0),clearInterval(A$),Ka.get(pd.LOGGING_ROTATION_ENABLED)&&O$())});async function O$(){try{let e=Ya.getLogFilePath(),t=Ka.get(pd.LOGGING_ROTATION_MAXSIZE),r=Ka.get(pd.LOGGING_ROTATION_INTERVAL);if(!t&&!r){Ya.error(gfe);return}let n=Ka.get(pd.LOGGING_ROTATION_PATH);if(!n){Ya.error(Rfe);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}Rb=Date.now()/6e4,Ya.trace("Log rotate enabled, maxSize:",t,"interval:",r),A$=setInterval(async()=>{if(s){let o;o=await Ab.stat(e),o.size>=s&&await R$(e,n)}i&&Date.now()/6e4-Rb>=i&&(await R$(e,n),Rb=Date.now()/6e4)},Tfe).unref()}catch(e){Ya.error(e)}}a(O$,"logRotator");async function R$(e,t){let r=Ka.get(pd.LOGGING_ROTATION_COMPRESS),n=pfe.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await hfe(ufe(e),dfe(),_fe(n)),await Ab.unlink(e)):await Ab.rename(e,n),Ya.closeLogFile(),Ya.notify(`hdb.log rotated, old log moved to ${n}`)}a(R$,"moveLogFile")});var Wa=g((iIe,M$)=>{"use strict";var Tn=J();Tn.initSync();var Jye=ba(),Gt=C(),zs=G(),Mi=require("fs-extra"),Mo=require("path"),Afe=require("systeminformation"),Ofe=WN(),Nfe=lm(),Ob=require("chalk"),bfe=Ho(),Ui=Q(),I$=ht(),w$=vo(),y$=Th(),yfe=gb(),Ife=b$(),wfe=require("minimist"),{PACKAGE_ROOT:Cfe}=C(),{startHTTPThreads:Lfe,startSocketServer:Xye,mostIdleRouting:Zye,remoteAffinityRouting:eIe}=(Fp(),ie(YN)),Dfe=am(),{isMainThread:Pfe}=require("worker_threads"),tIe=ri(),rIe=zi(),nIe=AT(),sIe=Su(),dm=C(),js,Ol,C$=!1,Mfe="Upgrade complete. Starting HarperDB.",Ufe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",vfe="HarperDB not found, starting install process.",Bfe="There was an error during install, check install_log.log for more details. Exiting.",Hfe="HarperDB successfully started.";function qfe(){if(!C$){let e=a(()=>{Mi.removeSync(Mo.join(Tn.get(Gt.CONFIG_PARAMS.ROOTPATH),Gt.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(qfe,"addExitListeners");async function L$(e=!1,t=!1){if(console.log(Ob.magenta("Starting HarperDB...")),await P$()===!1){console.log(vfe);try{await Nfe()}catch(o){console.error(Bfe,o),zs.error(o),process.exit(1)}}let r,n=Ol?.service==="clustering";Ol?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Mi.readFile(Mo.join(Tn.get(Gt.CONFIG_PARAMS.ROOTPATH),Gt.HDB_PID_FILE),"utf8")),c=await Afe.processes();for(let l of c.list)if(l.pid===o){n?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}js===void 0&&(js=Vc()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Tn.get(Gt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await y$.generateNatsConfig(),await js.startClusteringProcesses(!0),process.exit()),qfe(),await Mi.writeFile(Mo.join(Tn.get(dm.CONFIG_PARAMS.ROOTPATH),dm.HDB_PID_FILE),`${process.pid}`),zs.info("HarperDB PID",process.pid);let s;try{let o=await Dfe.getVersionUpdateInfo();o!==void 0&&(s=o[Gt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await yfe.upgrade(o),console.log(Mfe))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`),zs.error(o)):(console.error(Ufe),zs.error(o)),process.exit(1)}if(!e){let o=w$(Object.keys(Gt.CONFIG_PARAM_MAP),!0);!Ui.isEmpty(o)&&!Ui.isEmptyOrZeroLength(Object.keys(o))&&I$.updateConfigValue(void 0,void 0,o,!0,!0)}Ofe(),Ffe(),Ui.autoCastBoolean(Tn.get(Gt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&Pfe&&await y$.generateNatsConfig(t)}a(L$,"initialize");async function xfe(e=!1){try{Ol=wfe(process.argv),Ol.ROOTPATH&&I$.updateConfigObject("settings_path",Mo.join(Ol.ROOTPATH,Gt.HDB_CONFIG_FILE)),await L$(e,!0);let t=process.env.IS_SCRIPTED_SERVICE&&!Ol.service;Ui.autoCastBoolean(Tn.get(Gt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await js.startClusteringProcesses(),await js.startClusteringThreads()),await Lfe(process.env.DEV_MODE?1:Tn.get(dm.CONFIG_PARAMS.THREADS_COUNT)??Tn.get(dm.CONFIG_PARAMS.THREADS)),Tn.get(Gt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await Ife(),t||D$()}catch(t){console.error(t),zs.error(t),process.exit(1)}}a(xfe,"main");function D$(){zs.suppressLogging(()=>{console.log(Ob.magenta(""+Mi.readFileSync(Mo.join(Cfe,"utility/install/ascii_logo.txt")))),console.log(Ob.magenta(`|------------- HarperDB ${bfe.version} successfully started ------------|`))}),zs.notify(Hfe)}a(D$,"started");async function Gfe(e=!0){C$=!e;try{js===void 0&&(js=Vc()),js.enterPM2Mode(),await L$(),Ui.autoCastBoolean(Tn.get(Gt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await js.startClusteringProcesses(),await js.startService(Gt.PROCESS_DESCRIPTORS.HDB),D$(),e&&process.exit(0)}catch(t){console.error(t),zs.error(t),process.exit(1)}}a(Gfe,"launch");function Ffe(){let e=Mo.join(Tn.getHdbBasePath(),Gt.LICENSE_KEY_DIR_NAME,Gt.LICENSE_FILE_NAME),t=Mo.join(e,Gt.LICENSE_FILE_NAME),r=Mo.join(e,Gt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=w$(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Ui.isEmpty(n)||Ui.isEmpty(s))return;Mi.mkdirpSync(e),Mi.writeFileSync(r,n),Mi.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),zs.error(s)}}a(Ffe,"writeLicenseFromVars");M$.exports={launch:Gfe,main:xfe,isHdbInstalled:P$};async function P$(){try{await Mi.stat(Ui.getPropsFilePath()),await Mi.stat(Tn.get(Gt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Ui.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw zs.error(`Error checking for HDB install - ${e}`),e}return!0}a(P$,"isHdbInstalled")});var Nb=g((aIe,B$)=>{"use strict";var kfe=G(),$fe=C(),Vfe=require("util"),Yfe=require("child_process"),U$=Vfe.promisify(Yfe.exec),Kfe=di(),md=Vc(),v$="Stopping HarperDB.";B$.exports=Wfe;async function Wfe(){if(console.log(v$),kfe.notify(v$),await md.isServiceRegistered($fe.HDB_PROC_DESCRIPTOR)){md.enterPM2Mode();let r=await md.getUniqueServicesList();for(let n in r)await md.stop(n)}await md.kill();let t=await Kfe.getHDBProcessInfo();t.clustering.forEach(r=>{U$(`kill ${r.pid}`)}),t.core.forEach(r=>{U$(`kill ${r.pid}`)})}a(Wfe,"stop")});var Db=g((lIe,Y$)=>{"use strict";var Qfe=require("os"),Em=require("https"),H$=require("http"),vi=require("fs-extra"),jfe=require("yaml"),zfe=require("human-readable-ids").hri,{pipeline:q$}=require("stream/promises"),{createWriteStream:hm,ensureDir:pm}=require("fs-extra"),{join:ps}=require("path"),Cb=require("lodash"),Jfe=require("minimist"),k$=J(),Xfe=di(),$$=G(),Td=ht(),{restart:Zfe}=ba(),eEe=Nb(),yb=Q(),x$=pt(),tEe=wn(),{isHdbInstalled:rEe,main:V$,launch:nEe}=Wa(),sEe=lm(),mm=C(),{SYSTEM_TABLE_NAMES:G$,SYSTEM_SCHEMA_NAME:iEe,CONFIG_PARAMS:Sd,OPERATIONS_ENUM:_r}=mm,oEe=9925,aEe="info",cEe=1e4,lEe="clone-node-config.yaml",Lb=[G$.ROLE_TABLE_NAME,G$.USER_TABLE_NAME],kr={HDB_LEADER_USERNAME:"HDB_LEADER_USERNAME",HDB_LEADER_PASSWORD:"HDB_LEADER_PASSWORD",HDB_LEADER_URL:"HDB_LEADER_URL",HDB_LEADER_CLUSTERING_HOST:"HDB_LEADER_CLUSTERING_HOST",HDB_LEADER_CLUSTERING_PORT:"HDB_LEADER_CLUSTERING_PORT",HDB_FULLY_CONNECTED:"HDB_FULLY_CONNECTED",HDB_CLONE_OVERTOP:"HDB_CLONE_OVERTOP"},ja=Jfe(process.argv),gd=ja[kr.HDB_LEADER_USERNAME]??process.env[kr.HDB_LEADER_USERNAME],Rd=ja[kr.HDB_LEADER_PASSWORD]??process.env[kr.HDB_LEADER_PASSWORD],Nl=ja[kr.HDB_LEADER_URL]??process.env[kr.HDB_LEADER_URL],bb=ja[kr.HDB_LEADER_CLUSTERING_HOST]??process.env[kr.HDB_LEADER_CLUSTERING_HOST],uEe=ja[kr.HDB_LEADER_CLUSTERING_PORT]??process.env[kr.HDB_LEADER_CLUSTERING_PORT],_Ee=(ja[kr.HDB_FULLY_CONNECTED]??process.env[kr.HDB_FULLY_CONNECTED])==="true",Uo=(ja[kr.HDB_CLONE_OVERTOP]??process.env[kr.HDB_CLONE_OVERTOP])==="true",Ib,Qe,Tt,gt,yl,bl,gn,hs,wb;Y$.exports=a(async function(t=!1){delete process.env.HDB_LEADER_URL;let r=await rEe();if(!Uo&&r)return console.info("HarperDB is already installed, clone will not be performed"),V$();if(Uo&&!r){console.info("No existing install of HarperDB found, cannot clone overtop");return}let n=Uo?`Cloning node ${Nl} overtop of existing HarperDB install`:`Cloning node: ${Nl}`;if(console.info(n),Uo)wb=Td.readConfigFile(),bl=wb.rootPath,await eEe();else try{bl=process.env.ROOTPATH?process.env.ROOTPATH:ps(Qfe.homedir(),mm.HDB_ROOT_DIR_NAME)}catch(i){throw console.error(i),new Error("There was an error setting default rootPath. Please set 'rootPath' in clone-node-config.yaml")}let s;try{s=ps(bl,lEe),Qe=jfe.parseDocument(vi.readFileSync(s,"utf8"),{simpleKeys:!0}).toJSON()}catch{console.info(s+" not found, using default config values.")}yl=Qe?.clustering?.nodeName??zfe.random(),Tt=await Ad({operation:_r.GET_CONFIGURATION}),Tt=await JSON.parse(Tt.body),process.env.HDB_FETCH==="true"?(await hEe(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await EEe(),Uo||await fEe(),await dEe(),await pEe(),await mEe(t),console.info("Successfully cloned node: "+Nl),t&&process.exit()},"cloneNode");async function dEe(){console.info("Cloning configuration"),Ib=Tt?.clustering?.enabled;let e={[Sd.ROOTPATH]:bl};if(Ib&&Qe?.clustering?.enabled!==!1){if(bb==null)throw new Error("'HDB_LEADER_CLUSTERING_HOST' must be defined");e[Sd.CLUSTERING_ENABLED]=!0;let n=Tt?.clustering?.hubServer?.cluster?.network?.routes,s=parseInt(uEe)||Tt?.clustering?.hubServer?.cluster?.network?.port;e[Sd.CLUSTERING_USER]=Tt?.clustering?.user;let i=k$.get(Sd.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES);Array.isArray(i)?i.push({host:bb,port:s}):i=[{host:bb,port:s}],Array.isArray(n)&&(i=i.concat(n)),e[Sd.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES]=i}let t=Qe?.componentConfig?.exclude;t=t?t.reduce((n,s)=>({...n,[s.name]:!0}),{}):[];for(let n in Tt)Tt[n]?.package&&!t[n]&&await Td.addConfig(n,Tt[n]);Qe?.databases&&await Td.addConfig("databases",Tt?.schemas);let r;Qe&&(r=Td.flattenConfig(Qe));for(let n in r){let s=mm.CONFIG_PARAM_MAP[n.toLowerCase()];s&&(e[s]=r[n])}e.rootPath==null&&delete e.rootPath,e?.clustering_nodeName==null&&(Uo?e.clustering_nodeName=wb?.clustering?.nodeName??yl:e.clustering_nodeName=yl),$$.info("Cloning config:",e),Cb.isEmpty(e)||Td.updateConfigValue(void 0,void 0,e,!1,!0)}a(dEe,"cloneConfig");async function fEe(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=bl,!gd)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=gd,!Rd)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=Rd,process.env.OPERATIONSAPI_NETWORK_PORT=Qe?.operationsApi?.network?.port??oEe,process.env.CLUSTERING_NODENAME=yl,process.env.CLUSTERING_LOGLEVEL=Qe?.clustering?.logLevel??aEe,await sEe()}a(fEe,"installHDB");async function EEe(){console.info("Cloning system database");let e=Qa("system");await pm(e);let t=ps(e,"system.mdb"),r=hm(t,{overwrite:!0}),n={operation:_r.GET_BACKUP,database:"system"};Uo||(n.tables=Lb);let s=await F$(n,r);if(await vi.utimes(t,Date.now(),new Date(s.date)),gt=await Ad({operation:_r.DESCRIBE_ALL}),gt=await JSON.parse(gt.body),gn=Qe?.databaseConfig?.excludeDatabases,gn=gn?gn.reduce((i,o)=>({...i,[o.database]:!0}),{}):{},Tt.schemas)for(let i in Tt.schemas)Object.keys(Tt.schemas[i]).includes("tables")&&(gn[i]=!0,console.info(`Excluding database '${i}' from clone because leader node has custom pathing configured for one or more of its tables`));hs=Qe?.databaseConfig?.excludeTables,hs=hs?hs.reduce((i,o)=>({...i,[o.database==null?null:o.database+o.table]:!0}),{}):{};for(let i in gt){if(gn[i]){gt[i]="excluded";continue}if(Cb.isEmpty(gt[i]))continue;let o=[],c=!1;for(let E in gt[i])hs[i+E]?(c=!0,gt[i][E]="excluded"):o.push(E);let l;c?(console.info(`Cloning database: ${i} tables: ${o}`),l={operation:_r.GET_BACKUP,database:i,tables:o}):(console.info(`Cloning database: ${i}`),l={operation:_r.GET_BACKUP,database:i});let _=Qa(i);await pm(_);let u=ps(_,i+".mdb"),d=hm(u,{overwrite:!0}),f=await F$(l,d);await vi.utimes(u,Date.now(),new Date(f.date))}}a(EEe,"cloneTables");async function hEe(){console.info("Cloning system database using fetch");let e={operation:_r.GET_BACKUP,database:"system"};Uo||(e.tables=Lb);let t=await fm(e,!0),r=Qa("system");await pm(r);let n=ps(r,"system.mdb");if(await q$(t.body,hm(n,{overwrite:!0})),await vi.utimes(n,Date.now(),new Date(t.headers.get("date"))),gt=await fm({operation:_r.DESCRIBE_ALL}),gt=await gt.json(),gn=Qe?.databaseConfig?.excludeDatabases,gn=gn?gn.reduce((s,i)=>({...s,[i.database]:!0}),{}):{},Tt.schemas)for(let s in Tt.schemas)Object.keys(Tt.schemas[s]).includes("tables")&&(gn[s]=!0,console.info(`Excluding database '${s}' from clone because leader node has custom pathing configured for one or more of its tables`));hs=Qe?.databaseConfig?.excludeTables,hs=hs?hs.reduce((s,i)=>({...s,[i.database==null?null:i.database+i.table]:!0}),{}):{};for(let s in gt){if(gn[s]){gt[s]="excluded";continue}if(Cb.isEmpty(gt[s]))continue;let i=[],o=!1;for(let f in gt[s])hs[s+f]?(o=!0,gt[s][f]="excluded"):i.push(f);if(i.length===0)return;let c;o?(console.info(`Cloning database: ${s} tables: ${i}`),c=await fm({operation:_r.GET_BACKUP,database:s,tables:i},!0)):(console.info(`Cloning database: ${s}`),c=await fm({operation:_r.GET_BACKUP,database:s},!0));let l=Qa(s);await pm(l);let _=new Date(c.headers.get("date")),u=ps(l,`${_.getTime()}-${s}.mdb`);await q$(c.body,hm(u,{overwrite:!0}));let d=ps(l,s+".mdb");await vi.rename(u,d),await vi.utimes(d,Date.now(),_)}}a(hEe,"cloneTablesFetch");async function fm(e,t=!1){let r=Qe?.httpsRejectUnauthorized??!1,n=new Em.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(gd+":"+Rd).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(Nl,{method:"POST",headers:i,body:JSON.stringify(e),agent:n,compress:!0});if(o.ok)return o;throw console.error(`HTTP Error Response: ${o.status} ${o.statusText}`),new Error(await o.text())}a(fm,"leaderHttpReqFetch");function Qa(e){return Qe?.databases&&Qe?.databases[e]?.path||Qe?.storage&&Qe?.storage?.path||ps(bl,"database")}a(Qa,"getDbFileDir");async function pEe(){let{deployComponent:e}=Hh(),t=await Ad({operation:_r.GET_COMPONENTS});t=await JSON.parse(t.body);let r=[];if(t.entries.length){for(let s of t.entries){if(!s.entries)continue;let i=!1;if(Qe?.componentConfig?.exclude){for(let o of Qe.componentConfig.exclude)if(o?.name!=null&&o.name===s.name){i=!0;break}}i||r.push(s.name)}let n=Qe?.componentConfig?.skipNodeModules!==!1;for(let s of r){console.info("Cloning component: "+s);let i=await Ad({operation:_r.PACKAGE_COMPONENT,project:s,skip_node_modules:n}),{payload:o}=await JSON.parse(i.body);await e({payload:o,project:s})}}}a(pEe,"cloneComponents");async function mEe(e){if(!Ib)return;let t=await Xfe.getHDBProcessInfo();t.clustering.length===0||t.core.length===0?e?await nEe(!1):await V$():(console.info(await Zfe({operation:_r.RESTART})),await yb.async_set_timeout(cEe)),console.info("Clustering cloned tables"),e&&await yb.async_set_timeout(2e3);let r=Qe?.clusteringConfig?.subscribeToLeaderNode!==!1,n=Qe?.clusteringConfig?.publishToLeaderNode!==!1;await tEe.setSchemaDataToGlobalAsync();let s=E_(),i=await Ad({operation:_r.CLUSTER_STATUS});i=await JSON.parse(i.body);let o=[],c=await vi.stat(ps(Qa("system"),"system.mdb"));for(let _ of Lb)o.push({schema:iEe,table:_,subscribe:r,publish:n,start_time:c.mtime.toISOString()});for(let _ in gt){if(gt[_]==="excluded")continue;let u=await vi.stat(ps(Qa(_),_+".mdb"));u.mtime.setSeconds(u.mtime.getSeconds()-10);for(let d in gt[_])gt[_][d]!=="excluded"&&o.push({schema:_,table:d,subscribe:r,publish:n,start_time:u.mtime.toISOString()})}await x$.createTableStreams(o),$$.info("Sending add_node request to node:",Tt?.clustering?.nodeName,"with subscriptions:",o);let l;if(_Ee&&i.connections.length>0){let _=ih(),u=[{node_name:Tt?.clustering?.nodeName,subscriptions:o}],d=!1;yl=k$.get(mm.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let f of i.connections){if(f.node_name===yl)continue;let E={node_name:f.node_name,subscriptions:[]};for(let h of f.subscriptions){if(gn[h.schema]||hs[h.schema+h.table])continue;d=!0;let m=await vi.stat(ps(Qa(h.schema),h.schema+".mdb"));m.mtime.setSeconds(m.mtime.getSeconds()-10),h.start_time=m.mtime.toISOString(),E.subscriptions.push(h)}u.push(E)}d&&(l=await _({operation:_r.CONFIGURE_CLUSTER,connections:u}),console.info(JSON.stringify(l)))}l||await s({operation:_r.ADD_NODE,node_name:Tt?.clustering?.nodeName,subscriptions:o},!0),await x$.closeConnection()}a(mEe,"clusterTables");async function Ad(e){let t=new Em.Agent({rejectUnauthorized:Qe?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(gd+":"+Rd).toString("base64"),"Content-Type":"application/json"},s=new URL(Nl),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 yb.httpRequest(i,e)}a(Ad,"leaderHttpReq");async function F$(e,t){let r=new Em.Agent({rejectUnauthorized:Qe?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(gd+":"+Rd).toString("base64"),"Content-Type":"application/json"},i=new URL(Nl),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:s};return i.protocol==="https:"&&(o.agent=r,H$=Em),i.port&&(o.port=i.port),new Promise((c,l)=>{let _=H$.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(F$,"leaderHttpStream")});var W$=g((_Ie,K$)=>{var SEe=lm(),TEe=G();K$.exports=gEe;async function gEe(){try{await SEe()}catch(e){console.error("There was an error during the install."),console.error(e),TEe.error(e),process.exit(1)}}a(gEe,"install")});var z$=g((fIe,j$)=>{"use strict";var REe=Eh(),AEe=G(),Q$="Registration failed.";async function OEe(){let e;try{e=await REe.register()}catch(t){return AEe.error(`Registration error ${t}`),Q$}return e||Q$}a(OEe,"register");j$.exports={register:OEe}});var eV=g((hIe,Z$)=>{"use strict";var Mb=require("fs-extra"),Ub=require("path"),Pb=require("yaml"),Od=pt(),Nd=C(),J$=tt(),vb=G(),NEe=yr(),bEe=uh(),yEe=ch(),IEe=di(),X$=J(),{isHdbInstalled:wEe}=Wa();X$.initSync();var $n={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},$r={LEAF:"leaf server",HUB:"hub server"},Sm;Z$.exports=CEe;async function CEe(){let e={harperdb:{status:$n.STOPPED}};if(!await wEe()){e.harperdb.status=$n.NOT_INSTALLED,console.log(Pb.stringify(e));return}Sm=X$.get(Nd.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await Mb.readFile(Ub.join(Sm,Nd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Nd.NODE_ERROR_CODES.ENOENT){vb.info("`harperdb status` did not find a hdb.pid file"),e.harperdb.status=$n.STOPPED,console.log(Pb.stringify(e));return}throw n}let r=await IEe.getHDBProcessInfo();for(let n of r.core)if(n.pid===t){e.harperdb.status=$n.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await LEe(r),e.clustering[$r.HUB].status===$n.RUNNING&&e.clustering[$r.LEAF].status===$n.RUNNING){let n=[],s=await bEe({});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 yEe.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 Od.closeConnection()}console.log(Pb.stringify(e)),process.exit()}a(CEe,"status");async function LEe(e){let t={[$r.HUB]:{},[$r.LEAF]:{}};if(e.clustering.length===0)return t[$r.HUB].status=$n.STOPPED,t[$r.LEAF].status=$n.STOPPED,t;let{port:r}=Od.getServerConfig(Nd.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:n,decrypt_hash:s}=await NEe.getClusterUser();try{(await Od.createConnection(r,n,s,!1)).close(),t[$r.HUB].status=$n.RUNNING}catch{t[$r.HUB].status=$n.ERRORED}let{port:i}=Od.getServerConfig(Nd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await Od.createConnection(i,n,s,!1)).close(),t[$r.LEAF].status=$n.RUNNING}catch{t[$r.LEAF].status=$n.ERRORED}try{t[$r.HUB].pid=Number.parseInt(await Mb.readFile(Ub.join(Sm,"clustering",J$.PID_FILES.HUB),"utf8"))}catch(o){vb.error(o),t[$r.HUB].pid=void 0}try{t[$r.LEAF].pid=Number.parseInt(await Mb.readFile(Ub.join(Sm,"clustering",J$.PID_FILES.LEAF),"utf8"))}catch(o){vb.error(o),t[$r.LEAF].pid=void 0}return t}a(LEe,"getHubLeafStatus")});var za=G(),DEe=Fi(),Bb=C(),Tm=require("fs"),tV=require("path"),mIe=require("os"),{PACKAGE_ROOT:PEe}=C(),MEe=Ry(),SIe=(Fp(),ie(YN)),rV=_k(),{SERVICE_ACTIONS_ENUM:Vr}=Bb;UEe();function UEe(){let e=MEe();if(e)if(e.error){console.error(e.error),za.error(e.error);return}else e.warn&&(console.warn(e.warn),za.warn(e.warn));let t;Tm.readdir(tV.join(PEe,"bin"),r=>{if(r)return za.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let n=rV.buildRequest();n.operation&&(t=Vr.OPERATION);let s;switch(t){case Vr.OPERATION:za.trace("calling cli operations with:",n),rV.cliOperations(n).then();break;case Vr.DEV:process.env.DEV_MODE=!0;case Vr.RUN:let i=process.argv[3];i&&i[0]!=="-"&&(Tm.existsSync(i)||(console.error(`The folder ${i} does not exist`),process.exit(1)),Tm.statSync(i).isDirectory()||(console.error(`The path ${i} is not a folder`),process.exit(1)),Tm.existsSync(tV.join(i,Bb.HDB_CONFIG_FILE))?process.env.ROOTPATH=i:process.env.RUN_HDB_APP=i),Wa().main();break;case Vr.START:process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL")?Db()(!0).catch(h=>{console.log(h)}):s=Wa().launch();break;case Vr.INSTALL:W$()().then(()=>Wa().main(!0)).catch(E=>{console.error(E)});break;case Vr.REGISTER:z$().register().then(E=>{console.log(E)}).catch(E=>{console.error(E)});break;case Vr.STOP:Nb()().then(()=>{process.exit(0)}).catch(E=>{console.error(E)});break;case Vr.RESTART:ba().restart({}).then().catch(E=>{za.error(E),console.error(`There was an error restarting HarperDB. ${E}`),process.exit(1)});break;case Vr.VERSION:DEe.printVersion();break;case Vr.UPGRADE:za.setLogLevel(Bb.LOG_LEVELS.INFO),gb().upgrade(null).then(()=>{console.log("Your instance of HarperDB is up to date!")}).catch(E=>{za.error(`Got an error during upgrade ${E}`)});break;case Vr.STATUS:eV()().then().catch(E=>{console.error(E)});break;case Vr.RENEWCERTS:let{generateKeys:f}=nm();f().then(()=>{console.log("Successfully renewed self-signed certificates")}).catch(()=>{console.error(r)});break;case void 0:process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL")?Db()().catch(h=>{console.log(h)}):Wa().main();break;default:console.warn(`The "${t}" command is not understood.`);case Vr.HELP:console.log(`
102
+ Reindexing upgrade started for transaction logs`),Ci.notify("Reindexing upgrade started for transaction logs"),await vk(_b,!0,e)),Ci.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(ld?", but errors occurred":"")}a(g_e,"reindexUpgrade");async function vk(e,t,r){let n=await Vs.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=Li.join(e,o.toString());if(o===".DS_Store")continue;let l=await Vs.readdir(c),_=l.length;for(let u=0;u<_;u++){let d=l[u];if(d!==".DS_Store"&&Vs.statSync(Li.join(c,d)).isDirectory())try{await R_e(o,d,t),dr.info(`Reindexing started for ${o}.${d}`),Ci.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await O_e(o,d,c,t,r),dr.info(`Reindexing completed for ${o}.${d}`),Ci.notify(`Reindexing completed for ${o}.${d}`)}catch(f){ld=!0,f.schema_path=c,f.table_name=d,Ci.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Ci.error(f),dr.error(f),console.error(f)}}}if(!ld)try{await Vs.rm(um,{recursive:!0})}catch{}}a(vk,"processTables");async function R_e(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Li.join(um,s);await Vs.ensureDir(um),await Vs.writeFile(i,""),dr=S_e({level:"debug",formatters:{bindings(){}}},i)}a(R_e,"initPinoLogger");var A_e=20;async function O_e(e,t,r,n,s){let i;try{i=await Sn.openEnvironment(r,t,n)}catch(g){if(g.message==="MDB_INVALID: File is not an LMDB file"){Ci.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`),dr.error(g);return}throw g}let o=y_e(i.dbis),c=Sn.openDBI(i,o),l=Object.keys(i.dbis),_=Sn.statDBI(i,o);dr.info(`Old environment stats: ${JSON.stringify(_)}`);let u=new m_e.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});u.start(_.entryCount,0,{});let d=await Sn.createEnvironment(r,t,!1);Sn.createDBI(d,o,!1,!0);let f=[];try{for(let g of c.getRange({start:!1}))g.value=Object.assign({},g.value),f.push(g),n||e==="system"&&(t==="hdb_schema"&&(g.key=g.key.toString(),g.value.name=g.value.name.toString()),t==="hdb_table"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.name=g.value.name.toString()),t==="hdb_attribute"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.table=g.value.table.toString(),g.value.attribute=g.value.attribute.toString())),f.length>A_e&&await E();await E()}catch(g){throw ld=!0,dr.error(g),g}async function E(){let g,A=f.map(({value:v})=>v);n?g=await Promise.all(A.map(v=>N_e(d,v))):g=await f_e(d,o,l.filter(v=>v!=="__blob__"),A,!1);for(let v=0,U=f.length;v<U;v++){let{key:F,value:H}=f[v];dr.info(`Record hash value: ${F} hash: ${o}`);let j;n?j=g[v]:j=g.written_hashes.indexOf(F)>-1,cd(j,!0),b_e(d,o,H[o],n),dr.info(`Insert success, written hashes: ${g.written_hashes}`),u.increment()}f=[],u.value/u.total*100%10===0&&Ci.notify(`${e}.${t} ${u.value}/${u.total} records inserted`),dr.info(`${u.value}/${u.total} records inserted`)}a(E,"finishOutstanding"),u.stop();let h=Sn.statDBI(i,o),m=Sn.statDBI(d,o);if(dr.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${m.entryCount}`),cd.deepStrictEqual(h.entryCount,m.entryCount),await Sn.closeEnvironment(i),await Sn.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let g=Li.join(r,t),A=Li.join(g,"data.mdb"),P=Li.join(g,"lock.mdb");await Vs.unlink(A),await Vs.unlink(P),await Vs.rmdir(g),dr.info(`Deleted old environment files from schema folder: ${A}, ${P}`)}let S=await Sn.openEnvironment(r,t),R=Sn.statDBI(S,o);dr.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify(R)}`),cd.deepStrictEqual(R.entryCount,m.entryCount),await Sn.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(O_e,"processTable");async function N_e(e,t){Sn.initializeDBIs(e,yo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,yo.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[yo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[yo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),p_e.isEmpty(t.user_name)||e.dbis[yo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[yo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(N_e,"insertTransaction");function b_e(e,t,r,n){let i=e.dbis[t].get(r);cd.deepStrictEqual(typeof i,"object");let o;if(n){let c={[yo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[yo.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&&!h_e.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let _=0,u=l.length;_<u;_++){let d=l[_];Bk(e,c,d,r)}else Bk(e,c,l,r)}a(b_e,"validateIndices");function Bk(e,t,r,n){try{let s=!1,i=E_e.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||dr.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),cd.deepStrictEqual(s,!0)}catch(s){ld=!0,dr.error(s),console.error(s)}}a(Bk,"validateIndex");function y_e(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(y_e,"getHashDBI")});var dm=T((qye,xk)=>{"use strict";var I_e=require("mkcert"),_m=require("path"),db=require("fs-extra"),fb=x(),w_e=X(),Eb=C(),Sl=Eg(),C_e=Uo(),L_e=Et();xk.exports={generateKeys:D_e,updateConfigCert:Gk};async function D_e(){let e=w_e.getHdbBasePath(),t=_m.join(e,Eb.LICENSE_KEY_DIR_NAME),r=await I_e.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:3650,caKey:Sl.CERTIFICATE_VALUES.key,caCert:Sl.CERTIFICATE_VALUES.cert}),n=_m.join(t,Sl.CERTIFICATE_PEM_NAME),s=_m.join(t,Sl.PRIVATEKEY_PEM_NAME),i=_m.join(t,Sl.CA_PEM_NAME);try{await db.writeFile(n,r.cert)}catch(o){throw fb.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await db.writeFile(s,r.key)}catch(o){throw fb.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await db.writeFile(i,Sl.CERTIFICATE_VALUES.cert)}catch(o){throw fb.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}Gk(n,s,i)}a(D_e,"generateKeys");function Gk(e,t,r){let n=C_e(Object.keys(Eb.CONFIG_PARAM_MAP),!0),s=Eb.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()]),L_e.updateConfigValue(void 0,void 0,i,!1,!0)}a(Gk,"updateConfigCert")});var Yk=T((Fye,Vk)=>{"use strict";var fm=require("path"),Io=require("fs-extra"),P_e=lb(),xa=x(),Fk=Et(),hb=X(),ps=C(),Em=K(),M_e=require("properties-reader"),U_e=Zn(),v_e=nh(),B_e=nr(),xye=require("util"),H_e=B_e.searchByValue,q_e=br(),G_e=Nh(),x_e=et(),F_e=qk(),kk=dm(),k_e=am(),dd=new P_e("4.0.0"),$k=[],ud,_d;async function $_e(){try{if(await k_e.upgradeCertsPrompt()){if(console.log("Generating new certificates."),ud){let t=Em.changeExtension(ud,".bak");await Io.move(ud,t)}if(_d){let t=Em.changeExtension(_d,".bak");await Io.move(_d,t)}await kk.generateKeys()}else console.log("Using existing certificates."),kk.updateConfigCert(ud,_d,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a($_e,"generateNewKeys");async function V_e(){console.log("Updating HarperDB nodes."),xa.info("Updating HarperDB nodes.");let e=[];try{let t=new U_e(ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await H_e(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!x_e.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let u=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(u),u}let l={host:c.host,port:c.port};e.push(l);let _=[];for(let u=0,d=c.subscriptions.length;u<d;u++){let f=c.subscriptions[u],E=f.channel.split(":");_.push({schema:E[0],table:E[1],publish:f.publish,subscribe:f.subscribe})}n.push({name:c.name,subscriptions:_,system_info:{hdb_version:ps.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(Em.isEmptyOrZeroLength(n))return;let s=new v_e(ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await q_e.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{G_e.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(V_e,"updateNodes");async function Y_e(){let e=hb.get(ps.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(fm.join("config","settings.js"))){xa.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),xa.info(t);let r=fm.dirname(e),n=hb.get(ps.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=fm.join(n,"backup","4_0_0_upgrade_settings.bak"),i=fm.join(n,ps.HDB_CONFIG_FILE);try{xa.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Io.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{xa.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),xa.info("Updating env variables with new settings values");let d=Fk.initOldConfig(e);ud=d[ps.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],_d=d[ps.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],Fk.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=Em.getPropsFilePath();Io.accessSync(o,Io.constants.F_OK|Io.constants.R_OK);let l=M_e(o).get(ps.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
103
+ install_user = ${l}`;try{Io.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{hb.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{Io.removeSync(r),console.log(u),xa.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(Y_e,"updateSettingsFile_4_0_0");dd.async_functions.push(Y_e);dd.async_functions.push($_e);dd.async_functions.push(F_e);dd.async_functions.push(V_e);$k.push(dd);Vk.exports=$k});var pb=T(($ye,jk)=>{"use strict";var Fa=K(),K_e=C(),Kk=x(),{DATA_VERSION:W_e,UPGRADE_VERSION:Q_e}=K_e.UPGRADE_JSON_FIELD_NAMES_ENUM,Wk=Mk(),hm=Yk(),ka=new Map;Wk&&Wk.forEach(e=>{ka.set(e.version,e)});hm&&hm.forEach(e=>{ka.set(e.version,e)});hm&&hm.forEach(e=>{ka.set(e.version,e)});function j_e(){return[...ka.keys()].sort(Fa.compareVersions)}a(j_e,"getSortedVersions");function Qk(e){let t=e[W_e],r=e[Q_e];return Fa.isEmptyOrZeroLength(t)||Fa.isEmptyOrZeroLength(r)?(Kk.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),Kk.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."),[]):[...ka.keys()].sort(Fa.compareVersions).filter(function(n){return Fa.compareVersions(n,t)>0&&Fa.compareVersions(n,r)<=0})}a(Qk,"getVersionsForUpgrade");function z_e(e){return Qk(e).length>0}a(z_e,"hasUpgradesRequired");function J_e(e){return Fa.isEmptyOrZeroLength(e)?null:ka.has(e)?ka.get(e):null}a(J_e,"getDirectiveByVersion");jk.exports={getSortedVersions:j_e,getDirectiveByVersion:J_e,getVersionsForUpgrade:Qk,hasUpgradesRequired:z_e}});var pm=T((Yye,e$)=>{"use strict";var X_e=require("util"),mb=require("chalk"),Z_e=require("os"),Jk=br(),ede=nr(),Tn=C(),Xk=Rk(),Tb=lg(),{UpgradeObject:zk}=Nk(),{forceDowngradePrompt:tde}=am(),rde=Fi(),fd=x(),Tl=K(),gb=Ln(),nde=(ge(),oe(Fe)),sde=pb(),ide=X_e.promisify(gb.setSchemaDataToGlobal),ode=ede.searchByValue,ade="info_id",cde="2.9.9",lde="3.0.0";async function ude(e){let t=new Xk.HdbInfoInsertObject(1,e,e),r=new Tb.InsertObject(Tn.OPERATIONS_ENUM.INSERT,Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Tn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return gb.setSchemaDataToGlobal(),Jk.insert(r)}a(ude,"insertHdbInstallInfo");async function Sb(e){let t,r=await Zk(),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 Xk.HdbInfoInsertObject(i,e,e);let o=new Tb.InsertObject(Tn.OPERATIONS_ENUM.INSERT,Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Tn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await ide(),Jk.insert(o)}a(Sb,"insertHdbUpgradeInfo");async function Zk(){let e=new Tb.NoSQLSeachObject(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ade,Tn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await ode(e))}catch(r){fd.info(r)}return t}a(Zk,"getAllHdbInfoRecords");async function _de(){let e=await Zk();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(_de,"getLatestHdbInfoRecord");async function dde(){fd.info("Checking if HDB software has been updated");try{let e=rde.version(),t=await _de(),r;if(Tl.isEmpty(t))r=cde;else if(r=t.data_version_num,Tl.compareVersions(r.toString(),e.toString())>0){if(!Tl.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(mb.yellow(`This instance's data was last run on version ${r}`)),console.error(mb.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.${Z_e.EOL}${Tn.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Tl.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(mb.yellow(`This instance's data was last run on version ${r}`)),await tde(new zk(r,e))?await Sb(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(gb.setSchemaDataToGlobal(),fde(r),e.toString()===r.toString())return;let n=new zk(r,e);if(sde.hasUpgradesRequired(n))return n;Tl.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await Sb(n.upgrade_version),fd.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw fd.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),fd.fatal(e),e}}a(dde,"getVersionUpdateInfo");function fde(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 ${Tn.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in nde.databases.system))throw console.log(t),new Error(t);if(!Tl.isEmpty(e)&&e<lde)throw console.log(t),new Error(t)}a(fde,"checkIfInstallIsSupported");e$.exports={insertHdbInstallInfo:ude,insertHdbUpgradeInfo:Sb,getVersionUpdateInfo:dde}});var i$=T((Wye,s$)=>{"use strict";var Rb=require("joi"),{boolean:Ede,string:t$,number:hde}=Rb.types(),r$=require("fs-extra"),Ed=C(),n$=require("path"),pde=rt();s$.exports=mde;function mde(e){let t=t$.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=Rb.object({[Ed.INSTALL_PROMPTS.ROOTPATH]:Rb.custom(Sde),[Ed.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:hde.min(0).allow("null",null),[Ed.INSTALL_PROMPTS.TC_AGREEMENT]:t$.valid("yes","YES","Yes"),[Ed.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Ed.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Ede});return pde.validateBySchema(e,r)}a(mde,"installValidator");function Sde(e,t){if(r$.existsSync(n$.join(e,"system/hdb_user/data.mdb"))||r$.existsSync(n$.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(Sde,"validateRootAvailable")});var a$=T((jye,o$)=>{"use strict";var{mkdirpSync:Tde}=require("fs-extra"),Ys=require("path"),gl=C(),Ob=x(),gde=Cn(),Ab=ri(),Rde=ze();o$.exports=Ade;async function Ade(e){Ob.trace("Mounting HarperDB"),ms(e),ms(Ys.join(e,"backup")),ms(Ys.join(e,"trash")),ms(Ys.join(e,"keys")),ms(Ys.join(e,"keys",gl.LICENSE_FILE_NAME)),ms(Ys.join(e,"log")),ms(Ys.join(e,"doc")),ms(Ys.join(e,"database")),ms(Ys.join(e,gl.TRANSACTIONS_DIR_NAME)),ms(Ys.join(e,"clustering","leaf")),ms(Ys.join(e,"components")),await Ode()}a(Ade,"mountHdb");async function Ode(){let e=hu(),t=Object.keys(Ab);for(let r=0;r<t.length;r++){let n=t[r],s=Ab[n].hash_attribute;try{Rde.initSystemSchemaPaths(gl.SYSTEM_SCHEMA_NAME,n);let i=new e(gl.SYSTEM_SCHEMA_NAME,n,s);i.attributes=Ab[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,await gde.createTable(n,i)}catch(i){throw Ob.error(`issue creating environment for ${gl.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(Ode,"createLMDBTables");function ms(e){Tde(e,{mode:gl.HDB_FILE_PERMISSIONS}),Ob.info(`Directory ${e} created`)}a(ms,"makeDirectory")});var Sm=T((Jye,S$)=>{"use strict";var bb=require("os"),_$=require("inquirer"),$n=require("fs-extra"),Nde=require("properties-reader"),$a=require("chalk"),Qs=require("path"),bde=require("human-readable-ids").hri,yde=require("ora"),Ide=require("yaml"),Ct=x(),Lo=X(),hd=K(),mm=Uo(),d$=pm(),f$=Fi(),re=C(),wde=i$(),Cde=a$(),yb=Et(),Lde=wr(),Dde=eh(),Pde=nb(),Mde=Ln(),Ude=require("util").promisify,vde=Ude(Mde.setSchemaDataToGlobal),Bde=dm(),Rl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),fr=a(e=>$a.magenta.bold(e),"HDB_PROMPT_MSG"),Hde="https://harperdb.io/legal/end-user-license-agreement",Do=bb.EOL,wo="",qde="yes",c$="Starting HarperDB install...",l$="HarperDB installation was successful.",u$="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Gde="An out of date version of HarperDB is already installed.",Nb="It appears that HarperDB is already installed. Exiting install...",xde="Aborting install",Fde=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])$/),kde=new RegExp(/^[^\s.,*>]+$/),$de=bb.homedir(),Vde=Qs.join($de,re.HDB_ROOT_DIR_NAME),Yde=9925,Kde="HDB_ADMIN",Wde="CLUSTER_USER",kr={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},Al=mm([re.INSTALL_PROMPTS.HDB_CONFIG]),Ws,E$=!1;S$.exports=h$;h$.createSuperUser=m$;async function h$(){console.log(fr(Do+c$+Do)),Ct.notify(c$);let e;Al[re.INSTALL_PROMPTS.HDB_CONFIG]&&(e=Qde());let t=zde();Object.assign(t,e);let r=wde(t);if(r)throw r.message;await Jde(),await Xde(t);let n=await jde(t);n[re.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT]&&(n[re.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]=null),Ws=n[re.INSTALL_PROMPTS.ROOTPATH],Al[re.INSTALL_PROMPTS.HDB_CONFIG]&&Qs.dirname(Al[re.INSTALL_PROMPTS.HDB_CONFIG])===Ws&&(E$=!0),!Al[re.INSTALL_PROMPTS.HDB_CONFIG]&&await $n.pathExists(Qs.join(Ws,re.HDB_CONFIG_FILE))&&(console.error(Nb),process.exit());let s=yde({prefixText:fr("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),hd.isEmpty(Ws))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Lo.setHdbBasePath(Ws),await Cde(Ws),await Zde(),await efe(n),Ct.initLogSettings(!0),await m$(n),await rfe(n),await Bde.generateKeys(),await nfe(),Pde(),s.stop(),console.log(fr(Do+l$+Do)),Ct.notify(l$)}a(h$,"install");function Qde(){let e=Ide.parseDocument($n.readFileSync(Al[re.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=yb.flattenConfig(e.toJSON());return t[re.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[re.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(Qde,"getConfigFromFile");async function jde(e){Ct.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Rl,when:Co(e[re.INSTALL_PROMPTS.ROOTPATH],kr.DESTINATION),name:re.INSTALL_PROMPTS.ROOTPATH,prefix:wo,default:Vde,validate:async s=>Ks(s)?Ks(s):await $n.pathExists(Qs.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,message:fr(kr.DESTINATION)},{type:"input",transformer:Rl,when:Co(e[re.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]??e[re.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT],kr.HDB_PORT),name:re.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:wo,default:Yde,validate:s=>Fde.test(s)?!0:"Invalid port.",message:fr(kr.HDB_PORT)},{type:"input",transformer:Rl,when:Co(e[re.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],kr.HDB_USERNAME),name:re.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:wo,default:Kde,validate:s=>Ks(s)?Ks(s):(t=s,!0),message:fr(kr.HDB_USERNAME)},{type:"password",when:Co(e[re.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],kr.HDB_PASS),name:re.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:wo,validate:s=>Ks(s)?Ks(s):!0,message:fr(kr.HDB_PASS)}];if(hd.autoCastBoolean(e[re.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Rl,when:Co(e[re.INSTALL_PROMPTS.CLUSTERING_NODENAME],kr.NODE_NAME),name:re.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:wo,default:bde.random(),validate:i=>kde.test(i)?!0:"Invalid node name, must not contain ., * or >",message:fr(kr.NODE_NAME)},{type:"input",transformer:Rl,when:Co(e[re.INSTALL_PROMPTS.CLUSTERING_USER],kr.CLUSTER_USERNAME),name:re.INSTALL_PROMPTS.CLUSTERING_USER,prefix:wo,default:Wde,validate:i=>Ks(i)?Ks(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:fr(kr.CLUSTER_USERNAME)},{type:"password",when:Co(e[re.INSTALL_PROMPTS.CLUSTERING_PASSWORD],kr.CLUSTER_PASS),name:re.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:wo,validate:i=>Ks(i)?Ks(i):!0,message:fr(kr.CLUSTER_PASS)}];r.push(...s)}let n=await _$.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(jde,"installPrompts");function Co(e,t){return e!==void 0?(t.includes("password")?(console.log(`${fr(t)} ${$a.gray("[hidden]")}`),Ct.trace(`${fr(t)} [hidden]`)):(console.log(`${fr(t)} ${e}`),Ct.trace(`${fr(t)} ${e}`)),!1):!0}a(Co,"displayCmdEnvVar");function Ks(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Ks,"checkForEmptyValue");function zde(){let e=Object.keys(re.INSTALL_PROMPTS),t=mm(e),r=mm(Object.keys(re.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=re.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(zde,"checkForPromptOverride");async function Jde(){Ct.trace("Checking for existing install.");let e=hd.getPropsFilePath(),t=await $n.pathExists(e),r;if(t){Ct.trace(`Install found an existing boot prop file at:${e}`);let n=Nde(e),s=yb.getConfigValue(re.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(re.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await $n.pathExists(s)}if(!t&&hd.noBootFile()&&(r=!0),r){if(Ct.trace(`Install found existing HDB config at:${e}`),await d$.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${f$.version()}. Exiting install...`;console.log(Do+$a.magenta.bold(Gde)),console.log($a.magenta.bold(s)),Ct.error(s)}else console.log(Do+$a.magenta.bold(Nb)),Ct.error(Nb);process.exit(0)}}a(Jde,"checkForExistingInstall");async function Xde(e){Ct.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Hde}${Do}and can be viewed by typing or copying and pasting the URL into your web browser.${Do}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:wo,transformer:Rl,when:Co(e[re.INSTALL_PROMPTS.TC_AGREEMENT],t),name:re.INSTALL_PROMPTS.TC_AGREEMENT,message:fr(t),validate:s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:$a.yellow("Please enter 'yes' or 'no'")},n=await _$.prompt([r]);n[re.INSTALL_PROMPTS.TC_AGREEMENT]&&n[re.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==qde&&(console.log($a.yellow(u$)),Ct.error(u$),process.exit(0))}a(Xde,"termsAgreement");async function Zde(){let e=Qs.join(Ws,re.HDB_CONFIG_FILE),t;try{t=bb.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}
104
+ install_user = ${t}`,n=hd.getHomeDir(),s=Qs.join(n,re.HDB_HOME_DIR_NAME),i=Qs.join(s,re.LICENSE_KEY_DIR_NAME);try{$n.mkdirpSync(s,{mode:re.HDB_FILE_PERMISSIONS}),$n.mkdirpSync(i,{mode:re.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${re.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Qs.join(s,re.BOOT_PROPS_FILE_NAME);try{await $n.writeFile(o,r)}catch(c){throw Ct.error(`There was an error creating the boot file at path: ${o}`),c}Lo.setProperty(re.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Lo.setProperty(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Lo.setProperty(Lo.BOOT_PROPS_FILE_PATH,o)}}a(Zde,"createBootPropertiesFile");async function efe(e){Ct.trace("Creating HarperDB config file");let t=mm(Object.keys(re.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{yb.createConfigFile(t),Lo.initSync()}catch(r){tfe(r)}}a(efe,"createConfigFile");function tfe(e){Ct.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(xde);let t=Qs.resolve(Lo.get(Lo.BOOT_PROPS_FILE_PATH),"../");t&&$n.removeSync(t),Ws&&(E$?$n.readdirSync(Ws,{withFileTypes:!0}).forEach(n=>{let s=Qs.join(n.path,n.name);s!==Al[re.INSTALL_PROMPTS.HDB_CONFIG]&&$n.removeSync(s)}):$n.removeSync(Ws)),process.exit(1)}a(tfe,"rollbackInstall");async function p$(e,t){Ct.trace("Creating admin user"),await vde();let r;try{r=await Dde.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 Lde.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(p$,"createAdminUser");async function m$(e){Ct.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[re.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[re.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await p$(t,r),delete e[re.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[re.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(m$,"createSuperUser");async function rfe(e){Ct.trace("Creating Cluster user.");let t;e[re.INSTALL_PROMPTS.CLUSTERING_USER]&&e[re.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[re.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[re.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await p$({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[re.INSTALL_PROMPTS.CLUSTERING_USER],delete e[re.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(rfe,"createClusterUser");async function nfe(){let e=f$.version();if(e)await d$.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(nfe,"insertHdbVersionInfo")});var R$=T((Zye,g$)=>{"use strict";var Ib=K(),gn=x(),T$=pb();g$.exports={processDirectives:sfe};async function sfe(e){console.log("Starting upgrade process...");let t=T$.getVersionsForUpgrade(e),r=afe(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;gn.notify(c),console.log(c);let l=[],_=[];try{l=ife(o.sync_functions)}catch(u){throw gn.error(`Error while running an upgrade script for ${o.version}`),u}try{_=await ofe(o.async_functions)}catch(u){throw gn.error(`Error while running an upgrade script for ${o.version}`),u}n.push(...l,..._)}return n}a(sfe,"processDirectives");function ife(e){if(Ib.isEmptyOrZeroLength(e))return gn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return gn.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(gn.info(`Running function ${r.name}`),!(r instanceof Function)){gn.info("Variable being processed is not a function");continue}let n=r();gn.info(n),t.push(n)}return t}a(ife,"runSyncFunctions");async function ofe(e){if(Ib.isEmptyOrZeroLength(e))return gn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return gn.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(gn.info(`Running function ${s.name}`),!(s instanceof Function)){gn.info("Variable being processed is not a function");continue}let i=await s();gn.info(i),t.push(i)}return t}a(ofe,"runAsyncFunctions");function afe(e){if(Ib.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=T$.getDirectiveByVersion(r);n&&t.push(n)}return t}a(afe,"getUpgradeDirectivesToInstall")});var Lb=T((tIe,I$)=>{"use strict";var Tm=X();Tm.initSync();var b$=require("chalk"),A$=require("fs-extra"),Pi=x(),Di=C(),O$=Fi(),cfe=R$(),wb=K(),y$=pm(),lfe=am(),N$=Wm(),ufe=Ln(),_fe=require("util").promisify,dfe=_fe(ufe.setSchemaDataToGlobal),Cb,{UPGRADE_VERSION:gm}=Di.UPGRADE_JSON_FIELD_NAMES_ENUM;I$.exports={upgrade:ffe};async function ffe(e){await dfe(),Cb===void 0&&(Cb=Vc()),A$.existsSync(Tm.get(Tm.BOOT_PROPS_FILE_PATH))||(pd("The hdb_boot_properties file was not found. Please install HDB.",Di.LOG_LEVELS.ERROR),process.exit(1)),A$.existsSync(Tm.get(Di.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(pd("The hdb settings file was not found. Please make sure HDB is installed.",Di.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await y$.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),pd(`This version of HarperDB is ${O$.version()}`,Di.LOG_LEVELS.INFO);let r=t[gm]?t[gm]:O$.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Di.HDB_SUPPORT_ADDRESS}`),Pi.notify("Missing new version field from upgrade info object"),process.exit(1)),await Efe();let n,s=0;try{n=await lfe.forceUpdatePrompt(t)}catch(i){Pi.error("There was an error when prompting user about upgrade."),Pi.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Pi.info(`Starting upgrade to version ${r}`),await hfe(t),pd(`HarperDB was successfully upgraded to version ${t[gm]}`,Di.LOG_LEVELS.INFO)}a(ffe,"upgrade");async function Efe(){let e=!1,t=await N$.findPs(Di.HDB_PROC_NAME);if(wb.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await N$.findPs("hdb_express");wb.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await Cb.list();wb.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(b$.red(r)),Pi.error(r),process.exit(1)}}a(Efe,"checkIfRunning");async function hfe(e){try{await cfe.processDirectives(e)}catch(t){throw pd("There was an error during the data upgrade. Please check the logs.",Di.LOG_LEVELS.ERROR),t}try{await y$.insertHdbUpgradeInfo(e[gm])}catch(t){Pi.error("Error updating the 'hdb_info' system table."),Pi.error(t)}}a(hfe,"runUpgrade");function pd(e,t=void 0){t||(t=Pi.info),Pi[t](e),console.log(b$.magenta(e))}a(pd,"printToLogAndConsole")});var P$=T((nIe,D$)=>{"use strict";var{promises:Pb,createReadStream:pfe,createWriteStream:mfe}=require("fs"),{createGzip:Sfe}=require("zlib"),{promisify:Tfe}=require("util"),{pipeline:gfe}=require("stream"),Rfe=Tfe(gfe),Afe=require("path"),Ya=X();Ya.initSync();var Va=x(),{CONFIG_PARAMS:md,ITC_EVENT_TYPES:Ofe}=C(),{onMessageFromWorkers:Nfe}=tt(),bfe=6e4,yfe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Ife="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",Db,C$;D$.exports=L$;Nfe(e=>{e.type===Ofe.RESTART&&(Ya.initSync(!0),clearInterval(C$),Ya.get(md.LOGGING_ROTATION_ENABLED)&&L$())});async function L$(){try{let e=Va.getLogFilePath(),t=Ya.get(md.LOGGING_ROTATION_MAXSIZE),r=Ya.get(md.LOGGING_ROTATION_INTERVAL);if(!t&&!r){Va.error(yfe);return}let n=Ya.get(md.LOGGING_ROTATION_PATH);if(!n){Va.error(Ife);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}Db=Date.now()/6e4,Va.trace("Log rotate enabled, maxSize:",t,"interval:",r),C$=setInterval(async()=>{if(s){let o;o=await Pb.stat(e),o.size>=s&&await w$(e,n)}i&&Date.now()/6e4-Db>=i&&(await w$(e,n),Db=Date.now()/6e4)},bfe).unref()}catch(e){Va.error(e)}}a(L$,"logRotator");async function w$(e,t){let r=Ya.get(md.LOGGING_ROTATION_COMPRESS),n=Afe.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await Rfe(pfe(e),Sfe(),mfe(n)),await Pb.unlink(e)):await Pb.rename(e,n),Va.closeLogFile(),Va.notify(`hdb.log rotated, old log moved to ${n}`)}a(w$,"moveLogFile")});var Ka=T((fIe,x$)=>{"use strict";var Rn=X();Rn.initSync();var iIe=Na(),qt=C(),zs=x(),Mi=require("fs-extra"),Po=require("path"),wfe=require("systeminformation"),Cfe=nb(),Lfe=Sm(),Mb=require("chalk"),Dfe=Bo(),Ui=K(),U$=Et(),v$=Uo(),M$=Dh(),Pfe=Lb(),Mfe=P$(),Ufe=require("minimist"),{PACKAGE_ROOT:vfe}=C(),{startHTTPThreads:Bfe,startSocketServer:oIe,mostIdleRouting:aIe,remoteAffinityRouting:cIe}=(zp(),oe(tb)),Hfe=pm(),{isMainThread:qfe}=require("worker_threads"),lIe=ri(),uIe=zi(),_Ie=LT(),dIe=hu(),Rm=C(),js,Ol,B$=!1,Gfe="Upgrade complete. Starting HarperDB.",xfe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",Ffe="HarperDB not found, starting install process.",kfe="There was an error during install, check install_log.log for more details. Exiting.",$fe="HarperDB successfully started.";function Vfe(){if(!B$){let e=a(()=>{Mi.removeSync(Po.join(Rn.get(qt.CONFIG_PARAMS.ROOTPATH),qt.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(Vfe,"addExitListeners");async function H$(e=!1,t=!1){if(console.log(Mb.magenta("Starting HarperDB...")),await G$()===!1){console.log(Ffe);try{await Lfe()}catch(o){console.error(kfe,o),zs.error(o),process.exit(1)}}let r,n=Ol?.service==="clustering";Ol?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Mi.readFile(Po.join(Rn.get(qt.CONFIG_PARAMS.ROOTPATH),qt.HDB_PID_FILE),"utf8")),c=await wfe.processes();for(let l of c.list)if(l.pid===o){n?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}js===void 0&&(js=Vc()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Rn.get(qt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await M$.generateNatsConfig(),await js.startClusteringProcesses(!0),process.exit()),Vfe(),await Mi.writeFile(Po.join(Rn.get(Rm.CONFIG_PARAMS.ROOTPATH),Rm.HDB_PID_FILE),`${process.pid}`),zs.info("HarperDB PID",process.pid);let s;try{let o=await Hfe.getVersionUpdateInfo();o!==void 0&&(s=o[qt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await Pfe.upgrade(o),console.log(Gfe))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`),zs.error(o)):(console.error(xfe),zs.error(o)),process.exit(1)}if(!e){let o=v$(Object.keys(qt.CONFIG_PARAM_MAP),!0);!Ui.isEmpty(o)&&!Ui.isEmptyOrZeroLength(Object.keys(o))&&U$.updateConfigValue(void 0,void 0,o,!0,!0)}Cfe(),Wfe(),Ui.autoCastBoolean(Rn.get(qt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&qfe&&await M$.generateNatsConfig(t)}a(H$,"initialize");async function Yfe(e=!1){try{Ol=Ufe(process.argv),Ol.ROOTPATH&&U$.updateConfigObject("settings_path",Po.join(Ol.ROOTPATH,qt.HDB_CONFIG_FILE)),await H$(e,!0);let t=process.env.IS_SCRIPTED_SERVICE&&!Ol.service;Ui.autoCastBoolean(Rn.get(qt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await js.startClusteringProcesses(),await js.startClusteringThreads()),await Bfe(process.env.DEV_MODE?1:Rn.get(Rm.CONFIG_PARAMS.THREADS_COUNT)??Rn.get(Rm.CONFIG_PARAMS.THREADS)),Rn.get(qt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await Mfe(),t||q$()}catch(t){console.error(t),zs.error(t),process.exit(1)}}a(Yfe,"main");function q$(){zs.suppressLogging(()=>{console.log(Mb.magenta(""+Mi.readFileSync(Po.join(vfe,"utility/install/ascii_logo.txt")))),console.log(Mb.magenta(`|------------- HarperDB ${Dfe.version} successfully started ------------|`))}),zs.notify($fe)}a(q$,"started");async function Kfe(e=!0){B$=!e;try{js===void 0&&(js=Vc()),js.enterPM2Mode(),await H$(),Ui.autoCastBoolean(Rn.get(qt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await js.startClusteringProcesses(),await js.startService(qt.PROCESS_DESCRIPTORS.HDB),q$(),e&&process.exit(0)}catch(t){console.error(t),zs.error(t),process.exit(1)}}a(Kfe,"launch");function Wfe(){let e=Po.join(Rn.getHdbBasePath(),qt.LICENSE_KEY_DIR_NAME,qt.LICENSE_FILE_NAME),t=Po.join(e,qt.LICENSE_FILE_NAME),r=Po.join(e,qt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=v$(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Ui.isEmpty(n)||Ui.isEmpty(s))return;Mi.mkdirpSync(e),Mi.writeFileSync(r,n),Mi.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),zs.error(s)}}a(Wfe,"writeLicenseFromVars");x$.exports={launch:Kfe,main:Yfe,isHdbInstalled:G$};async function G$(){try{await Mi.stat(Ui.getPropsFilePath()),await Mi.stat(Rn.get(qt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Ui.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw zs.error(`Error checking for HDB install - ${e}`),e}return!0}a(G$,"isHdbInstalled")});var Ub=T((hIe,$$)=>{"use strict";var Qfe=x(),jfe=C(),zfe=require("util"),Jfe=require("child_process"),F$=zfe.promisify(Jfe.exec),Xfe=di(),Sd=Vc(),k$="Stopping HarperDB.";$$.exports=Zfe;async function Zfe(){if(console.log(k$),Qfe.notify(k$),await Sd.isServiceRegistered(jfe.HDB_PROC_DESCRIPTOR)){Sd.enterPM2Mode();let r=await Sd.getUniqueServicesList();for(let n in r)await Sd.stop(n)}await Sd.kill();let t=await Xfe.getHDBProcessInfo();t.clustering.forEach(r=>{F$(`kill ${r.pid}`)}),t.core.forEach(r=>{F$(`kill ${r.pid}`)})}a(Zfe,"stop")});var Fb=T((mIe,X$)=>{"use strict";var eEe=require("os"),Om=require("https"),V$=require("http"),vi=require("fs-extra"),tEe=require("yaml"),rEe=require("human-readable-ids").hri,{pipeline:Y$}=require("stream/promises"),{createWriteStream:Nm,ensureDir:bm}=require("fs-extra"),{join:Ts}=require("path"),Gb=require("lodash"),nEe=require("minimist"),j$=X(),sEe=di(),z$=x(),gd=Et(),{restart:iEe}=Na(),oEe=Ub(),Bb=K(),K$=ht(),aEe=Ln(),{isHdbInstalled:cEe,main:J$,launch:lEe}=Ka(),uEe=Sm(),ym=C(),{SYSTEM_TABLE_NAMES:W$,SYSTEM_SCHEMA_NAME:_Ee,CONFIG_PARAMS:Td,OPERATIONS_ENUM:Er}=ym,dEe=9925,fEe="info",EEe=1e4,hEe="clone-node-config.yaml",xb=[W$.ROLE_TABLE_NAME,W$.USER_TABLE_NAME],$r={HDB_LEADER_USERNAME:"HDB_LEADER_USERNAME",HDB_LEADER_PASSWORD:"HDB_LEADER_PASSWORD",HDB_LEADER_URL:"HDB_LEADER_URL",HDB_LEADER_CLUSTERING_HOST:"HDB_LEADER_CLUSTERING_HOST",HDB_LEADER_CLUSTERING_PORT:"HDB_LEADER_CLUSTERING_PORT",HDB_FULLY_CONNECTED:"HDB_FULLY_CONNECTED",HDB_CLONE_OVERTOP:"HDB_CLONE_OVERTOP"},Qa=nEe(process.argv),Rd=Qa[$r.HDB_LEADER_USERNAME]??process.env[$r.HDB_LEADER_USERNAME],Ad=Qa[$r.HDB_LEADER_PASSWORD]??process.env[$r.HDB_LEADER_PASSWORD],Nl=Qa[$r.HDB_LEADER_URL]??process.env[$r.HDB_LEADER_URL],vb=Qa[$r.HDB_LEADER_CLUSTERING_HOST]??process.env[$r.HDB_LEADER_CLUSTERING_HOST],pEe=Qa[$r.HDB_LEADER_CLUSTERING_PORT]??process.env[$r.HDB_LEADER_CLUSTERING_PORT],mEe=(Qa[$r.HDB_FULLY_CONNECTED]??process.env[$r.HDB_FULLY_CONNECTED])==="true",Mo=(Qa[$r.HDB_CLONE_OVERTOP]??process.env[$r.HDB_CLONE_OVERTOP])==="true",Hb,Qe,St,Tt,yl,bl,An,Ss,qb;X$.exports=a(async function(t=!1){delete process.env.HDB_LEADER_URL;let r=await cEe();if(!Mo&&r)return console.info("HarperDB is already installed, clone will not be performed"),J$();if(Mo&&!r){console.info("No existing install of HarperDB found, cannot clone overtop");return}let n=Mo?`Cloning node ${Nl} overtop of existing HarperDB install`:`Cloning node: ${Nl}`;if(console.info(n),Mo)qb=gd.readConfigFile(),bl=qb.rootPath,await oEe();else try{bl=process.env.ROOTPATH?process.env.ROOTPATH:Ts(eEe.homedir(),ym.HDB_ROOT_DIR_NAME)}catch(i){throw console.error(i),new Error("There was an error setting default rootPath. Please set 'rootPath' in clone-node-config.yaml")}let s;try{s=Ts(bl,hEe),Qe=tEe.parseDocument(vi.readFileSync(s,"utf8"),{simpleKeys:!0}).toJSON()}catch{console.info(s+" not found, using default config values.")}yl=Qe?.clustering?.nodeName??rEe.random(),St=await Od({operation:Er.GET_CONFIGURATION}),St=await JSON.parse(St.body),process.env.HDB_FETCH==="true"?(await REe(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await gEe(),Mo||await TEe(),await SEe(),await AEe(),await OEe(t),console.info("Successfully cloned node: "+Nl),t&&process.exit()},"cloneNode");async function SEe(){console.info("Cloning configuration"),Hb=St?.clustering?.enabled;let e={[Td.ROOTPATH]:bl};if(Hb&&Qe?.clustering?.enabled!==!1){if(vb==null)throw new Error("'HDB_LEADER_CLUSTERING_HOST' must be defined");e[Td.CLUSTERING_ENABLED]=!0;let n=St?.clustering?.hubServer?.cluster?.network?.routes,s=parseInt(pEe)||St?.clustering?.hubServer?.cluster?.network?.port;e[Td.CLUSTERING_USER]=St?.clustering?.user;let i=j$.get(Td.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES);Array.isArray(i)?i.push({host:vb,port:s}):i=[{host:vb,port:s}],Array.isArray(n)&&(i=i.concat(n)),e[Td.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES]=i}let t=Qe?.componentConfig?.exclude;t=t?t.reduce((n,s)=>({...n,[s.name]:!0}),{}):[];for(let n in St)St[n]?.package&&!t[n]&&await gd.addConfig(n,St[n]);Qe?.databases&&await gd.addConfig("databases",St?.schemas);let r;Qe&&(r=gd.flattenConfig(Qe));for(let n in r){let s=ym.CONFIG_PARAM_MAP[n.toLowerCase()];s&&(e[s]=r[n])}e.rootPath==null&&delete e.rootPath,e?.clustering_nodeName==null&&(Mo?e.clustering_nodeName=qb?.clustering?.nodeName??yl:e.clustering_nodeName=yl),z$.info("Cloning config:",e),Gb.isEmpty(e)||gd.updateConfigValue(void 0,void 0,e,!1,!0)}a(SEe,"cloneConfig");async function TEe(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=bl,!Rd)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=Rd,!Ad)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=Ad,process.env.OPERATIONSAPI_NETWORK_PORT=Qe?.operationsApi?.network?.port??dEe,process.env.CLUSTERING_NODENAME=yl,process.env.CLUSTERING_LOGLEVEL=Qe?.clustering?.logLevel??fEe,await uEe()}a(TEe,"installHDB");async function gEe(){console.info("Cloning system database");let e=Wa("system");await bm(e);let t=Ts(e,"system.mdb"),r=Nm(t,{overwrite:!0}),n={operation:Er.GET_BACKUP,database:"system"};Mo||(n.tables=xb);let s=await Q$(n,r);if(await vi.utimes(t,Date.now(),new Date(s.date)),Tt=await Od({operation:Er.DESCRIBE_ALL}),Tt=await JSON.parse(Tt.body),An=Qe?.databaseConfig?.excludeDatabases,An=An?An.reduce((i,o)=>({...i,[o.database]:!0}),{}):{},St.schemas)for(let i in St.schemas)Object.keys(St.schemas[i]).includes("tables")&&(An[i]=!0,console.info(`Excluding database '${i}' from clone because leader node has custom pathing configured for one or more of its tables`));Ss=Qe?.databaseConfig?.excludeTables,Ss=Ss?Ss.reduce((i,o)=>({...i,[o.database==null?null:o.database+o.table]:!0}),{}):{};for(let i in Tt){if(An[i]){Tt[i]="excluded";continue}if(Gb.isEmpty(Tt[i]))continue;let o=[],c=!1;for(let E in Tt[i])Ss[i+E]?(c=!0,Tt[i][E]="excluded"):o.push(E);let l;c?(console.info(`Cloning database: ${i} tables: ${o}`),l={operation:Er.GET_BACKUP,database:i,tables:o}):(console.info(`Cloning database: ${i}`),l={operation:Er.GET_BACKUP,database:i});let _=Wa(i);await bm(_);let u=Ts(_,i+".mdb"),d=Nm(u,{overwrite:!0}),f=await Q$(l,d);await vi.utimes(u,Date.now(),new Date(f.date))}}a(gEe,"cloneTables");async function REe(){console.info("Cloning system database using fetch");let e={operation:Er.GET_BACKUP,database:"system"};Mo||(e.tables=xb);let t=await Am(e,!0),r=Wa("system");await bm(r);let n=Ts(r,"system.mdb");if(await Y$(t.body,Nm(n,{overwrite:!0})),await vi.utimes(n,Date.now(),new Date(t.headers.get("date"))),Tt=await Am({operation:Er.DESCRIBE_ALL}),Tt=await Tt.json(),An=Qe?.databaseConfig?.excludeDatabases,An=An?An.reduce((s,i)=>({...s,[i.database]:!0}),{}):{},St.schemas)for(let s in St.schemas)Object.keys(St.schemas[s]).includes("tables")&&(An[s]=!0,console.info(`Excluding database '${s}' from clone because leader node has custom pathing configured for one or more of its tables`));Ss=Qe?.databaseConfig?.excludeTables,Ss=Ss?Ss.reduce((s,i)=>({...s,[i.database==null?null:i.database+i.table]:!0}),{}):{};for(let s in Tt){if(An[s]){Tt[s]="excluded";continue}if(Gb.isEmpty(Tt[s]))continue;let i=[],o=!1;for(let f in Tt[s])Ss[s+f]?(o=!0,Tt[s][f]="excluded"):i.push(f);if(i.length===0)return;let c;o?(console.info(`Cloning database: ${s} tables: ${i}`),c=await Am({operation:Er.GET_BACKUP,database:s,tables:i},!0)):(console.info(`Cloning database: ${s}`),c=await Am({operation:Er.GET_BACKUP,database:s},!0));let l=Wa(s);await bm(l);let _=new Date(c.headers.get("date")),u=Ts(l,`${_.getTime()}-${s}.mdb`);await Y$(c.body,Nm(u,{overwrite:!0}));let d=Ts(l,s+".mdb");await vi.rename(u,d),await vi.utimes(d,Date.now(),_)}}a(REe,"cloneTablesFetch");async function Am(e,t=!1){let r=Qe?.httpsRejectUnauthorized??!1,n=new Om.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(Rd+":"+Ad).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(Nl,{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(Am,"leaderHttpReqFetch");function Wa(e){return Qe?.databases&&Qe?.databases[e]?.path||Qe?.storage&&Qe?.storage?.path||Ts(bl,"database")}a(Wa,"getDbFileDir");async function AEe(){let{deployComponent:e}=zh(),t=await Od({operation:Er.GET_COMPONENTS});t=await JSON.parse(t.body);let r=[];if(t.entries.length){for(let s of t.entries){if(!s.entries)continue;let i=!1;if(Qe?.componentConfig?.exclude){for(let o of Qe.componentConfig.exclude)if(o?.name!=null&&o.name===s.name){i=!0;break}}i||r.push(s.name)}let n=Qe?.componentConfig?.skipNodeModules!==!1;for(let s of r){console.info("Cloning component: "+s);let i=await Od({operation:Er.PACKAGE_COMPONENT,project:s,skip_node_modules:n}),{payload:o}=await JSON.parse(i.body);await e({payload:o,project:s})}}}a(AEe,"cloneComponents");async function OEe(e){if(!Hb)return;let t=await sEe.getHDBProcessInfo();t.clustering.length===0||t.core.length===0?e?await lEe(!1):await J$():(console.info(await iEe({operation:Er.RESTART})),await Bb.async_set_timeout(EEe)),console.info("Clustering cloned tables"),e&&await Bb.async_set_timeout(2e3);let r=Qe?.clusteringConfig?.subscribeToLeaderNode!==!1,n=Qe?.clusteringConfig?.publishToLeaderNode!==!1;await aEe.setSchemaDataToGlobalAsync();let s=d_(),i=await Od({operation:Er.CLUSTER_STATUS});i=await JSON.parse(i.body);let o=[],c=await vi.stat(Ts(Wa("system"),"system.mdb"));for(let _ of xb)o.push({schema:_Ee,table:_,subscribe:r,publish:n,start_time:c.mtime.toISOString()});for(let _ in Tt){if(Tt[_]==="excluded")continue;let u=await vi.stat(Ts(Wa(_),_+".mdb"));u.mtime.setSeconds(u.mtime.getSeconds()-10);for(let d in Tt[_])Tt[_][d]!=="excluded"&&o.push({schema:_,table:d,subscribe:r,publish:n,start_time:u.mtime.toISOString()})}await K$.createTableStreams(o),z$.info("Sending add_node request to node:",St?.clustering?.nodeName,"with subscriptions:",o);let l;if(mEe&&i.connections.length>0){let _=mh(),u=[{node_name:St?.clustering?.nodeName,subscriptions:o}],d=!1;yl=j$.get(ym.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let f of i.connections){if(f.node_name===yl)continue;let E={node_name:f.node_name,subscriptions:[]};for(let h of f.subscriptions){if(An[h.schema]||Ss[h.schema+h.table])continue;d=!0;let m=await vi.stat(Ts(Wa(h.schema),h.schema+".mdb"));m.mtime.setSeconds(m.mtime.getSeconds()-10),h.start_time=m.mtime.toISOString(),E.subscriptions.push(h)}u.push(E)}d&&(l=await _({operation:Er.CONFIGURE_CLUSTER,connections:u}),console.info(JSON.stringify(l)))}l||await s({operation:Er.ADD_NODE,node_name:St?.clustering?.nodeName,subscriptions:o},!0),await K$.closeConnection()}a(OEe,"clusterTables");async function Od(e){let t=new Om.Agent({rejectUnauthorized:Qe?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(Rd+":"+Ad).toString("base64"),"Content-Type":"application/json"},s=new URL(Nl),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 Bb.httpRequest(i,e)}a(Od,"leaderHttpReq");async function Q$(e,t){let r=new Om.Agent({rejectUnauthorized:Qe?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(Rd+":"+Ad).toString("base64"),"Content-Type":"application/json"},i=new URL(Nl),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:s};return i.protocol==="https:"&&(o.agent=r,V$=Om),i.port&&(o.port=i.port),new Promise((c,l)=>{let _=V$.request(o,u=>{u.statusCode!==200&&l("Request to leader node failed with code: "+u.statusCode),u.pipe(t),u.on("end",()=>{t.close(),c(u.headers)})});_.on("error",u=>{l(u)}),_.write(JSON.stringify(e)),_.end()})}a(Q$,"leaderHttpStream")});var eV=T((TIe,Z$)=>{var NEe=Sm(),bEe=x();Z$.exports=yEe;async function yEe(){try{await NEe()}catch(e){console.error("There was an error during the install."),console.error(e),bEe.error(e),process.exit(1)}}a(yEe,"install")});var nV=T((RIe,rV)=>{"use strict";var IEe=yh(),wEe=x(),tV="Registration failed.";async function CEe(){let e;try{e=await IEe.register()}catch(t){return wEe.error(`Registration error ${t}`),tV}return e||tV}a(CEe,"register");rV.exports={register:CEe}});var aV=T((OIe,oV)=>{"use strict";var $b=require("fs-extra"),Vb=require("path"),kb=require("yaml"),Nd=ht(),bd=C(),sV=et(),Yb=x(),LEe=wr(),DEe=Ah(),PEe=gh(),MEe=di(),iV=X(),{isHdbInstalled:UEe}=Ka();iV.initSync();var Vn={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},Vr={LEAF:"leaf server",HUB:"hub server"},Im;oV.exports=vEe;async function vEe(){let e={harperdb:{status:Vn.STOPPED}};if(!await UEe()){e.harperdb.status=Vn.NOT_INSTALLED,console.log(kb.stringify(e));return}Im=iV.get(bd.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await $b.readFile(Vb.join(Im,bd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===bd.NODE_ERROR_CODES.ENOENT){Yb.info("`harperdb status` did not find a hdb.pid file"),e.harperdb.status=Vn.STOPPED,console.log(kb.stringify(e));return}throw n}let r=await MEe.getHDBProcessInfo();for(let n of r.core)if(n.pid===t){e.harperdb.status=Vn.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await BEe(r),e.clustering[Vr.HUB].status===Vn.RUNNING&&e.clustering[Vr.LEAF].status===Vn.RUNNING){let n=[],s=await DEe({});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 PEe.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 Nd.closeConnection()}console.log(kb.stringify(e)),process.exit()}a(vEe,"status");async function BEe(e){let t={[Vr.HUB]:{},[Vr.LEAF]:{}};if(e.clustering.length===0)return t[Vr.HUB].status=Vn.STOPPED,t[Vr.LEAF].status=Vn.STOPPED,t;let{port:r}=Nd.getServerConfig(bd.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:n,decrypt_hash:s}=await LEe.getClusterUser();try{(await Nd.createConnection(r,n,s,!1)).close(),t[Vr.HUB].status=Vn.RUNNING}catch{t[Vr.HUB].status=Vn.ERRORED}let{port:i}=Nd.getServerConfig(bd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await Nd.createConnection(i,n,s,!1)).close(),t[Vr.LEAF].status=Vn.RUNNING}catch{t[Vr.LEAF].status=Vn.ERRORED}try{t[Vr.HUB].pid=Number.parseInt(await $b.readFile(Vb.join(Im,"clustering",sV.PID_FILES.HUB),"utf8"))}catch(o){Yb.error(o),t[Vr.HUB].pid=void 0}try{t[Vr.LEAF].pid=Number.parseInt(await $b.readFile(Vb.join(Im,"clustering",sV.PID_FILES.LEAF),"utf8"))}catch(o){Yb.error(o),t[Vr.LEAF].pid=void 0}return t}a(BEe,"getHubLeafStatus")});var ja=x(),HEe=Fi(),Kb=C(),wm=require("fs"),cV=require("path"),bIe=require("os"),{PACKAGE_ROOT:qEe}=C(),GEe=Dy(),yIe=(zp(),oe(tb)),lV=Sk(),{SERVICE_ACTIONS_ENUM:Yr}=Kb;xEe();function xEe(){let e=GEe();if(e)if(e.error){console.error(e.error),ja.error(e.error);return}else e.warn&&(console.warn(e.warn),ja.warn(e.warn));let t;wm.readdir(cV.join(qEe,"bin"),r=>{if(r)return ja.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let n=lV.buildRequest();n.operation&&(t=Yr.OPERATION);let s;switch(t){case Yr.OPERATION:ja.trace("calling cli operations with:",n),lV.cliOperations(n).then();break;case Yr.DEV:process.env.DEV_MODE=!0;case Yr.RUN:let i=process.argv[3];i&&i[0]!=="-"&&(wm.existsSync(i)||(console.error(`The folder ${i} does not exist`),process.exit(1)),wm.statSync(i).isDirectory()||(console.error(`The path ${i} is not a folder`),process.exit(1)),wm.existsSync(cV.join(i,Kb.HDB_CONFIG_FILE))?process.env.ROOTPATH=i:process.env.RUN_HDB_APP=i),Ka().main();break;case Yr.START:process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL")?Fb()(!0).catch(h=>{console.log(h)}):s=Ka().launch();break;case Yr.INSTALL:eV()().then(()=>Ka().main(!0)).catch(E=>{console.error(E)});break;case Yr.REGISTER:nV().register().then(E=>{console.log(E)}).catch(E=>{console.error(E)});break;case Yr.STOP:Ub()().then(()=>{process.exit(0)}).catch(E=>{console.error(E)});break;case Yr.RESTART:Na().restart({}).then().catch(E=>{ja.error(E),console.error(`There was an error restarting HarperDB. ${E}`),process.exit(1)});break;case Yr.VERSION:HEe.printVersion();break;case Yr.UPGRADE:ja.setLogLevel(Kb.LOG_LEVELS.INFO),Lb().upgrade(null).then(()=>{console.log("Your instance of HarperDB is up to date!")}).catch(E=>{ja.error(`Got an error during upgrade ${E}`)});break;case Yr.STATUS:aV()().then().catch(E=>{console.error(E)});break;case Yr.RENEWCERTS:let{generateKeys:f}=dm();f().then(()=>{console.log("Successfully renewed self-signed certificates")}).catch(()=>{console.error(r)});break;case void 0:process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL")?Fb()().catch(h=>{console.log(h)}):Ka().main();break;default:console.warn(`The "${t}" command is not understood.`);case Yr.HELP:console.log(`
105
105
  Usage: harperdb [command]
106
106
 
107
107
  With no command, harperdb will simply run HarperDB (in the foreground)
@@ -118,4 +118,4 @@ Commands:
118
118
  upgrade - Upgrade harperdb
119
119
  renew-certs - Generate a new set of self-signed certificates
120
120
  status - Print the status of HarperDB and clustering
121
- <api-operation> <parameter>=<value> - Run an API operation and return result to the CLI, not all operations are supported`)}})}a(UEe,"harperDBService");
121
+ <api-operation> <parameter>=<value> - Run an API operation and return result to the CLI, not all operations are supported`)}})}a(xEe,"harperDBService");