harperdb 4.3.0-beta.1 → 4.3.0-beta.3

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,21 +1,21 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var eV=Object.create;var Nl=Object.defineProperty;var tV=Object.getOwnPropertyDescriptor;var rV=Object.getOwnPropertyNames;var nV=Object.getPrototypeOf,sV=Object.prototype.hasOwnProperty;var a=(e,t)=>Nl(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)Nl(e,r,{get:t[r],enumerable:!0})},Ub=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of rV(t))!sV.call(e,s)&&s!==r&&Nl(e,s,{get:()=>t[s],enumerable:!(n=tV(t,s))||n.enumerable});return e};var H=(e,t,r)=>(r=e!=null?eV(nV(e)):{},Ub(t||!e||!e.__esModule?Nl(r,"default",{value:e,enumerable:!0}):r,e)),re=e=>Ub(Nl({},"__esModule",{value:!0}),e);var Hb=T((LEe,Bb)=>{var iV=require("fast-glob"),{statSync:Np,existsSync:bp,readFileSync:oV,writeFileSync:aV}=require("fs"),{spawnSync:cV,spawn:lV,execFileSync:CEe}=require("child_process"),{isMainThread:uV}=require("worker_threads"),{join:qi,relative:vb}=require("path"),{PACKAGE_ROOT:Wn}=C(),{tmpdir:_V,platform:dV}=require("os");require("source-map-support").install();var fV=["resources","server","dataLayer","components"],bl="ts-build",yp,EV=__filename.endsWith("tsBuild.js");if(EV){if(uV){let r;try{Np(qi(Wn,bl)),r=!0}catch{}if(r)for(let n of iV.sync(fV.map(s=>s+"/**/*.ts"),{cwd:Wn})){let s=0,i=0;try{s=Np(qi(Wn,n)).mtimeMs-5e3,i=Np(qi(Wn,bl,n.replace(/.ts$/,".js"))).mtimeMs}catch{}if(s>i){console.warn(`TypeScript ${n} is not compiled`+(i?` (TS source file was modified at ${new Date(s)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),yp=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),yp=!0;if(yp){let n=qi(Wn,"node_modules/.bin/tsc");dV()==="win32"&&(n+=".cmd");let s=cV(n,{cwd:Wn});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=qi(_V(),"harperdb-tsc.pid"),o;if(bp(i))try{process.kill(+oV(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=lV(n,["--watch"],{cwd:Wn,detached:!0,stdio:"ignore"});aV(i,c.pid.toString()),c.unref()}}}}let e=Bb.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(Wn)&&!n[0].includes("node_modules")){let i=vb(Wn,n[0]),o;i.startsWith(bl)?o=qi(Wn,vb(bl,i)):o=qi(Wn,bl,i);let c=qi(o,r),l=c+".js";if(bp(l))return l;if(c.includes(".")&&bp(c))return c}return t(r,n,s)}}});var C=T((MEe,Jb)=>{"use strict";var On=require("path"),hV=require("fs"),{relative:DEe,join:PEe}=On,{existsSync:mV}=hV;function pV(){let e=__dirname;for(;!mV(On.join(e,"package.json"));){let t=On.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(pV,"getHDBPackageRoot");var xi=pV(),qb="js",Id=qb,SV="harperdb-config.yaml",TV="defaultConfig.yaml",gV="hdb",xb=`harperdb.${Id}`,Fb=`customFunctionsServer.${Id}`,RV=`restartHdb.${Id}`,wp="HarperDB",yd="Custom Functions",wd="Clustering Hub",Cd="Clustering Leaf",AV="Clustering Ingest Service",OV="Clustering Reply Service",NV="foreground.pid",bV="hdb.pid",yV="data",IV={HDB:wp,CLUSTERING_HUB:wd,CLUSTERING_LEAF:Cd,CLUSTERING_INGEST_SERVICE:AV,CLUSTERING_REPLY_SERVICE:OV,CUSTOM_FUNCTIONS:yd,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"},wV={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},CV={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},LV={harperdb:wp,"clustering hub":wd,"clustering leaf":Cd,"custom functions":yd,custom_functions:yd,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},DV={CLUSTERING_HUB_PROC_DESCRIPTOR:wd,CLUSTERING_LEAF_PROC_DESCRIPTOR:Cd},Ip={HDB:On.join(xi,"server/harperdb"),CUSTOM_FUNCTIONS:On.join(xi,"server/customFunctions"),CLUSTERING_HUB:On.join(xi,"server/nats"),CLUSTERING_LEAF:On.join(xi,"server/nats")},PV={HDB:On.join(Ip.HDB,xb),CUSTOM_FUNCTIONS:On.join(Ip.CUSTOM_FUNCTIONS,Fb)},MV={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:On.join(xi,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:On.join(xi,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:On.join(xi,"launchServiceScripts/launchUpdateNodes4-0-0.js")},UV={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Gb="support@harperdb.io",vV="customer-success@harperdb.io",kb=1,BV=4141,$b="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",HV="https://www.harperdb.io/product",qV=`For support, please submit a request at ${$b} or contact ${Gb}`,Vb=`For license support, please contact ${vV}`,xV="None of the specified records were found.",FV="hash attribute not found",GV=`Your current license only supports ${kb} role. ${Vb}`,kV="Your current license only supports 3 connections to a node.",$V="127.0.0.1",VV=1,YV=/^\.$/,KV=/^\.\.$/,WV="U+002E",QV=/\//g,jV="U+002F",zV=/U\+002F/g,JV=/^U\+002E$/,XV=/^U\+002EU\+002E$/,ZV="d",eY=999999,tY="*",rY="--max-old-space-size=",nY="system",sY="__hdb_hash",iY=".harperdb",oY=".hdb",aY="keys",cY="hdb_boot_properties.file",lY=".updateConfig.json",uY="SIGTSTP",_Y=24,dY=6e4,fY=448,EY="blob",hY="trash",mY="database",pY="schema",SY="transactions",TY=".count",gY="id",RY="PROCESS_NAME",Yb={SETTINGS_PATH_KEY:"settings_path"},Kb=require("lodash"),AY={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"},OY={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},NY={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},bY={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"},yY={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"},Qr="hdb_internal:",IY={CREATE_SCHEMA:Qr+"create_schema",CREATE_TABLE:Qr+"create_table",CREATE_ATTRIBUTE:Qr+"create_attribute",ADD_USER:Qr+"add_user",ALTER_USER:Qr+"alter_user",DROP_USER:Qr+"drop_user",HDB_NODES:Qr+"hdb_nodes",HDB_USERS:Qr+"hdb_users",HDB_WORKERS:Qr+"hdb_workers",CATCHUP:Qr+"catchup",SCHEMA_CATCHUP:Qr+"schema_catchup",WORKER_ROOM:Qr+"cluster_workers"},wY={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"},CY="060493.ks",LY=".license",DY={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},X={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"},PY={CSV:".csv",JSON:".json"},MY={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},UY={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},yl={};yl[X.INSERT]=X.INSERT;yl[X.UPDATE]=X.UPDATE;yl[X.UPSERT]=X.UPSERT;yl[X.DELETE]=X.DELETE;var xe=Object.create(null);xe[X.DESCRIBE_ALL]=X.DESCRIBE_ALL;xe[X.DESCRIBE_TABLE]=X.DESCRIBE_TABLE;xe[X.DESCRIBE_SCHEMA]=X.DESCRIBE_SCHEMA;xe[X.READ_LOG]=X.READ_LOG;xe[X.ADD_NODE]=X.ADD_NODE;xe[X.LIST_USERS]=X.LIST_USERS;xe[X.LIST_ROLES]=X.LIST_ROLES;xe[X.USER_INFO]=X.USER_INFO;xe[X.SQL]=X.SQL;xe[X.GET_JOB]=X.GET_JOB;xe[X.SEARCH_JOBS_BY_START_DATE]=X.SEARCH_JOBS_BY_START_DATE;xe[X.DELETE_FILES_BEFORE]=X.DELETE_FILES_BEFORE;xe[X.EXPORT_LOCAL]=X.EXPORT_LOCAL;xe[X.EXPORT_TO_S3]=X.EXPORT_TO_S3;xe[X.CLUSTER_STATUS]=X.CLUSTER_STATUS;xe[X.REMOVE_NODE]=X.REMOVE_NODE;xe[X.RESTART]=X.RESTART;xe[X.CUSTOM_FUNCTIONS_STATUS]=X.CUSTOM_FUNCTIONS_STATUS;xe[X.GET_CUSTOM_FUNCTIONS]=X.GET_CUSTOM_FUNCTIONS;xe[X.GET_CUSTOM_FUNCTION]=X.GET_CUSTOM_FUNCTION;xe[X.SET_CUSTOM_FUNCTION]=X.SET_CUSTOM_FUNCTION;xe[X.DROP_CUSTOM_FUNCTION]=X.DROP_CUSTOM_FUNCTION;xe[X.ADD_CUSTOM_FUNCTION_PROJECT]=X.ADD_CUSTOM_FUNCTION_PROJECT;xe[X.DROP_CUSTOM_FUNCTION_PROJECT]=X.DROP_CUSTOM_FUNCTION_PROJECT;xe[X.PACKAGE_CUSTOM_FUNCTION_PROJECT]=X.PACKAGE_CUSTOM_FUNCTION_PROJECT;xe[X.DEPLOY_CUSTOM_FUNCTION_PROJECT]=X.DEPLOY_CUSTOM_FUNCTION_PROJECT;var vY={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"},BY={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Wb={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"},HY=Kb.invert(Wb),qY={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"},L={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",MAXHEAPMEMORY:"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",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_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"},Qb={settings_path:Yb.SETTINGS_PATH_KEY,hdb_root_key:L.ROOTPATH,hdb_root:L.ROOTPATH,rootpath:L.ROOTPATH,server_port_key:L.OPERATIONSAPI_NETWORK_PORT,server_port:L.OPERATIONSAPI_NETWORK_PORT,cert_key:L.TLS_CERTIFICATE,certificate:L.TLS_CERTIFICATE,private_key_key:L.TLS_PRIVATEKEY,private_key:L.TLS_PRIVATEKEY,http_secure_enabled_key:L.OPERATIONSAPI_NETWORK_HTTPS,https_on:L.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:L.OPERATIONSAPI_NETWORK_CORS,cors_on:L.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:L.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:L.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:L.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:L.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:L.LOGGING_LEVEL,log_level:L.LOGGING_LEVEL,log_path_key:L.LOGGING_ROOT,log_path:L.LOGGING_ROOT,clustering_node_name_key:L.CLUSTERING_NODENAME,node_name:L.CLUSTERING_NODENAME,clustering_enabled_key:L.CLUSTERING_ENABLED,clustering:L.CLUSTERING_ENABLED,max_http_threads:L.THREADS,max_hdb_processes:L.THREADS,server_timeout_key:L.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:L.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:L.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:L.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:L.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:L.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:L.LOGGING_AUDITLOG,disable_transaction_log:L.LOGGING_AUDITLOG,operation_token_timeout_key:L.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:L.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:L.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:L.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:L.HTTP_PORT,custom_functions_port:L.HTTP_PORT,custom_functions_directory_key:L.COMPONENTSROOT,custom_functions_directory:L.COMPONENTSROOT,max_custom_function_processes:L.THREADS,log_to_file:L.LOGGING_FILE,log_to_stdstreams:L.LOGGING_STDSTREAMS,local_studio_on:L.LOCALSTUDIO_ENABLED,clustering_port:L.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:L.CLUSTERING_USER,clustering_enabled:L.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:L.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:L.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:L.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:L.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:L.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:L.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:L.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:L.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:L.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:L.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:L.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:L.CLUSTERING_NODENAME,clustering_tls_certificate:L.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:L.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:L.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:L.CLUSTERING_TLS_INSECURE,clustering_tls_verify:L.CLUSTERING_TLS_VERIFY,clustering_loglevel:L.CLUSTERING_LOGLEVEL,clustering_republishmessages:L.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:L.CLUSTERING_DATABASELEVEL,customfunctions_network_port:L.HTTP_PORT,customfunctions_tls_certificate:L.TLS_CERTIFICATE,customfunctions_network_cors:L.HTTP_CORS,customfunctions_network_corsaccesslist:L.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:L.HTTP_HEADERSTIMEOUT,customfunctions_network_https:L.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:L.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:L.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:L.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:L.HTTP_TIMEOUT,http_threads:L.THREADS,threads:L.THREADS,maxheapmemory:L.MAXHEAPMEMORY,http_session_affinity:L.HTTP_SESSIONAFFINITY,http_compressionthreshold:L.HTTP_COMPRESSIONTHRESHOLD,http_cors:L.HTTP_CORS,http_corsaccesslist:L.HTTP_CORSACCESSLIST,http_headerstimeout:L.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:L.HTTP_KEEPALIVETIMEOUT,http_timeout:L.HTTP_TIMEOUT,http_port:L.HTTP_PORT,http_secureport:L.HTTP_SECUREPORT,customfunctions_processes:L.THREADS,customfunctions_root:L.COMPONENTSROOT,localstudio_enabled:L.LOCALSTUDIO_ENABLED,logging_file:L.LOGGING_FILE,logging_level:L.LOGGING_LEVEL,logging_root:L.LOGGING_ROOT,logging_rotation_enabled:L.LOGGING_ROTATION_ENABLED,logging_rotation_compress:L.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:L.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:L.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:L.LOGGING_ROTATION_PATH,logging_stdstreams:L.LOGGING_STDSTREAMS,logging_auditlog:L.LOGGING_AUDITLOG,logging_auditretention:L.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:L.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:L.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:L.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:L.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:L.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:L.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:L.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:L.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:L.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:L.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:L.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:L.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:L.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:L.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:L.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:L.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:L.ROOTPATH,databases:L.DATABASES,storage_path:L.STORAGE_PATH,ignorescripts:L.IGNORE_SCRIPTS,mqtt_network_port:L.MQTT_NETWORK_PORT,mqtt_websocket:L.MQTT_WEBSOCKET,mqtt_network_secureport:L.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:L.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:L.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:L.MQTT_NETWORK_MTLS_USER,mqtt_requireauthentication:L.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:L.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:L.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:L.AUTHENTICATION_CACHETTL,authentication_enablesessions:L.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:L.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:L.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:L.COMPONENTSROOT,tls_certificate:L.TLS_CERTIFICATE,tls_privatekey:L.TLS_PRIVATEKEY,tls_certificateauthority:L.TLS_CERTIFICATEAUTHORITY,tls_ciphers:L.TLS_CIPHERS};for(let e in L){let t=L[e];Qb[t.toLowerCase()]=t}var xY={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},FY={csv_file_load:"csv_file_load",csv_data_load:X.CSV_DATA_LOAD,csv_url_load:X.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"},GY={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"},kY={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},$Y={VERSION_DEFAULT:"2.2.0"},VY={DEVELOPMENT:8192,DEFAULT:512},YY={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"},KY={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"},WY={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},jb={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},QY=Symbol("metadata"),jY="__clustering__",zY=Object.values(jb),JY=15984864e5,zb={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},XY=Kb.invert(zb),ZY={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"},e1=111,t1=`\r
3
- `,r1={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},n1=["*","%"],s1="unauthorized_access",i1="func_val",o1={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"},c1={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"},l1={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},u1={HTTP:"http"},_1={STOPPED:"stopped",ONLINE:"online"},d1="3.x.x",f1={SUCCESS:"success",FAILURE:"failure"},E1={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};Jb.exports={LOCAL_HARPERDB_OPERATIONS:xe,HDB_SUPPORT_ADDRESS:Gb,HDB_SUPPORT_URL:$b,HDB_PRICING_URL:HV,SUPPORT_HELP_MSG:qV,LICENSE_HELP_MSG:Vb,HDB_PROC_NAME:xb,HDB_PROC_DESCRIPTOR:wp,CLUSTERING_LEAF_PROC_DESCRIPTOR:Cd,CLUSTERING_HUB_PROC_DESCRIPTOR:wd,SYSTEM_SCHEMA_NAME:nY,HASH_FOLDER_NAME:sY,HDB_HOME_DIR_NAME:iY,UPDATE_FILE_NAME:lY,LICENSE_KEY_DIR_NAME:aY,BOOT_PROPS_FILE_NAME:cY,JOB_TYPE_ENUM:FY,JOB_STATUS_ENUM:DY,SYSTEM_TABLE_NAMES:bY,SYSTEM_TABLE_HASH_ATTRIBUTES:yY,OPERATIONS_ENUM:X,VALID_S3_FILE_TYPES:PY,S3_BUCKET_AUTH_KEYS:MY,VALID_SQL_OPS_ENUM:UY,GEO_CONVERSION_ENUM:BY,HDB_SETTINGS_NAMES:Wb,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:HY,SERVICE_ACTIONS_ENUM:vY,CLUSTER_MESSAGE_TYPE_ENUM:GY,CLUSTER_CONNECTION_DIRECTION_ENUM:kY,CLUSTER_EVENTS_DEFS_ENUM:YY,PERIOD_REGEX:YV,DOUBLE_PERIOD_REGEX:KV,UNICODE_PERIOD:WV,FORWARD_SLASH_REGEX:QV,UNICODE_FORWARD_SLASH:jV,ESCAPED_FORWARD_SLASH_REGEX:zV,ESCAPED_PERIOD_REGEX:JV,ESCAPED_DOUBLE_PERIOD_REGEX:XV,REG_KEY_FILE_NAME:CY,RESTART_TIMEOUT_MS:dY,HDB_FILE_PERMISSIONS:fY,DATABASES_DIR_NAME:mY,LEGACY_DATABASES_DIR_NAME:pY,TRANSACTIONS_DIR_NAME:SY,LIMIT_COUNT_NAME:TY,ID_ATTRIBUTE_STRING:gY,INSERT_MODULE_ENUM:OY,UPGRADE_JSON_FIELD_NAMES_ENUM:NY,RESTART_CODE:uY,RESTART_CODE_NUM:_Y,CLUSTER_OPERATIONS:yl,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:wY,HDB_INTERNAL_SC_CHANNEL_PREFIX:Qr,INTERNAL_SC_CHANNELS:IY,CLUSTERING_MESSAGE_TYPES:ZY,HDB_FILE_SUFFIX:oY,BLOB_FOLDER_NAME:EY,HDB_TRASH_DIR:hY,ORIGINATOR_SET_VALUE:e1,LICENSE_VALUES:$Y,RAM_ALLOCATION_ENUM:VY,TIME_STAMP_NAMES_ENUM:jb,TIME_STAMP_NAMES:zY,PERMS_UPDATE_RELEASE_TIMESTAMP:JY,SEARCH_NOT_FOUND_MESSAGE:xV,SEARCH_ATTRIBUTE_NOT_FOUND:FV,LICENSE_ROLE_DENIED_RESPONSE:GV,LICENSE_MAX_CONNS_REACHED:kV,BASIC_LICENSE_MAX_NON_CU_ROLES:kb,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:BV,VALUE_SEARCH_COMPARATORS:zb,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:XY,LICENSE_FILE_NAME:LY,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:KY,NEW_LINE:t1,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:VV,MOMENT_DAYS_TAG:ZV,API_TURNOVER_SEC:eY,LOOPBACK:$V,CODE_EXTENSION:Id,WILDCARD_SEARCH_VALUE:tY,NODE_ERROR_CODES:WY,JAVASCRIPT_EXTENSION:qb,PERMS_CRUD_ENUM:r1,UNAUTHORIZED_PERMISSION_NAME:s1,SEARCH_WILDCARDS:n1,FUNC_VAL:i1,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:o1,JWT_ENUM:a1,CLUSTERING_FLAG:jY,ITC_EVENT_TYPES:c1,CUSTOM_FUNCTION_PROC_NAME:Fb,CUSTOM_FUNCTION_PROC_DESCRIPTOR:yd,SERVICES:l1,THREAD_TYPES:u1,MEM_SETTING_KEY:rY,HDB_RESTART_SCRIPT:RV,PROCESS_DESCRIPTORS:IV,SERVICE_SERVERS:PV,SERVICE_SERVERS_CWD:Ip,PROCESS_DESCRIPTORS_VALIDATE:LV,LAUNCH_SERVICE_SCRIPTS:MV,LOG_LEVELS:CV,PROCESS_NAME_ENV_PROP:RY,LOG_NAMES:wV,PM2_PROCESS_STATUSES:_1,CONFIG_PARAM_MAP:Qb,CONFIG_PARAMS:L,HDB_CONFIG_FILE:SV,HDB_DEFAULT_CONFIG_FILE:TV,ROLE_TYPES_ENUM:UV,BOOT_PROP_PARAMS:Yb,INSTALL_PROMPTS:AY,HDB_ROOT_DIR_NAME:gV,CLUSTERING_PROCESSES:DV,FOREGROUND_PID_FILE:NV,PACKAGE_ROOT:xi,PRE_4_0_0_VERSION:d1,DATABASES_PARAM_CONFIG:xY,METADATA_PROPERTY:QY,AUTH_AUDIT_STATUS:f1,AUTH_AUDIT_TYPES:E1,HDB_PID_FILE:bV,DEFAULT_DATABASE_NAME:yV,LEGACY_CONFIG_PARAMS:qY};Hb()});var Do=T((vEe,ey)=>{"use strict";var Xb=require("minimist");ey.exports=h1;function h1(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=Zb(process.env),n=Zb(Xb(process.argv))):(r=process.env,n=Xb(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(h1,"assignCMDENVVariables");function Zb(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(Zb,"objKeysToLowerCase")});var F=T((HEe,vp)=>{"use strict";var Po=require("fs-extra"),{workerData:m1,threadId:p1}=require("worker_threads"),Xs=require("path"),ny=require("yaml"),sy=require("properties-reader"),Pt=C(),ty=Do(),S1=require("os"),{PACKAGE_ROOT:Lp}=C(),{_assignPackageExport:T1}=require("../index"),wl={};for(let e in console)wl[e]||(wl[e]=console[e]);var fr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},iy={STDOUT:"stdOut",STDERR:"stdErr"},g1=Xs.join(Lp,"logs"),R1=Xs.join(Lp,"config/yaml/",Pt.HDB_DEFAULT_CONFIG_FILE),A1=1e4,Js,Ts,dr,Ld,Dd,Cl,Ja,Il;Il===void 0&&oy();vp.exports={notify:ly,fatal:uy,error:Ll,warn:Up,info:Pd,debug:Mp,trace:Pp,setLogLevel:C1,log_level:dr,loggerWithTag:O1,suppressLogging:N1,initLogSettings:oy,setupConsoleLogging:ay,logCustomLevel:I1,closeLogFile:Dp,getLogFilePath:()=>Cl,OUTPUTS:iy,AuthAuditLog:P1};T1("logger",vp.exports);function oy(e=!1){try{if(Il===void 0||e){Dp();let t=w1(),r=ty(["ROOTPATH"]);try{Il=sy(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Po.pathExistsSync(Xs.join(r.ROOTPATH,Pt.HDB_CONFIG_FILE)))throw n}({level:dr,config_log_path:Dd,to_file:Js,to_stream:Ts}=L1(r.ROOTPATH?Xs.join(r.ROOTPATH,Pt.HDB_CONFIG_FILE):Il.get("settings_path"))),Ld=Pt.LOG_NAMES.HDB,Cl=Xs.join(Dd,Ld)}}catch(t){if(Il=void 0,t.code===Pt.NODE_ERROR_CODES.ENOENT){let r=ty(Object.keys(Pt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Pt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Pt.CONFIG_PARAMS.LOGGING_LEVEL){dr=l;continue}if(c===Pt.CONFIG_PARAMS.LOGGING_STDSTREAMS){Ts=l;continue}c===Pt.CONFIG_PARAMS.LOGGING_FILE&&(Js=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=D1();Js=Js===void 0?s:Js,Js=ry(Js),Ts=Ts===void 0?i:Ts,Ts=ry(Ts),dr=dr===void 0?n:dr,Dd=g1,Ld=Pt.LOG_NAMES.INSTALL,Cl=Xs.join(Dd,Ld);return}throw Ll("Error initializing log settings"),Ll(t),t}process.env.DEV_MODE&&(Ts=!0),ay()}a(oy,"initLogSettings");var Cp=!0;function ay(){za("error",Ll),za("warn",Up),za("log",Pd),za("info",Pd),za("debug",Mp),za("trace",Pp)}a(ay,"setupConsoleLogging");function za(e,t){console[e]=function(...r){if(Cp&&t(...r),!/PM2 log:|App \[/.test(r[0]))return wl[e](...r)}}a(za,"logConsole");function O1(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(ly),fatal:r(uy),error:r(Ll),warn:r(Up),info:r(Pd),debug:r(Mp),trace:r(Pp)};function r(n){return function(...s){return n(t,...s)}}}a(O1,"loggerWithTag");function N1(e){try{Cp=!1,e()}finally{Cp=!0}}a(N1,"suppressLogging");var b1=m1?.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||b1+"/"+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 Dl(e){Js&&cy(e),Ts&&process.stdout.write(e)}a(Dl,"logStdOut");function Md(e){Js&&cy(e),Ts&&process.stderr.write(e)}a(Md,"logStdErr");function cy(e){y1(),Ja?Po.appendFileSync(Ja,e):wl.log(e)}a(cy,"logToFile");function Dp(){try{Po.closeSync(Ja)}catch{}Ja=null}a(Dp,"closeLogFile");function y1(){if(!Ja){try{if(!Cl)debugger;Ja=Po.openSync(Cl,"a")}catch(e){wl.error(e)}setTimeout(()=>{Dp()},A1).unref()}}a(y1,"openLogFile");function Pd(...e){fr[dr]<=fr.info&&Dl(Zs("info",e))}a(Pd,"info");function Pp(...e){fr[dr]<=fr.trace&&Dl(Zs("trace",e))}a(Pp,"trace");function Ll(...e){fr[dr]<=fr.error&&Md(Zs("error",e))}a(Ll,"error");function Mp(...e){fr[dr]<=fr.debug&&Dl(Zs("debug",e))}a(Mp,"debug");function ly(...e){fr[dr]<=fr.notify&&Dl(Zs("notify",e))}a(ly,"notify");function uy(...e){fr[dr]<=fr.fatal&&Md(Zs("fatal",e))}a(uy,"fatal");function Up(...e){fr[dr]<=fr.warn&&Md(Zs("warn",e))}a(Up,"warn");function I1(e,t,...r){t===iy.STDERR?Md(Zs(e,r)):Dl(Zs(e,r))}a(I1,"logCustomLevel");function w1(){let e;try{e=S1.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Xs.join(e,Pt.HDB_HOME_DIR_NAME,Pt.BOOT_PROPS_FILE_NAME);return Po.existsSync(t)||(t=Xs.join(Lp,"utility/hdb_boot_properties.file")),t}a(w1,"getPropsFilePath");function C1(e){dr=e}a(C1,"setLogLevel");function ry(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(ry,"autoCastBoolean");function L1(e){try{if(e.includes("config/settings.js")){let o=sy(e);return{level:o.get(Pt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Xs.dirname(o.get(Pt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Pt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Pt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=ny.parseDocument(Po.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===Pt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(L1,"getLogConfig");function D1(){try{let e=ny.parseDocument(Po.readFileSync(R1,"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(D1,"getDefaultConfig");function P1(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(P1,"AuthAuditLog")});var Mo=T((xEe,M1)=>{M1.exports={name:"harperdb",version:"4.3.0-beta.1",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.9.3-beta.3-debug",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.0",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((FEe,_y)=>{"use strict";_y.exports={version:U1,printVersion:v1};var Ud=Mo();function U1(){if(Ud)return Ud.version}a(U1,"version");function v1(){Ud&&console.log(`HarperDB Version ${Ud.version}`)}a(v1,"printVersion")});var Ey=T((kEe,fy)=>{"use strict";var dy=require("semver/functions/major"),B1=Mo(),Bp=process.versions&&process.versions.node?process.versions.node:void 0;fy.exports=H1;function H1(){let e=B1.engines["minimum-node"];if(Bp&&dy(Bp)<dy(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${Bp}. Please install a version of Node.js that is withing the defined range.`}}a(H1,"checkNodeVersion")});var Uo={};$e(Uo,{server:()=>ft});var hy,ft,Er=Ne(()=>{hy=require("../index"),ft={};(0,hy._assignPackageExport)("server",ft)});var Hp=T((VEe,my)=>{"use strict";var q1=require("util"),x1=require("path"),F1=require("child_process"),G1=q1.promisify(F1.execFile),k1=1e3*1e3*10;my.exports={findPs:$1};async function $1(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await G1("ps",["wwxo",`pid,${r}`],{maxBuffer:k1});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:x1.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($1,"findPs")});var Et=T((KEe,Sy)=>{"use strict";var V1="__dbis__",Y1="__txns__",K1="__environment_name__",W1="__dbi_defintion__",Q1={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"},j1=["__createdtime__","__updatedtime__"],z1="\uFFFF",py={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},J1=Object.values(py);Sy.exports={AUDIT_STORE_NAME:Y1,INTERNAL_DBIS_NAME:V1,DBI_DEFINITION_NAME:W1,SEARCH_TYPES:Q1,TIMESTAMP_NAMES:j1,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:K1,TRANSACTIONS_DBI_NAMES_ENUM:py,TRANSACTIONS_DBIS:J1,OVERFLOW_MARKER:z1}});var jr=T((WEe,Iy)=>{"use strict";var Ty=C(),gy=Et(),Ry={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},Ay=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Oy={500:Ay("There was an error processing your request."),400:"Invalid request"},X1=Oy[Ry.INTERNAL_SERVER_ERROR],Z1={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.`},eK={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},tK={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"},rK={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 ${gy.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${gy.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"},nK={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Ty.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 ${Ty.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"},Ny={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"},sK={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."},iK={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`},oK={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."},cK={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`},by={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.`},yy={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}`},lK={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."},uK={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},_K={...Ny,...tK,...Z1,...sK,...iK,...oK,...aK,...cK,...nK,...by,...yy,...lK,...uK,...eK};Iy.exports={CHECK_LOGS_WRAPPER:Ay,HDB_ERROR_MSGS:_K,DEFAULT_ERROR_MSGS:Oy,DEFAULT_ERROR_RESP:X1,HTTP_STATUS_CODES:Ry,LMDB_ERRORS_ENUM:rK,AUTHENTICATION_ERROR_MSGS:Ny,VALIDATION_ERROR_MSGS:by,ITC_ERRORS:yy}});var te=T((jEe,Ly)=>{"use strict";var Xa=jr(),dK=F(),fK=C(),vd=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,wy),this.statusCode=n||Xa.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Xa.DEFAULT_ERROR_MSGS[n]?Xa.DEFAULT_ERROR_MSGS[n]:Xa.DEFAULT_ERROR_MSGS[Xa.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&&dK[s](i)}},qp=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}},xp=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function wy(e,t,r,n=fK.LOG_LEVELS.ERROR,s=null,i=!1){if(Cy(e))return e;let o=new vd(e,t,r,n,s);return i&&delete o.stack,o}a(wy,"handleHDBError");function Cy(e){return e.__proto__.constructor.name===vd.name}a(Cy,"isHDBError");Ly.exports={isHDBError:Cy,handleHDBError:wy,ClientError:qp,ServerError:xp,hdb_errors:Xa}});var Xe=T((JEe,Hy)=>{"use strict";var Bl=C(),EK=Y(),hr=J(),Hl=require("path"),hK=require("minimist"),Dy=require("fs-extra"),Py=require("lodash");hr.initSync();var{CONFIG_PARAMS:Gi,DATABASES_PARAM_CONFIG:Pl,SYSTEM_SCHEMA_NAME:Bd}=Bl,Ml,Ul,vl;function My(){if(Ml!==void 0)return Ml;if(hr.getHdbBasePath()!==void 0)return Ml=hr.get(Gi.STORAGE_PATH)||Hl.join(hr.getHdbBasePath(),Bl.DATABASES_DIR_NAME),Ml}a(My,"getBaseSchemaPath");function Uy(){if(Ul!==void 0)return Ul;if(hr.getHdbBasePath()!==void 0)return Ul=By(Bd),Ul}a(Uy,"getSystemSchemaPath");function vy(){if(vl!==void 0)return vl;if(hr.getHdbBasePath()!==void 0)return vl=hr.get(Bl.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Hl.join(hr.getHdbBasePath(),Bl.TRANSACTIONS_DIR_NAME),vl}a(vy,"getTransactionAuditStoreBasePath");function mK(e,t){let r=hr.get(Gi.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Hl.join(vy(),e.toString())}a(mK,"getTransactionAuditStorePath");function By(e,t){e=e.toString(),t=t&&t.toString();let r=hr.get(Bl.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Hl.join(My(),e)}a(By,"getSchemaPath");function pK(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,hK(process.argv));let n=r[Gi.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!EK.isObject(n))throw o;i=n}for(let o of i){let c=o[Bd];if(!c)continue;let l=hr.get(Gi.DATABASES);l=l??{};let _=c?.tables?.[t]?.[Pl.PATH];if(_)return Py.set(l,[Bd,Pl.TABLES,t,Pl.PATH],_),hr.setProperty(Gi.DATABASES,l),_;let u=c?.[Pl.PATH];if(u)return Py.set(l,[Bd,Pl.PATH],u),hr.setProperty(Gi.DATABASES,l),u}}let s=r[Gi.STORAGE_PATH.toUpperCase()];if(s){if(!Dy.pathExistsSync(s))throw new Error(s+" does not exist");let i=Hl.join(s,e);return Dy.mkdirsSync(i),hr.setProperty(Gi.STORAGE_PATH,s),i}return Uy()}a(pK,"initSystemSchemaPaths");function SK(){Ml=void 0,Ul=void 0,vl=void 0}a(SK,"resetPaths");Hy.exports={getBaseSchemaPath:My,getSystemSchemaPath:Uy,getTransactionAuditStorePath:mK,getTransactionAuditStoreBasePath:vy,getSchemaPath:By,initSystemSchemaPaths:pK,resetPaths:SK}});var mr=T((the,ky)=>{"use strict";var TK=jr().LMDB_ERRORS_ENUM,ZEe=require("lmdb"),gK=Et(),ehe=require("buffer").Buffer,{OVERFLOW_MARKER:qy,MAX_SEARCH_KEY_LENGTH:Hd}=gK,xy=["number","string","symbol","boolean","bigint"];function RK(e){if(e=e?.primaryStore||e,!e)throw new Error(TK.ENV_REQUIRED)}a(RK,"validateEnv");function AK(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(AK,"stringifyData");function OK(e){return e instanceof Date?e.valueOf():e}a(OK,"convertKeyValueToWrite");function NK(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(xy.includes(typeof e))return e.length>Hd?[e.slice(0,Hd)+qy]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(xy.includes(typeof i))i.length>Hd?r.push(i.slice(0,Hd)+qy):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(NK,"getIndexedValues");var qd=0,Fy=0;function Gy(){Fy=Date.now()-performance.now()}a(Gy,"adjustStartTime");Gy();var bK=6e4;setInterval(Gy,bK).unref();function yK(){let e=performance.now()+Fy;return e>qd?(qd=e,e):(qd+=488e-6,qd)}a(yK,"getNextMonotonicTime");ky.exports={validateEnv:RK,stringifyData:AK,convertKeyValueToWrite:OK,getNextMonotonicTime:yK,getIndexedValues:NK}});var $y,Qn,Fp,ql=Ne(()=>{$y=require("events"),Qn=class extends $y.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new Fp;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)}},Fp=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 Wy={};$e(Wy,{HAS_EXPIRATION:()=>Qp,LAST_TIMESTAMP_PLACEHOLDER:()=>Gl,LOCAL_TIMESTAMP:()=>IK,METADATA:()=>xl,NO_TIMESTAMP:()=>kp,PENDING_LOCAL_TIME:()=>jp,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Wp,RecordEncoder:()=>Yp,TIMESTAMP_ASSIGN_LAST:()=>CK,TIMESTAMP_ASSIGN_NEW:()=>Yy,TIMESTAMP_ASSIGN_PREVIOUS:()=>Ky,TIMESTAMP_PLACEHOLDER:()=>xd,TIMESTAMP_RECORD_PREVIOUS:()=>$p,fromResource:()=>$d,getUpdateRecord:()=>zp,handleLocalTimeForGets:()=>Vd});function DK(){return Fl[0]=Fl[0]^64,wK.getFloat64(0)}function $d(e){Kp=!0;try{return e()}finally{Kp=!1}}function Vd(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?.[xl];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?.[xl]>=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[xl];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,vo.push(new WeakRef(this))),!Kp)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<vo.length;l++){let _=vo[l].deref();(!_||_.isDone||_.isCommitted)&&vo.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function zp(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",f,E){if(f||l==null?Za=i?.localTime?$p|Ky:kp:Za=l?i?.localTime?$p|16384:Yy|16384:kp,u>0&&(c|=Qp),Gd=c,Vp=u,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Za>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(n,s,h);if(l){let R=_?.user?.username;if(E&&(Fd=e.encoder.encode(E)),f&&i?.localTime){let g=i?.localTime,O=r.get(g);if(O){let v=$t(O).previousLocalTime;return r.put(g,kd(o,t,n,v,R,d,Fd),{ifVersion:p}),S}}r.put(Gl,kd(o,t,n,i?.localTime?1:0,R,d,Fd),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var Vy,Gp,xd,Gl,Wp,IK,xl,Fl,wK,kp,Yy,CK,Ky,$p,Qp,jp,LK,Fd,Za,Gd,Vp,Yp,ohe,Kp,vo,ec=Ne(()=>{Vy=require("msgpackr");Bo();Gp=H(F()),xd=new Uint8Array([1,1,1,1,4,64,0,0]),Gl=new Uint8Array([1,1,1,1,1,0,0,0]),Wp=new Uint8Array([1,1,1,1,3,64,0,0]),IK=Symbol("local-timestamp"),xl=Symbol("metadata"),Fl=new Uint8Array(8),wK=new DataView(Fl.buffer,0,8),kp=0,Yy=0,CK=1,Ky=3,$p=4,Qp=16,jp=1,Za=0,Gd=-1,Vp=0,Yp=class extends Vy.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(Za||Gd>=0){let i=0,o=Za;o&&(i+=8,Za=0);let c=Gd,l=Vp;c>=0&&(i+=2,Gd=-1,l&&(i+=8,Vp=0));let _=LK=r.call(this,n,s|2048|i);Fd=_.subarray((_.start||0)+i,_.end);let u=_.start||0;return o&&(xd[4]=o,xd[5]=o>>8,_.set(xd,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(Fl,0,c),c+=8;else for(let d=0;d<8;d++)Fl[d]=t[c++];l=DK(),i=t[c]}let _;i<32&&(o=i,c+=2,o&Qp&&(_=(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,[xl]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(DK,"getTimestamp");ohe=Map.prototype.get;a($d,"fromResource");a(Vd,"handleLocalTimeForGets");vo=[];setInterval(()=>{for(let e=0;e<vo.length;e++){let t=vo[e].deref();!t||t.isDone||t.isCommitted?vo.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Gp.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Gp.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(zp,"getUpdateRecord")});var iI={};$e(iI,{AUDIT_STORE_OPTIONS:()=>nI,createAuditEntry:()=>kd,openAuditStore:()=>Qd,readAuditEntry:()=>$t,setAuditRetention:()=>MK,transactionKeyEncoder:()=>rI});function Qd(e){let t=e.auditStore=e.openDB(Zy.AUDIT_STORE_NAME,nI);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=Yd){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()-Jp})){if((_[0]&15)===eS){let u=$t(_),d=u.tableId;r[d]?.(u.recordId)}if(c=t.remove(l),await new Promise(setImmediate),++o>=PK){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,Jp/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,Wd.getWorkerIndex)()===(0,Wd.getWorkerCount)()-1&&s(Yd),t}function MK(e,t=Yd){Jp=e,Yd=t}function kd(e,t,r,n,s,i,o){let c=sI[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let l=1;n&&(n>1?tc.setFloat64(0,n):Nn.set(Wp),l=9),f(0),f(t),d(r),tc.setFloat64(l,e),l+=8,s?d(s):Nn[l++]=0,Nn[n?8:0]=c;let u=Nn.subarray(0,l);if(o)return Buffer.concat([u,o]);return u;function d(E){let h=l;l+=1,l=(0,rc.writeKey)(E,Nn,l);let p=l-h-1;p>127?p>16383?(rS.error("Key or username was too large for audit entry",E),l=h+1,Nn[h]=0):(Nn.copyWithin(h+2,h+1,l),tc.setUint16(h,p|32768),l++):Nn[h]=p}function f(E){E<128?Nn[l++]=E:E<16384?(tc.setUint16(l,E|32768),l+=2):E<1056964608?(tc.setUint32(l,E|3221225472),l+=4):(Nn[l]=255,tc.setUint32(l+1,E),l+=5)}}function $t(e){try{let t=e.dataView||(e.dataView=new tS(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:sI[n&7],tableId:i,get recordId(){return Xy(e,c,l)},version:_,previousLocalTime:r,get user(){return d>u?Xy(e,u,d):void 0},getValue(f,E,h){if(n&Xp||n&Zp&&!E)return f.decoder.decode(e.subarray(t.position));if(n&Zp&&h)return nS(f.getEntry(this.recordId),h,f)}}}catch{return rS.error("Reading audit entry error",e),{}}}function Xy(e,t,r){let n=e.subarray(t,r);return(0,rc.readKey)(n,0,r-t)}var rc,Kd,Zy,eI,Wd,tI,rS,Nn,tc,rI,nI,Jp,PK,Yd,Xp,Zp,Qy,eS,jy,zy,Jy,sI,tS,Bo=Ne(()=>{rc=require("ordered-binary"),Kd=H(J()),Zy=H(Et()),eI=H(C()),Wd=H(st()),tI=H(Y());ec();rS=H(F());jd();(0,Kd.initSync)();Nn=Buffer.alloc(1024),tc=new DataView(Nn.buffer,Nn.byteOffset,1024),rI={writeKey(e,t,r){return e===Gl?(t.set(Gl,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,rc.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,rc.readKey)(e,t,r)}},nI={encoding:"binary",keyEncoder:rI},Jp=(0,tI.convertToMS)((0,Kd.get)(eI.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,PK=1e3,Yd=1e4;a(Qd,"openAuditStore");a(MK,"setAuditRetention");Xp=16,Zp=32,Qy=1,eS=2,jy=3,zy=4,Jy=5,sI={put:Qy|Xp,[Qy]:"put",delete:eS,[eS]:"delete",message:jy|Xp,[jy]:"message",invalidate:zy,[zy]:"invalidate",patch:Jy|Zp,[Jy]:"patch"};a(kd,"createAuditEntry");a($t,"readAuditEntry");tS=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(Xy,"readKeySafely")});var sS={};$e(sS,{add:()=>zd,applyReverse:()=>oI,getRecordAtTime:()=>nS,rebuildUpdateBefore:()=>Jd});function zd(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function Jd(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,zd(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=UK[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=aI}}function nS(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let l=n.get(i),_=$t(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]===aI&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),_=$t(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 UK,aI,jd=Ne(()=>{Bo();a(zd,"add");zd.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};UK={add:zd};a(Jd,"rebuildUpdateBefore");a(oI,"applyReverse");aI={};a(nS,"getRecordAtTime")});function zr(e){return e[Mt]||(e[Mt]=Object.create(null))}function rf(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 bn.ClientError(`${c} must be a string, attempt to assign ${u}`);zr(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 bn.ClientError(`${c} must be a string, attempt to assign ${u}`);zr(this)[c]=u},"set");break;case"Float":case"Number":l=a(function(u){if(!(typeof u=="number"||u==null&&o.nullable!==!1))throw new bn.ClientError(`${c} must be a number, attempt to assign ${u}`);zr(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 bn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${u}`);zr(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 bn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${u}`);zr(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 bn.ClientError(`${c} must be a number, attempt to assign ${u}`);zr(this)[c]=u},"set");break;case"Boolean":l=a(function(u){if(!(typeof u=="boolean"||u==null&&o.nullable!==!1))throw new bn.ClientError(`${c} must be a boolean, attempt to assign ${u}`);zr(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 bn.ClientError(`${c} must be a Date, attempt to assign ${u}`);zr(this)[c]=u},"set");break;case"Bytes":l=a(function(u){if(!(u instanceof Uint8Array||u==null&&o.nullable!==!1))throw new bn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${u}`);zr(this)[c]=u},"set");break;case"Any":case void 0:l=a(function(u){zr(this)[c]=u},"set");break;default:l=a(function(u){if(!(typeof u=="object"||u==null&&o.nullable!==!1))throw new bn.ClientError(`${c} must be an object, attempt to assign ${u}`);zr(this)[c]=u},"set")}_={get(){let u=this[Mt];if(u&&c in u){let f=u[c];if(f?.__op__){let E=this[ye]?.[c];return f.update(E)}return f}let d=this[ye]?.[c];if(d&&typeof d=="object"){let f=cI(d,o);if(f)return u||(u=this[Mt]=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[Mt];return l?.[o]!==void 0?l[o]:this[ye]?.[o]}),i("set",function(o,c){let l=n[o];if(l)return l.set.call(this,c);if(t.sealed)throw new bn.ClientError("Can not add a property to a sealed table schema");zr(this)[o]=c}),i("deleteProperty",function(o){zr(this)[o]=void 0}),i("toJSON",function(){let o=this[Mt],c;for(let _ in o){c||(c=Object.assign({},this[ye]));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[ye])),Object.assign(c,this)),c||this[ye]}),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 cI(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){this[ye]=s}},rf(r,t)),new r(e)):new Xd(e);case Array:let n=new ef(e.length);n[ye]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=cI(o,t?.elements)),n[s]=o}return n;default:return e}}function nf(e){let t=e[Mt],r;for(let s in t){r||(r=Object.assign({},e[ye]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=nf(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ye])),Object.assign(r,e)),r||e[ye]}function qo(e,t=e[Mt]){let r;if(e[ye]&&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=qo(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[ye]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=sS[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=qo(s);r[n]=s}return r?Object.freeze(r):e[ye]||e}function Zd(e){let t=e[ye];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Ho]||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?.[ye]===s){if(Zd(i))return!0}else return!0}}else{let r=e[Mt];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[ye]===i){if(Zd(s))return!0}else return!0}else return!0}}return!1}var bn,Mt,Xd,Ho,ef,tf,sf=Ne(()=>{jn();bn=H(te());jd();Mt=Symbol("own-data");a(zr,"getChanges");a(rf,"assignTrackedAccessors");a(cI,"trackObject");Xd=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ye]=t}};rf(Xd,{});a(nf,"collapseData");a(qo,"deepFreeze");a(Zd,"hasChanges");Ho=Symbol.for("has-array-changes"),ef=class extends Array{static{a(this,"TrackedArray")}[Ho];constructor(t){super(t)}splice(...t){return this[Ho]=!0,super.splice(...t)}push(...t){return this[Ho]=!0,super.push(...t)}pop(){return this[Ho]=!0,super.pop()}unshift(...t){return this[Ho]=!0,super.unshift(...t)}shift(){return this[Ho]=!0,super.shift()}};ef.prototype.constructor=Array;tf=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});function qK(){HK=setInterval(function(){for(let e of iS)if(e.stale){let t=e[be]?.url;lI.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},BK).unref()}var oS,lI,vK,iS,xo,of,BK,HK,aS=Ne(()=>{oS=H(mr()),lI=H(F());jn();ec();vK=100,iS=new Set,xo=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=!0;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)throw new Error("Can not start a read on a transaction that is no longer open");return this.readTxnsUsed=1,$d(()=>{this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0)}),iS.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),$d(()=>{this.readTxn.use()}),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(iS.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}addWrite(t){if(!this.open&&!this.autoCommitMode)throw new Error("Can not use a transaction that is no longer open");this.writes.push(t),this.autoCommitMode&&this.commit()}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,oS.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 p=this.writes[h];if(!p)continue;let S=p[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(),t?.prepared?.(),this.open=!1;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<vK>>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 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=!1,this.writes=[]}},of=class extends xo{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,oS.getNextMonotonicTime)())}getReadTxn(){}},BK=3e4;a(qK,"startMonitoringTxns");qK()});function tt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open&&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 xo;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(r?.resetTransaction?{prepared(){n.autoCommitMode=!0}}:{});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var uI,Fo=Ne(()=>{uI=require("../index");jn();aS();a(tt,"transaction");(0,uI._assignPackageExport)("transaction",tt);tt.commit=function(e){let t=(e[be]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};tt.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 ic(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(Array.isArray(o)){let R=o[0],g=ti(n.attributes,R);if(g.relationship){if(o.length<2)throw new ei.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let O=g.definition?.tableClass||g.elements?.definition?.tableClass,v=new Map,G=ic({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,O,s,v);if(g.relationship.to){i[o[0]]=v;let B=!!ti(O.attributes,g.relationship.to)?.elements;G=$K(G,g,O.primaryStore,B,v)}if(g.relationship.from){let B=a(U=>ic({attribute:g.relationship.from,value:U},t,r,n,s,v),"searchEntry");g.elements?(i[o[0]]=v,G=VK(G,g,O.primaryStore,v,B)):G=G.flatMap(B)}return G}else if(o.length===1)o=o[0];else throw new ei.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,u,d,f;c instanceof Date&&(c=c.getTime());let E;switch(_S[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]=gs.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"contains":case"ends_with":E=!0;break;default:throw new ei.ClientError(`Unknown query comparator "${l}"`)}if(r){let R=_;_=u,u=R,R=!f,f=!d,d=R}let h=o===n.primaryKey||o==null,p=h?n.primaryStore:n.indices[o];if(!p||p.isIndexing||E||c===null&&!p.indexNulls){if(!s)throw new ei.ClientError(`"${o}" is not indexed${c===null&&!p.indexNulls?" for nulls, index needs to be rebuilt to search for nulls":p?.isIndexing?" yet":""}, can not search for this attribute`,404);let R=Vl(e);if(!R)throw new ei.ClientError(`Unknown search operator ${e.comparator}`);return n.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:g,value:O})=>new Promise((v,G)=>setImmediate(()=>{try{v(O&&R(O)?g:cS.SKIP)}catch(B){G(B)}})))}let S={start:_,end:u,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let R=p.getRange(S).map(g=>g.value==null?cS.SKIP:g);return R.hasEntries=!0,R}else return p.getRange(S).map(({value:R})=>R)}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 $K(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;return(async()=>{let _=a((d,f)=>{let E=d;Array.isArray(d)&&(E=zn(d),o=!0);let h=s.get(E);h?h.push(f):s.set(E,h=[f]),d!==E&&(h.key=d)},"add_entry"),u=0;for await(let d of e){let f=d.value??r.get(d.key??d),E=f?.[l];if(E!=null&&!s.filters?.some(h=>!h(f))){if(n)for(let h=0;h<E.length;h++)_(E[h],d);else _(E,d);u++>100&&(await new Promise(setImmediate),u=0)}}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 VK(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 _=zn(l.value);if(!c.has(_))return c.add(_),l}if(!i)return(async()=>{let _=new Map;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>_.has(zn(f)));let u=0;for await(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(E=>!E(f)))continue}_.set(zn(d),d),u++>100&&(await new Promise(setImmediate),u=0)}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 Vl(e,t,r,n,s,i){if(e.conditions){let u=e.conditions.map(Vl);return e.operator==="or"?d=>u.some(f=>f(d)):d=>u.every(f=>f(d))}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=Vl({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 p=t.propertyResolvers?.[u],S,R=a((g,O)=>{let v,G;if(p){if(p.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let U of h.idFilter.idSet)e={attribute:p.from,value:U};S=_(p.from,h.idFilter,!0)}else S=_(p.from,h.idFilter,!1);let B=S(g);return S.idFilter&&(R.idFilter=S.idFilter),B}G=p(g,r,O),v=G?.value}else v=g[u];return v?Array.isArray(v)?v.some(h):h(v,G):!1},"recordFilter");return R}}switch(l instanceof Date&&(l=l.getTime()),_S[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,gs.compareKeys)(u,l[0])>=0&&(0,gs.compareKeys)(u,l[1])<=0,!0);case"gt":return _(c,u=>(0,gs.compareKeys)(u,l)>0);case"ge":return _(c,u=>(0,gs.compareKeys)(u,l)>=0);case"lt":return _(c,u=>(0,gs.compareKeys)(u,l)<0);case"le":return _(c,u=>(0,gs.compareKeys)(u,l)<=0);case"ne":return _(c,u=>(0,gs.compareKeys)(u,l)!==0);default:throw new ei.ClientError(`Unknown query comparator "${o}"`)}function _(u,d,f){let E;f=f&&!s&&t?.indices[u]&&i>3,f&&(e.estimated_count==null&&af(t)(e),E=e.estimated_count>>4,(isNaN(E)||E>=i)&&(f=!1));let h=0,p=3;function S(R){let g=R[u],O;if(typeof g!="object"||!g?O=d(g):Array.isArray(g)?O=g.some(d):g instanceof Date&&(O=d(g.getTime())),f&&(p++,!O&&!S.idFilter&&++h/p*(i-p)>E)){let v=ic(e,r.transaction,!1,t).map(zn),G=new Set(v);S.idFilter=B=>G.has(zn(B)),S.idFilter.idSet=G}return O}return a(S,"recordFilter"),s&&(S.idFilter=d),S}a(_,"attributeComparator")}function af(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/ki(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=_S[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=af(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"});r.estimated_count=c*ki(e.indices[i.relationship.from]||e.primaryStore)/(ki(o.primaryStore)||1)}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=ki(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=GK*ki(e.primaryStore)+1:n==="between"?r.estimated_count=FK*ki(e.primaryStore)+1:r.estimated_count=xK*ki(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=4)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function cf(e){if(e)if($i=e,nc.lastIndex=0,YK.test(e))try{let t=kl(new sc,"");if(pr!==$i.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 ${pr} in '${$i}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function kl(e,t){let r=nc,n,s,i,o,c,l=decodeURIComponent;for(;n=r.exec($i);){pr=r.lastIndex;let[,_,u]=n;if(o){if(_)throw new SyntaxError(`expected operator, but encountered '${_}'`);o=!1,c=!1}else c=!0;let d;switch(u){case"=":if(s){if(_.length<=2)i=_;else throw new SyntaxError(`invalid FIQL operator ${_}`);l=_I}else{if(l=decodeURIComponent,i="equals",!_)throw new SyntaxError("attribute must be specified before equality comparator");s=$l(_)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=kK[u],l=uS[i]?_I:decodeURIComponent,!_)throw new SyntaxError(`attribute must be specified before comparator ${u}`);s=$l(_);break;case"|":e.operator="or";case"":case void 0:case"&":if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${u[0]?"'"+u[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${u?"'"+u+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let E={comparator:i,attribute:s,value:l(_)};i==="eq"&&dI(E,_),e.conditions.push(E)}s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push($l(_)),s=void 0;break;case"(":nc.lastIndex=pr;let f=kl(_?[]:new sc,")");switch(_){case"":e.conditions.push(f);break;case"limit":switch(f.length){case 1:e.limit=+f[0];break;case 2:e.offset=+f[0],e.limit=f[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(f[0])&&f.length===1&&!f[0].name?(e.select=f[0],e.select.asArray=!0):f.length===1?e.select=f[0]:f.length===2&&f[1]===""?e.select=f.slice(0,1):e.select=f;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=fI(f);break;default:throw new SyntaxError(`unknown query function call ${_}`)}$i[pr]===","?r.lastIndex=++pr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!_)throw new SyntaxError("property sets must have a defined parent property name");nc.lastIndex=pr,d=kl([],"}"),d.name=_,e.push(d),$i[pr]===","?r.lastIndex=++pr:o=!0;break;case"[":nc.lastIndex=pr,_?(d=kl(new sc,"]"),d.name=_):d=kl(e.conditions?new sc:[],"]"),e.conditions?(e.conditions.push(d),s=null):e.push(d),$i[pr]===","?r.lastIndex=++pr:o=!0;break;case")":case"]":case"}":if(t===u[0]){if(e.conditions){if(s){let E={comparator:i||"equals",attribute:s,value:l(_)};i==="eq"&&dI(E,_),e.conditions.push(E)}else if(_)throw new SyntaxError("no attribute or comparison specified")}else(_||e.length>0&&c)&&e.push($l(_));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${u[0]}'`):new SyntaxError(`unexpected token '${u[0]}'`);default:throw new SyntaxError(`unexpected operator '${u}'`)}if(t!==")"&&(r=s?KK:nc,r.lastIndex=pr),pr===$i.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function $l(e){return e.indexOf(".")>-1?e.split(".").map($l):decodeURIComponent(e)}function _I(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 ei.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function dI(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new ei.ClientError("wildcard can only be used at the end of a string")}function fI(e){let t=EI(e[0]);return e.length>1&&(t.next=fI(e.slice(1))),t}function EI(e){if(Array.isArray(e)){let t=EI(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 zn(e){return Array.isArray(e)?e.join("\0"):e}function ki(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function hI(e,t,r){return t*r/ki(e)}var ei,lS,gs,cS,xK,FK,GK,kK,uS,_S,YK,nc,KK,pr,$i,sc,lf=Ne(()=>{ei=H(te()),lS=H(Et()),gs=require("ordered-binary"),cS=require("lmdb"),xK=.3,FK=.1,GK=.05,kK={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},uS={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(ic,"searchByIndex");a(ti,"findAttribute");a($K,"joinTo");a(VK,"joinFrom");_S={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(Vl,"filterByType");a(af,"estimateCondition");YK=/[()[\]|!<>.]|(=\w*=)/,nc=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,KK=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(cf,"parseQuery");a(kl,"parseBlock");a($l,"decodeProperty");a(_I,"typedDecoding");a(dI,"wildcardDecoding");a(fI,"toSortObject");a(EI,"toSortEntry");sc=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(zn,"flattenKey");a(ki,"estimatedEntryCount");a(hI,"intersectionEstimate")});var ES={};$e(ES,{CONTEXT:()=>be,ID_PROPERTY:()=>De,IS_COLLECTION:()=>yn,RECORD_PROPERTY:()=>ye,Resource:()=>jt,snake_case:()=>QK,transformForSelect:()=>_f});function QK(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function mI(e,t){if(Yl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(Yl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new fS;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){Yl=!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[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[De]??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 p=this.parseQuery(c.slice(E+1));l?l=Object.assign(p,l):l=p,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 d.resetTransaction=!0,tt(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(p=>{if(!p)throw new uf(o.user);return typeof u?.then=="function"?u.then(S=>e(E,l,o,S)):e(E,l,o,u)});if(!h)throw new uf(o.user)}return typeof u?.then=="function"?u.then(h=>e(E,l,o,h)):e(E,l,o,u)}a(f,"authorizeActionOnResource")}}function Xr(e,t){let r=new TI.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 dS(e,t,r){let n=e[ye];if(n){let s=e[Mt];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 _f(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):dS(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(dS(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(dS(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]=_f(c.select||c,u)}let _=o(c.name);return l(_)}else return o(c);else return c}}a(i,"handleProperty")}var pI,SI,TI,be,De,yn,ye,WK,jt,uf,Yl,fS,jn=Ne(()=>{pI=require("crypto");ql();SI=require("../index"),TI=H(te());sf();Fo();lf();be=Symbol.for("context"),De=Symbol.for("primary-key"),yn=Symbol("is-collection"),ye=Symbol("stored-record"),WK={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[De]=t;let n=r?.[be];this[be]=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 _=_f(l,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=Jr(function(t,r,n,s){if(Array.isArray(s)&&t[yn]){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,_=l.getResource(c[l.primaryKey],n,{async:!0});_.then?i.push(_.then(u=>u.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):Xr(t,"put")},{hasContent:!0,type:"update"});static patch=Jr(function(t,r,n,s){return t.patch?t.patch(s,r):Xr(t,"patch")},{hasContent:!0,type:"update"});static delete=Jr(function(t,r,n,s){return t.delete?t.delete(r):Xr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,pI.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),tt(n,()=>{let i=new this(s,n),o=i.update?i.update(r):Xr(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):Xr(t,"delete")},{hasContent:!1,type:"update"});static post=Jr(function(t,r,n,s){return t[De]!=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):Xr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Jr(function(t,r,n,s){return t.subscribe?t.subscribe(r):Xr(t,"subscribe")},{type:"read"});static publish=Jr(function(t,r,n,s){return t[De]!=null&&t.update?.(),t.publish?t.publish(s,r):Xr(t,"publish")},{hasContent:!0,type:"create"});static search=Jr(function(t,r,n,s){let i=t.search?t.search(r):Xr(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=_f(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):Xr(t,"search")},{hasContent:!0,type:"read"});static copy=Jr(function(t,r,n,s){return t.copy?t.copy(s,r):Xr(t,"copy")},{type:"create"});static move=Jr(function(t,r,n,s){return t.move?t.move(s,r):Xr(t,"move")},{type:"delete"});post(t){if(this[yn])return this.constructor.create(this[De],t,this[be]);Xr(this,"post")}static isCollection(t){return t?.[yn]}static coerceId(t){return t}static parseQuery(t){return cf(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&&WK[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:mI(t,this),isCollection:Yl}}let i=mI(t,this);return Yl?{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(_=>_[De]===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[De],f=_.get(d);f?f.push(u):_.set(d,[u])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[yn]=!0),s}subscribe(t){return new Qn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Qn}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[De]}getContext(){return this[be]}};jt.prototype[be]=null;(0,SI._assignPackageExport)("Resource",jt);a(QK,"snake_case");uf=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(mI,"pathToId");fS=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Jr,"transactional");a(Xr,"missingMethod");a(dS,"selectFromObject");a(_f,"transformForSelect")});var gI={};$e(gI,{Resources:()=>df,keyArrayToString:()=>oc,resetResources:()=>jK,resources:()=>Vi});function jK(){return Vi=new df}function oc(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var df,Vi,Kl=Ne(()=>{Fo();df=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 tt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(jK,"resetResources");a(oc,"keyArrayToString")});function AI(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;ac||((0,ff.onMessageByType)(RI,u=>{OI(u.path)}),ac=Object.create(null));let o=ac[s]||(ac[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=oc(t);let l=new mS(r);l.startTime=n;let _=c.get(t);return _?_.push(l):(c.set(t,_=[l]),_.tables=c,_.key=t),l.subscriptions=_,l}function OI(e,t){if(!ac)return;let r=ac[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=$t(i),c=r[o.tableId];if(!c)continue;let l=o.recordId,_,u=oc(o.recordId),d=0;do{let f=c.get(u);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=s){(0,hS.info)("omitting",l,h.startTime,s);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(n?n.push(h):n=[h]),h.txnInProgress=o.version),h.listener(l,o,s,p)}catch(p){console.error(p),(0,hS.info)(p)}}}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 NI(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,ff.broadcast)({type:RI,path:s}),OI(s,!0)})}}var hS,ff,RI,ac,khe,mS,bI=Ne(()=>{hS=H(F()),ff=H(st());ql();Kl();Bo();RI="transaction",khe=Buffer.alloc(4096);a(AI,"addSubscription");mS=class extends Qn{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(OI,"notifyFromTransactionData");a(NI,"listenToCommits")});var II=T((Yhe,yI)=>{"use strict";var pS=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};yI.exports=pS});var CI=T((Whe,wI)=>{"use strict";var SS=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};wI.exports=SS});var Ef=T((jhe,LI)=>{"use strict";var gS=J(),RS=C(),{RecordEncoder:zK}=(ec(),re(Wy));gS.initSync();var JK=gS.get(RS.CONFIG_PARAMS.STORAGE_COMPRESSION),XK=gS.get(RS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,ZK=RS.UPDATES_PROPERTY,TS=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=JK&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=XK&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:zK},this.alwaysLazyProperty=n=>n===ZK)}};LI.exports=TS});var mf=T((Jhe,PI)=>{"use strict";var cc=J(),Wl=C();cc.initSync();var eW=cc.get(Wl.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||cc.get(Wl.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||cc.get(Wl.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",DI=cc.get(Wl.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),tW=cc.get(Wl.CONFIG_PARAMS.STORAGE_NOREADAHEAD),hf=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=eW,this.noFSAccess=!0,DI!==void 0&&(this.overlappingSync=DI),this.noReadAhead=tW}};PI.exports=hf;hf.MAX_DBS=1e4});var Ve=T((Zhe,kI)=>{"use strict";var OS=require("lmdb"),Jn=require("fs-extra"),Zr=require("path"),pf=mr(),vI=F(),Sr=jr().LMDB_ERRORS_ENUM,Sf=CI(),NS=Ef(),BI=mf(),Yi=Et(),MI=C(),{table:rW,resetDatabases:nW}=(Ae(),re(Ge)),UI=J(),Xn=Yi.INTERNAL_DBIS_NAME,HI=Yi.DBI_DEFINITION_NAME,sW="data.mdb",iW="lock.mdb",Ql=".mdb",oW="-lock",AS=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=In(t,r),this.key_type=this.dbi[Yi.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Yi.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new OS.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Tf(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(Tf,"pathEnvNameValidation");async function bS(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=Zr.join(e,t+Ql);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(Zr.join(e,t,sW),Jn.constants.R_OK|Jn.constants.F_OK),Zr.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(bS,"validateEnvironmentPath");function gf(e,t){if(pf.validateEnv(e),t===void 0)throw new Error(Sr.DBI_NAME_REQUIRED)}a(gf,"validateEnvDBIName");async function aW(e,t,r=!1,n=!1){Tf(e,t);let s=Zr.basename(e);t=t.toString();let i=UI.get(MI.CONFIG_PARAMS.DATABASES);i||UI.setProperty(MI.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await bS(e,t,n),qI(e,t,r)}catch(o){if(o.message===Sr.INVALID_ENVIRONMENT){let c=Zr.join(e,t);await Jn.mkdirp(n?c:e);let l=new BI(n?c:c+Ql,!1),_=OS.open(l);_.dbis=Object.create(null);let u=new NS(!1);_.openDB(Xn,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=yS(e,t,r);return _[Yi.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(aW,"createEnvironment");async function cW(e,t,r,n=!0){Tf(e,t),t=t.toString();let s=Zr.join(e,t);return rW({table:t,database:Zr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(cW,"copyEnvironment");async function qI(e,t,r=!1){Tf(e,t),t=t.toString();let n=yS(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=Zr.join(e,t+Ql),o=s!=i,c=new BI(s,o),l=OS.open(c);l.dbis=Object.create(null);let _=FI(l);for(let u=0;u<_.length;u++)In(l,_[u]);return l[Yi.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(qI,"openEnvironment");async function lW(e,t,r=!1){Tf(e,t),t=t.toString();let n=Zr.join(e,t+Ql),s=await bS(e,t);if(global.lmdb_map!==void 0){let i=yS(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await xI(o),delete global.lmdb_map[i]}}await Jn.remove(s),await Jn.remove(s===n?s+oW:Zr.join(Zr.dirname(s),iW))}a(lW,"deleteEnvironment");async function xI(e){pf.validateEnv(e);let t=e[Yi.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(xI,"closeEnvironment");function yS(e,t,r=!1){let s=`${Zr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(yS,"getCachedEnvironmentName");function uW(e){pf.validateEnv(e);let t=Object.create(null),r=In(e,Xn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Xn)try{t[n]=Object.assign(new Sf,s)}catch{vI.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(uW,"listDBIDefinitions");function FI(e){pf.validateEnv(e);let t=[],r=In(e,Xn);for(let{key:n}of r.getRange({start:!1}))n!==Xn&&t.push(n);return t}a(FI,"listDBIs");function _W(e,t){let n=In(e,Xn).getEntry(t),s=new Sf;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(_W,"getDBIDefinition");function GI(e,t,r,n=!r){if(gf(e,t),t=t.toString(),t===Xn)throw new Error(Sr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return In(e,t)}catch(s){if(s.message===Sr.DBI_DOES_NOT_EXIST){let i=new NS(r,n===!0),o=e.openDB(t,i),c=new Sf(r===!0,n);return o[HI]=c,In(e,Xn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(GI,"createDBI");function In(e,t){if(gf(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Xn?r=_W(e,t):r=new Sf,r===void 0)throw new Error(Sr.DBI_DOES_NOT_EXIST);let n;try{let s=new NS(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[HI]=r,e.dbis[t]=n,n}a(In,"openDBI");function dW(e,t){gf(e,t),t=t.toString();let r=In(e,t),n=r.getStats();return r[Yi.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(dW,"statDBI");async function fW(e,t){try{let r=Zr.join(e,t+Ql);return(await Jn.stat(r)).size}catch{throw new Error(Sr.INVALID_ENVIRONMENT)}}a(fW,"environmentDataSize");function EW(e,t){if(gf(e,t),t=t.toString(),t===Xn)throw new Error(Sr.CANNOT_DROP_INTERNAL_DBIS_NAME);In(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],In(e,Xn).removeSync(t)}a(EW,"dropDBI");function hW(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{In(e,i)}catch(o){if(o.message===Sr.DBI_DOES_NOT_EXIST)GI(e,i,i!==t,i===t),n=!0;else throw o}}n&&nW()}a(hW,"initializeDBIs");kI.exports={openDBI:In,openEnvironment:qI,createEnvironment:aW,listDBIs:FI,listDBIDefinitions:uW,createDBI:GI,dropDBI:EW,statDBI:dW,deleteEnvironment:lW,initializeDBIs:hW,TransactionCursor:AS,environmentDataSize:fW,copyEnvironment:cW,closeEnvironment:xI}});var YI=T((tme,VI)=>{"use strict";var IS=Ve(),mW=F(),$I=jr().LMDB_ERRORS_ENUM;VI.exports=pW;async function pW(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 IS.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==$I.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await IS.closeEnvironment(global.lmdb_map[n]),await IS.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==$I.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(pW,"cleanLMDBMap")});var ri=T((nme,SW)=>{SW.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"}]}}});var sw=T((ime,nw)=>{"use strict";var wS=require("recursive-iterator"),TW=require("alasql"),CS=require("clone"),KI=Y(),{handleHDBError:WI,hdb_errors:gW}=te(),{HDB_ERROR_MSGS:QI,HTTP_STATUS_CODES:jI}=gW,{getDatabases:RW}=(Ae(),re(Ge)),AW=["DISTINCT_ARRAY"],zI=Symbol("validateTables"),LS=Symbol("validateTable"),sme=Symbol("getAllColumns"),JI=Symbol("validateAllColumns"),Rf=Symbol("findColumn"),XI=Symbol("validateOrderBy"),jl=Symbol("validateSegment"),DS=Symbol("validateColumn"),ZI=Symbol("setColumnsForTable"),ew=Symbol("checkColumnsForAsterisk"),tw=Symbol("validateGroupBy"),rw=Symbol("hasColumns"),PS=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[zI](),this[ew](),this[JI]()}[zI](){if(this[rw]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[LS](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[LS](t.table)})}}[rw](){let t=!1,r=new wS(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[LS](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=RW();if(!r[t.databaseid])throw WI(new Error,QI.SCHEMA_NOT_FOUND(t.databaseid),jI.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw WI(new Error,QI.TABLE_NOT_FOUND(t.databaseid,t.tableid),jI.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=CS(s);i.table=CS(t),this.attributes.push(i)})}[Rf](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)}[ew](){let t=new wS(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[ZI](r.tableid)}[ZI](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new TW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[JI](){this[jl](this.statement.columns,!1),this[jl](this.statement.joins,!1),this[jl](this.statement.where,!1),this[tw](this.statement.group,!1),this[jl](this.statement.order,!0)}[jl](t,r){if(!t)return;let n=new wS(t),s=[];for(let{node:i,path:o}of n)!KI.isEmpty(i)&&!KI.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[XI](i):s.push(this[DS](i)));return s}[tw](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&AW.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=CS(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Rf](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[Rf](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`}[XI](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[DS](t)}[DS](t){let r=this[Rf](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]}};nw.exports=PS});var ow=T((ame,iw)=>{"use strict";var MS=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")}};iw.exports=MS});var cw=T((lme,aw)=>{"use strict";var US=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};aw.exports=US});var uw=T((_me,lw)=>{"use strict";var vS=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};lw.exports=vS});var dw=T((fme,_w)=>{"use strict";var BS=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};_w.exports=BS});var ko=T((Sme,hw)=>{"use strict";var OW=Ve(),NW=cw(),bW=uw(),yW=dw(),Rs=mr(),zl=jr().LMDB_ERRORS_ENUM,IW=Et(),ni=C(),wW=Y(),CW=require("uuid"),hme=require("lmdb"),{handleHDBError:LW,hdb_errors:DW}=te(),{OVERFLOW_MARKER:mme,MAX_SEARCH_KEY_LENGTH:pme}=IW,fw=J();fw.initSync();var Af=fw.get(ni.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),HS=ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Go=ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function PW(e,t,r,n,s=Rs.getNextMonotonicTime()){GS(e,t,r,n),qS(e,t,r);let i=new NW,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];Ew(_,!0,s);let u=MW(e,t,r,_),d=_[t];o.push(u),c.push(d)}return xS(o,c,n,i,s)}a(PW,"insertRecords");function MW(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=Rs.getIndexedValues(c),_=e.dbis[o];if(l){Af&&_.prefetch(l.map(u=>({key:u,value:s})),Of);for(let u=0,d=l.length;u<d;u++)_.put(l[u],s)}}Af&&e.dbis[t].prefetch([s],Of),e.dbis[t].put(s,n,n[Go])})}a(MW,"insertRecord");function UW(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(UW,"removeSkippedRecords");function Ew(e,t,r){let n=r>0;(n||!Number.isInteger(e[Go]))&&(e[Go]=r||(r=Rs.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[HS]))&&(e[HS]=r||Rs.getNextMonotonicTime()):delete e[HS]}a(Ew,"setTimestamps");function qS(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),OW.initializeDBIs(e,t,r)}a(qS,"initializeTransaction");async function vW(e,t,r,n,s=Rs.getNextMonotonicTime()){GS(e,t,r,n),qS(e,t,r);let i=new bW,o=[],c=[],l=[];for(let _=0;_<n.length;_++){let u=n[_],d=u[t],f;try{f=FS(e,t,u,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),l.push(d)}return xS(c,l,n,i,s,o)}a(vW,"updateRecords");async function BW(e,t,r,n,s=Rs.getNextMonotonicTime()){try{GS(e,t,r,n)}catch(l){throw LW(l,l.message,DW.HTTP_STATUS_CODES.BAD_REQUEST)}qS(e,t,r);let i=new yW,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l],u;wW.isEmpty(_[t])?(u=CW.v4(),_[t]=u):u=_[t];let d=FS(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return xS(o,c,n,i,s)}a(BW,"upsertRecords");async function xS(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||Rs.getNextMonotonicTime(),UW(r,i),n}a(xS,"finalizeWrite");function FS(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(Ew(r,!u,o),Number.isInteger(r[Go])&&_[Go]>r[Go])return!1;u&&s.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let R=_[h];if(typeof p=="function"){let O=p([[_]]);Array.isArray(O)&&(p=O[0][ni.FUNC_VAL],r[h]=p)}if(p===R)continue;let g=Rs.getIndexedValues(R);if(g){Af&&S.prefetch(g.map(O=>({key:O,value:n})),Of);for(let O=0,v=g.length;O<v;O++)S.remove(g[O],n)}if(g=Rs.getIndexedValues(p),g){Af&&S.prefetch(g.map(O=>({key:O,value:n})),Of);for(let O=0,v=g.length;O<v;O++)S.put(g[O],n)}}let E=Object.assign({},_,r);c.put(n,E,E[Go])},"do_put");return l?d=c.ifVersion(n,l.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:FS(e,t,r,n,s,i,o))}a(FS,"updateUpsertRecord");function HW(e,t,r){if(Rs.validateEnv(e),t===void 0)throw new Error(zl.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(zl.WRITE_ATTRIBUTES_REQUIRED):new Error(zl.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(HW,"validateBasic");function GS(e,t,r,n){if(HW(e,t,r),!Array.isArray(n))throw n===void 0?new Error(zl.RECORDS_REQUIRED):new Error(zl.RECORDS_MUST_BE_ARRAY)}a(GS,"validateWrite");function Of(){}a(Of,"noop");hw.exports={insertRecords:PW,updateRecords:vW,upsertRecords:BW}});var Os=T((gme,Sw)=>{"use strict";var pw=Y(),mw=C(),lc=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,As=require("joi"),Ki={schema_format:{pattern:lc,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},qW=As.alternatives(As.string().min(1).max(Ki.schema_length.maximum).pattern(lc).messages({"string.pattern.base":"{:#label} "+Ki.schema_format.message}),As.number(),As.array()).required(),xW=As.alternatives(As.string().min(1).max(Ki.schema_length.maximum).pattern(lc).messages({"string.pattern.base":"{:#label} "+Ki.schema_format.message}),As.number()),FW=As.alternatives(As.string().min(1).max(Ki.schema_length.maximum).pattern(lc).messages({"string.pattern.base":"{:#label} "+Ki.schema_format.message}),As.number()).required();function GW(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Ki.schema_length.maximum?`'${e}' maximum of 250 characters`:lc.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(GW,"checkValidTable");function kW(e,t){return pw.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(kW,"validateSchemaExists");function $W(e,t){let r=t.state.ancestors[0].schema;return pw.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a($W,"validateTableExists");function VW(e,t){return e.toLowerCase()===mw.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${mw.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(VW,"validateSchemaName");Sw.exports={common_validators:Ki,schema_regex:lc,hdb_schema_table:qW,validateSchemaExists:kW,validateTableExists:$W,validateSchemaName:VW,checkValidTable:GW,hdb_database:xW,hdb_table:FW}});var it=T((Ame,Tw)=>{"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};Tw.exports={validateObject:YW,validateObjectAsync:KW,validateBySchema:WW};function YW(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(YW,"validateObject");async function KW(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(KW,"validateObjectAsync");function WW(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(WW,"validateBySchema")});var Nf=T((Nme,gw)=>{var{common_validators:Ns}=Os(),Xl=it(),Jl="is required",Ot={database:{presence:!1,format:Ns.schema_format,length:Ns.schema_length},schema:{presence:!1,format:Ns.schema_format,length:Ns.schema_length},table:{presence:!0,format:Ns.schema_format,length:Ns.schema_length},attribute:{presence:!0,format:Ns.schema_format,length:Ns.schema_length},hash_attribute:{presence:!0,format:Ns.schema_format,length:Ns.schema_length}};function Zl(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(Zl,"makeAttributesStrings");function QW(e){return e=Zl(e),Ot.table.presence=!1,Ot.attribute.presence=!1,Ot.hash_attribute.presence=!1,Xl.validateObject(e,Ot)}a(QW,"schema_object");function jW(e){return e=Zl(e),Ot.table.presence={message:Jl},Ot.attribute.presence=!1,Ot.hash_attribute.presence=!1,Xl.validateObject(e,Ot)}a(jW,"table_object");function zW(e){return e=Zl(e),Ot.table.presence={message:Jl},Ot.attribute.presence=!1,Xl.validateObject(e,Ot)}a(zW,"create_table_object");function JW(e){return e=Zl(e),Ot.table.presence={message:Jl},Ot.attribute.presence={message:Jl},Ot.hash_attribute.presence=!1,Xl.validateObject(e,Ot)}a(JW,"attribute_object");function XW(e){return e=Zl(e),Ot.table.presence={message:Jl},Ot.attribute.presence=!1,Ot.hash_attribute.presence=!1,Xl.validateObject(e,Ot)}a(XW,"describe_table");function ZW(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(ZW,"validateTableResidence");gw.exports={schema_object:QW,create_table_object:zW,table_object:jW,attribute_object:JW,describe_table:XW,validateTableResidence:ZW}});var Aw=T((yme,Rw)=>{"use strict";var eQ=require("uuid"),kS=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||eQ.v4(),this.schema_table=`${this.schema}.${this.table}`}};Rw.exports=kS});var bf=T((wme,Ow)=>{"use strict";var tQ=Aw(),$S=class extends tQ{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}};Ow.exports=$S});var bw=T((Lme,Nw)=>{"use strict";Nw.exports=nQ;var rQ="inserted";function nQ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===rQ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(nQ,"returnObject")});var yf=T((Pme,Lw)=>{"use strict";var sQ=C(),VS=Ve(),iQ=ko(),{getSystemSchemaPath:oQ,getSchemaPath:aQ}=Xe(),cQ=ri(),lQ=Nf(),uQ=bf(),_Q=bw(),{handleHDBError:yw,hdb_errors:ww}=te(),Iw=Y(),{HTTP_STATUS_CODES:dQ}=ww,YS=cQ.hdb_attribute,Cw=[];for(let e=0;e<YS.attributes.length;e++)Cw.push(YS.attributes[e].attribute);var fQ="inserted";Lw.exports=EQ;async function EQ(e){let t=lQ.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&&Iw.checkGlobalSchemaTable(e.schema,e.table);if(r)throw yw(new Error,r,dQ.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Iw.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 uQ(e.schema,e.table,e.attribute,e.id);try{let i=await VS.openEnvironment(aQ(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}`);VS.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await VS.openEnvironment(oQ(),sQ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await iQ.insertRecords(o,YS.hash_attribute,Cw,[s]);return _Q(fQ,c,{records:[s]},l)}catch(i){throw i}}a(EQ,"lmdbCreateAttribute")});var WS=T((Ume,Pw)=>{var{hdb_table:hQ,hdb_database:Dw}=Os(),mQ=it(),KS=require("joi"),pQ={undefined:"undefined",null:"null"},SQ=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||pQ[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"),TQ=KS.object({database:Dw,schema:Dw,table:hQ,records:KS.array().items(KS.object().custom(SQ)).required()});Pw.exports=function(e){return mQ.validateBySchema(e,TQ)}});var eu=T((Hme,Uw)=>{"use strict";var si=Y(),Mw=F(),Bme=WS(),{getDatabases:gQ}=(Ae(),re(Ge)),{ClientError:$o}=te();Uw.exports=RQ;function RQ(e){if(si.isEmpty(e))throw new $o("invalid update parameters defined.");if(si.isEmptyOrZeroLength(e.schema))throw new $o("invalid schema specified.");if(si.isEmptyOrZeroLength(e.table))throw new $o("invalid table specified.");if(!Array.isArray(e.records))throw new $o("records must be an array");let t=gQ()[e.schema]?.[e.table];if(si.isEmpty(t))throw new $o(`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 Mw.error("a valid hash attribute must be provided with update record:",o),new $o("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 Mw.error(`a valid hash value must be provided with ${e.operation} record:`,o),new $o(`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(RQ,"insertUpdateValidate")});var tu=T((xme,vw)=>{"use strict";var AQ=C().OPERATIONS_ENUM,QS=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=AQ.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};vw.exports=QS});var iu=T((kme,Bw)=>{"use strict";var Gme=tu(),If=C(),zS=Y(),jS=F(),OQ=require("uuid"),{handleHDBError:ru,hdb_errors:NQ}=te(),{HDB_ERROR_MSGS:nu,HTTP_STATUS_CODES:su}=NQ;Bw.exports=bQ;function bQ(e,t,r){for(let s=0;s<t.length;s++)yQ(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];IQ(i,r,e.operation)}}a(bQ,"processRows");function yQ(e){if(Buffer.byteLength(String(e))>If.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ru(new Error,nu.ATTR_NAME_LENGTH_ERR(e),su.BAD_REQUEST,void 0,void 0,!0);if(zS.isEmptyOrZeroLength(e)||zS.isEmpty(e.trim()))throw ru(new Error,nu.ATTR_NAME_NULLISH_ERR,su.BAD_REQUEST,void 0,void 0,!0)}a(yQ,"validateAttribute");function IQ(e,t,r){if(!e.hasOwnProperty(t)||zS.isEmptyOrZeroLength(e[t])){if(r===If.OPERATIONS_ENUM.INSERT||r===If.OPERATIONS_ENUM.UPSERT){e[t]=OQ.v4();return}throw jS.error("Update transaction aborted due to record with no hash value:",e),ru(new Error,nu.RECORD_MISSING_HASH_ERR,su.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>If.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw jS.error(e),ru(new Error,nu.HASH_VAL_LENGTH_ERR,su.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw jS.error(e),ru(new Error,nu.INVALID_FORWARD_SLASH_IN_HASH_ERR,su.BAD_REQUEST,void 0,void 0,!0)}a(IQ,"validateHash")});var wf=T((Vme,qw)=>{"use strict";var Hw=Y(),wQ=C(),CQ=F(),LQ=yf(),DQ=bf(),PQ=ii(),{SchemaEventMsg:MQ}=Zn(),UQ="already exists in";qw.exports=vQ;async function vQ(e,t,r){if(Hw.isEmptyOrZeroLength(r))return r;let n=[];Hw.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 BQ(e,t.schema,t.name,i)})),s}a(vQ,"lmdbCheckForNewAttributes");async function BQ(e,t,r,n){let s=new DQ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await HQ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(UQ))CQ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(BQ,"createNewAttribute");async function HQ(e){let t;return t=await LQ(e),PQ.signalSchemaChange(new MQ(process.pid,wQ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(HQ,"createAttribute")});var uc=T((Kme,xw)=>{"use strict";var JS=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}};xw.exports=JS});var Gw=T((Qme,Fw)=>{"use strict";var qQ=uc(),xQ=C().OPERATIONS_ENUM,XS=class extends qQ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(xQ.INSERT,r,n,s,i),this.records=t}};Fw.exports=XS});var $w=T((zme,kw)=>{"use strict";var FQ=uc(),GQ=C().OPERATIONS_ENUM,ZS=class extends FQ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(GQ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};kw.exports=ZS});var Yw=T((Xme,Vw)=>{"use strict";var kQ=uc(),$Q=C().OPERATIONS_ENUM,eT=class extends kQ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super($Q.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};Vw.exports=eT});var Ww=T((epe,Kw)=>{"use strict";var VQ=uc(),YQ=C().OPERATIONS_ENUM,tT=class extends VQ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(YQ.DELETE,n,s,t,i),this.original_records=r}};Kw.exports=tT});var ou=T((npe,Jw)=>{"use strict";var rpe=require("path"),Qw=Ve(),KQ=Gw(),WQ=$w(),QQ=Yw(),jQ=Ww(),_c=Et(),jw=Y(),{CONFIG_PARAMS:zQ}=C(),zw=J();zw.initSync();var Cf=C().OPERATIONS_ENUM,{getTransactionAuditStorePath:JQ}=Xe();Jw.exports=XQ;async function XQ(e,t){if(zw.get(zQ.LOGGING_AUDITLOG)===!1)return;let r=JQ(e.schema,e.table),n=await Qw.openEnvironment(r,e.table,!0),s=ZQ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){Qw.initializeDBIs(n,_c.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,_c.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[_c.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[_c.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),jw.isEmpty(s.user_name)||n.dbis[_c.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[_c.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(XQ,"writeTransaction");function ZQ(e,t){let r=jw.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Cf.INSERT)return new KQ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Cf.UPDATE)return new WQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Cf.UPSERT)return new QQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Cf.DELETE)return new jQ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(ZQ,"createTransactionObject")});var rT=T((ope,Xw)=>{"use strict";var ej=eu(),ipe=tu(),au=C(),tj=iu(),rj=ko().insertRecords,nj=Ve(),sj=F(),ij=wf(),{getSchemaPath:oj}=Xe(),aj=ou();Xw.exports=cj;async function cj(e){try{let{schema_table:t,attributes:r}=ej(e);tj(e,r,t.hash_attribute),e.schema!==au.SYSTEM_SCHEMA_NAME&&(r.includes(au.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(au.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(au.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(au.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await ij(e.hdb_auth_header,t,r),s=oj(e.schema,e.table),i=await nj.openEnvironment(s,e.table),o=await rj(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await aj(e,o)}catch(c){sj.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(cj,"lmdbCreateRecords")});var tC=T((cpe,eC)=>{"use strict";var Zw=C(),lj=rT(),uj=tu(),_j=require("fs-extra"),{getSchemaPath:dj}=Xe();eC.exports=fj;async function fj(e){let t=[{name:e.schema,createddate:Date.now()}],r=new uj(Zw.SYSTEM_SCHEMA_NAME,Zw.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await lj(r),await _j.mkdirp(dj(e.schema))}a(fj,"lmdbCreateSchema")});var nC=T((upe,rC)=>{"use strict";var nT=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}};rC.exports=nT});var aC=T((hpe,oC)=>{"use strict";var sC=Ve(),sT=mr(),iT=jr().LMDB_ERRORS_ENUM,Ej=Et(),iC=F(),dpe=Y(),hj=require("lmdb"),mj=nC(),pj=C(),{OVERFLOW_MARKER:fpe,MAX_SEARCH_KEY_LENGTH:Epe}=Ej,Sj=pj.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Tj(e,t,r,n){if(sT.validateEnv(e),t===void 0)throw new Error(iT.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(iT.IDS_REQUIRED):new Error(iT.IDS_MUST_BE_ITERABLE);try{let s=sC.listDBIs(e);sC.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[Sj]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,hj.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],O=h[R];if(O!=null)try{let v=sT.getIndexedValues(O);if(v)for(let G=0,B=v.length;G<B;G++)g.remove(v[G],o)}catch{iC.warn(`cannot delete from attribute: ${R}, ${O}:${o}`)}}});c.push(p),l.push(o),i.original_records.push(h)}catch(h){iC.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=sT.getNextMonotonicTime(),i}catch(s){throw s}}a(Tj,"deleteRecords");oC.exports={deleteRecords:Tj}});var cu=T((ppe,lC)=>{"use strict";var dc=Y(),gj=aC(),Rj=Ve(),{getSchemaPath:Aj}=Xe(),Oj=ou(),Nj=F();lC.exports=bj;async function bj(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(dc.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(dc.isEmptyOrZeroLength(e.hash_values)&&!dc.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];dc.isEmpty(l)||e.hash_values.push(l)}}if(dc.isEmptyOrZeroLength(e.hash_values))return cC([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(dc.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=Aj(e.schema,e.table),i=await Rj.openEnvironment(s,e.table),o=await gj.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Oj(e,o)}catch(c){Nj.error(`unable to write transaction due to ${c.message}`)}return cC(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(bj,"lmdbDeleteRecords");function cC(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(cC,"createDeleteResponse")});var aT=T((gpe,uC)=>{"use strict";var yj=C(),Tpe=mr();function oT(e,t){let r=Object.create(null);if(t.length===1&&yj.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(oT,"parseRow");function Ij(e,t,r,n){let s=oT(r,e);n.push(s)}a(Ij,"searchAll");function wj(e,t,r,n){let s=oT(r,e);n[t]=s}a(wj,"searchAllToMap");function Cj(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Cj,"iterateDBI");function Vo(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(Vo,"pushResults");function Lj(e,t,r,n,s,i){t.toString().endsWith(e)&&Vo(t,r,n,s,i)}a(Lj,"endsWith");function Dj(e,t,r,n,s,i){t.toString().includes(e)&&Vo(t,r,n,s,i)}a(Dj,"contains");function Pj(e,t,r,n,s,i){t>e&&Vo(t,r,n,s,i)}a(Pj,"greaterThanCompare");function Mj(e,t,r,n,s,i){t>=e&&Vo(t,r,n,s,i)}a(Mj,"greaterThanEqualCompare");function Uj(e,t,r,n,s,i){t<e&&Vo(t,r,n,s,i)}a(Uj,"lessThanCompare");function vj(e,t,r,n,s,i){t<=e&&Vo(t,r,n,s,i)}a(vj,"lessThanEqualCompare");uC.exports={parseRow:oT,searchAll:Ij,searchAllToMap:wj,iterateDBI:Cj,endsWith:Lj,contains:Dj,greaterThanCompare:Pj,greaterThanEqualCompare:Mj,lessThanCompare:Uj,lessThanEqualCompare:vj,pushResults:Vo}});var fc=T((bpe,pC)=>{"use strict";var Wi=Ve(),Ape=F(),en=mr(),Lf=Et(),ht=jr().LMDB_ERRORS_ENUM,Ope=Y(),Bj=C(),Df=aT(),{parseRow:Hj}=Df,Npe=require("lmdb"),{OVERFLOW_MARKER:_C,MAX_SEARCH_KEY_LENGTH:qj}=Lf;function dC(e,t,r,n=!1,s=void 0,i=void 0){return Yo(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(dC,"iterateFullIndex");function lu(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return Yo(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(O=>({value:O}))):d.getRange(g)})}a(lu,"iterateRangeBetween");function Yo(e,t,r,n){let s=e.database||e,i=Wi.openDBI(s,r);i[Lf.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Wi.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(Yo,"setupTransaction");function fC(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(_C)){if(!s)if(r)s=Wi.openDBI(e,r);else{let l=Wi.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=Wi.openDBI(e,l[_]),!s[Lf.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(fC,"getOverflowCheck");function xj(e,t,r,n=!1,s=void 0,i=void 0){if(en.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return Yo(e,t,t,(o,c,l)=>(Pf(r),r=uu(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>Hj(_.value,r))))}a(xj,"searchAll");function Fj(e,t,r,n=!1,s=void 0,i=void 0){if(en.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);Pf(r),r=uu(e.database||e,r);let o=new Map;for(let{key:c,value:l}of dC(e,t,t,n,s,i))o.set(c,Df.parseRow(l,r));return o}a(Fj,"searchAllToMap");function Gj(e,t,r=!1,n=void 0,s=void 0){if(en.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=dC(e,void 0,t,r,n,s),c=o.transaction,l=fC(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(Gj,"iterateDBI");function kj(e,t){if(en.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return Wi.statDBI(e,t).entryCount}a(kj,"countAll");function $j(e,t,r,n,s=!1,i=void 0,o=void 0){return Qi(e,r,n),Yo(e,t,r,(c,l,_,u)=>(n=en.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($j,"equals");function Vj(e,t,r){return Qi(e,t,r),Wi.openDBI(e,t).getValuesCount(r)}a(Vj,"count");function Yj(e,t,r,n,s=!1,i=void 0,o=void 0){return Qi(e,r,n),Yo(e,null,r,(c,l)=>{n=en.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(Yj,"startsWith");function Kj(e,t,r,n,s=!1,i=void 0,o=void 0){return EC(e,t,r,n,s,i,o,!0)}a(Kj,"endsWith");function EC(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Qi(e,r,n),Yo(e,null,r,(l,_,u,d)=>{let f=fC(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(_C)?_.getValues(E,{transaction:l}).map(p=>{let S=f(E,p);if(c?S.endsWith(n):S.includes(n))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(n):h.includes(n))?_[Lf.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:l}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(EC,"contains");function Wj(e,t,r,n,s=!1,i=void 0,o=void 0){Qi(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),lu(e,t,r,n,l,s,i,o,!0,!1)}a(Wj,"greaterThan");function Qj(e,t,r,n,s=!1,i=void 0,o=void 0){Qi(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),lu(e,t,r,n,l,s,i,o,!1,!1)}a(Qj,"greaterThanEqual");function jj(e,t,r,n,s=!1,i=void 0,o=void 0){Qi(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),lu(e,t,r,l,n,s,i,o,!1,!0)}a(jj,"lessThan");function zj(e,t,r,n,s=!1,i=void 0,o=void 0){Qi(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),lu(e,t,r,l,n,s,i,o,!1,!1)}a(zj,"lessThanEqual");function Jj(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(en.validateEnv(e),r===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ht.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ht.END_VALUE_REQUIRED);if(n=en.convertKeyValueToWrite(n),s=en.convertKeyValueToWrite(s),n>s)throw new Error(ht.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return lu(e,t,r,n,s,i,o,c)}a(Jj,"between");function Xj(e,t,r,n){en.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(Pf(r),r=uu(s,r),n===void 0)throw new Error(ht.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Df.parseRow(c,r)),o}a(Xj,"searchByHash");function Zj(e,t,r){en.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(Zj,"checkHashExists");function ez(e,t,r,n,s=[]){return mC(e,t,r,n,s),hC(e,t,r,n,s).map(i=>i[1])}a(ez,"batchSearchByHash");function tz(e,t,r,n,s=[]){mC(e,t,r,n,s);let i=new Map;for(let[o,c]of hC(e,t,r,n,s))i.set(o,c);return i}a(tz,"batchSearchByHashToMap");function hC(e,t,r,n,s=[]){return Yo(e,t,t,(i,o,c)=>{r=uu(c,r);let l=r.length<3;return n.map(_=>{let u=c.dbis[t].get(_,{transaction:i,lazy:l});if(u)return[_,Df.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(hC,"batchHashSearch");function mC(e,t,r,n,s){if(en.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(Pf(r),n==null)throw new Error(ht.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ht.IDS_MUST_BE_ITERABLE)}a(mC,"initializeBatchSearchByHash");function Pf(e){if(!Array.isArray(e))throw e===void 0?new Error(ht.FETCH_ATTRIBUTES_REQUIRED):new Error(ht.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Pf,"validateFetchAttributes");function Qi(e,t,r){if(en.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.SEARCH_VALUE_REQUIRED);if(r?.length>qj)throw new Error(ht.SEARCH_VALUE_TOO_LARGE)}a(Qi,"validateComparisonFunctions");function uu(e,t){return t.length===1&&Bj.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Wi.listDBIs(e)),t}a(uu,"setGetWholeRowAttributes");pC.exports={searchAll:xj,searchAllToMap:Fj,count:Vj,countAll:kj,equals:$j,startsWith:Yj,endsWith:Kj,contains:EC,searchByHash:Xj,setGetWholeRowAttributes:uu,batchSearchByHash:ez,batchSearchByHashToMap:tz,checkHashExists:Zj,iterateDBI:Gj,greaterThan:Wj,greaterThanEqual:Qj,lessThan:jj,lessThanEqual:zj,between:Jj}});var Ec=T((Ipe,AC)=>{var SC=require("lodash"),TC=it(),me=require("joi"),rz=Y(),{hdb_schema_table:_u,checkValidTable:gC,hdb_table:RC,hdb_database:Mf}=Os(),{handleHDBError:nz,hdb_errors:sz}=te(),{getDatabases:iz}=(Ae(),re(Ge)),{HTTP_STATUS_CODES:oz}=sz,az=me.object({database:Mf,schema:Mf,table:RC,search_attribute:_u,search_value:me.any().required(),get_attributes:me.array().min(1).items(me.alternatives(_u,me.object())).optional(),desc:me.bool(),limit:me.number().integer().min(1),offset:me.number().integer().min(0)}),cz=me.object({database:Mf,schema:Mf,table:RC,operator:me.string().valid("and","or").default("and").lowercase(),offset:me.number().integer().min(0),limit:me.number().integer().min(1),get_attributes:me.array().min(1).items(me.alternatives(_u,me.object())).optional(),sort:me.object({attribute:me.alternatives(_u,me.array().min(1)),descending:me.bool().optional()}).optional(),conditions:me.array().min(1).items(me.alternatives(me.object({operator:me.string().valid("and","or").default("and").lowercase(),conditions:me.array()}),me.object({search_attribute:me.alternatives(_u,me.array().min(1)),search_type:me.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:me.when("search_type",{switch:[{is:"equals",then:me.any()},{is:"between",then:me.array().items(me.alternatives([me.string(),me.number()])).length(2)}],otherwise:me.alternatives(me.string(),me.number())}).required()}))).required()});AC.exports=function(e,t){let r=null;switch(t){case"value":r=TC.validateBySchema(e,az);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(gC("database",e.schema)),i(gC("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=TC.validateBySchema(e,cz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=rz.checkGlobalSchemaTable(e.schema,e.table);if(s)return nz(new Error,s,oz.NOT_FOUND);let o=iz()[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 _=SC.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!Array.isArray(u)&&!SC.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 cT=T((Cpe,OC)=>{"use strict";var lz=Ve(),uz=Ec(),{getSchemaPath:_z}=Xe();OC.exports=dz;function dz(e){let t=uz(e,"hashes");if(t)throw t;let r=_z(e.schema,e.table);return lz.openEnvironment(r,e.table)}a(dz,"initialize")});var lT=T((Dpe,NC)=>{"use strict";var fz=fc(),Ez=cT();NC.exports=hz;async function hz(e){let t=await Ez(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return fz.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(hz,"lmdbGetDataByHash")});var hc=T((Mpe,bC)=>{"use strict";var uT=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};bC.exports=uT});var IC=T((Bpe,yC)=>{"use strict";var vpe=hc(),mz=fc(),pz=cT();yC.exports=Sz;async function Sz(e){let t=await pz(e),r=global.hdb_schema[e.schema][e.table];return mz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Sz,"lmdbSearchByHash")});var es=T((qpe,wC)=>{"use strict";var _T=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}};wC.exports=_T});var Uf=T((Fpe,UC)=>{"use strict";var nr=fc(),Tz=Ve(),gz=Y(),pe=Et(),Ko=C(),Rz=ri(),CC=jr().LMDB_ERRORS_ENUM,{getSchemaPath:Az}=Xe(),oi=Ko.SEARCH_WILDCARDS;async function Oz(e,t,r){let n;e.schema===Ko.SYSTEM_SCHEMA_NAME?n=Rz[e.table]:n=global.hdb_schema[e.schema][e.table];let s=MC(e,n.hash_attribute,r,t);return DC(e,s,n.hash_attribute,r)}a(Oz,"prepSearch");async function DC(e,t,r,n){let s=Az(e.schema,e.table),i=await Tz.openEnvironment(s,e.table),o=PC(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(Nz(e,r)===!1){let u=e.search_attribute;if(u===r)return n?LC(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[u]:f.key}),"toObject");return n?LC(o,d):o.map(d)}let _=e.search_attribute===r?o.map(u=>u.key):o.map(u=>u.value);return n===!0?nr.batchSearchByHashToMap(c,r,e.get_attributes,_):nr.batchSearchByHash(c,r,e.get_attributes,_)}a(DC,"executeSearch");function PC(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=nr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.CONTAINS:s=nr.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=nr.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=nr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return nr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return nr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.SEARCH_ALL:return nr.searchAll(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return nr.searchAllToMap(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.BETWEEN:s=nr.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=nr.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=nr.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=nr.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=nr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(PC,"searchByType");function LC(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(LC,"createMapFromIterable");function Nz(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(Nz,"checkToFetchMore");function MC(e,t,r,n){if(gz.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(CC.UNKNOWN_SEARCH_TYPE)}else switch(n){case Ko.VALUE_SEARCH_COMPARATORS.BETWEEN:return pe.SEARCH_TYPES.BETWEEN;case Ko.VALUE_SEARCH_COMPARATORS.GREATER:return pe.SEARCH_TYPES.GREATER_THAN;case Ko.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return pe.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ko.VALUE_SEARCH_COMPARATORS.LESS:return pe.SEARCH_TYPES.LESS_THAN;case Ko.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return pe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(CC.UNKNOWN_SEARCH_TYPE)}}a(MC,"createSearchTypeFromSearchObject");UC.exports={executeSearch:DC,createSearchTypeFromSearchObject:MC,prepSearch:Oz,searchByType:PC}});var BC=T(($pe,vC)=>{"use strict";var kpe=es(),bz=Ec(),yz=Y(),Iz=C(),wz=Uf();vC.exports=Cz;function Cz(e,t){if(!yz.isEmpty(t)&&Iz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=bz(e,"value");if(n)throw n;return wz.prepSearch(e,t,!0)}a(Cz,"lmdbGetDataByValue")});var du=T((Kpe,HC)=>{"use strict";var Ype=es(),Lz=Ec(),Dz=Y(),Pz=C(),Mz=Uf();HC.exports=Uz;async function Uz(e,t){if(!Dz.isEmpty(t)&&Pz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Lz(e,"value");if(n)throw n;return Mz.prepSearch(e,t,!1)}a(Uz,"lmdbSearchByValue")});var xC=T((jpe,qC)=>{"use strict";var Qpe=Et(),dT=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}},fT=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},ET=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};qC.exports={SearchByConditionsObject:dT,SearchCondition:fT,SortAttribute:ET}});var VC=T((Zpe,$C)=>{"use strict";var Jpe=xC().SearchByConditionsObject,vz=es(),Bz=Ec(),hT=fc(),vf=Et(),{Resource:Xpe}=(jn(),re(ES)),kC=Uf(),Hz=aT(),qz=require("lodash"),{getSchemaPath:xz}=Xe(),FC=Ve(),{handleHDBError:Fz,hdb_errors:Gz}=te(),{HTTP_STATUS_CODES:kz}=Gz,$z=1e8;$C.exports=Vz;async function Vz(e){let t=Bz(e,"conditions");if(t)throw Fz(t,t.message,kz.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=xz(e.schema,e.table),n=await FC.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)FC.openDBI(n,_.search_attribute);let i=qz.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===vf.SEARCH_TYPES.EQUALS?_.estimated_count=hT.count(n,_.search_attribute,_.search_value):u===vf.SEARCH_TYPES.CONTAINS||u===vf.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=$z}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await GC(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(kC.filterByType),d=u.length,f=hT.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=>Hz.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await GC(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=hT.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(Vz,"lmdbSearchByConditions");async function GC(e,t,r,n){let s=new vz(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===vf.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,kC.searchByType(e,s,i,n).map(o=>o.value)}a(GC,"executeConditionSearch")});var fu=T((tSe,YC)=>{"use strict";var Yz=C().OPERATIONS_ENUM,mT=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=Yz.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};YC.exports=mT});var pT=T((nSe,ZC)=>{"use strict";var jC=es(),zC=fu(),JC=du(),XC=cu(),gr=C(),KC=Y(),WC=Ve(),{getTransactionAuditStorePath:Kz,getSchemaPath:Wz}=Xe(),QC=F();ZC.exports=Qz;async function Qz(e){try{if(KC.isEmpty(global.hdb_schema[e.schema])||KC.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await jz(e),await zz(e);let t=Wz(e.schema,e.table);try{await WC.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")QC.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Kz(e.schema,e.table);await WC.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")QC.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Qz,"lmdbDropTable");async function jz(e){let t=new jC(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 JC(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 zC(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await XC(s)}a(jz,"deleteAttributesFromSystem");async function zz(e){let t=new jC(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 JC(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 zC(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await XC(s)}catch(i){throw i}}a(zz,"dropTableFromSystem")});var tL=T((iSe,eL)=>{"use strict";var Jz=require("fs-extra"),Xz=es(),Zz=hc(),eJ=fu(),tJ=pT(),rJ=cu(),nJ=lT(),sJ=du(),ai=C(),{getSchemaPath:iJ}=Xe(),{handleHDBError:oJ,hdb_errors:aJ}=te(),{HDB_ERROR_MSGS:cJ,HTTP_STATUS_CODES:lJ}=aJ;eL.exports=uJ;async function uJ(e){let t;try{t=await _J(e.schema);let r=new Xz(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 sJ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await tJ(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new eJ(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await rJ(s);let i=iJ(t);await Jz.remove(i)}catch(r){throw r}}a(uJ,"lmdbDropSchema");async function _J(e){let t=new Zz(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 nJ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw oJ(new Error,cJ.SCHEMA_NOT_FOUND(e),lJ.NOT_FOUND,void 0,void 0,!0);return n}a(_J,"validateDropSchema")});var Eu=T((aSe,rL)=>{"use strict";var ST=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};rL.exports=ST});var gT=T((uSe,nL)=>{"use strict";var dJ=require("fs-extra"),Bf=Ve(),{getTransactionAuditStorePath:fJ}=Xe(),TT=Et(),lSe=Eu();nL.exports=EJ;async function EJ(e){let t;try{let r=fJ(e.schema,e.table);await dJ.mkdirp(r),t=await Bf.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{Bf.createDBI(t,TT.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Bf.createDBI(t,TT.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Bf.createDBI(t,TT.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(EJ,"createTransactionsAuditEnvironment")});var aL=T((dSe,oL)=>{"use strict";var RT=C(),sL=Ve(),hJ=ko(),{getSystemSchemaPath:mJ,getSchemaPath:pJ}=Xe(),SJ=ri(),TJ=yf(),AT=bf(),gJ=F(),RJ=gT(),NT=SJ.hdb_table,iL=[];for(let e=0;e<NT.attributes.length;e++)iL.push(NT.attributes[e].attribute);oL.exports=AJ;async function AJ(e,t){let r=pJ(t.schema,t.table),n=new AT(t.schema,t.table,RT.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new AT(t.schema,t.table,RT.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new AT(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await sL.createEnvironment(r,t.table),e!==void 0){let o=await sL.openEnvironment(mJ(),RT.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await hJ.insertRecords(o,NT.hash_attribute,iL,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await OT(n),await OT(s),await OT(i)}await RJ(t)}catch(o){throw o}}a(AJ,"lmdbCreateTable");async function OT(e){try{await TJ(e)}catch(t){gJ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(OT,"createAttribute")});var lL=T((ESe,cL)=>{"use strict";var OJ=eu(),NJ=iu(),bJ=wf(),hu=C(),yJ=ko().updateRecords,IJ=Ve(),{getSchemaPath:wJ}=Xe(),CJ=ou(),LJ=F();cL.exports=DJ;async function DJ(e){try{let{schema_table:t,attributes:r}=OJ(e);NJ(e,r,t.hash_attribute),e.schema!==hu.SYSTEM_SCHEMA_NAME&&(r.includes(hu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(hu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(hu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(hu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await bJ(e.hdb_auth_header,t,r),s=wJ(e.schema,e.table),i=await IJ.openEnvironment(s,e.table),o=await yJ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await CJ(e,o)}catch(c){LJ.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(DJ,"lmdbUpdateRecords")});var _L=T((mSe,uL)=>{"use strict";var PJ=C().OPERATIONS_ENUM,bT=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=PJ.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};uL.exports=bT});var fL=T((TSe,dL)=>{"use strict";var SSe=_L(),MJ=eu(),UJ=iu(),vJ=wf(),mu=C(),BJ=ko().upsertRecords,HJ=Ve(),{getSchemaPath:qJ}=Xe(),xJ=ou(),FJ=F(),{handleHDBError:GJ,hdb_errors:kJ}=te();dL.exports=$J;async function $J(e){let t;try{t=MJ(e)}catch(l){throw GJ(l,l.message,kJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;UJ(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 vJ(e.hdb_auth_header,r,n),i=qJ(e.schema,e.table),o=await HJ.openEnvironment(i,e.table),c=await BJ(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await xJ(e,c)}catch(l){FJ.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($J,"lmdbUpsertRecords")});var hL=T((RSe,EL)=>{"use strict";var yT=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};EL.exports=yT});var pL=T((OSe,mL)=>{"use strict";var IT=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}};mL.exports=IT});var gL=T((ySe,TL)=>{"use strict";var wT=Ve(),{getTransactionAuditStorePath:VJ}=Xe(),bSe=hL(),pu=Et(),YJ=Y(),SL=pL(),KJ=require("util").promisify,WJ=KJ(setTimeout),QJ=1e4,jJ=100;TL.exports=zJ;async function zJ(e){let t=VJ(e.schema,e.table),r=await wT.openEnvironment(t,e.table,!0),n=wT.listDBIs(r);wT.initializeDBIs(r,pu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new SL;do s=await JJ(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 WJ(jJ);while(s.transactions_deleted>0);return i}a(zJ,"deleteAuditLogsBefore");async function JJ(e,t){let r=new SL;try{let n=e.dbis[pu.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[pu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];YJ.isEmpty(c)||(s=e.dbis[pu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[pu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>QJ)break}return await s,r}catch(n){throw n}}a(JJ,"deleteTransactions")});var AL=T((wSe,RL)=>{"use strict";var CT=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};RL.exports=CT});var NL=T((DSe,OL)=>{"use strict";var XJ=es(),ZJ=fu(),LSe=AL(),bs=C(),e2=Y(),LT=Ve(),t2=ri(),r2=du(),n2=cu(),{getSchemaPath:s2}=Xe();OL.exports=i2;async function i2(e,t=!0){let r;e.schema===bs.SYSTEM_SCHEMA_NAME?r=t2[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await a2(e),s=s2(e.schema,e.table),i=await LT.openEnvironment(s,e.table);return t===!0&&await o2(e,i,r.hash_attribute),LT.dropDBI(i,e.attribute),n}a(i2,"lmdbDropAttribute");async function o2(e,t,r){let n=LT.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 a2(e){let t=new XJ(bs.SYSTEM_SCHEMA_NAME,bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await r2(t)).filter(o=>o[bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(e2.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new ZJ(bs.SYSTEM_SCHEMA_NAME,bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return n2(i)}a(a2,"dropAttributeFromSystem")});var LL=T((USe,CL)=>{"use strict";var DT=Ve(),mc=Et(),MSe=mr(),PT=C(),bL=Y(),{getTransactionAuditStorePath:c2}=Xe(),l2=fc(),Hf=uc(),u2=F();CL.exports=_2;async function _2(e){let t=c2(e.schema,e.table),r=await DT.openEnvironment(t,e.table,!0),n=DT.listDBIs(r);DT.initializeDBIs(r,mc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case PT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return yL(r,e.search_values);case PT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,f2(r,e.search_values,s);case PT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return d2(r,e.search_values);default:return yL(r)}}a(_2,"readAuditLog");function yL(e,t=[0,Date.now()]){bL.isEmpty(t[0])&&(t[0]=0),bL.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 Hf,s))}a(yL,"searchTransactionsByTimestamp");function d2(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,wL(e,i))}return Object.fromEntries(r)}a(d2,"searchTransactionsByUsername");function f2(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=l2.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=wL(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);IL(l,"records",r,u,o),IL(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(f2,"searchTransactionsByHashValues");function IL(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 Hf(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Hf(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(l,[_])}}}a(IL,"loopRecords");function wL(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 Hf,i);r.push(o)}}catch(i){u2.warn(i)}return r}catch(n){throw n}}a(wL,"batchSearchTransactions")});var PL=T((qSe,DL)=>{"use strict";var{getSchemaPath:BSe}=Xe(),HSe=Ve(),{database:E2}=(Ae(),re(Ge));DL.exports={writeTransaction:h2};async function h2(e,t,r){return E2({database:e,table:t}).transaction(r)}a(h2,"writeTransaction")});var BL=T((FSe,vL)=>{"use strict";var{getSchemaPath:ML}=Xe(),UL=Ve();vL.exports={flush:m2,resetReadTxn:p2};async function m2(e,t){return(await UL.openEnvironment(ML(e,t),t.toString())).flushed}a(m2,"flush");async function p2(e,t){try{(await UL.openEnvironment(ML(e,t),t.toString())).resetReadTxn()}catch{}}a(p2,"resetReadTxn")});var FL=T((kSe,xL)=>{"use strict";var{Readable:S2}=require("stream"),{getDatabases:T2}=(Ae(),re(Ge)),{readSync:g2,openSync:R2,createReadStream:HL}=require("fs"),{open:A2}=require("lmdb"),qL=Ef(),O2=mf(),{AUDIT_STORE_OPTIONS:N2}=(Bo(),re(iI)),{INTERNAL_DBIS_NAME:b2,AUDIT_STORE_NAME:y2}=Et();xL.exports=w2;var MT=32768,I2=100;async function w2(e){let t=e.database||e.schema||"data",r=T2()[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=A2({noSync:!0,maxDbs:O2.MAX_DBS}),f,E=d.openDB(b2,new qL(!1)),h=u.useReadTransaction(),p=0,S=a(async function(g,O){O.encoding="binary",O.encoder=void 0;let v=d.openDB(g,O),G=u.openDB(g,O);for(let{key:B,version:U,value:j}of G.getRange({transaction:h,versions:G.useVersions}))f=v.put(B,j,U),p++%I2===0&&(await new Promise(K=>setTimeout(K,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:g,value:O}of u.getRange({transaction:h,start:!1}))if(s.some(v=>g.startsWith?.(v+"/"))){E.put(g,O);let[,v]=g.split("/"),G=!v,B=new qL(!G,G);await S(g,B)}e.include_audit&&await S(y2,Object.assign({},N2)),await f;let R=HL(d.path);return R.headers=l(),R.on("close",()=>{h.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=R2(o.path);return o.transaction(()=>{let _=Buffer.alloc(MT);g2(c,_,0,MT),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=HL(null,{fd:c,start:MT}),f=new S2.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(w2,"getBackup")});var $L=T((VSe,kL)=>{"use strict";var C2=F(),{handleHDBError:L2}=te(),D2=ow(),P2=yf(),M2=rT(),U2=tC(),v2=cu(),B2=lT(),H2=IC(),q2=BC(),x2=du(),F2=VC(),G2=tL(),k2=aL(),$2=lL(),V2=fL(),Y2=gL(),K2=pT(),W2=NL(),Q2=LL(),j2=PL(),GL=BL(),z2=FL(),UT=class extends D2{static{a(this,"LMDBBridge")}async searchByConditions(t){return F2(t)}async getDataByHash(t){return await B2(t)}async searchByHash(t){return await H2(t)}async getDataByValue(t,r){return await q2(t,r)}async searchByValue(t){return await x2(t)}async createSchema(t){return await U2(t)}async dropSchema(t){return await G2(t)}async createTable(t,r){return await k2(t,r)}async dropTable(t){return await K2(t)}async createAttribute(t){return await P2(t)}async createRecords(t){return await M2(t)}async updateRecords(t){return await $2(t)}async upsertRecords(t){try{return await V2(t)}catch(r){throw L2(r,null,null,C2.ERR,r)}}async deleteRecords(t){return await v2(t)}async dropAttribute(t){return await W2(t)}async deleteAuditLogsBefore(t){return await Y2(t)}async readAuditLog(t){return await Q2(t)}writeTransaction(t,r,n){return j2.writeTransaction(t,r,n)}flush(t,r){return GL.flush(t,r)}resetReadTxn(t,r){return GL.resetReadTxn(t,r)}getBackup(t){return z2(t)}};kL.exports=UT});var XL={};$e(XL,{ResourceBridge:()=>HT});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 YL(e,t){let r=ys(e),n=qT(e,r);if(!r)throw new ts.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;tt(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&&nf(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 ys(e){let t=e.database||e.schema||X2,r=rs()[t];if(!r)throw(0,ts.handleHDBError)(new Error,J2.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function KL(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*WL(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 QL,qf,ts,jL,zL,ns,vT,BT,JL,J2,X2,Z2,e4,VL,HT,ZL=Ne(()=>{"use strict";QL=H($L()),qf=H(Ec()),ts=H(te());Ae();jL=H(eu()),zL=H(iu()),ns=H(C()),vT=H(ii()),BT=H(Zn()),JL=H(Y());Fo();sf();({HDB_ERROR_MSGS:J2}=ts.hdb_errors),X2="data",Z2=1e4,e4=10,HT=class extends QL.default{static{a(this,"ResourceBridge")}constructor(t){super(t),VL=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,qf.default)(t,"conditions");if(r)throw(0,ts.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=ys(t);if(!n)throw new ts.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 ts.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}]}mt({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await ys(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=ys(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){ys(t).dropTable()}createSchema(t){return Su({database:t.schema,table:null}),vT.signalSchemaChange(new BT.SchemaEventMsg(process.pid,ns.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await xT(t.schema),vT.signalSchemaChange(new BT.SchemaEventMsg(process.pid,ns.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,VL.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,jL.default)(t);(0,zL.default)(t,n,r.primaryKey);let s,i=rs()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return tt(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=nf(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=rs()[t.schema][t.table],n={user:t.hdb_user};return tt(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 KL(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=rs()[t.schema][t.table];if(!r.createdTimeProperty)throw new ts.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:ns.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,JL.async_set_timeout)(e4),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%Z2===0&&await _();return l.length>0&&await _(),s?KL(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,qf.default)(t,"hashes");if(r)throw r;return YL(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of YL(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&ns.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,qf.default)(t,"value");if(n)throw n;let s=ys(t);if(!s)throw new ts.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===ns.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=ys(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){ys({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return ys(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=ys(t),n={};switch(t.search_type){case ns.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 ns.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of WL(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return WL(r,t.search_values?.[0],t.search_values?.[1])}}};a(qT,"getSelect");a(YL,"getRecords");a(ys,"getTable");a(KL,"createDeleteResponse");a(WL,"groupRecordsInHistory")});var wn=T((zSe,eD)=>{"use strict";var{ResourceBridge:t4}=(ZL(),re(XL)),r4=J();r4.initSync();var xf;function n4(){return xf||(xf=new t4,xf)}a(n4,"getBridge");eD.exports=n4()});var sD=T((XSe,nD)=>{"use strict";var tD=require("lodash"),Tu=require("mathjs"),s4=require("jsonata"),rD=Y();nD.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?tD.uniqWith(e,tD.isEqual):e,searchJSON:i4,mad:gu.bind(null,Tu.mad),mean:gu.bind(null,Tu.mean),mode:gu.bind(null,Tu.mode),prod:gu.bind(null,Tu.prod),median:gu.bind(null,Tu.median)};function gu(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(gu,"aggregateFunction");function i4(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(rD.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),rD.isEmpty(this.__ala__.res[r])){let n=s4(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(i4,"searchJSON")});var oD=T((eTe,iD)=>{"use strict";var Nt=require("moment"),FT="YYYY-MM-DDTHH:mm:ss.SSSZZ";Nt.suppressDeprecationWarnings=!0;iD.exports={current_date:()=>Nt().utc().format("YYYY-MM-DD"),current_time:()=>Nt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Nt(e).utc().format("YYYY");case"month":return Nt(e).utc().format("MM");case"day":return Nt(e).utc().format("DD");case"hour":return Nt(e).utc().format("HH");case"minute":return Nt(e).utc().format("mm");case"second":return Nt(e).utc().format("ss");case"millisecond":return Nt(e).utc().format("SSS");default:break}},date:e=>Nt(e).utc().format(FT),date_format:(e,t)=>Nt(e).utc().format(t),date_add:(e,t,r)=>Nt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Nt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=Nt(e).utc(),s=Nt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>Nt().utc().valueOf(),get_server_time:()=>Nt().format(FT),offset_utc:(e,t)=>Nt(e).utc().utcOffset(t).format(FT)}});var uD=T((tTe,lD)=>{"use strict";var o4=require("@turf/area"),a4=require("@turf/length"),c4=require("@turf/circle"),l4=require("@turf/difference"),u4=require("@turf/distance"),_4=require("@turf/boolean-contains"),d4=require("@turf/boolean-equal"),f4=require("@turf/boolean-disjoint"),E4=require("@turf/helpers"),aD=C(),ge=Y(),ci=F();lD.exports={geoArea:h4,geoLength:m4,geoCircle:p4,geoDifference:S4,geoDistance:cD,geoNear:T4,geoContains:g4,geoEqual:R4,geoCrosses:A4,geoConvert:O4};function h4(e){if(ge.isEmpty(e))return NaN;typeof e=="string"&&(e=ge.autoCastJSON(e));try{return o4.default(e)}catch(t){return ci.trace(t,e),NaN}}a(h4,"geoArea");function m4(e,t){if(ge.isEmpty(e))return NaN;typeof e=="string"&&(e=ge.autoCastJSON(e));try{return a4.default(e,{units:t||"kilometers"})}catch(r){return ci.trace(r,e),NaN}}a(m4,"geoLength");function p4(e,t,r){if(ge.isEmpty(e))return NaN;if(ge.isEmpty(t))return NaN;typeof e=="string"&&(e=ge.autoCastJSON(e));try{return c4.default(e,t,{units:r||"kilometers"})}catch(n){return ci.trace(n,e,t),NaN}}a(p4,"geoCircle");function S4(e,t){if(ge.isEmpty(e))return NaN;if(ge.isEmpty(t))return NaN;typeof e=="string"&&(e=ge.autoCastJSON(e)),typeof t=="string"&&(t=ge.autoCastJSON(t));try{return l4(e,t)}catch(r){return ci.trace(r,e,t),NaN}}a(S4,"geoDifference");function cD(e,t,r){if(ge.isEmpty(e))return NaN;if(ge.isEmpty(t))return NaN;typeof e=="string"&&(e=ge.autoCastJSON(e)),typeof t=="string"&&(t=ge.autoCastJSON(t));try{return u4.default(e,t,{units:r||"kilometers"})}catch(n){return ci.trace(n,e,t),NaN}}a(cD,"geoDistance");function T4(e,t,r,n){if(ge.isEmpty(e)||ge.isEmpty(t))return!1;if(ge.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=ge.autoCastJSON(e)),typeof t=="string"&&(t=ge.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return cD(e,t,n)<=r}catch(s){return ci.trace(s,e,t),!1}}a(T4,"geoNear");function g4(e,t){if(ge.isEmpty(e)||ge.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ge.autoCastJSON(e)),typeof t=="string"&&(t=ge.autoCastJSON(t));try{return _4.default(e,t)}catch(r){return ci.trace(r,e,t),!1}}a(g4,"geoContains");function R4(e,t){if(ge.isEmpty(e)||ge.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ge.autoCastJSON(e)),typeof t=="string"&&(t=ge.autoCastJSON(t));try{return d4.default(e,t)}catch(r){return ci.trace(r,e,t),!1}}a(R4,"geoEqual");function A4(e,t){if(ge.isEmpty(e)||ge.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ge.autoCastJSON(e)),typeof t=="string"&&(t=ge.autoCastJSON(t));try{return!f4.default(e,t)}catch(r){return ci.trace(r,e,t),!1}}a(A4,"geoCrosses");function O4(e,t,r){if(ge.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(ge.isEmpty(t))throw new Error("geo_type is required");if(ge.isEmpty(aD.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(aD.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=ge.autoCastJSON(e)),E4[t](e,r)}a(O4,"geoConvert")});var Ff=T((nTe,_D)=>{var Wo=sD(),tn=oD(),Is=uD();_D.exports=e=>{e.aggr.mad=e.aggr.MAD=Wo.mad,e.aggr.mean=e.aggr.MEAN=Wo.mean,e.aggr.mode=e.aggr.MODE=Wo.mode,e.aggr.prod=e.aggr.PROD=Wo.prod,e.aggr.median=e.aggr.MEDIAN=Wo.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Wo.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Wo.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=tn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=tn.current_time,e.fn.extract=e.fn.EXTRACT=tn.extract,e.fn.date=e.fn.DATE=tn.date,e.fn.date_format=e.fn.DATE_FORMAT=tn.date_format,e.fn.date_add=e.fn.DATE_ADD=tn.date_add,e.fn.date_sub=e.fn.DATE_SUB=tn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=tn.date_diff,e.fn.now=e.fn.NOW=tn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=tn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=tn.get_server_time,e.fn.getdate=e.fn.GETDATE=tn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=tn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Is.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Is.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Is.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Is.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Is.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Is.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Is.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Is.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Is.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Is.geoNear}});var hD=T((sTe,ED)=>{"use strict";var Ru=require("lodash"),Rr=require("alasql");Rr.options.cache=!1;var N4=Ff(),dD=require("clone"),Gf=require("recursive-iterator"),_e=F(),Le=Y(),pc=wn(),b4=C(),{hdb_errors:y4}=te(),{getDatabases:fD}=(Ae(),re(Ge)),I4="IS NULL",ss="There was a problem performing this search. Please check the logs and try again.";N4(Rr);var GT=class{static{a(this,"SQLSearch")}constructor(t,r){if(Le.isEmpty(t))throw _e.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 _e.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw _e.error("Error thrown from checkEmptySQL in SQLSearch class method search."),_e.error(n),new Error(ss)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw _e.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),_e.error(n),new Error(ss)}if(Object.keys(this.data).length===0)return _e.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw _e.error("Error thrown from processJoins in SQLSearch class method search."),_e.error(n),new Error(ss)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw _e.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),_e.error(n),new Error(ss)}try{return t=await this._finalSQL(),t}catch(n){throw _e.error("Error thrown from finalSQL in SQLSearch class method search."),_e.error(n),new Error(ss)}}_getColumns(){let t=new Gf(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(dD(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Ru.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=fD()[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)){_e.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Gf(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 Rr.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 Rr.yy.LogicValue({value:i}):n instanceof Rr.yy.StringValue&&Le.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Rr.yy.NumValue({value:i}))});if(t){_e.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Gf(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(b4.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&&Ru.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 Rr.promise(r)}catch(r){throw _e.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),_e.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(dD(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(I4)>-1&&this.tables.forEach(s=>{let i={columnid:fD()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Ru.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 pc.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 _e.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),_e.error(u),new Error(ss)}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 pc.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 _e.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),_e.error(u),new Error(ss)}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 pc.getDataByValue(c,E.operation);if(l)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...n[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]):(this.data[i].__merged_data[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,p))}}catch(u){throw _e.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),_e.error(u),new Error(ss)}else try{c.search_attribute=s.attribute,c.search_value="*";let u=await pc.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 _e.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),_e.error(u),new Error(ss)}}}_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,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let 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 _e.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),_e.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=Ru.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,R=p.length;S<R;S++){let g=p[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 Gf(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=Ru.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 _e.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),_e.error(i),new Error(ss)}}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 pc.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 p=s.columns[h],S=E[p]===void 0?null:E[p];this.data[n].__merged_data[f].push(S)}}}}catch(r){throw _e.error("Error thrown from getDataByHash function in SQLSearch class method getData."),_e.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();_e.trace(`Final SQL: ${s}`),n=await Rr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),_e.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw _e.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),_e.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 _e.error(y4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),_e.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 pc.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 _e.error("There was an error when processing this SQL operation. Check your logs"),_e.error(o),new Error(ss)}}return Object.values(Object.values(this.data)[0].__merged_data)}};ED.exports=GT});var Ar=T((oTe,mD)=>{"use strict";var w4=sw();mD.exports={searchByConditions:L4,searchByHash:D4,searchByValue:P4,search:M4};var kT=wn(),{transformReq:$T}=Y(),C4=hD();async function L4(e){return $T(e),kT.searchByConditions(e)}a(L4,"searchByConditions");async function D4(e){$T(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of kT.searchByHash(e))r&&t.push(r);return t}a(D4,"searchByHash");async function P4(e){$T(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of kT.searchByValue(e))t.push(r);return t}a(P4,"searchByValue");function M4(e,t){try{let r=new w4(e);r.validate(),new C4(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(M4,"search")});var li=T((cTe,gD)=>{"use strict";var Au=require("crypto"),U4=J(),{CONFIG_PARAMS:v4}=C(),SD="aes-256-cbc",B4=32,H4=16,VT=64,TD=32,q4=VT+TD,pD=new Map;gD.exports={encrypt:x4,decrypt:F4,createNatsTableStreamName:G4};function x4(e){let t=Au.randomBytes(B4),r=Au.randomBytes(H4),n=Au.createCipheriv(SD,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(x4,"encrypt");function F4(e){let t=e.substr(0,VT),r=e.substr(VT,TD),n=e.substr(q4,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Au.createDecipheriv(SD,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(F4,"decrypt");function G4(e,t){let r=U4.get(v4.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=pD.get(r);return n||(n=Au.createHash("md5").update(r).digest("hex"),pD.set(r,n)),n}a(G4,"createNatsTableStreamName")});var ji=T((_Te,AD)=>{"use strict";var uTe=Ar(),kf=F(),RD=Nf(),k4=li(),$f=Y(),{handleHDBError:Vf,hdb_errors:$4}=te(),{HDB_ERROR_MSGS:Yf,HTTP_STATUS_CODES:YT}=$4,V4=J();V4.initSync();var{getDatabases:KT}=(Ae(),re(Ge));AD.exports={describeAll:Y4,describeTable:Kf,describeSchema:K4};async function Y4(e){try{let t=$f.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=KT(),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 Kf({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 Kf({schema:u,table:f,exact_count:l},h)}E&&c.push(E)}catch(E){kf.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 kf.error("Got an error in describeAll"),kf.error(t),Vf(new Error,Yf.DESCRIBE_ALL_ERR)}}a(Y4,"describeAll");async function Kf(e,t){$f.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=RD.describe_table(e);if(i)throw i;let c=KT()[r];if(!c)throw Vf(new Error,Yf.SCHEMA_NOT_FOUND(e.schema),YT.NOT_FOUND);let l=c[n];if(!l)throw Vf(new Error,Yf.TABLE_NOT_FOUND(e.schema,e.table),YT.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=k4.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){kf.warn(`unable to stat table dbi due to ${f}`)}return d}a(Kf,"descTable");async function K4(e){$f.transformReq(e);let t=RD.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=KT()[n];if(!i)throw Vf(new Error,Yf.SCHEMA_NOT_FOUND(e.schema),YT.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),$f.isEmpty(l)||l.describe){let _=await Kf({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(K4,"describeSchema")});var Cn=T((hTe,ID)=>{var W4=ri(),{callbackify:ND,promisify:Q4}=require("util"),{getDatabases:bD}=(Ae(),re(Ge));ID.exports={setSchemaDataToGlobal:OD,getTableSchema:j4,getSystemSchema:z4,setSchemaDataToGlobalAsync:Q4(OD)};var yD=ji(),fTe=ND(yD.describeAll),ETe=ND(yD.describeTable);function OD(e){global.hdb_schema=bD(),e&&e()}a(OD,"setSchemaDataToGlobal");function j4(e,t,r){let n=bD()[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(j4,"getTableSchema");function z4(){return W4}a(z4,"getSystemSchema")});var Or=T((pTe,DD)=>{"use strict";var Qf=WS(),zt=Y(),J4=require("util"),jf=wn(),X4=Cn(),wD=F(),{handleHDBError:Qo,hdb_errors:Z4}=te(),{HTTP_STATUS_CODES:jo}=Z4,e3=J4.promisify(X4.getTableSchema),t3="updated",CD="inserted",LD="upserted";DD.exports={insert:n3,update:s3,upsert:i3,validation:r3,flush:o3};async function r3(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 e3(e.schema,e.table),r=Qf(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 wD.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 wD.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(r3,"validation");async function n3(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Qf(e);if(t)throw Qo(new Error,t.message,jo.BAD_REQUEST);zt.transformReq(e);let r=zt.checkSchemaTableExist(e.schema,e.table);if(r)throw Qo(new Error,r,jo.BAD_REQUEST);let n=await jf.createRecords(e);return Wf(CD,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(n3,"insertData");async function s3(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Qf(e);if(t)throw Qo(new Error,t.message,jo.BAD_REQUEST);zt.transformReq(e);let r=zt.checkSchemaTableExist(e.schema,e.table);if(r)throw Qo(new Error,r,jo.BAD_REQUEST);let n=await jf.updateRecords(e);return zt.isEmpty(n.existing_rows)?Wf(t3,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Wf(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(s3,"updateData");async function i3(e){if(e.operation!=="upsert")throw Qo(new Error,"invalid operation, must be upsert",jo.INTERNAL_SERVER_ERROR);let t=Qf(e);if(t)throw Qo(new Error,t.message,jo.BAD_REQUEST);zt.transformReq(e);let r=zt.checkSchemaTableExist(e.schema,e.table);if(r)throw Qo(new Error,r,jo.BAD_REQUEST);let n=await jf.upsertRecords(e);return Wf(LD,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(i3,"upsertData");function Wf(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===CD?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===LD?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Wf,"returnObject");function o3(e){return zt.transformReq(e),jf.flush(e.schema,e.table)}a(o3,"flush")});var QT=T((TTe,UD)=>{var a3=it(),WT=require("joi"),{hdb_table:c3,hdb_database:PD}=Os(),MD={schema:PD,database:PD,table:c3},l3={date:WT.date().iso().required()},u3={timestamp:WT.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};UD.exports=function(e,t){let r=t==="timestamp"?{...MD,...u3}:{...MD,...l3},n=WT.object(r);return a3.validateBySchema(e,n)}});var HD=T((gTe,BD)=>{var _3=it(),jT=require("joi"),{hdb_table:d3,hdb_database:vD}=Os(),f3=jT.object({schema:vD,database:vD,table:d3,hash_values:jT.array().required(),ids:jT.array()});BD.exports=function(e){return _3.validateBySchema(e,f3)}});var ZT=T((RTe,qD)=>{"use strict";var zT=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}},JT=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}},XT=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};qD.exports={InsertObject:zT,NoSQLSeachObject:JT,DeleteResponseObject:XT}});var Xo=T((OTe,$D)=>{"use strict";var FD=QT(),E3=HD(),zo=Y(),xD=require("moment"),GD=F(),{promisify:h3,callbackify:m3}=require("util"),Jo=C(),p3=Cn(),eg=h3(p3.getTableSchema),tg=wn(),{DeleteResponseObject:S3}=ZT(),{handleHDBError:zi,hdb_errors:T3}=te(),{HDB_ERROR_MSGS:zf,HTTP_STATUS_CODES:Ji}=T3,g3="records successfully deleted",R3=m3(kD);$D.exports={delete:R3,deleteRecord:kD,deleteFilesBefore:A3,deleteAuditLogsBefore:O3};async function A3(e){let t=FD(e,"date");if(t)throw zi(t,t.message,Ji.BAD_REQUEST,void 0,void 0,!0);if(zo.transformReq(e),!xD(e.date,xD.ISO_8601).isValid())throw zi(new Error,zf.INVALID_DATE,Ji.BAD_REQUEST,Jo.LOG_LEVELS.ERROR,zf.INVALID_DATE,!0);let n=zo.checkSchemaTableExist(e.schema,e.table);if(n)throw zi(new Error,n,Ji.NOT_FOUND,Jo.LOG_LEVELS.ERROR,n,!0);let s=await tg.deleteRecordsBefore(e);if(await eg(e.schema,e.table),GD.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(A3,"deleteFilesBefore");async function O3(e){let t=FD(e,"timestamp");if(t)throw zi(t,t.message,Ji.BAD_REQUEST,void 0,void 0,!0);if(zo.transformReq(e),isNaN(e.timestamp))throw zi(new Error,zf.INVALID_VALUE("Timestamp"),Ji.BAD_REQUEST,Jo.LOG_LEVELS.ERROR,zf.INVALID_VALUE("Timestamp"),!0);let r=zo.checkSchemaTableExist(e.schema,e.table);if(r)throw zi(new Error,r,Ji.NOT_FOUND,Jo.LOG_LEVELS.ERROR,r,!0);let n=await tg.deleteAuditLogsBefore(e);return await eg(e.schema,e.table),GD.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(O3,"deleteAuditLogsBefore");async function kD(e){e.ids&&(e.hash_values=e.ids);let t=E3(e);if(t)throw zi(t,t.message,Ji.BAD_REQUEST,void 0,void 0,!0);zo.transformReq(e);let r=zo.checkSchemaTableExist(e.schema,e.table);if(r)throw zi(new Error,r,Ji.NOT_FOUND,Jo.LOG_LEVELS.ERROR,r,!0);try{await eg(e.schema,e.table);let n=await tg.deleteRecords(e);return zo.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${g3}`),n}catch(n){if(n.message===Jo.SEARCH_NOT_FOUND_MESSAGE){let s=new S3;return s.message=Jo.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(kD,"deleteRecord")});var Jf=T((bTe,KD)=>{var N3=require("crypto"),VD=9;function b3(e){let t=I3(VD),r=YD(e+t);return t+r}a(b3,"createHash");function y3(e,t){let r=e?.substr(0,VD),n=r+YD(t+r);return e===n}a(y3,"validateHash");function I3(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(I3,"generateSalt");function YD(e){return N3.createHash("md5").update(e).digest("hex")}a(YD,"md5");KD.exports={hash:b3,validate:y3}});var QD=T((ITe,WD)=>{var rg=it(),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 w3(e){return sr.password.presence=!0,sr.username.presence=!0,sr.role.presence=!0,sr.active.presence=!0,rg.validateObject(e,sr)}a(w3,"addUserValidation");function C3(e){return sr.password.presence=!1,sr.username.presence=!0,sr.role.presence=!1,sr.active.presence=!1,rg.validateObject(e,sr)}a(C3,"alterUserValidation");function L3(e){return sr.password.presence=!1,sr.username.presence=!0,sr.role.presence=!1,sr.active.presence=!1,rg.validateObject(e,sr)}a(L3,"dropUserValidation");WD.exports={addUserValidation:w3,alterUserValidation:C3,dropUserValidation:L3}});var rt=T((LTe,zD)=>{"use strict";var{platform:CTe}=require("os"),D3="nats-server.zip",ng="nats-server",P3=process.platform==="win32"?`${ng}.exe`:ng,sg="HDB",M3=/^[^\s.,*>]+$/,jD="__request__",U3=a(e=>`${e}.${jD}`,"REQUEST_SUBJECT"),v3={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},B3={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},H3={HUB:"hub.pid",LEAF:"leaf.pid"},q3={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},x3={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:sg,deliver_subject:"__HDB__.WORKQUEUE"},F3={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:sg,deliver_subject:"HDB.SCHEMAQUEUE"},G3={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:sg,deliver_subject:"HDB.USERQUEUE"},k3={SUCCESS:"success",ERROR:"error"},$3={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},V3={TXN:"txn",MSGID:"msgid"},Sc={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Y3={[Sc.ERR]:1,[Sc.WRN]:2,[Sc.INF]:3,[Sc.DBG]:4,[Sc.TRC]:5},K3={debug:"-D",trace:"-DVV"};zD.exports={NATS_SERVER_ZIP:D3,NATS_SERVER_NAME:ng,NATS_BINARY_NAME:P3,PID_FILES:H3,NATS_CONFIG_FILES:B3,SERVER_SUFFIX:q3,WORK_QUEUE_CONSUMER_NAMES:x3,SCHEMA_QUEUE_CONSUMER_NAMES:F3,USER_QUEUE_CONSUMER_NAMES:G3,NATS_TERM_CONSTRAINTS_RX:M3,REQUEST_SUFFIX:jD,UPDATE_REMOTE_RESPONSE_STATUSES:k3,CLUSTER_STATUS_STATUSES:$3,REQUEST_SUBJECT:U3,SUBJECT_PREFIXES:V3,MSG_HEADERS:v3,LOG_LEVELS:Sc,LOG_LEVEL_FLAGS:K3,LOG_LEVEL_HIERARCHY:Y3}});var ig=T((PTe,JD)=>{"use strict";var W3={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 tV=Object.create;var Nl=Object.defineProperty;var rV=Object.getOwnPropertyDescriptor;var nV=Object.getOwnPropertyNames;var sV=Object.getPrototypeOf,iV=Object.prototype.hasOwnProperty;var a=(e,t)=>Nl(e,"name",{value:t,configurable:!0});var ye=(e,t)=>()=>(e&&(t=e(e=0)),t);var g=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ke=(e,t)=>{for(var r in t)Nl(e,r,{get:t[r],enumerable:!0})},Bb=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of nV(t))!iV.call(e,s)&&s!==r&&Nl(e,s,{get:()=>t[s],enumerable:!(n=rV(t,s))||n.enumerable});return e};var q=(e,t,r)=>(r=e!=null?tV(sV(e)):{},Bb(t||!e||!e.__esModule?Nl(r,"default",{value:e,enumerable:!0}):r,e)),ne=e=>Bb(Nl({},"__esModule",{value:!0}),e);var xb=g((CEe,qb)=>{var oV=require("fast-glob"),{statSync:gp,existsSync:Rp,readFileSync:aV,writeFileSync:cV}=require("fs"),{spawnSync:lV,spawn:uV,execFileSync:wEe}=require("child_process"),{isMainThread:_V}=require("worker_threads"),{join:Hi,relative:Hb}=require("path"),{PACKAGE_ROOT:Vn}=C(),{tmpdir:dV,platform:fV}=require("os");require("source-map-support").install();var EV=["resources","server","dataLayer","components"],bl="ts-build",Ap,hV=__filename.endsWith("tsBuild.js");if(hV){if(_V){let r;try{gp(Hi(Vn,bl)),r=!0}catch{}if(r)for(let n of oV.sync(EV.map(s=>s+"/**/*.ts"),{cwd:Vn})){let s=0,i=0;try{s=gp(Hi(Vn,n)).mtimeMs-5e3,i=gp(Hi(Vn,bl,n.replace(/.ts$/,".js"))).mtimeMs}catch{}if(s>i){console.warn(`TypeScript ${n} is not compiled`+(i?` (TS source file was modified at ${new Date(s)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),Ap=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),Ap=!0;if(Ap){let n=Hi(Vn,"node_modules/.bin/tsc");fV()==="win32"&&(n+=".cmd");let s=lV(n,{cwd:Vn});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=Hi(dV(),"harperdb-tsc.pid"),o;if(Rp(i))try{process.kill(+aV(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=uV(n,["--watch"],{cwd:Vn,detached:!0,stdio:"ignore"});cV(i,c.pid.toString()),c.unref()}}}}let e=qb.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(Vn)&&!n[0].includes("node_modules")){let i=Hb(Vn,n[0]),o;i.startsWith(bl)?o=Hi(Vn,Hb(bl,i)):o=Hi(Vn,bl,i);let c=Hi(o,r),l=c+".js";if(Rp(l))return l;if(c.includes(".")&&Rp(c))return c}return t(r,n,s)}}});var C=g((PEe,Zb)=>{"use strict";var gn=require("path"),mV=require("fs"),{relative:LEe,join:DEe}=gn,{existsSync:pV}=mV;function SV(){let e=__dirname;for(;!pV(gn.join(e,"package.json"));){let t=gn.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(SV,"getHDBPackageRoot");var qi=SV(),Fb="js",Nd=Fb,TV="harperdb-config.yaml",gV="defaultConfig.yaml",RV="hdb",Gb=`harperdb.${Nd}`,kb=`customFunctionsServer.${Nd}`,AV=`restartHdb.${Nd}`,Np="HarperDB",Od="Custom Functions",bd="Clustering Hub",yd="Clustering Leaf",OV="Clustering Ingest Service",NV="Clustering Reply Service",bV="foreground.pid",yV="hdb.pid",IV="data",wV={HDB:Np,CLUSTERING_HUB:bd,CLUSTERING_LEAF:yd,CLUSTERING_INGEST_SERVICE:OV,CLUSTERING_REPLY_SERVICE:NV,CUSTOM_FUNCTIONS:Od,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"},CV={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},LV={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},DV={harperdb:Np,"clustering hub":bd,"clustering leaf":yd,"custom functions":Od,custom_functions:Od,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},PV={CLUSTERING_HUB_PROC_DESCRIPTOR:bd,CLUSTERING_LEAF_PROC_DESCRIPTOR:yd},Op={HDB:gn.join(qi,"server/harperdb"),CUSTOM_FUNCTIONS:gn.join(qi,"server/customFunctions"),CLUSTERING_HUB:gn.join(qi,"server/nats"),CLUSTERING_LEAF:gn.join(qi,"server/nats")},MV={HDB:gn.join(Op.HDB,Gb),CUSTOM_FUNCTIONS:gn.join(Op.CUSTOM_FUNCTIONS,kb)},UV={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:gn.join(qi,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:gn.join(qi,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:gn.join(qi,"launchServiceScripts/launchUpdateNodes4-0-0.js")},vV={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},$b="support@harperdb.io",BV="customer-success@harperdb.io",Vb=1,HV=4141,Yb="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",qV="https://www.harperdb.io/product",xV=`For support, please submit a request at ${Yb} or contact ${$b}`,Kb=`For license support, please contact ${BV}`,FV="None of the specified records were found.",GV="hash attribute not found",kV=`Your current license only supports ${Vb} role. ${Kb}`,$V="Your current license only supports 3 connections to a node.",VV="127.0.0.1",YV=1,KV=/^\.$/,WV=/^\.\.$/,QV="U+002E",jV=/\//g,zV="U+002F",JV=/U\+002F/g,XV=/^U\+002E$/,ZV=/^U\+002EU\+002E$/,eY="d",tY=999999,rY="*",nY="--max-old-space-size=",sY="system",iY="__hdb_hash",oY=".harperdb",aY=".hdb",cY="keys",lY="hdb_boot_properties.file",uY=".updateConfig.json",_Y="SIGTSTP",dY=24,fY=6e4,EY=448,hY="blob",mY="trash",pY="database",SY="schema",TY="transactions",gY=".count",RY="id",AY="PROCESS_NAME",Wb={SETTINGS_PATH_KEY:"settings_path"},Qb=require("lodash"),OY={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"},NY={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},bY={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},yY={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"},IY={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"},Vr="hdb_internal:",wY={CREATE_SCHEMA:Vr+"create_schema",CREATE_TABLE:Vr+"create_table",CREATE_ATTRIBUTE:Vr+"create_attribute",ADD_USER:Vr+"add_user",ALTER_USER:Vr+"alter_user",DROP_USER:Vr+"drop_user",HDB_NODES:Vr+"hdb_nodes",HDB_USERS:Vr+"hdb_users",HDB_WORKERS:Vr+"hdb_workers",CATCHUP:Vr+"catchup",SCHEMA_CATCHUP:Vr+"schema_catchup",WORKER_ROOM:Vr+"cluster_workers"},CY={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"},LY="060493.ks",DY=".license",PY={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},X={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"},MY={CSV:".csv",JSON:".json"},UY={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},vY={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},yl={};yl[X.INSERT]=X.INSERT;yl[X.UPDATE]=X.UPDATE;yl[X.UPSERT]=X.UPSERT;yl[X.DELETE]=X.DELETE;var qe=Object.create(null);qe[X.DESCRIBE_ALL]=X.DESCRIBE_ALL;qe[X.DESCRIBE_TABLE]=X.DESCRIBE_TABLE;qe[X.DESCRIBE_SCHEMA]=X.DESCRIBE_SCHEMA;qe[X.READ_LOG]=X.READ_LOG;qe[X.ADD_NODE]=X.ADD_NODE;qe[X.LIST_USERS]=X.LIST_USERS;qe[X.LIST_ROLES]=X.LIST_ROLES;qe[X.USER_INFO]=X.USER_INFO;qe[X.SQL]=X.SQL;qe[X.GET_JOB]=X.GET_JOB;qe[X.SEARCH_JOBS_BY_START_DATE]=X.SEARCH_JOBS_BY_START_DATE;qe[X.DELETE_FILES_BEFORE]=X.DELETE_FILES_BEFORE;qe[X.EXPORT_LOCAL]=X.EXPORT_LOCAL;qe[X.EXPORT_TO_S3]=X.EXPORT_TO_S3;qe[X.CLUSTER_STATUS]=X.CLUSTER_STATUS;qe[X.REMOVE_NODE]=X.REMOVE_NODE;qe[X.RESTART]=X.RESTART;qe[X.CUSTOM_FUNCTIONS_STATUS]=X.CUSTOM_FUNCTIONS_STATUS;qe[X.GET_CUSTOM_FUNCTIONS]=X.GET_CUSTOM_FUNCTIONS;qe[X.GET_CUSTOM_FUNCTION]=X.GET_CUSTOM_FUNCTION;qe[X.SET_CUSTOM_FUNCTION]=X.SET_CUSTOM_FUNCTION;qe[X.DROP_CUSTOM_FUNCTION]=X.DROP_CUSTOM_FUNCTION;qe[X.ADD_CUSTOM_FUNCTION_PROJECT]=X.ADD_CUSTOM_FUNCTION_PROJECT;qe[X.DROP_CUSTOM_FUNCTION_PROJECT]=X.DROP_CUSTOM_FUNCTION_PROJECT;qe[X.PACKAGE_CUSTOM_FUNCTION_PROJECT]=X.PACKAGE_CUSTOM_FUNCTION_PROJECT;qe[X.DEPLOY_CUSTOM_FUNCTION_PROJECT]=X.DEPLOY_CUSTOM_FUNCTION_PROJECT;var BY={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"},HY={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},jb={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"},qY=Qb.invert(jb),xY={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"},L={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",MAXHEAPMEMORY:"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"},zb={settings_path:Wb.SETTINGS_PATH_KEY,hdb_root_key:L.ROOTPATH,hdb_root:L.ROOTPATH,rootpath:L.ROOTPATH,server_port_key:L.OPERATIONSAPI_NETWORK_PORT,server_port:L.OPERATIONSAPI_NETWORK_PORT,cert_key:L.TLS_CERTIFICATE,certificate:L.TLS_CERTIFICATE,private_key_key:L.TLS_PRIVATEKEY,private_key:L.TLS_PRIVATEKEY,http_secure_enabled_key:L.OPERATIONSAPI_NETWORK_HTTPS,https_on:L.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:L.OPERATIONSAPI_NETWORK_CORS,cors_on:L.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:L.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:L.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:L.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:L.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:L.LOGGING_LEVEL,log_level:L.LOGGING_LEVEL,log_path_key:L.LOGGING_ROOT,log_path:L.LOGGING_ROOT,clustering_node_name_key:L.CLUSTERING_NODENAME,node_name:L.CLUSTERING_NODENAME,clustering_enabled_key:L.CLUSTERING_ENABLED,clustering:L.CLUSTERING_ENABLED,max_http_threads:L.THREADS,max_hdb_processes:L.THREADS,server_timeout_key:L.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:L.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:L.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:L.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:L.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:L.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:L.LOGGING_AUDITLOG,disable_transaction_log:L.LOGGING_AUDITLOG,operation_token_timeout_key:L.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:L.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:L.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:L.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:L.HTTP_PORT,custom_functions_port:L.HTTP_PORT,custom_functions_directory_key:L.COMPONENTSROOT,custom_functions_directory:L.COMPONENTSROOT,max_custom_function_processes:L.THREADS,log_to_file:L.LOGGING_FILE,log_to_stdstreams:L.LOGGING_STDSTREAMS,local_studio_on:L.LOCALSTUDIO_ENABLED,clustering_port:L.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:L.CLUSTERING_USER,clustering_enabled:L.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:L.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:L.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:L.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:L.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:L.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:L.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:L.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:L.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:L.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:L.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:L.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:L.CLUSTERING_NODENAME,clustering_tls_certificate:L.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:L.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:L.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:L.CLUSTERING_TLS_INSECURE,clustering_tls_verify:L.CLUSTERING_TLS_VERIFY,clustering_loglevel:L.CLUSTERING_LOGLEVEL,clustering_republishmessages:L.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:L.CLUSTERING_DATABASELEVEL,customfunctions_network_port:L.HTTP_PORT,customfunctions_tls_certificate:L.TLS_CERTIFICATE,customfunctions_network_cors:L.HTTP_CORS,customfunctions_network_corsaccesslist:L.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:L.HTTP_HEADERSTIMEOUT,customfunctions_network_https:L.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:L.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:L.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:L.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:L.HTTP_TIMEOUT,http_threads:L.THREADS,threads:L.THREADS,maxheapmemory:L.MAXHEAPMEMORY,http_session_affinity:L.HTTP_SESSIONAFFINITY,http_compressionthreshold:L.HTTP_COMPRESSIONTHRESHOLD,http_cors:L.HTTP_CORS,http_corsaccesslist:L.HTTP_CORSACCESSLIST,http_headerstimeout:L.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:L.HTTP_KEEPALIVETIMEOUT,http_timeout:L.HTTP_TIMEOUT,http_port:L.HTTP_PORT,http_secureport:L.HTTP_SECUREPORT,http_mtls:L.HTTP_MTLS,http_mtls_user:L.HTTP_MTLS_USER,http_mtls_required:L.HTTP_MTLS_REQUIRED,customfunctions_processes:L.THREADS,customfunctions_root:L.COMPONENTSROOT,localstudio_enabled:L.LOCALSTUDIO_ENABLED,logging_file:L.LOGGING_FILE,logging_level:L.LOGGING_LEVEL,logging_root:L.LOGGING_ROOT,logging_rotation_enabled:L.LOGGING_ROTATION_ENABLED,logging_rotation_compress:L.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:L.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:L.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:L.LOGGING_ROTATION_PATH,logging_stdstreams:L.LOGGING_STDSTREAMS,logging_auditlog:L.LOGGING_AUDITLOG,logging_auditretention:L.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:L.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:L.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:L.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:L.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:L.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:L.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:L.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:L.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:L.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:L.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:L.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:L.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:L.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:L.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:L.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:L.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:L.ROOTPATH,databases:L.DATABASES,storage_path:L.STORAGE_PATH,ignorescripts:L.IGNORE_SCRIPTS,mqtt_network_port:L.MQTT_NETWORK_PORT,mqtt_websocket:L.MQTT_WEBSOCKET,mqtt_network_secureport:L.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:L.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:L.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:L.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:L.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:L.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:L.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:L.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:L.AUTHENTICATION_CACHETTL,authentication_enablesessions:L.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:L.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:L.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:L.COMPONENTSROOT,tls_certificate:L.TLS_CERTIFICATE,tls_privatekey:L.TLS_PRIVATEKEY,tls_certificateauthority:L.TLS_CERTIFICATEAUTHORITY,tls_ciphers:L.TLS_CIPHERS};for(let e in L){let t=L[e];zb[t.toLowerCase()]=t}var FY={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},GY={csv_file_load:"csv_file_load",csv_data_load:X.CSV_DATA_LOAD,csv_url_load:X.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"},kY={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"},$Y={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},VY={VERSION_DEFAULT:"2.2.0"},YY={DEVELOPMENT:8192,DEFAULT:512},KY={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"},WY={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"},QY={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},Jb={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},jY=Symbol("metadata"),zY="__clustering__",JY=Object.values(Jb),XY=15984864e5,Xb={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},ZY=Qb.invert(Xb),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"},t1=111,r1=`\r
3
+ `,n1={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},s1=["*","%"],i1="unauthorized_access",o1="func_val",a1={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},c1={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},l1={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"},u1={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},_1={HTTP:"http"},d1={STOPPED:"stopped",ONLINE:"online"},f1="3.x.x",E1={SUCCESS:"success",FAILURE:"failure"},h1={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};Zb.exports={LOCAL_HARPERDB_OPERATIONS:qe,HDB_SUPPORT_ADDRESS:$b,HDB_SUPPORT_URL:Yb,HDB_PRICING_URL:qV,SUPPORT_HELP_MSG:xV,LICENSE_HELP_MSG:Kb,HDB_PROC_NAME:Gb,HDB_PROC_DESCRIPTOR:Np,CLUSTERING_LEAF_PROC_DESCRIPTOR:yd,CLUSTERING_HUB_PROC_DESCRIPTOR:bd,SYSTEM_SCHEMA_NAME:sY,HASH_FOLDER_NAME:iY,HDB_HOME_DIR_NAME:oY,UPDATE_FILE_NAME:uY,LICENSE_KEY_DIR_NAME:cY,BOOT_PROPS_FILE_NAME:lY,JOB_TYPE_ENUM:GY,JOB_STATUS_ENUM:PY,SYSTEM_TABLE_NAMES:yY,SYSTEM_TABLE_HASH_ATTRIBUTES:IY,OPERATIONS_ENUM:X,VALID_S3_FILE_TYPES:MY,S3_BUCKET_AUTH_KEYS:UY,VALID_SQL_OPS_ENUM:vY,GEO_CONVERSION_ENUM:HY,HDB_SETTINGS_NAMES:jb,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:qY,SERVICE_ACTIONS_ENUM:BY,CLUSTER_MESSAGE_TYPE_ENUM:kY,CLUSTER_CONNECTION_DIRECTION_ENUM:$Y,CLUSTER_EVENTS_DEFS_ENUM:KY,PERIOD_REGEX:KV,DOUBLE_PERIOD_REGEX:WV,UNICODE_PERIOD:QV,FORWARD_SLASH_REGEX:jV,UNICODE_FORWARD_SLASH:zV,ESCAPED_FORWARD_SLASH_REGEX:JV,ESCAPED_PERIOD_REGEX:XV,ESCAPED_DOUBLE_PERIOD_REGEX:ZV,REG_KEY_FILE_NAME:LY,RESTART_TIMEOUT_MS:fY,HDB_FILE_PERMISSIONS:EY,DATABASES_DIR_NAME:pY,LEGACY_DATABASES_DIR_NAME:SY,TRANSACTIONS_DIR_NAME:TY,LIMIT_COUNT_NAME:gY,ID_ATTRIBUTE_STRING:RY,INSERT_MODULE_ENUM:NY,UPGRADE_JSON_FIELD_NAMES_ENUM:bY,RESTART_CODE:_Y,RESTART_CODE_NUM:dY,CLUSTER_OPERATIONS:yl,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:CY,HDB_INTERNAL_SC_CHANNEL_PREFIX:Vr,INTERNAL_SC_CHANNELS:wY,CLUSTERING_MESSAGE_TYPES:e1,HDB_FILE_SUFFIX:aY,BLOB_FOLDER_NAME:hY,HDB_TRASH_DIR:mY,ORIGINATOR_SET_VALUE:t1,LICENSE_VALUES:VY,RAM_ALLOCATION_ENUM:YY,TIME_STAMP_NAMES_ENUM:Jb,TIME_STAMP_NAMES:JY,PERMS_UPDATE_RELEASE_TIMESTAMP:XY,SEARCH_NOT_FOUND_MESSAGE:FV,SEARCH_ATTRIBUTE_NOT_FOUND:GV,LICENSE_ROLE_DENIED_RESPONSE:kV,LICENSE_MAX_CONNS_REACHED:$V,BASIC_LICENSE_MAX_NON_CU_ROLES:Vb,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:HV,VALUE_SEARCH_COMPARATORS:Xb,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:ZY,LICENSE_FILE_NAME:DY,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:WY,NEW_LINE:r1,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:YV,MOMENT_DAYS_TAG:eY,API_TURNOVER_SEC:tY,LOOPBACK:VV,CODE_EXTENSION:Nd,WILDCARD_SEARCH_VALUE:rY,NODE_ERROR_CODES:QY,JAVASCRIPT_EXTENSION:Fb,PERMS_CRUD_ENUM:n1,UNAUTHORIZED_PERMISSION_NAME:i1,SEARCH_WILDCARDS:s1,FUNC_VAL:o1,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:a1,JWT_ENUM:c1,CLUSTERING_FLAG:zY,ITC_EVENT_TYPES:l1,CUSTOM_FUNCTION_PROC_NAME:kb,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Od,SERVICES:u1,THREAD_TYPES:_1,MEM_SETTING_KEY:nY,HDB_RESTART_SCRIPT:AV,PROCESS_DESCRIPTORS:wV,SERVICE_SERVERS:MV,SERVICE_SERVERS_CWD:Op,PROCESS_DESCRIPTORS_VALIDATE:DV,LAUNCH_SERVICE_SCRIPTS:UV,LOG_LEVELS:LV,PROCESS_NAME_ENV_PROP:AY,LOG_NAMES:CV,PM2_PROCESS_STATUSES:d1,CONFIG_PARAM_MAP:zb,CONFIG_PARAMS:L,HDB_CONFIG_FILE:TV,HDB_DEFAULT_CONFIG_FILE:gV,ROLE_TYPES_ENUM:vV,BOOT_PROP_PARAMS:Wb,INSTALL_PROMPTS:OY,HDB_ROOT_DIR_NAME:RV,CLUSTERING_PROCESSES:PV,FOREGROUND_PID_FILE:bV,PACKAGE_ROOT:qi,PRE_4_0_0_VERSION:f1,DATABASES_PARAM_CONFIG:FY,METADATA_PROPERTY:jY,AUTH_AUDIT_STATUS:E1,AUTH_AUDIT_TYPES:h1,HDB_PID_FILE:yV,DEFAULT_DATABASE_NAME:IV,LEGACY_CONFIG_PARAMS:xY};xb()});var Do=g((UEe,ry)=>{"use strict";var ey=require("minimist");ry.exports=m1;function m1(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=ty(process.env),n=ty(ey(process.argv))):(r=process.env,n=ey(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(m1,"assignCMDENVVariables");function ty(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(ty,"objKeysToLowerCase")});var G=g((BEe,Dp)=>{"use strict";var Po=require("fs-extra"),{workerData:p1,threadId:S1}=require("worker_threads"),zs=require("path"),iy=require("yaml"),oy=require("properties-reader"),Ct=C(),ny=Do(),T1=require("os"),{PACKAGE_ROOT:yp}=C(),{_assignPackageExport:g1}=require("../index"),wl={};for(let e in console)wl[e]||(wl[e]=console[e]);var lr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},ay={STDOUT:"stdOut",STDERR:"stdErr"},R1=zs.join(yp,"logs"),A1=zs.join(yp,"config/yaml/",Ct.HDB_DEFAULT_CONFIG_FILE),O1=1e4,js,Ss,cr,Id,wd,Cl,za,Il;Il===void 0&&cy();Dp.exports={notify:_y,fatal:dy,error:Ll,warn:Lp,info:Cd,debug:Cp,trace:wp,setLogLevel:L1,log_level:cr,loggerWithTag:N1,suppressLogging:b1,initLogSettings:cy,setupConsoleLogging:ly,logCustomLevel:w1,closeLogFile:Ip,getLogFilePath:()=>Cl,OUTPUTS:ay,AuthAuditLog:M1};g1("logger",Dp.exports);function cy(e=!1){try{if(Il===void 0||e){Ip();let t=C1(),r=ny(["ROOTPATH"]);try{Il=oy(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Po.pathExistsSync(zs.join(r.ROOTPATH,Ct.HDB_CONFIG_FILE)))throw n}({level:cr,config_log_path:wd,to_file:js,to_stream:Ss}=D1(r.ROOTPATH?zs.join(r.ROOTPATH,Ct.HDB_CONFIG_FILE):Il.get("settings_path"))),Id=Ct.LOG_NAMES.HDB,Cl=zs.join(wd,Id)}}catch(t){if(Il=void 0,t.code===Ct.NODE_ERROR_CODES.ENOENT){let r=ny(Object.keys(Ct.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Ct.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Ct.CONFIG_PARAMS.LOGGING_LEVEL){cr=l;continue}if(c===Ct.CONFIG_PARAMS.LOGGING_STDSTREAMS){Ss=l;continue}c===Ct.CONFIG_PARAMS.LOGGING_FILE&&(js=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=P1();js=js===void 0?s:js,js=sy(js),Ss=Ss===void 0?i:Ss,Ss=sy(Ss),cr=cr===void 0?n:cr,wd=R1,Id=Ct.LOG_NAMES.INSTALL,Cl=zs.join(wd,Id);return}throw Ll("Error initializing log settings"),Ll(t),t}process.env.DEV_MODE&&(Ss=!0),ly()}a(cy,"initLogSettings");var bp=!0;function ly(){ja("error",Ll),ja("warn",Lp),ja("log",Cd),ja("info",Cd),ja("debug",Cp),ja("trace",wp)}a(ly,"setupConsoleLogging");function ja(e,t){console[e]=function(...r){if(bp&&t(...r),!/PM2 log:|App \[/.test(r[0]))return wl[e](...r)}}a(ja,"logConsole");function N1(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(_y),fatal:r(dy),error:r(Ll),warn:r(Lp),info:r(Cd),debug:r(Cp),trace:r(wp)};function r(n){return function(...s){return n(t,...s)}}}a(N1,"loggerWithTag");function b1(e){try{bp=!1,e()}finally{bp=!0}}a(b1,"suppressLogging");var y1=p1?.name?.replace(/ /g,"-")||"main";function Js(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||y1+"/"+S1);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(Js,"createLogRecord");function Dl(e){js&&uy(e),Ss&&process.stdout.write(e)}a(Dl,"logStdOut");function Ld(e){js&&uy(e),Ss&&process.stderr.write(e)}a(Ld,"logStdErr");function uy(e){I1(),za?Po.appendFileSync(za,e):wl.log(e)}a(uy,"logToFile");function Ip(){try{Po.closeSync(za)}catch{}za=null}a(Ip,"closeLogFile");function I1(){if(!za){try{if(!Cl)debugger;za=Po.openSync(Cl,"a")}catch(e){wl.error(e)}setTimeout(()=>{Ip()},O1).unref()}}a(I1,"openLogFile");function Cd(...e){lr[cr]<=lr.info&&Dl(Js("info",e))}a(Cd,"info");function wp(...e){lr[cr]<=lr.trace&&Dl(Js("trace",e))}a(wp,"trace");function Ll(...e){lr[cr]<=lr.error&&Ld(Js("error",e))}a(Ll,"error");function Cp(...e){lr[cr]<=lr.debug&&Dl(Js("debug",e))}a(Cp,"debug");function _y(...e){lr[cr]<=lr.notify&&Dl(Js("notify",e))}a(_y,"notify");function dy(...e){lr[cr]<=lr.fatal&&Ld(Js("fatal",e))}a(dy,"fatal");function Lp(...e){lr[cr]<=lr.warn&&Ld(Js("warn",e))}a(Lp,"warn");function w1(e,t,...r){t===ay.STDERR?Ld(Js(e,r)):Dl(Js(e,r))}a(w1,"logCustomLevel");function C1(){let e;try{e=T1.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=zs.join(e,Ct.HDB_HOME_DIR_NAME,Ct.BOOT_PROPS_FILE_NAME);return Po.existsSync(t)||(t=zs.join(yp,"utility/hdb_boot_properties.file")),t}a(C1,"getPropsFilePath");function L1(e){cr=e}a(L1,"setLogLevel");function sy(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(sy,"autoCastBoolean");function D1(e){try{if(e.includes("config/settings.js")){let o=oy(e);return{level:o.get(Ct.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:zs.dirname(o.get(Ct.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Ct.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Ct.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=iy.parseDocument(Po.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===Ct.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(D1,"getLogConfig");function P1(){try{let e=iy.parseDocument(Po.readFileSync(A1,"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(P1,"getDefaultConfig");function M1(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(M1,"AuthAuditLog")});var Mo=g((qEe,U1)=>{U1.exports={name:"harperdb",version:"4.3.0-beta.3",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.1",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 xi=g((xEe,fy)=>{"use strict";fy.exports={version:v1,printVersion:B1};var Dd=Mo();function v1(){if(Dd)return Dd.version}a(v1,"version");function B1(){Dd&&console.log(`HarperDB Version ${Dd.version}`)}a(B1,"printVersion")});var my=g((GEe,hy)=>{"use strict";var Ey=require("semver/functions/major"),H1=Mo(),Pp=process.versions&&process.versions.node?process.versions.node:void 0;hy.exports=q1;function q1(){let e=H1.engines["minimum-node"];if(Pp&&Ey(Pp)<Ey(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${Pp}. Please install a version of Node.js that is withing the defined range.`}}a(q1,"checkNodeVersion")});var Uo={};ke(Uo,{server:()=>st});var py,st,ur=ye(()=>{py=require("../index"),st={};(0,py._assignPackageExport)("server",st)});var Mp=g(($Ee,Sy)=>{"use strict";var x1=require("util"),F1=require("path"),G1=require("child_process"),k1=x1.promisify(G1.execFile),$1=1e3*1e3*10;Sy.exports={findPs:V1};async function V1(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await k1("ps",["wwxo",`pid,${r}`],{maxBuffer:$1});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:F1.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(V1,"findPs")});var ut=g((YEe,gy)=>{"use strict";var Y1="__dbis__",K1="__txns__",W1="__environment_name__",Q1="__dbi_defintion__",j1={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"},z1=["__createdtime__","__updatedtime__"],J1="\uFFFF",Ty={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},X1=Object.values(Ty);gy.exports={AUDIT_STORE_NAME:K1,INTERNAL_DBIS_NAME:Y1,DBI_DEFINITION_NAME:Q1,SEARCH_TYPES:j1,TIMESTAMP_NAMES:z1,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:W1,TRANSACTIONS_DBI_NAMES_ENUM:Ty,TRANSACTIONS_DBIS:X1,OVERFLOW_MARKER:J1}});var Yr=g((KEe,Cy)=>{"use strict";var Ry=C(),Ay=ut(),Oy={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},Ny=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),by={500:Ny("There was an error processing your request."),400:"Invalid request"},Z1=by[Oy.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.`},tK={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},rK={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"},nK={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 ${Ay.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Ay.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 ${Ry.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 ${Ry.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"},yy={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"},iK={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."},oK={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`},aK={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"},cK={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},lK={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`},Iy={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.`},wy={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}`},uK={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file."},_K={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},dK={...yy,...rK,...eK,...iK,...oK,...aK,...cK,...lK,...sK,...Iy,...wy,...uK,..._K,...tK};Cy.exports={CHECK_LOGS_WRAPPER:Ny,HDB_ERROR_MSGS:dK,DEFAULT_ERROR_MSGS:by,DEFAULT_ERROR_RESP:Z1,HTTP_STATUS_CODES:Oy,LMDB_ERRORS_ENUM:nK,AUTHENTICATION_ERROR_MSGS:yy,VALIDATION_ERROR_MSGS:Iy,ITC_ERRORS:wy}});var re=g((QEe,Py)=>{"use strict";var Ja=Yr(),fK=G(),EK=C(),Pd=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,Ly),this.statusCode=n||Ja.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Ja.DEFAULT_ERROR_MSGS[n]?Ja.DEFAULT_ERROR_MSGS[n]:Ja.DEFAULT_ERROR_MSGS[Ja.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&&fK[s](i)}},Up=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}},vp=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Ly(e,t,r,n=EK.LOG_LEVELS.ERROR,s=null,i=!1){if(Dy(e))return e;let o=new Pd(e,t,r,n,s);return i&&delete o.stack,o}a(Ly,"handleHDBError");function Dy(e){return e.__proto__.constructor.name===Pd.name}a(Dy,"isHDBError");Py.exports={isHDBError:Dy,handleHDBError:Ly,ClientError:Up,ServerError:vp,hdb_errors:Ja}});var Qe=g((zEe,xy)=>{"use strict";var Bl=C(),hK=W(),_r=J(),Hl=require("path"),mK=require("minimist"),My=require("fs-extra"),Uy=require("lodash");_r.initSync();var{CONFIG_PARAMS:Fi,DATABASES_PARAM_CONFIG:Pl,SYSTEM_SCHEMA_NAME:Md}=Bl,Ml,Ul,vl;function vy(){if(Ml!==void 0)return Ml;if(_r.getHdbBasePath()!==void 0)return Ml=_r.get(Fi.STORAGE_PATH)||Hl.join(_r.getHdbBasePath(),Bl.DATABASES_DIR_NAME),Ml}a(vy,"getBaseSchemaPath");function By(){if(Ul!==void 0)return Ul;if(_r.getHdbBasePath()!==void 0)return Ul=qy(Md),Ul}a(By,"getSystemSchemaPath");function Hy(){if(vl!==void 0)return vl;if(_r.getHdbBasePath()!==void 0)return vl=_r.get(Bl.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Hl.join(_r.getHdbBasePath(),Bl.TRANSACTIONS_DIR_NAME),vl}a(Hy,"getTransactionAuditStoreBasePath");function pK(e,t){let r=_r.get(Fi.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Hl.join(Hy(),e.toString())}a(pK,"getTransactionAuditStorePath");function qy(e,t){e=e.toString(),t=t&&t.toString();let r=_r.get(Bl.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Hl.join(vy(),e)}a(qy,"getSchemaPath");function SK(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,mK(process.argv));let n=r[Fi.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!hK.isObject(n))throw o;i=n}for(let o of i){let c=o[Md];if(!c)continue;let l=_r.get(Fi.DATABASES);l=l??{};let _=c?.tables?.[t]?.[Pl.PATH];if(_)return Uy.set(l,[Md,Pl.TABLES,t,Pl.PATH],_),_r.setProperty(Fi.DATABASES,l),_;let u=c?.[Pl.PATH];if(u)return Uy.set(l,[Md,Pl.PATH],u),_r.setProperty(Fi.DATABASES,l),u}}let s=r[Fi.STORAGE_PATH.toUpperCase()];if(s){if(!My.pathExistsSync(s))throw new Error(s+" does not exist");let i=Hl.join(s,e);return My.mkdirsSync(i),_r.setProperty(Fi.STORAGE_PATH,s),i}return By()}a(SK,"initSystemSchemaPaths");function TK(){Ml=void 0,Ul=void 0,vl=void 0}a(TK,"resetPaths");xy.exports={getBaseSchemaPath:vy,getSystemSchemaPath:By,getTransactionAuditStorePath:pK,getTransactionAuditStoreBasePath:Hy,getSchemaPath:qy,initSystemSchemaPaths:SK,resetPaths:TK}});var dr=g((ehe,Vy)=>{"use strict";var gK=Yr().LMDB_ERRORS_ENUM,XEe=require("lmdb"),RK=ut(),ZEe=require("buffer").Buffer,{OVERFLOW_MARKER:Fy,MAX_SEARCH_KEY_LENGTH:Ud}=RK,Gy=["number","string","symbol","boolean","bigint"];function AK(e){if(e=e?.primaryStore||e,!e)throw new Error(gK.ENV_REQUIRED)}a(AK,"validateEnv");function OK(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(OK,"stringifyData");function NK(e){return e instanceof Date?e.valueOf():e}a(NK,"convertKeyValueToWrite");function bK(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(Gy.includes(typeof e))return e.length>Ud?[e.slice(0,Ud)+Fy]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(Gy.includes(typeof i))i.length>Ud?r.push(i.slice(0,Ud)+Fy):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(bK,"getIndexedValues");var vd=0,ky=0;function $y(){ky=Date.now()-performance.now()}a($y,"adjustStartTime");$y();var yK=6e4;setInterval($y,yK).unref();function IK(){let e=performance.now()+ky;return e>vd?(vd=e,e):(vd+=488e-6,vd)}a(IK,"getNextMonotonicTime");Vy.exports={validateEnv:AK,stringifyData:OK,convertKeyValueToWrite:NK,getNextMonotonicTime:IK,getIndexedValues:bK}});var Yy,Yn,Bp,ql=ye(()=>{Yy=require("events"),Yn=class extends Yy.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new Bp;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)}},Bp=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 jy={};ke(jy,{HAS_EXPIRATION:()=>Vp,LAST_TIMESTAMP_PLACEHOLDER:()=>Gl,LOCAL_TIMESTAMP:()=>wK,METADATA:()=>xl,NO_TIMESTAMP:()=>qp,PENDING_LOCAL_TIME:()=>Yp,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>$p,RecordEncoder:()=>Gp,TIMESTAMP_ASSIGN_LAST:()=>LK,TIMESTAMP_ASSIGN_NEW:()=>Wy,TIMESTAMP_ASSIGN_PREVIOUS:()=>Qy,TIMESTAMP_PLACEHOLDER:()=>Bd,TIMESTAMP_RECORD_PREVIOUS:()=>xp,fromResource:()=>Fd,getUpdateRecord:()=>Kp,handleLocalTimeForGets:()=>Gd});function PK(){return Fl[0]=Fl[0]^64,CK.getFloat64(0)}function Fd(e){kp=!0;try{return e()}finally{kp=!1}}function Gd(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?.[xl];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?.[xl]>=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[xl];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,vo.push(new WeakRef(this))),!kp)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<vo.length;l++){let _=vo[l].deref();(!_||_.isDone||_.isCommitted)&&vo.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function Kp(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",f,E){if(f||l==null?Xa=i?.localTime?xp|Qy:qp:Xa=l?i?.localTime?xp|16384:Wy|16384:qp,u>0&&(c|=Vp),qd=c,Fp=u,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Xa>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(n,s,h);if(l){let O=_?.user?.username;if(E&&(Hd=e.encoder.encode(E)),f&&i?.localTime){let T=i?.localTime,R=r.get(T);if(R){let B=xt(R).previousLocalTime;return r.put(T,xd(o,t,n,B,O,d,Hd),{ifVersion:p}),S}}r.put(Gl,xd(o,t,n,i?.localTime?1:0,O,d,Hd),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var Ky,Hp,Bd,Gl,$p,wK,xl,Fl,CK,qp,Wy,LK,Qy,xp,Vp,Yp,DK,Hd,Xa,qd,Fp,Gp,ihe,kp,vo,Za=ye(()=>{Ky=require("msgpackr");Bo();Hp=q(G()),Bd=new Uint8Array([1,1,1,1,4,64,0,0]),Gl=new Uint8Array([1,1,1,1,1,0,0,0]),$p=new Uint8Array([1,1,1,1,3,64,0,0]),wK=Symbol("local-timestamp"),xl=Symbol("metadata"),Fl=new Uint8Array(8),CK=new DataView(Fl.buffer,0,8),qp=0,Wy=0,LK=1,Qy=3,xp=4,Vp=16,Yp=1,Xa=0,qd=-1,Fp=0,Gp=class extends Ky.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(Xa||qd>=0){let i=0,o=Xa;o&&(i+=8,Xa=0);let c=qd,l=Fp;c>=0&&(i+=2,qd=-1,l&&(i+=8,Fp=0));let _=DK=r.call(this,n,s|2048|i);Hd=_.subarray((_.start||0)+i,_.end);let u=_.start||0;return o&&(Bd[4]=o,Bd[5]=o>>8,_.set(Bd,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(Fl,0,c),c+=8;else for(let d=0;d<8;d++)Fl[d]=t[c++];l=PK(),i=t[c]}let _;i<32&&(o=i,c+=2,o&Vp&&(_=(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,[xl]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(PK,"getTimestamp");ihe=Map.prototype.get;a(Fd,"fromResource");a(Gd,"handleLocalTimeForGets");vo=[];setInterval(()=>{for(let e=0;e<vo.length;e++){let t=vo[e].deref();!t||t.isDone||t.isCommitted?vo.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Hp.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Hp.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(Kp,"getUpdateRecord")});var aI={};ke(aI,{AUDIT_STORE_OPTIONS:()=>iI,createAuditEntry:()=>xd,openAuditStore:()=>Yd,readAuditEntry:()=>xt,setAuditRetention:()=>UK,transactionKeyEncoder:()=>sI});function Yd(e){let t=e.auditStore=e.openDB(tI.AUDIT_STORE_NAME,iI);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()-Wp})){if((_[0]&15)===zp){let u=xt(_),d=u.tableId;r[d]?.(u.recordId)}if(c=t.remove(l),await new Promise(setImmediate),++o>=MK){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,Wp/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,Vd.getWorkerIndex)()===(0,Vd.getWorkerCount)()-1&&s(kd),t}function UK(e,t=kd){Wp=e,kd=t}function xd(e,t,r,n,s,i,o){let c=oI[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let l=1;n&&(n>1?ec.setFloat64(0,n):Rn.set($p),l=9),f(0),f(t),d(r),ec.setFloat64(l,e),l+=8,s?d(s):Rn[l++]=0,Rn[n?8:0]=c;let u=Rn.subarray(0,l);if(o)return Buffer.concat([u,o]);return u;function d(E){let h=l;l+=1,l=(0,tc.writeKey)(E,Rn,l);let p=l-h-1;p>127?p>16383?(Xp.error("Key or username was too large for audit entry",E),l=h+1,Rn[h]=0):(Rn.copyWithin(h+2,h+1,l),ec.setUint16(h,p|32768),l++):Rn[h]=p}function f(E){E<128?Rn[l++]=E:E<16384?(ec.setUint16(l,E|32768),l+=2):E<1056964608?(ec.setUint32(l,E|3221225472),l+=4):(Rn[l]=255,ec.setUint32(l+1,E),l+=5)}}function xt(e){try{let t=e.dataView||(e.dataView=new Jp(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:oI[n&7],tableId:i,get recordId(){return eI(e,c,l)},version:_,previousLocalTime:r,get user(){return d>u?eI(e,u,d):void 0},getValue(f,E,h){if(n&Qp||n&jp&&!E)return f.decoder.decode(e.subarray(t.position));if(n&jp&&h)return Zp(f.getEntry(this.recordId),h,f)}}}catch{return Xp.error("Reading audit entry error",e),{}}}function eI(e,t,r){let n=e.subarray(t,r);return(0,tc.readKey)(n,0,r-t)}var tc,$d,tI,rI,Vd,nI,Xp,Rn,ec,sI,iI,Wp,MK,kd,Qp,jp,zy,zp,Jy,Xy,Zy,oI,Jp,Bo=ye(()=>{tc=require("ordered-binary"),$d=q(J()),tI=q(ut()),rI=q(C()),Vd=q(et()),nI=q(W());Za();Xp=q(G());Kd();(0,$d.initSync)();Rn=Buffer.alloc(1024),ec=new DataView(Rn.buffer,Rn.byteOffset,1024),sI={writeKey(e,t,r){return e===Gl?(t.set(Gl,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,tc.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,tc.readKey)(e,t,r)}},iI={encoding:"binary",keyEncoder:sI},Wp=(0,nI.convertToMS)((0,$d.get)(rI.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,MK=1e3,kd=1e4;a(Yd,"openAuditStore");a(UK,"setAuditRetention");Qp=16,jp=32,zy=1,zp=2,Jy=3,Xy=4,Zy=5,oI={put:zy|Qp,[zy]:"put",delete:zp,[zp]:"delete",message:Jy|Qp,[Jy]:"message",invalidate:Xy,[Xy]:"invalidate",patch:Zy|jp,[Zy]:"patch"};a(xd,"createAuditEntry");a(xt,"readAuditEntry");Jp=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(eI,"readKeySafely")});var eS={};ke(eS,{add:()=>Wd,applyReverse:()=>cI,getRecordAtTime:()=>Zp,rebuildUpdateBefore:()=>Qd});function Wd(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function Qd(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,Wd(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function cI(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=vK[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=lI}}function Zp(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":cI(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let l in s)s[l]===lI&&(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 vK,lI,Kd=ye(()=>{Bo();a(Wd,"add");Wd.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};vK={add:Wd};a(Qd,"rebuildUpdateBefore");a(cI,"applyReverse");lI={};a(Zp,"getRecordAtTime")});function Kr(e){return e[Lt]||(e[Lt]=Object.create(null))}function Zd(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,l,_;if(o.resolve)_={get(){return o.resolve(this,this[Ie])},set(u){return o.set(this,u)},configurable:!0};else{switch(o.type){case"String":l=a(function(u){if(!(typeof u=="string"||u==null&&o.nullable!==!1))throw new An.ClientError(`${c} must be a string, attempt to assign ${u}`);Kr(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 An.ClientError(`${c} must be a string, attempt to assign ${u}`);Kr(this)[c]=u},"set");break;case"Float":case"Number":l=a(function(u){if(!(typeof u=="number"||u==null&&o.nullable!==!1))throw new An.ClientError(`${c} must be a number, attempt to assign ${u}`);Kr(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 An.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${u}`);Kr(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 An.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${u}`);Kr(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 An.ClientError(`${c} must be a number, attempt to assign ${u}`);Kr(this)[c]=u},"set");break;case"Boolean":l=a(function(u){if(!(typeof u=="boolean"||u==null&&o.nullable!==!1))throw new An.ClientError(`${c} must be a boolean, attempt to assign ${u}`);Kr(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 An.ClientError(`${c} must be a Date, attempt to assign ${u}`);Kr(this)[c]=u},"set");break;case"Bytes":l=a(function(u){if(!(u instanceof Uint8Array||u==null&&o.nullable!==!1))throw new An.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${u}`);Kr(this)[c]=u},"set");break;case"Any":case void 0:l=a(function(u){Kr(this)[c]=u},"set");break;default:l=a(function(u){if(!(typeof u=="object"||u==null&&o.nullable!==!1))throw new An.ClientError(`${c} must be an object, attempt to assign ${u}`);Kr(this)[c]=u},"set")}_={get(){let u=this[Lt];if(u&&c in u){let f=u[c];if(f?.__op__){let E=this[pe]?.[c];return f.update(E)}return f}let d=this[pe]?.[c];if(d&&typeof d=="object"){let f=_I(d,o);if(f)return u||(u=this[Lt]=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[Lt];return l?.[o]!==void 0?l[o]:this[pe]?.[o]}),i("set",function(o,c){let l=n[o];if(l)return l.set.call(this,c);if(t.sealed)throw new An.ClientError("Can not add a property to a sealed table schema");Kr(this)[o]=c}),i("deleteProperty",function(o){Kr(this)[o]=void 0}),i("toJSON",function(){let o=this[Lt],c;for(let _ in o){c||(c=Object.assign({},this[pe]));let u=o[_];if(u?.__op__){let d=c[_];u=u.update(d)}c[_]=u}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[pe])),Object.assign(c,this)),c||this[pe]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function _I(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){if(s?.[pe])throw new Error("Can not track an already tracked object, check for circular references");this[pe]=s}},Zd(r,t)),new r(e)):new jd(e);case Array:let n=new Jd(e.length);n[pe]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=_I(o,t?.elements)),n[s]=o}return n;default:return e}}function ef(e){let t=e[Lt],r;for(let s in t){r||(r=Object.assign({},e[pe]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=ef(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[pe])),Object.assign(r,e)),r||e[pe]}function qo(e,t=e[Lt]){let r;if(uI.call(e,pe)&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=qo(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[pe]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=eS[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=qo(s);r[n]=s}return r?Object.freeze(r):uI.call(e,pe)?e[pe]:e}function zd(e){let t=e[pe];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Ho]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.[pe]===s){if(zd(i))return!0}else return!0}}else{let r=e[Lt];if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s[pe]===i){if(zd(s))return!0}else return!0}else return!0}}return!1}var An,Lt,jd,uI,Ho,Jd,Xd,tf=ye(()=>{Kn();An=q(re());Kd();Lt=Symbol("own-data");a(Kr,"getChanges");a(Zd,"assignTrackedAccessors");a(_I,"trackObject");jd=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[pe])throw new Error("Can not track an already tracked object, check for circular references");this[pe]=t}};Zd(jd,{});a(ef,"collapseData");uI=Object.prototype.hasOwnProperty;a(qo,"deepFreeze");a(zd,"hasChanges");Ho=Symbol.for("has-array-changes"),Jd=class extends Array{static{a(this,"TrackedArray")}[Ho];constructor(t){super(t)}splice(...t){return this[Ho]=!0,super.splice(...t)}push(...t){return this[Ho]=!0,super.push(...t)}pop(){return this[Ho]=!0,super.pop()}unshift(...t){return this[Ho]=!0,super.unshift(...t)}shift(){return this[Ho]=!0,super.shift()}};Jd.prototype.constructor=Array;Xd=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});function xK(){qK=setInterval(function(){for(let e of tS)if(e.stale){let t=e[Ie]?.url;dI.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},HK).unref()}var rS,dI,BK,tS,xo,rf,HK,qK,nS=ye(()=>{rS=q(dr()),dI=q(G());Kn();Za();BK=100,tS=new Set,xo=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=!0;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)throw new Error("Can not start a read on a transaction that is no longer open");return this.readTxnsUsed=1,Fd(()=>{this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0)}),tS.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),Fd(()=>{this.readTxn.use()}),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(tS.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}addWrite(t){if(!this.open&&!this.autoCommitMode)throw new Error("Can not use a transaction that is no longer open");this.writes.push(t),this.autoCommitMode&&this.commit()}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,rS.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 p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let O=S();E?E.push?E.push(O):E=[E,O]:E=O}}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(),t?.prepared?.(),this.open=!1;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<BK>>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 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=!1,this.writes=[]}},rf=class extends xo{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,rS.getNextMonotonicTime)())}getReadTxn(){}},HK=3e4;a(xK,"startMonitoringTxns");xK()});function ze(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open&&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 xo;e.timestamp&&(n.timestamp=e.timestamp),n[Ie]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit(r?.resetTransaction?{prepared(){n.autoCommitMode=!0}}:{});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var fI,Fo=ye(()=>{fI=require("../index");Kn();nS();a(ze,"transaction");(0,fI._assignPackageExport)("transaction",ze);ze.commit=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};ze.abort=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function oS(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],p=_(h);d=d.concat(p)}let f=new Set;return d.filter(E=>{let h=E.key??E;return f.has(h)?!1:(f.add(h),!0)})}else{let d=_(l),f=u(e.slice(1),!0,l.estimated_count);return f.length>0?o(d,f):d}function _(d){return d.conditions?oS(d.conditions,d.operator,r,n,s,i,o,c):sc(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(_,"executeCondition");function u(d,f,E){return d.map((h,p)=>{if(h.conditions){let T=h.operator==="or",R=u(h.conditions,!T,E);return T?(B,H)=>R.some(v=>v(B,H)):(B,H)=>R.every(v=>v(B,H))}let S=(h.attribute||h[0])===r.primaryKey,O=cS(h,r,i,c,S,E);return f&&p<d.length-1&&E&&(E=QK(r.primaryStore,h.estimated_count,E)),O}).filter(Boolean)}a(u,"mapConditionsToFilters")}function sc(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=ei(n.attributes,T);if(R.relationship){if(o.length<2)throw new Zs.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let B=R.definition?.tableClass||R.elements?.definition?.tableClass,H=new Map,v=sc({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,B,s,H);if(R.relationship.to){i[o[0]]=H;let P=!!ei(B.attributes,R.relationship.to)?.elements;v=VK(v,R,B.primaryStore,P,H)}if(R.relationship.from){let P=a(V=>sc({attribute:R.relationship.from,value:V},t,r,n,s,H),"searchEntry");R.elements?(i[o[0]]=H,v=YK(v,R,B.primaryStore,H,P)):v=v.flatMap(P)}return v}else if(o.length===1)o=o[0];else throw new Zs.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,u,d,f;c instanceof Date&&(c=c.getTime());let E;switch(aS[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]=Ts.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 Zs.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,p=h?n.primaryStore:n.indices[o],S;if(!p||p.isIndexing||E||c===null&&!p.indexNulls){if(!s)throw new Zs.ClientError(E?`Can not use ${l} operator without combining with a condition that uses an index`:`"${o}" is not indexed${c===null&&!p.indexNulls?" for nulls, index needs to be rebuilt to search for nulls":p?.isIndexing?" yet":""}, can not search for this attribute`,404);if(S=cS(e),!S)throw new Zs.ClientError(`Unknown search operator ${e.comparator}`)}let O={start:_,end:u,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let T=p.getRange(O).map(S?({key:R,value:B})=>new Promise((H,v)=>setImmediate(()=>{try{H(B&&S(B)?R:kl.SKIP)}catch(P){v(P)}})):R=>R.value==null?kl.SKIP:R);return T.hasEntries=!0,T}else return p?p.getRange(O).map(S?({key:T,value:R})=>new Promise((B,H)=>setImmediate(()=>{try{B(S({[o]:T})?R:kl.SKIP)}catch(v){H(v)}})):({value:T})=>T):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(({key:T,value:R})=>new Promise((B,H)=>setImmediate(()=>{try{B(R&&S(R)?T:kl.SKIP)}catch(v){H(v)}})))}function ei(e,t){if(Array.isArray(t))if(t.length>1){let r=ei(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?ei(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 VK(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;return(async()=>{let _=a((d,f)=>{let E=d;Array.isArray(d)&&(E=Wn(d),o=!0);let h=s.get(E);h?h.push(f):s.set(E,h=[f]),d!==E&&(h.key=d)},"add_entry"),u=0;for await(let d of e){let f=d.value??r.get(d.key??d),E=f?.[l];if(E!=null&&!s.filters?.some(h=>!h(f))){if(n)for(let h=0;h<E.length;h++)_(E[h],d);else _(E,d);u++>100&&(await new Promise(setImmediate),u=0)}}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 YK(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 _=Wn(l.value);if(!c.has(_))return c.add(_),l}if(!i)return(async()=>{let _=new Map;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>_.has(Wn(f)));let u=0;for await(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(E=>!E(f)))continue}_.set(Wn(d),d),u++>100&&(await new Promise(setImmediate),u=0)}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 cS(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=ei(t.attributes,u),f=d.definition?.tableClass||d.elements.definition?.tableClass,E=n?.[u],h=cS({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 p=t.propertyResolvers?.[u],S,O=a((T,R)=>{let B,H;if(p){if(p.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let P of h.idFilter.idSet)e={attribute:p.from,value:P};S=_(p.from,h.idFilter,!0)}else S=_(p.from,h.idFilter,!1);let v=S(T);return S.idFilter&&(O.idFilter=S.idFilter),v}H=p(T,r,R),B=H?.value}else B=T[u];return B?Array.isArray(B)?B.some(h):h(B,H):!1},"recordFilter");return O}}switch(l instanceof Date&&(l=l.getTime()),aS[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,Ts.compareKeys)(u,l[0])>=0&&(0,Ts.compareKeys)(u,l[1])<=0,!0);case"gt":return _(c,u=>(0,Ts.compareKeys)(u,l)>0);case"ge":return _(c,u=>(0,Ts.compareKeys)(u,l)>=0);case"lt":return _(c,u=>(0,Ts.compareKeys)(u,l)<0);case"le":return _(c,u=>(0,Ts.compareKeys)(u,l)<=0);case"ne":return _(c,u=>(0,Ts.compareKeys)(u,l)!==0);case"sort":return()=>!0;default:throw new Zs.ClientError(`Unknown query comparator "${o}"`)}function _(u,d,f){let E;f=f&&!s&&t?.indices[u]&&i>3,f&&(e.estimated_count==null&&sf(t)(e),E=e.estimated_count>>4,(isNaN(E)||E>=i)&&(f=!1));let h=0,p=3;function S(O){let T=O[u],R;if(typeof T!="object"||!T?R=d(T):Array.isArray(T)?R=T.some(d):T instanceof Date&&(R=d(T.getTime())),f&&(p++,!R&&!S.idFilter&&++h/p*(i-p)>E)){let B=sc(e,r.transaction.getReadTxn(),!1,t).map(Wn),H=new Set(B);S.idFilter=v=>H.has(Wn(v)),S.idFilter.idSet=H}return R}return a(S,"recordFilter"),s&&(S.idFilter=d),S}a(_,"attributeComparator")}function sf(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/Xs(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=aS[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=ei(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=sf(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"});r.estimated_count=c*Xs(e.indices[i.relationship.from]||e.primaryStore)/(Xs(o.primaryStore)||1)}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=Xs(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=kK*Xs(e.primaryStore)+1:n==="between"?r.estimated_count=GK*Xs(e.primaryStore)+1:n==="sort"?r.estimated_count=Xs(e.primaryStore)+1:r.estimated_count=FK*Xs(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function of(e){if(e)if(Gi=e,rc.lastIndex=0,KK.test(e))try{let t=$l(new nc,"");if(fr!==Gi.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${fr} in '${Gi}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function $l(e,t){let r=rc,n,s,i,o,c,l=decodeURIComponent,_;for(;n=r.exec(Gi);){fr=r.lastIndex;let[,u,d]=n;if(o){if(u)throw new SyntaxError(`expected operator, but encountered '${u}'`);o=!1,c=!1}else c=!0;let f;switch(d){case"=":if(s){if(u.length<=2)i=u;else throw new SyntaxError(`invalid FIQL operator ${u}`);l=EI}else{if(l=decodeURIComponent,i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");s=Vl(u)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=$K[d],l=iS[i]?EI:decodeURIComponent,!u)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=Vl(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"&&hI(h,u),nf(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(Vl(u)),s=void 0;break;case"(":rc.lastIndex=fr;let E=$l(u?[]:new nc,")");switch(u){case"":nf(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}`)}Gi[fr]===","?r.lastIndex=++fr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!u)throw new SyntaxError("property sets must have a defined parent property name");rc.lastIndex=fr,f=$l([],"}"),f.name=u,e.push(f),Gi[fr]===","?r.lastIndex=++fr:o=!0;break;case"[":rc.lastIndex=fr,u?(f=$l(new nc,"]"),f.name=u):f=$l(e.conditions?new nc:[],"]"),e.conditions?(nf(e,_),e.conditions.push(f),s=null):e.push(f),Gi[fr]===","?r.lastIndex=++fr:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let h={comparator:i||"equals",attribute:s,value:l(u)};i==="eq"&&hI(h,u),nf(e,_),e.conditions.push(h)}else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(Vl(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?WK:rc,r.lastIndex=fr),fr===Gi.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function nf(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 Vl(e){return e.indexOf(".")>-1?e.split(".").map(Vl):decodeURIComponent(e)}function EI(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 Zs.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function hI(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Zs.ClientError("wildcard can only be used at the end of a string")}function mI(e){let t=pI(e[0]);return e.length>1&&(t.next=mI(e.slice(1))),t}function pI(e){if(Array.isArray(e)){let t=pI(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 Wn(e){return Array.isArray(e)?e.join("\0"):e}function Xs(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function QK(e,t,r){return t*r/Xs(e)}var Zs,sS,Ts,kl,FK,GK,kK,$K,iS,aS,KK,rc,WK,fr,Gi,nc,af=ye(()=>{Zs=q(re()),sS=q(ut()),Ts=require("ordered-binary"),kl=require("lmdb"),FK=.3,GK=.1,kK=.05,$K={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},iS={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(oS,"executeConditions");a(sc,"searchByIndex");a(ei,"findAttribute");a(VK,"joinTo");a(YK,"joinFrom");aS={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(cS,"filterByType");a(sf,"estimateCondition");KK=/[()[\]|!<>.]|(=\w*=)/,rc=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,WK=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(of,"parseQuery");a($l,"parseBlock");a(nf,"assignOperator");a(Vl,"decodeProperty");a(EI,"typedDecoding");a(hI,"wildcardDecoding");a(mI,"toSortObject");a(pI,"toSortEntry");nc=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(Wn,"flattenKey");a(Xs,"estimatedEntryCount");a(QK,"intersectionEstimate")});var _S={};ke(_S,{CONTEXT:()=>Ie,ID_PROPERTY:()=>Pe,IS_COLLECTION:()=>On,RECORD_PROPERTY:()=>pe,Resource:()=>Yt,snake_case:()=>zK,transformForSelect:()=>lf});function zK(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function SI(e,t){if(Yl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(Yl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new uS;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){Yl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function Wr(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,_,u;if(r?(o?(u=i,o=o[Ie]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(u=s,c=u[this.primaryKey]??null,o=i[Ie]||i):u=i:(u=s,c=u[Pe]??u[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[Ie]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(l=s,s[Symbol.iterator]){c=[],_=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let E=c.indexOf("?");if(E>-1){let p=this.parseQuery(c.slice(E+1));l?l=Object.assign(p,l):l=p,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 d.resetTransaction=!0,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(p=>{if(!p)throw new cf(o.user);return typeof u?.then=="function"?u.then(S=>e(E,l,o,S)):e(E,l,o,u)});if(!h)throw new cf(o.user)}return typeof u?.then=="function"?u.then(h=>e(E,l,o,h)):e(E,l,o,u)}a(f,"authorizeActionOnResource")}}function Qr(e,t){let r=new RI.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 lS(e,t,r){let n=e[pe];if(n){let s=e[Lt];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 lf(e,t){let r=t?.propertyResolvers,n=t[Ie],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):lS(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(lS(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(lS(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]=lf(c.select||c,u)}let _=o(c.name);return l(_)}else return o(c);else return c}}a(i,"handleProperty")}var TI,gI,RI,Ie,Pe,On,pe,jK,Yt,cf,Yl,uS,Kn=ye(()=>{TI=require("crypto");ql();gI=require("../index"),RI=q(re());tf();Fo();af();Ie=Symbol.for("context"),Pe=Symbol.for("primary-key"),On=Symbol("is-collection"),pe=Symbol("stored-record"),jK={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Yt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Pe]=t;let n=r?.[Ie];this[Ie]=n!==void 0?n:r||null}static get=Wr(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 _=lf(l,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=Wr(function(t,r,n,s){if(Array.isArray(s)&&t[On]){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):Qr(t,"put")},{hasContent:!0,type:"update"});static patch=Wr(function(t,r,n,s){return t.patch?t.patch(s,r):Qr(t,"patch")},{hasContent:!0,type:"update"});static delete=Wr(function(t,r,n,s){return t.delete?t.delete(r):Qr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,TI.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):Qr(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=Wr(function(t,r,n,s){return t.invalidate?t.invalidate(r):Qr(t,"delete")},{hasContent:!1,type:"update"});static post=Wr(function(t,r,n,s){return t[Pe]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=Wr(function(t,r,n,s){return t.connect?t.connect(s,r):Qr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Wr(function(t,r,n,s){return t.subscribe?t.subscribe(r):Qr(t,"subscribe")},{type:"read"});static publish=Wr(function(t,r,n,s){return t[Pe]!=null&&t.update?.(),t.publish?t.publish(s,r):Qr(t,"publish")},{hasContent:!0,type:"create"});static search=Wr(function(t,r,n,s){let i=t.search?t.search(r):Qr(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=lf(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Wr(function(t,r,n,s){return t.search?t.search(s,r):Qr(t,"search")},{hasContent:!0,type:"read"});static copy=Wr(function(t,r,n,s){return t.copy?t.copy(s,r):Qr(t,"copy")},{type:"create"});static move=Wr(function(t,r,n,s){return t.move?t.move(s,r):Qr(t,"move")},{type:"delete"});post(t){if(this[On])return this.constructor.create(this[Pe],t,this[Ie]);Qr(this,"post")}static isCollection(t){return t?.[On]}static coerceId(t){return t}static parseQuery(t){return of(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&&jK[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:SI(t,this),isCollection:Yl}}let i=SI(t,this);return Yl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Ie],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let _=l.asMap.get(t);if(s=_?.find(u=>u.constructor===c),s)return s;_||l.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=l.find(_=>_[Pe]===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[Pe],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[On]=!0),s}subscribe(t){return new Yn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Yn}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[Pe]}getContext(){return this[Ie]}};Yt.prototype[Ie]=null;(0,gI._assignPackageExport)("Resource",Yt);a(zK,"snake_case");cf=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(SI,"pathToId");uS=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Wr,"transactional");a(Qr,"missingMethod");a(lS,"selectFromObject");a(lf,"transformForSelect")});var AI={};ke(AI,{Resources:()=>uf,keyArrayToString:()=>ic,resetResources:()=>JK,resources:()=>ki});function JK(){return ki=new uf}function ic(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var uf,ki,Kl=ye(()=>{Fo();uf=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(JK,"resetResources");a(ic,"keyArrayToString")});function NI(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;oc||((0,_f.onMessageByType)(OI,u=>{bI(u.path)}),oc=Object.create(null));let o=oc[s]||(oc[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=ic(t);let l=new fS(r);l.startTime=n;let _=c.get(t);return _?_.push(l):(c.set(t,_=[l]),_.tables=c,_.key=t),l.subscriptions=_,l}function bI(e,t){if(!oc)return;let r=oc[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=ic(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,dS.info)("omitting",l,h.startTime,s);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(n?n.push(h):n=[h]),h.txnInProgress=o.version),h.listener(l,o,s,p)}catch(p){console.error(p),(0,dS.info)(p)}}}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 yI(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,_f.broadcast)({type:OI,path:s}),bI(s,!0)})}}var dS,_f,OI,oc,Ghe,fS,II=ye(()=>{dS=q(G()),_f=q(et());ql();Kl();Bo();OI="transaction",Ghe=Buffer.alloc(4096);a(NI,"addSubscription");fS=class extends Yn{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(bI,"notifyFromTransactionData");a(yI,"listenToCommits")});var CI=g((Vhe,wI)=>{"use strict";var ES=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};wI.exports=ES});var DI=g((Khe,LI)=>{"use strict";var hS=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};LI.exports=hS});var df=g((Qhe,PI)=>{"use strict";var pS=J(),SS=C(),{RecordEncoder:XK}=(Za(),ne(jy));pS.initSync();var ZK=pS.get(SS.CONFIG_PARAMS.STORAGE_COMPRESSION),eW=pS.get(SS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,tW=SS.UPDATES_PROPERTY,mS=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=ZK&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=eW&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:XK},this.alwaysLazyProperty=n=>n===tW)}};PI.exports=mS});var Ef=g((zhe,UI)=>{"use strict";var ac=J(),Wl=C();ac.initSync();var rW=ac.get(Wl.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||ac.get(Wl.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||ac.get(Wl.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",MI=ac.get(Wl.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),nW=ac.get(Wl.CONFIG_PARAMS.STORAGE_NOREADAHEAD),ff=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=rW,this.noFSAccess=!0,MI!==void 0&&(this.overlappingSync=MI),this.noReadAhead=nW}};UI.exports=ff;ff.MAX_DBS=1e4});var $e=g((Xhe,VI)=>{"use strict";var gS=require("lmdb"),Qn=require("fs-extra"),jr=require("path"),hf=dr(),HI=G(),Er=Yr().LMDB_ERRORS_ENUM,mf=DI(),RS=df(),qI=Ef(),$i=ut(),vI=C(),{table:sW,resetDatabases:iW}=(Ne(),ne(xe)),BI=J(),jn=$i.INTERNAL_DBIS_NAME,xI=$i.DBI_DEFINITION_NAME,oW="data.mdb",aW="lock.mdb",Ql=".mdb",cW="-lock",TS=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Nn(t,r),this.key_type=this.dbi[$i.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[$i.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new gS.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function pf(e,t){if(e===void 0)throw new Error(Er.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Er.ENV_NAME_REQUIRED)}a(pf,"pathEnvNameValidation");async function AS(e,t,r=!0){try{await Qn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Er.INVALID_BASE_PATH):n}try{let n=jr.join(e,t+Ql);return await Qn.access(n,Qn.constants.R_OK|Qn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Qn.access(jr.join(e,t,oW),Qn.constants.R_OK|Qn.constants.F_OK),jr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Er.INVALID_ENVIRONMENT)}else throw new Error(Er.INVALID_ENVIRONMENT);throw n}}a(AS,"validateEnvironmentPath");function Sf(e,t){if(hf.validateEnv(e),t===void 0)throw new Error(Er.DBI_NAME_REQUIRED)}a(Sf,"validateEnvDBIName");async function lW(e,t,r=!1,n=!1){pf(e,t);let s=jr.basename(e);t=t.toString();let i=BI.get(vI.CONFIG_PARAMS.DATABASES);i||BI.setProperty(vI.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await AS(e,t,n),FI(e,t,r)}catch(o){if(o.message===Er.INVALID_ENVIRONMENT){let c=jr.join(e,t);await Qn.mkdirp(n?c:e);let l=new qI(n?c:c+Ql,!1),_=gS.open(l);_.dbis=Object.create(null);let u=new RS(!1);_.openDB(jn,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=OS(e,t,r);return _[$i.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(lW,"createEnvironment");async function uW(e,t,r,n=!0){pf(e,t),t=t.toString();let s=jr.join(e,t);return sW({table:t,database:jr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(uW,"copyEnvironment");async function FI(e,t,r=!1){pf(e,t),t=t.toString();let n=OS(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 AS(e,t),i=jr.join(e,t+Ql),o=s!=i,c=new qI(s,o),l=gS.open(c);l.dbis=Object.create(null);let _=kI(l);for(let u=0;u<_.length;u++)Nn(l,_[u]);return l[$i.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(FI,"openEnvironment");async function _W(e,t,r=!1){pf(e,t),t=t.toString();let n=jr.join(e,t+Ql),s=await AS(e,t);if(global.lmdb_map!==void 0){let i=OS(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await GI(o),delete global.lmdb_map[i]}}await Qn.remove(s),await Qn.remove(s===n?s+cW:jr.join(jr.dirname(s),aW))}a(_W,"deleteEnvironment");async function GI(e){hf.validateEnv(e);let t=e[$i.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(GI,"closeEnvironment");function OS(e,t,r=!1){let s=`${jr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(OS,"getCachedEnvironmentName");function dW(e){hf.validateEnv(e);let t=Object.create(null),r=Nn(e,jn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==jn)try{t[n]=Object.assign(new mf,s)}catch{HI.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(dW,"listDBIDefinitions");function kI(e){hf.validateEnv(e);let t=[],r=Nn(e,jn);for(let{key:n}of r.getRange({start:!1}))n!==jn&&t.push(n);return t}a(kI,"listDBIs");function fW(e,t){let n=Nn(e,jn).getEntry(t),s=new mf;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{HI.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(fW,"getDBIDefinition");function $I(e,t,r,n=!r){if(Sf(e,t),t=t.toString(),t===jn)throw new Error(Er.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Nn(e,t)}catch(s){if(s.message===Er.DBI_DOES_NOT_EXIST){let i=new RS(r,n===!0),o=e.openDB(t,i),c=new mf(r===!0,n);return o[xI]=c,Nn(e,jn).putSync(t,c),e.dbis[t]=o,o}throw s}}a($I,"createDBI");function Nn(e,t){if(Sf(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==jn?r=fW(e,t):r=new mf,r===void 0)throw new Error(Er.DBI_DOES_NOT_EXIST);let n;try{let s=new RS(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(Er.DBI_DOES_NOT_EXIST):s}return n[xI]=r,e.dbis[t]=n,n}a(Nn,"openDBI");function EW(e,t){Sf(e,t),t=t.toString();let r=Nn(e,t),n=r.getStats();return r[$i.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(EW,"statDBI");async function hW(e,t){try{let r=jr.join(e,t+Ql);return(await Qn.stat(r)).size}catch{throw new Error(Er.INVALID_ENVIRONMENT)}}a(hW,"environmentDataSize");function mW(e,t){if(Sf(e,t),t=t.toString(),t===jn)throw new Error(Er.CANNOT_DROP_INTERNAL_DBIS_NAME);Nn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Nn(e,jn).removeSync(t)}a(mW,"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{Nn(e,i)}catch(o){if(o.message===Er.DBI_DOES_NOT_EXIST)$I(e,i,i!==t,i===t),n=!0;else throw o}}n&&iW()}a(pW,"initializeDBIs");VI.exports={openDBI:Nn,openEnvironment:FI,createEnvironment:lW,listDBIs:kI,listDBIDefinitions:dW,createDBI:$I,dropDBI:mW,statDBI:EW,deleteEnvironment:_W,initializeDBIs:pW,TransactionCursor:TS,environmentDataSize:hW,copyEnvironment:uW,closeEnvironment:GI}});var WI=g((eme,KI)=>{"use strict";var NS=$e(),SW=G(),YI=Yr().LMDB_ERRORS_ENUM;KI.exports=TW;async function TW(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 NS.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==YI.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await NS.closeEnvironment(global.lmdb_map[n]),await NS.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==YI.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){SW.error(t)}}a(TW,"cleanLMDBMap")});var ti=g((rme,gW)=>{gW.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=g((sme,iw)=>{"use strict";var bS=require("recursive-iterator"),RW=require("alasql"),yS=require("clone"),QI=W(),{handleHDBError:jI,hdb_errors:AW}=re(),{HDB_ERROR_MSGS:zI,HTTP_STATUS_CODES:JI}=AW,{getDatabases:OW}=(Ne(),ne(xe)),NW=["DISTINCT_ARRAY"],XI=Symbol("validateTables"),IS=Symbol("validateTable"),nme=Symbol("getAllColumns"),ZI=Symbol("validateAllColumns"),Tf=Symbol("findColumn"),ew=Symbol("validateOrderBy"),jl=Symbol("validateSegment"),wS=Symbol("validateColumn"),tw=Symbol("setColumnsForTable"),rw=Symbol("checkColumnsForAsterisk"),nw=Symbol("validateGroupBy"),sw=Symbol("hasColumns"),CS=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[XI](),this[rw](),this[ZI]()}[XI](){if(this[sw]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[IS](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[IS](t.table)})}}[sw](){let t=!1,r=new bS(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[IS](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=OW();if(!r[t.databaseid])throw jI(new Error,zI.SCHEMA_NOT_FOUND(t.databaseid),JI.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw jI(new Error,zI.TABLE_NOT_FOUND(t.databaseid,t.tableid),JI.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=yS(s);i.table=yS(t),this.attributes.push(i)})}[Tf](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[rw](){let t=new bS(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[tw](r.tableid)}[tw](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new RW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[ZI](){this[jl](this.statement.columns,!1),this[jl](this.statement.joins,!1),this[jl](this.statement.where,!1),this[nw](this.statement.group,!1),this[jl](this.statement.order,!0)}[jl](t,r){if(!t)return;let n=new bS(t),s=[];for(let{node:i,path:o}of n)!QI.isEmpty(i)&&!QI.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[ew](i):s.push(this[wS](i)));return s}[nw](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&NW.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=yS(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Tf](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[Tf](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[ew](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[wS](t)}[wS](t){let r=this[Tf](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};iw.exports=CS});var cw=g((ome,aw)=>{"use strict";var LS=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")}};aw.exports=LS});var uw=g((cme,lw)=>{"use strict";var DS=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};lw.exports=DS});var dw=g((ume,_w)=>{"use strict";var PS=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};_w.exports=PS});var Ew=g((dme,fw)=>{"use strict";var MS=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};fw.exports=MS});var ko=g((pme,pw)=>{"use strict";var bW=$e(),yW=uw(),IW=dw(),wW=Ew(),gs=dr(),zl=Yr().LMDB_ERRORS_ENUM,CW=ut(),ri=C(),LW=W(),DW=require("uuid"),Eme=require("lmdb"),{handleHDBError:PW,hdb_errors:MW}=re(),{OVERFLOW_MARKER:hme,MAX_SEARCH_KEY_LENGTH:mme}=CW,hw=J();hw.initSync();var gf=hw.get(ri.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),US=ri.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Go=ri.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function UW(e,t,r,n,s=gs.getNextMonotonicTime()){qS(e,t,r,n),vS(e,t,r);let i=new yW,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];mw(_,!0,s);let u=vW(e,t,r,_),d=_[t];o.push(u),c.push(d)}return BS(o,c,n,i,s)}a(UW,"insertRecords");function vW(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][ri.FUNC_VAL],n[o]=c)}let l=gs.getIndexedValues(c),_=e.dbis[o];if(l){gf&&_.prefetch(l.map(u=>({key:u,value:s})),Rf);for(let u=0,d=l.length;u<d;u++)_.put(l[u],s)}}gf&&e.dbis[t].prefetch([s],Rf),e.dbis[t].put(s,n,n[Go])})}a(vW,"insertRecord");function BW(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(BW,"removeSkippedRecords");function mw(e,t,r){let n=r>0;(n||!Number.isInteger(e[Go]))&&(e[Go]=r||(r=gs.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[US]))&&(e[US]=r||gs.getNextMonotonicTime()):delete e[US]}a(mw,"setTimestamps");function vS(e,t,r){r.indexOf(ri.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ri.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ri.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ri.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),bW.initializeDBIs(e,t,r)}a(vS,"initializeTransaction");async function HW(e,t,r,n,s=gs.getNextMonotonicTime()){qS(e,t,r,n),vS(e,t,r);let i=new IW,o=[],c=[],l=[];for(let _=0;_<n.length;_++){let u=n[_],d=u[t],f;try{f=HS(e,t,u,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),l.push(d)}return BS(c,l,n,i,s,o)}a(HW,"updateRecords");async function qW(e,t,r,n,s=gs.getNextMonotonicTime()){try{qS(e,t,r,n)}catch(l){throw PW(l,l.message,MW.HTTP_STATUS_CODES.BAD_REQUEST)}vS(e,t,r);let i=new wW,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l],u;LW.isEmpty(_[t])?(u=DW.v4(),_[t]=u):u=_[t];let d=HS(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return BS(o,c,n,i,s)}a(qW,"upsertRecords");async function BS(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||gs.getNextMonotonicTime(),BW(r,i),n}a(BS,"finalizeWrite");function HS(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[Go])&&_[Go]>r[Go])return!1;u&&s.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let O=_[h];if(typeof p=="function"){let R=p([[_]]);Array.isArray(R)&&(p=R[0][ri.FUNC_VAL],r[h]=p)}if(p===O)continue;let T=gs.getIndexedValues(O);if(T){gf&&S.prefetch(T.map(R=>({key:R,value:n})),Rf);for(let R=0,B=T.length;R<B;R++)S.remove(T[R],n)}if(T=gs.getIndexedValues(p),T){gf&&S.prefetch(T.map(R=>({key:R,value:n})),Rf);for(let R=0,B=T.length;R<B;R++)S.put(T[R],n)}}let E=Object.assign({},_,r);c.put(n,E,E[Go])},"do_put");return l?d=c.ifVersion(n,l.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:HS(e,t,r,n,s,i,o))}a(HS,"updateUpsertRecord");function xW(e,t,r){if(gs.validateEnv(e),t===void 0)throw new Error(zl.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(zl.WRITE_ATTRIBUTES_REQUIRED):new Error(zl.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(xW,"validateBasic");function qS(e,t,r,n){if(xW(e,t,r),!Array.isArray(n))throw n===void 0?new Error(zl.RECORDS_REQUIRED):new Error(zl.RECORDS_MUST_BE_ARRAY)}a(qS,"validateWrite");function Rf(){}a(Rf,"noop");pw.exports={insertRecords:UW,updateRecords:HW,upsertRecords:qW}});var As=g((Tme,gw)=>{"use strict";var Tw=W(),Sw=C(),cc=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Rs=require("joi"),Vi={schema_format:{pattern:cc,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},FW=Rs.alternatives(Rs.string().min(1).max(Vi.schema_length.maximum).pattern(cc).messages({"string.pattern.base":"{:#label} "+Vi.schema_format.message}),Rs.number(),Rs.array()).required(),GW=Rs.alternatives(Rs.string().min(1).max(Vi.schema_length.maximum).pattern(cc).messages({"string.pattern.base":"{:#label} "+Vi.schema_format.message}),Rs.number()),kW=Rs.alternatives(Rs.string().min(1).max(Vi.schema_length.maximum).pattern(cc).messages({"string.pattern.base":"{:#label} "+Vi.schema_format.message}),Rs.number()).required();function $W(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Vi.schema_length.maximum?`'${e}' maximum of 250 characters`:cc.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a($W,"checkValidTable");function VW(e,t){return Tw.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(VW,"validateSchemaExists");function YW(e,t){let r=t.state.ancestors[0].schema;return Tw.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(YW,"validateTableExists");function KW(e,t){return e.toLowerCase()===Sw.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Sw.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(KW,"validateSchemaName");gw.exports={common_validators:Vi,schema_regex:cc,hdb_schema_table:FW,validateSchemaExists:VW,validateTableExists:YW,validateSchemaName:KW,checkValidTable:$W,hdb_database:GW,hdb_table:kW}});var tt=g((Rme,Rw)=>{"use strict";var hr=require("validate.js");hr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||hr.validators.type.checks[t](e)?null:` must be a '${t}' value`};hr.validators.type.checks={Object:function(e){return hr.isObject(e)&&!hr.isArray(e)},Array:hr.isArray,Integer:hr.isInteger,Number:hr.isNumber,String:hr.isString,Date:hr.isDate,Boolean:function(e){return typeof e=="boolean"}};hr.validators.hasValidFileExt=function(e,t){return hr.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};Rw.exports={validateObject:WW,validateObjectAsync:QW,validateBySchema:jW};function WW(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=hr(e,t,{format:"flat"});return r?new Error(r):null}a(WW,"validateObject");async function QW(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await hr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(QW,"validateObjectAsync");function jW(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(jW,"validateBySchema")});var Af=g((Ome,Aw)=>{var{common_validators:Os}=As(),Xl=tt(),Jl="is required",Tt={database:{presence:!1,format:Os.schema_format,length:Os.schema_length},schema:{presence:!1,format:Os.schema_format,length:Os.schema_length},table:{presence:!0,format:Os.schema_format,length:Os.schema_length},attribute:{presence:!0,format:Os.schema_format,length:Os.schema_length},hash_attribute:{presence:!0,format:Os.schema_format,length:Os.schema_length}};function Zl(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(Zl,"makeAttributesStrings");function zW(e){return e=Zl(e),Tt.table.presence=!1,Tt.attribute.presence=!1,Tt.hash_attribute.presence=!1,Xl.validateObject(e,Tt)}a(zW,"schema_object");function JW(e){return e=Zl(e),Tt.table.presence={message:Jl},Tt.attribute.presence=!1,Tt.hash_attribute.presence=!1,Xl.validateObject(e,Tt)}a(JW,"table_object");function XW(e){return e=Zl(e),Tt.table.presence={message:Jl},Tt.attribute.presence=!1,Xl.validateObject(e,Tt)}a(XW,"create_table_object");function ZW(e){return e=Zl(e),Tt.table.presence={message:Jl},Tt.attribute.presence={message:Jl},Tt.hash_attribute.presence=!1,Xl.validateObject(e,Tt)}a(ZW,"attribute_object");function eQ(e){return e=Zl(e),Tt.table.presence={message:Jl},Tt.attribute.presence=!1,Tt.hash_attribute.presence=!1,Xl.validateObject(e,Tt)}a(eQ,"describe_table");function tQ(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(tQ,"validateTableResidence");Aw.exports={schema_object:zW,create_table_object:XW,table_object:JW,attribute_object:ZW,describe_table:eQ,validateTableResidence:tQ}});var Nw=g((bme,Ow)=>{"use strict";var rQ=require("uuid"),xS=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||rQ.v4(),this.schema_table=`${this.schema}.${this.table}`}};Ow.exports=xS});var Of=g((Ime,bw)=>{"use strict";var nQ=Nw(),FS=class extends nQ{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};bw.exports=FS});var Iw=g((Cme,yw)=>{"use strict";yw.exports=iQ;var sQ="inserted";function iQ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===sQ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(iQ,"returnObject")});var Nf=g((Dme,Pw)=>{"use strict";var oQ=C(),GS=$e(),aQ=ko(),{getSystemSchemaPath:cQ,getSchemaPath:lQ}=Qe(),uQ=ti(),_Q=Af(),dQ=Of(),fQ=Iw(),{handleHDBError:ww,hdb_errors:Lw}=re(),Cw=W(),{HTTP_STATUS_CODES:EQ}=Lw,kS=uQ.hdb_attribute,Dw=[];for(let e=0;e<kS.attributes.length;e++)Dw.push(kS.attributes[e].attribute);var hQ="inserted";Pw.exports=mQ;async function mQ(e){let t=_Q.attribute_object(e);if(t)throw ww(new Error,t.message,Lw.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&Cw.checkGlobalSchemaTable(e.schema,e.table);if(r)throw ww(new Error,r,EQ.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Cw.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new dQ(e.schema,e.table,e.attribute,e.id);try{let i=await GS.openEnvironment(lQ(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}`);GS.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await GS.openEnvironment(cQ(),oQ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await aQ.insertRecords(o,kS.hash_attribute,Dw,[s]);return fQ(hQ,c,{records:[s]},l)}catch(i){throw i}}a(mQ,"lmdbCreateAttribute")});var VS=g((Mme,Uw)=>{var{hdb_table:pQ,hdb_database:Mw}=As(),SQ=tt(),$S=require("joi"),TQ={undefined:"undefined",null:"null"},gQ=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||TQ[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"),RQ=$S.object({database:Mw,schema:Mw,table:pQ,records:$S.array().items($S.object().custom(gQ)).required()});Uw.exports=function(e){return SQ.validateBySchema(e,RQ)}});var eu=g((Bme,Bw)=>{"use strict";var ni=W(),vw=G(),vme=VS(),{getDatabases:AQ}=(Ne(),ne(xe)),{ClientError:$o}=re();Bw.exports=OQ;function OQ(e){if(ni.isEmpty(e))throw new $o("invalid update parameters defined.");if(ni.isEmptyOrZeroLength(e.schema))throw new $o("invalid schema specified.");if(ni.isEmptyOrZeroLength(e.table))throw new $o("invalid table specified.");if(!Array.isArray(e.records))throw new $o("records must be an array");let t=AQ()[e.schema]?.[e.table];if(ni.isEmpty(t))throw new $o(`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&&ni.isEmptyOrZeroLength(o[r]))throw vw.error("a valid hash attribute must be provided with update record:",o),new $o("a valid hash attribute must be provided with update record, check log for more info");if(!ni.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw vw.error(`a valid hash value must be provided with ${e.operation} record:`,o),new $o(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!ni.isEmpty(o[r])&&o[r]!==""&&n.has(ni.autoCast(o[r]))&&(o.skip=!0),n.add(ni.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(OQ,"insertUpdateValidate")});var tu=g((qme,Hw)=>{"use strict";var NQ=C().OPERATIONS_ENUM,YS=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=NQ.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Hw.exports=YS});var iu=g((Gme,qw)=>{"use strict";var Fme=tu(),bf=C(),WS=W(),KS=G(),bQ=require("uuid"),{handleHDBError:ru,hdb_errors:yQ}=re(),{HDB_ERROR_MSGS:nu,HTTP_STATUS_CODES:su}=yQ;qw.exports=IQ;function IQ(e,t,r){for(let s=0;s<t.length;s++)wQ(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];CQ(i,r,e.operation)}}a(IQ,"processRows");function wQ(e){if(Buffer.byteLength(String(e))>bf.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ru(new Error,nu.ATTR_NAME_LENGTH_ERR(e),su.BAD_REQUEST,void 0,void 0,!0);if(WS.isEmptyOrZeroLength(e)||WS.isEmpty(e.trim()))throw ru(new Error,nu.ATTR_NAME_NULLISH_ERR,su.BAD_REQUEST,void 0,void 0,!0)}a(wQ,"validateAttribute");function CQ(e,t,r){if(!e.hasOwnProperty(t)||WS.isEmptyOrZeroLength(e[t])){if(r===bf.OPERATIONS_ENUM.INSERT||r===bf.OPERATIONS_ENUM.UPSERT){e[t]=bQ.v4();return}throw KS.error("Update transaction aborted due to record with no hash value:",e),ru(new Error,nu.RECORD_MISSING_HASH_ERR,su.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>bf.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw KS.error(e),ru(new Error,nu.HASH_VAL_LENGTH_ERR,su.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw KS.error(e),ru(new Error,nu.INVALID_FORWARD_SLASH_IN_HASH_ERR,su.BAD_REQUEST,void 0,void 0,!0)}a(CQ,"validateHash")});var yf=g(($me,Fw)=>{"use strict";var xw=W(),LQ=C(),DQ=G(),PQ=Nf(),MQ=Of(),UQ=si(),{SchemaEventMsg:vQ}=zn(),BQ="already exists in";Fw.exports=HQ;async function HQ(e,t,r){if(xw.isEmptyOrZeroLength(r))return r;let n=[];xw.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 qQ(e,t.schema,t.name,i)})),s}a(HQ,"lmdbCheckForNewAttributes");async function qQ(e,t,r,n){let s=new MQ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await xQ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(BQ))DQ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(qQ,"createNewAttribute");async function xQ(e){let t;return t=await PQ(e),UQ.signalSchemaChange(new vQ(process.pid,LQ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(xQ,"createAttribute")});var lc=g((Yme,Gw)=>{"use strict";var QS=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}};Gw.exports=QS});var $w=g((Wme,kw)=>{"use strict";var FQ=lc(),GQ=C().OPERATIONS_ENUM,jS=class extends FQ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(GQ.INSERT,r,n,s,i),this.records=t}};kw.exports=jS});var Yw=g((jme,Vw)=>{"use strict";var kQ=lc(),$Q=C().OPERATIONS_ENUM,zS=class extends kQ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super($Q.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};Vw.exports=zS});var Ww=g((Jme,Kw)=>{"use strict";var VQ=lc(),YQ=C().OPERATIONS_ENUM,JS=class extends VQ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(YQ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};Kw.exports=JS});var jw=g((Zme,Qw)=>{"use strict";var KQ=lc(),WQ=C().OPERATIONS_ENUM,XS=class extends KQ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(WQ.DELETE,n,s,t,i),this.original_records=r}};Qw.exports=XS});var ou=g((rpe,Zw)=>{"use strict";var tpe=require("path"),zw=$e(),QQ=$w(),jQ=Yw(),zQ=Ww(),JQ=jw(),uc=ut(),Jw=W(),{CONFIG_PARAMS:XQ}=C(),Xw=J();Xw.initSync();var If=C().OPERATIONS_ENUM,{getTransactionAuditStorePath:ZQ}=Qe();Zw.exports=ej;async function ej(e,t){if(Xw.get(XQ.LOGGING_AUDITLOG)===!1)return;let r=ZQ(e.schema,e.table),n=await zw.openEnvironment(r,e.table,!0),s=tj(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){zw.initializeDBIs(n,uc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,uc.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[uc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[uc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),Jw.isEmpty(s.user_name)||n.dbis[uc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[uc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(ej,"writeTransaction");function tj(e,t){let r=Jw.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===If.INSERT)return new QQ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===If.UPDATE)return new jQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===If.UPSERT)return new zQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===If.DELETE)return new JQ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(tj,"createTransactionObject")});var ZS=g((ipe,eC)=>{"use strict";var rj=eu(),spe=tu(),au=C(),nj=iu(),sj=ko().insertRecords,ij=$e(),oj=G(),aj=yf(),{getSchemaPath:cj}=Qe(),lj=ou();eC.exports=uj;async function uj(e){try{let{schema_table:t,attributes:r}=rj(e);nj(e,r,t.hash_attribute),e.schema!==au.SYSTEM_SCHEMA_NAME&&(r.includes(au.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(au.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(au.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(au.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await aj(e.hdb_auth_header,t,r),s=cj(e.schema,e.table),i=await ij.openEnvironment(s,e.table),o=await sj(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await lj(e,o)}catch(c){oj.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(uj,"lmdbCreateRecords")});var nC=g((ape,rC)=>{"use strict";var tC=C(),_j=ZS(),dj=tu(),fj=require("fs-extra"),{getSchemaPath:Ej}=Qe();rC.exports=hj;async function hj(e){let t=[{name:e.schema,createddate:Date.now()}],r=new dj(tC.SYSTEM_SCHEMA_NAME,tC.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await _j(r),await fj.mkdirp(Ej(e.schema))}a(hj,"lmdbCreateSchema")});var iC=g((lpe,sC)=>{"use strict";var eT=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}};sC.exports=eT});var lC=g((Epe,cC)=>{"use strict";var oC=$e(),tT=dr(),rT=Yr().LMDB_ERRORS_ENUM,mj=ut(),aC=G(),_pe=W(),pj=require("lmdb"),Sj=iC(),Tj=C(),{OVERFLOW_MARKER:dpe,MAX_SEARCH_KEY_LENGTH:fpe}=mj,gj=Tj.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Rj(e,t,r,n){if(tT.validateEnv(e),t===void 0)throw new Error(rT.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(rT.IDS_REQUIRED):new Error(rT.IDS_MUST_BE_ITERABLE);try{let s=oC.listDBIs(e);oC.initializeDBIs(e,t,s);let i=new Sj,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[gj]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,pj.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let O=s[S];if(!h.hasOwnProperty(O)||O===t)continue;let T=e.dbis[O],R=h[O];if(R!=null)try{let B=tT.getIndexedValues(R);if(B)for(let H=0,v=B.length;H<v;H++)T.remove(B[H],o)}catch{aC.warn(`cannot delete from attribute: ${O}, ${R}:${o}`)}}});c.push(p),l.push(o),i.original_records.push(h)}catch(h){aC.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=tT.getNextMonotonicTime(),i}catch(s){throw s}}a(Rj,"deleteRecords");cC.exports={deleteRecords:Rj}});var cu=g((mpe,_C)=>{"use strict";var _c=W(),Aj=lC(),Oj=$e(),{getSchemaPath:Nj}=Qe(),bj=ou(),yj=G();_C.exports=Ij;async function Ij(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(_c.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(_c.isEmptyOrZeroLength(e.hash_values)&&!_c.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];_c.isEmpty(l)||e.hash_values.push(l)}}if(_c.isEmptyOrZeroLength(e.hash_values))return uC([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(_c.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=Nj(e.schema,e.table),i=await Oj.openEnvironment(s,e.table),o=await Aj.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await bj(e,o)}catch(c){yj.error(`unable to write transaction due to ${c.message}`)}return uC(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(Ij,"lmdbDeleteRecords");function uC(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(uC,"createDeleteResponse")});var sT=g((Tpe,dC)=>{"use strict";var wj=C(),Spe=dr();function nT(e,t){let r=Object.create(null);if(t.length===1&&wj.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(nT,"parseRow");function Cj(e,t,r,n){let s=nT(r,e);n.push(s)}a(Cj,"searchAll");function Lj(e,t,r,n){let s=nT(r,e);n[t]=s}a(Lj,"searchAllToMap");function Dj(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Dj,"iterateDBI");function Vo(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(Vo,"pushResults");function Pj(e,t,r,n,s,i){t.toString().endsWith(e)&&Vo(t,r,n,s,i)}a(Pj,"endsWith");function Mj(e,t,r,n,s,i){t.toString().includes(e)&&Vo(t,r,n,s,i)}a(Mj,"contains");function Uj(e,t,r,n,s,i){t>e&&Vo(t,r,n,s,i)}a(Uj,"greaterThanCompare");function vj(e,t,r,n,s,i){t>=e&&Vo(t,r,n,s,i)}a(vj,"greaterThanEqualCompare");function Bj(e,t,r,n,s,i){t<e&&Vo(t,r,n,s,i)}a(Bj,"lessThanCompare");function Hj(e,t,r,n,s,i){t<=e&&Vo(t,r,n,s,i)}a(Hj,"lessThanEqualCompare");dC.exports={parseRow:nT,searchAll:Cj,searchAllToMap:Lj,iterateDBI:Dj,endsWith:Pj,contains:Mj,greaterThanCompare:Uj,greaterThanEqualCompare:vj,lessThanCompare:Bj,lessThanEqualCompare:Hj,pushResults:Vo}});var dc=g((Npe,TC)=>{"use strict";var Yi=$e(),Rpe=G(),zr=dr(),wf=ut(),_t=Yr().LMDB_ERRORS_ENUM,Ape=W(),qj=C(),Cf=sT(),{parseRow:xj}=Cf,Ope=require("lmdb"),{OVERFLOW_MARKER:fC,MAX_SEARCH_KEY_LENGTH:Fj}=wf;function EC(e,t,r,n=!1,s=void 0,i=void 0){return Yo(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(EC,"iterateFullIndex");function lu(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return Yo(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(lu,"iterateRangeBetween");function Yo(e,t,r,n){let s=e.database||e,i=Yi.openDBI(s,r);i[wf.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Yi.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(Yo,"setupTransaction");function hC(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(fC)){if(!s)if(r)s=Yi.openDBI(e,r);else{let l=Yi.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=Yi.openDBI(e,l[_]),!s[wf.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(hC,"getOverflowCheck");function Gj(e,t,r,n=!1,s=void 0,i=void 0){if(zr.validateEnv(e),t===void 0)throw new Error(_t.HASH_ATTRIBUTE_REQUIRED);return Yo(e,t,t,(o,c,l)=>(Lf(r),r=uu(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>xj(_.value,r))))}a(Gj,"searchAll");function kj(e,t,r,n=!1,s=void 0,i=void 0){if(zr.validateEnv(e),t===void 0)throw new Error(_t.HASH_ATTRIBUTE_REQUIRED);Lf(r),r=uu(e.database||e,r);let o=new Map;for(let{key:c,value:l}of EC(e,t,t,n,s,i))o.set(c,Cf.parseRow(l,r));return o}a(kj,"searchAllToMap");function $j(e,t,r=!1,n=void 0,s=void 0){if(zr.validateEnv(e),t===void 0)throw new Error(_t.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=EC(e,void 0,t,r,n,s),c=o.transaction,l=hC(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($j,"iterateDBI");function Vj(e,t){if(zr.validateEnv(e),t===void 0)throw new Error(_t.HASH_ATTRIBUTE_REQUIRED);return Yi.statDBI(e,t).entryCount}a(Vj,"countAll");function Yj(e,t,r,n,s=!1,i=void 0,o=void 0){return Ki(e,r,n),Yo(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(Yj,"equals");function Kj(e,t,r){return Ki(e,t,r),Yi.openDBI(e,t).getValuesCount(r)}a(Kj,"count");function Wj(e,t,r,n,s=!1,i=void 0,o=void 0){return Ki(e,r,n),Yo(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(Wj,"startsWith");function Qj(e,t,r,n,s=!1,i=void 0,o=void 0){return mC(e,t,r,n,s,i,o,!0)}a(Qj,"endsWith");function mC(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Ki(e,r,n),Yo(e,null,r,(l,_,u,d)=>{let f=hC(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(fC)?_.getValues(E,{transaction:l}).map(p=>{let S=f(E,p);if(c?S.endsWith(n):S.includes(n))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(n):h.includes(n))?_[wf.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:l}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(mC,"contains");function jj(e,t,r,n,s=!1,i=void 0,o=void 0){Ki(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),lu(e,t,r,n,l,s,i,o,!0,!1)}a(jj,"greaterThan");function zj(e,t,r,n,s=!1,i=void 0,o=void 0){Ki(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),lu(e,t,r,n,l,s,i,o,!1,!1)}a(zj,"greaterThanEqual");function Jj(e,t,r,n,s=!1,i=void 0,o=void 0){Ki(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),lu(e,t,r,l,n,s,i,o,!1,!0)}a(Jj,"lessThan");function Xj(e,t,r,n,s=!1,i=void 0,o=void 0){Ki(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),lu(e,t,r,l,n,s,i,o,!1,!1)}a(Xj,"lessThanEqual");function Zj(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(zr.validateEnv(e),r===void 0)throw new Error(_t.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(_t.START_VALUE_REQUIRED);if(s===void 0)throw new Error(_t.END_VALUE_REQUIRED);if(n=zr.convertKeyValueToWrite(n),s=zr.convertKeyValueToWrite(s),n>s)throw new Error(_t.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return lu(e,t,r,n,s,i,o,c)}a(Zj,"between");function ez(e,t,r,n){zr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(_t.HASH_ATTRIBUTE_REQUIRED);if(Lf(r),r=uu(s,r),n===void 0)throw new Error(_t.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Cf.parseRow(c,r)),o}a(ez,"searchByHash");function tz(e,t,r){zr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(_t.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(_t.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(tz,"checkHashExists");function rz(e,t,r,n,s=[]){return SC(e,t,r,n,s),pC(e,t,r,n,s).map(i=>i[1])}a(rz,"batchSearchByHash");function nz(e,t,r,n,s=[]){SC(e,t,r,n,s);let i=new Map;for(let[o,c]of pC(e,t,r,n,s))i.set(o,c);return i}a(nz,"batchSearchByHashToMap");function pC(e,t,r,n,s=[]){return Yo(e,t,t,(i,o,c)=>{r=uu(c,r);let l=r.length<3;return n.map(_=>{let u=c.dbis[t].get(_,{transaction:i,lazy:l});if(u)return[_,Cf.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(pC,"batchHashSearch");function SC(e,t,r,n,s){if(zr.validateEnv(e),t===void 0)throw new Error(_t.HASH_ATTRIBUTE_REQUIRED);if(Lf(r),n==null)throw new Error(_t.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(_t.IDS_MUST_BE_ITERABLE)}a(SC,"initializeBatchSearchByHash");function Lf(e){if(!Array.isArray(e))throw e===void 0?new Error(_t.FETCH_ATTRIBUTES_REQUIRED):new Error(_t.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Lf,"validateFetchAttributes");function Ki(e,t,r){if(zr.validateEnv(e),t===void 0)throw new Error(_t.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(_t.SEARCH_VALUE_REQUIRED);if(r?.length>Fj)throw new Error(_t.SEARCH_VALUE_TOO_LARGE)}a(Ki,"validateComparisonFunctions");function uu(e,t){return t.length===1&&qj.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Yi.listDBIs(e)),t}a(uu,"setGetWholeRowAttributes");TC.exports={searchAll:Gj,searchAllToMap:kj,count:Kj,countAll:Vj,equals:Yj,startsWith:Wj,endsWith:Qj,contains:mC,searchByHash:ez,setGetWholeRowAttributes:uu,batchSearchByHash:rz,batchSearchByHashToMap:nz,checkHashExists:tz,iterateDBI:$j,greaterThan:jj,greaterThanEqual:zj,lessThan:Jj,lessThanEqual:Xj,between:Zj}});var fc=g((ype,NC)=>{var gC=require("lodash"),RC=tt(),Se=require("joi"),sz=W(),{hdb_schema_table:_u,checkValidTable:AC,hdb_table:OC,hdb_database:Df}=As(),{handleHDBError:iz,hdb_errors:oz}=re(),{getDatabases:az}=(Ne(),ne(xe)),{HTTP_STATUS_CODES:cz}=oz,lz=Se.object({database:Df,schema:Df,table:OC,search_attribute:_u,search_value:Se.any().required(),get_attributes:Se.array().min(1).items(Se.alternatives(_u,Se.object())).optional(),desc:Se.bool(),limit:Se.number().integer().min(1),offset:Se.number().integer().min(0)}),uz=Se.object({database:Df,schema:Df,table:OC,operator:Se.string().valid("and","or").default("and").lowercase(),offset:Se.number().integer().min(0),limit:Se.number().integer().min(1),get_attributes:Se.array().min(1).items(Se.alternatives(_u,Se.object())).optional(),sort:Se.object({attribute:Se.alternatives(_u,Se.array().min(1)),descending:Se.bool().optional()}).optional(),conditions:Se.array().min(1).items(Se.alternatives(Se.object({operator:Se.string().valid("and","or").default("and").lowercase(),conditions:Se.array()}),Se.object({search_attribute:Se.alternatives(_u,Se.array().min(1)),search_type:Se.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:Se.when("search_type",{switch:[{is:"equals",then:Se.any()},{is:"between",then:Se.array().items(Se.alternatives([Se.string(),Se.number()])).length(2)}],otherwise:Se.alternatives(Se.string(),Se.number())}).required()}))).required()});NC.exports=function(e,t){let r=null;switch(t){case"value":r=RC.validateBySchema(e,lz);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(AC("database",e.schema)),i(AC("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=RC.validateBySchema(e,uz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=sz.checkGlobalSchemaTable(e.schema,e.table);if(s)return iz(new Error,s,cz.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 _=gC.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!Array.isArray(u)&&!gC.some(o,d=>d===u||d.attribute===u||d.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var iT=g((wpe,bC)=>{"use strict";var _z=$e(),dz=fc(),{getSchemaPath:fz}=Qe();bC.exports=Ez;function Ez(e){let t=dz(e,"hashes");if(t)throw t;let r=fz(e.schema,e.table);return _z.openEnvironment(r,e.table)}a(Ez,"initialize")});var oT=g((Lpe,yC)=>{"use strict";var hz=dc(),mz=iT();yC.exports=pz;async function pz(e){let t=await mz(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return hz.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(pz,"lmdbGetDataByHash")});var Ec=g((Ppe,IC)=>{"use strict";var aT=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};IC.exports=aT});var CC=g((vpe,wC)=>{"use strict";var Upe=Ec(),Sz=dc(),Tz=iT();wC.exports=gz;async function gz(e){let t=await Tz(e),r=global.hdb_schema[e.schema][e.table];return Sz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(gz,"lmdbSearchByHash")});var Jn=g((Hpe,LC)=>{"use strict";var cT=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}};LC.exports=cT});var Pf=g((xpe,BC)=>{"use strict";var Zt=dc(),Rz=$e(),Az=W(),Te=ut(),Ko=C(),Oz=ti(),DC=Yr().LMDB_ERRORS_ENUM,{getSchemaPath:Nz}=Qe(),ii=Ko.SEARCH_WILDCARDS;async function bz(e,t,r){let n;e.schema===Ko.SYSTEM_SCHEMA_NAME?n=Oz[e.table]:n=global.hdb_schema[e.schema][e.table];let s=vC(e,n.hash_attribute,r,t);return MC(e,s,n.hash_attribute,r)}a(bz,"prepSearch");async function MC(e,t,r,n){let s=Nz(e.schema,e.table),i=await Rz.openEnvironment(s,e.table),o=UC(i,e,t,r),c=o.transaction||i;if([Te.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Te.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Te.SEARCH_TYPES.SEARCH_ALL,Te.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(yz(e,r)===!1){let u=e.search_attribute;if(u===r)return n?PC(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[u]:f.key}),"toObject");return n?PC(o,d):o.map(d)}let _=e.search_attribute===r?o.map(u=>u.key):o.map(u=>u.value);return n===!0?Zt.batchSearchByHashToMap(c,r,e.get_attributes,_):Zt.batchSearchByHash(c,r,e.get_attributes,_)}a(MC,"executeSearch");function UC(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 Te.SEARCH_TYPES.EQUALS:s=Zt.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case Te.SEARCH_TYPES.CONTAINS:s=Zt.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case Te.SEARCH_TYPES.ENDS_WITH:case Te.SEARCH_TYPES._ENDS_WITH:s=Zt.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Te.SEARCH_TYPES.STARTS_WITH:case Te.SEARCH_TYPES._STARTS_WITH:s=Zt.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Te.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Zt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Te.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Zt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Te.SEARCH_TYPES.SEARCH_ALL:return Zt.searchAll(e,n,t.get_attributes,o,c,l);case Te.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Zt.searchAllToMap(e,n,t.get_attributes,o,c,l);case Te.SEARCH_TYPES.BETWEEN:s=Zt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case Te.SEARCH_TYPES.GREATER_THAN:case Te.SEARCH_TYPES._GREATER_THAN:s=Zt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Te.SEARCH_TYPES.GREATER_THAN_EQUAL:case Te.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Zt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case Te.SEARCH_TYPES.LESS_THAN:case Te.SEARCH_TYPES._LESS_THAN:s=Zt.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Te.SEARCH_TYPES.LESS_THAN_EQUAL:case Te.SEARCH_TYPES._LESS_THAN_EQUAL:s=Zt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(UC,"searchByType");function PC(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(PC,"createMapFromIterable");function yz(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(yz,"checkToFetchMore");function vC(e,t,r,n){if(Az.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),ii.indexOf(s)>-1)return r===!0?Te.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Te.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ii[0])<0&&s.indexOf(ii[1])<0)return c===!0?r===!0?Te.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Te.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Te.SEARCH_TYPES.EQUALS;if(ii.indexOf(i)>=0&&ii.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Te.SEARCH_TYPES.CONTAINS;if(ii.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Te.SEARCH_TYPES.ENDS_WITH;if(ii.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Te.SEARCH_TYPES.STARTS_WITH;if(s.includes(ii[0])||s.includes(ii[1]))return Te.SEARCH_TYPES.EQUALS;throw new Error(DC.UNKNOWN_SEARCH_TYPE)}else switch(n){case Ko.VALUE_SEARCH_COMPARATORS.BETWEEN:return Te.SEARCH_TYPES.BETWEEN;case Ko.VALUE_SEARCH_COMPARATORS.GREATER:return Te.SEARCH_TYPES.GREATER_THAN;case Ko.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Te.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ko.VALUE_SEARCH_COMPARATORS.LESS:return Te.SEARCH_TYPES.LESS_THAN;case Ko.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Te.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(DC.UNKNOWN_SEARCH_TYPE)}}a(vC,"createSearchTypeFromSearchObject");BC.exports={executeSearch:MC,createSearchTypeFromSearchObject:vC,prepSearch:bz,searchByType:UC}});var qC=g((kpe,HC)=>{"use strict";var Gpe=Jn(),Iz=fc(),wz=W(),Cz=C(),Lz=Pf();HC.exports=Dz;function Dz(e,t){if(!wz.isEmpty(t)&&Cz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Iz(e,"value");if(n)throw n;return Lz.prepSearch(e,t,!0)}a(Dz,"lmdbGetDataByValue")});var du=g((Ype,xC)=>{"use strict";var Vpe=Jn(),Pz=fc(),Mz=W(),Uz=C(),vz=Pf();xC.exports=Bz;async function Bz(e,t){if(!Mz.isEmpty(t)&&Uz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Pz(e,"value");if(n)throw n;return vz.prepSearch(e,t,!1)}a(Bz,"lmdbSearchByValue")});var GC=g((Qpe,FC)=>{"use strict";var Wpe=ut(),lT=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},uT=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},_T=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};FC.exports={SearchByConditionsObject:lT,SearchCondition:uT,SortAttribute:_T}});var KC=g((Xpe,YC)=>{"use strict";var zpe=GC().SearchByConditionsObject,Hz=Jn(),qz=fc(),dT=dc(),Mf=ut(),{Resource:Jpe}=(Kn(),ne(_S)),VC=Pf(),xz=sT(),Fz=require("lodash"),{getSchemaPath:Gz}=Qe(),kC=$e(),{handleHDBError:kz,hdb_errors:$z}=re(),{HTTP_STATUS_CODES:Vz}=$z,Yz=1e8;YC.exports=Kz;async function Kz(e){let t=qz(e,"conditions");if(t)throw kz(t,t.message,Vz.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=Gz(e.schema,e.table),n=await kC.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)kC.openDBI(n,_.search_attribute);let i=Fz.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===Mf.SEARCH_TYPES.EQUALS?_.estimated_count=dT.count(n,_.search_attribute,_.search_value):u===Mf.SEARCH_TYPES.CONTAINS||u===Mf.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=Yz}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await $C(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(VC.filterByType),d=u.length,f=dT.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=>xz.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await $C(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=dT.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(Kz,"lmdbSearchByConditions");async function $C(e,t,r,n){let s=new Hz(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===Mf.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,VC.searchByType(e,s,i,n).map(o=>o.value)}a($C,"executeConditionSearch")});var fu=g((eSe,WC)=>{"use strict";var Wz=C().OPERATIONS_ENUM,fT=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=Wz.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};WC.exports=fT});var ET=g((rSe,tL)=>{"use strict";var JC=Jn(),XC=fu(),ZC=du(),eL=cu(),mr=C(),QC=W(),jC=$e(),{getTransactionAuditStorePath:Qz,getSchemaPath:jz}=Qe(),zC=G();tL.exports=zz;async function zz(e){try{if(QC.isEmpty(global.hdb_schema[e.schema])||QC.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Jz(e),await Xz(e);let t=jz(e.schema,e.table);try{await jC.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")zC.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Qz(e.schema,e.table);await jC.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")zC.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(zz,"lmdbDropTable");async function Jz(e){let t=new JC(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await ZC(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 XC(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await eL(s)}a(Jz,"deleteAttributesFromSystem");async function Xz(e){let t=new JC(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await ZC(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 XC(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await eL(s)}catch(i){throw i}}a(Xz,"dropTableFromSystem")});var nL=g((sSe,rL)=>{"use strict";var Zz=require("fs-extra"),eJ=Jn(),tJ=Ec(),rJ=fu(),nJ=ET(),sJ=cu(),iJ=oT(),oJ=du(),oi=C(),{getSchemaPath:aJ}=Qe(),{handleHDBError:cJ,hdb_errors:lJ}=re(),{HDB_ERROR_MSGS:uJ,HTTP_STATUS_CODES:_J}=lJ;rL.exports=dJ;async function dJ(e){let t;try{t=await fJ(e.schema);let r=new eJ(oi.SYSTEM_SCHEMA_NAME,oi.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await oJ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await nJ(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new rJ(oi.SYSTEM_SCHEMA_NAME,oi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await sJ(s);let i=aJ(t);await Zz.remove(i)}catch(r){throw r}}a(dJ,"lmdbDropSchema");async function fJ(e){let t=new tJ(oi.SYSTEM_SCHEMA_NAME,oi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await iJ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw cJ(new Error,uJ.SCHEMA_NOT_FOUND(e),_J.NOT_FOUND,void 0,void 0,!0);return n}a(fJ,"validateDropSchema")});var Eu=g((oSe,sL)=>{"use strict";var hT=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};sL.exports=hT});var pT=g((lSe,iL)=>{"use strict";var EJ=require("fs-extra"),Uf=$e(),{getTransactionAuditStorePath:hJ}=Qe(),mT=ut(),cSe=Eu();iL.exports=mJ;async function mJ(e){let t;try{let r=hJ(e.schema,e.table);await EJ.mkdirp(r),t=await Uf.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{Uf.createDBI(t,mT.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Uf.createDBI(t,mT.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Uf.createDBI(t,mT.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(mJ,"createTransactionsAuditEnvironment")});var lL=g((_Se,cL)=>{"use strict";var ST=C(),oL=$e(),pJ=ko(),{getSystemSchemaPath:SJ,getSchemaPath:TJ}=Qe(),gJ=ti(),RJ=Nf(),TT=Of(),AJ=G(),OJ=pT(),RT=gJ.hdb_table,aL=[];for(let e=0;e<RT.attributes.length;e++)aL.push(RT.attributes[e].attribute);cL.exports=NJ;async function NJ(e,t){let r=TJ(t.schema,t.table),n=new TT(t.schema,t.table,ST.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new TT(t.schema,t.table,ST.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new TT(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await oL.createEnvironment(r,t.table),e!==void 0){let o=await oL.openEnvironment(SJ(),ST.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await pJ.insertRecords(o,RT.hash_attribute,aL,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await gT(n),await gT(s),await gT(i)}await OJ(t)}catch(o){throw o}}a(NJ,"lmdbCreateTable");async function gT(e){try{await RJ(e)}catch(t){AJ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(gT,"createAttribute")});var _L=g((fSe,uL)=>{"use strict";var bJ=eu(),yJ=iu(),IJ=yf(),hu=C(),wJ=ko().updateRecords,CJ=$e(),{getSchemaPath:LJ}=Qe(),DJ=ou(),PJ=G();uL.exports=MJ;async function MJ(e){try{let{schema_table:t,attributes:r}=bJ(e);yJ(e,r,t.hash_attribute),e.schema!==hu.SYSTEM_SCHEMA_NAME&&(r.includes(hu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(hu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(hu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(hu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await IJ(e.hdb_auth_header,t,r),s=LJ(e.schema,e.table),i=await CJ.openEnvironment(s,e.table),o=await wJ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await DJ(e,o)}catch(c){PJ.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(MJ,"lmdbUpdateRecords")});var fL=g((hSe,dL)=>{"use strict";var UJ=C().OPERATIONS_ENUM,AT=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=UJ.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};dL.exports=AT});var hL=g((SSe,EL)=>{"use strict";var pSe=fL(),vJ=eu(),BJ=iu(),HJ=yf(),mu=C(),qJ=ko().upsertRecords,xJ=$e(),{getSchemaPath:FJ}=Qe(),GJ=ou(),kJ=G(),{handleHDBError:$J,hdb_errors:VJ}=re();EL.exports=YJ;async function YJ(e){let t;try{t=vJ(e)}catch(l){throw $J(l,l.message,VJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;BJ(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 HJ(e.hdb_auth_header,r,n),i=FJ(e.schema,e.table),o=await xJ.openEnvironment(i,e.table),c=await qJ(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await GJ(e,c)}catch(l){kJ.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(YJ,"lmdbUpsertRecords")});var pL=g((gSe,mL)=>{"use strict";var OT=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};mL.exports=OT});var TL=g((ASe,SL)=>{"use strict";var NT=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}};SL.exports=NT});var AL=g((bSe,RL)=>{"use strict";var bT=$e(),{getTransactionAuditStorePath:KJ}=Qe(),NSe=pL(),pu=ut(),WJ=W(),gL=TL(),QJ=require("util").promisify,jJ=QJ(setTimeout),zJ=1e4,JJ=100;RL.exports=XJ;async function XJ(e){let t=KJ(e.schema,e.table),r=await bT.openEnvironment(t,e.table,!0),n=bT.listDBIs(r);bT.initializeDBIs(r,pu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new gL;do s=await ZJ(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 jJ(JJ);while(s.transactions_deleted>0);return i}a(XJ,"deleteAuditLogsBefore");async function ZJ(e,t){let r=new gL;try{let n=e.dbis[pu.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[pu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];WJ.isEmpty(c)||(s=e.dbis[pu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[pu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>zJ)break}return await s,r}catch(n){throw n}}a(ZJ,"deleteTransactions")});var NL=g((ISe,OL)=>{"use strict";var yT=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};OL.exports=yT});var yL=g((LSe,bL)=>{"use strict";var e2=Jn(),t2=fu(),CSe=NL(),Ns=C(),r2=W(),IT=$e(),n2=ti(),s2=du(),i2=cu(),{getSchemaPath:o2}=Qe();bL.exports=a2;async function a2(e,t=!0){let r;e.schema===Ns.SYSTEM_SCHEMA_NAME?r=n2[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await l2(e),s=o2(e.schema,e.table),i=await IT.openEnvironment(s,e.table);return t===!0&&await c2(e,i,r.hash_attribute),IT.dropDBI(i,e.attribute),n}a(a2,"lmdbDropAttribute");async function c2(e,t,r){let n=IT.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(c2,"removeAttributeFromAllObjects");async function l2(e){let t=new e2(Ns.SYSTEM_SCHEMA_NAME,Ns.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await s2(t)).filter(o=>o[Ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(r2.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new t2(Ns.SYSTEM_SCHEMA_NAME,Ns.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return i2(i)}a(l2,"dropAttributeFromSystem")});var PL=g((MSe,DL)=>{"use strict";var wT=$e(),hc=ut(),PSe=dr(),CT=C(),IL=W(),{getTransactionAuditStorePath:u2}=Qe(),_2=dc(),vf=lc(),d2=G();DL.exports=f2;async function f2(e){let t=u2(e.schema,e.table),r=await wT.openEnvironment(t,e.table,!0),n=wT.listDBIs(r);wT.initializeDBIs(r,hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case CT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return wL(r,e.search_values);case CT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,h2(r,e.search_values,s);case CT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return E2(r,e.search_values);default:return wL(r)}}a(f2,"readAuditLog");function wL(e,t=[0,Date.now()]){IL.isEmpty(t[0])&&(t[0]=0),IL.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[hc.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 vf,s))}a(wL,"searchTransactionsByTimestamp");function E2(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[hc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,LL(e,i))}return Object.fromEntries(r)}a(E2,"searchTransactionsByUsername");function h2(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=_2.equals(e,hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,hc.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=LL(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);CL(l,"records",r,u,o),CL(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(h2,"searchTransactionsByHashValues");function CL(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 vf(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new vf(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(l,[_])}}}a(CL,"loopRecords");function LL(e,t){let r=[];try{let n=e.dbis[hc.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 vf,i);r.push(o)}}catch(i){d2.warn(i)}return r}catch(n){throw n}}a(LL,"batchSearchTransactions")});var UL=g((HSe,ML)=>{"use strict";var{getSchemaPath:vSe}=Qe(),BSe=$e(),{database:m2}=(Ne(),ne(xe));ML.exports={writeTransaction:p2};async function p2(e,t,r){return m2({database:e,table:t}).transaction(r)}a(p2,"writeTransaction")});var qL=g((xSe,HL)=>{"use strict";var{getSchemaPath:vL}=Qe(),BL=$e();HL.exports={flush:S2,resetReadTxn:T2};async function S2(e,t){return(await BL.openEnvironment(vL(e,t),t.toString())).flushed}a(S2,"flush");async function T2(e,t){try{(await BL.openEnvironment(vL(e,t),t.toString())).resetReadTxn()}catch{}}a(T2,"resetReadTxn")});var kL=g((GSe,GL)=>{"use strict";var{Readable:g2}=require("stream"),{getDatabases:R2}=(Ne(),ne(xe)),{readSync:A2,openSync:O2,createReadStream:xL}=require("fs"),{open:N2}=require("lmdb"),FL=df(),b2=Ef(),{AUDIT_STORE_OPTIONS:y2}=(Bo(),ne(aI)),{INTERNAL_DBIS_NAME:I2,AUDIT_STORE_NAME:w2}=ut();GL.exports=L2;var LT=32768,C2=100;async function L2(e){let t=e.database||e.schema||"data",r=R2()[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=N2({noSync:!0,maxDbs:b2.MAX_DBS}),f,E=d.openDB(I2,new FL(!1)),h=u.useReadTransaction(),p=0,S=a(async function(T,R){R.encoding="binary",R.encoder=void 0;let B=d.openDB(T,R),H=u.openDB(T,R);for(let{key:v,version:P,value:V}of H.getRange({transaction:h,versions:H.useVersions}))f=B.put(v,V,P),p++%C2===0&&(await new Promise(Y=>setTimeout(Y,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:T,value:R}of u.getRange({transaction:h,start:!1}))if(s.some(B=>T.startsWith?.(B+"/"))){E.put(T,R);let[,B]=T.split("/"),H=!B,v=new FL(!H,H);await S(T,v)}e.include_audit&&await S(w2,Object.assign({},y2)),await f;let O=xL(d.path);return O.headers=l(),O.on("close",()=>{h.done(),d.close()}),O}let o=r[Object.keys(r)[0]].primaryStore,c=O2(o.path);return o.transaction(()=>{let _=Buffer.alloc(LT);A2(c,_,0,LT),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=xL(null,{fd:c,start:LT}),f=new g2.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(L2,"getBackup")});var YL=g(($Se,VL)=>{"use strict";var D2=G(),{handleHDBError:P2}=re(),M2=cw(),U2=Nf(),v2=ZS(),B2=nC(),H2=cu(),q2=oT(),x2=CC(),F2=qC(),G2=du(),k2=KC(),$2=nL(),V2=lL(),Y2=_L(),K2=hL(),W2=AL(),Q2=ET(),j2=yL(),z2=PL(),J2=UL(),$L=qL(),X2=kL(),DT=class extends M2{static{a(this,"LMDBBridge")}async searchByConditions(t){return k2(t)}async getDataByHash(t){return await q2(t)}async searchByHash(t){return await x2(t)}async getDataByValue(t,r){return await F2(t,r)}async searchByValue(t){return await G2(t)}async createSchema(t){return await B2(t)}async dropSchema(t){return await $2(t)}async createTable(t,r){return await V2(t,r)}async dropTable(t){return await Q2(t)}async createAttribute(t){return await U2(t)}async createRecords(t){return await v2(t)}async updateRecords(t){return await Y2(t)}async upsertRecords(t){try{return await K2(t)}catch(r){throw P2(r,null,null,D2.ERR,r)}}async deleteRecords(t){return await H2(t)}async dropAttribute(t){return await j2(t)}async deleteAuditLogsBefore(t){return await W2(t)}async readAuditLog(t){return await z2(t)}writeTransaction(t,r,n){return J2.writeTransaction(t,r,n)}flush(t,r){return $L.flush(t,r)}resetReadTxn(t,r){return $L.resetReadTxn(t,r)}getBackup(t){return X2(t)}};VL.exports=DT});var eD={};ke(eD,{ResourceBridge:()=>UT});function vT({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 WL(e,t){let r=bs(e),n=vT(e,r);if(!r)throw new Xn.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&&ef(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 bs(e){let t=e.database||e.schema||e4,r=Zn()[t];if(!r)throw(0,Xn.handleHDBError)(new Error,Z2.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function QL(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*jL(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 zL,Bf,Xn,JL,XL,es,PT,MT,ZL,Z2,e4,t4,r4,KL,UT,tD=ye(()=>{"use strict";zL=q(YL()),Bf=q(fc()),Xn=q(re());Ne();JL=q(eu()),XL=q(iu()),es=q(C()),PT=q(si()),MT=q(zn()),ZL=q(W());Fo();tf();({HDB_ERROR_MSGS:Z2}=Xn.hdb_errors),e4="data",t4=1e4,r4=10,UT=class extends zL.default{static{a(this,"ResourceBridge")}constructor(t){super(t),KL=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,Bf.default)(t,"conditions");if(r)throw(0,Xn.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=bs(t);if(!n)throw new Xn.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:vT(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 Xn.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}]}dt({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await bs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=bs(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){bs(t).dropTable()}createSchema(t){return Su({database:t.schema,table:null}),PT.signalSchemaChange(new MT.SchemaEventMsg(process.pid,es.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await BT(t.schema),PT.signalSchemaChange(new MT.SchemaEventMsg(process.pid,es.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,KL.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,JL.default)(t);(0,XL.default)(t,n,r.primaryKey);let s,i=Zn()[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=ef(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=Zn()[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 QL(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Zn()[t.schema][t.table];if(!r.createdTimeProperty)throw new Xn.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:es.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,ZL.async_set_timeout)(r4),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%t4===0&&await _();return l.length>0&&await _(),s?QL(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Bf.default)(t,"hashes");if(r)throw r;return WL(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of WL(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&es.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,Bf.default)(t,"value");if(n)throw n;let s=bs(t);if(!s)throw new Xn.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===es.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:vT(t,s)})}async getDataByValue(t,r){let n=new Map,s=bs(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){bs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return bs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=bs(t),n={};switch(t.search_type){case es.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 es.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of jL(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return jL(r,t.search_values?.[0],t.search_values?.[1])}}};a(vT,"getSelect");a(WL,"getRecords");a(bs,"getTable");a(QL,"createDeleteResponse");a(jL,"groupRecordsInHistory")});var bn=g((jSe,rD)=>{"use strict";var{ResourceBridge:n4}=(tD(),ne(eD)),s4=J();s4.initSync();var Hf;function i4(){return Hf||(Hf=new n4,Hf)}a(i4,"getBridge");rD.exports=i4()});var oD=g((JSe,iD)=>{"use strict";var nD=require("lodash"),Tu=require("mathjs"),o4=require("jsonata"),sD=W();iD.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?nD.uniqWith(e,nD.isEqual):e,searchJSON:a4,mad:gu.bind(null,Tu.mad),mean:gu.bind(null,Tu.mean),mode:gu.bind(null,Tu.mode),prod:gu.bind(null,Tu.prod),median:gu.bind(null,Tu.median)};function gu(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(gu,"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(sD.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),sD.isEmpty(this.__ala__.res[r])){let n=o4(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(a4,"searchJSON")});var cD=g((ZSe,aD)=>{"use strict";var gt=require("moment"),HT="YYYY-MM-DDTHH:mm:ss.SSSZZ";gt.suppressDeprecationWarnings=!0;aD.exports={current_date:()=>gt().utc().format("YYYY-MM-DD"),current_time:()=>gt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return gt(e).utc().format("YYYY");case"month":return gt(e).utc().format("MM");case"day":return gt(e).utc().format("DD");case"hour":return gt(e).utc().format("HH");case"minute":return gt(e).utc().format("mm");case"second":return gt(e).utc().format("ss");case"millisecond":return gt(e).utc().format("SSS");default:break}},date:e=>gt(e).utc().format(HT),date_format:(e,t)=>gt(e).utc().format(t),date_add:(e,t,r)=>gt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>gt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=gt(e).utc(),s=gt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>gt().utc().valueOf(),get_server_time:()=>gt().format(HT),offset_utc:(e,t)=>gt(e).utc().utcOffset(t).format(HT)}});var dD=g((eTe,_D)=>{"use strict";var c4=require("@turf/area"),l4=require("@turf/length"),u4=require("@turf/circle"),_4=require("@turf/difference"),d4=require("@turf/distance"),f4=require("@turf/boolean-contains"),E4=require("@turf/boolean-equal"),h4=require("@turf/boolean-disjoint"),m4=require("@turf/helpers"),lD=C(),Ae=W(),ai=G();_D.exports={geoArea:p4,geoLength:S4,geoCircle:T4,geoDifference:g4,geoDistance:uD,geoNear:R4,geoContains:A4,geoEqual:O4,geoCrosses:N4,geoConvert:b4};function p4(e){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return c4.default(e)}catch(t){return ai.trace(t,e),NaN}}a(p4,"geoArea");function S4(e,t){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return l4.default(e,{units:t||"kilometers"})}catch(r){return ai.trace(r,e),NaN}}a(S4,"geoLength");function T4(e,t,r){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return u4.default(e,t,{units:r||"kilometers"})}catch(n){return ai.trace(n,e,t),NaN}}a(T4,"geoCircle");function g4(e,t){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return _4(e,t)}catch(r){return ai.trace(r,e,t),NaN}}a(g4,"geoDifference");function uD(e,t,r){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return d4.default(e,t,{units:r||"kilometers"})}catch(n){return ai.trace(n,e,t),NaN}}a(uD,"geoDistance");function R4(e,t,r,n){if(Ae.isEmpty(e)||Ae.isEmpty(t))return!1;if(Ae.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return uD(e,t,n)<=r}catch(s){return ai.trace(s,e,t),!1}}a(R4,"geoNear");function A4(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return f4.default(e,t)}catch(r){return ai.trace(r,e,t),!1}}a(A4,"geoContains");function O4(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return E4.default(e,t)}catch(r){return ai.trace(r,e,t),!1}}a(O4,"geoEqual");function N4(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return!h4.default(e,t)}catch(r){return ai.trace(r,e,t),!1}}a(N4,"geoCrosses");function b4(e,t,r){if(Ae.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ae.isEmpty(t))throw new Error("geo_type is required");if(Ae.isEmpty(lD.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(lD.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ae.autoCastJSON(e)),m4[t](e,r)}a(b4,"geoConvert")});var qf=g((rTe,fD)=>{var Wo=oD(),Jr=cD(),ys=dD();fD.exports=e=>{e.aggr.mad=e.aggr.MAD=Wo.mad,e.aggr.mean=e.aggr.MEAN=Wo.mean,e.aggr.mode=e.aggr.MODE=Wo.mode,e.aggr.prod=e.aggr.PROD=Wo.prod,e.aggr.median=e.aggr.MEDIAN=Wo.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Wo.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Wo.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Jr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Jr.current_time,e.fn.extract=e.fn.EXTRACT=Jr.extract,e.fn.date=e.fn.DATE=Jr.date,e.fn.date_format=e.fn.DATE_FORMAT=Jr.date_format,e.fn.date_add=e.fn.DATE_ADD=Jr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Jr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Jr.date_diff,e.fn.now=e.fn.NOW=Jr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Jr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Jr.get_server_time,e.fn.getdate=e.fn.GETDATE=Jr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Jr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=ys.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=ys.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=ys.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=ys.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=ys.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=ys.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=ys.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=ys.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=ys.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=ys.geoNear}});var pD=g((nTe,mD)=>{"use strict";var Ru=require("lodash"),pr=require("alasql");pr.options.cache=!1;var y4=qf(),ED=require("clone"),xf=require("recursive-iterator"),me=G(),De=W(),mc=bn(),I4=C(),{hdb_errors:w4}=re(),{getDatabases:hD}=(Ne(),ne(xe)),C4="IS NULL",ts="There was a problem performing this search. Please check the logs and try again.";y4(pr);var qT=class{static{a(this,"SQLSearch")}constructor(t,r){if(De.isEmpty(t))throw me.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 me.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw me.error("Error thrown from checkEmptySQL in SQLSearch class method search."),me.error(n),new Error(ts)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw me.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),me.error(n),new Error(ts)}if(Object.keys(this.data).length===0)return me.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw me.error("Error thrown from processJoins in SQLSearch class method search."),me.error(n),new Error(ts)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw me.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),me.error(n),new Error(ts)}try{return t=await this._finalSQL(),t}catch(n){throw me.error("Error thrown from finalSQL in SQLSearch class method search."),me.error(n),new Error(ts)}}_getColumns(){let t=new xf(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(ED(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Ru.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=hD()[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)){me.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new xf(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 pr.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 pr.yy.LogicValue({value:i}):n instanceof pr.yy.StringValue&&De.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new pr.yy.NumValue({value:i}))});if(t){me.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new xf(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(I4.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&&Ru.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 pr.promise(r)}catch(r){throw me.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),me.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(ED(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(C4)>-1&&this.tables.forEach(s=>{let i={columnid:hD()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Ru.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 mc.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 me.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),me.error(u),new Error(ts)}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 mc.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 me.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),me.error(u),new Error(ts)}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 mc.getDataByValue(c,E.operation);if(l)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...n[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]):(this.data[i].__merged_data[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,p))}}catch(u){throw me.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),me.error(u),new Error(ts)}else try{c.search_attribute=s.attribute,c.search_value="*";let u=await mc.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 me.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),me.error(u),new Error(ts)}}}_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 pr.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 pr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new pr.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 pr.yy.FuncValue:new pr.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,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let 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 pr.promise(h,t),t=null}catch(E){throw me.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),me.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=Ru.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,O=p.length;S<O;S++){let T=p[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 xf(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=Ru.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 me.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),me.error(i),new Error(ts)}}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 mc.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 p=s.columns[h],S=E[p]===void 0?null:E[p];this.data[n].__merged_data[f].push(S)}}}}catch(r){throw me.error("Error thrown from getDataByHash function in SQLSearch class method getData."),me.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();me.trace(`Final SQL: ${s}`),n=await pr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),me.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw me.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),me.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 me.error(w4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),me.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 mc.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 me.error("There was an error when processing this SQL operation. Check your logs"),me.error(o),new Error(ts)}}return Object.values(Object.values(this.data)[0].__merged_data)}};mD.exports=qT});var Sr=g((iTe,SD)=>{"use strict";var L4=ow();SD.exports={searchByConditions:P4,searchByHash:M4,searchByValue:U4,search:v4};var xT=bn(),{transformReq:FT}=W(),D4=pD();async function P4(e){return FT(e),xT.searchByConditions(e)}a(P4,"searchByConditions");async function M4(e){FT(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(M4,"searchByHash");async function U4(e){FT(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(U4,"searchByValue");function v4(e,t){try{let r=new L4(e);r.validate(),new D4(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(v4,"search")});var ci=g((aTe,AD)=>{"use strict";var Au=require("crypto"),B4=J(),{CONFIG_PARAMS:H4}=C(),gD="aes-256-cbc",q4=32,x4=16,GT=64,RD=32,F4=GT+RD,TD=new Map;AD.exports={encrypt:G4,decrypt:k4,createNatsTableStreamName:$4};function G4(e){let t=Au.randomBytes(q4),r=Au.randomBytes(x4),n=Au.createCipheriv(gD,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(G4,"encrypt");function k4(e){let t=e.substr(0,GT),r=e.substr(GT,RD),n=e.substr(F4,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Au.createDecipheriv(gD,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(k4,"decrypt");function $4(e,t){let r=B4.get(H4.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=TD.get(r);return n||(n=Au.createHash("md5").update(r).digest("hex"),TD.set(r,n)),n}a($4,"createNatsTableStreamName")});var Wi=g((uTe,ND)=>{"use strict";var lTe=Sr(),Ff=G(),OD=Af(),V4=ci(),Gf=W(),{handleHDBError:kf,hdb_errors:Y4}=re(),{HDB_ERROR_MSGS:$f,HTTP_STATUS_CODES:kT}=Y4,K4=J();K4.initSync();var{getDatabases:$T}=(Ne(),ne(xe));ND.exports={describeAll:W4,describeTable:Vf,describeSchema:Q4};async function W4(e){try{let t=Gf.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=$T(),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 Vf({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 Vf({schema:u,table:f,exact_count:l},h)}E&&c.push(E)}catch(E){Ff.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 Ff.error("Got an error in describeAll"),Ff.error(t),kf(new Error,$f.DESCRIBE_ALL_ERR)}}a(W4,"describeAll");async function Vf(e,t){Gf.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=OD.describe_table(e);if(i)throw i;let c=$T()[r];if(!c)throw kf(new Error,$f.SCHEMA_NOT_FOUND(e.schema),kT.NOT_FOUND);let l=c[n];if(!l)throw kf(new Error,$f.TABLE_NOT_FOUND(e.schema,e.table),kT.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=V4.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){Ff.warn(`unable to stat table dbi due to ${f}`)}return d}a(Vf,"descTable");async function Q4(e){Gf.transformReq(e);let t=OD.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=$T()[n];if(!i)throw kf(new Error,$f.SCHEMA_NOT_FOUND(e.schema),kT.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Gf.isEmpty(l)||l.describe){let _=await Vf({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(Q4,"describeSchema")});var yn=g((ETe,CD)=>{var j4=ti(),{callbackify:yD,promisify:z4}=require("util"),{getDatabases:ID}=(Ne(),ne(xe));CD.exports={setSchemaDataToGlobal:bD,getTableSchema:J4,getSystemSchema:X4,setSchemaDataToGlobalAsync:z4(bD)};var wD=Wi(),dTe=yD(wD.describeAll),fTe=yD(wD.describeTable);function bD(e){global.hdb_schema=ID(),e&&e()}a(bD,"setSchemaDataToGlobal");function J4(e,t,r){let n=ID()[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(J4,"getTableSchema");function X4(){return j4}a(X4,"getSystemSchema")});var Tr=g((mTe,MD)=>{"use strict";var Kf=VS(),Kt=W(),Z4=require("util"),Wf=bn(),e3=yn(),LD=G(),{handleHDBError:Qo,hdb_errors:t3}=re(),{HTTP_STATUS_CODES:jo}=t3,r3=Z4.promisify(e3.getTableSchema),n3="updated",DD="inserted",PD="upserted";MD.exports={insert:i3,update:o3,upsert:a3,validation:s3,flush:c3};async function s3(e){if(Kt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Kt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Kt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await r3(e.schema,e.table),r=Kf(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&&Kt.isEmptyOrZeroLength(c[n]))throw LD.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(!Kt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw LD.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Kt.isEmpty(c[n])&&c[n]!==""&&s.has(Kt.autoCast(c[n]))&&(c.skip=!0),s.add(Kt.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(s3,"validation");async function i3(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Kf(e);if(t)throw Qo(new Error,t.message,jo.BAD_REQUEST);Kt.transformReq(e);let r=Kt.checkSchemaTableExist(e.schema,e.table);if(r)throw Qo(new Error,r,jo.BAD_REQUEST);let n=await Wf.createRecords(e);return Yf(DD,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(i3,"insertData");async function o3(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Kf(e);if(t)throw Qo(new Error,t.message,jo.BAD_REQUEST);Kt.transformReq(e);let r=Kt.checkSchemaTableExist(e.schema,e.table);if(r)throw Qo(new Error,r,jo.BAD_REQUEST);let n=await Wf.updateRecords(e);return Kt.isEmpty(n.existing_rows)?Yf(n3,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Yf(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(o3,"updateData");async function a3(e){if(e.operation!=="upsert")throw Qo(new Error,"invalid operation, must be upsert",jo.INTERNAL_SERVER_ERROR);let t=Kf(e);if(t)throw Qo(new Error,t.message,jo.BAD_REQUEST);Kt.transformReq(e);let r=Kt.checkSchemaTableExist(e.schema,e.table);if(r)throw Qo(new Error,r,jo.BAD_REQUEST);let n=await Wf.upsertRecords(e);return Yf(PD,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(a3,"upsertData");function Yf(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===DD?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===PD?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Yf,"returnObject");function c3(e){return Kt.transformReq(e),Wf.flush(e.schema,e.table)}a(c3,"flush")});var YT=g((STe,BD)=>{var l3=tt(),VT=require("joi"),{hdb_table:u3,hdb_database:UD}=As(),vD={schema:UD,database:UD,table:u3},_3={date:VT.date().iso().required()},d3={timestamp:VT.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};BD.exports=function(e,t){let r=t==="timestamp"?{...vD,...d3}:{...vD,..._3},n=VT.object(r);return l3.validateBySchema(e,n)}});var xD=g((TTe,qD)=>{var f3=tt(),KT=require("joi"),{hdb_table:E3,hdb_database:HD}=As(),h3=KT.object({schema:HD,database:HD,table:E3,hash_values:KT.array().required(),ids:KT.array()});qD.exports=function(e){return f3.validateBySchema(e,h3)}});var zT=g((gTe,FD)=>{"use strict";var WT=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}},QT=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}},jT=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};FD.exports={InsertObject:WT,NoSQLSeachObject:QT,DeleteResponseObject:jT}});var Xo=g((ATe,YD)=>{"use strict";var kD=YT(),m3=xD(),zo=W(),GD=require("moment"),$D=G(),{promisify:p3,callbackify:S3}=require("util"),Jo=C(),T3=yn(),JT=p3(T3.getTableSchema),XT=bn(),{DeleteResponseObject:g3}=zT(),{handleHDBError:Qi,hdb_errors:R3}=re(),{HDB_ERROR_MSGS:Qf,HTTP_STATUS_CODES:ji}=R3,A3="records successfully deleted",O3=S3(VD);YD.exports={delete:O3,deleteRecord:VD,deleteFilesBefore:N3,deleteAuditLogsBefore:b3};async function N3(e){let t=kD(e,"date");if(t)throw Qi(t,t.message,ji.BAD_REQUEST,void 0,void 0,!0);if(zo.transformReq(e),!GD(e.date,GD.ISO_8601).isValid())throw Qi(new Error,Qf.INVALID_DATE,ji.BAD_REQUEST,Jo.LOG_LEVELS.ERROR,Qf.INVALID_DATE,!0);let n=zo.checkSchemaTableExist(e.schema,e.table);if(n)throw Qi(new Error,n,ji.NOT_FOUND,Jo.LOG_LEVELS.ERROR,n,!0);let s=await XT.deleteRecordsBefore(e);if(await JT(e.schema,e.table),$D.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(N3,"deleteFilesBefore");async function b3(e){let t=kD(e,"timestamp");if(t)throw Qi(t,t.message,ji.BAD_REQUEST,void 0,void 0,!0);if(zo.transformReq(e),isNaN(e.timestamp))throw Qi(new Error,Qf.INVALID_VALUE("Timestamp"),ji.BAD_REQUEST,Jo.LOG_LEVELS.ERROR,Qf.INVALID_VALUE("Timestamp"),!0);let r=zo.checkSchemaTableExist(e.schema,e.table);if(r)throw Qi(new Error,r,ji.NOT_FOUND,Jo.LOG_LEVELS.ERROR,r,!0);let n=await XT.deleteAuditLogsBefore(e);return await JT(e.schema,e.table),$D.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(b3,"deleteAuditLogsBefore");async function VD(e){e.ids&&(e.hash_values=e.ids);let t=m3(e);if(t)throw Qi(t,t.message,ji.BAD_REQUEST,void 0,void 0,!0);zo.transformReq(e);let r=zo.checkSchemaTableExist(e.schema,e.table);if(r)throw Qi(new Error,r,ji.NOT_FOUND,Jo.LOG_LEVELS.ERROR,r,!0);try{await JT(e.schema,e.table);let n=await XT.deleteRecords(e);return zo.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${A3}`),n}catch(n){if(n.message===Jo.SEARCH_NOT_FOUND_MESSAGE){let s=new g3;return s.message=Jo.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(VD,"deleteRecord")});var jf=g((NTe,QD)=>{var y3=require("crypto"),KD=9;function I3(e){let t=C3(KD),r=WD(e+t);return t+r}a(I3,"createHash");function w3(e,t){let r=e?.substr(0,KD),n=r+WD(t+r);return e===n}a(w3,"validateHash");function C3(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(C3,"generateSalt");function WD(e){return y3.createHash("md5").update(e).digest("hex")}a(WD,"md5");QD.exports={hash:I3,validate:w3}});var zD=g((yTe,jD)=>{var ZT=tt(),er={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 L3(e){return er.password.presence=!0,er.username.presence=!0,er.role.presence=!0,er.active.presence=!0,ZT.validateObject(e,er)}a(L3,"addUserValidation");function D3(e){return er.password.presence=!1,er.username.presence=!0,er.role.presence=!1,er.active.presence=!1,ZT.validateObject(e,er)}a(D3,"alterUserValidation");function P3(e){return er.password.presence=!1,er.username.presence=!0,er.role.presence=!1,er.active.presence=!1,ZT.validateObject(e,er)}a(P3,"dropUserValidation");jD.exports={addUserValidation:L3,alterUserValidation:D3,dropUserValidation:P3}});var Je=g((CTe,XD)=>{"use strict";var{platform:wTe}=require("os"),M3="nats-server.zip",eg="nats-server",U3=process.platform==="win32"?`${eg}.exe`:eg,tg="HDB",v3=/^[^\s.,*>]+$/,JD="__request__",B3=a(e=>`${e}.${JD}`,"REQUEST_SUBJECT"),H3={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},q3={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},x3={HUB:"hub.pid",LEAF:"leaf.pid"},F3={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},G3={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:tg,deliver_subject:"__HDB__.WORKQUEUE"},k3={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:tg,deliver_subject:"HDB.SCHEMAQUEUE"},$3={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:tg,deliver_subject:"HDB.USERQUEUE"},V3={SUCCESS:"success",ERROR:"error"},Y3={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},K3={TXN:"txn",MSGID:"msgid"},pc={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},W3={[pc.ERR]:1,[pc.WRN]:2,[pc.INF]:3,[pc.DBG]:4,[pc.TRC]:5},Q3={debug:"-D",trace:"-DVV"};XD.exports={NATS_SERVER_ZIP:M3,NATS_SERVER_NAME:eg,NATS_BINARY_NAME:U3,PID_FILES:x3,NATS_CONFIG_FILES:q3,SERVER_SUFFIX:F3,WORK_QUEUE_CONSUMER_NAMES:G3,SCHEMA_QUEUE_CONSUMER_NAMES:k3,USER_QUEUE_CONSUMER_NAMES:$3,NATS_TERM_CONSTRAINTS_RX:v3,REQUEST_SUFFIX:JD,UPDATE_REMOTE_RESPONSE_STATUSES:V3,CLUSTER_STATUS_STATUSES:Y3,REQUEST_SUBJECT:B3,SUBJECT_PREFIXES:K3,MSG_HEADERS:H3,LOG_LEVELS:pc,LOG_LEVEL_FLAGS:Q3,LOG_LEVEL_HIERARCHY:W3}});var rg=g((DTe,ZD)=>{"use strict";var j3={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
- `)},Q3="certificate.pem",j3="privateKey.pem",z3="ca.pem";JD.exports={CERTIFICATE_VALUES:W3,CERTIFICATE_PEM_NAME:Q3,PRIVATEKEY_PEM_NAME:j3,CA_PEM_NAME:z3}});var ag=T((UTe,rP)=>{"use strict";var tP=require("fs-extra"),de=require("joi"),J3=require("os"),{boolean:He,string:Ln,number:Vt,array:og}=de.types(),{totalmem:XD}=require("os"),Zo=require("path"),X3=F(),Xf=Y(),MTe=ig(),ZD=C(),Z3=it(),eP="log",eX="components",tX="Invalid logging.rotation.maxSize unit. Available units are G, M or K",rX="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",nX="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'",iX="rootPath config parameter is undefined",oX="clustering.enabled config parameter is undefined",ea=Vt.min(0).required(),Zf=og.items({host:Ln.required(),port:ea}).empty(null),ws;rP.exports={configValidator:aX,routesValidator:fX,route_constraints:Zf};function aX(e){if(ws=e.rootPath,Xf.isEmpty(ws))throw iX;let t=He.required(),r=Vt.min(0).max(1e3).empty(null).default(dX),n=Ln.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Ou),s=Ln.optional().empty(null),i=Ln.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=de.string().empty(null).default(Ou),c=de.custom(lX).empty(null).default(Ou),l=e.clustering?.enabled;if(Xf.isEmpty(l))throw oX;let _;return l===!0?_=de.object({enabled:t,hubServer:de.object({cluster:de.object({name:de.required().empty(null),network:de.object({port:ea,routes:Zf}).required()}).required(),leafNodes:de.object({network:de.object({port:ea}).required()}).required(),network:de.object({port:ea}).required()}).required(),leafServer:de.object({network:de.object({port:ea,routes:Zf}).required(),streams:de.object({maxAge:Vt.min(120).allow(null).optional(),maxBytes:Vt.min(1).allow(null).optional(),maxMsgs:Vt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:de.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:He.optional(),databaseLevel:He.optional(),tls:de.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:He.required(),verify:He.optional()}),user:Ln.optional().empty(null)}).required():_=de.object({enabled:t,tls:de.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:He.required()})}).required(),de.object({authentication:de.object({authorizeLocal:He,cacheTTL:Vt.required(),enableSessions:He}),analytics:de.object({aggregatePeriod:Vt}),componentsRoot:n.optional(),clustering:_,localStudio:de.object({enabled:t}).required(),logging:de.object({auditAuthEvents:de.object({logFailed:He,logSuccessful:He}),file:He.required(),level:de.valid("notify","fatal","error","warn","info","debug","trace"),rotation:de.object({enabled:He.optional(),compress:He.optional(),interval:Ln.custom(_X).optional().empty(null),maxSize:Ln.custom(uX).optional().empty(null),path:Ln.optional().empty(null).default(Ou)}).required(),root:n,stdStreams:He.required(),auditLog:He.required()}).required(),operationsApi:de.object({network:de.object({cors:He.optional(),corsAccessList:og.optional(),headersTimeout:Vt.min(1).optional(),keepAliveTimeout:Vt.min(1).optional(),port:Vt.optional().empty(null),domainSocket:de.optional().empty("hdb/operations-server").default(Ou),securePort:Vt.optional().empty(null),timeout:Vt.min(1).optional()}).optional(),tls:de.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:Ln.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:de.object({network:de.object({port:ea,securePort:ea,mtls:de.alternatives([He.optional(),de.object({user:Ln.optional(),certificateAuthority:s,required:He.optional()})])}).required(),webSocket:He.optional(),requireAuthentication:He.optional()}),http:de.object({compressionThreshold:Vt.optional(),cors:He.optional(),corsAccessList:og.optional(),headersTimeout:Vt.min(1).optional(),port:Vt.min(0).optional().empty(null),securePort:Vt.min(0).optional().empty(null)}).required(),threads:r.optional(),maxHeapMemory:Vt.min(0).optional(),storage:de.object({writeAsync:He.required(),overlappingSync:He.optional(),caching:He.optional(),compression:He.optional(),noReadAhead:He.optional(),path:c,prefetchWrites:He.optional()}).required(),ignoreScripts:He.optional(),tls:de.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:Ln.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(aX,"configValidator");function cX(e){return tP.existsSync(e)?null:`Specified path ${e} does not exist.`}a(cX,"doesPathExist");function lX(e,t){de.assert(e,Ln.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=cX(e);if(r)return t.message(r)}a(lX,"validatePath");function uX(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(tX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(nX):e}a(uX,"validateRotationMaxSize");function _X(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(rX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(sX):e}a(_X,"validateRotationInterval");function dX(e,t){let r=t.state.path.join("."),n=J3.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||XD();return i=Math.round(Math.min(i,XD())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),X3.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(dX,"setDefaultThreads");function Ou(e,t){let r=t.state.path.join(".");if(!Xf.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Xf.isEmpty(ws))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Zo.join(ws,eX);case"logging.root":return Zo.join(ws,eP);case"clustering.leafServer.streams.path":return Zo.join(ws,"clustering","leaf");case"storage.path":let n=Zo.join(ws,ZD.LEGACY_DATABASES_DIR_NAME);return tP.existsSync(n)?n:Zo.join(ws,ZD.DATABASES_DIR_NAME);case"logging.rotation.path":return Zo.join(ws,eP);case"operationsApi.network.domainSocket":return r==null?null:Zo.join(ws,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Ou,"setDefaultRoot");function fX(e){let t=de.object({routes:Zf});return Z3.validateBySchema({routes:e},t)}a(fX,"routesValidator")});var pt=T((HTe,_P)=>{"use strict";var nn=C(),Yt=Y(),Ut=F(),{configValidator:EX,routesValidator:nP}=ag(),Nr=require("fs-extra"),hX=require("yaml"),is=require("path"),mX=require("is-number"),iP=require("properties-reader"),pX=require("lodash"),{handleHDBError:SX}=te(),{HTTP_STATUS_CODES:TX,HDB_ERROR_MSGS:eE}=jr(),BTe=require("minimist"),{server:gX}=(Er(),re(Uo)),{DATABASES_PARAM_CONFIG:Nu,CONFIG_PARAMS:rn,CONFIG_PARAM_MAP:os}=nn,RX="Unable to get config value because config is uninitialized",AX="Config successfully initialized",OX="Error backing up config file",NX="Empty parameter sent to getConfigValue",oP=is.join(nn.PACKAGE_ROOT,"config","yaml",nn.HDB_DEFAULT_CONFIG_FILE),bX="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",sP={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"},tE,vt,rE;_P.exports={createConfigFile:yX,getDefaultConfig:IX,getConfigValue:cP,initConfig:lg,flattenConfig:Tc,updateConfigValue:lP,updateConfigObject:CX,getConfiguration:PX,setConfiguration:MX,readConfigFile:_g,getClusteringRoutes:UX,initOldConfig:uP,getConfigFromFile:vX,getConfigFilePath:ta,addConfig:BX,deleteConfigFromFile:HX,getConfigObj:qX};function yX(e){let t=Xi(oP);tE=Tc(t.toJSON());let r;for(let o in e){let c=os[o.toLowerCase()];if(c===rn.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let l=c.split("_"),_=cg(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...l],_)}catch(u){Ut.error(u)}}}r&&aP(t,r),ug(t);let n=t.toJSON();vt=Tc(n);let s=t.getIn(["rootPath"]),i=is.join(s,nn.HDB_CONFIG_FILE);Nr.createFileSync(i),Nr.writeFileSync(i,String(t)),Ut.trace(`Config file written to ${i}`)}a(yX,"createConfigFile");function aP(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Yt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Nu.TABLES))for(let i in n[s][Nu.TABLES])for(let o in n[s][Nu.TABLES][i]){let c=n[s][Nu.TABLES][i][o],l=[rn.DATABASES,s,Nu.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[rn.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(aP,"setSchemasConfig");function IX(e){if(tE===void 0){let r=Xi(oP);tE=Tc(r.toJSON())}let t=os[e.toLowerCase()];if(t!==void 0)return tE[t.toLowerCase()]}a(IX,"getDefaultConfig");function cP(e){if(e==null){Ut.error(NX);return}if(vt===void 0){Ut.trace(RX);return}let t=os[e.toLowerCase()];if(t!==void 0)return vt[t.toLowerCase()]}a(cP,"getConfigValue");function ta(e=Yt.getPropsFilePath()){let t=Yt.getEnvCliRootPath();return t?is.join(t,nn.HDB_CONFIG_FILE):iP(e).get(nn.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ta,"getConfigFilePath");function lg(e=!1){if(vt===void 0||e){let t;if(!Yt.noBootFile()){t=Yt.getPropsFilePath();try{Nr.accessSync(t,Nr.constants.F_OK|Nr.constants.R_OK)}catch(i){throw Ut.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ta(t),n;if(r.includes("config/settings.js"))try{uP(r);return}catch(i){if(i.code!==nn.NODE_ERROR_CODES.ENOENT)throw i}try{n=Xi(r)}catch(i){if(i.code===nn.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}`)}wX(n,r),ug(n);let s=n.toJSON();if(gX.config=s,vt=Tc(s),vt.logging_rotation_rotate)for(let i in sP)vt[i]&&Ut.error(`Config ${sP[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Ut.trace(AX)}}a(lg,"initConfig");function wX(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],is.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],is.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],is.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"),Nr.writeFileSync(t,String(e)))}a(wX,"checkForUpdatedConfig");function ug(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=EX(t);if(r.error)throw eE.CONFIG_VALIDATION(r.error.message);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(ug,"validateConfig");function CX(e,t){vt===void 0&&(vt={});let r=os[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(CX,"updateConfigObject");function lP(e,t,r=void 0,n=!1,s=!1,i=!1){vt===void 0&&lg();let o=cP(os.hdb_root),c=is.join(o,nn.HDB_CONFIG_FILE),l=Xi(c),_;if(r===void 0&&e.toLowerCase()===rn.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=os[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=cg(f,t);l.setIn([...E],h)}else for(let f in r){let E=os[f.toLowerCase()];if(E===rn.HTTP_SECUREPORT&&r[f]===vt[rn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),E===rn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===vt[rn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),E===rn.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=nn.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&l.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=cg(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){Ut.error(R)}}}_&&aP(l,_),ug(l);let u=l.getIn(["rootPath"]),d=is.join(u,nn.HDB_CONFIG_FILE);n===!0&&LX(c,u),Nr.writeFileSync(d,String(l)),s&&(vt=Tc(l.toJSON())),Ut.trace(`Config parameter: ${e} updated with value: ${t}`)}a(lP,"updateConfigValue");function LX(e,t){try{let r=is.join(t,"backup",`${nn.HDB_CONFIG_FILE}.bak`);Nr.copySync(e,r),Ut.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Ut.error(OX),Ut.error(r)}}a(LX,"backupConfigFile");var DX=["databases"];function Tc(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)),rE=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])&&!DX.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;!rn[l.toUpperCase()]&&os[l]&&(s[os[l].toLowerCase()]=o[c]),s[l]=o[c]}}else s[i.toLowerCase()]=n[i];return s}a(r,"squashObj")}a(Tc,"flattenConfig");function cg(e,t){if(e===rn.CLUSTERING_NODENAME||e===rn.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(mX(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Yt.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 Yt.autoCast(t)}a(cg,"castConfigValue");function PX(){let e=Yt.getPropsFilePath(),t=ta(e);return Xi(t).toJSON()}a(PX,"getConfiguration");async function MX(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return lP(void 0,void 0,s,!0),bX}catch(i){throw typeof i=="string"||i instanceof String?SX(i,i,TX.BAD_REQUEST,void 0,void 0,!0):i}}a(MX,"setConfiguration");function _g(){let e=Yt.getPropsFilePath();try{Nr.accessSync(e,Nr.constants.F_OK|Nr.constants.R_OK)}catch(n){if(!Yt.noBootFile())throw Ut.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ta(e);return Xi(t).toJSON()}a(_g,"readConfigFile");function Xi(e){return hX.parseDocument(Nr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Xi,"parseYamlDoc");function UX(){let e=_g(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Yt.isEmptyOrZeroLength(t)?[]:t;let r=nP(t);if(r)throw eE.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Yt.isEmptyOrZeroLength(n)?[]:n;let s=nP(n);if(s)throw eE.CONFIG_VALIDATION(s.message);if(!Yt.isEmptyOrZeroLength(n)&&!Yt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Yt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw eE.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(UX,"getClusteringRoutes");function uP(e){let t=iP(e);vt={};for(let r in os){let n=t.get(r.toUpperCase());if(Yt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=os[r].toLowerCase();s===rn.LOGGING_ROOT?vt[s]=is.dirname(n):vt[s]=n}return vt}a(uP,"initOldConfig");function vX(e){let t=_g();return pX.get(t,e.replaceAll("_","."))}a(vX,"getConfigFromFile");async function BX(e,t){let r=Xi(ta());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Nr.writeFile(ta(),String(r))}a(BX,"addConfig");function HX(e){let t=ta(Yt.getPropsFilePath()),r=Xi(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=is.join(n,nn.HDB_CONFIG_FILE);Nr.writeFileSync(s,String(r))}a(HX,"deleteConfigFromFile");function qX(){return rE||(lg(),rE)}a(qX,"getConfigObj")});var fP=T((xTe,dP)=>{"use strict";var nE=C(),sE=class{static{a(this,"BaseLicense")}constructor(t=0,r=nE.RAM_ALLOCATION_ENUM.DEFAULT,n=nE.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},dg=class extends sE{static{a(this,"ExtendedLicense")}constructor(t=0,r=nE.RAM_ALLOCATION_ENUM.DEFAULT,n=nE.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};dP.exports={BaseLicense:sE,ExtendedLicense:dg}});var ra=T((GTe,TP)=>{"use strict";var Rc=require("fs-extra"),hP=Jf(),mP=require("crypto"),xX=require("moment"),FX=require("uuid").v4,ir=F(),Eg=require("path"),GX=Y(),Zi=C(),{totalmem:EP}=require("os"),kX=fP().ExtendedLicense,gc="invalid license key format",$X="061183",VX="mofi25",YX="aes-256-cbc",KX=16,WX=32,pP=J();pP.initSync();var fg;TP.exports={validateLicense:SP,generateFingerPrint:jX,licenseSearch:pg,getLicense:XX,checkMemoryLimit:ZX};function hg(){return Eg.join(pP.getHdbBasePath(),Zi.LICENSE_KEY_DIR_NAME,Zi.LICENSE_FILE_NAME)}a(hg,"getLicenseDirPath");function QX(){let e=hg();return Eg.join(e,Zi.LICENSE_FILE_NAME)}a(QX,"getLicenseFilePath");function mg(){let e=hg();return Eg.join(e,Zi.REG_KEY_FILE_NAME)}a(mg,"getFingerPrintFilePath");async function jX(){let e=mg();try{return await Rc.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await zX();throw ir.error(`Error writing fingerprint file to ${e}`),ir.error(t),new Error("There was an error generating the fingerprint")}}a(jX,"generateFingerPrint");async function zX(){let e=FX(),t=hP.hash(e),r=mg();try{await Rc.mkdirp(hg()),await Rc.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(zX,"writeFingerprint");function SP(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Zi.RAM_ALLOCATION_ENUM.DEFAULT,version:Zi.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return ir.error("empty license key passed to validate."),r;let n=mg(),s=!1;try{s=Rc.statSync(n)}catch(i){ir.error(i)}if(s){let i;try{i=Rc.readFileSync(n,"utf8")}catch{ir.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(VX),c=o[1];c=Buffer.concat([Buffer.from(c)],KX);let l=Buffer.concat([Buffer.from(i)],WX),_=mP.createDecipheriv(YX,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=JX(o[0],i);if(E)u=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(gc),ir.error(gc),new Error(gc)}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(gc),ir.error(gc),new Error(gc)}else r.exp_date=u;r.exp_date<xX().valueOf()&&(r.valid_date=!1),hP.validate(o[1],`${$X}${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(SP,"validateLicense");function JX(e,t){try{let r=mP.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(JX,"checkOldLicense");function pg(){let e=new kX,t=[];try{t=Rc.readFileSync(QX(),"utf-8").split(Zi.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(GX.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=SP(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=Zi.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return fg=e,e}a(pg,"licenseSearch");async function XX(){return fg||await pg(),fg}a(XX,"getLicense");function ZX(){let e=pg().ram_allocation,t=process.constrainedMemory?.()||EP();if(t=Math.round(Math.min(t,EP())/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(ZX,"checkMemoryLimit")});var br=T((KTe,vP)=>{"use strict";var OP="username is required",NP="nothing to update, must supply active, role or password to update",bP="password cannot be an empty string",yP="If role is specified, it cannot be empty.",IP="active must be true or false";vP.exports={addUser:cZ,alterUser:lZ,dropUser:_Z,getSuperUser:hZ,userInfo:dZ,listUsers:oE,listUsersExternal:fZ,setUsersToGlobal:Oc,findAndValidateUser:MP,getClusterUser:mZ,USERNAME_REQUIRED:OP,ALTERUSER_NOTHING_TO_UPDATE:NP,EMPTY_PASSWORD:bP,EMPTY_ROLE:yP,ACTIVE_BOOLEAN:IP};var wP=Or(),eZ=Xo(),gg=Jf(),CP=QD(),LP=Ar(),Rg=ii(),sn=Y(),DP=require("validate.js"),Oe=F(),{promisify:tZ}=require("util"),Ag=li(),gP=C(),RP=rt(),rZ=pt(),$Te=J(),VTe=ra(),nZ=ri(),{table:YTe}=(Ae(),re(Ge)),{handleHDBError:Cs,hdb_errors:sZ}=te(),{HTTP_STATUS_CODES:Ls,AUTHENTICATION_ERROR_MSGS:Sg,HDB_ERROR_MSGS:Ac}=sZ,{UserEventMsg:Og}=Zn(),Tg=require("lodash"),{server:Ng}=(Er(),re(Uo)),iZ=F();Ng.getUser=(e,t)=>MP(e,t,t!=null);var PP={username:!0,active:!0,role:!0,password:!0},AP=new Map,iE=LP.searchByValue,oZ=LP.searchByHash,aZ=tZ(eZ.delete);async function cZ(e){let t=DP.cleanAttributes(e,PP),r=CP.addUserValidation(t);if(r)throw Cs(new Error,r.message,Ls.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 iE(n),s=s&&Array.from(s)}catch(l){throw Oe.error("There was an error searching for a role in add user"),Oe.error(l),l}if(!s||s.length<1)throw Cs(new Error,Ac.ROLE_NAME_NOT_FOUND(t.role),Ls.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Cs(new Error,Ac.DUP_ROLES_FOUND(t.role),Ls.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Ag.encrypt(t.password)),t.password=gg.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await wP.insert(i)}catch(l){throw Oe.error("There was an error searching for a user."),Oe.error(l),l}Oe.debug(o);try{await Oc()}catch(l){throw Oe.error("Got an error setting users to global"),Oe.error(l),l}if(o.skipped_hashes.length===1)throw Cs(new Error,Ac.USER_ALREADY_EXISTS(t.username),Ls.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],Rg.signalUserChange(new Og(process.pid)),`${c.username} successfully added`}a(cZ,"addUser");async function lZ(e){let t=DP.cleanAttributes(e,PP);if(sn.isEmptyOrZeroLength(t.username))throw new Error(OP);if(sn.isEmptyOrZeroLength(t.password)&&sn.isEmptyOrZeroLength(t.role)&&sn.isEmptyOrZeroLength(t.active))throw new Error(NP);if(!sn.isEmpty(t.password)&&sn.isEmptyOrZeroLength(t.password.trim()))throw new Error(bP);if(!sn.isEmpty(t.active)&&!sn.isBoolean(t.active))throw new Error(IP);let r=uZ(t.username);if(!sn.isEmpty(t.password)&&!sn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Ag.encrypt(t.password)),t.password=gg.hash(t.password)),t.role==="")throw new Error(yP);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 iE(i)||[])}catch(c){throw Oe.error("Got an error searching for a role."),Oe.error(c),c}if(!o||o.length===0){let c=Ac.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Oe.error(c),Cs(new Error,c,Ls.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Ac.ALTER_USER_DUP_ROLES(t.role);throw Oe.error(c),Cs(new Error,c,Ls.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 wP.update(n)}catch(i){throw Oe.error("Error during update."),Oe.error(i),i}try{await Oc()}catch(i){throw Oe.error("Got an error setting users to global"),Oe.error(i),i}return Rg.signalUserChange(new Og(process.pid)),s}a(lZ,"alterUser");function uZ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(uZ,"isClusterUser");async function _Z(e){try{let t=CP.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(sn.isEmpty(global.hdb_users.get(e.username)))throw Cs(new Error,Ac.USER_NOT_EXIST(e.username),Ls.NOT_FOUND,void 0,void 0,!0);let n;try{n=await aZ(r)}catch(s){throw Oe.error("Got an error deleting a user."),Oe.error(s),s}Oe.debug(n);try{await Oc()}catch(s){throw Oe.error("Got an error setting users to global."),Oe.error(s),s}return Rg.signalUserChange(new Og(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(_Z,"dropUser");async function dZ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Tg.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await oZ(r)}catch(s){throw Oe.error("Got an error searching for a role."),Oe.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Oe.error(r),r}return t}a(dZ,"userInfo");async function fZ(){let e;try{e=await oE()}catch(t){throw Oe.error("Got an error listing users."),Oe.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(fZ,"listUsersExternal");async function oE(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await iE(e)}catch(o){throw Oe.error("Got an error searching for roles."),Oe.error(o),o}let r={};for(let o of t)r[o.id]=Tg.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 iE(n)}catch(o){throw Oe.error("Got an error searching for users."),Oe.error(o),o}let i=new Map;for(let o of s)o=Tg.cloneDeep(o),o.role=r[o.role],EZ(o.role),i.set(o.username,o);return i}catch(e){throw Oe.error("got an error listing users"),Oe.error(e),sn.errorizeMessage(e)}return null}a(oE,"listUsers");function EZ(e){try{if(!e){Oe.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(nZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Oe.error("Got an error trying to set system permissions."),Oe.error(t)}}a(EZ,"appendSystemTablesToRole");async function Oc(){try{let e=await oE();global.hdb_users=e}catch(e){throw Oe.error(e),e}}a(Oc,"setUsersToGlobal");async function MP(e,t,r=!0){global.hdb_users||await Oc();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Cs(new Error,Sg.GENERIC_AUTH_FAIL,Ls.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Cs(new Error,Sg.USER_INACTIVE,Ls.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(AP.get(t)===n.password)return s;if(gg.validate(n.password,t))AP.set(t,n.password);else throw Cs(new Error,Sg.GENERIC_AUTH_FAIL,Ls.UNAUTHORIZED,void 0,void 0,!0)}return s}a(MP,"findAndValidateUser");async function hZ(){global.hdb_users||await Oc();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(hZ,"getSuperUser");async function mZ(){let e=await oE(),t=rZ.getConfigFromFile(gP.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!sn.isEmpty(r)&&r?.role?.role===gP.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Ag.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+RP.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+RP.SERVER_SUFFIX.ADMIN,r}a(mZ,"getClusterUser");var UP=[];Ng.invalidateUser=function(e){for(let t of UP)try{t(e)}catch(r){iZ.error("Error invalidating user",r)}};Ng.onInvalidatedUser=function(e){UP.push(e)}});var yu=T((zTe,xP)=>{"use strict";var na=F(),on=C(),pZ=YI(),QTe=Cn(),jTe=ji(),SZ=br(),{validateEvent:BP}=Zn(),bu=wn(),TZ=require("process"),{resetDatabases:gZ}=(Ae(),re(Ge)),RZ={[on.ITC_EVENT_TYPES.SCHEMA]:AZ,[on.ITC_EVENT_TYPES.USER]:qP};async function AZ(e){let t=BP(e);if(t){na.error(t);return}na.trace("ITC schemaHandler received schema event:",e),await pZ(e.message),await OZ(e.message)}a(AZ,"schemaHandler");async function OZ(e){try{bu.resetReadTxn(on.SYSTEM_SCHEMA_NAME,on.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),bu.resetReadTxn(on.SYSTEM_SCHEMA_NAME,on.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),bu.resetReadTxn(on.SYSTEM_SCHEMA_NAME,on.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=gZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){na.error(t)}}a(OZ,"syncSchemaMetadata");var HP=[];async function qP(e){try{try{bu.resetReadTxn(on.SYSTEM_SCHEMA_NAME,on.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),bu.resetReadTxn(on.SYSTEM_SCHEMA_NAME,on.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){na.warn(r)}let t=BP(e);if(t){na.error(t);return}na.trace(`ITC userHandler ${on.HDB_ITC_CLIENT_PREFIX}${TZ.pid} received user event:`,e),await SZ.setUsersToGlobal();for(let r of HP)r()}catch(t){na.error(t)}}a(qP,"userHandler");qP.addListener=function(e){HP.push(e)};xP.exports=RZ});var Zn=T((rge,GP)=>{"use strict";var XTe=F(),bg=Y(),NZ=C(),{ITC_ERRORS:Iu}=jr(),{parentPort:ZTe,threadId:bZ,isMainThread:yZ,workerData:ege}=require("worker_threads"),{onMessageFromWorkers:IZ,broadcast:tge,broadcastWithAcknowledgement:wZ}=st();GP.exports={sendItcEvent:CZ,validateEvent:FP,SchemaEventMsg:LZ,UserEventMsg:DZ};var aE;IZ(async(e,t)=>{aE=aE||yu(),FP(e),aE[e.type]&&await aE[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function CZ(e){return!yZ&&e.message&&(e.message.originator=bZ),wZ(e)}a(CZ,"sendItcEvent");function FP(e){if(typeof e!="object")return Iu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||bg.isEmpty(e.type))return Iu.MISSING_TYPE;if(!e.hasOwnProperty("message")||bg.isEmpty(e.message))return Iu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||bg.isEmpty(e.message.originator))return Iu.MISSING_ORIGIN;if(NZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Iu.INVALID_EVENT(e.type)}a(FP,"validateEvent");function LZ(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(LZ,"SchemaEventMsg");function DZ(e){this.originator=e}a(DZ,"UserEventMsg")});var ii=T((ige,YP)=>{"use strict";var kP=C(),sge=Y(),cE=F(),$P=II(),Nc,{sendItcEvent:VP}=Zn();function PZ(e){try{cE.trace("signalSchemaChange called with message:",e),Nc=Nc||yu();let t=new $P(kP.ITC_EVENT_TYPES.SCHEMA,e);return Nc.schema(t),VP(t)}catch(t){cE.error(t)}}a(PZ,"signalSchemaChange");function MZ(e){try{cE.trace("signalUserChange called with message:",e),Nc=Nc||yu();let t=new $P(kP.ITC_EVENT_TYPES.USER,e);return Nc.user(t),VP(t)}catch(t){cE.error(t)}}a(MZ,"signalUserChange");YP.exports={signalSchemaChange:PZ,signalUserChange:MZ}});var Du={};$e(Du,{addAnalyticsListener:()=>Lu,recordAction:()=>an,recordActionBinary:()=>Dn,setAnalyticsEnabled:()=>UZ});function UZ(e){tM=e}function an(e,t,r,n,s){if(!tM)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=_E.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},_E.set(i,o)}lE||vZ()}function Dn(e,t,r,n,s){an(!!e,t,r,n,s)}function Lu(e){sM.push(e)}function vZ(){lE=performance.now(),setTimeout(async()=>{let e=performance.now()-lE;lE=0;let t=[],r={time:Date.now(),period:e,threadId:sa.threadId,metrics:t};for(let[s,i]of _E){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 iM){let f=Math.floor(c*d),E=o[f-1];if(f>l){let h=f-l;if(E===u){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),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 oM()}let n=process.memoryUsage();t.push({metric:"memory",threadId:sa.threadId,byThread:!0,...n});for(let s of sM)s(t);_E=new Map,sa.parentPort?sa.parentPort.postMessage({type:nM,report:r}):lM({report:r})},rM).unref()}async function BZ(e,t=6e4){let r=wg(),n=aM(),s;for(let h of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){s=h.value.time;break}if(Date.now()-t<s)return;let i,o=new Map,c=new Map,l=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:R}=p;for(let g of S||[]){let{path:O,method:v,type:G,metric:B,count:U,total:j,distribution:K,threads:z,...oe}=g;U||(U=1);let Te=B+(O?"-"+O:"");v!==void 0&&(Te+="-"+v),G!==void 0&&(Te+="-"+G);let ce=o.get(Te);if(ce){if(ce.threads){let ue=ce.threads[R];if(ue)ce=ue;else{ce.threads[R]=Object.assign({},oe);continue}}ce.count||(ce.count=1);let ke=ce.count;for(let ue in oe){let Gt=oe[ue];typeof Gt=="number"&&(ce[ue]=(ce[ue]*ke+Gt*U)/(ke+U))}ce.count+=U,j>=0&&(ce.total+=j,ce.ratio=ce.total/ce.count)}else ce=Object.assign({period:t},g),delete ce.distribution,o.set(Te,ce),ce.byThread&&(ce.threads=[],ce.threads[R]=Object.assign({},oe),l.push(ce));if(K){K=K.map(ue=>typeof ue=="number"?{value:ue,count:1}:ue);let ke=c.get(Te);ke?ke.push(...K):c.set(Te,K)}}await oM()}for(let h of l){let{path:p,method:S,type:R,metric:g,count:O,total:v,distribution:G,threads:B,...U}=h;B=B.filter(j=>j);for(let j in U){if(typeof h[j]!="number")continue;let K=0;for(let z of B){let oe=z[j];typeof oe=="number"&&(K+=oe)}h[j]=K}h.count=B.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((ue,Gt)=>ue.value>Gt.value?1:-1);let R=S.count-1,g=[],O=0,v=0,G;for(let ue of iM){let Gt=R*ue;for(;O<Gt;)G=p[v++],O+=G.count,v===1&&O--;let Ad=p[v>1?v-2:0];G||(G=p[0]),g.push(G.value-(G.value-Ad.value)*(O-Gt)/G.count)}let[B,U,j,K,z,oe,Te,ce,ke]=g;Object.assign(S,{p1:B,p10:U,p25:j,median:K,p75:z,p90:oe,p95:Te,p99:ce,p999:ke})}let u;for(let[h,p]of o)p.id=(0,uE.getNextMonotonicTime)(),p.time=_,n.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||n.primaryStore.put(p.id,p)}),u=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(u||E*10>f){let h=(0,uE.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-KP,active:E-WP,time:d,...process.memoryUsage()};n.primaryStore.put(h,p,{append:!0}).then(S=>{S||n.primaryStore.put(h,p)})}KP=f,WP=E}async function QP(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function wg(){return jP||(jP=mt({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function aM(){return zP||(zP=mt({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function xZ(){cM=!0;let e=(0,Cu.get)(Ig.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await BZ(rM,e),await QP(wg(),HZ),await QP(aM(),qZ)},Math.min(e/2,2147483647)).unref()}function lM(e,t){let r=e.report;r.threadId=t?.threadId||sa.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(JP+=n.mean*n.count);r.totalBytesProcessed=JP,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(XP.get(t))}),XP.set(t,t.performance.eventLoopUtilization())),r.id=(0,uE.getNextMonotonicTime)(),wg().primaryStore.put(r.id,r),cM||xZ(),FZ&&(uM=kZ(r))}async function kZ(e){if(await uM,!eo){let r=(0,wu.dirname)((0,eM.getLogFilePath)());try{eo=await(0,yg.open)((0,wu.join)(r,"analytics.log"),"r+")}catch{eo=await(0,yg.open)((0,wu.join)(r,"analytics.log"),"w+")}}let t=(await eo.stat()).size;if(t>GZ){let r=Buffer.alloc(t);await eo.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await eo.write(r,{position:0}),await eo.truncate(r.length),t=r.length}await eo.write(JSON.stringify(e)+`
9
- `,t)}var sa,ZP,eM,wu,yg,uE,Cu,Ig,_E,tM,lE,rM,nM,sM,iM,KP,WP,oM,HZ,qZ,jP,zP,cM,JP,XP,FZ,uM,eo,GZ,ui=Ne(()=>{sa=require("worker_threads"),ZP=H(st());Ae();eM=H(F()),wu=require("path"),yg=require("fs/promises"),uE=H(mr()),Cu=H(J()),Ig=H(C());Er();(0,Cu.initSync)();_E=new Map,tM=(0,Cu.get)(Ig.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(UZ,"setAnalyticsEnabled");a(an,"recordAction");ft.recordAnalytics=an;a(Dn,"recordActionBinary");lE=0,rM=1e3,nM="analytics-report",sM=[];a(Lu,"addAnalyticsListener");iM=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(vZ,"sendAnalytics");a(BZ,"aggregation");KP=0,WP=0,oM=a(()=>new Promise(setImmediate),"rest");a(QP,"cleanup");HZ=36e5,qZ=31536e6;a(wg,"getRawAnalyticsTable");a(aM,"getAnalyticsTable");(0,ZP.setChildListenerByType)(nM,lM);a(xZ,"startScheduledTasks");JP=0,XP=new Map,FZ=!1;a(lM,"recordAnalytics");GZ=1e6;a(kZ,"logAnalytics")});var Pg={};$e(Pg,{coerceType:()=>dE,makeTable:()=>hE,setServerUtilities:()=>JZ,updateResource:()=>fE});function hE(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:p}=e;p||(p=[]),NI(i,l);let S=zp(i,n,l),R=0,g,O,v={},G=Promise.resolve(),B,U,j;for(let W of p)(W.assignCreatedTime||W.name==="__createdtime__")&&(B=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(U=W),W.expiresAt&&(j=W),W.isPrimaryKey&&(v=W);let K,z=[],oe=[],Te=1,ce=2,ke={},ue={},Gt=864e5,Ad,Od,Bi,Lb=!1,Tp,j$=i.getRange({start:!1,end:!1}).constructor,z$=10,J$=6;E&&Mb();class et extends jt{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=p;static expirationTimer;static createdTimeProperty=B;static updatedTimeProperty=U;static propertyResolvers;static sources=[];static get expirationMS(){return d}static dbisDB=u;static schemaDefined=_;static sourcedFrom(m,A){A&&(this.sourceOptions=A,(A.expiration||A.eviction||A.scanInterval)&&this.setTTLExpiration(A)),A?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),O=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let w=a(y=>{let I=this.sources.slice(0,-1);if(I=I.filter(M=>M[y]&&(!M[y].reliesOnPrototype||M.prototype[y])),I.length>0)if(I.length===1){let M=I[0];return(P,D,q)=>{if(P?.source!==M)return M[y](D,q,P)}}else return(M,P,D)=>{let q=[];for(let $ of I){if(M?.source===$)break;q.push($[y](P,D,M))}return Promise.all(q)}},"getApplyToIntermediateSource"),N=this.sources[this.sources.length-1],b=a(y=>{if(N[y]&&(!N[y].reliesOnPrototype||N.prototype[y]))return(I,M,P)=>{if(!I?.source)return N[y](M,P,I)}},"getApplyToCanonicalSource");return ke={put:b("put"),patch:b("patch"),delete:b("delete"),publish:b("publish")},ue={put:w("put"),patch:w("patch"),delete:w("delete"),publish:w("publish"),invalidate:w("invalidate")},(async()=>{let y=!1,I=a(async(M,P)=>{let D=M.value,q=M.table?ct[c][M.table]:et;if(c===as.SYSTEM_SCHEMA_NAME&&(M.table===as.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===as.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(y=!0),M.id===void 0&&(M.id=D[q.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=m;let $=await q.getResource(M.id,P,bc);switch(M.type){case"put":return $._writeUpdate(D,!0,bc);case"patch":return $._writeUpdate(D,!1,bc);case"delete":return $._writeDelete(bc);case"publish":return $._writePublish(D,bc);case"invalidate":return $.invalidate(bc);default:ot.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=m.subscribe;M&&h==null&&(h=!0);let P=m.subscribeOnThisThread?m.subscribeOnThisThread((0,oa.getWorkerIndex)()):(0,oa.getWorkerIndex)()===0,D=M&&P&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(D){let q;for await(let $ of D)try{if(!($.type==="transaction"?$.writes[0]:$)){ot.error("Bad subscription event",$);continue}if($.source=m,q)if($.beginTxn)q.resolve();else{I($,q);continue}if($.type==="end_txn")continue;let Ee=tt($,()=>{if($.type==="transaction"){let ne=[];for(let ie of $.writes)try{ne.push(I(ie,$))}catch(qe){throw qe.message+=" writing "+JSON.stringify(ie)+" of event "+JSON.stringify($),qe}return Promise.all(ne)}else if($.type==="define_schema"){let ne=this.attributes.slice(0),ie;for(let qe of $.attributes)ne.find(ae=>ae.name===qe.name)||(ne.push(qe),ie=!0);ie&&(mt({table:s,database:c,attributes:ne,origin:"cluster"}),qu.signalSchemaChange(new xu.SchemaEventMsg(process.pid,as.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return $.beginTxn?(q=$,I($,$),new Promise(ne=>{q.resolve=ne})):I($,$)});y&&(await Ee,qu.signalUserChange(new xu.UserEventMsg(process.pid))),$.onCommit&&(Ee?.then?Ee.then($.onCommit):$.onCommit())}catch(fe){ot.error("error in subscription handler",fe)}}}catch(M){ot.error(M)}})(),this}static getResource(m,A,w){let N=super.getResource(m,A,w);if(m!=null){Ol(m);try{if(N.hasOwnProperty(ye))return N;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let b=!w?.async||i.cache?.get(m),y=Yr(A),I=y.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return gp(m,A,{transaction:I},b,M=>{if(M?fE(N,M):N[ye]=null,A.onlyIfCached&&A.noCacheStore){if(!N.doesExist())throw new Pn.ServerError("Entry is not cached",504)}else if(w?.ensureLoaded){let P=Rp(m,M,A,N);if(P)return y?.disregardReadTxn(),N[Cg]=!0,Dg(P,D=>(fE(N,D),N))}return N})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(m)),b}}return N}ensureLoaded(){let m=Rp(this[De],this[cn],this[be]);if(m)return this[Cg]=!0,Dg(m,A=>{this[cn]=A,this[ye]=A.value,this[Bu]=A.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,Gt=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");Gt=Gt||(d+f)/4,Op()}static enableAuditing(m=!0){E=m,m&&Mb(),et.audit=m}static coerceId(m){return m===""?null:dE(m,v)}static async dropTable(){if(delete ct[c][s],c===o){for(let m of p)u.remove(et.tableName+"/"+m.name),r[m.name]?.drop();u.remove(et.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));qu.signalSchemaChange(new xu.SchemaEventMsg(process.pid,as.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[yn])return this.search(m);if(this[De]===null){if(m?.conditions)return this.search(m);let A=et.getRecordCount();return{recordCount:A.recordCount,estimatedRecordRange:A.estimatedRange,records:"./",name:s,database:c,attributes:p}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[be]?.returnNonexistent)return this}allowRead(m,A){let w=bd(m);if(w?.read){if(w.isSuperUser)return!0;let N=w.attribute_permissions,b=A?.select;if(N?.length>0||Lb&&b){if(A||(A={}),b){let y=N?.length>0&&Lg(N,"read");A.select=b.map(I=>{let M=I.name||I;if(!y||y[M]){let P=Bi[M]?.definition?.tableClass;if(P){if(I.name||(I={name:I}),!P.prototype.allowRead.call(null,m,I))return!1;if(!I.select)return I.name}return I}}).filter(Boolean)}else A.select=N.filter(y=>y.read&&!Bi[y.attribute_name]).map(y=>y.attribute_name);return A}else return!0}}allowUpdate(m,A){let w=bd(m);if(w?.update){let N=w.attribute_permissions;if(N?.length>0){let b=Lg(N,"update");for(let y in A)if(!b[y])return!1;for(let y of N){let I=y.attribute_name;!y.update&&!(I in A)&&(A[I]=this.getProperty(I))}}return!0}}allowCreate(m,A){if(this[yn]){let w=bd(m);if(w?.insert){let N=w.attribute_permissions;if(N?.length>0){let b=Lg(N,"insert");for(let y in A)if(!b[y])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return bd(m)?.delete}update(m,A){if(!Yr(this[be]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let N;return typeof m=="object"&&m&&(A?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[ye]={},this[Mt]=m):(N=this[Mt],N&&(m=Object.assign(N,m)),this[Mt]=N=m)),this._writeUpdate(this[Mt],A),this}addTo(m,A){if(typeof A=="number")this[Pu]===dM?this.set(m,(+this.getProperty(m)||0)+A):(this[Pu]||this.update(),this.set(m,new tf(A)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,A){if(typeof A=="number")return this.addTo(m,-A);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let A=this[be],w=this[De];Ol(w),Yr(this[be]).addWrite({key:w,store:i,invalidated:!0,entry:this[cn],nodeName:this[be]?.nodeName,before:ke.invalidate?.bind(this,A,w),beforeIntermediate:ue.invalidate?.bind(this,A,w),commit:(b,y)=>{if(y?.version>b)return;let I=null;for(let M in r)I||(I={}),I[M]=this.getProperty(M);S(w,I,this[cn],b,Mu,E,this[be],0,"invalidate")}})}static evict(m,A,w){let N=this.Source,b;if(!((O||E)&&(!A||(b=i.getEntry(m),!b||!A)||b.version!==w))){if(O){if(i.hasLock(m,b.version))return;let y;for(let I in r)y||(y={}),y[I]=A[I];if(y)return S(m,y,b,w,Uu,null,null,0,null,!0)}return i.ifVersion(w,()=>{Nd(m,A,null)}),E?S(m,null,b,w,Uu,null,null,0,null,!0):i.remove(m,w)}}lock(){throw new Error("Not yet implemented")}static operation(m,A){return m.table||=s,m.schema||=c,SM.operation(m,A)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,A,w){let N=this[be],b=Yr(N),y=this[De];Ol(y);let I=this[cn];this[Pu]=A?dM:QZ;let M={key:y,store:i,entry:I,nodeName:N?.nodeName,validate:P=>{m||(m=this[Mt]),A||m&&Zd(m)?(this.validate(m,!A),N?.source||(U&&(m[U.name]=U.type==="Date"?new Date(P):U.type==="String"?new Date(P).toISOString():P),A&&(t&&m[t]!==y&&(m[t]=y),B&&(I?.value?m[B.name]=I?.value[B.name]:m[B.name]=B.type==="Date"?new Date(P):B.type==="String"?new Date(P).toISOString():P),m=qo(m)))):b.removeWrite(M)},before:A?ke.put?()=>ke.put(N,y,m):null:ke.patch?()=>ke.patch(N,y,m):ke.put?()=>ke.put(N,y,qo(this)):null,beforeIntermediate:A?ue.put?()=>ue.put(N,y,m):null:ue.patch?()=>ue.patch(N,y,m):ue.put?()=>ue.put(N,y,qo(this)):null,commit:(P,D,q)=>{q&&(N&&D?.version>(N.lastModified||0)&&(N.lastModified=D.version),this[cn]=D,A||(this[ye]=D?.value??null)),this[Mt]=m,this[Bu]=P;let $=D?.value,fe=m;if(this[Pu]=0,D?.version>P)if(E){let qe=D.localTime,ae=D.version;for(;fe&&(qe>P||ae>P&&qe>0);){let he=l.get(qe),ze=$t(he);if(ae=ze.version,ae>P)if(ze.type==="patch"){let Ue=ze.getValue(i);fe=Jd(fe,Ue)}else(ze.type==="put"||ze.type==="delete")&&(fe=null);qe=ze.previousLocalTime}}else A?fe=null:fe=Jd(fe,$);let Ee=qo(this,fe);this[ye]=Ee;let ne;A||(ne=m),Nd(y,$,Ee);let ie=A?"put":"patch";S(y,Ee,D,P,0,E,N,N.expiresAt||(d?d+Date.now():0),ie,!1,ne)}};b.addWrite(M)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[yn]){for await(let A of this.search(m))(await et.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[ye]?this._writeDelete(m):!1}_writeDelete(m){let A=Yr(this[be]),w=this[De];Ol(w);let N=this[be];return A.addWrite({key:w,store:i,resource:this,nodeName:N?.nodeName,before:ke.delete?.bind(this,N,w),beforeIntermediate:ue.delete?.bind(this,N,w),commit:(b,y,I)=>{let M=y?.value;I&&(N&&y?.version>(N.lastModified||0)&&(N.lastModified=y.version),fE(this,y)),!(y?.version>b)&&(Nd(this[De],M),ot.trace("Write delete entry",w,b),E||h?(S(w,null,this[cn],b,0,E,this[be],0,"delete"),E||Op()):i.remove(this[De]))}}),!0}search(m){let A=this[be],w=Yr(A);if(!m)throw new Error("No query provided");let N=m.conditions;N?N.length===void 0&&(N=N[Symbol.iterator]?Array.from(N):[N]):N=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[De]&&(N=[{attribute:null,comparator:"prefix",value:this[De]}].concat(N));let b,y={};function I(se,nt){let Je;switch(nt){case"and":case void 0:if(se.length<1)throw new Error('An "and" operator requires at least one condition');Je=!0;break;case"or":if(se.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+nt)}let kt=Je&&{},Kr;for(let ve of se){if(ve.conditions){ve.conditions=I(ve.conditions,ve.operator);continue}let Fe=ve[0]??ve.attribute,Wr=Fe==null?v:ti(p,Fe);if(Wr){if(Je){let zs=zn(Fe),An=kt[zs];An?(An.push(ve),Kr=!0):kt[zs]=[ve]}(Wr.type||uS[ve.comparator])&&(ve[1]===void 0?ve.value=P(ve.value,Wr):ve[1]=P(ve[1],Wr))}else if(Fe!=null)throw(0,Pn.handleHDBError)(new Error,`${Fe} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return se;if(Kr)for(let ve in kt){let Fe=kt[ve],Wr=Fe.length;if(Wr>1)for(let zs=0;zs<Wr;zs++){let An=Fe[zs];if(An.comparator==="ge"||An.comparator==="greater_than_equal")for(let Hi=0;Hi<Wr;Hi++){let ja=Fe[Hi];(ja.comparator==="le"||ja.comparator==="less_than_equal")&&(An.comparator="between",An.value=[An.value,ja.value],se.splice(se.indexOf(ja),1))}if(An.comparator==="equals"||!An.comparator){for(let Hi=0;Hi<Wr;Hi++)if(Hi!==zs){let ja=Fe[Hi];se.splice(se.indexOf(ja),1)}break}}}return se}a(I,"prepareConditions");function M(se,nt){if(m.enforceExecutionOrder)return se;for(let Je of se)Je.conditions&&(Je.conditions=M(Je.conditions,Je.operator));return se.length>1&&nt!=="or"?(0,pM.sortBy)(se,af(et)):se}a(M,"orderConditions");function P(se,nt){return Array.isArray(se)?se.map(Je=>dE(Je,nt)):dE(se,nt)}a(P,"coerceTypedValues");let D=m.operator;(N.length>0||D)&&(N=I(N,D));let q=typeof m.sort=="object"&&m.sort,$;if(q&&D!=="or"){let se=q.attribute;if(b=N.find(nt=>zn(nt.attribute)===zn(se)),!b){if(!ti(p,se))throw(0,Pn.handleHDBError)(new Error,`${Array.isArray(se)?se.join("."):se} is not a defined attribute`,404);b={attribute:se},N.push(b)}b.descending=!!q.descending}N=M(N,D),q&&(N[0]===b?q.next&&($={dbOrderedAttribute:q.attribute,attribute:q.next.attribute,descending:q.next.descending,next:q.next.next}):(b&&N.splice(N.indexOf(b),1),$=q));function fe(se,nt){let Je=se[0];if(nt==="or"){let kt=ne(Je);for(let ve=1;ve<se.length;ve++){let Fe=se[ve],Wr=ne(Fe);kt=kt.concat(Wr)}let Kr=new Set;return kt.filter(ve=>{let Fe=ve.key??ve;return Kr.has(Fe)?!1:(Kr.add(Fe),!0)})}else{let kt=ne(Je),Kr=Je.estimated_count,ve=se.slice(1).map((Fe,Wr)=>{let zs=(Fe.attribute||Fe[0])===t,An=Vl(Fe,et,A,y,zs,Kr);return Wr<se.length-2&&Kr&&(Kr=hI(i,Fe.estimated_count,Kr)),An}).filter(Boolean);return ve.length>0?Db(kt,ie,A,ve):kt}}a(fe,"executeConditions");let Ee=m.reverse===!0;function ne(se){return se.conditions?fe(se.conditions,se.operator):ic(se,w,se.descending||Ee,et,m.allowFullScan,y)}a(ne,"executeCondition");let ie=m.select;if(N.length===0&&(N=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:N,operator:D,postOrdering:$,selectApplied:!!ie};let qe=w.useReadTxn(),ae=fe(N,D);(m.offset||m.limit!==void 0)&&(ae=ae.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0));let he=m.ensureLoaded!==!1,ze=et.transformEntryForSelect(ie,A,y,he,!0),Ue=et.transformToOrderedSelect(ae,ie,$,A,ze);return Ue.onDone=()=>{Ue.onDone=null,w.doneReadTxn()},Ue.selectApplied=!0,Ue.getColumns=()=>{if(ie){let se=[];for(let nt of ie)nt==="*"?se.push(...p.map(Je=>Je.name)):se.push(nt.name||nt);return se}return p.map(se=>se.name)},Ue}static transformToOrderedSelect(m,A,w,N,b){let y=new j$;if(w){m=Db(m,A,N,null);let I;y.iterate=function(){let P,D=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),q,$=w.dbOrderedAttribute,fe,Ee,ne=!0;function ie(ae){let he=ae.next&&ie(ae.next),ze=ae.descending;return(Ue,se)=>{let nt=Ap(Ue,ae.attribute,N),Je=Ap(se,ae.attribute,N),kt=ze?(0,aa.compareKeys)(Je,nt):(0,aa.compareKeys)(nt,Je);return kt===0?he?.(Ue,se)||0:kt}}a(ie,"createComparator");let qe=ie(w);return{async next(){let ae;if(P)if(ae=P.next(),ae.done){if(q)return y.onDone&&y.onDone(),ae}else return{value:await b(ae.value)};I=[],fe&&I.push(fe);do if(ae=await D.next(),ae.done){if(q=!0,I.length)break;return y.onDone&&y.onDone(),ae}else{let he=ae.value;if(he?.then&&(he=await he),$){let ze=Ap(he,$,N);if(ne)ne=!1,Ee=ze;else if(ze!==Ee){Ee=ze,fe=he;break}}I.push(he)}while(!0);return w.isGrouped,I.sort(qe),P=I[Symbol.iterator](),ae=P.next(),ae.done?(y.onDone&&y.onDone(),ae):{value:await b(ae.value)}},return(){y.onDone&&y.onDone(),D.return()},throw(){y.onDone&&y.onDone(),D.throw()}}};let M=a(P=>{if(typeof A=="object"&&Array.isArray(P.attribute))for(let D=0;D<A.length;D++){let q=A[D],$;if(q.name===P.attribute[0]){for($=q.sort||(q.sort={});$.next;)$=$.next;$.attribute=P.attribute.slice(1),$.descending=P.descending}else q===P.attribute[0]&&(A[D]=$={name:q,sort:{attribute:P.attribute.slice(1),descending:P.descending}})}P.next&&M(P.next)},"applySortingOnSelect");M(w)}else y.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),y=y.map(b);return y}static transformEntryForSelect(m,A,w,N,b){if(m&&(m===t||m?.length===1&&m[0]===t)){let P=a(D=>D?.key??D,"transform");return m===t?P:m.asArray?D=>[P(D)]:D=>({[t]:P(D)})}let y;N&&O&&!m?.every(P=>{let D;return typeof P=="object"?D=P.name:D=P,r[D]||D===t})&&(y=!0);let I,M=a(P=>{let D;if(P){if(Tp=P,D=P.value||P.deref?.(),!D&&(P.key===void 0||P.deref)){if(P=gp(P.key??P,A,{transaction:Yr(A).getReadTxn(),lazy:m?.length<4},!1,q=>q),P?.then)return P.then(M);D=P?.value}if(y&&(P.metadataFlags&(Mu|Uu)||P.expiresAt&&P.expiresAt<Date.now())){let q=Rp(P.key??P,P,A);if(q?.then)return q.then(M)}}if(D==null)return b?ia.SKIP:D;if(m&&!(m[0]==="*"&&m.length===1)){let q,$=a((Ee,ne)=>{let ie;typeof Ee=="object"?ie=Ee.name:ie=Ee;let qe=Bi?.[ie],ae;if(qe){let he=w?.[ie];if(he)if(he.hasMappings){let Ue=qe.from?D[qe.from]:zn(P.key);ae=he.get(Ue),ae||(ae=[])}else ae=he.fromRecord?.(D);else ae=qe(D,A,P);let ze=a(Ue=>{if(Ue&&typeof Ue=="object"){let se=qe.definition?.tableClass||et;I||(I={});let nt=I[ie]||(I[ie]=se.transformEntryForSelect(ie===Ee?null:Ee.select||(Array.isArray(Ee)?Ee:null),A,he,N));if(Array.isArray(Ue)){let Je=[],kt=se.transformToOrderedSelect(Ue,Ee.select,typeof Ee.sort=="object"&&Ee.sort,A,nt)[Symbol.asyncIterator](),Kr=a(Fe=>{for(;!Fe.done;){if(Fe?.then)return Fe.then(Kr);Je.push(Fe.value),Fe=kt.next()}ne(Je,ie)},"nextValue"),ve=Kr(kt.next());ve&&(q||(q=[]),q.push(ve));return}else if(Ue=nt(Ue),Ue?.then){q||(q=[]),q.push(Ue.then(Je=>ne(Je,ie)));return}}ne(Ue,ie)},"handleResolvedValue");ae?.then?(q||(q=[]),q.push(ae.then(ze))):ze(ae);return}else ae=D[ie],ae&&typeof ae=="object"&&ie!==Ee&&(ae=this.transformEntryForSelect(Ee.select||Ee,A,null)({value:ae}));ne(ae,ie)},"selectAttribute"),fe;if(typeof m=="string")$(m,Ee=>{fe=Ee});else if(Array.isArray(m))if(m.asArray)fe=[],m.forEach((Ee,ne)=>{Ee==="*"?m[ne]=D:$(Ee,ie=>fe[ne]=ie)});else{fe={};let Ee=m.forceNulls;for(let ne of m)if(ne==="*")for(let ie in D)fe[ie]=D[ie];else $(ne,(ie,qe)=>{ie===void 0&&Ee&&(ie=null),fe[qe]=ie})}else throw new Pn.ClientError("Invalid select"+m);return q?Promise.all(q).then(()=>fe):fe}return D},"transform");return M}async subscribe(m){if(!l)throw new Error("Can not subscribe to a table without an audit log");E||mt({table:s,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let A=!m.rawEvents,w=AI(et,this[De]??null,function(I,M,P,D){try{let q=M.getValue?.(i,A);if(!q&&M.type==="patch"&&A){let $=i.getEntry(I);$?.version===M.version?q=$.value:q=M.getValue?.(i,!0,P),M.type="put"}this.send({id:I,timestamp:P,value:q,version:M.version,type:M.type,beginTxn:D})}catch(q){ot.error(q)}},m.startTime||0,this[yn]);this[yn]&&(w.includeDescendants=!0,m.onlyChildren&&(w.onlyChildren=!0)),m.crossThreads===!1&&(w.crossThreads=!1),m.supportsTransactions&&(w.supportsTransactions=!0);let N=this[De],b=m.previousCount;b>1e3&&(b=1e3);let y=m.startTime;if(this[yn]){if(y){if(b)throw new Pn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:I,value:M}of l.getRange({start:y,exclusiveStart:!0})){let P=$t(M);if(P.tableId!==n)continue;let D=P.recordId;(N==null||hM(N,D))&&w.send({id:D,timestamp:I,...P}),w.startTime=I}}else if(b){let I=[];for(let{key:M,value:P}of l.getRange({start:"z",end:!1,reverse:!0}))try{let D=$t(P);if(D.tableId!==n)continue;let q=D.recordId;if(N==null||hM(N,q)){let $=D.getValue(i,A,M);if(I.push({id:q,timestamp:M,value:$,version:D.version,type:D.type}),--b<=0)break}}catch(D){ot.error("Error getting history entry",M,D)}for(let M=I.length;M>0;)w.send(I[--M]);I[0]&&(w.startTime=I[0].timestamp)}else if(!m.omitCurrent)for(let{key:I,value:M,version:P,localTime:D}of i.getRange({start:N??!1,end:N==null?void 0:[N,aa.MAXIMUM_KEY],versions:!0}))M&&w.send({id:I,version:P,timestamp:D,value:M})}else{b&&!y&&(y=0);let I=this[cn]?.localTime;if(I===jp&&(i.cache?.delete(N),this[cn]=i.getEntry(N),ot.trace("re-retrieved record",I,this[cn]?.localTime),I=this[cn]?.localTime),ot.trace("Subscription from",y,"from",N,I),y<I){let M=[],P=I;do{let D=l.get(P);if(D){m.omitCurrent=!0;let q=$t(D),$=q.getValue(i,A,P);A&&(q.type="put"),M.push({id:N,value:$,timestamp:P,...q}),P=q.previousLocalTime}else break;b&&b--}while(P>y&&b!==0);for(let D=M.length;D>0;)w.send(M[--D]);w.startTime=I}!m.omitCurrent&&this.doesExist()&&w.send({id:N,version:this[Bu],timestamp:I,value:this})}return m.listener&&w.on("data",m.listener),w}doesExist(){return!!(this[ye]||this[Pu])}publish(m,A){this._writePublish(m,A)}_writePublish(m,A){let w=Yr(this[be]),N=this[De]||null;Ol(N);let b=this[be];w.addWrite({key:N,store:i,entry:this[cn],nodeName:b?.nodeName,validate:()=>{this.validate(m)},before:ke.publish?.bind(this,b,N,m),beforeIntermediate:ue.publish?.bind(this,b,N,m),commit:(y,I,M)=>{I===void 0&&h&&!E&&Op(),S(N,I?.value??null,I,I?.version||y,0,!0,b,I?.expiresAt,"message",!1,m)}})}validate(m,A){let w,N=a((b,y,I)=>{if(y.type&&b!=null)if(A&&b.__op__&&(b=b.value),y.properties){typeof b!="object"&&(w||(w=[])).push(`Property ${I} must be an object${y.type?" ("+y.type+")":""}`);let M=y.properties;for(let P=0,D=M.length;P<D;P++){let q=M[P],$=N(b[q.name],q,I+"."+q.name);$&&(b[q.name]=$)}}else switch(y.type){case"Int":(typeof b!="number"||b>>0!==b)&&(w||(w=[])).push(`Property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof b!="number"||!(Math.floor(b)===b&&Math.abs(b)<=9007199254740992))&&(w||(w=[])).push(`Property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(w||(w=[])).push(`Property ${I} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(M=>typeof M=="string")||(w||(w=[])).push(`Property ${I} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(w||(w=[])).push(`Property ${I} must be a string`);break;case"Boolean":typeof b!="boolean"&&(w||(w=[])).push(`Property ${I} must be a boolean`);break;case"Date":if(!(b instanceof Date)){if(typeof b=="string"||typeof b=="number")return new Date(b);(w||(w=[])).push(`Property ${I} must be a Date`)}break;case"BigInt":if(typeof b!="bigint"){if(typeof b=="string"||typeof b=="number")return BigInt(b);(w||(w=[])).push(`Property ${I} must be a bigint`)}break;case"Bytes":b instanceof Uint8Array||(w||(w=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(b)){if(y.elements)for(let M=0,P=b.length;M<P;M++){let D=b[M],q=N(D,y.elements,I+"[*]");q&&(b[M]=q)}}else(w||(w=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break}y.nullable===!1&&b==null&&(w||(w=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let b=0,y=p.length;b<y;b++){let I=p[b];if(!I.relationship&&(!A||I.name in m)){let M=N(m[I.name],I,I.name);M&&(m[I.name]=M)}}if(w)throw new Pn.ClientError(w.join(". "))}getUpdatedTime(){return this[Bu]}wasLoadedFromSource(){return O?!!this[Cg]:void 0}static async addAttributes(m){let A=p.slice(0);for(let w of m){if(!w.name)throw new Pn.ClientError("Attribute name is required");if(w.name.match(/[`/]/))throw new Pn.ClientError("Attribute names cannot include backticks or forward slashes");A.push(w)}return mt({table:s,database:c,schemaDefined:_,attributes:A}),et.indexingOperation}static async removeAttributes(m){let A=p.filter(w=>!m.includes(w.name));return mt({table:s,database:c,schemaDefined:_,attributes:A}),et.indexingOperation}static getRecordCount(m){let A=i.getStats().entryCount,w=5e3,N=1e3,b;A>w&&!m?.exactCount&&(b=N);let y=0;for(let{value:I}of i.getRange({start:!0,lazy:!0,limit:b}))I!=null&&y++;if(b){let I=y;y=0;for(let{value:ie}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:b}))ie!=null&&y++;let M=b*2,P=(y+I)/M,D=Math.pow((y-I+1)/b/2,2)+P*(1-P)/M,q=Math.max(Math.sqrt(D)*A,1),$=Math.round(P*A),fe=Math.max($-1.96*q,0),Ee=Math.min($+1.96*q,A),ne=Math.pow(10,Math.round(Math.log10(q)));return ne>$&&(ne=ne/10),y=Math.round($/ne)*ne,{recordCount:y,estimatedRange:[Math.round(fe),Math.round(Ee)]}}return{recordCount:y}}static updatedAttributes(){Bi=this.propertyResolvers={$id:(m,A,w)=>({value:w.key}),$updatedtime:(m,A,w)=>w.version,$record:(m,A,w)=>w?{value:m}:m};for(let m of this.attributes){m.resolve=null;let A=m.relationship;if(A)if(Lb=!0,A.to)m.elements?.definition?(Bi[m.name]=m.resolve=(w,N,b)=>{let y=w[A.from?A.from:t],I=m.elements.definition.tableClass;return b?ic({attribute:A.to,value:y},Yr(N).getReadTxn(),!1,I).asArray:I.search([{attribute:A.to,value:y}],N).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,A.from&&(m.resolve.from=A.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(A.from){let w=m.definition||m.elements?.definition;w?(Bi[m.name]=m.resolve=(N,b,y)=>{let I=N[A.from];if(I!==void 0){if(m.elements){let M,P=I.map(D=>{let q=y?w.tableClass.primaryStore.getEntry(D,{transaction:Yr(b).getReadTxn()}):w.tableClass.get(D,b);return q?.then&&(M=!0),q});return A.filterMissing?M?Promise.all(P).then(D=>D.filter(mM)):P.filter(mM):M?Promise.all(P):P}return y?w.tableClass.primaryStore.getEntry(I,{transaction:Yr(b).getReadTxn()}):w.tableClass.get(I,b)}},m.set=(N,b)=>{if(Array.isArray(b)){let y=b.map(I=>I[De]||I[w.tableClass.primaryKey]);N[A.from]=y}else{let y=b[De]||b[w.tableClass.primaryKey];N[A.from]=y}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=A.from):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`)}rf(this,this)}static async deleteHistory(m=0){let A;for(let{key:w,value:N}of l.getRange({start:0,end:m}))await vu(),$t(N).tableId===n&&(A=l.remove(w));await A}static async*getHistory(m=0,A=1/0){for(let{key:w,value:N}of l.getRange({start:m,end:A})){await vu();let b=$t(N);b.tableId===n&&(yield{id:b.recordId,localTime:w,version:b.version,type:b.type,value:b.getValue(i,!0,w),user:b.user})}}static async getHistoryOfRecord(m){let A=[];if(m==null)throw new Error("An id is required");let w=i.getEntry(m);if(!w)return A;let N=w.localTime;if(!N)throw new Error("The entry does not have a local audit time");let b=0;do{await vu();let y=l.get(N);if(y){let I=$t(y);A.push({id:I.recordId,localTime:N,version:I.version,type:I.type,value:I.getValue(i,!0,N),user:I.user}),N=I.previousLocalTime}else break}while(b<1e3&&N);return A.reverse()}static cleanup(){K?.remove()}}et.updatedAttributes();let X$=et.prototype;return X$[WZ]=!0,d&&et.setTTLExpiration(d/1e3),j&&Z$(),et;function Nd(W,m,A){let w;for(let N in r){let b=r[N],y=b.isIndexing,I=A?.[N],M=m?.[N];if(I===M&&!y)continue;w=!0;let P=b.indexNulls,D=(0,Hu.getIndexedValues)(M,P);if(D){_M&&b.prefetch(D.map(q=>({key:q,value:W})),EM);for(let q=0,$=D.length;q<$;q++)b.remove(D[q],W)}if(D=(0,Hu.getIndexedValues)(I,P),D){_M&&b.prefetch(D.map(q=>({key:q,value:W})),EM);for(let q=0,$=D.length;q<$;q++)b.put(D[q],W)}}return w}a(Nd,"updateIndices");function Ol(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>fM)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,aa.writeKey)(W,jZ,0)>fM)throw new Error("Primary key size is too large: "+W.length);return!0}a(Ol,"checkValidId");function gp(W,m,A,w,N){let b=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),A.transaction?.isDone)return N(null,W);let y=i.getEntry(W,A);return y&&m&&(y?.version>(m.lastModified||0)&&(m.lastModified=y.version),y?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=y.localTime)),N(y,W)},"whenPrefetched");return w?b():Te>0?(Te--,b()):new Promise((y,I)=>{Te===0?(Te--,i.prefetch([W],()=>{M(),P()})):(z.push(W),oe.push(P),z.length>J$&&(Te--,M()));function M(){if(z.length>0){let D=oe;i.prefetch(z,()=>{Te===-1?M():Te++;for(let q of D)q()}),z=[],oe=[],ce>2&&ce--}else Te=ce,ce<z$&&ce++}a(M,"prefetch");function P(){try{y(b())}catch(D){I(D)}}a(P,"load")})}a(gp,"loadLocalRecord");function bd(W){if(!W?.role)return;let m=W.role.permission;if(m.super_user)return zZ;let A=m[c],w,N=A?.tables;if(N)return N[s];if(c==="data"&&(w=m[s])&&!w.tables)return w}a(bd,"getTablePermissions");function Rp(W,m,A,w){if(O){let N;if(A.noCache?N=!0:(m?(!m.value||m.metadataFlags&(Mu|Uu)||m.expiresAt&&m.expiresAt<Date.now())&&(N=!0):N=!0,Dn(!N,"cache-hit",s)),N){let b=Pb(W,m,A).then(y=>(y?.value?.[ye]&&ot.error("Can not assign a record with a record property"),A&&(y?.version>(A.lastModified||0)&&(A.lastModified=y.version),A.lastRefreshed=Date.now()),y));if(A?.onlyIfCached||m?.value&&w?.allowStaleWhileRevalidate?.(m,W)){if(b.catch(y=>ot.warn(y)),A?.onlyIfCached&&!w.doesExist())throw new Pn.ServerError("Entry is not cached",504);return}else return b}}}a(Rp,"ensureLoadedFromSource");function Yr(W){let m=W?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let A=m.next;if(!A)return m=m.next=new xo,m.lmdbDb=i,m;m=A}while(!0)}else return new of}a(Yr,"txnForContext");function Ap(W,m,A){if(!W)return;Tp=W;let w=W.value||W.deref?.()||(Tp=i.getEntry(W.key))?.value;if(typeof m=="object"){let b=Bi,y=w;for(let I=0,M=m.length;I<M;I++){let P=m[I],D=b?.[P];y=D&&y?D(y,A,!0)?.value:y?.[P],b=D?.definition?.tableClass?.propertyResolvers}return y}let N=Bi[m];return N?N(w,A):w[m]}a(Ap,"getAttributeValue");function Db(W,m,A,w){let N=Yr(A).getReadTxn(),b=w?.length,y={transaction:N,lazy:b>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},I;function M(P,D){let q=P?.value;if(!q)return ia.SKIP;for(let $=0;$<b;$++)if(!I?.includes($)&&!w[$](q,P))return ia.SKIP;return D!==void 0&&(P.key=D),P}if(a(M,"processEntry"),b>0||!W.hasEntries){let P=W.map(D=>{if(I=null,typeof D=="object"&&D.key!==void 0)return b>0?M(D):D;if(D==null)return ia.SKIP;for(let q=0;q<b;q++){let fe=w[q].idFilter;if(fe){if(!fe(D))return ia.SKIP;I||(I=[]),I.push(q)}}return gp(D,A,y,!1,M)});return Array.isArray(W)&&(P=P.filter(D=>D!==ia.SKIP)),P.hasEntries=!0,P}return W}a(Db,"transformToEntries");async function Pb(W,m,A){let w=m?.metadataFlags,N=m?.version,b,y;if(!i.attemptLock(W,N,()=>{clearTimeout(y);let D=i.getEntry(W);!D||!D.value||D.metadataFlags&(Mu|Uu)?b(Pb(W,i.getEntry(W),A)):b(D)}))return new Promise(D=>{b=D,y=setTimeout(()=>{i.unlock(W,N)},KZ)});let I=m?.value,M={requestContext:A,replacingRecord:I,replacingVersion:N,source:null,resourceCache:A?.resourceCache},P=A?.responseHeaders;return new Promise((D,q)=>{let $;Dg(tt(M,async fe=>{let Ee=performance.now(),ne,ie,qe;try{for(let Ue of et.sources)if(Ue.get&&(!Ue.get.reliesOnPrototype||Ue.prototype.get)&&(M.source=Ue,ne=await Ue.get(W,M),ne))break;qe=w&Mu;let he=M.lastModified||qe&&N;ie=qe||he>N||!I,he||(he=(0,Hu.getNextMonotonicTime)());let ze=performance.now()-Ee;if(an(ze,"cache-resolution",s),P&&P.append("Server-Timing",`cache-resolve;dur=${ze.toFixed(2)}`),fe.timestamp=he,d&&!M.expiresAt&&(M.expiresAt=Date.now()+d),ne){if(typeof ne!="object")throw new Error("Only objects can be cached and stored in tables");typeof ne.toJSON=="function"&&(ne=ne.toJSON()),t&&ne[t]!==W&&(ne[t]=W)}$=!0,D({version:he,value:ne})}catch(he){he.message+=` while resolving record ${W} for ${s}`,I&&((he.code==="ECONNRESET"||he.code==="ECONNREFUSED"||he.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(he.statusCode===500||he.statusCode===502||he.statusCode===503||he.statusCode===504))?(D({version:N,value:I}),ot.trace(he.message,"(returned stale record)")):q(he),M.transaction.abort();return}if(A?.noCacheStore){M.transaction.abort();return}Yr(M).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:(he,ze)=>{if(ze?.version!==N)return;let Ue=Nd(W,I,ne);ne?(ue.put?.(M,W,ne),S(W,ne,ze,he,0,E&&ie||null,M,M.expiresAt,"put",!!qe)):(ue.delete?.(M,W),E||h?S(W,null,ze,he,0,E&&ie||null,M,0,"delete",!!qe):i.remove(W,N))}})}),()=>{i.unlock(W,N)},fe=>{i.unlock(W,N),$&&ot.error("Error committing cache update",fe)})})}a(Pb,"getFromSource");function Op(){if(Gt!==Ad&&(Ad=Gt,(0,oa.getWorkerIndex)()===(0,oa.getWorkerCount)()-1)){if(Od&&clearTimeout(Od),!Gt)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let m=Math.ceil((Date.now()-W.getTime())/Gt)*Gt+W.getTime(),A=a(w=>{ot.trace(`Scheduled next cleanup scan at ${new Date(w)}ms`),Od=setTimeout(()=>G=G.then(async()=>{if(A(Math.max(w+Gt,Date.now())),i.rootStore.status!=="open"){clearTimeout(Od);return}let N=50,b=new Array(N),y=0;ot.trace(`Starting cleanup scan for ${s}`);try{let I=0;for(let{key:M,value:P,version:D,expiresAt:q}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let $;P===null&&!E&&D+YZ<Date.now()?$=i.remove(M,D):q&&q+f<Date.now()&&($=et.evict(M,P,D),I++),$&&(await b[y],b[y]=$.catch(fe=>{ot.error("Cleanup error",fe)}),++y>=N&&(y=0)),await vu()}ot.trace(`Finished cleanup scan for ${s}, evicted ${I} entries`)}catch(I){ot.trace(`Error in cleanup scan for ${s}:`,I)}}),Math.min(w-Date.now(),2147483647)).unref()},"startNextTimer");A(m)}}a(Op,"scheduleCleanup");function Mb(){K=l?.addDeleteRemovalCallback(n,W=>{let m=i.getEntry(W);m?.value===null&&i.remove(W,m.version)})}a(Mb,"addDeleteRemoval");function Z$(){(0,oa.getWorkerIndex)()===0&&setInterval(async()=>{try{let W=j.name,m=r[W];if(!m)throw new Error(`expiresAt attribute ${j} must be indexed`);for(let{value:A}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let w=i.getEntry(A);w?.value?.[W]<Date.now()&&et.evict(A,w.value,w.version),await vu()}}catch(W){ot.error("Error in evicting old records",W)}},VZ).unref()}a(Z$,"runRecordExpirationEviction")}function Lg(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 EM(){}function JZ(e){SM=e}function dE(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Date"?(typeof e!="number"&&!XZ.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,EE.autoCast)(e):e}function hM(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 Dg(e,t,r){return e?.then?e.then(t,r):t(e)}function fE(e,t){e[cn]=t,e[ye]=t?.value??null,e[Bu]=t?.version}function mM(e){return e!=null}var as,ia,Hu,pM,Fu,Pn,qu,xu,ot,aa,oa,EE,$Z,SM,VZ,YZ,_M,KZ,Bu,WZ,cn,Pu,dM,QZ,Cg,bc,Mu,Uu,jZ,fM,zZ,wge,XZ,vu,mE=Ne(()=>{as=H(C()),ia=require("lmdb"),Hu=H(mr()),pM=require("lodash");jn();aS();Fu=H(J());bI();Pn=H(te()),qu=H(ii()),xu=H(Zn());Ae();lf();ot=H(F());sf();Fo();aa=require("ordered-binary"),oa=H(st());Bo();EE=H(Y());ec();ui();jd();$Z=new Uint8Array(9);$Z[8]=192;VZ=6e4,YZ=864e5;Fu.initSync();_M=Fu.get(as.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),KZ=1e4,Bu=Symbol.for("version"),WZ=Symbol.for("incremental-update"),cn=Symbol("entry"),Pu=Symbol("is-saving"),dM=1,QZ=2,Cg=Symbol("loaded-from-source"),bc={isNotification:!0,ensureLoaded:!1},Mu=1,Uu=8,jZ=Buffer.allocUnsafeSlow(8192),fM=1978,zZ={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},wge=(0,EE.convertToMS)(Fu.get(as.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(hE,"makeTable");a(Lg,"attributesAsObject");a(EM,"noop");a(JZ,"setServerUtilities");XZ=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(dE,"coerceType");a(hM,"isDescendantId");vu=a(()=>new Promise(setImmediate),"rest");a(Dg,"when");a(fE,"updateResource");a(mM,"exists")});var Ge={};$e(Ge,{database:()=>Su,databases:()=>ct,dropDatabase:()=>xT,dropTableMeta:()=>s5,getDatabases:()=>rs,getTables:()=>ZZ,onUpdatedTable:()=>Hg,readMetaDb:()=>Gu,resetDatabases:()=>e5,table:()=>mt,tables:()=>un});function ZZ(){return RE||rs(),un||{}}function rs(){if(RE)return ct;RE=!0,wc=new Map;let e=(0,or.getHdbBasePath)()&&(0,at.join)((0,or.getHdbBasePath)(),_n.DATABASES_DIR_NAME),t=(0,or.get)(_n.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)(_n.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,ln.existsSync)(e)?e:(0,at.join)((0,or.getHdbBasePath)(),_n.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,ln.existsSync)(e))for(let r of(0,ln.readdirSync)(e,{withFileTypes:!0})){let n=(0,at.basename)(r.name,".mdb");r.isFile()&&(0,at.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Gu((0,at.join)(e,r.name),null,n)}if((0,ln.existsSync)((0,Ic.getBaseSchemaPath)())){for(let r of(0,ln.readdirSync)((0,Ic.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,at.join)((0,Ic.getBaseSchemaPath)(),r.name),s=(0,at.join)((0,Ic.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,ln.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,at.extname)(i.name).toLowerCase()===".mdb"){let o=(0,at.join)(s,i.name);Gu((0,at.join)(n,i.name),(0,at.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,ln.existsSync)(s))for(let o of(0,ln.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,at.extname)(o.name).toLowerCase()===".mdb"&&Gu((0,at.join)(s,o.name),(0,at.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,at.join)(c.path,(0,at.basename)(o+".mdb"));(0,ln.existsSync)(l)&&Gu(l,o,r,null,!0)}}for(let r in ct){let n=wc.get(r);if(n){let s=ct[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 ct[r],r==="data"){for(let s in un)delete un[s];delete un[AE]}}return wc=null,ct}}function e5(){RE=!1;for(let[,e]of to)e.needsDeletion=!0;rs();for(let[e,t]of to)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),to.delete(e));return ct}function Gu(e,t,r=vg,n,s){let i=new Mg.default(e,!1);try{let o=to.get(e);o?o.needsDeletion=!1:(o=(0,SE.open)(i),to.set(e,o));let c=new ca.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(pE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,ln.existsSync)(n)&&(i.path=n,_=(0,SE.open)(i),_.isLegacy=!0):_=Qd(o));let u=AM(r),d=u[AE],f=new Map;for(let{key:E,value:h}of l.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let R=f.get(p);R||f.set(p,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:p,primary:S}=h;if(!S){for(let z of p)if(z.is_hash_attribute||z.isPrimaryKey){S=z;break}if(!S){Mn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let R=u[E],g={},O=[],v,G,B=typeof S.audit=="boolean"?S.audit:(0,or.get)(_n.CONFIG_PARAMS.LOGGING_AUDITLOG),U=S.trackDeletes,j=S.expiration,K=S.eviction;if(R)g=R.indices,O=R.attributes,R.schemaVersion++;else{v=S.tableId,v?v>=(l.get(yc)||0)&&l.putSync(yc,v+1):(S.tableId=v=l.get(yc),v||(v=1),l.putSync(yc,v+1),l.putSync(S.key,S));let z=new ca.default(!S.is_hash_attribute,S.is_hash_attribute);G=Vd(o.openDB(S.key,z)),G.rootStore=o,G.tableId=v}for(let z of p){z.attribute=z.name;try{if(!z.is_hash_attribute&&(z.indexed||z.attribute&&!z.name)){if(!g[z.name]){let Te=new ca.default(!z.is_hash_attribute,z.is_hash_attribute);g[z.name]=o.openDB(z.key,Te),g[z.name].indexNulls=z.indexNulls}let oe=O.find(Te=>Te.name===z.name);oe?O.splice(O.indexOf(oe),1,z):O.push(z)}}catch(oe){Mn.error("Error trying to update attribute",z,O,g,oe)}}if(!R){R=OM(u,E,hE({primaryStore:G,auditStore:_,audit:B,expirationMS:j&&j*1e3,evictionMS:K&&K*1e3,trackDeletes:U,tableName:E,tableId:v,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:g,attributes:p,schemaDefined:S.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let z of Bg)z(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function AM(e){let t=ct[e];if(t||(e==="data"?t=ct[e]=un:e==="system"?Object.defineProperty(ct,"system",{value:t=Object.create(null),configurable:!0}):t=ct[e]=Object.create(null)),wc&&!wc.has(e)){let r=new Set;t[AE]=r,wc.set(e,r)}return t}function OM(e,t,r){return e[t]=r,r}function Su({database:e,table:t}){e||(e=vg),rs();let r=AM(e),n=(0,at.join)((0,or.getHdbBasePath)(),_n.DATABASES_DIR_NAME),s=(0,or.get)(_n.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)(_n.CONFIG_PARAMS.STORAGE_PATH)||((0,ln.existsSync)(n)?n:(0,at.join)((0,or.getHdbBasePath)(),_n.LEGACY_DATABASES_DIR_NAME));let o=(0,at.join)(n,(i?t:e)+".mdb"),c=to.get(o);if(!c){let l=new Mg.default(o,!1);c=(0,SE.open)(l),to.set(o,c)}return c}async function xT(e){if(!ct[e])throw new Error("Schema does not exist");let t=ct[e];for(let r in t){let s=t[r].primaryStore.rootStore;to.delete(s.path),s.status==="open"&&(await s.close(),await TM.remove(s.path))}if(e==="data"){for(let r in un)delete un[r];delete un[AE]}delete ct[e]}function mt({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,trackDeletes:c,schemaDefined:l,origin:_}){t||(t=vg);let u=Su({database:t,table:e}),d=ct[t],f=d?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;l==null&&(l=!0);let R=new ca.default(!1);for(let U of i)U.attribute?(U.name=U.attribute,U.indexed=!0):U.attribute=U.name,U.expiresAt&&(U.indexed=!0);let g,O;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 U=u.auditStore;U||(U=Qd(u)),h=i.find(oe=>oe.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=l,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,or.get)(_n.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),n&&(h.eviction=n),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Mn.trace(`${e} table loading, opening primary store`);let j=new ca.default(!1,!0),K=e+"/",z=Vd(u.openDB(K,j));z.rootStore=u,S=u.dbisDb=u.openDB(pE.INTERNAL_DBIS_NAME,R),z.tableId=S.get(yc),z.tableId||(z.tableId=1),S.putSync(yc,z.tableId+1),h.tableId=z.tableId,f=OM(d,e,hE({primaryStore:z,auditStore:U,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:E,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:l,dbisDB:S})),f.schemaVersion=1,g=!0,B(),S.put(K,h)}p=f.indices,S=S||(u.dbisDb=u.openDB(pE.INTERNAL_DBIS_NAME,R)),f.dbisDB=S;let v=[];for(let{key:U,value:j}of S.getRange({start:!0})){let[K,z]=U.toString().split("/");if(z===""&&(z=j.name),z){if(K!==e)continue}else z=K;if(!i.find(Te=>Te.name===z)?.indexed&&j.indexed&&!j.isPrimaryKey){B(),g=!0,S.remove(U);let Te=f.indices[K];Te&&v.push(Te)}}let G=[];try{for(let U of i||[]){if(U.relationship)continue;let j=e+"/"+(U.name||"");Object.defineProperty(U,"key",{value:j,configurable:!0});let K=S.get(j);if(U.isPrimaryKey){if(K=K||S.get(j=e+"/")||{},o!==f.audit||(+r||void 0)!==(+K.expiration||void 0)||(+n||void 0)!==(+K.eviction||void 0)){let oe=Object.assign({},K);typeof o=="boolean"&&(o&&f.enableAuditing(o),oe.audit=o),r&&(oe.expiration=+r),n&&(oe.eviction=+n),g=!0,B(),S.put(j,oe)}continue}K?.attribute&&!K.name&&(K.indexed=!0);let z=!K||K.type!==U.type||K.indexed!==U.indexed||JSON.stringify(K.attributes)!==JSON.stringify(U.attributes)||JSON.stringify(K.elements)!==JSON.stringify(U.elements);if(U.indexed){let oe=new ca.default(!0,!1),Te=u.openDB(j,oe);(z||K.indexingPID&&K.indexingPID!==process.pid||K.restartNumber<ku.workerData?.restartNumber)&&(g=!0,B(),K=S.get(j),(z||K.indexingPID&&K.indexingPID!==process.pid||K.restartNumber<ku.workerData?.restartNumber)&&(g=!0,U.lastIndexedKey=K?.lastIndexedKey||!1,U.indexingPID=process.pid,Te.isIndexing=!0,Object.defineProperty(U,"dbi",{value:Te}),U.indexNulls===void 0&&(U.indexNulls=!0),G.push(U)),S.put(j,U)),K?.indexNulls&&U.indexNulls===void 0&&(U.indexNulls=!0),Te.indexNulls=U.indexNulls,p[U.name]=Te}else z&&(g=!0,B(),S.put(j,U))}}finally{O&&O()}if(g&&(f.schemaVersion++,f.updatedAttributes()),Mn.trace(`${e} table loading, running index`),G.length>0||v.length>0?f.indexingOperation=n5(f,G,v):g&&TE.signalSchemaChange(new gE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,g)for(let U of Bg)U(f,_!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),Mn.trace(`${e} table loaded`),f;function B(){O||u.transactionSync(()=>({then(U){O=U}}))}a(B,"startTxn")}async function n5(e,t,r){try{let n=e.schemaVersion;await TE.signalSchemaChange(new gE.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,p=(0,gM.getIndexedValues)(u[h]);if(p)for(let S=0,R=p.length;S<R;S++)E.dbi.put(p[S],_)}}),s.then(()=>l--,f=>{l--,Mn.error(f)}),ku.workerData&&ku.workerData.restartNumber!==RM.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}l>t5?await s:l>r5&&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 TE.signalSchemaChange(new gE.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=Su({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 Hg(e){Bg.push(e)}var or,pE,SE,at,ln,Ic,ca,Mg,_n,TM,Ug,gM,TE,gE,ku,Mn,RM,vg,AE,un,ct,yc,Bg,RE,to,wc,t5,r5,Ae=Ne(()=>{or=H(J()),pE=H(Et()),SE=require("lmdb"),at=require("path"),ln=require("fs"),Ic=H(Xe());mE();ca=H(Ef()),Mg=H(mf()),_n=H(C()),TM=H(require("fs-extra")),Ug=require("../index"),gM=H(mr()),TE=H(ii()),gE=H(Zn()),ku=require("worker_threads"),Mn=H(F()),RM=H(st());Bo();ec();vg="data",AE=Symbol("defined-tables");(0,or.initSync)();un=Object.create(null),ct=Object.create(null);(0,Ug._assignPackageExport)("databases",ct);(0,Ug._assignPackageExport)("tables",un);yc=Symbol.for("next-table-id"),Bg=[],to=new Map;a(ZZ,"getTables");a(rs,"getDatabases");a(e5,"resetDatabases");a(Gu,"readMetaDb");a(AM,"ensureDB");a(OM,"setTable");a(Su,"database");a(xT,"dropDatabase");a(mt,"table");t5=1e3,r5=10;a(n5,"runIndexing");a(s5,"dropTableMeta");a(Hg,"onUpdatedTable")});var Y=T((Hge,HM)=>{"use strict";var ro=require("path"),wM=require("fs-extra"),yr=F(),NM=require("fs-extra"),OE=require("os"),i5=require("net"),o5=require("recursive-iterator"),lt=C(),a5=Hp(),bM=require("papaparse"),NE=require("moment"),{inspect:c5}=require("util"),yM=require("is-number"),Bge=require("lodash"),l5=require("minimist"),u5=require("https"),_5=require("http"),{hdb_errors:bE}=te(),d5=/^((\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)))$/,CM=require("util").promisify(setTimeout),f5=100,E5=5,h5="",m5=4,IM={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};HM.exports={isEmpty:dn,isEmptyOrZeroLength:Ds,arrayHasEmptyValues:T5,arrayHasEmptyOrZeroLengthValues:g5,buildFolderPath:R5,isBoolean:LM,errorizeMessage:p5,stripFileExtension:O5,autoCast:N5,autoCastJSON:DM,autoCastJSONDeep:xg,removeDir:b5,compareVersions:y5,isCompatibleDataVersion:I5,escapeRawValue:w5,unescapeValue:C5,stringifyProps:L5,timeoutPromise:P5,isClusterOperation:U5,getClusterUser:B5,checkGlobalSchemaTable:v5,getHomeDir:MM,getPropsFilePath:D5,promisifyPapaParse:H5,removeBOM:UM,createEventPromise:q5,checkProcessRunning:x5,checkSchemaTableExist:F5,checkSchemaExists:vM,checkTableExists:BM,getStartOfTomorrowInSeconds:G5,getLimitKey:k5,isObject:A5,isNotEmptyAndHasValue:S5,autoCasterIsNumberCheck:PM,backtickASTSchemaItems:$5,isPortTaken:M5,createForkArgs:V5,autoCastBoolean:Y5,async_set_timeout:CM,getTableHashAttribute:K5,doesSchemaExist:W5,doesTableExist:Q5,stringifyObj:j5,ms_to_time:z5,changeExtension:J5,getEnvCliRootPath:Fg,noBootFile:X5,httpRequest:Z5,transformReq:e8,convertToMS:t8,PACKAGE_ROOT:lt.PACKAGE_ROOT};function p5(e){return e instanceof Error?e:new Error(e)}a(p5,"errorizeMessage");function dn(e){return e==null}a(dn,"isEmpty");function S5(e){return!dn(e)&&(e||e===0||e===""||LM(e))}a(S5,"isNotEmptyAndHasValue");function Ds(e){return dn(e)||e.length===0||e.size===0}a(Ds,"isEmptyOrZeroLength");function T5(e){if(dn(e))return!0;for(let t=0;t<e.length;t++)if(dn(e[t]))return!0;return!1}a(T5,"arrayHasEmptyValues");function g5(e){if(Ds(e))return!0;for(let t=0;t<e.length;t++)if(Ds(e[t]))return!0;return!1}a(g5,"arrayHasEmptyOrZeroLengthValues");function R5(...e){try{return e.join(ro.sep)}catch{console.error(e)}}a(R5,"buildFolderPath");function LM(e){return dn(e)?!1:e===!0||e===!1}a(LM,"isBoolean");function A5(e){return dn(e)?!1:typeof e=="object"}a(A5,"isObject");function O5(e){return Ds(e)?h5:e.slice(0,-m5)}a(O5,"stripFileExtension");function N5(e){return dn(e)||e===""||typeof e!="string"?e:IM[e]!==void 0?IM[e]:PM(e)===!0?Number(e):d5.test(e)?new Date(e):e}a(N5,"autoCast");function DM(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(DM,"autoCastJSON");function xg(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=xg(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=xg(r);n!==r&&(e[t]=n)}return e}else return DM(e)}a(xg,"autoCastJSONDeep");function PM(e){if(e.startsWith("0.")&&yM(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&yM(e))}a(PM,"autoCasterIsNumberCheck");async function b5(e){if(Ds(e))throw new Error(`Directory path: ${e} does not exist`);try{await NM.emptyDir(e),await NM.remove(e)}catch(t){throw yr.error(`Error removing files in ${e} -- ${t}`),t}}a(b5,"removeDir");function y5(e,t){if(Ds(e)){yr.info("Invalid current version sent as parameter.");return}if(Ds(t)){yr.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(y5,"compareVersions");function I5(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(I5,"isCompatibleDataVersion");function w5(e){if(dn(e))return e;let t=String(e);return t==="."?lt.UNICODE_PERIOD:t===".."?lt.UNICODE_PERIOD+lt.UNICODE_PERIOD:t.replace(lt.FORWARD_SLASH_REGEX,lt.UNICODE_FORWARD_SLASH)}a(w5,"escapeRawValue");function C5(e){if(dn(e))return e;let t=String(e);return t===lt.UNICODE_PERIOD?".":t===lt.UNICODE_PERIOD+lt.UNICODE_PERIOD?"..":String(e).replace(lt.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(C5,"unescapeValue");function L5(e,t){if(dn(e))return yr.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+OE.EOL}!Ds(n)&&n[0]===";"?r+=" "+n+s+OE.EOL:Ds(n)||(r+=n+"="+s+OE.EOL)}catch{yr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(L5,"stringifyProps");function MM(){let e;try{e=OE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(MM,"getHomeDir");function D5(){let e=ro.join(MM(),lt.HDB_HOME_DIR_NAME,lt.BOOT_PROPS_FILE_NAME);return wM.existsSync(e)||(e=ro.join(__dirname,"../","hdb_boot_properties.file")),e}a(D5,"getPropsFilePath");function P5(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(P5,"timeoutPromise");async function M5(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=i5.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(M5,"isPortTaken");function U5(e){try{return lt.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){yr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(U5,"isClusterOperation");function v5(e,t){let r=(Ae(),re(Ge)).getDatabases();if(!r[e])return bE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return bE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(v5,"checkGlobalSchemaTable");function B5(e,t){if(dn(t)){yr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(dn(e)||Ds(e)){yr.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){yr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){yr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(B5,"getClusterUser");function H5(){bM.parsePromise=function(e,t,r){return new Promise(function(n,s){bM.parse(e,{header:!0,transformHeader:UM,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(H5,"promisifyPapaParse");function UM(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(UM,"removeBOM");function q5(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;yr.info(`Got cluster status event response: ${c5(s)}`);try{i.cancel()}catch{yr.error("Error trying to cancel timeout.")}n(s)})})}a(q5,"createEventPromise");async function x5(e){let t=!0,r=0;do await CM(f5*r++),(await a5.findPs(e)).length>0&&(t=!1);while(t&&r<E5);if(t)throw new Error(`process ${e} was not started`)}a(x5,"checkProcessRunning");function F5(e,t){let r=vM(e);if(r)return r;let n=BM(e,t);if(n)return n}a(F5,"checkSchemaTableExist");function vM(e){let{getDatabases:t}=(Ae(),re(Ge));if(!t()[e])return bE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(vM,"checkSchemaExists");function BM(e,t){let{getDatabases:r}=(Ae(),re(Ge));if(!r()[e][t])return bE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(BM,"checkTableExists");function G5(){let e=NE().utc().add(1,lt.MOMENT_DAYS_TAG).startOf(lt.MOMENT_DAYS_TAG).unix(),t=NE().utc().unix();return e-t}a(G5,"getStartOfTomorrowInSeconds");function k5(){return NE().utc().format("DD-MM-YYYY")}a(k5,"getLimitKey");function $5(e){try{let t=new o5(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){yr.error("Got an error back ticking items."),yr.error(t)}}a($5,"backtickASTSchemaItems");function V5(e){return[e]}a(V5,"createForkArgs");function Y5(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Y5,"autoCastBoolean");function K5(e,t){let{getDatabases:r}=(Ae(),re(Ge)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(K5,"getTableHashAttribute");function W5(e){let{getDatabases:t}=(Ae(),re(Ge));return t()[e]!==void 0}a(W5,"doesSchemaExist");function Q5(e,t){let{getDatabases:r}=(Ae(),re(Ge));return r()[e]?.[t]!==void 0}a(Q5,"doesTableExist");function j5(e){try{return JSON.stringify(e)}catch{return e}}a(j5,"stringifyObj");function z5(e){let t=NE.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(z5,"ms_to_time");function J5(e,t){let r=ro.basename(e,ro.extname(e));return ro.join(ro.dirname(e),r+t)}a(J5,"changeExtension");function Fg(){if(process.env[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=l5(process.argv);if(e[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(Fg,"getEnvCliRootPath");var qg;function X5(){if(qg)return qg;let e=Fg();Fg()&&wM.pathExistsSync(ro.join(e,lt.HDB_CONFIG_FILE))&&(qg=!0)}a(X5,"noBootFile");function Z5(e,t){let r;return e.protocol==="http:"?r=_5:r=u5,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(Z5,"httpRequest");function e8(e){if(!e.schema&&!e.database){e.schema=lt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(e8,"transformReq");function t8(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(t8,"convertToMS")});var J=T((xge,GM)=>{"use strict";var Gg=require("fs-extra"),la=require("path"),qM=require("os"),r8=require("properties-reader"),Vu=F(),$u=Y(),le=C(),yE=pt(),n8="Error initializing environment manager",IE="BOOT_PROPS_FILE_PATH",xM=!1,s8={[le.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},_i={};GM.exports={BOOT_PROPS_FILE_PATH:IE,getHdbBasePath:i8,setHdbBasePath:o8,get:FM,initSync:c8,setProperty:Pe,initTestEnvironment:l8};function i8(){return _i[le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(i8,"getHdbBasePath");function o8(e){_i[le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(o8,"setHdbBasePath");function FM(e){let t=yE.getConfigValue(e);return t===void 0?_i[e]:t}a(FM,"get");function Pe(e,t){s8[e]&&(_i[e]=t),yE.updateConfigObject(e,t)}a(Pe,"setProperty");function a8(){let e;try{e=$u.getPropsFilePath(),Gg.accessSync(e,Gg.constants.F_OK|Gg.constants.R_OK),xM=!0;let t=r8(e);return _i[le.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(le.HDB_SETTINGS_NAMES.INSTALL_USER),_i[le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),_i[IE]=e,!0}catch{return Vu.trace(`Environment manager found no properties file at ${e}`),!1}}a(a8,"doesPropFileExist");function c8(e=!1){try{(xM||a8()||$u.noBootFile())&&(yE.initConfig(e),_i[le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=yE.getConfigValue(le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Vu.error(n8),Vu.error(t),console.error(t),process.exit(1)}}a(c8,"initSync");function l8(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=la.join(__dirname,"../../","unitTests");_i[IE]=la.join(l,"hdb_boot_properties.file"),Pe(le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,la.join(l,"settings.test")),Pe(le.HDB_SETTINGS_NAMES.INSTALL_USER,qM.userInfo()?qM.userInfo().username:void 0),Pe(le.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Pe(le.HDB_SETTINGS_NAMES.LOG_PATH_KEY,la.join(l,"envDir","log")),Pe(le.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Pe(le.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Pe(le.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Pe(le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,la.join(l,"envDir")),Pe(le.CONFIG_PARAMS.STORAGE_PATH,la.join(l,"envDir")),s&&(Pe(le.CONFIG_PARAMS.HTTP_SECUREPORT,FM(le.CONFIG_PARAMS.HTTP_PORT)),Pe(le.CONFIG_PARAMS.HTTP_PORT,null)),Pe(le.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Pe(le.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Pe(le.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,$u.isEmpty(i)?!1:i),Pe(le.CONFIG_PARAMS.HTTP_CORS,$u.isEmpty(i)?!1:i),Pe(le.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Pe(le.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Pe(le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Pe(le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Pe(le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,la.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Pe(le.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,$u.isEmpty(c)?!1:c),o&&(Pe("CORS_ACCESSLIST",o),Pe(le.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Pe(le.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Pe(le.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Pe(le.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Pe(le.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Pe(le.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Pe(le.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${IE}. Please check your boot props and settings files`;Vu.fatal(r),Vu.error(t)}}a(l8,"initTestEnvironment")});var $g={};$e($g,{loadGQLSchema:()=>d8,start:()=>kg,startOnMainThread:()=>_8});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 G=function(B){if(B.kind==="NonNullType"){let K=G(B.type);return K.nullable=!1,K}if(B.kind==="ListType")return{type:"array",elements:G(B.type)};let j={type:B.name?.value};return Object.defineProperty(j,"location",{value:B.loc.startToken}),j};a(G,"getProperty");let R=S.name.value,g=[],O={table:null,database:null,properties:g};f.set(R,O);for(let B of S.directives){if(B.name.value==="table"){for(let U of B.arguments)O[U.name.value]=U.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=R),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,E.push(O)}if(B.name.value==="sealed"&&(O.sealed=!0),B.name.value==="export"){O.export=!0;for(let U of B.arguments)U.name.value==="name"&&(O.export={name:U.value.value})}}let v=!1;for(let B of S.fields){let U=G(B.type);U.name=B.name.value,g.push(U);for(let j of B.directives)if(j.name.value==="primaryKey")v?console.warn("Can not define two attributes as a primary key"):(U.isPrimaryKey=!0,v=!0);else if(j.name.value==="indexed")U.indexed=!0;else if(j.name.value==="relationship"){let K={};for(let z of j.arguments)K[z.name.value]=z.value.value;U.relationship=K}else if(j.name.value==="createdTime")U.assignCreatedTime=!0;else if(j.name.value==="updatedTime")U.assignUpdatedTime=!0;else if(j.name.value==="expiresAt")U.expiresAt=!0;else if(j.name.value==="allow"){let K=U.authorizedRoles=[];for(let z of j.arguments)z.name.value==="role"&&K.push(z.value.value)}}O.type=R,R==="Query"&&(h=O)}function p(S){let R=f.get(S.type);R?(Object.defineProperty(S,"properties",{value:R.properties}),Object.defineProperty(S,"definition",{value:R})):S.type==="array"?p(S.elements):u8.includes(S.type)||(0,kM.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(p,"connectPropertyType");for(let S of f.values())for(let R of S.properties)p(R);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,wE.dirname)(n),S.tableClass):i.set((0,wE.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass));if(h)for(let S of h.properties){let R=f.get(S.type);if(!R)throw new Error(`${S.type} was not found as a Query export`);i.set((0,wE.dirname)(n)+"/"+S.name,R.tableClass)}}}var wE,kM,u8,_8,d8,$M=Ne(()=>{wE=require("path");Ae();kM=H(st()),u8=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(kg,"start");_8=kg,d8=kg({ensureTable:mt}).handleFile});async function CE(e){return f8?(Yu||(Yu=E8(m8)),(await(await Yu).import(e)).namespace):import(e)}async function E8(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Yu=new Compartment({console,Math,Date,fetch:h8,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,YM.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:un,databases:ct})}};let n=await(0,VM.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Yu}function h8(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 m8(){return{Resource:jt,tables:un}}var VM,YM,f8,Yu,Vg=Ne(()=>{jn();Ae();VM=require("fs/promises"),YM=require("path"),f8=!1;a(CE,"secureImport");a(E8,"getCompartment");a(h8,"secureOnlyFetch");a(m8,"getGlobalVars")});var Kg={};$e(Kg,{handleFile:()=>p8});async function p8(e,t,r,n){let s=new Map,i=(0,KM.pathToFileURL)(r).toString(),o=await CE(i);l(o.default)&&n.set((0,Yg.dirname)(t),o.default),c(o,(0,Yg.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 KM,Yg,WM=Ne(()=>{KM=require("url");Vg();Yg=require("path");a(p8,"handleFile")});var Qg={};$e(Qg,{start:()=>S8});function S8({resources:e}){e.set("login",Wg),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Wg,QM=Ne(()=>{jn();a(S8,"start");Wg=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 tU={};$e(tU,{parse:()=>zg,streamAsJSON:()=>Ku,stringify:()=>ua});function Ku(e){return new jg({value:e})}function jM(e){return console.error(e),JSON.stringify(e.toString())}function zM(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function ua(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===ZM)return eU(e);if(t.resolution)return t.resolution.then(()=>ua(e));throw t}}function eU(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+=eU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+ua(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function zg(e){return R8.test(e)?T8.parse(e):JSON.parse(e)}var JM,XM,T8,g8,ZM,jg,R8,Jg=Ne(()=>{JM=require("stream"),XM=H(require("json-bigint-fixes")),T8=(0,XM.default)({useNativeBigInt:!0}),g8=1e4,ZM={};BigInt.prototype.toJSON=function(){throw ZM};a(Ku,"streamAsJSON");jg=class extends JM.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),jM)}catch(s){yield jM(s)}else yield ua(t)}else yield ua(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);zM(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>g8?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 zM(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(jM,"handleError");a(zM,"when");a(ua,"stringify");a(eU,"jsStringify");R8=/-?\d{16,}/;a(zg,"parse")});var LE=T((Xge,rU)=>{"use strict";var A8=wn();rU.exports={writeTransaction:O8};function O8(e,t,r){return A8.writeTransaction(e,t,r)}a(O8,"writeTransaction")});var oU=T((tRe,iU)=>{"use strict";var N8=Ar(),b8=Cn(),nU=F(),y8=Or(),eRe=LE(),I8=require("clone"),Zg=require("alasql"),w8=Ff(),sU=require("util"),C8=sU.promisify(b8.getTableSchema),L8=sU.promisify(N8.search),D8=C(),Xg=Y();w8(Zg);iU.exports={update:M8};var P8="There was a problem performing this update. Please check the logs and try again.";async function M8({statement:e,hdb_user:t}){let r=await C8(e.table.databaseid,e.table.tableid),n=U8(e.columns);Xg.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=I8(s),c=Xg.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=Zg.parse(l).statements[0],u=await L8(_),d=v8(n,u);return B8(o,d,t)}a(M8,"update");function U8(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Zg.compile(`SELECT ${r.expression.toString()} AS [${D8.FUNC_VAL}] FROM ?`)}),t}catch(t){throw nU.error(t),new Error(P8)}}a(U8,"createUpdateRecord");function v8(e,t){return Xg.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(v8,"buildUpdateRecords");async function B8(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await y8.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){nU.error(`Error delete new_attributes from update response: ${i}`)}return s}a(B8,"updateRecords")});var cU=T((iRe,aU)=>{var H8=require("alasql"),q8=Ar(),x8=F(),F8=wn(),tR=require("util"),eR=Y(),G8=C(),k8=Cn(),nRe=LE(),sRe=Or(),$8="record",V8="successfully deleted",Y8=tR.callbackify(j8),K8=tR.promisify(q8.search),W8=tR.promisify(k8.getTableSchema);aU.exports={convertDelete:Y8};function Q8(e){return`${e.deleted_hashes.length} ${$8}${e.deleted_hashes.length===1?"":"s"} ${V8}`}a(Q8,"generateReturnMessage");async function j8({statement:e,hdb_user:t}){let r=await W8(e.table.databaseid,e.table.tableid);eR.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=eR.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=H8.parse(o).statements[0],l={operation:G8.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await K8(c);let _=await F8.deleteRecords(l);return eR.isEmptyOrZeroLength(_.message)&&(_.message=Q8(_)),delete _.txn_time,_}catch(_){throw x8.error(_),_.hdb_code?_.message:_}}a(j8,"convertDelete")});var fU=T((aRe,dU)=>{"use strict";var z8=ji(),{hdb_errors:lU}=te(),{getDatabases:uU}=(Ae(),re(Ge));dU.exports={checkSchemaExists:_U,checkSchemaTableExists:J8,schema_describe:z8};async function _U(e){if(!uU()[e])return lU.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(_U,"checkSchemaExists");async function J8(e,t){let r=await _U(e);if(r)return r;if(!uU()[e][t])return lU.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(J8,"checkSchemaTableExists")});var St=T((fRe,MU)=>{"use strict";var Jt=J();Jt.initSync();var X8=require("fs-extra"),Z8=require("semver"),ju=require("path"),{monotonicFactory:e6}=require("ulidx"),hU=e6(),t6=require("util"),mU=require("child_process"),r6=t6.promisify(mU.exec),n6=mU.spawn,Ie=rt(),Be=C(),iR=Y(),fn=F(),DE=li(),s6=LE(),Wu=pt(),{onMessageByType:i6}=st(),{isMainThread:o6}=require("worker_threads"),{Encoder:a6,decode:oR}=require("msgpackr"),pU=new a6,{isEmpty:Ea}=iR,SU=br(),c6=48*36e11,l6=5e9;o6&&i6(Be.ITC_EVENT_TYPES.RESTART,()=>{Un=void 0,fa=void 0});var{connect:u6,StorageType:TU,RetentionPolicy:gU,AckPolicy:PE,DeliverPolicy:ME,DiscardPolicy:_6,NatsConnection:lRe,JetStreamManager:uRe,JetStreamClient:_Re,StringCodec:dRe,JSONCodec:d6,createInbox:aR,headers:f6,ErrorCode:EU}=require("nats"),{PACKAGE_ROOT:E6}=C(),h6=Mo(),{recordAction:m6}=(ui(),re(Du)),RU=d6(),p6="clustering",S6=h6.engines[Ie.NATS_SERVER_NAME],T6=ju.join(E6,"dependencies"),sR=ju.join(T6,`${process.platform}-${process.arch}`,Ie.NATS_BINARY_NAME),rR,nR,Qu,_a,da;MU.exports={runCommand:AU,checkNATSServerInstalled:g6,createConnection:cR,getConnection:UE,getJetStreamManager:zu,getJetStream:NU,getNATSReferences:Ir,getServerList:A6,createLocalStream:lR,listStreams:bU,deleteLocalStream:O6,getServerConfig:Ju,listRemoteStreams:N6,viewStream:b6,viewStreamIterator:y6,publishToStream:I6,createWorkQueueStream:w6,addSourceToWorkStream:IU,request:L6,removeSourceFromWorkStream:CU,reloadNATS:uR,reloadNATSHub:D6,reloadNATSLeaf:P6,extractServerName:wU,requestErrorHandler:M6,updateWorkStream:U6,createLocalTableStream:DU,createTableStreams:v6,purgeTableStream:PU,purgeSchemaTableStreams:B6,getStreamInfo:H6,updateLocalStreams:x6,closeConnection:R6,getJsmServerName:Xu,addNatsMsgHeader:yU,updateIngestStreamConsumer:C6,clearClientCache:OU};async function AU(e,t=void 0){let{stdout:r,stderr:n}=await r6(e,{cwd:t});if(n)throw new Error(n.replace(`
7
+ `)},z3="certificate.pem",J3="privateKey.pem",X3="ca.pem";ZD.exports={CERTIFICATE_VALUES:j3,CERTIFICATE_PEM_NAME:z3,PRIVATEKEY_PEM_NAME:J3,CA_PEM_NAME:X3}});var sg=g((MTe,sP)=>{"use strict";var nP=require("fs-extra"),_e=require("joi"),Z3=require("os"),{boolean:Me,string:Xr,number:Ft,array:ng}=_e.types(),{totalmem:eP}=require("os"),Zo=require("path"),eX=G(),zf=W(),PTe=rg(),tP=C(),tX=tt(),rP="log",rX="components",nX="Invalid logging.rotation.maxSize unit. Available units are G, M or K",sX="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",iX="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",oX="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",aX="rootPath config parameter is undefined",cX="clustering.enabled config parameter is undefined",ea=Ft.min(0).required(),Jf=ng.items({host:Xr.required(),port:ea}).empty(null),Is;sP.exports={configValidator:lX,routesValidator:hX,route_constraints:Jf};function lX(e){if(Is=e.rootPath,zf.isEmpty(Is))throw aX;let t=Me.required(),r=Ft.min(0).max(1e3).empty(null).default(EX),n=Xr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Ou),s=Xr.optional().empty(null),i=Xr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=_e.string().empty(null).default(Ou),c=_e.custom(_X).empty(null).default(Ou),l=e.clustering?.enabled;if(zf.isEmpty(l))throw cX;let _;return l===!0?_=_e.object({enabled:t,hubServer:_e.object({cluster:_e.object({name:_e.required().empty(null),network:_e.object({port:ea,routes:Jf}).required()}).required(),leafNodes:_e.object({network:_e.object({port:ea}).required()}).required(),network:_e.object({port:ea}).required()}).required(),leafServer:_e.object({network:_e.object({port:ea,routes:Jf}).required(),streams:_e.object({maxAge:Ft.min(120).allow(null).optional(),maxBytes:Ft.min(1).allow(null).optional(),maxMsgs:Ft.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:_e.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Me.optional(),databaseLevel:Me.optional(),tls:_e.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Me.required(),verify:Me.optional()}),user:Xr.optional().empty(null)}).required():_=_e.object({enabled:t,tls:_e.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Me.required()})}).required(),_e.object({authentication:_e.object({authorizeLocal:Me,cacheTTL:Ft.required(),enableSessions:Me}),analytics:_e.object({aggregatePeriod:Ft}),componentsRoot:n.optional(),clustering:_,localStudio:_e.object({enabled:t}).required(),logging:_e.object({auditAuthEvents:_e.object({logFailed:Me,logSuccessful:Me}),file:Me.required(),level:_e.valid("notify","fatal","error","warn","info","debug","trace"),rotation:_e.object({enabled:Me.optional(),compress:Me.optional(),interval:Xr.custom(fX).optional().empty(null),maxSize:Xr.custom(dX).optional().empty(null),path:Xr.optional().empty(null).default(Ou)}).required(),root:n,stdStreams:Me.required(),auditLog:Me.required()}).required(),operationsApi:_e.object({network:_e.object({cors:Me.optional(),corsAccessList:ng.optional(),headersTimeout:Ft.min(1).optional(),keepAliveTimeout:Ft.min(1).optional(),port:Ft.optional().empty(null),domainSocket:_e.optional().empty("hdb/operations-server").default(Ou),securePort:Ft.optional().empty(null),timeout:Ft.min(1).optional()}).optional(),tls:_e.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:Xr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:_e.object({network:_e.object({port:ea,securePort:ea,mtls:_e.alternatives([Me.optional(),_e.object({user:Xr.optional(),certificateAuthority:s,required:Me.optional()})])}).required(),webSocket:Me.optional(),requireAuthentication:Me.optional()}),http:_e.object({compressionThreshold:Ft.optional(),cors:Me.optional(),corsAccessList:ng.optional(),headersTimeout:Ft.min(1).optional(),port:Ft.min(0).optional().empty(null),securePort:Ft.min(0).optional().empty(null),mtls:_e.alternatives([Me.optional(),_e.object({user:Xr.optional(),certificateAuthority:s,required:Me.optional()})])}).required(),threads:r.optional(),maxHeapMemory:Ft.min(0).optional(),storage:_e.object({writeAsync:Me.required(),overlappingSync:Me.optional(),caching:Me.optional(),compression:Me.optional(),noReadAhead:Me.optional(),path:c,prefetchWrites:Me.optional()}).required(),ignoreScripts:Me.optional(),tls:_e.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:Xr.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(lX,"configValidator");function uX(e){return nP.existsSync(e)?null:`Specified path ${e} does not exist.`}a(uX,"doesPathExist");function _X(e,t){_e.assert(e,Xr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=uX(e);if(r)return t.message(r)}a(_X,"validatePath");function dX(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(nX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(iX):e}a(dX,"validateRotationMaxSize");function fX(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(sX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(oX):e}a(fX,"validateRotationInterval");function EX(e,t){let r=t.state.path.join("."),n=Z3.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||eP();return i=Math.round(Math.min(i,eP())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),eX.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(EX,"setDefaultThreads");function Ou(e,t){let r=t.state.path.join(".");if(!zf.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(zf.isEmpty(Is))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Zo.join(Is,rX);case"logging.root":return Zo.join(Is,rP);case"clustering.leafServer.streams.path":return Zo.join(Is,"clustering","leaf");case"storage.path":let n=Zo.join(Is,tP.LEGACY_DATABASES_DIR_NAME);return nP.existsSync(n)?n:Zo.join(Is,tP.DATABASES_DIR_NAME);case"logging.rotation.path":return Zo.join(Is,rP);case"operationsApi.network.domainSocket":return r==null?null:Zo.join(Is,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Ou,"setDefaultRoot");function hX(e){let t=_e.object({routes:Jf});return tX.validateBySchema({routes:e},t)}a(hX,"routesValidator")});var ft=g((BTe,fP)=>{"use strict";var en=C(),Gt=W(),Dt=G(),{configValidator:mX,routesValidator:iP}=sg(),gr=require("fs-extra"),pX=require("yaml"),rs=require("path"),SX=require("is-number"),aP=require("properties-reader"),TX=require("lodash"),{handleHDBError:gX}=re(),{HTTP_STATUS_CODES:RX,HDB_ERROR_MSGS:Xf}=Yr(),vTe=require("minimist"),{server:AX}=(ur(),ne(Uo)),{DATABASES_PARAM_CONFIG:Nu,CONFIG_PARAMS:Zr,CONFIG_PARAM_MAP:ns}=en,OX="Unable to get config value because config is uninitialized",NX="Config successfully initialized",bX="Error backing up config file",yX="Empty parameter sent to getConfigValue",cP=rs.join(en.PACKAGE_ROOT,"config","yaml",en.HDB_DEFAULT_CONFIG_FILE),IX="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",oP={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"},Zf,Pt,eE;fP.exports={createConfigFile:wX,getDefaultConfig:CX,getConfigValue:uP,initConfig:og,flattenConfig:Sc,updateConfigValue:_P,updateConfigObject:DX,getConfiguration:UX,setConfiguration:vX,readConfigFile:cg,getClusteringRoutes:BX,initOldConfig:dP,getConfigFromFile:HX,getConfigFilePath:ta,addConfig:qX,deleteConfigFromFile:xX,getConfigObj:FX};function wX(e){let t=zi(cP);Zf=Sc(t.toJSON());let r;for(let o in e){let c=ns[o.toLowerCase()];if(c===Zr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let l=c.split("_"),_=ig(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...l],_)}catch(u){Dt.error(u)}}}r&&lP(t,r),ag(t);let n=t.toJSON();Pt=Sc(n);let s=t.getIn(["rootPath"]),i=rs.join(s,en.HDB_CONFIG_FILE);gr.createFileSync(i),gr.writeFileSync(i,String(t)),Dt.trace(`Config file written to ${i}`)}a(wX,"createConfigFile");function lP(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Gt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Nu.TABLES))for(let i in n[s][Nu.TABLES])for(let o in n[s][Nu.TABLES][i]){let c=n[s][Nu.TABLES][i][o],l=[Zr.DATABASES,s,Nu.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[Zr.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Dt.error("Error parsing schemas CLI/env config arguments",n)}}a(lP,"setSchemasConfig");function CX(e){if(Zf===void 0){let r=zi(cP);Zf=Sc(r.toJSON())}let t=ns[e.toLowerCase()];if(t!==void 0)return Zf[t.toLowerCase()]}a(CX,"getDefaultConfig");function uP(e){if(e==null){Dt.error(yX);return}if(Pt===void 0){Dt.trace(OX);return}let t=ns[e.toLowerCase()];if(t!==void 0)return Pt[t.toLowerCase()]}a(uP,"getConfigValue");function ta(e=Gt.getPropsFilePath()){let t=Gt.getEnvCliRootPath();return t?rs.join(t,en.HDB_CONFIG_FILE):aP(e).get(en.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ta,"getConfigFilePath");function og(e=!1){if(Pt===void 0||e){let t;if(!Gt.noBootFile()){t=Gt.getPropsFilePath();try{gr.accessSync(t,gr.constants.F_OK|gr.constants.R_OK)}catch(i){throw Dt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ta(t),n;if(r.includes("config/settings.js"))try{dP(r);return}catch(i){if(i.code!==en.NODE_ERROR_CODES.ENOENT)throw i}try{n=zi(r)}catch(i){if(i.code===en.NODE_ERROR_CODES.ENOENT){Dt.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 Dt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}LX(n,r),ag(n);let s=n.toJSON();if(AX.config=s,Pt=Sc(s),Pt.logging_rotation_rotate)for(let i in oP)Pt[i]&&Dt.error(`Config ${oP[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Dt.trace(NX)}}a(og,"initConfig");function LX(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],rs.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],rs.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],rs.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(Dt.trace("Updating config file with missing config params"),gr.writeFileSync(t,String(e)))}a(LX,"checkForUpdatedConfig");function ag(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=mX(t);if(r.error)throw Xf.CONFIG_VALIDATION(r.error.message);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(ag,"validateConfig");function DX(e,t){Pt===void 0&&(Pt={});let r=ns[e.toLowerCase()];if(r===void 0){Dt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Pt[r.toLowerCase()]=t}a(DX,"updateConfigObject");function _P(e,t,r=void 0,n=!1,s=!1,i=!1){Pt===void 0&&og();let o=uP(ns.hdb_root),c=rs.join(o,en.HDB_CONFIG_FILE),l=zi(c),_;if(r===void 0&&e.toLowerCase()===Zr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=ns[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=ig(f,t);l.setIn([...E],h)}else for(let f in r){let E=ns[f.toLowerCase()];if(E===Zr.HTTP_SECUREPORT&&r[f]===Pt[Zr.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),E===Zr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===Pt[Zr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),E===Zr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=en.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&l.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=ig(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(O){Dt.error(O)}}}_&&lP(l,_),ag(l);let u=l.getIn(["rootPath"]),d=rs.join(u,en.HDB_CONFIG_FILE);n===!0&&PX(c,u),gr.writeFileSync(d,String(l)),s&&(Pt=Sc(l.toJSON())),Dt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(_P,"updateConfigValue");function PX(e,t){try{let r=rs.join(t,"backup",`${en.HDB_CONFIG_FILE}.bak`);gr.copySync(e,r),Dt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Dt.error(bX),Dt.error(r)}}a(PX,"backupConfigFile");var MX=["databases"];function Sc(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)),eE=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])&&!MX.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;!Zr[l.toUpperCase()]&&ns[l]&&(s[ns[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Sc,"flattenConfig");function ig(e,t){if(e===Zr.CLUSTERING_NODENAME||e===Zr.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(SX(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Gt.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 Gt.autoCast(t)}a(ig,"castConfigValue");function UX(){let e=Gt.getPropsFilePath(),t=ta(e);return zi(t).toJSON()}a(UX,"getConfiguration");async function vX(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return _P(void 0,void 0,s,!0),IX}catch(i){throw typeof i=="string"||i instanceof String?gX(i,i,RX.BAD_REQUEST,void 0,void 0,!0):i}}a(vX,"setConfiguration");function cg(){let e=Gt.getPropsFilePath();try{gr.accessSync(e,gr.constants.F_OK|gr.constants.R_OK)}catch(n){if(!Gt.noBootFile())throw Dt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ta(e);return zi(t).toJSON()}a(cg,"readConfigFile");function zi(e){return pX.parseDocument(gr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(zi,"parseYamlDoc");function BX(){let e=cg(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Gt.isEmptyOrZeroLength(t)?[]:t;let r=iP(t);if(r)throw Xf.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Gt.isEmptyOrZeroLength(n)?[]:n;let s=iP(n);if(s)throw Xf.CONFIG_VALIDATION(s.message);if(!Gt.isEmptyOrZeroLength(n)&&!Gt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Gt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Xf.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(BX,"getClusteringRoutes");function dP(e){let t=aP(e);Pt={};for(let r in ns){let n=t.get(r.toUpperCase());if(Gt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ns[r].toLowerCase();s===Zr.LOGGING_ROOT?Pt[s]=rs.dirname(n):Pt[s]=n}return Pt}a(dP,"initOldConfig");function HX(e){let t=cg();return TX.get(t,e.replaceAll("_","."))}a(HX,"getConfigFromFile");async function qX(e,t){let r=zi(ta());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await gr.writeFile(ta(),String(r))}a(qX,"addConfig");function xX(e){let t=ta(Gt.getPropsFilePath()),r=zi(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=rs.join(n,en.HDB_CONFIG_FILE);gr.writeFileSync(s,String(r))}a(xX,"deleteConfigFromFile");function FX(){return eE||(og(),eE)}a(FX,"getConfigObj")});var hP=g((qTe,EP)=>{"use strict";var tE=C(),rE=class{static{a(this,"BaseLicense")}constructor(t=0,r=tE.RAM_ALLOCATION_ENUM.DEFAULT,n=tE.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},lg=class extends rE{static{a(this,"ExtendedLicense")}constructor(t=0,r=tE.RAM_ALLOCATION_ENUM.DEFAULT,n=tE.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};EP.exports={BaseLicense:rE,ExtendedLicense:lg}});var ra=g((FTe,RP)=>{"use strict";var gc=require("fs-extra"),pP=jf(),SP=require("crypto"),GX=require("moment"),kX=require("uuid").v4,tr=G(),_g=require("path"),$X=W(),Ji=C(),{totalmem:mP}=require("os"),VX=hP().ExtendedLicense,Tc="invalid license key format",YX="061183",KX="mofi25",WX="aes-256-cbc",QX=16,jX=32,TP=J();TP.initSync();var ug;RP.exports={validateLicense:gP,generateFingerPrint:JX,licenseSearch:Eg,getLicense:eZ,checkMemoryLimit:tZ};function dg(){return _g.join(TP.getHdbBasePath(),Ji.LICENSE_KEY_DIR_NAME,Ji.LICENSE_FILE_NAME)}a(dg,"getLicenseDirPath");function zX(){let e=dg();return _g.join(e,Ji.LICENSE_FILE_NAME)}a(zX,"getLicenseFilePath");function fg(){let e=dg();return _g.join(e,Ji.REG_KEY_FILE_NAME)}a(fg,"getFingerPrintFilePath");async function JX(){let e=fg();try{return await gc.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await XX();throw tr.error(`Error writing fingerprint file to ${e}`),tr.error(t),new Error("There was an error generating the fingerprint")}}a(JX,"generateFingerPrint");async function XX(){let e=kX(),t=pP.hash(e),r=fg();try{await gc.mkdirp(dg()),await gc.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw tr.error(`Error writing fingerprint file to ${r}`),tr.error(n),new Error("There was an error generating the fingerprint")}return t}a(XX,"writeFingerprint");function gP(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Ji.RAM_ALLOCATION_ENUM.DEFAULT,version:Ji.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return tr.error("empty license key passed to validate."),r;let n=fg(),s=!1;try{s=gc.statSync(n)}catch(i){tr.error(i)}if(s){let i;try{i=gc.readFileSync(n,"utf8")}catch{tr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(KX),c=o[1];c=Buffer.concat([Buffer.from(c)],QX);let l=Buffer.concat([Buffer.from(i)],jX),_=SP.createDecipheriv(WX,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=ZX(o[0],i);if(E)u=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Tc),tr.error(Tc),new Error(Tc)}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(Tc),tr.error(Tc),new Error(Tc)}else r.exp_date=u;r.exp_date<GX().valueOf()&&(r.valid_date=!1),pP.validate(o[1],`${YX}${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||tr.error("Invalid licence"),r}a(gP,"validateLicense");function ZX(e,t){try{let r=SP.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{tr.warn("Check old license failed")}}a(ZX,"checkOldLicense");function Eg(){let e=new VX,t=[];try{t=gc.readFileSync(zX(),"utf-8").split(Ji.NEW_LINE)}catch(r){r.code==="ENOENT"?tr.info("no license file found"):tr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if($X.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=gP(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){tr.error("There was an error parsing the license string."),tr.error(s),e.ram_allocation=Ji.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return ug=e,e}a(Eg,"licenseSearch");async function eZ(){return ug||await Eg(),ug}a(eZ,"getLicense");function tZ(){let e=Eg().ram_allocation,t=process.constrainedMemory?.()||mP();if(t=Math.round(Math.min(t,mP())/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(tZ,"checkMemoryLimit")});var Rr=g((YTe,HP)=>{"use strict";var bP="username is required",yP="nothing to update, must supply active, role or password to update",IP="password cannot be an empty string",wP="If role is specified, it cannot be empty.",CP="active must be true or false";HP.exports={addUser:uZ,alterUser:_Z,dropUser:fZ,getSuperUser:pZ,userInfo:EZ,listUsers:sE,listUsersExternal:hZ,setUsersToGlobal:Ac,findAndValidateUser:vP,getClusterUser:SZ,USERNAME_REQUIRED:bP,ALTERUSER_NOTHING_TO_UPDATE:yP,EMPTY_PASSWORD:IP,EMPTY_ROLE:wP,ACTIVE_BOOLEAN:CP};var LP=Tr(),rZ=Xo(),pg=jf(),DP=zD(),PP=Sr(),Sg=si(),tn=W(),MP=require("validate.js"),be=G(),{promisify:nZ}=require("util"),Tg=ci(),AP=C(),OP=Je(),sZ=ft(),kTe=J(),$Te=ra(),iZ=ti(),{table:VTe}=(Ne(),ne(xe)),{handleHDBError:ws,hdb_errors:oZ}=re(),{HTTP_STATUS_CODES:Cs,AUTHENTICATION_ERROR_MSGS:hg,HDB_ERROR_MSGS:Rc}=oZ,{UserEventMsg:gg}=zn(),mg=require("lodash"),{server:Rg}=(ur(),ne(Uo)),aZ=G();Rg.getUser=(e,t)=>vP(e,t,t!=null);var UP={username:!0,active:!0,role:!0,password:!0},NP=new Map,nE=PP.searchByValue,cZ=PP.searchByHash,lZ=nZ(rZ.delete);async function uZ(e){let t=MP.cleanAttributes(e,UP),r=DP.addUserValidation(t);if(r)throw ws(new Error,r.message,Cs.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 nE(n),s=s&&Array.from(s)}catch(l){throw be.error("There was an error searching for a role in add user"),be.error(l),l}if(!s||s.length<1)throw ws(new Error,Rc.ROLE_NAME_NOT_FOUND(t.role),Cs.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw ws(new Error,Rc.DUP_ROLES_FOUND(t.role),Cs.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Tg.encrypt(t.password)),t.password=pg.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await LP.insert(i)}catch(l){throw be.error("There was an error searching for a user."),be.error(l),l}be.debug(o);try{await Ac()}catch(l){throw be.error("Got an error setting users to global"),be.error(l),l}if(o.skipped_hashes.length===1)throw ws(new Error,Rc.USER_ALREADY_EXISTS(t.username),Cs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],Sg.signalUserChange(new gg(process.pid)),`${c.username} successfully added`}a(uZ,"addUser");async function _Z(e){let t=MP.cleanAttributes(e,UP);if(tn.isEmptyOrZeroLength(t.username))throw new Error(bP);if(tn.isEmptyOrZeroLength(t.password)&&tn.isEmptyOrZeroLength(t.role)&&tn.isEmptyOrZeroLength(t.active))throw new Error(yP);if(!tn.isEmpty(t.password)&&tn.isEmptyOrZeroLength(t.password.trim()))throw new Error(IP);if(!tn.isEmpty(t.active)&&!tn.isBoolean(t.active))throw new Error(CP);let r=dZ(t.username);if(!tn.isEmpty(t.password)&&!tn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Tg.encrypt(t.password)),t.password=pg.hash(t.password)),t.role==="")throw new Error(wP);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 nE(i)||[])}catch(c){throw be.error("Got an error searching for a role."),be.error(c),c}if(!o||o.length===0){let c=Rc.ALTER_USER_ROLE_NOT_FOUND(t.role);throw be.error(c),ws(new Error,c,Cs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Rc.ALTER_USER_DUP_ROLES(t.role);throw be.error(c),ws(new Error,c,Cs.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 LP.update(n)}catch(i){throw be.error("Error during update."),be.error(i),i}try{await Ac()}catch(i){throw be.error("Got an error setting users to global"),be.error(i),i}return Sg.signalUserChange(new gg(process.pid)),s}a(_Z,"alterUser");function dZ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(dZ,"isClusterUser");async function fZ(e){try{let t=DP.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(tn.isEmpty(global.hdb_users.get(e.username)))throw ws(new Error,Rc.USER_NOT_EXIST(e.username),Cs.NOT_FOUND,void 0,void 0,!0);let n;try{n=await lZ(r)}catch(s){throw be.error("Got an error deleting a user."),be.error(s),s}be.debug(n);try{await Ac()}catch(s){throw be.error("Got an error setting users to global."),be.error(s),s}return Sg.signalUserChange(new gg(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(fZ,"dropUser");async function EZ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=mg.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await cZ(r)}catch(s){throw be.error("Got an error searching for a role."),be.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw be.error(r),r}return t}a(EZ,"userInfo");async function hZ(){let e;try{e=await sE()}catch(t){throw be.error("Got an error listing users."),be.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(hZ,"listUsersExternal");async function sE(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await nE(e)}catch(o){throw be.error("Got an error searching for roles."),be.error(o),o}let r={};for(let o of t)r[o.id]=mg.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 nE(n)}catch(o){throw be.error("Got an error searching for users."),be.error(o),o}let i=new Map;for(let o of s)o=mg.cloneDeep(o),o.role=r[o.role],mZ(o.role),i.set(o.username,o);return i}catch(e){throw be.error("got an error listing users"),be.error(e),tn.errorizeMessage(e)}return null}a(sE,"listUsers");function mZ(e){try{if(!e){be.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(iZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){be.error("Got an error trying to set system permissions."),be.error(t)}}a(mZ,"appendSystemTablesToRole");async function Ac(){try{let e=await sE();global.hdb_users=e}catch(e){throw be.error(e),e}}a(Ac,"setUsersToGlobal");async function vP(e,t,r=!0){global.hdb_users||await Ac();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw ws(new Error,hg.GENERIC_AUTH_FAIL,Cs.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw ws(new Error,hg.USER_INACTIVE,Cs.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(NP.get(t)===n.password)return s;if(pg.validate(n.password,t))NP.set(t,n.password);else throw ws(new Error,hg.GENERIC_AUTH_FAIL,Cs.UNAUTHORIZED,void 0,void 0,!0)}return s}a(vP,"findAndValidateUser");async function pZ(){global.hdb_users||await Ac();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(pZ,"getSuperUser");async function SZ(){let e=await sE(),t=sZ.getConfigFromFile(AP.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!tn.isEmpty(r)&&r?.role?.role===AP.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Tg.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+OP.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+OP.SERVER_SUFFIX.ADMIN,r}a(SZ,"getClusterUser");var BP=[];Rg.invalidateUser=function(e){for(let t of BP)try{t(e)}catch(r){aZ.error("Error invalidating user",r)}};Rg.onInvalidatedUser=function(e){BP.push(e)}});var yu=g((jTe,GP)=>{"use strict";var na=G(),rn=C(),TZ=WI(),WTe=yn(),QTe=Wi(),gZ=Rr(),{validateEvent:qP}=zn(),bu=bn(),RZ=require("process"),{resetDatabases:AZ}=(Ne(),ne(xe)),OZ={[rn.ITC_EVENT_TYPES.SCHEMA]:NZ,[rn.ITC_EVENT_TYPES.USER]:FP};async function NZ(e){let t=qP(e);if(t){na.error(t);return}na.trace("ITC schemaHandler received schema event:",e),await TZ(e.message),await bZ(e.message)}a(NZ,"schemaHandler");async function bZ(e){try{bu.resetReadTxn(rn.SYSTEM_SCHEMA_NAME,rn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),bu.resetReadTxn(rn.SYSTEM_SCHEMA_NAME,rn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),bu.resetReadTxn(rn.SYSTEM_SCHEMA_NAME,rn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=AZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){na.error(t)}}a(bZ,"syncSchemaMetadata");var xP=[];async function FP(e){try{try{bu.resetReadTxn(rn.SYSTEM_SCHEMA_NAME,rn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),bu.resetReadTxn(rn.SYSTEM_SCHEMA_NAME,rn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){na.warn(r)}let t=qP(e);if(t){na.error(t);return}na.trace(`ITC userHandler ${rn.HDB_ITC_CLIENT_PREFIX}${RZ.pid} received user event:`,e),await gZ.setUsersToGlobal();for(let r of xP)r()}catch(t){na.error(t)}}a(FP,"userHandler");FP.addListener=function(e){xP.push(e)};GP.exports=OZ});var zn=g((tge,$P)=>{"use strict";var JTe=G(),Ag=W(),yZ=C(),{ITC_ERRORS:Iu}=Yr(),{parentPort:XTe,threadId:IZ,isMainThread:wZ,workerData:ZTe}=require("worker_threads"),{onMessageFromWorkers:CZ,broadcast:ege,broadcastWithAcknowledgement:LZ}=et();$P.exports={sendItcEvent:DZ,validateEvent:kP,SchemaEventMsg:PZ,UserEventMsg:MZ};var iE;CZ(async(e,t)=>{iE=iE||yu(),kP(e),iE[e.type]&&await iE[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function DZ(e){return!wZ&&e.message&&(e.message.originator=IZ),LZ(e)}a(DZ,"sendItcEvent");function kP(e){if(typeof e!="object")return Iu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Ag.isEmpty(e.type))return Iu.MISSING_TYPE;if(!e.hasOwnProperty("message")||Ag.isEmpty(e.message))return Iu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Ag.isEmpty(e.message.originator))return Iu.MISSING_ORIGIN;if(yZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Iu.INVALID_EVENT(e.type)}a(kP,"validateEvent");function PZ(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(PZ,"SchemaEventMsg");function MZ(e){this.originator=e}a(MZ,"UserEventMsg")});var si=g((sge,WP)=>{"use strict";var VP=C(),nge=W(),oE=G(),YP=CI(),Oc,{sendItcEvent:KP}=zn();function UZ(e){try{oE.trace("signalSchemaChange called with message:",e),Oc=Oc||yu();let t=new YP(VP.ITC_EVENT_TYPES.SCHEMA,e);return Oc.schema(t),KP(t)}catch(t){oE.error(t)}}a(UZ,"signalSchemaChange");function vZ(e){try{oE.trace("signalUserChange called with message:",e),Oc=Oc||yu();let t=new YP(VP.ITC_EVENT_TYPES.USER,e);return Oc.user(t),KP(t)}catch(t){oE.error(t)}}a(vZ,"signalUserChange");WP.exports={signalSchemaChange:UZ,signalUserChange:vZ}});var Du={};ke(Du,{addAnalyticsListener:()=>Lu,recordAction:()=>nn,recordActionBinary:()=>In,setAnalyticsEnabled:()=>BZ});function BZ(e){nM=e}function nn(e,t,r,n,s){if(!nM)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=lE.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let _=c;o.values=c=new Float32Array(l*2),c.set(_),c.index=l+1}c[l]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},lE.set(i,o)}aE||HZ()}function In(e,t,r,n,s){nn(!!e,t,r,n,s)}function Lu(e){oM.push(e)}function HZ(){aE=performance.now(),setTimeout(async()=>{let e=performance.now()-aE;aE=0;let t=[],r={time:Date.now(),period:e,threadId:sa.threadId,metrics:t};for(let[s,i]of lE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,_=[],u;for(let d of aM){let f=Math.floor(c*d),E=o[f-1];if(f>l){let h=f-l;if(E===u){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),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 cM()}let n=process.memoryUsage();t.push({metric:"memory",threadId:sa.threadId,byThread:!0,...n});for(let s of oM)s(t);lE=new Map,sa.parentPort?sa.parentPort.postMessage({type:iM,report:r}):_M({report:r})},sM).unref()}async function qZ(e,t=6e4){let r=bg(),n=lM(),s;for(let h of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){s=h.value.time;break}if(Date.now()-t<s)return;let i,o=new Map,c=new Map,l=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:O}=p;for(let T of S||[]){let{path:R,method:B,type:H,metric:v,count:P,total:V,distribution:Y,threads:z,...oe}=T;P||(P=1);let Re=v+(R?"-"+R:"");B!==void 0&&(Re+="-"+B),H!==void 0&&(Re+="-"+H);let ce=o.get(Re);if(ce){if(ce.threads){let Ee=ce.threads[O];if(Ee)ce=Ee;else{ce.threads[O]=Object.assign({},oe);continue}}ce.count||(ce.count=1);let Ge=ce.count;for(let Ee in oe){let qt=oe[Ee];typeof qt=="number"&&(ce[Ee]=(ce[Ee]*Ge+qt*P)/(Ge+P))}ce.count+=P,V>=0&&(ce.total+=V,ce.ratio=ce.total/ce.count)}else ce=Object.assign({period:t},T),delete ce.distribution,o.set(Re,ce),ce.byThread&&(ce.threads=[],ce.threads[O]=Object.assign({},oe),l.push(ce));if(Y){Y=Y.map(Ee=>typeof Ee=="number"?{value:Ee,count:1}:Ee);let Ge=c.get(Re);Ge?Ge.push(...Y):c.set(Re,Y)}}await cM()}for(let h of l){let{path:p,method:S,type:O,metric:T,count:R,total:B,distribution:H,threads:v,...P}=h;v=v.filter(V=>V);for(let V in P){if(typeof h[V]!="number")continue;let Y=0;for(let z of v){let oe=z[V];typeof oe=="number"&&(Y+=oe)}h[V]=Y}h.count=v.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((Ee,qt)=>Ee.value>qt.value?1:-1);let O=S.count-1,T=[],R=0,B=0,H;for(let Ee of aM){let qt=O*Ee;for(;R<qt;)H=p[B++],R+=H.count,B===1&&R--;let Td=p[B>1?B-2:0];H||(H=p[0]),T.push(H.value-(H.value-Td.value)*(R-qt)/H.count)}let[v,P,V,Y,z,oe,Re,ce,Ge]=T;Object.assign(S,{p1:v,p10:P,p25:V,median:Y,p75:z,p90:oe,p95:Re,p99:ce,p999:Ge})}let u;for(let[h,p]of o)p.id=(0,cE.getNextMonotonicTime)(),p.time=_,n.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||n.primaryStore.put(p.id,p)}),u=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(u||E*10>f){let h=(0,cE.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-QP,active:E-jP,time:d,...process.memoryUsage()};n.primaryStore.put(h,p,{append:!0}).then(S=>{S||n.primaryStore.put(h,p)})}QP=f,jP=E}async function zP(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function bg(){return JP||(JP=dt({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function lM(){return XP||(XP=dt({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function GZ(){uM=!0;let e=(0,Cu.get)(Ng.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await qZ(sM,e),await zP(bg(),xZ),await zP(lM(),FZ)},Math.min(e/2,2147483647)).unref()}function _M(e,t){let r=e.report;r.threadId=t?.threadId||sa.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(ZP+=n.mean*n.count);r.totalBytesProcessed=ZP,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(eM.get(t))}),eM.set(t,t.performance.eventLoopUtilization())),r.id=(0,cE.getNextMonotonicTime)(),bg().primaryStore.put(r.id,r),uM||GZ(),kZ&&(dM=VZ(r))}async function VZ(e){if(await dM,!Xi){let r=(0,wu.dirname)((0,rM.getLogFilePath)());try{Xi=await(0,Og.open)((0,wu.join)(r,"analytics.log"),"r+")}catch{Xi=await(0,Og.open)((0,wu.join)(r,"analytics.log"),"w+")}}let t=(await Xi.stat()).size;if(t>$Z){let r=Buffer.alloc(t);await Xi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Xi.write(r,{position:0}),await Xi.truncate(r.length),t=r.length}await Xi.write(JSON.stringify(e)+`
9
+ `,t)}var sa,tM,rM,wu,Og,cE,Cu,Ng,lE,nM,aE,sM,iM,oM,aM,QP,jP,cM,xZ,FZ,JP,XP,uM,ZP,eM,kZ,dM,Xi,$Z,li=ye(()=>{sa=require("worker_threads"),tM=q(et());Ne();rM=q(G()),wu=require("path"),Og=require("fs/promises"),cE=q(dr()),Cu=q(J()),Ng=q(C());ur();(0,Cu.initSync)();lE=new Map,nM=(0,Cu.get)(Ng.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(BZ,"setAnalyticsEnabled");a(nn,"recordAction");st.recordAnalytics=nn;a(In,"recordActionBinary");aE=0,sM=1e3,iM="analytics-report",oM=[];a(Lu,"addAnalyticsListener");aM=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(HZ,"sendAnalytics");a(qZ,"aggregation");QP=0,jP=0,cM=a(()=>new Promise(setImmediate),"rest");a(zP,"cleanup");xZ=36e5,FZ=31536e6;a(bg,"getRawAnalyticsTable");a(lM,"getAnalyticsTable");(0,tM.setChildListenerByType)(iM,_M);a(GZ,"startScheduledTasks");ZP=0,eM=new Map,kZ=!1;a(_M,"recordAnalytics");$Z=1e6;a(VZ,"logAnalytics")});var Cg={};ke(Cg,{coerceType:()=>uE,makeTable:()=>fE,setServerUtilities:()=>ZZ,updateResource:()=>_E});function fE(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:p}=e;p||(p=[]),yI(i,l);let S=Kp(i,n,l),O=0,T,R,B={},H=Promise.resolve(),v,P,V;for(let Q of p)(Q.assignCreatedTime||Q.name==="__createdtime__")&&(v=Q),(Q.assignUpdatedTime||Q.name==="__updatedtime__")&&(P=Q),Q.expiresAt&&(V=Q),Q.isPrimaryKey&&(B=Q);let Y,z=[],oe=[],Re=1,ce=2,Ge={},Ee={},qt=864e5,Td,gd,vi,Pb=!1,hp,z$=i.getRange({start:!1,end:!1}).constructor,J$=10,X$=6;E&&vb();class Xe extends Yt{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=p;static expirationTimer;static createdTimeProperty=v;static updatedTimeProperty=P;static propertyResolvers;static sources=[];static get expirationMS(){return d}static dbisDB=u;static schemaDefined=_;static sourcedFrom(m,A){A&&(this.sourceOptions=A,(A.expiration||A.eviction||A.scanInterval)&&this.setTTLExpiration(A)),A?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),R=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let w=a(I=>{let y=this.sources.slice(0,-1);if(y=y.filter(U=>U[I]&&(!U[I].reliesOnPrototype||U.prototype[I])),y.length>0)if(y.length===1){let U=y[0];return(M,D,x)=>{if(M?.source!==U)return U[I](D,x,M)}}else return(U,M,D)=>{let x=[];for(let k of y){if(U?.source===k)break;x.push(k[I](M,D,U))}return Promise.all(x)}},"getApplyToIntermediateSource"),N=this.sources[this.sources.length-1],b=a(I=>{if(N[I]&&(!N[I].reliesOnPrototype||N.prototype[I]))return(y,U,M)=>{if(!y?.source)return N[I](U,M,y)}},"getApplyToCanonicalSource");return Ge={put:b("put"),patch:b("patch"),delete:b("delete"),publish:b("publish")},Ee={put:w("put"),patch:w("patch"),delete:w("delete"),publish:w("publish"),invalidate:w("invalidate")},(async()=>{let I=!1,y=a(async(U,M)=>{let D=U.value,x=U.table?it[c][U.table]:Xe;if(c===ss.SYSTEM_SCHEMA_NAME&&(U.table===ss.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||U.table===ss.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(I=!0),U.id===void 0&&(U.id=D[x.primaryKey],U.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(U));U.source=m;let k=await x.getResource(U.id,M,Nc);switch(U.type){case"put":return k._writeUpdate(D,!0,Nc);case"patch":return k._writeUpdate(D,!1,Nc);case"delete":return k._writeDelete(Nc);case"publish":return k._writePublish(D,Nc);case"invalidate":return k.invalidate(Nc);default:rt.error("Unknown operation",U.type,U.id)}},"writeUpdate");try{let U=m.subscribe;U&&h==null&&(h=!0);let M=m.subscribeOnThisThread?m.subscribeOnThisThread((0,oa.getWorkerIndex)()):(0,oa.getWorkerIndex)()===0,D=U&&M&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(D){let x;for await(let k of D)try{if(!(k.type==="transaction"?k.writes[0]:k)){rt.error("Bad subscription event",k);continue}if(k.source=m,x)if(k.beginTxn)x.resolve();else{y(k,x);continue}if(k.type==="end_txn")continue;let le=ze(k,()=>{if(k.type==="transaction"){let se=[];for(let ue of k.writes)try{se.push(y(ue,k))}catch(He){throw He.message+=" writing "+JSON.stringify(ue)+" of event "+JSON.stringify(k),He}return Promise.all(se)}else if(k.type==="define_schema"){let se=this.attributes.slice(0),ue;for(let He of k.attributes)se.find(ie=>ie.name===He.name)||(se.push(He),ue=!0);ue&&(dt({table:s,database:c,attributes:se,origin:"cluster"}),qu.signalSchemaChange(new xu.SchemaEventMsg(process.pid,ss.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return k.beginTxn?(x=k,y(k,k),new Promise(se=>{x.resolve=se})):y(k,k)});I&&(await le,qu.signalUserChange(new xu.UserEventMsg(process.pid))),k.onCommit&&(le?.then?le.then(k.onCommit):k.onCommit())}catch(ae){rt.error("error in subscription handler",ae)}}}catch(U){rt.error(U)}})(),this}static getResource(m,A,w){let N=super.getResource(m,A,w);if(m!=null){Ol(m);try{if(N.hasOwnProperty(pe))return N;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let b=!w?.async||i.cache?.get(m),I=Gr(A),y=I.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return mp(m,A,{transaction:y},b,U=>{if(U?_E(N,U):N[pe]=null,A.onlyIfCached&&A.noCacheStore){if(!N.doesExist())throw new wn.ServerError("Entry is not cached",504)}else if(w?.ensureLoaded){let M=pp(m,U,A,N);if(M)return I?.disregardReadTxn(),N[yg]=!0,wg(M,D=>(_E(N,D),N))}return N})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(m)),b}}return N}ensureLoaded(){let m=pp(this[Pe],this[sn],this[Ie]);if(m)return this[yg]=!0,wg(m,A=>{this[sn]=A,this[pe]=A.value,this[Bu]=A.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,qt=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");qt=qt||(d+f)/4,Tp()}static enableAuditing(m=!0){E=m,m&&vb(),Xe.audit=m}static coerceId(m){return m===""?null:uE(m,B)}static async dropTable(){if(delete it[c][s],c===o){for(let m of p)u.remove(Xe.tableName+"/"+m.name),r[m.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));qu.signalSchemaChange(new xu.SchemaEventMsg(process.pid,ss.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[On])return this.search(m);if(this[Pe]===null){if(m?.conditions)return this.search(m);let A=Xe.getRecordCount();return{recordCount:A.recordCount,estimatedRecordRange:A.estimatedRange,records:"./",name:s,database:c,attributes:p}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[Ie]?.returnNonexistent)return this}allowRead(m,A){let w=Ad(m);if(w?.read){if(w.isSuperUser)return!0;let N=w.attribute_permissions,b=A?.select;if(N?.length>0||Pb&&b){if(A||(A={}),b){let I=N?.length>0&&Ig(N,"read");A.select=b.map(y=>{let U=y.name||y;if(!I||I[U]){let M=vi[U]?.definition?.tableClass;if(M){if(y.name||(y={name:y}),!M.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else A.select=N.filter(I=>I.read&&!vi[I.attribute_name]).map(I=>I.attribute_name);return A}else return!0}}allowUpdate(m,A){let w=Ad(m);if(w?.update){let N=w.attribute_permissions;if(N?.length>0){let b=Ig(N,"update");for(let I in A)if(!b[I])return!1;for(let I of N){let y=I.attribute_name;!I.update&&!(y in A)&&(A[y]=this.getProperty(y))}}return!0}}allowCreate(m,A){if(this[On]){let w=Ad(m);if(w?.insert){let N=w.attribute_permissions;if(N?.length>0){let b=Ig(N,"insert");for(let I in A)if(!b[I])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return Ad(m)?.delete}update(m,A){if(!Gr(this[Ie]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let N;return typeof m=="object"&&m&&(A?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[pe]={},this[Lt]=m):(N=this[Lt],N&&(m=Object.assign(N,m)),this[Lt]=N=m)),this._writeUpdate(this[Lt],A),this}addTo(m,A){if(typeof A=="number")this[Pu]===EM?this.set(m,(+this.getProperty(m)||0)+A):(this[Pu]||this.update(),this.set(m,new Xd(A)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,A){if(typeof A=="number")return this.addTo(m,-A);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let A=this[Ie],w=this[Pe];Ol(w),Gr(this[Ie]).addWrite({key:w,store:i,invalidated:!0,entry:this[sn],nodeName:this[Ie]?.nodeName,before:Ge.invalidate?.bind(this,A,w),beforeIntermediate:Ee.invalidate?.bind(this,A,w),commit:(b,I)=>{if(I?.version>b)return;let y=null;for(let U in r)y||(y={}),y[U]=this.getProperty(U);S(w,y,this[sn],b,Mu,E,this[Ie],0,"invalidate")}})}static evict(m,A,w){let N=this.Source,b;if(!((R||E)&&(!A||(b=i.getEntry(m),!b||!A)||b.version!==w))){if(R){if(i.hasLock(m,b.version))return;let I;for(let y in r)I||(I={}),I[y]=A[y];if(I)return S(m,I,b,w,Uu,null,null,0,null,!0)}return i.ifVersion(w,()=>{Rd(m,A,null)}),E?S(m,null,b,w,Uu,null,null,0,null,!0):i.remove(m,w)}}lock(){throw new Error("Not yet implemented")}static operation(m,A){return m.table||=s,m.schema||=c,gM.operation(m,A)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,A,w){let N=this[Ie],b=Gr(N),I=this[Pe];Ol(I);let y=this[sn];this[Pu]=A?EM:zZ;let U={key:I,store:i,entry:y,nodeName:N?.nodeName,validate:M=>{m||(m=this[Lt]),A||m&&zd(m)?(this.validate(m,!A),N?.source||(P&&(m[P.name]=P.type==="Date"?new Date(M):P.type==="String"?new Date(M).toISOString():M),A&&(t&&m[t]!==I&&(m[t]=I),v&&(y?.value?m[v.name]=y?.value[v.name]:m[v.name]=v.type==="Date"?new Date(M):v.type==="String"?new Date(M).toISOString():M),m=qo(m)))):b.removeWrite(U)},before:A?Ge.put?()=>Ge.put(N,I,m):null:Ge.patch?()=>Ge.patch(N,I,m):Ge.put?()=>Ge.put(N,I,qo(this)):null,beforeIntermediate:A?Ee.put?()=>Ee.put(N,I,m):null:Ee.patch?()=>Ee.patch(N,I,m):Ee.put?()=>Ee.put(N,I,qo(this)):null,commit:(M,D,x)=>{if(x){if(N&&D?.version>(N.lastModified||0)&&(N.lastModified=D.version),this[sn]=D,D?.value?.[pe])throw new Error("Can not assign a record to a record, check for circular references");A||(this[pe]=D?.value??null)}this[Lt]=m,this[Bu]=M;let k=D?.value,ae=m;if(this[Pu]=0,D?.version>=M)if(E){let He=D.localTime,ie=D.version;for(;ae&&(He>M||ie>=M&&He>0);){let he=l.get(He),Z=xt(he);if(ie=Z.version,ie>M){if(Z.type==="patch"){let de=Z.getValue(i);ae=Qd(ae,de)}else if(Z.type==="put"||Z.type==="delete")return}else if(ie===M)return;He=Z.previousLocalTime}}else{if(A)return;ae=Qd(ae,k)}let le;if(A?le=ae:(this[pe]=k,le=A?ae:qo(this,ae)),this[pe]=le,le?.[pe])throw new Error("Can not assign a record to a record, check for circular references");let se;A||(se=m),Rd(I,k,le);let ue=A?"put":"patch";S(I,le,D,M,0,E,N,N.expiresAt||(d?d+Date.now():0),ue,!1,se)}};b.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[On]){for await(let A of this.search(m))(await Xe.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[pe]?this._writeDelete(m):!1}_writeDelete(m){let A=Gr(this[Ie]),w=this[Pe];Ol(w);let N=this[Ie];return A.addWrite({key:w,store:i,resource:this,nodeName:N?.nodeName,before:Ge.delete?.bind(this,N,w),beforeIntermediate:Ee.delete?.bind(this,N,w),commit:(b,I,y)=>{let U=I?.value;y&&(N&&I?.version>(N.lastModified||0)&&(N.lastModified=I.version),_E(this,I)),!(I?.version>b)&&(Rd(this[Pe],U),rt.trace("Write delete entry",w,b),E||h?(S(w,null,this[sn],b,0,E,this[Ie],0,"delete"),E||Tp()):i.remove(this[Pe]))}}),!0}search(m){let A=this[Ie],w=Gr(A);if(!m)throw new Error("No query provided");let N=m.conditions;N?N.length===void 0&&(N=N[Symbol.iterator]?Array.from(N):[N]):N=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Pe]&&(N=[{attribute:null,comparator:"prefix",value:this[Pe]}].concat(N));let b,I={};function y(Z,de){let wt;switch(de){case"and":case void 0:if(Z.length<1)throw new Error('An "and" operator requires at least one condition');wt=!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 "+de)}let hs=wt&&{},ms;for(let Ze of Z){if(Ze.conditions){Ze.conditions=y(Ze.conditions,Ze.operator);continue}let kr=Ze[0]??Ze.attribute,Tn=kr==null?B:ei(p,kr);if(Tn){if(wt){let $r=Wn(kr),ps=hs[$r];ps?(ps.push(Ze),ms=!0):hs[$r]=[Ze]}(Tn.type||iS[Ze.comparator])&&(Ze[1]===void 0?Ze.value=M(Ze.value,Tn):Ze[1]=M(Ze[1],Tn))}else if(kr!=null)throw(0,wn.handleHDBError)(new Error,`${kr} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return Z;if(ms)for(let Ze in hs){let kr=hs[Ze],Tn=kr.length;if(Tn>1)for(let $r=0;$r<Tn;$r++){let ps=kr[$r];if(ps.comparator==="ge"||ps.comparator==="greater_than_equal")for(let Bi=0;Bi<Tn;Bi++){let Qa=kr[Bi];(Qa.comparator==="le"||Qa.comparator==="less_than_equal")&&(ps.comparator="between",ps.value=[ps.value,Qa.value],Z.splice(Z.indexOf(Qa),1))}if(ps.comparator==="equals"||!ps.comparator){for(let Bi=0;Bi<Tn;Bi++)if(Bi!==$r){let Qa=kr[Bi];Z.splice(Z.indexOf(Qa),1)}break}}}return Z}a(y,"prepareConditions");function U(Z,de){if(m.enforceExecutionOrder)return Z;for(let wt of Z)wt.conditions&&(wt.conditions=U(wt.conditions,wt.operator));return Z.length>1&&de!=="or"?(0,TM.sortBy)(Z,sf(Xe)):Z}a(U,"orderConditions");function M(Z,de){return Array.isArray(Z)?Z.map(wt=>uE(wt,de)):uE(Z,de)}a(M,"coerceTypedValues");let D=m.operator;(N.length>0||D)&&(N=y(N,D));let x=typeof m.sort=="object"&&m.sort,k;if(x&&D!=="or"){let Z=x.attribute;if(b=N.find(de=>Wn(de.attribute)===Wn(Z)),!b){if(!ei(p,Z))throw(0,wn.handleHDBError)(new Error,`${Array.isArray(Z)?Z.join("."):Z} is not a defined attribute`,404);b={attribute:Z,comparator:"sort"},N.push(b)}b.descending=!!x.descending}N=U(N,D),x&&(N[0]===b?x.next&&(k={dbOrderedAttribute:x.attribute,attribute:x.next.attribute,descending:x.next.descending,next:x.next.next}):(b&&N.splice(N.indexOf(b),1),k=x));let ae=m.select;if(N.length===0&&(N=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:N,operator:D,postOrdering:k,selectApplied:!!ae};let le=w.useReadTxn(),se=oS(N,D,Xe,le,m,A,(Z,de)=>Mb(Z,ae,A,de),I),ue=m.ensureLoaded!==!1;k||(se=he(se));let He=Xe.transformEntryForSelect(ae,A,I,ue,!0),ie=Xe.transformToOrderedSelect(se,ae,k,A,He);function he(Z){return m.offset||m.limit!==void 0?Z.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):Z}return a(he,"applyOffset"),k&&(ie=he(ie)),ie.onDone=()=>{ie.onDone=null,w.doneReadTxn()},ie.selectApplied=!0,ie.getColumns=()=>{if(ae){let Z=[];for(let de of ae)de==="*"?Z.push(...p.map(wt=>wt.name)):Z.push(de.name||de);return Z}return p.map(Z=>Z.name)},ie}static transformToOrderedSelect(m,A,w,N,b){let I=new z$;if(w){m=Mb(m,A,N,null);let y;I.iterate=function(){let M,D=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),x,k=w.dbOrderedAttribute,ae,le,se=!0;function ue(ie){let he=ie.next&&ue(ie.next),Z=ie.descending;return(de,wt)=>{let hs=Sp(de,ie.attribute,N),ms=Sp(wt,ie.attribute,N),Ze=Z?(0,aa.compareKeys)(ms,hs):(0,aa.compareKeys)(hs,ms);return Ze===0?he?.(de,wt)||0:Ze}}a(ue,"createComparator");let He=ue(w);return{async next(){let ie;if(M)if(ie=M.next(),ie.done){if(x)return I.onDone&&I.onDone(),ie}else return{value:await b(ie.value)};y=[],ae&&y.push(ae);do if(ie=await D.next(),ie.done){if(x=!0,y.length)break;return I.onDone&&I.onDone(),ie}else{let he=ie.value;if(he?.then&&(he=await he),k){let Z=Sp(he,k,N);if(se)se=!1,le=Z;else if(Z!==le){le=Z,ae=he;break}}y.push(he)}while(!0);return w.isGrouped,y.sort(He),M=y[Symbol.iterator](),ie=M.next(),ie.done?(I.onDone&&I.onDone(),ie):{value:await b(ie.value)}},return(){I.onDone&&I.onDone(),D.return()},throw(){I.onDone&&I.onDone(),D.throw()}}};let U=a(M=>{if(typeof A=="object"&&Array.isArray(M.attribute))for(let D=0;D<A.length;D++){let x=A[D],k;if(x.name===M.attribute[0]){for(k=x.sort||(x.sort={});k.next;)k=k.next;k.attribute=M.attribute.slice(1),k.descending=M.descending}else x===M.attribute[0]&&(A[D]=k={name:x,sort:{attribute:M.attribute.slice(1),descending:M.descending}})}M.next&&U(M.next)},"applySortingOnSelect");U(w)}else I.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),I=I.map(b);return I}static transformEntryForSelect(m,A,w,N,b){if(m&&(m===t||m?.length===1&&m[0]===t)){let M=a(D=>D?.key??D,"transform");return m===t?M:m.asArray?D=>[M(D)]:D=>({[t]:M(D)})}let I;N&&R&&!m?.every(M=>{let D;return typeof M=="object"?D=M.name:D=M,r[D]||D===t})&&(I=!0);let y,U=a(M=>{let D;if(M!=null){if(hp=M,D=M.value||M.deref?.(),!D&&(M.key===void 0||M.deref)){if(M=mp(M.key??M,A,{transaction:Gr(A).getReadTxn(),lazy:m?.length<4},!1,x=>x),M?.then)return M.then(U);D=M?.value}if(I&&(M.metadataFlags&(Mu|Uu)||M.expiresAt&&M.expiresAt<Date.now())){let x=pp(M.key??M,M,A);if(x?.then)return x.then(U)}}if(D==null)return b?ia.SKIP:D;if(m&&!(m[0]==="*"&&m.length===1)){let x,k=a((le,se)=>{let ue;typeof le=="object"?ue=le.name:ue=le;let He=vi?.[ue],ie;if(He){let he=w?.[ue];if(he)if(he.hasMappings){let de=He.from?D[He.from]:Wn(M.key);ie=he.get(de),ie||(ie=[])}else ie=he.fromRecord?.(D);else ie=He(D,A,M);let Z=a(de=>{if(de&&typeof de=="object"){let wt=He.definition?.tableClass||Xe;y||(y={});let hs=y[ue]||(y[ue]=wt.transformEntryForSelect(ue===le?null:le.select||(Array.isArray(le)?le:null),A,he,N));if(Array.isArray(de)){let ms=[],Ze=wt.transformToOrderedSelect(de,le.select,typeof le.sort=="object"&&le.sort,A,hs)[Symbol.asyncIterator](),kr=a($r=>{for(;!$r.done;){if($r?.then)return $r.then(kr);ms.push($r.value),$r=Ze.next()}se(ms,ue)},"nextValue"),Tn=kr(Ze.next());Tn&&(x||(x=[]),x.push(Tn));return}else if(de=hs(de),de?.then){x||(x=[]),x.push(de.then(ms=>se(ms,ue)));return}}se(de,ue)},"handleResolvedValue");ie?.then?(x||(x=[]),x.push(ie.then(Z))):Z(ie);return}else ie=D[ue],ie&&typeof ie=="object"&&ue!==le&&(ie=this.transformEntryForSelect(le.select||le,A,null)({value:ie}));se(ie,ue)},"selectAttribute"),ae;if(typeof m=="string")k(m,le=>{ae=le});else if(Array.isArray(m))if(m.asArray)ae=[],m.forEach((le,se)=>{le==="*"?m[se]=D:k(le,ue=>ae[se]=ue)});else{ae={};let le=m.forceNulls;for(let se of m)if(se==="*")for(let ue in D)ae[ue]=D[ue];else k(se,(ue,He)=>{ue===void 0&&le&&(ue=null),ae[He]=ue})}else throw new wn.ClientError("Invalid select"+m);return x?Promise.all(x).then(()=>ae):ae}return D},"transform");return U}async subscribe(m){if(!l)throw new Error("Can not subscribe to a table without an audit log");E||dt({table:s,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let A=!m.rawEvents,w=NI(Xe,this[Pe]??null,function(y,U,M,D){try{let x=U.getValue?.(i,A);if(!x&&U.type==="patch"&&A){let k=i.getEntry(y);k?.version===U.version?x=k.value:x=U.getValue?.(i,!0,M),U.type="put"}this.send({id:y,timestamp:M,value:x,version:U.version,type:U.type,beginTxn:D})}catch(x){rt.error(x)}},m.startTime||0,this[On]);this[On]&&(w.includeDescendants=!0,m.onlyChildren&&(w.onlyChildren=!0)),m.crossThreads===!1&&(w.crossThreads=!1),m.supportsTransactions&&(w.supportsTransactions=!0);let N=this[Pe],b=m.previousCount;b>1e3&&(b=1e3);let I=m.startTime;if(this[On]){if(I){if(b)throw new wn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:U}of l.getRange({start:I,exclusiveStart:!0})){let M=xt(U);if(M.tableId!==n)continue;let D=M.recordId;(N==null||pM(N,D))&&w.send({id:D,timestamp:y,...M}),w.startTime=y}}else if(b){let y=[];for(let{key:U,value:M}of l.getRange({start:"z",end:!1,reverse:!0}))try{let D=xt(M);if(D.tableId!==n)continue;let x=D.recordId;if(N==null||pM(N,x)){let k=D.getValue(i,A,U);if(y.push({id:x,timestamp:U,value:k,version:D.version,type:D.type}),--b<=0)break}}catch(D){rt.error("Error getting history entry",U,D)}for(let U=y.length;U>0;)w.send(y[--U]);y[0]&&(w.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:U,version:M,localTime:D}of i.getRange({start:N??!1,end:N==null?void 0:[N,aa.MAXIMUM_KEY],versions:!0}))U&&w.send({id:y,version:M,timestamp:D,value:U})}else{b&&!I&&(I=0);let y=this[sn]?.localTime;if(y===Yp&&(i.cache?.delete(N),this[sn]=i.getEntry(N),rt.trace("re-retrieved record",y,this[sn]?.localTime),y=this[sn]?.localTime),rt.trace("Subscription from",I,"from",N,y),I<y){let U=[],M=y;do{let D=l.get(M);if(D){m.omitCurrent=!0;let x=xt(D),k=x.getValue(i,A,M);A&&(x.type="put"),U.push({id:N,value:k,timestamp:M,...x}),M=x.previousLocalTime}else break;b&&b--}while(M>I&&b!==0);for(let D=U.length;D>0;)w.send(U[--D]);w.startTime=y}!m.omitCurrent&&this.doesExist()&&w.send({id:N,version:this[Bu],timestamp:y,value:this})}return m.listener&&w.on("data",m.listener),w}doesExist(){return!!(this[pe]||this[Pu])}publish(m,A){this._writePublish(m,A)}_writePublish(m,A){let w=Gr(this[Ie]),N=this[Pe]||null;Ol(N);let b=this[Ie];w.addWrite({key:N,store:i,entry:this[sn],nodeName:b?.nodeName,validate:()=>{this.validate(m)},before:Ge.publish?.bind(this,b,N,m),beforeIntermediate:Ee.publish?.bind(this,b,N,m),commit:(I,y,U)=>{y===void 0&&h&&!E&&Tp(),S(N,y?.value??null,y,y?.version||I,0,!0,b,y?.expiresAt,"message",!1,m)}})}validate(m,A){let w,N=a((b,I,y)=>{if(I.type&&b!=null)if(A&&b.__op__&&(b=b.value),I.properties){typeof b!="object"&&(w||(w=[])).push(`Property ${y} must be an object${I.type?" ("+I.type+")":""}`);let U=I.properties;for(let M=0,D=U.length;M<D;M++){let x=U[M],k=N(b[x.name],x,y+"."+x.name);k&&(b[x.name]=k)}}else switch(I.type){case"Int":(typeof b!="number"||b>>0!==b)&&(w||(w=[])).push(`Property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof b!="number"||!(Math.floor(b)===b&&Math.abs(b)<=9007199254740992))&&(w||(w=[])).push(`Property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(w||(w=[])).push(`Property ${y} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(U=>typeof U=="string")||(w||(w=[])).push(`Property ${y} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(w||(w=[])).push(`Property ${y} must be a string`);break;case"Boolean":typeof b!="boolean"&&(w||(w=[])).push(`Property ${y} must be a boolean`);break;case"Date":if(!(b instanceof Date)){if(typeof b=="string"||typeof b=="number")return new Date(b);(w||(w=[])).push(`Property ${y} must be a Date`)}break;case"BigInt":if(typeof b!="bigint"){if(typeof b=="string"||typeof b=="number")return BigInt(b);(w||(w=[])).push(`Property ${y} must be a bigint`)}break;case"Bytes":b instanceof Uint8Array||(w||(w=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(b)){if(I.elements)for(let U=0,M=b.length;U<M;U++){let D=b[U],x=N(D,I.elements,y+"[*]");x&&(b[U]=x)}}else(w||(w=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break}I.nullable===!1&&b==null&&(w||(w=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let b=0,I=p.length;b<I;b++){let y=p[b];if(!y.relationship&&(!A||y.name in m)){let U=N(m[y.name],y,y.name);U&&(m[y.name]=U)}}if(w)throw new wn.ClientError(w.join(". "))}getUpdatedTime(){return this[Bu]}wasLoadedFromSource(){return R?!!this[yg]:void 0}static async addAttributes(m){let A=p.slice(0);for(let w of m){if(!w.name)throw new wn.ClientError("Attribute name is required");if(w.name.match(/[`/]/))throw new wn.ClientError("Attribute names cannot include backticks or forward slashes");A.push(w)}return dt({table:s,database:c,schemaDefined:_,attributes:A}),Xe.indexingOperation}static async removeAttributes(m){let A=p.filter(w=>!m.includes(w.name));return dt({table:s,database:c,schemaDefined:_,attributes:A}),Xe.indexingOperation}static getRecordCount(m){let A=i.getStats().entryCount,w=5e3,N=1e3,b;A>w&&!m?.exactCount&&(b=N);let I=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:b}))y!=null&&I++;if(b){let y=I;I=0;for(let{value:ue}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:b}))ue!=null&&I++;let U=b*2,M=(I+y)/U,D=Math.pow((I-y+1)/b/2,2)+M*(1-M)/U,x=Math.max(Math.sqrt(D)*A,1),k=Math.round(M*A),ae=Math.max(k-1.96*x,0),le=Math.min(k+1.96*x,A),se=Math.pow(10,Math.round(Math.log10(x)));return se>k&&(se=se/10),I=Math.round(k/se)*se,{recordCount:I,estimatedRange:[Math.round(ae),Math.round(le)]}}return{recordCount:I}}static updatedAttributes(){vi=this.propertyResolvers={$id:(m,A,w)=>({value:w.key}),$updatedtime:(m,A,w)=>w.version,$record:(m,A,w)=>w?{value:m}:m};for(let m of this.attributes){m.resolve=null;let A=m.relationship;if(A)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),Pb=!0,A.to)m.elements?.definition?(vi[m.name]=m.resolve=(w,N,b)=>{let I=w[A.from?A.from:t],y=m.elements.definition.tableClass;return b?sc({attribute:A.to,value:I},Gr(N).getReadTxn(),!1,y).asArray:y.search([{attribute:A.to,value:I}],N).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,A.from&&(m.resolve.from=A.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(A.from){let w=m.definition||m.elements?.definition;w?(vi[m.name]=m.resolve=(N,b,I)=>{let y=N[A.from];if(y!==void 0){if(m.elements){let U,M=y.map(D=>{let x=I?w.tableClass.primaryStore.getEntry(D,{transaction:Gr(b).getReadTxn()}):w.tableClass.get(D,b);return x?.then&&(U=!0),x});return A.filterMissing?U?Promise.all(M).then(D=>D.filter(SM)):M.filter(SM):U?Promise.all(M):M}return I?w.tableClass.primaryStore.getEntry(y,{transaction:Gr(b).getReadTxn()}):w.tableClass.get(y,b)}},m.set=(N,b)=>{if(Array.isArray(b)){let I=b.map(y=>y[Pe]||y[w.tableClass.primaryKey]);N[A.from]=I}else{let I=b[Pe]||b[w.tableClass.primaryKey];N[A.from]=I}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=A.from):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`)}Zd(this,this)}static async deleteHistory(m=0){let A;for(let{key:w,value:N}of l.getRange({start:0,end:m}))await vu(),xt(N).tableId===n&&(A=l.remove(w));await A}static async*getHistory(m=0,A=1/0){for(let{key:w,value:N}of l.getRange({start:m,end:A})){await vu();let b=xt(N);b.tableId===n&&(yield{id:b.recordId,localTime:w,version:b.version,type:b.type,value:b.getValue(i,!0,w),user:b.user})}}static async getHistoryOfRecord(m){let A=[];if(m==null)throw new Error("An id is required");let w=i.getEntry(m);if(!w)return A;let N=w.localTime;if(!N)throw new Error("The entry does not have a local audit time");let b=0;do{await vu();let I=l.get(N);if(I){let y=xt(I);A.push({id:y.recordId,localTime:N,version:y.version,type:y.type,value:y.getValue(i,!0,N),user:y.user}),N=y.previousLocalTime}else break}while(b<1e3&&N);return A.reverse()}static cleanup(){Y?.remove()}}Xe.updatedAttributes();let Z$=Xe.prototype;return Z$[jZ]=!0,d&&Xe.setTTLExpiration(d/1e3),V&&eV(),Xe;function Rd(Q,m,A){let w;for(let N in r){let b=r[N],I=b.isIndexing,y=A?.[N],U=m?.[N];if(y===U&&!I)continue;w=!0;let M=b.indexNulls,D=(0,Hu.getIndexedValues)(U,M);if(D){fM&&b.prefetch(D.map(x=>({key:x,value:Q})),mM);for(let x=0,k=D.length;x<k;x++)b.remove(D[x],Q)}if(D=(0,Hu.getIndexedValues)(y,M),D){fM&&b.prefetch(D.map(x=>({key:x,value:Q})),mM);for(let x=0,k=D.length;x<k;x++)b.put(D[x],Q)}}return w}a(Rd,"updateIndices");function Ol(Q){switch(typeof Q){case"number":return!0;case"string":if(Q.length<659)return!0;if(Q.length>hM)throw new Error("Primary key size is too large: "+Q.length);break;case"object":if(Q===null)return!0;break;case"bigint":if(Q<2n**64n&&Q>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof Q)}if((0,aa.writeKey)(Q,JZ,0)>hM)throw new Error("Primary key size is too large: "+Q.length);return!0}a(Ol,"checkValidId");function mp(Q,m,A,w,N){let b=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),A.transaction?.isDone)return N(null,Q);let I=i.getEntry(Q,A);return I&&m&&(I?.version>(m.lastModified||0)&&(m.lastModified=I.version),I?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=I.localTime)),N(I,Q)},"whenPrefetched");return w?b():Re>0?(Re--,b()):new Promise((I,y)=>{Re===0?(Re--,i.prefetch([Q],()=>{U(),M()})):(z.push(Q),oe.push(M),z.length>X$&&(Re--,U()));function U(){if(z.length>0){let D=oe;i.prefetch(z,()=>{Re===-1?U():Re++;for(let x of D)x()}),z=[],oe=[],ce>2&&ce--}else Re=ce,ce<J$&&ce++}a(U,"prefetch");function M(){try{I(b())}catch(D){y(D)}}a(M,"load")})}a(mp,"loadLocalRecord");function Ad(Q){if(!Q?.role)return;let m=Q.role.permission;if(m.super_user)return XZ;let A=m[c],w,N=A?.tables;if(N)return N[s];if(c==="data"&&(w=m[s])&&!w.tables)return w}a(Ad,"getTablePermissions");function pp(Q,m,A,w){if(R){let N;if(A.noCache?N=!0:(m?(!m.value||m.metadataFlags&(Mu|Uu)||m.expiresAt&&m.expiresAt<Date.now())&&(N=!0):N=!0,In(!N,"cache-hit",s)),N){let b=Ub(Q,m,A).then(I=>(I?.value?.[pe]&&rt.error("Can not assign a record with a record property"),A&&(I?.version>(A.lastModified||0)&&(A.lastModified=I.version),A.lastRefreshed=Date.now()),I));if(A?.onlyIfCached||m?.value&&w?.allowStaleWhileRevalidate?.(m,Q)){if(b.catch(I=>rt.warn(I)),A?.onlyIfCached&&!w.doesExist())throw new wn.ServerError("Entry is not cached",504);return}else return b}}}a(pp,"ensureLoadedFromSource");function Gr(Q){let m=Q?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let A=m.next;if(!A)return m=m.next=new xo,m.lmdbDb=i,m;m=A}while(!0)}else return new rf}a(Gr,"txnForContext");function Sp(Q,m,A){if(!Q)return;hp=Q;let w=Q.value||Q.deref?.()||(hp=i.getEntry(Q.key))?.value;if(typeof m=="object"){let b=vi,I=w;for(let y=0,U=m.length;y<U;y++){let M=m[y],D=b?.[M];I=D&&I?D(I,A,!0)?.value:I?.[M],b=D?.definition?.tableClass?.propertyResolvers}return I}let N=vi[m];return N?N(w,A):w[m]}a(Sp,"getAttributeValue");function Mb(Q,m,A,w){let N=Gr(A).getReadTxn(),b=w?.length,I={transaction:N,lazy:b>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},y;function U(M,D){let x=M?.value;if(!x)return ia.SKIP;for(let k=0;k<b;k++)if(!y?.includes(k)&&!w[k](x,M))return ia.SKIP;return D!==void 0&&(M.key=D),M}if(a(U,"processEntry"),b>0||!Q.hasEntries){let M=Q.map(D=>{if(y=null,typeof D=="object"&&D.key!==void 0)return b>0?U(D):D;if(D==null)return ia.SKIP;for(let x=0;x<b;x++){let ae=w[x].idFilter;if(ae){if(!ae(D))return ia.SKIP;y||(y=[]),y.push(x)}}return mp(D,A,I,!1,U)});return Array.isArray(Q)&&(M=M.filter(D=>D!==ia.SKIP)),M.hasEntries=!0,M}return Q}a(Mb,"transformToEntries");async function Ub(Q,m,A){let w=m?.metadataFlags,N=m?.version,b,I;if(!i.attemptLock(Q,N,()=>{clearTimeout(I);let D=i.getEntry(Q);!D||!D.value||D.metadataFlags&(Mu|Uu)?b(Ub(Q,i.getEntry(Q),A)):b(D)}))return new Promise(D=>{b=D,I=setTimeout(()=>{i.unlock(Q,N)},QZ)});let y=m?.value,U={requestContext:A,replacingRecord:y,replacingVersion:N,source:null,resourceCache:A?.resourceCache},M=A?.responseHeaders;return new Promise((D,x)=>{let k;wg(ze(U,async ae=>{let le=performance.now(),se,ue,He;try{for(let de of Xe.sources)if(de.get&&(!de.get.reliesOnPrototype||de.prototype.get)&&(U.source=de,se=await de.get(Q,U),se))break;He=w&Mu;let he=U.lastModified||He&&N;ue=He||he>N||!y,he||(he=(0,Hu.getNextMonotonicTime)());let Z=performance.now()-le;if(nn(Z,"cache-resolution",s),M&&M.append("Server-Timing",`cache-resolve;dur=${Z.toFixed(2)}`),ae.timestamp=he,d&&!U.expiresAt&&(U.expiresAt=Date.now()+d),se){if(typeof se!="object")throw new Error("Only objects can be cached and stored in tables");typeof se.toJSON=="function"&&(se=se.toJSON()),t&&se[t]!==Q&&(se[t]=Q)}k=!0,D({version:he,value:se})}catch(he){he.message+=` while resolving record ${Q} for ${s}`,y&&((he.code==="ECONNRESET"||he.code==="ECONNREFUSED"||he.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(he.statusCode===500||he.statusCode===502||he.statusCode===503||he.statusCode===504))?(D({version:N,value:y}),rt.trace(he.message,"(returned stale record)")):x(he),U.transaction.abort();return}if(A?.noCacheStore){U.transaction.abort();return}Gr(U).addWrite({key:Q,store:i,entry:m,nodeName:"source",commit:(he,Z)=>{if(Z?.version!==N)return;let de=Rd(Q,y,se);se?(Ee.put?.(U,Q,se),S(Q,se,Z,he,0,E&&ue||null,U,U.expiresAt,"put",!!He)):(Ee.delete?.(U,Q),E||h?S(Q,null,Z,he,0,E&&ue||null,U,0,"delete",!!He):i.remove(Q,N))}})}),()=>{i.unlock(Q,N)},ae=>{i.unlock(Q,N),k&&rt.error("Error committing cache update",ae)})})}a(Ub,"getFromSource");function Tp(){if(qt!==Td&&(Td=qt,(0,oa.getWorkerIndex)()===(0,oa.getWorkerCount)()-1)){if(gd&&clearTimeout(gd),!qt)return;let Q=new Date;Q.setMonth(0),Q.setDate(1),Q.setHours(0),Q.setMinutes(0),Q.setSeconds(0);let m=Math.ceil((Date.now()-Q.getTime())/qt)*qt+Q.getTime(),A=a(w=>{rt.trace(`Scheduled next cleanup scan at ${new Date(w)}ms`),gd=setTimeout(()=>H=H.then(async()=>{if(A(Math.max(w+qt,Date.now())),i.rootStore.status!=="open"){clearTimeout(gd);return}let N=50,b=new Array(N),I=0;rt.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:U,value:M,version:D,expiresAt:x}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let k;M===null&&!E&&D+WZ<Date.now()?k=i.remove(U,D):x&&x+f<Date.now()&&(k=Xe.evict(U,M,D),y++),k&&(await b[I],b[I]=k.catch(ae=>{rt.error("Cleanup error",ae)}),++I>=N&&(I=0)),await vu()}rt.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){rt.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(w-Date.now(),2147483647)).unref()},"startNextTimer");A(m)}}a(Tp,"scheduleCleanup");function vb(){Y=l?.addDeleteRemovalCallback(n,Q=>{let m=i.getEntry(Q);m?.value===null&&i.remove(Q,m.version)})}a(vb,"addDeleteRemoval");function eV(){(0,oa.getWorkerIndex)()===0&&setInterval(async()=>{try{let Q=V.name,m=r[Q];if(!m)throw new Error(`expiresAt attribute ${V} must be indexed`);for(let{value:A}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let w=i.getEntry(A);w?.value?.[Q]<Date.now()&&Xe.evict(A,w.value,w.version),await vu()}}catch(Q){rt.error("Error in evicting old records",Q)}},KZ).unref()}a(eV,"runRecordExpirationEviction")}function Ig(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 mM(){}function ZZ(e){gM=e}function uE(e,t){let r=t?.type;return e===null?e: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"&&!e5.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,dE.autoCast)(e):e}function pM(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 wg(e,t,r){return e?.then?e.then(t,r):t(e)}function _E(e,t){e[sn]=t,e[pe]=t?.value??null,e[Bu]=t?.version}function SM(e){return e!=null}var ss,ia,Hu,TM,Fu,wn,qu,xu,rt,aa,oa,dE,YZ,gM,KZ,WZ,fM,QZ,Bu,jZ,sn,Pu,EM,zZ,yg,Nc,Mu,Uu,JZ,hM,XZ,Cge,e5,vu,EE=ye(()=>{ss=q(C()),ia=require("lmdb"),Hu=q(dr()),TM=require("lodash");Kn();nS();Fu=q(J());II();wn=q(re()),qu=q(si()),xu=q(zn());Ne();af();rt=q(G());tf();Fo();aa=require("ordered-binary"),oa=q(et());Bo();dE=q(W());Za();li();Kd();YZ=new Uint8Array(9);YZ[8]=192;KZ=6e4,WZ=864e5;Fu.initSync();fM=Fu.get(ss.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),QZ=1e4,Bu=Symbol.for("version"),jZ=Symbol.for("incremental-update"),sn=Symbol("entry"),Pu=Symbol("is-saving"),EM=1,zZ=2,yg=Symbol("loaded-from-source"),Nc={isNotification:!0,ensureLoaded:!1},Mu=1,Uu=8,JZ=Buffer.allocUnsafeSlow(8192),hM=1978,XZ={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},Cge=(0,dE.convertToMS)(Fu.get(ss.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(fE,"makeTable");a(Ig,"attributesAsObject");a(mM,"noop");a(ZZ,"setServerUtilities");e5=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(uE,"coerceType");a(pM,"isDescendantId");vu=a(()=>new Promise(setImmediate),"rest");a(wg,"when");a(_E,"updateResource");a(SM,"exists")});var xe={};ke(xe,{database:()=>Su,databases:()=>it,dropDatabase:()=>BT,dropTableMeta:()=>o5,getDatabases:()=>Zn,getTables:()=>t5,onUpdatedTable:()=>Ug,readMetaDb:()=>Gu,resetDatabases:()=>r5,table:()=>dt,tables:()=>an});function t5(){return TE||Zn(),an||{}}function Zn(){if(TE)return it;TE=!0,Ic=new Map;let e=(0,rr.getHdbBasePath)()&&(0,nt.join)((0,rr.getHdbBasePath)(),cn.DATABASES_DIR_NAME),t=(0,rr.get)(cn.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,rr.get)(cn.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,on.existsSync)(e)?e:(0,nt.join)((0,rr.getHdbBasePath)(),cn.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,on.existsSync)(e))for(let r of(0,on.readdirSync)(e,{withFileTypes:!0})){let n=(0,nt.basename)(r.name,".mdb");r.isFile()&&(0,nt.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Gu((0,nt.join)(e,r.name),null,n)}if((0,on.existsSync)((0,yc.getBaseSchemaPath)())){for(let r of(0,on.readdirSync)((0,yc.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,nt.join)((0,yc.getBaseSchemaPath)(),r.name),s=(0,nt.join)((0,yc.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,on.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,nt.extname)(i.name).toLowerCase()===".mdb"){let o=(0,nt.join)(s,i.name);Gu((0,nt.join)(n,i.name),(0,nt.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,on.existsSync)(s))for(let o of(0,on.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,nt.extname)(o.name).toLowerCase()===".mdb"&&Gu((0,nt.join)(s,o.name),(0,nt.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,nt.join)(c.path,(0,nt.basename)(o+".mdb"));(0,on.existsSync)(l)&&Gu(l,o,r,null,!0)}}for(let r in it){let n=Ic.get(r);if(n){let s=it[r];r.includes("delete")&&Cn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Cn.trace(`delete table class ${i}`),delete s[i])}else if(delete it[r],r==="data"){for(let s in an)delete an[s];delete an[gE]}}return Ic=null,it}}function r5(){TE=!1;for(let[,e]of Zi)e.needsDeletion=!0;Zn();for(let[e,t]of Zi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Zi.delete(e));return it}function Gu(e,t,r=Pg,n,s){let i=new Lg.default(e,!1);try{let o=Zi.get(e);o?o.needsDeletion=!1:(o=(0,mE.open)(i),Zi.set(e,o));let c=new ca.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(hE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,on.existsSync)(n)&&(i.path=n,_=(0,mE.open)(i),_.isLegacy=!0):_=Yd(o));let u=NM(r),d=u[gE],f=new Map;for(let{key:E,value:h}of l.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let O=f.get(p);O||f.set(p,O={attributes:[]}),(S==null||h.is_hash_attribute)&&(O.primary=h),S!=null&&O.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let z of p)if(z.is_hash_attribute||z.isPrimaryKey){S=z;break}if(!S){Cn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let O=u[E],T={},R=[],B,H,v=typeof S.audit=="boolean"?S.audit:(0,rr.get)(cn.CONFIG_PARAMS.LOGGING_AUDITLOG),P=S.trackDeletes,V=S.expiration,Y=S.eviction;if(O)T=O.indices,R=O.attributes,O.schemaVersion++;else{B=S.tableId,B?B>=(l.get(bc)||0)&&l.putSync(bc,B+1):(S.tableId=B=l.get(bc),B||(B=1),l.putSync(bc,B+1),l.putSync(S.key,S));let z=new ca.default(!S.is_hash_attribute,S.is_hash_attribute);H=Gd(o.openDB(S.key,z)),H.rootStore=o,H.tableId=B}for(let z of p){z.attribute=z.name;try{if(!z.is_hash_attribute&&(z.indexed||z.attribute&&!z.name)){if(!T[z.name]){let Re=new ca.default(!z.is_hash_attribute,z.is_hash_attribute);T[z.name]=o.openDB(z.key,Re),T[z.name].indexNulls=z.indexNulls}let oe=R.find(Re=>Re.name===z.name);oe?R.splice(R.indexOf(oe),1,z):R.push(z)}}catch(oe){Cn.error("Error trying to update attribute",z,R,T,oe)}}if(!O){O=bM(u,E,fE({primaryStore:H,auditStore:_,audit:v,expirationMS:V&&V*1e3,evictionMS:Y&&Y*1e3,trackDeletes:P,tableName:E,tableId:B,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:T,attributes:p,schemaDefined:S.schemaDefined,dbisDB:l})),O.schemaVersion=1;for(let z of Mg)z(O)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function NM(e){let t=it[e];if(t||(e==="data"?t=it[e]=an:e==="system"?Object.defineProperty(it,"system",{value:t=Object.create(null),configurable:!0}):t=it[e]=Object.create(null)),Ic&&!Ic.has(e)){let r=new Set;t[gE]=r,Ic.set(e,r)}return t}function bM(e,t,r){return e[t]=r,r}function Su({database:e,table:t}){e||(e=Pg),Zn();let r=NM(e),n=(0,nt.join)((0,rr.getHdbBasePath)(),cn.DATABASES_DIR_NAME),s=(0,rr.get)(cn.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,rr.get)(cn.CONFIG_PARAMS.STORAGE_PATH)||((0,on.existsSync)(n)?n:(0,nt.join)((0,rr.getHdbBasePath)(),cn.LEGACY_DATABASES_DIR_NAME));let o=(0,nt.join)(n,(i?t:e)+".mdb"),c=Zi.get(o);if(!c){let l=new Lg.default(o,!1);c=(0,mE.open)(l),Zi.set(o,c)}return c}async function BT(e){if(!it[e])throw new Error("Schema does not exist");let t=it[e];for(let r in t){let s=t[r].primaryStore.rootStore;Zi.delete(s.path),s.status==="open"&&(await s.close(),await RM.remove(s.path))}if(e==="data"){for(let r in an)delete an[r];delete an[gE]}delete it[e]}function dt({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,trackDeletes:c,schemaDefined:l,origin:_}){t||(t=Pg);let u=Su({database:t,table:e}),d=it[t],f=d?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;l==null&&(l=!0);let O=new ca.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=Yd(u)),h=i.find(oe=>oe.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=l,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,rr.get)(cn.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),n&&(h.eviction=n),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Cn.trace(`${e} table loading, opening primary store`);let V=new ca.default(!1,!0),Y=e+"/",z=Gd(u.openDB(Y,V));z.rootStore=u,S=u.dbisDb=u.openDB(hE.INTERNAL_DBIS_NAME,O),z.tableId=S.get(bc),z.tableId||(z.tableId=1),S.putSync(bc,z.tableId+1),h.tableId=z.tableId,f=bM(d,e,fE({primaryStore:z,auditStore:P,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:E,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:l,dbisDB:S})),f.schemaVersion=1,T=!0,v(),S.put(Y,h)}p=f.indices,S=S||(u.dbisDb=u.openDB(hE.INTERNAL_DBIS_NAME,O)),f.dbisDB=S;let B=[];for(let{key:P,value:V}of S.getRange({start:!0})){let[Y,z]=P.toString().split("/");if(z===""&&(z=V.name),z){if(Y!==e)continue}else z=Y;if(!i.find(Re=>Re.name===z)?.indexed&&V.indexed&&!V.isPrimaryKey){v(),T=!0,S.remove(P);let Re=f.indices[Y];Re&&B.push(Re)}}let H=[];try{for(let P of i||[]){if(P.relationship)continue;let V=e+"/"+(P.name||"");Object.defineProperty(P,"key",{value:V,configurable:!0});let Y=S.get(V);if(P.isPrimaryKey){if(Y=Y||S.get(V=e+"/")||{},o!==f.audit||(+r||void 0)!==(+Y.expiration||void 0)||(+n||void 0)!==(+Y.eviction||void 0)){let oe=Object.assign({},Y);typeof o=="boolean"&&(o&&f.enableAuditing(o),oe.audit=o),r&&(oe.expiration=+r),n&&(oe.eviction=+n),T=!0,v(),S.put(V,oe)}continue}Y?.attribute&&!Y.name&&(Y.indexed=!0);let z=!Y||Y.type!==P.type||Y.indexed!==P.indexed||JSON.stringify(Y.attributes)!==JSON.stringify(P.attributes)||JSON.stringify(Y.elements)!==JSON.stringify(P.elements);if(P.indexed){let oe=new ca.default(!0,!1),Re=u.openDB(V,oe);(z||Y.indexingPID&&Y.indexingPID!==process.pid||Y.restartNumber<ku.workerData?.restartNumber)&&(T=!0,v(),Y=S.get(V),(z||Y.indexingPID&&Y.indexingPID!==process.pid||Y.restartNumber<ku.workerData?.restartNumber)&&(T=!0,P.lastIndexedKey=Y?.lastIndexedKey||!1,P.indexingPID=process.pid,Re.isIndexing=!0,Object.defineProperty(P,"dbi",{value:Re}),P.indexNulls===void 0&&(P.indexNulls=!0),H.push(P)),S.put(V,P)),Y?.indexNulls&&P.indexNulls===void 0&&(P.indexNulls=!0),Re.indexNulls=P.indexNulls,p[P.name]=Re}else z&&(T=!0,v(),S.put(V,P))}}finally{R&&R()}if(T&&(f.schemaVersion++,f.updatedAttributes()),Cn.trace(`${e} table loading, running index`),H.length>0||B.length>0?f.indexingOperation=i5(f,H,B):T&&pE.signalSchemaChange(new SE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,T)for(let P of Mg)P(f,_!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),Cn.trace(`${e} table loaded`),f;function v(){R||u.transactionSync(()=>({then(P){R=P}}))}a(v,"startTxn")}async function i5(e,t,r){try{let n=e.schemaVersion;await pE.signalSchemaChange(new SE.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,p=(0,AM.getIndexedValues)(u[h]);if(p)for(let S=0,O=p.length;S<O;S++)E.dbi.put(p[S],_)}}),s.then(()=>l--,f=>{l--,Cn.error(f)}),ku.workerData&&ku.workerData.restartNumber!==OM.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}l>n5?await s:l>s5&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await pE.signalSchemaChange(new SE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){Cn.error("Error in indexing",n)}}function o5({table:e,database:t}){let r=Su({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 Ug(e){Mg.push(e)}var rr,hE,mE,nt,on,yc,ca,Lg,cn,RM,Dg,AM,pE,SE,ku,Cn,OM,Pg,gE,an,it,bc,Mg,TE,Zi,Ic,n5,s5,Ne=ye(()=>{rr=q(J()),hE=q(ut()),mE=require("lmdb"),nt=require("path"),on=require("fs"),yc=q(Qe());EE();ca=q(df()),Lg=q(Ef()),cn=q(C()),RM=q(require("fs-extra")),Dg=require("../index"),AM=q(dr()),pE=q(si()),SE=q(zn()),ku=require("worker_threads"),Cn=q(G()),OM=q(et());Bo();Za();Pg="data",gE=Symbol("defined-tables");(0,rr.initSync)();an=Object.create(null),it=Object.create(null);(0,Dg._assignPackageExport)("databases",it);(0,Dg._assignPackageExport)("tables",an);bc=Symbol.for("next-table-id"),Mg=[],Zi=new Map;a(t5,"getTables");a(Zn,"getDatabases");a(r5,"resetDatabases");a(Gu,"readMetaDb");a(NM,"ensureDB");a(bM,"setTable");a(Su,"database");a(BT,"dropDatabase");a(dt,"table");n5=1e3,s5=10;a(i5,"runIndexing");a(o5,"dropTableMeta");a(Ug,"onUpdatedTable")});var W=g((qge,xM)=>{"use strict";var eo=require("path"),LM=require("fs-extra"),Ar=G(),yM=require("fs-extra"),RE=require("os"),a5=require("net"),c5=require("recursive-iterator"),ot=C(),l5=Mp(),IM=require("papaparse"),AE=require("moment"),{inspect:u5}=require("util"),wM=require("is-number"),Hge=require("lodash"),_5=require("minimist"),d5=require("https"),f5=require("http"),{hdb_errors:OE}=re(),E5=/^((\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)))$/,DM=require("util").promisify(setTimeout),h5=100,m5=5,p5="",S5=4,CM={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};xM.exports={isEmpty:ln,isEmptyOrZeroLength:Ls,arrayHasEmptyValues:R5,arrayHasEmptyOrZeroLengthValues:A5,buildFolderPath:O5,isBoolean:PM,errorizeMessage:T5,stripFileExtension:b5,autoCast:y5,autoCastJSON:MM,autoCastJSONDeep:Bg,removeDir:I5,compareVersions:w5,isCompatibleDataVersion:C5,escapeRawValue:L5,unescapeValue:D5,stringifyProps:P5,timeoutPromise:U5,isClusterOperation:B5,getClusterUser:q5,checkGlobalSchemaTable:H5,getHomeDir:vM,getPropsFilePath:M5,promisifyPapaParse:x5,removeBOM:BM,createEventPromise:F5,checkProcessRunning:G5,checkSchemaTableExist:k5,checkSchemaExists:HM,checkTableExists:qM,getStartOfTomorrowInSeconds:$5,getLimitKey:V5,isObject:N5,isNotEmptyAndHasValue:g5,autoCasterIsNumberCheck:UM,backtickASTSchemaItems:Y5,isPortTaken:v5,createForkArgs:K5,autoCastBoolean:W5,async_set_timeout:DM,getTableHashAttribute:Q5,doesSchemaExist:j5,doesTableExist:z5,stringifyObj:J5,ms_to_time:X5,changeExtension:Z5,getEnvCliRootPath:Hg,noBootFile:e8,httpRequest:t8,transformReq:r8,convertToMS:n8,PACKAGE_ROOT:ot.PACKAGE_ROOT};function T5(e){return e instanceof Error?e:new Error(e)}a(T5,"errorizeMessage");function ln(e){return e==null}a(ln,"isEmpty");function g5(e){return!ln(e)&&(e||e===0||e===""||PM(e))}a(g5,"isNotEmptyAndHasValue");function Ls(e){return ln(e)||e.length===0||e.size===0}a(Ls,"isEmptyOrZeroLength");function R5(e){if(ln(e))return!0;for(let t=0;t<e.length;t++)if(ln(e[t]))return!0;return!1}a(R5,"arrayHasEmptyValues");function A5(e){if(Ls(e))return!0;for(let t=0;t<e.length;t++)if(Ls(e[t]))return!0;return!1}a(A5,"arrayHasEmptyOrZeroLengthValues");function O5(...e){try{return e.join(eo.sep)}catch{console.error(e)}}a(O5,"buildFolderPath");function PM(e){return ln(e)?!1:e===!0||e===!1}a(PM,"isBoolean");function N5(e){return ln(e)?!1:typeof e=="object"}a(N5,"isObject");function b5(e){return Ls(e)?p5:e.slice(0,-S5)}a(b5,"stripFileExtension");function y5(e){return ln(e)||e===""||typeof e!="string"?e:CM[e]!==void 0?CM[e]:UM(e)===!0?Number(e):E5.test(e)?new Date(e):e}a(y5,"autoCast");function MM(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(MM,"autoCastJSON");function Bg(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=Bg(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=Bg(r);n!==r&&(e[t]=n)}return e}else return MM(e)}a(Bg,"autoCastJSONDeep");function UM(e){if(e.startsWith("0.")&&wM(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&wM(e))}a(UM,"autoCasterIsNumberCheck");async function I5(e){if(Ls(e))throw new Error(`Directory path: ${e} does not exist`);try{await yM.emptyDir(e),await yM.remove(e)}catch(t){throw Ar.error(`Error removing files in ${e} -- ${t}`),t}}a(I5,"removeDir");function w5(e,t){if(Ls(e)){Ar.info("Invalid current version sent as parameter.");return}if(Ls(t)){Ar.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(w5,"compareVersions");function C5(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(C5,"isCompatibleDataVersion");function L5(e){if(ln(e))return e;let t=String(e);return t==="."?ot.UNICODE_PERIOD:t===".."?ot.UNICODE_PERIOD+ot.UNICODE_PERIOD:t.replace(ot.FORWARD_SLASH_REGEX,ot.UNICODE_FORWARD_SLASH)}a(L5,"escapeRawValue");function D5(e){if(ln(e))return e;let t=String(e);return t===ot.UNICODE_PERIOD?".":t===ot.UNICODE_PERIOD+ot.UNICODE_PERIOD?"..":String(e).replace(ot.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(D5,"unescapeValue");function P5(e,t){if(ln(e))return Ar.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+RE.EOL}!Ls(n)&&n[0]===";"?r+=" "+n+s+RE.EOL:Ls(n)||(r+=n+"="+s+RE.EOL)}catch{Ar.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(P5,"stringifyProps");function vM(){let e;try{e=RE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(vM,"getHomeDir");function M5(){let e=eo.join(vM(),ot.HDB_HOME_DIR_NAME,ot.BOOT_PROPS_FILE_NAME);return LM.existsSync(e)||(e=eo.join(__dirname,"../","hdb_boot_properties.file")),e}a(M5,"getPropsFilePath");function U5(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(U5,"timeoutPromise");async function v5(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=a5.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(v5,"isPortTaken");function B5(e){try{return ot.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Ar.error(`Error checking operation against cluster ops ${t}`)}return!1}a(B5,"isClusterOperation");function H5(e,t){let r=(Ne(),ne(xe)).getDatabases();if(!r[e])return OE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return OE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(H5,"checkGlobalSchemaTable");function q5(e,t){if(ln(t)){Ar.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ln(e)||Ls(e)){Ar.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){Ar.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Ar.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(q5,"getClusterUser");function x5(){IM.parsePromise=function(e,t,r){return new Promise(function(n,s){IM.parse(e,{header:!0,transformHeader:BM,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(x5,"promisifyPapaParse");function BM(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(BM,"removeBOM");function F5(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Ar.info(`Got cluster status event response: ${u5(s)}`);try{i.cancel()}catch{Ar.error("Error trying to cancel timeout.")}n(s)})})}a(F5,"createEventPromise");async function G5(e){let t=!0,r=0;do await DM(h5*r++),(await l5.findPs(e)).length>0&&(t=!1);while(t&&r<m5);if(t)throw new Error(`process ${e} was not started`)}a(G5,"checkProcessRunning");function k5(e,t){let r=HM(e);if(r)return r;let n=qM(e,t);if(n)return n}a(k5,"checkSchemaTableExist");function HM(e){let{getDatabases:t}=(Ne(),ne(xe));if(!t()[e])return OE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(HM,"checkSchemaExists");function qM(e,t){let{getDatabases:r}=(Ne(),ne(xe));if(!r()[e][t])return OE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(qM,"checkTableExists");function $5(){let e=AE().utc().add(1,ot.MOMENT_DAYS_TAG).startOf(ot.MOMENT_DAYS_TAG).unix(),t=AE().utc().unix();return e-t}a($5,"getStartOfTomorrowInSeconds");function V5(){return AE().utc().format("DD-MM-YYYY")}a(V5,"getLimitKey");function Y5(e){try{let t=new c5(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){Ar.error("Got an error back ticking items."),Ar.error(t)}}a(Y5,"backtickASTSchemaItems");function K5(e){return[e]}a(K5,"createForkArgs");function W5(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(W5,"autoCastBoolean");function Q5(e,t){let{getDatabases:r}=(Ne(),ne(xe)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(Q5,"getTableHashAttribute");function j5(e){let{getDatabases:t}=(Ne(),ne(xe));return t()[e]!==void 0}a(j5,"doesSchemaExist");function z5(e,t){let{getDatabases:r}=(Ne(),ne(xe));return r()[e]?.[t]!==void 0}a(z5,"doesTableExist");function J5(e){try{return JSON.stringify(e)}catch{return e}}a(J5,"stringifyObj");function X5(e){let t=AE.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(X5,"ms_to_time");function Z5(e,t){let r=eo.basename(e,eo.extname(e));return eo.join(eo.dirname(e),r+t)}a(Z5,"changeExtension");function Hg(){if(process.env[ot.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[ot.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=_5(process.argv);if(e[ot.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[ot.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(Hg,"getEnvCliRootPath");var vg;function e8(){if(vg)return vg;let e=Hg();Hg()&&LM.pathExistsSync(eo.join(e,ot.HDB_CONFIG_FILE))&&(vg=!0)}a(e8,"noBootFile");function t8(e,t){let r;return e.protocol==="http:"?r=f5:r=d5,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(t8,"httpRequest");function r8(e){if(!e.schema&&!e.database){e.schema=ot.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(r8,"transformReq");function n8(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(n8,"convertToMS")});var J=g((Fge,$M)=>{"use strict";var qg=require("fs-extra"),la=require("path"),FM=require("os"),s8=require("properties-reader"),Vu=G(),$u=W(),fe=C(),NE=ft(),i8="Error initializing environment manager",bE="BOOT_PROPS_FILE_PATH",GM=!1,o8={[fe.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[fe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ui={};$M.exports={BOOT_PROPS_FILE_PATH:bE,getHdbBasePath:a8,setHdbBasePath:c8,get:kM,initSync:u8,setProperty:Ue,initTestEnvironment:_8};function a8(){return ui[fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(a8,"getHdbBasePath");function c8(e){ui[fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(c8,"setHdbBasePath");function kM(e){let t=NE.getConfigValue(e);return t===void 0?ui[e]:t}a(kM,"get");function Ue(e,t){o8[e]&&(ui[e]=t),NE.updateConfigObject(e,t)}a(Ue,"setProperty");function l8(){let e;try{e=$u.getPropsFilePath(),qg.accessSync(e,qg.constants.F_OK|qg.constants.R_OK),GM=!0;let t=s8(e);return ui[fe.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(fe.HDB_SETTINGS_NAMES.INSTALL_USER),ui[fe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(fe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ui[bE]=e,!0}catch{return Vu.trace(`Environment manager found no properties file at ${e}`),!1}}a(l8,"doesPropFileExist");function u8(e=!1){try{(GM||l8()||$u.noBootFile())&&(NE.initConfig(e),ui[fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=NE.getConfigValue(fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Vu.error(i8),Vu.error(t),console.error(t),process.exit(1)}}a(u8,"initSync");function _8(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=la.join(__dirname,"../../","unitTests");ui[bE]=la.join(l,"hdb_boot_properties.file"),Ue(fe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,la.join(l,"settings.test")),Ue(fe.HDB_SETTINGS_NAMES.INSTALL_USER,FM.userInfo()?FM.userInfo().username:void 0),Ue(fe.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ue(fe.HDB_SETTINGS_NAMES.LOG_PATH_KEY,la.join(l,"envDir","log")),Ue(fe.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ue(fe.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ue(fe.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ue(fe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,la.join(l,"envDir")),Ue(fe.CONFIG_PARAMS.STORAGE_PATH,la.join(l,"envDir")),s&&(Ue(fe.CONFIG_PARAMS.HTTP_SECUREPORT,kM(fe.CONFIG_PARAMS.HTTP_PORT)),Ue(fe.CONFIG_PARAMS.HTTP_PORT,null)),Ue(fe.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ue(fe.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ue(fe.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,$u.isEmpty(i)?!1:i),Ue(fe.CONFIG_PARAMS.HTTP_CORS,$u.isEmpty(i)?!1:i),Ue(fe.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ue(fe.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ue(fe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ue(fe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ue(fe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,la.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ue(fe.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,$u.isEmpty(c)?!1:c),o&&(Ue("CORS_ACCESSLIST",o),Ue(fe.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Ue(fe.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ue(fe.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ue(fe.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ue(fe.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ue(fe.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ue(fe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${bE}. Please check your boot props and settings files`;Vu.fatal(r),Vu.error(t)}}a(_8,"initTestEnvironment")});var Gg={};ke(Gg,{loadGQLSchema:()=>E8,start:()=>Fg,startOnMainThread:()=>f8});function Fg({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 H=function(v){if(v.kind==="NonNullType"){let Y=H(v.type);return Y.nullable=!1,Y}if(v.kind==="ListType")return{type:"array",elements:H(v.type)};let V={type:v.name?.value};return Object.defineProperty(V,"location",{value:v.loc.startToken}),V};a(H,"getProperty");let O=S.name.value,T=[],R={table:null,database:null,properties:T};f.set(O,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=O),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 B=!1;for(let v of S.fields){let P=H(v.type);P.name=v.name.value,T.push(P);for(let V of v.directives)if(V.name.value==="primaryKey")B?console.warn("Can not define two attributes as a primary key"):(P.isPrimaryKey=!0,B=!0);else if(V.name.value==="indexed")P.indexed=!0;else if(V.name.value==="relationship"){let Y={};for(let z of V.arguments)Y[z.name.value]=z.value.value;P.relationship=Y}else if(V.name.value==="createdTime")P.assignCreatedTime=!0;else if(V.name.value==="updatedTime")P.assignUpdatedTime=!0;else if(V.name.value==="expiresAt")P.expiresAt=!0;else if(V.name.value==="allow"){let Y=P.authorizedRoles=[];for(let z of V.arguments)z.name.value==="role"&&Y.push(z.value.value)}}R.type=O,O==="Query"&&(h=R)}function p(S){let O=f.get(S.type);O?(Object.defineProperty(S,"properties",{value:O.properties}),Object.defineProperty(S,"definition",{value:O})):S.type==="array"?p(S.elements):d8.includes(S.type)||(0,VM.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(p,"connectPropertyType");for(let S of f.values())for(let O of S.properties)p(O);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,VM,d8,f8,E8,YM=ye(()=>{xg=require("path");Ne();VM=q(et()),d8=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(Fg,"start");f8=Fg,E8=Fg({ensureTable:dt}).handleFile});async function yE(e){return h8?(Yu||(Yu=m8(S8)),(await(await Yu).import(e)).namespace):import(e)}async function m8(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Yu=new Compartment({console,Math,Date,fetch:p8,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,WM.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Yt,tables:an,databases:it})}};let n=await(0,KM.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Yu}function p8(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 S8(){return{Resource:Yt,tables:an}}var KM,WM,h8,Yu,kg=ye(()=>{Kn();Ne();KM=require("fs/promises"),WM=require("path"),h8=!1;a(yE,"secureImport");a(m8,"getCompartment");a(p8,"secureOnlyFetch");a(S8,"getGlobalVars")});var Vg={};ke(Vg,{handleFile:()=>T8});async function T8(e,t,r,n){let s=new Map,i=(0,QM.pathToFileURL)(r).toString(),o=await yE(i);l(o.default)&&n.set((0,$g.dirname)(t),o.default),c(o,(0,$g.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 QM,$g,jM=ye(()=>{QM=require("url");kg();$g=require("path");a(T8,"handleFile")});var Kg={};ke(Kg,{start:()=>g8});function g8({resources:e}){e.set("login",Yg),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Yg,zM=ye(()=>{Kn();a(g8,"start");Yg=class extends Yt{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 nU={};ke(nU,{parse:()=>Qg,streamAsJSON:()=>Ku,stringify:()=>ua});function Ku(e){return new Wg({value:e})}function JM(e){return console.error(e),JSON.stringify(e.toString())}function XM(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function ua(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===tU)return rU(e);if(t.resolution)return t.resolution.then(()=>ua(e));throw t}}function rU(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+=rU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+ua(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Qg(e){return O8.test(e)?R8.parse(e):JSON.parse(e)}var ZM,eU,R8,A8,tU,Wg,O8,jg=ye(()=>{ZM=require("stream"),eU=q(require("json-bigint-fixes")),R8=(0,eU.default)({useNativeBigInt:!0}),A8=1e4,tU={};BigInt.prototype.toJSON=function(){throw tU};a(Ku,"streamAsJSON");Wg=class extends ZM.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),JM)}catch(s){yield JM(s)}else yield ua(t)}else yield ua(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);XM(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>A8?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 XM(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(JM,"handleError");a(XM,"when");a(ua,"stringify");a(rU,"jsStringify");O8=/-?\d{16,}/;a(Qg,"parse")});var IE=g((Zge,sU)=>{"use strict";var N8=bn();sU.exports={writeTransaction:b8};function b8(e,t,r){return N8.writeTransaction(e,t,r)}a(b8,"writeTransaction")});var cU=g((rRe,aU)=>{"use strict";var y8=Sr(),I8=yn(),iU=G(),w8=Tr(),tRe=IE(),C8=require("clone"),Jg=require("alasql"),L8=qf(),oU=require("util"),D8=oU.promisify(I8.getTableSchema),P8=oU.promisify(y8.search),M8=C(),zg=W();L8(Jg);aU.exports={update:v8};var U8="There was a problem performing this update. Please check the logs and try again.";async function v8({statement:e,hdb_user:t}){let r=await D8(e.table.databaseid,e.table.tableid),n=B8(e.columns);zg.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=C8(s),c=zg.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=Jg.parse(l).statements[0],u=await P8(_),d=H8(n,u);return q8(o,d,t)}a(v8,"update");function B8(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Jg.compile(`SELECT ${r.expression.toString()} AS [${M8.FUNC_VAL}] FROM ?`)}),t}catch(t){throw iU.error(t),new Error(U8)}}a(B8,"createUpdateRecord");function H8(e,t){return zg.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(H8,"buildUpdateRecords");async function q8(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await w8.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){iU.error(`Error delete new_attributes from update response: ${i}`)}return s}a(q8,"updateRecords")});var uU=g((oRe,lU)=>{var x8=require("alasql"),F8=Sr(),G8=G(),k8=bn(),Zg=require("util"),Xg=W(),$8=C(),V8=yn(),sRe=IE(),iRe=Tr(),Y8="record",K8="successfully deleted",W8=Zg.callbackify(J8),Q8=Zg.promisify(F8.search),j8=Zg.promisify(V8.getTableSchema);lU.exports={convertDelete:W8};function z8(e){return`${e.deleted_hashes.length} ${Y8}${e.deleted_hashes.length===1?"":"s"} ${K8}`}a(z8,"generateReturnMessage");async function J8({statement:e,hdb_user:t}){let r=await j8(e.table.databaseid,e.table.tableid);Xg.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Xg.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=x8.parse(o).statements[0],l={operation:$8.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Q8(c);let _=await k8.deleteRecords(l);return Xg.isEmptyOrZeroLength(_.message)&&(_.message=z8(_)),delete _.txn_time,_}catch(_){throw G8.error(_),_.hdb_code?_.message:_}}a(J8,"convertDelete")});var hU=g((cRe,EU)=>{"use strict";var X8=Wi(),{hdb_errors:_U}=re(),{getDatabases:dU}=(Ne(),ne(xe));EU.exports={checkSchemaExists:fU,checkSchemaTableExists:Z8,schema_describe:X8};async function fU(e){if(!dU()[e])return _U.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(fU,"checkSchemaExists");async function Z8(e,t){let r=await fU(e);if(r)return r;if(!dU()[e][t])return _U.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Z8,"checkSchemaTableExists")});var Et=g((ERe,vU)=>{"use strict";var Wt=J();Wt.initSync();var e6=require("fs-extra"),t6=require("semver"),ju=require("path"),{monotonicFactory:r6}=require("ulidx"),pU=r6(),n6=require("util"),SU=require("child_process"),s6=n6.promisify(SU.exec),i6=SU.spawn,we=Je(),Be=C(),nR=W(),un=G(),wE=ci(),o6=IE(),Wu=ft(),{onMessageByType:a6}=et(),{isMainThread:c6}=require("worker_threads"),{Encoder:l6,decode:sR}=require("msgpackr"),TU=new l6,{isEmpty:Ea}=nR,gU=Rr(),u6=48*36e11,_6=5e9;c6&&a6(Be.ITC_EVENT_TYPES.RESTART,()=>{Ln=void 0,fa=void 0});var{connect:d6,StorageType:RU,RetentionPolicy:AU,AckPolicy:CE,DeliverPolicy:LE,DiscardPolicy:f6,NatsConnection:uRe,JetStreamManager:_Re,JetStreamClient:dRe,StringCodec:fRe,JSONCodec:E6,createInbox:iR,headers:h6,ErrorCode:mU}=require("nats"),{PACKAGE_ROOT:m6}=C(),p6=Mo(),{recordAction:S6}=(li(),ne(Du)),OU=E6(),T6="clustering",g6=p6.engines[we.NATS_SERVER_NAME],R6=ju.join(m6,"dependencies"),rR=ju.join(R6,`${process.platform}-${process.arch}`,we.NATS_BINARY_NAME),eR,tR,Qu,_a,da;vU.exports={runCommand:NU,checkNATSServerInstalled:A6,createConnection:oR,getConnection:DE,getJetStreamManager:zu,getJetStream:yU,getNATSReferences:Or,getServerList:N6,createLocalStream:aR,listStreams:IU,deleteLocalStream:b6,getServerConfig:Ju,listRemoteStreams:y6,viewStream:I6,viewStreamIterator:w6,publishToStream:C6,createWorkQueueStream:L6,addSourceToWorkStream:CU,request:P6,removeSourceFromWorkStream:DU,reloadNATS:cR,reloadNATSHub:M6,reloadNATSLeaf:U6,extractServerName:LU,requestErrorHandler:v6,updateWorkStream:B6,createLocalTableStream:MU,createTableStreams:H6,purgeTableStream:UU,purgeSchemaTableStreams:q6,getStreamInfo:x6,updateLocalStreams:G6,closeConnection:O6,getJsmServerName:Xu,addNatsMsgHeader:wU,updateIngestStreamConsumer:D6,clearClientCache:bU};async function NU(e,t=void 0){let{stdout:r,stderr:n}=await s6(e,{cwd:t});if(n)throw new Error(n.replace(`
10
10
  `,""));return r.replace(`
11
- `,"")}a(AU,"runCommand");async function g6(){try{await X8.access(sR)}catch{return!1}let e=await AU(`${sR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Z8.eq(t,S6)}a(g6,"checkNATSServerInstalled");async function cR(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await SU.getClusterUser();if(Ea(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}fn.trace("create nats connection called");let i=await u6({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Jt.get(Be.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Jt.get(Be.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Jt.get(Be.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),fn.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&fn.error("Error with Nats client connection, connection closed",o),OU()}),i}a(cR,"createConnection");function OU(){Un=void 0,_a=void 0,da=void 0,fa=void 0}a(OU,"clearClientCache");async function R6(){Un&&(await Un.drain(),Un=void 0,_a=void 0,da=void 0,fa=void 0)}a(R6,"closeConnection");var Un,fa;async function UE(){return fa||(fa=cR(Jt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Un=await fa),Un||fa}a(UE,"getConnection");async function zu(){if(_a)return _a;Ea(Un)&&await UE();let{domain:e}=Ju(Be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ea(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return _a=await Un.jetstreamManager({domain:e,timeout:6e4}),_a}a(zu,"getJetStreamManager");async function NU(){if(da)return da;Ea(Un)&&await UE();let{domain:e}=Ju(Be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ea(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return da=Un.jetstream({domain:e,timeout:6e4}),da}a(NU,"getJetStream");async function Ir(){let e=Un||await UE(),t=_a||await zu(),r=da||await NU();return{connection:e,jsm:t,js:r}}a(Ir,"getNATSReferences");async function A6(e){let t=Jt.get(Be.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await SU.getClusterUser(),s=await cR(t,r,n),i=aR(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=RU.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 iR.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(A6,"getServerList");async function lR(e,t){let{jsm:r}=await Ir(),n=Jt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Jt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Jt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:TU.File,retention:gU.Limits,subjects:t,discard:_6.Old,max_msgs:s,max_bytes:i,max_age:n})}a(lR,"createLocalStream");async function bU(){let{jsm:e}=await Ir(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(bU,"listStreams");async function O6(e){let{jsm:t}=await Ir();await t.streams.delete(e)}a(O6,"deleteLocalStream");async function N6(e){let{connection:t}=await Ir(),r=[],n=aR(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(RU.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(N6,"listRemoteStreams");async function b6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ir(),i=hU(),o={durable_name:i,ack_policy:PE.Explicit};t&&(o.deliver_policy=ME.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=oR(u.data),f={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};if(u.headers&&(f.origin=u.headers.get(Ie.MSG_HEADERS.ORIGIN)),_.push(f),u.ack(),u.info.pending===0)break}return await c.delete(),_}a(b6,"viewStream");async function*y6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ir(),i=hU(),o={durable_name:i,ack_policy:PE.Explicit};t&&(o.deliver_policy=ME.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=oR(_.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(Ie.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(y6,"viewStreamIterator");async function I6(e,t,r,n){fn.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=yU(n,r);let{js:s}=await Ir(),i=await Xu(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:pU.encode(n);try{fn.trace(`publishToStream publishing to subject: ${o}`),m6(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 LU(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){fn.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await lR(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(I6,"publishToStream");function yU(e,t){t===void 0&&(t=f6());let r=Jt.get(Be.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Ie.MSG_HEADERS.ORIGIN)&&r&&t.append(Ie.MSG_HEADERS.ORIGIN,r),t}a(yU,"addNatsMsgHeader");function Ju(e){e=e.toLowerCase();let t=ju.join(Jt.get(Be.CONFIG_PARAMS.ROOTPATH),p6);if(e===Be.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ea(nR)&&(nR={port:Wu.getConfigFromFile(Be.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Wu.getConfigFromFile(Be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ie.SERVER_SUFFIX.HUB,config_file:Ie.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:ju.join(t,Ie.PID_FILES.HUB),hdb_nats_path:t}),nR;if(e===Be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ea(rR)&&(rR={port:Wu.getConfigFromFile(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Wu.getConfigFromFile(Be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ie.SERVER_SUFFIX.LEAF,config_file:Ie.NATS_CONFIG_FILES.LEAF_SERVER,domain:Wu.getConfigFromFile(Be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ie.SERVER_SUFFIX.LEAF,pid_file_path:ju.join(t,Ie.PID_FILES.LEAF),hdb_nats_path:t}),rR;fn.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ju,"getServerConfig");async function w6(e){let{jsm:t}=await Ir(),r=await Xu();try{await t.streams.add({name:e.stream_name,storage:TU.File,retention:gU.Limits,max_age:c6,max_bytes:l6,subjects:[`${Ie.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:PE.Explicit,durable_name:e.durable_name,deliver_policy:ME.All,max_ack_pending:1e4});else throw n}}a(w6,"createWorkQueueStream");async function C6(){let{jsm:e}=await Ir();(await e.consumers.info(Ie.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ie.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(fn.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(Ie.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ie.WORK_QUEUE_CONSUMER_NAMES.durable_name),fn.info("Adding pull consumer to ingest stream"),await e.consumers.add(Ie.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:PE.Explicit,durable_name:Ie.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:ME.All,max_ack_pending:1e4}))}a(C6,"updateIngestStreamConsumer");async function IU(e,t,r){let{jsm:n}=await Ir(),s=await n.streams.info(t),i=wU(n.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:l}=r,_=DE.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 p=0,S=s.config.sources.length;p<S;p++)if(d=s.config.sources[p],f=p,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 p=`txn.${c}.${l}.${e}`;await n.streams.purge(t,{filter:p}),s.config.sources.splice(f,1),await n.streams.update(t,s.config)}let h={name:_,opt_start_time:o,filter_subject:`${Ie.SUBJECT_PREFIXES.TXN}.>`};u||(h.external={api:`$JS.${e}.API`,deliver:""}),s.config.sources.push(h),await n.streams.update(t,s.config)}a(IU,"addSourceToWorkStream");function wU(e){return e.split(".")[1]}a(wU,"extractServerName");async function CU(e,t,r){let{jsm:n}=await Ir(),{schema:s,table:i}=r,o=`txn.${s}.${i}.${e}`;await n.streams.purge(t,{filter:o});let c=DE.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(CU,"removeSourceFromWorkStream");async function L6(e,t,r=6e4,n=aR()){if(!iR.isObject(t))throw new Error("data param must be an object");let s=pU.encode(t),{connection:i}=await Ir(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return oR(c.data)}a(L6,"request");function uR(e){return new Promise(async(t,r)=>{let n=n6(sR,["--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(uR,"reloadNATS");async function D6(){let{pid_file_path:e}=Ju(Be.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await uR(e)}a(D6,"reloadNATSHub");async function P6(){let{pid_file_path:e}=Ju(Be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await uR(e)}a(P6,"reloadNATSLeaf");function M6(e,t,r){let n;switch(e.code){case EU.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case EU.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(M6,"requestErrorHandler");async function U6(e,t){let r=t+Ie.SERVER_SUFFIX.LEAF;await LU(async()=>{e.subscribe===!0?await IU(r,Ie.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await CU(r,Ie.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(U6,"updateWorkStream");function LU(e){return s6.writeTransaction(Be.SYSTEM_SCHEMA_NAME,Be.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(LU,"exclusiveLock");async function DU(e,t){let r=DE.createNatsTableStreamName(e,t),n=await Xu(),s=q6(e,t,n);await lR(r,[s])}a(DU,"createLocalTableStream");async function v6(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await DU(n,s)}}a(v6,"createTableStreams");async function PU(e,t,r=!1){if(Jt.get(Be.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=DE.createNatsTableStreamName(e,t),{jsm:s}=await Ir();r?await s.streams.purge(Ie.WORK_QUEUE_CONSUMER_NAMES.stream_name):await s.streams.purge(n)}catch(n){if(n.message==="stream not found")fn.warn(n);else throw n}}a(PU,"purgeTableStream");async function B6(e,t){if(Jt.get(Be.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await PU(e,t[r])}a(B6,"purgeSchemaTableStreams");async function H6(e){return(await zu()).streams.info(e)}a(H6,"getStreamInfo");function q6(e,t,r){return`${Ie.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(q6,"createSubjectName");async function Xu(){if(Qu)return Qu;if(Qu=(await zu())?.nc?.info?.server_name,Qu===void 0)throw new Error("Unable to get jetstream manager server name");return Qu}a(Xu,"getJsmServerName");async function x6(){let e=await zu(),t=await Xu(),r=await bU();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=F6(n),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(s.name===Ie.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Ie.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;fn.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else if(s.name===Ie.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Ie.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;fn.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let u=_.join(".");fn.trace(`Updating stream subject name from: ${i} to: ${u}`),s.subjects[0]=u}await e.streams.update(s.name,s)}}}a(x6,"updateLocalStreams");function F6(e){let{config:t}=e,r=!1;if(t.name===Ie.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===Ie.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let n=Jt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Jt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Jt.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(F6,"updateStreamLimits")});var qE=T((mRe,HU)=>{"use strict";var Cc=Nf(),Lc=fU(),G6=F(),k6=require("uuid").v4,hRe=require("clone"),BE=ii(),Dc=C(),$6=require("util"),no=wn(),{handleHDBError:wr,hdb_errors:V6}=te(),{HDB_ERROR_MSGS:vE,HTTP_STATUS_CODES:Cr}=V6,{SchemaEventMsg:HE}=Zn(),UU=St(),{getDatabases:Y6}=(Ae(),re(Ge)),{transformReq:Pc}=Y();HU.exports={createSchema:K6,createSchemaStructure:vU,createTable:W6,createTableStructure:BU,createAttribute:X6,dropSchema:Q6,dropTable:j6,dropAttribute:z6,getBackup:Z6};async function K6(e){let t=await vU(e);return BE.signalSchemaChange(new HE(process.pid,e.operation,e.schema)),t}a(K6,"createSchema");async function vU(e){let t=Cc.schema_object(e);if(t)throw wr(t,t.message,Cr.BAD_REQUEST,void 0,void 0,!0);if(Pc(e),!await Lc.checkSchemaExists(e.schema))throw wr(new Error,vE.SCHEMA_EXISTS_ERR(e.schema),Cr.BAD_REQUEST,Dc.LOG_LEVELS.ERROR,vE.SCHEMA_EXISTS_ERR(e.schema),!0);return await no.createSchema(e),`database '${e.schema}' successfully created`}a(vU,"createSchemaStructure");async function W6(e){return Pc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await BU(e)}a(W6,"createTable");async function BU(e){let t=Cc.create_table_object(e);if(t)throw wr(t,t.message,Cr.BAD_REQUEST,void 0,void 0,!0);if(Cc.validateTableResidence(e.residence),!await Lc.checkSchemaTableExists(e.schema,e.table))throw wr(new Error,vE.TABLE_EXISTS_ERR(e.schema,e.table),Cr.BAD_REQUEST,Dc.LOG_LEVELS.ERROR,vE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:k6(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await no.createTable(n,e);else throw wr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Cr.BAD_REQUEST);else await no.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(BU,"createTableStructure");async function Q6(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Cc.schema_object(e),n=t??r;if(n)throw wr(n,n.message,Cr.BAD_REQUEST,void 0,void 0,!0);Pc(e);let s=await Lc.checkSchemaExists(e.schema);if(s)throw wr(new Error,s,Cr.NOT_FOUND,Dc.LOG_LEVELS.ERROR,s,!0);let i=await Lc.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await no.dropSchema(e),BE.signalSchemaChange(new HE(process.pid,e.operation,e.schema)),await UU.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(Q6,"dropSchema");async function j6(e){let t=Cc.table_object(e);if(t)throw wr(t,t.message,Cr.BAD_REQUEST,void 0,void 0,!0);Pc(e);let r=await Lc.checkSchemaTableExists(e.schema,e.table);if(r)throw wr(new Error,r,Cr.NOT_FOUND,Dc.LOG_LEVELS.ERROR,r,!0);return await no.dropTable(e),await UU.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(j6,"dropTable");async function z6(e){let t=Cc.attribute_object(e);if(t)throw wr(t,t.message,Cr.BAD_REQUEST,void 0,void 0,!0);Pc(e);let r=await Lc.checkSchemaTableExists(e.schema,e.table);if(r)throw wr(new Error,r,Cr.NOT_FOUND,Dc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw wr(new Error,"You cannot drop a hash attribute",Cr.BAD_REQUEST,void 0,void 0,!0);if(Dc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw wr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Cr.BAD_REQUEST,void 0,void 0,!0);try{return await no.dropAttribute(e),J6(e),BE.signalSchemaChange(new HE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw G6.error(`Got an error deleting attribute ${$6.inspect(e)}.`),n}}a(z6,"dropAttribute");function J6(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(J6,"dropAttributeFromGlobal");async function X6(e){Pc(e);let t=Y6()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw wr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Cr.BAD_REQUEST,void 0,void 0,!0);return await no.createAttribute(e),BE.signalSchemaChange(new HE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(X6,"createAttribute");function Z6(e){return no.getBackup(e)}a(Z6,"getBackup")});var xU=T((SRe,qU)=>{"use strict";var{OPERATIONS_ENUM:e9}=C(),_R=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=e9.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};qU.exports=_R});var dR=T((RRe,VU)=>{"use strict";var t9=wn(),gRe=xU(),xE=Y(),FE=C(),r9=J(),{handleHDBError:FU,hdb_errors:n9}=te(),{HDB_ERROR_MSGS:GU,HTTP_STATUS_CODES:kU}=n9,s9=Object.values(FE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),$U="To use this operation audit log must be enabled in harperdb-config.yaml";VU.exports=i9;async function i9(e){if(xE.isEmpty(e.schema))throw new Error(GU.SCHEMA_REQUIRED_ERR);if(xE.isEmpty(e.table))throw new Error(GU.TABLE_REQUIRED_ERR);if(!r9.get(FE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw FU(new Error,$U,kU.BAD_REQUEST,FE.LOG_LEVELS.ERROR,$U,!0);let t=xE.checkSchemaTableExist(e.schema,e.table);if(t)throw FU(new Error,t,kU.NOT_FOUND,FE.LOG_LEVELS.ERROR,t,!0);if(!xE.isEmpty(e.search_type)&&s9.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await t9.readAuditLog(e)}a(i9,"readAuditLog")});var KU=T((ORe,YU)=>{"use strict";var{OPERATIONS_ENUM:o9}=C(),fR=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=o9.GET_BACKUP,this.schema=t,this.table=r}};YU.exports=fR});var jU=T((IRe,QU)=>{"use strict";var a9=wn(),bRe=KU(),ER=Y(),c9=C(),yRe=J(),{handleHDBError:l9,hdb_errors:u9}=te(),{HDB_ERROR_MSGS:WU,HTTP_STATUS_CODES:_9}=u9;QU.exports=d9;async function d9(e){if(ER.isEmpty(e.schema))throw new Error(WU.SCHEMA_REQUIRED_ERR);if(ER.isEmpty(e.table))throw new Error(WU.TABLE_REQUIRED_ERR);let t=ER.checkSchemaTableExist(e.schema,e.table);if(t)throw l9(new Error,t,_9.NOT_FOUND,c9.LOG_LEVELS.ERROR,t,!0);return await a9.getBackup(read_audit_log_object)}a(d9,"getBackup")});var tv=T((CRe,ev)=>{var so=require("validate.js"),JU=it(),Mc=C(),{handleHDBError:f9,hdb_errors:E9}=te(),{HDB_ERROR_MSGS:Tt,HTTP_STATUS_CODES:h9}=E9,hR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),m9={STRUCTURE_USER:"structure_user"},zU=Object.values(Mc.ROLE_TYPES_ENUM),p9="attribute_permissions",S9="attribute_name",{PERMS_CRUD_ENUM:Uc}=Mc,T9=[p9,...Object.values(Uc)],XU=[Uc.READ,Uc.INSERT,Uc.UPDATE],g9=[S9,...XU];function R9(e){let t=hR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,ZU(e,t)}a(R9,"addRoleValidation");function A9(e){let t=hR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,ZU(e,t)}a(A9,"alterRoleValidation");function O9(e){let t=hR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,JU.validateObject(e,t)}a(O9,"dropRoleValidation");var N9=["operation","role","id","permission","hdb_user","hdb_auth_header"];function ZU(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)N9.includes(n[o])||s.push(n[o]);s.length>0&&bt(Tt.INVALID_ROLE_JSON_KEYS(s),r);let i=JU.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{bt(o,r)}),e.permission){let o=b9(e);o&&bt(o,r),zU.forEach(c=>{e.permission[c]&&!so.isBoolean(e.permission[c])&&bt(Tt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(zU.indexOf(o)<0){if(o===m9.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let _=0,u=l.length;_<u;_++){let d=l[_];global.hdb_schema[d]||bt(Tt.SCHEMA_NOT_FOUND(d),r)}continue}bt(Tt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){bt(Tt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let _=c.tables[l];if(!l||!global.hdb_schema[o][l]){bt(Tt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(_).forEach(u=>{T9.includes(u)||bt(Tt.INVALID_PERM_KEY(u),r,o,l)}),Object.values(Uc).forEach(u=>{so.isDefined(_[u])?so.isBoolean(_[u])||bt(Tt.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):bt(Tt.TABLE_PERM_MISSING(u),r,o,l)}),so.isDefined(_.attribute_permissions)){if(!so.isArray(_.attribute_permissions)){bt(Tt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}}else{bt(Tt.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(p=>{!g9.includes(p)&&p!==Uc.DELETE&&bt(Tt.INVALID_ATTR_PERM_KEY(p),r,o,l)}),!so.isDefined(E.attribute_name)){bt(Tt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=E.attribute_name;if(!u.includes(h)){bt(Tt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}XU.forEach(p=>{so.isDefined(E[p])?so.isBoolean(E[p])||bt(Tt.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,l):bt(Tt.ATTR_PERM_MISSING(p,h),r,o,l)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${l}`;bt(Tt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,l)}}}}return y9(r)}a(ZU,"customValidate");ev.exports={addRoleValidation:R9,alterRoleValidation:A9,dropRoleValidation:O9};function b9(e){let{operation:t,permission:r}=e;if(t===Mc.OPERATIONS_ENUM.ADD_ROLE||t===Mc.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 Tt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Mc.ROLE_TYPES_ENUM.SUPER_USER:Mc.ROLE_TYPES_ENUM.CLUSTER_USER;return Tt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(b9,"validateNoSUPerms");function y9(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:Tt.ROLE_PERMS_ERROR,...e};return f9(new Error,n,h9.BAD_REQUEST)}else return null}a(y9,"generateRolePermResponse");function bt(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(bt,"addPermError")});var kE=T((DRe,iv)=>{"use strict";var rv=Or(),nv=Ar(),I9=Xo(),pR=tv(),SR=ii(),w9=require("uuid").v4,C9=require("util"),GE=C(),L9=Y(),TR=nv.searchByValue,D9=nv.searchByHash,P9=C9.promisify(I9.delete),M9=es(),U9=hc(),{hdb_errors:v9,handleHDBError:ha}=te(),{HDB_ERROR_MSGS:sv,HTTP_STATUS_CODES:Zu}=v9,{UserEventMsg:gR}=Zn();iv.exports={addRole:B9,alterRole:H9,dropRole:q9,listRoles:x9};function mR(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(mR,"scrubRoleDetails");async function B9(e){let t=pR.addRoleValidation(e);if(t)throw t;e=mR(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 TR(r)||[])}catch(i){throw ha(i)}if(n&&n.length>0)throw ha(new Error,sv.ROLE_ALREADY_EXISTS(e.role),Zu.CONFLICT,void 0,void 0,!0);e.id||(e.id=w9());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await rv.insert(s),SR.signalUserChange(new gR(process.pid)),e=mR(e),e}a(B9,"addRole");async function H9(e){let t=pR.alterRoleValidation(e);if(t)throw t;e=mR(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await rv.update(r)}catch(s){throw ha(s)}if(n&&n?.message==="updated 0 of 1 records")throw ha(new Error,"Invalid role id",Zu.BAD_REQUEST,void 0,void 0,!0);return await SR.signalUserChange(new gR(process.pid)),e}a(H9,"alterRole");async function q9(e){let t=pR.dropRoleValidation(e);if(t)throw ha(new Error,t,Zu.BAD_REQUEST,void 0,void 0,!0);let r=new U9(GE.SYSTEM_SCHEMA_NAME,GE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await D9(r));if(n.length===0)throw ha(new Error,sv.ROLE_NOT_FOUND,Zu.NOT_FOUND,void 0,void 0,!0);let s=new M9(GE.SYSTEM_SCHEMA_NAME,GE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await TR(s)),o=!1;if(L9.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw ha(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Zu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await P9(c),SR.signalUserChange(new gR(process.pid)),`${n[0].role} successfully deleted`}a(q9,"dropRole");async function x9(){return TR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(x9,"listRoles")});var lv=T((MRe,cv)=>{"use strict";var F9=J(),io=require("joi"),G9=it(),ov=require("moment"),k9=require("fs-extra"),RR=require("path"),$9=require("lodash"),e_=C(),{LOG_LEVELS:ma}=C(),V9="YYYY-MM-DD hh:mm:ss",Y9=RR.resolve(__dirname,"../logs");cv.exports=function(e){return G9.validateBySchema(e,K9)};var K9=io.object({from:io.custom(av),until:io.custom(av),level:io.valid(ma.NOTIFY,ma.FATAL,ma.ERROR,ma.WARN,ma.INFO,ma.DEBUG,ma.TRACE),order:io.valid("asc","desc"),limit:io.number().min(1),start:io.number().min(0),log_name:io.custom(W9)});function av(e,t){if(ov(e,ov.ISO_8601).format(V9)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(av,"validateDatetime");function W9(e,t){if($9.invert(e_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=F9.get(e_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?e_.LOG_NAMES.HDB:e,i=s===e_.LOG_NAMES.INSTALL?RR.join(Y9,e_.LOG_NAMES.INSTALL):RR.join(n,s);return k9.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(W9,"validateReadLogPath")});var OR=T((vRe,_v)=>{"use strict";var $E=C(),Q9=F(),j9=J(),z9=lv(),AR=require("path"),uv=require("fs-extra"),{once:J9}=require("events"),{handleHDBError:X9,hdb_errors:Z9}=te(),{PACKAGE_ROOT:e7}=C(),t7=AR.join(e7,"logs"),r7=1e3,n7=200;_v.exports=s7;async function s7(e){let t=z9(e);if(t)throw X9(t,t.message,Z9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=j9.get($E.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?$E.LOG_NAMES.HDB:e.log_name,s=n===$E.LOG_NAMES.INSTALL?AR.join(t7,$E.LOG_NAMES.INSTALL):AR.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?r7:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!l&&!u&&(p=Math.max(uv.statSync(s).size-(h+5)*n7,0));let S=uv.createReadStream(s,{start:p});S.on("error",B=>{Q9.error(B)});let R=0,g=[],O="",v;S.on("data",B=>{let U=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;B=O+B;let j=0,K;for(;(K=U.exec(B))&&!S.destroyed;){v&&(v.message=B.slice(j,K.index),G(v));let[z,oe,Te]=K,ce=Te.split("] ["),ke=ce[0],ue=ce[1];ce.splice(0,2),v={timestamp:oe,thread:ke,level:ue,tags:ce,message:""},j=K.index+z.length}O=B.slice(j)}),S.on("end",B=>{S.destroyed||v&&(v.message=O.trim(),G(v))}),S.resume();function G(B){let U,j,K;switch(!0){case(i&&c&&_):U=new Date(B.timestamp),j=new Date(l),K=new Date(u),B.level===o&&U>=j&&U<=K&&R<E?R++:B.level===o&&U>=j&&U<=K&&(oo(B,f,g),R++,R===h&&S.destroy());break;case(i&&c):U=new Date(B.timestamp),j=new Date(l),B.level===o&&U>=j&&R<E?R++:B.level===o&&U>=j&&(oo(B,f,g),R++,R===h&&S.destroy());break;case(i&&_):U=new Date(B.timestamp),K=new Date(u),B.level===o&&U<=K&&R<E?R++:B.level===o&&U<=K&&(oo(B,f,g),R++,R===h&&S.destroy());break;case(c&&_):U=new Date(B.timestamp),j=new Date(l),K=new Date(u),U>=j&&U<=K&&R<E?R++:U>=j&&U<=K&&(oo(B,f,g),R++,R===h&&S.destroy());break;case i:B.level===o&&R<E?R++:B.level===o&&(oo(B,f,g),R++,R===h&&S.destroy());break;case c:U=new Date(B.timestamp),j=new Date(l),U>=j&&R<E?R++:U>=j&&R>=E&&(oo(B,f,g),R++,R===h&&S.destroy());break;case _:U=new Date(B.timestamp),K=new Date(u),U<=K&&R<E?R++:U<=K&&R>=E&&(oo(B,f,g),R++,R===h&&S.destroy());break;default:R<E?R++:(oo(B,f,g),R++,R===h&&S.destroy())}}return a(G,"onLogMessage"),await J9(S,"close"),g}a(s7,"readLog");function oo(e,t,r){t==="desc"?i7(e,r):t==="asc"?o7(e,r):r.push(e)}a(oo,"pushLineToResult");function i7(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(i7,"insertDescending");function o7(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(o7,"insertAscending")});var VE=T((FRe,hv)=>{"use strict";var NR=require("joi"),{string:t_,boolean:dv,date:a7}=NR.types(),c7=it(),{validateSchemaExists:HRe,validateTableExists:qRe,validateSchemaName:xRe}=Os(),l7=C(),u7=rt(),fv=J();fv.initSync();var _7=t_.invalid(fv.get(l7.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(u7.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(),Ev={operation:t_.valid("add_node","update_node","set_node_replication"),node_name:_7,subscriptions:NR.array().items({table:t_.optional(),schema:t_.optional(),database:t_.optional(),subscribe:dv.required(),publish:dv.required().custom(f7),start_time:a7.iso()}).min(1).required()};function d7(e){return c7.validateBySchema(e,NR.object(Ev))}a(d7,"addUpdateNodeValidator");function f7(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(f7,"checkForFalsy");hv.exports={addUpdateNodeValidator:d7,validation_schema:Ev}});var pv=T((kRe,mv)=>{var E7=it(),h7={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};mv.exports=function(e){return E7.validateObject(e,h7)}});var YE=T(($Re,Sv)=>{"use strict";var m7=C().OPERATIONS_ENUM,bR=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=m7.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Sv.exports=bR});var gv=T((YRe,Tv)=>{"use strict";var p7={OPERATION:"operation",REFRESH:"refresh"},yR=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},IR=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};Tv.exports={JWTTokens:yR,TOKEN_TYPE_ENUM:p7,JWTRSAKeys:IR}});var s_=T((WRe,Nv)=>{"use strict";var n_=require("jsonwebtoken"),wR=require("fs-extra"),CR=Y(),vn=C(),{handleHDBError:Lr,hdb_errors:S7}=te(),{HTTP_STATUS_CODES:Dr,AUTHENTICATION_ERROR_MSGS:Pr}=S7,r_=F(),Rv=Jf(),PR=br(),T7=Or().update,g7=YE(),R7=ii(),{UserEventMsg:A7}=Zn(),ao=J();ao.initSync();var LR=require("path"),{JWTTokens:O7,JWTRSAKeys:N7,TOKEN_TYPE_ENUM:KE}=gv(),b7=ao.get(vn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ao.get(vn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",y7=ao.get(vn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ao.get(vn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",WE="RS256",DR;Nv.exports={createTokens:I7,validateOperationToken:C7,refreshOperationToken:w7,validateRefreshToken:Ov};async function I7(e){if(CR.isEmpty(e)||typeof e!="object")throw Lr(new Error,Pr.INVALID_AUTH_OBJECT,Dr.BAD_REQUEST,void 0,void 0,!0);if(CR.isEmpty(e.username))throw Lr(new Error,Pr.USERNAME_REQUIRED,Dr.BAD_REQUEST,void 0,void 0,!0);if(CR.isEmpty(e.password))throw Lr(new Error,Pr.PASSWORD_REQUIRED,Dr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await PR.findAndValidateUser(e.username,e.password),!t)throw Lr(new Error,Pr.INVALID_CREDENTIALS,Dr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw r_.error(f),Lr(new Error,Pr.INVALID_CREDENTIALS,Dr.UNAUTHORIZED,void 0,void 0,!0)}let r=await QE(),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 Av(i,r.private_key,r.passphrase),c=await n_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:y7,algorithm:WE,subject:KE.REFRESH}),l=Rv.hash(c),_=new g7(vn.SYSTEM_SCHEMA_NAME,vn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await T7(_)}catch(f){r_.error(f),d=f}if(d!==void 0||u.skipped_hashes.length>0)throw Lr(new Error,Pr.REFRESH_TOKEN_SAVE_FAILED,Dr.INTERNAL_SERVER_ERROR);return R7.signalUserChange(new A7(process.pid)),new O7(o,c)}a(I7,"createTokens");async function Av(e,t,r){return await n_.sign(e,{key:t,passphrase:r},{expiresIn:b7,algorithm:WE,subject:KE.OPERATION})}a(Av,"signOperationToken");async function QE(){if(DR===void 0)try{let e=LR.join(ao.getHdbBasePath(),vn.LICENSE_KEY_DIR_NAME,vn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=LR.join(ao.getHdbBasePath(),vn.LICENSE_KEY_DIR_NAME,vn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=LR.join(ao.getHdbBasePath(),vn.LICENSE_KEY_DIR_NAME,vn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await wR.readFile(e)).toString(),s=(await wR.readFile(t)).toString(),i=(await wR.readFile(r)).toString();DR=new N7(i,s,n)}catch(e){throw r_.error(e),Lr(new Error,Pr.NO_ENCRYPTION_KEYS,Dr.INTERNAL_SERVER_ERROR)}return DR}a(QE,"getJWTRSAKeys");async function w7(e){if(!e)throw Lr(new Error,Pr.INVALID_BODY,Dr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Lr(new Error,Pr.REFRESH_TOKEN_REQUIRED,Dr.BAD_REQUEST,void 0,void 0,!0);await Ov(e.refresh_token);let t=await QE(),r=await n_.decode(e.refresh_token);return{operation_token:await Av({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(w7,"refreshOperationToken");async function C7(e){try{let t=await QE(),r=await n_.verify(e,t.public_key,{algorithms:WE,subject:KE.OPERATION});return await PR.findAndValidateUser(r.username,void 0,!1)}catch(t){throw r_.warn(t),t.name&&t.name==="TokenExpiredError"?Lr(new Error,Pr.TOKEN_EXPIRED,Dr.FORBIDDEN):Lr(new Error,Pr.INVALID_TOKEN,Dr.UNAUTHORIZED)}}a(C7,"validateOperationToken");async function Ov(e){let t;try{let r=await QE(),n=await n_.verify(e,r.public_key,{algorithms:WE,subject:KE.REFRESH});t=await PR.findAndValidateUser(n.username,void 0,!1)}catch(r){throw r_.warn(r),r.name&&r.name==="TokenExpiredError"?Lr(new Error,Pr.TOKEN_EXPIRED,Dr.FORBIDDEN):Lr(new Error,Pr.INVALID_TOKEN,Dr.UNAUTHORIZED)}if(!Rv.validate(t.refresh_token,e))throw Lr(new Error,Pr.INVALID_TOKEN,Dr.UNAUTHORIZED);return t}a(Ov,"validateRefreshToken")});var MR=T((zRe,Iv)=>{"use strict";var L7=pv(),vc=require("passport"),D7=require("passport-local").Strategy,P7=require("passport-http").BasicStrategy,M7=require("util"),U7=br(),yv=M7.callbackify(U7.findAndValidateUser),jRe=jr(),v7=C(),bv=s_();vc.use(new D7(function(e,t,r){yv(e,t,r)}));vc.use(new P7(function(e,t,r){yv(e,t,r)}));vc.serializeUser(function(e,t){t(null,e)});vc.deserializeUser(function(e,t){t(null,e)});function B7(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":vc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===v7.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?bv.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):bv.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:vc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(B7,"authorize");function H7(e,t){let r=L7(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(H7,"checkPermissions");Iv.exports={authorize:B7,checkPermissions:H7}});var Bc=T((XRe,wv)=>{"use strict";var UR=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},vR=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};wv.exports={Node:UR,NodeSubscription:vR}});var Lv=T((eAe,Cv)=>{"use strict";var q7=C().OPERATIONS_ENUM,BR=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}};Cv.exports=BR});var i_=T((rAe,Dv)=>{"use strict";var HR=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},qR=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)}};Dv.exports={RemotePayloadObject:HR,RemotePayloadSubscription:qR}});var Mv=T((sAe,Pv)=>{"use strict";var xR=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}};Pv.exports=xR});var Bv=T((lAe,vv)=>{"use strict";var x7=Mv(),oAe=Et(),Uv=Ve(),F7=F(),{getSchemaPath:aAe,getTransactionAuditStorePath:cAe}=Xe(),{getDatabases:G7}=(Ae(),re(Ge));vv.exports=k7;async function k7(e){let t=new x7;try{let r=G7()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await Uv.environmentDataSize(schema_path,e.name),o=await Uv.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){F7.warn(`unable to stat table dbi due to ${r}`)}return t}a(k7,"lmdbGetTableSize")});var qv=T((_Ae,Hv)=>{"use strict";var FR=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}};Hv.exports=FR});var di=T((hAe,kv)=>{"use strict";var $7=require("fs-extra"),V7=require("path"),ar=require("systeminformation"),co=F(),Y7=St(),GR=rt(),zE=C(),K7=Bv(),Gv=ji(),{getThreadInfo:xv}=st(),JR=J();JR.initSync();var W7=qv(),{openEnvironment:fAe}=Ve(),{getSchemaPath:EAe}=Xe(),{database:Q7}=(Ae(),re(Ge)),jE;kv.exports={getHDBProcessInfo:YR,getNetworkInfo:WR,getDiskInfo:KR,getMemoryInfo:VR,getCPUInfo:$R,getTimeInfo:kR,getSystemInformation:QR,systemInformation:j7,getTableSize:jR,getMetrics:zR};function kR(){return ar.time()}a(kR,"getTimeInfo");async function $R(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:_,...u}=await ar.cpu();u.cpu_speed=await ar.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:R,...g}=await ar.currentLoad();return g.cpus=[],R.forEach(O=>{let{raw_load:v,raw_load_idle:G,raw_load_irq:B,raw_load_nice:U,raw_load_system:j,raw_load_user:K,...z}=O;g.cpus.push(z)}),u.current_load=g,u}catch(e){return co.error(`error in getCPUInfo: ${e}`),{}}}a($R,"getCPUInfo");async function VR(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await ar.mem();return Object.assign(s,process.memoryUsage())}catch(e){return co.error(`error in getMemoryInfo: ${e}`),{}}}a(VR,"getMemoryInfo");async function YR(){let e={core:[],clustering:[]};try{let t=await ar.processes(),r;try{r=Number.parseInt(await $7.readFile(V7.join(JR.get(zE.CONFIG_PARAMS.ROOTPATH),zE.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===zE.NODE_ERROR_CODES.ENOENT)co.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 co.error(`error in getHDBProcessInfo: ${t}`),e}}a(YR,"getHDBProcessInfo");async function KR(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await ar.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,..._}=await ar.fsStats();return e.read_write=_,e.size=await ar.fsSize(),e}catch(t){return co.error(`error in getDiskInfo: ${t}`),e}}a(KR,"getDiskInfo");async function WR(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await ar.networkInterfaceDefault(),e.latency=await ar.inetChecksite("google.com"),(await ar.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 ar.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return co.error(`error in getNetworkInfo: ${t}`),e}}a(WR,"getNetworkInfo");async function QR(){if(jE!==void 0)return jE;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await ar.osInfo();e=c;let l=await ar.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,jE=e,jE}catch(t){return co.error(`error in getSystemInformation: ${t}`),e}}a(QR,"getSystemInformation");async function jR(){let e=[],t=await Gv.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await K7(n));return e}a(jR,"getTableSize");async function zR(){let e=await Gv.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=Q7({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){co.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(zR,"getMetrics");async function Fv(){if(JR.get(zE.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await Y7.getNATSReferences(),r=await t.streams.info(GR.WORK_QUEUE_CONSUMER_NAMES.stream_name),n=await e.consumers.get(GR.WORK_QUEUE_CONSUMER_NAMES.stream_name,GR.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(Fv,"getNatsStreamInfo");async function j7(e){let t=new W7;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await QR(),t.time=kR(),t.cpu=await $R(),t.memory=await VR(),t.disk=await KR(),t.network=await WR(),t.harperdb_processes=await YR(),t.table_size=await jR(),t.metrics=await zR(),t.threads=await xv(),t.replication=await Fv(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await QR();break;case"time":t.time=kR();break;case"cpu":t.cpu=await $R();break;case"memory":t.memory=await VR();break;case"disk":t.disk=await KR();break;case"network":t.network=await WR();break;case"harperdb_processes":t.harperdb_processes=await YR();break;case"table_size":t.table_size=await jR();break;case"database_metrics":case"metrics":t.metrics=await zR();break;case"threads":t.threads=await xv();break;case"replication":t.replication=await Fv();break;default:break}return t}a(j7,"systemInformation")});var fi=T((TAe,Kv)=>{"use strict";var z7=Or(),XR=Y(),J7=require("util"),pa=C(),$v=J();$v.initSync();var X7=MR(),Vv=Ar(),{Node:pAe,NodeSubscription:SAe}=Bc(),Z7=hc(),eee=Lv(),{RemotePayloadObject:tee,RemotePayloadSubscription:ree}=i_(),{handleHDBError:nee,hdb_errors:see}=te(),{HTTP_STATUS_CODES:iee,HDB_ERROR_MSGS:oee}=see,aee=es(),cee=di(),lee=Fi(),{getDatabases:uee}=(Ae(),re(Ge)),_ee=J7.promisify(X7.authorize),dee=Vv.searchByHash,fee=Vv.searchByValue;Kv.exports={authHeaderToUser:Eee,isEmpty:hee,getNodeRecord:mee,upsertNodeRecord:pee,buildNodePayloads:See,checkClusteringEnabled:Tee,getAllNodeRecords:gee,getSystemInfo:Ree,reverseSubscription:Yv};async function Eee(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await _ee(t,null),e}a(Eee,"authHeaderToUser");function hee(e){return e==null}a(hee,"isEmpty");async function mee(e){let t=new Z7(pa.SYSTEM_SCHEMA_NAME,pa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return dee(t)}a(mee,"getNodeRecord");async function pee(e){let t=new eee(pa.SYSTEM_SCHEMA_NAME,pa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return z7.upsert(t)}a(pee,"upsertNodeRecord");function Yv(e){if(XR.isEmpty(e.subscribe)||XR.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(Yv,"reverseSubscription");function See(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:_}=c,u=XR.getTableHashAttribute(l,_),{subscribe:d,publish:f}=Yv(c),E=uee()[l]?.[_],h=new ree(l,_,u,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new tee(r,t,s,n)}a(See,"buildNodePayloads");function Tee(){if(!$v.get(pa.CONFIG_PARAMS.CLUSTERING_ENABLED))throw nee(new Error,oee.CLUSTERING_NOT_ENABLED,iee.BAD_REQUEST,void 0,void 0,!0)}a(Tee,"checkClusteringEnabled");async function gee(){let e=new aee(pa.SYSTEM_SCHEMA_NAME,pa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await fee(e))}a(gee,"getAllNodeRecords");async function Ree(){let e=await cee.getSystemInformation();return{hdb_version:lee.version(),node_version:e.node_version,platform:e.platform}}a(Ree,"getSystemInfo")});var ZR=T((RAe,e0)=>{"use strict";var JE=St(),Wv=Y(),Qv=rt(),jv=C(),XE=F(),zv=qE(),Aee=Eu(),{RemotePayloadObject:Oee}=i_(),{handleHDBError:Jv,hdb_errors:Nee}=te(),{HTTP_STATUS_CODES:Xv}=Nee,{NodeSubscription:Zv}=Bc();e0.exports=bee;async function bee(e,t){let r;try{r=await JE.request(`${t}.${Qv.REQUEST_SUFFIX}`,new Oee(jv.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),XE.trace("Response from remote describe all request:",r)}catch(o){XE.error(`addNode received error from describe all request to remote node: ${o}`);let c=JE.requestErrorHandler(o,"add_node",t);throw Jv(new Error,c,Xv.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===Qv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw Jv(new Error,o,Xv.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===jv.SYSTEM_SCHEMA_NAME){await JE.createLocalTableStream(l,c);let h=new Zv(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=Wv.doesSchemaExist(l),u=n[l]!==void 0,d=c?Wv.doesTableExist(l,c):!0,f=c?n?.[l]?.[c]!==void 0:!0;if(!_&&!u||!d&&!f){s.push(o);continue}if(!_&&u&&(XE.trace(`addNode creating schema: ${l}`),await zv.createSchema({operation:"create_schema",schema:l})),!d&&f){XE.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Aee(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await zv.createTable(h)}await JE.createLocalTableStream(l,c);let E=new Zv(l,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(bee,"reviewSubscriptions")});var c_=T((OAe,n0)=>{"use strict";var{handleHDBError:ZE,hdb_errors:yee}=te(),{HTTP_STATUS_CODES:eh}=yee,{addUpdateNodeValidator:Iee}=VE(),o_=F(),r0=C(),t0=rt(),wee=Y(),eA=St(),a_=fi(),Cee=J(),Lee=ZR(),{Node:Dee,NodeSubscription:Pee}=Bc(),{broadcast:Mee}=st(),Uee="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",vee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Bee=Cee.get(r0.CONFIG_PARAMS.CLUSTERING_NODENAME);n0.exports=Hee;async function Hee(e,t=!1){o_.trace("addNode called with:",e),a_.checkClusteringEnabled();let r=Iee(e);if(r)throw ZE(r,r.message,eh.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await a_.getNodeRecord(n);if(!wee.isEmptyOrZeroLength(d))throw ZE(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,eh.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Lee(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Uee,o;let c=a_.buildNodePayloads(s,Bee,r0.OPERATIONS_ENUM.ADD_NODE,await a_.getSystemInfo());o_.trace("addNode sending remote payload:",c);let l;try{l=await eA.request(`${n}.${t0.REQUEST_SUFFIX}`,c)}catch(d){o_.error(`addNode received error from request: ${d}`);let f=eA.requestErrorHandler(d,"add_node",n);throw ZE(new Error,f,eh.INTERNAL_SERVER_ERROR,"error",f)}if(l.status===t0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${l.message}`;throw ZE(new Error,d,eh.INTERNAL_SERVER_ERROR,"error",d)}o_.trace(l);let _=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];o_.trace("Add node updating work stream for node:",n,"subscriptions:",E),await eA.updateWorkStream(E,n),s[d].start_time===void 0&&delete s[d].start_time,_.push(new Pee(E.schema,E.table,E.publish,E.subscribe))}let u=new Dee(n,_,l.system_info);return await a_.upsertNodeRecord(u),Mee({type:"nats_update"}),i.length>0?o.message=vee:o.message=`Successfully added '${n}' to manifest`,o}a(Hee,"addNode")});var sA=T((yAe,o0)=>{"use strict";var{handleHDBError:tA,hdb_errors:qee}=te(),{HTTP_STATUS_CODES:rA}=qee,{addUpdateNodeValidator:xee}=VE(),l_=F(),i0=C(),s0=rt(),bAe=Y(),nA=St(),u_=fi(),Fee=J(),{cloneDeep:Gee}=require("lodash"),kee=ZR(),{Node:$ee,NodeSubscription:Vee}=Bc(),{broadcast:Yee}=st(),Kee="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Wee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Qee=Fee.get(i0.CONFIG_PARAMS.CLUSTERING_NODENAME);o0.exports=jee;async function jee(e){l_.trace("updateNode called with:",e),u_.checkClusteringEnabled();let t=xee(e);if(t)throw tA(t,t.message,rA.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await u_.getNodeRecord(r);s.length>0&&(n=Gee(s));let{added:i,skipped:o}=await kee(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Kee,c;let l=u_.buildNodePayloads(i,Qee,i0.OPERATIONS_ENUM.UPDATE_NODE,await u_.getSystemInfo());l_.trace("updateNode sending remote payload:",l);let _;try{_=await nA.request(`${r}.${s0.REQUEST_SUFFIX}`,l)}catch(u){l_.error(`updateNode received error from request: ${u}`);let d=nA.requestErrorHandler(u,"update_node",r);throw tA(new Error,d,rA.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===s0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw tA(new Error,u,rA.INTERNAL_SERVER_ERROR,"error",u)}l_.trace(_);for(let u=0,d=i.length;u<d;u++){let f=i[u];l_.trace(`updateNode updating work stream for node: ${r} subscription:`,f),await nA.updateWorkStream(f,r),i[u].start_time===void 0&&delete i[u].start_time}return n||(n=[new $ee(r,[],_.system_info)]),await zee(n[0],i,_.system_info),o.length>0?c.message=Wee:c.message=`Successfully updated '${r}'`,c}a(jee,"updateNode");async function zee(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 Vee(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await u_.upsertNodeRecord(n),Yee({type:"nats_update"})}a(zee,"updateNodeTable")});var _0=T((wAe,u0)=>{"use strict";var l0=require("joi"),{string:a0}=l0.types(),Jee=it(),c0=C(),Xee=J(),Zee=rt();u0.exports=ete;function ete(e){let t=a0.invalid(Xee.get(c0.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Zee.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=l0.object({operation:a0.valid(c0.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Jee.validateBySchema(e,r)}a(ete,"removeNodeValidator")});var rh=T((LAe,p0)=>{"use strict";var{handleHDBError:d0,hdb_errors:tte}=te(),{HTTP_STATUS_CODES:f0}=tte,rte=_0(),__=F(),E0=fi(),nte=Y(),th=C(),h0=rt(),m0=St(),ste=J(),{RemotePayloadObject:ite}=i_(),{NodeSubscription:ote}=Bc(),ate=fu(),cte=Xo(),{broadcast:lte}=st(),ute=ste.get(th.CONFIG_PARAMS.CLUSTERING_NODENAME);p0.exports=_te;async function _te(e){__.trace("removeNode called with:",e),E0.checkClusteringEnabled();let t=rte(e);if(t)throw d0(t,t.message,f0.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await E0.getNodeRecord(r);if(nte.isEmptyOrZeroLength(n))throw d0(new Error,`Node '${r}' was not found.`,f0.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new ite(th.OPERATIONS_ENUM.REMOVE_NODE,ute,[]),i,o=!1;try{i=await m0.request(`${r}.${h0.REQUEST_SUFFIX}`,s),__.trace("Remove node reply from remote node:",r,i)}catch(l){__.error("removeNode received error from request:",l),o=!0}for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];__.trace(`Remove node removing subscription: ${u.schema}.${u.table} for node: ${r}`);let d=new ote(u.schema,u.table,!1,!1);await m0.updateWorkStream(d,r)}let c=new ate(th.SYSTEM_SCHEMA_NAME,th.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await cte.deleteRecord(c),lte({type:"nats_update"}),i?.status===h0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(__.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 g0=T((PAe,T0)=>{"use strict";var S0=require("joi"),{string:dte,array:fte}=S0.types(),Ete=it(),hte=VE();T0.exports=mte;function mte(e){let t=S0.object({operation:dte.valid("configure_cluster").required(),connections:fte.items(hte.validation_schema).required()});return Ete.validateBySchema(e,t)}a(mte,"configureClusterValidator")});var sh=T((UAe,b0)=>{"use strict";var pte=C(),nh=F(),Ste=Y(),Tte=rh(),gte=c_(),R0=fi(),Rte=g0(),{handleHDBError:A0,hdb_errors:Ate}=te(),{HTTP_STATUS_CODES:O0}=Ate,Ote="Configure cluster complete.",Nte="Failed to configure the cluster. Check the logs for more details.",bte="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";b0.exports=yte;async function yte(e){nh.trace("configure cluster called with:",e),R0.checkClusteringEnabled();let t=Rte(e);if(t)throw A0(t,t.message,O0.BAD_REQUEST,void 0,void 0,!0);let r=await R0.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(N0(Tte,{operation:pte.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);nh.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(N0(gte,E,E.node_name))}let c=await Promise.allSettled(i);nh.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"&&(nh.error(h.reason),l.includes(h.reason.node_name)||l.push(h.reason.node_name)),h.status==="fulfilled"&&(u=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(Ste.isEmptyOrZeroLength(l))return{message:Ote,connections:_};if(u)return{message:bte,failed_nodes:l,connections:_};throw A0(new Error,Nte,O0.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(yte,"configureCluster");async function N0(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(N0,"functionWrapper")});var I0=T((BAe,y0)=>{"use strict";var ih=require("joi"),Ite=it(),{validateSchemaExists:wte,validateTableExists:Cte,validateSchemaName:Lte}=Os(),Dte=ih.object({operation:ih.string().valid("purge_stream"),schema:ih.string().custom(wte).custom(Lte).required(),table:ih.string().custom(Cte).required()});function Pte(e){return Ite.validateBySchema(e,Dte)}a(Pte,"purgeStreamValidator");y0.exports=Pte});var iA=T((qAe,w0)=>{"use strict";var{handleHDBError:Mte,hdb_errors:Ute}=te(),{HTTP_STATUS_CODES:vte}=Ute,Bte=I0(),Hte=St(),qte=fi();w0.exports=xte;async function xte(e){if(e.purge_ingest!==!0){let s=Bte(e);if(s)throw Mte(s,s.message,vte.BAD_REQUEST,void 0,void 0,!0)}qte.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await Hte.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(xte,"purgeStream")});var ah=T((FAe,U0)=>{"use strict";var aA=fi(),Fte=St(),D0=J(),oh=C(),Sa=rt(),Gte=Y(),oA=F(),{RemotePayloadObject:kte}=i_(),{ErrorCode:C0}=require("nats"),L0=D0.get(oh.CONFIG_PARAMS.CLUSTERING_ENABLED),P0=D0.get(oh.CONFIG_PARAMS.CLUSTERING_NODENAME);U0.exports={clusterStatus:$te,buildNodeStatus:M0};async function $te(){let e={node_name:P0,is_enabled:L0,connections:[]};if(!L0)return e;let t=await aA.getAllNodeRecords();if(Gte.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(M0(t[n],e.connections));return await Promise.allSettled(r),e}a($te,"clusterStatus");async function M0(e,t){let r=e.name,n=new kte(oh.OPERATIONS_ENUM.CLUSTER_STATUS,P0,void 0,await aA.getSystemInfo()),s,i,o=Sa.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Fte.request(Sa.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Sa.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Sa.CLUSTER_STATUS_STATUSES.CLOSED,oA.error(`Error getting node status from ${r} `,s))}catch(l){oA.warn(`Error getting node status from ${r}`,l),l.code===C0.NoResponders?o=Sa.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===C0.Timeout?o=Sa.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Sa.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Vte(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!==oh.PRE_4_0_0_VERSION&&await aA.upsertNodeRecord(l)}catch(l){oA.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(M0,"buildNodeStatus");function Vte(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(Vte,"NodeStatusObject")});var lh=T((kAe,v0)=>{"use strict";var{handleHDBError:Yte,hdb_errors:Kte}=te(),{HTTP_STATUS_CODES:Wte}=Kte,Qte=St(),jte=fi(),cA=Y(),ch=require("joi"),zte=it(),Jte=2e3,Xte=ch.object({timeout:ch.number().min(1),connected_nodes:ch.boolean(),routes:ch.boolean()});v0.exports=Zte;async function Zte(e){jte.checkClusteringEnabled();let t=zte.validateBySchema(e,Xte);if(t)throw Yte(t,t.message,Wte.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||cA.autoCastBoolean(n),o=s===void 0||cA.autoCastBoolean(s),c={nodes:[]},l=await Qte.getServerList(r??Jte),_={};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(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:cA.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Zte,"clusterNetwork")});var x0=T((VAe,q0)=>{"use strict";var lA=require("joi"),B0=it(),{route_constraints:H0}=ag();q0.exports={setRoutesValidator:ere,deleteRoutesValidator:tre};function ere(e){let t=lA.object({server:lA.valid("hub","leaf").required(),routes:H0.required()});return B0.validateBySchema(e,t)}a(ere,"setRoutesValidator");function tre(e){let t=lA.object({routes:H0.required()});return B0.validateBySchema(e,t)}a(tre,"deleteRoutesValidator")});var _h=T((KAe,$0)=>{"use strict";var Ta=pt(),uA=Y(),uh=C(),F0=x0(),{handleHDBError:G0,hdb_errors:rre}=te(),{HTTP_STATUS_CODES:k0}=rre,nre="cluster routes successfully set",sre="cluster routes successfully deleted";$0.exports={setRoutes:ire,getRoutes:ore,deleteRoutes:are};function ire(e){let t=F0.setRoutesValidator(e);if(t)throw G0(t,t.message,k0.BAD_REQUEST,void 0,void 0,!0);let r=Ta.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=uA.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"?Ta.updateConfigValue(uh.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):Ta.updateConfigValue(uh.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:nre,set:o,skipped:i}}a(ire,"setRoutes");function ore(){let e=Ta.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(ore,"getRoutes");function are(e){let t=F0.deleteRoutesValidator(e);if(t)throw G0(t,t.message,k0.BAD_REQUEST,void 0,void 0,!0);let r=Ta.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 p=n[E];if(d.host===p.host&&d.port===p.port){n.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=s.length;h<p;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=uA.isEmptyOrZeroLength(n)?null:n,Ta.updateConfigValue(uh.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=uA.isEmptyOrZeroLength(s)?null:s,Ta.updateConfigValue(uh.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:sre,deleted:i,skipped:o}}a(are,"deleteRoutes")});var Y0=T((QAe,V0)=>{"use strict";var d_=require("alasql"),ga=require("recursive-iterator"),cs=F(),cre=Y(),f_=C(),_A=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,ure(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=>f_.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=>!f_.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][f_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=lre(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(_=>!f_.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new d_.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 lre(e){return e.filter(t=>t[f_.PERMS_CRUD_ENUM.READ])}a(lre,"filterReadRestrictedAttrs");function ure(e,t,r,n,s){_re(e,t,r,n,s)}a(ure,"interpretAST");function E_(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(E_,"addSchemaTableToMap");function _re(e,t,r,n,s){if(!e){cs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof d_.yy.Insert?hre(e,t,r):e instanceof d_.yy.Select?dre(e,t,r,n,s):e instanceof d_.yy.Update?fre(e,t,r):e instanceof d_.yy.Delete?Ere(e,t,r):cs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(_re,"getRecordAttributesAST");function dre(e,t,r,n,s){if(!e){cs.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(cre.isEmptyOrZeroLength(i)){cs.error("No schema specified");return}e.from.forEach(c=>{E_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),E_(c.table,t,r,n,s)});let o=new ga(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{cs.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 ga(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{cs.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 ga(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{cs.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 ga(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{cs.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(l.columnid)<0&&t.get(u).get(_).push(l.columnid)}}}a(dre,"getSelectAttributes");function fre(e,t,r){if(!e){cs.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new ga(e.columns),s=e.table.databaseid;E_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&dA(e.table.tableid,s,i.columnid,t,r)}a(fre,"getUpdateAttributes");function Ere(e,t,r){if(!e){cs.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new ga(e.where),s=e.table.databaseid;E_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&dA(e.table.tableid,s,i.columnid,t,r)}a(Ere,"getDeleteAttributes");function hre(e,t,r){if(!e){cs.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new ga(e.columns),s=e.into.databaseid;E_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&dA(e.into.tableid,s,i.columnid,t,r)}a(hre,"getInsertAttributes");function dA(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(dA,"pushAttribute");V0.exports=_A});var fh=T((zAe,j0)=>{var dh=ra(),K0=require("chalk"),En=F(),W0=require("prompt"),{promisify:mre}=require("util"),fA=C(),pre=require("fs-extra"),Sre=require("path"),Tre=Y(),gre=Fi(),Q0=J();Q0.initSync();var Rre=require("moment"),Are=mre(W0.get),Ore=Sre.join(Q0.getHdbBasePath(),fA.LICENSE_KEY_DIR_NAME,fA.LICENSE_FILE_NAME,fA.LICENSE_FILE_NAME);j0.exports={getFingerprint:bre,setLicense:Nre,parseLicense:EA,register:yre,getRegistrationInfo:wre};async function Nre(e){if(e&&e.key&&e.company){try{En.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await EA(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw En.error(r),En.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Nre,"setLicense");async function bre(){let e={};try{e=await dh.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw En.error(r),En.error(t),new Error(r)}return e}a(bre,"getFingerprint");async function EA(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");En.info("Validating license input...");let r=dh.validateLicense(e,t);if(En.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(En.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(En.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{En.info("writing license to disk"),await pre.writeFile(Ore,JSON.stringify({license_key:e,company:t}))}catch(n){throw En.error("Failed to write License"),n}return"Registration successful."}a(EA,"parseLicense");async function yre(){let e=await Ire();return EA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(yre,"register");async function Ire(){let e=await dh.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:K0.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:K0.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{W0.start()}catch(n){En.error(n)}let r;try{r=await Are(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(Ire,"promptForRegistration");async function wre(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await dh.getLicense()}catch(r){throw En.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Tre.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=gre.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Rre.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(wre,"getRegistrationInfo")});var J0=T((XAe,z0)=>{"use strict";var Cre=rt(),hA=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+Cre.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"}};z0.exports=hA});var eB=T((eOe,Z0)=>{"use strict";var X0=rt(),mA=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+X0.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+X0.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"}};Z0.exports=mA});var rB=T((rOe,tB)=>{"use strict";var pA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};tB.exports=pA});var sB=T((sOe,nB)=>{"use strict";var Lre=rt(),SA=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Lre.SERVER_SUFFIX.ADMIN,this.password=r}};nB.exports=SA});var Sh=T((oOe,aB)=>{"use strict";var Hc=require("path"),mh=require("fs-extra"),Dre=J0(),Pre=eB(),Mre=rB(),Ure=sB(),TA=br(),xc=Y(),Mr=pt(),hh=C(),h_=rt(),{CONFIG_PARAMS:gt}=hh,m_=F(),p_=J(),iB=li(),gA=St(),qc="clustering",vre=1e4,oB=5;aB.exports={generateNatsConfig:Hre,removeNatsConfig:qre,getHubConfigPath:Bre};function Bre(){let e=p_.get(gt.ROOTPATH);return Hc.join(e,qc,h_.NATS_CONFIG_FILES.HUB_SERVER)}a(Bre,"getHubConfigPath");async function Hre(e=!1,t=void 0){p_.initSync();let r=p_.get(gt.ROOTPATH),n=Hc.join(r,qc,h_.PID_FILES.HUB),s=Hc.join(r,qc,h_.PID_FILES.LEAF),i=Mr.getConfigFromFile(gt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Hc.join(r,qc,h_.NATS_CONFIG_FILES.HUB_SERVER),c=Hc.join(r,qc,h_.NATS_CONFIG_FILES.LEAF_SERVER),l=Mr.getConfigFromFile(gt.CLUSTERING_TLS_CERTIFICATE),_=Mr.getConfigFromFile(gt.CLUSTERING_TLS_PRIVATEKEY),u=Mr.getConfigFromFile(gt.CLUSTERING_TLS_CERT_AUTH),d=Mr.getConfigFromFile(gt.CLUSTERING_TLS_INSECURE),f=Mr.getConfigFromFile(gt.CLUSTERING_TLS_VERIFY),E=Mr.getConfigFromFile(gt.CLUSTERING_NODENAME),h=Mr.getConfigFromFile(gt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await gA.checkNATSServerInstalled()||ph("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await TA.listUsers(),S=Mr.getConfigFromFile(gt.CLUSTERING_USER),R=await TA.getClusterUser();(xc.isEmpty(R)||R.active!==!0)&&ph(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Eh(gt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Eh(gt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Eh(gt.CLUSTERING_HUBSERVER_NETWORK_PORT),await Eh(gt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let g=[],O=[];for(let[z,oe]of p.entries())oe.role.role===hh.ROLE_TYPES_ENUM.CLUSTER_USER&&oe.active&&(g.push(new Ure(oe.username,iB.decrypt(oe.hash))),O.push(new Mre(oe.username,iB.decrypt(oe.hash))));let v=[],{hub_routes:G}=Mr.getClusteringRoutes();if(!xc.isEmptyOrZeroLength(G))for(let z of G)v.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${z.host}:${z.port}`);let B=new Dre(Mr.getConfigFromFile(gt.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,l,_,u,d,f,h,Mr.getConfigFromFile(gt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Mr.getConfigFromFile(gt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),v,g,O);u==null&&(delete B.tls.ca_file,delete B.leafnodes.tls.ca_file),t=xc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===hh.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await mh.writeJson(o,B),m_.trace(`Hub server config written to ${o}`));let U=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,j=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,K=new Pre(Mr.getConfigFromFile(gt.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[U],[j],g,O,l,_,u,d);u==null&&delete K.tls.ca_file,(t===void 0||t===hh.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await mh.writeJson(c,K),m_.trace(`Leaf server config written to ${c}`))}a(Hre,"generateNatsConfig");async function Eh(e){let t=p_.get(e);return xc.isEmpty(t)&&ph(`port undefined for '${e}'`),await xc.isPortTaken(t)&&ph(`'${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(Eh,"isPortAvailable");function ph(e){let t=`Error generating clustering config: ${e}`;m_.error(t),console.error(t),process.exit(1)}a(ph,"generateNatsConfigError");async function qre(e){let{port:t,config_file:r}=gA.getServerConfig(e),{username:n,decrypt_hash:s}=await TA.getClusterUser(),i=0,o=2e3;for(;i<oB;){try{let _=await gA.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){m_.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=oB)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 xc.async_set_timeout(o*(i*2))}let c="0".repeat(vre),l=Hc.join(p_.get(gt.ROOTPATH),qc,r);await mh.writeFile(l,c),await mh.remove(l),m_.notify(e,"started.")}a(qre,"removeNatsConfig")});var fB=T((cOe,dB)=>{"use strict";var hn=J(),xre=ra(),Se=C(),S_=rt(),Ei=require("path"),{PACKAGE_ROOT:gh}=C(),cB=J(),Th=Y(),Fc="/dev/null",Fre=Ei.join(gh,"launchServiceScripts"),lB=Ei.join(gh,"utility/scripts"),Gre=Ei.join(lB,Se.HDB_RESTART_SCRIPT),uB=Ei.resolve(gh,"dependencies",`${process.platform}-${process.arch}`,S_.NATS_BINARY_NAME);function _B(){let t=xre.licenseSearch().ram_allocation||Se.RAM_ALLOCATION_ENUM.DEFAULT,r=Se.MEM_SETTING_KEY+t,n={[Se.PROCESS_NAME_ENV_PROP]:Se.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Th.noBootFile()&&(n[Se.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Th.getEnvCliRootPath()),{name:Se.PROCESS_DESCRIPTORS.HDB,script:Se.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:gh}}a(_B,"generateMainServerConfig");var kre=9930;function $re(){hn.initSync(!0);let e=hn.get(Se.CONFIG_PARAMS.ROOTPATH),t=Ei.join(e,"clustering",S_.NATS_CONFIG_FILES.HUB_SERVER),r=Ei.join(hn.get(Se.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Se.LOG_NAMES.HDB),n=cB.get(Se.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=S_.LOG_LEVEL_FLAGS[hn.get(Se.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Se.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==kre?"-"+n:""),script:uB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Se.PROCESS_NAME_ENV_PROP]:Se.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return hn.get(Se.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Fc,i.error_file=Fc),i}a($re,"generateNatsHubServerConfig");var Vre=9940;function Yre(){hn.initSync(!0);let e=hn.get(Se.CONFIG_PARAMS.ROOTPATH),t=Ei.join(e,"clustering",S_.NATS_CONFIG_FILES.LEAF_SERVER),r=Ei.join(hn.get(Se.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Se.LOG_NAMES.HDB),n=cB.get(Se.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=S_.LOG_LEVEL_FLAGS[hn.get(Se.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Vre?"-"+n:""),script:uB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Se.PROCESS_NAME_ENV_PROP]:Se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return hn.get(Se.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Fc,i.error_file=Fc),i}a(Yre,"generateNatsLeafServerConfig");function Kre(){hn.initSync();let e=Ei.join(hn.get(Se.CONFIG_PARAMS.LOGGING_ROOT),Se.LOG_NAMES.HDB),t={name:Se.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Se.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Se.PROCESS_NAME_ENV_PROP]:Se.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Fre,autorestart:!1};return hn.get(Se.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Fc,t.error_file=Fc),t}a(Kre,"generateClusteringUpgradeV4ServiceConfig");function Wre(){let e={[Se.PROCESS_NAME_ENV_PROP]:Se.PROCESS_DESCRIPTORS.RESTART_HDB};return Th.noBootFile()&&(e[Se.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Th.getEnvCliRootPath()),{...{name:Se.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:lB},script:Gre}}a(Wre,"generateRestart");function Qre(){return{apps:[_B()]}}a(Qre,"generateAllServiceConfigs");dB.exports={generateAllServiceConfigs:Qre,generateMainServerConfig:_B,generateRestart:Wre,generateNatsHubServerConfig:$re,generateNatsLeafServerConfig:Yre,generateClusteringUpgradeV4ServiceConfig:Kre}});var Gc=T((_Oe,yB)=>{"use strict";var Me=C(),jre=Y(),hi=Sh(),T_=St(),Ps=rt(),lo=fB(),Rh=J(),uo=F(),zre=fi(),{startWorker:EB,onMessageFromWorkers:Jre}=st(),Xre=di(),uOe=require("util"),Zre=require("child_process"),ene=require("fs"),{execFile:tne}=Zre,we;yB.exports={enterPM2Mode:rne,start:_o,stop:RA,reload:mB,restart:pB,list:AA,describe:TB,connect:mi,kill:ane,startAllServices:cne,startService:OA,getUniqueServicesList:gB,restartAllServices:lne,isServiceRegistered:RB,reloadStopStart:AB,restartHdb:SB,deleteProcess:ine,startClusteringProcesses:NB,startClusteringThreads:bB,isHdbRestartRunning:one,isClusteringRunning:_ne,stopClustering:une,reloadClustering:dne};var g_=!1;Jre(e=>{e.type==="restart"&&Rh.initSync(!0)});function rne(){g_=!0}a(rne,"enterPM2Mode");function mi(){return we||(we=require("pm2")),new Promise((e,t)=>{we.connect((r,n)=>{uo.setupConsoleLogging(),r&&t(r),e(n)})})}a(mi,"connect");var Ur,nne=10,hB;function _o(e,t=!1){if(g_)return sne(e);let r=tne(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Ur.indexOf(r);o>-1&&Ur.splice(o,1),!hB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<nne&&(ene.existsSync(hi.getHubConfigPath())?_o(e):(await hi.generateNatsConfig(!0),_o(e),await new Promise(c=>setTimeout(c,3e3)),await hi.removeNatsConfig(Me.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await hi.removeNatsConfig(Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Rh.get(Me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,_=0,u;for(;l=c.exec(i);){if(l.index&&Ps.LOG_LEVEL_HIERARCHY[o]>=Ps.LOG_LEVEL_HIERARCHY[u||"info"]){let E=u===Ps.LOG_LEVELS.ERR||u===Ps.LOG_LEVELS.WRN?uo.OUTPUTS.STDERR:uo.OUTPUTS.STDOUT;uo.logCustomLevel(u||"info",E,n,i.slice(_,l.index).trim())}let[d,f]=l;_=l.index+d.length,u=Ps.LOG_LEVELS[f]}if(Ps.LOG_LEVEL_HIERARCHY[o]>=Ps.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===Ps.LOG_LEVELS.ERR||u===Ps.LOG_LEVELS.WRN?uo.OUTPUTS.STDERR:uo.OUTPUTS.STDOUT;uo.logCustomLevel(u||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),Ur=[],!Ur&&!t){let i=a(()=>{hB=!0,Ur&&(Ur.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)}Ur.push(r)}a(_o,"start");function sne(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(sne,"startWithPM2");function RA(e){if(!g_){for(let t of Ur||[])t.name===e&&(Ur.splice(Ur.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(RA,"stop");function mB(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(mB,"reload");function pB(e){if(!g_)for(let t of Ur||[])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(pB,"restart");function ine(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(ine,"deleteProcess");async function SB(){await _o(lo.generateRestart())}a(SB,"restartHdb");async function one(){let e=await AA();for(let t in e)if(e[t].name===Me.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(one,"isHdbRestartRunning");function AA(){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(AA,"list");function TB(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(TB,"describe");function ane(){if(!g_){for(let e of Ur||[])e.kill();Ur=[];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(ane,"kill");async function cne(){try{await NB(),await bB(),await _o(lo.generateAllServiceConfigs())}catch(e){throw we?.disconnect(),e}}a(cne,"startAllServices");async function OA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Me.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=lo.generateMainServerConfig();break;case Me.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=lo.generateNatsIngestServiceConfig();break;case Me.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=lo.generateNatsReplyServiceConfig();break;case Me.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=lo.generateNatsHubServerConfig(),await _o(r,t),await hi.removeNatsConfig(e);return;case Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=lo.generateNatsLeafServerConfig(),await _o(r,t),await hi.removeNatsConfig(e);return;case Me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=lo.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await _o(r)}catch(r){throw we?.disconnect(),r}}a(OA,"startService");async function gB(){try{let e=await AA(),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(gB,"getUniqueServicesList");async function lne(e=[]){try{let t=!1,r=await gB();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===Me.PROCESS_DESCRIPTORS.HDB?t=!0:await pB(o))}t&&await AB(Me.PROCESS_DESCRIPTORS.HDB)}catch(t){throw we?.disconnect(),t}}a(lne,"restartAllServices");async function RB(e){if(Ur?.find(r=>r.name===e))return!0;let t=await Xre.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(RB,"isServiceRegistered");async function AB(e){let t=e===Me.PROCESS_DESCRIPTORS.HDB?Rh.get(Me.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):Rh.get(Me.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await TB(e),n=jre.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await RA(e),await OA(e)):e===Me.PROCESS_DESCRIPTORS.HDB?await SB():await mB(e)}a(AB,"reloadStopStart");var OB;async function NB(e=!1){for(let t in Me.CLUSTERING_PROCESSES){let r=Me.CLUSTERING_PROCESSES[t];await OA(r,e)}}a(NB,"startClusteringProcesses");async function bB(){OB=EB(Me.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Me.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await T_.createWorkQueueStream(Ps.WORK_QUEUE_CONSUMER_NAMES),await T_.updateIngestStreamConsumer(),await T_.updateLocalStreams();let e=await zre.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Me.PRE_4_0_0_VERSION){uo.info("Starting clustering upgrade 4.0.0 process"),EB(Me.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(bB,"startClusteringThreads");async function une(){for(let e in Me.CLUSTERING_PROCESSES)if(e!==Me.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Me.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await OB.terminate();else{let t=Me.CLUSTERING_PROCESSES[e];await RA(t)}}a(une,"stopClustering");async function _ne(){for(let e in Me.CLUSTERING_PROCESSES){let t=Me.CLUSTERING_PROCESSES[e];if(await RB(t)===!1)return!1}return!0}a(_ne,"isClusteringRunning");async function dne(){await hi.generateNatsConfig(!0),await T_.reloadNATSHub(),await T_.reloadNATSLeaf(),await hi.removeNatsConfig(Me.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await hi.removeNatsConfig(Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(dne,"reloadClustering")});var Ra=T((fOe,MB)=>{"use strict";var fne=require("minimist"),{isMainThread:yA,parentPort:CB}=require("worker_threads"),ut=C(),{PROCESS_DESCRIPTORS_VALIDATE:R_}=ut,Ms=F(),IA=Y(),Ah=Sh(),kc=St(),NA=rt(),LB=pt(),Us=Gc(),IB=di(),Ene=Do(),{restartWorkers:Oh,onMessageByType:hne}=st(),{handleHDBError:mne,hdb_errors:pne}=te(),{HTTP_STATUS_CODES:Sne}=pne,Nh=J();Nh.initSync();var A_=`Restarting HarperDB. This may take up to ${ut.RESTART_TIMEOUT_MS/1e3} seconds.`,Tne="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",wB="Clustering is not enabled so cannot be restarted",gne="Invalid service",$c,Bn;MB.exports={restart:DB,restartService:wA};yA&&hne(ut.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?wA({service:e.workerType}):DB({operation:"restart"})});async function DB(e){Bn=Object.keys(e).length===0,$c=await Us.isServiceRegistered(ut.HDB_PROC_DESCRIPTOR);let t=fne(process.argv);if(t.service){await wA(t);return}if(Bn&&!$c){console.error(Tne);return}if(Bn&&console.log(A_),$c){Us.enterPM2Mode(),Ms.notify(A_);let r=Ene(Object.keys(ut.CONFIG_PARAM_MAP),!0);return IA.isEmptyOrZeroLength(Object.keys(r))||LB.updateConfigValue(void 0,void 0,r,!0,!0),Ane(),A_}return yA?(Ms.notify(A_),setTimeout(()=>{Oh()},50)):CB.postMessage({type:ut.ITC_EVENT_TYPES.RESTART}),A_}a(DB,"restart");async function wA(e){let{service:t}=e;if(ut.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw mne(new Error,gne,Sne.BAD_REQUEST,void 0,void 0,!0);if($c=await Us.isServiceRegistered(ut.HDB_PROC_DESCRIPTOR),!yA)return CB.postMessage({type:ut.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case R_.clustering:if(!Nh.get(ut.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=wB;break}Bn&&console.log("Restarting clustering"),Ms.notify("Restarting clustering"),await PB();break;case R_.clustering_config:case R_["clustering config"]:if(!Nh.get(ut.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=wB;break}Bn&&console.log("Restarting clustering_config"),Ms.notify("Restarting clustering_config"),await Us.reloadClustering();break;case"custom_functions":case"custom functions":case R_.harperdb:case R_.http_workers:if(Bn&&!$c){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Bn&&console.log("Restarting http_workers"),Ms.notify("Restarting http_workers"),Bn?await Us.restart(ut.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Oh("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Ms.error(r),Bn&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(wA,"restartService");async function Rne(){await kc.publishToStream(`${NA.SUBJECT_PREFIXES.TXN}.${NA.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,NA.WORK_QUEUE_CONSUMER_NAMES.stream_name,kc.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(Rne,"postDummyNatsMsg");async function Ane(){await PB(),await Us.restart(ut.HDB_PROC_DESCRIPTOR),await IA.async_set_timeout(2e3),Nh.get(ut.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await bA(),Bn&&(await kc.closeConnection(),process.exit(0))}a(Ane,"restartPM2Mode");async function PB(){if(!LB.getConfigFromFile(ut.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await IB.getHDBProcessInfo()).clustering.length===0)Ms.trace("Clustering not running, restart will start clustering services"),await Ah.generateNatsConfig(!0),await Us.startClusteringProcesses(),await Us.startClusteringThreads(),await bA(),Bn&&await kc.closeConnection();else{await Rne(),await Ah.generateNatsConfig(!0),$c?(Ms.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Us.restart(ut.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Us.restart(ut.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await IB.getHDBProcessInfo()).clustering.forEach(s=>{Ms.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await IA.async_set_timeout(3e3),await bA(),await kc.updateLocalStreams(),Bn&&await kc.closeConnection(),Ms.trace("Restart clustering restarting ingest and reply service threads");let t=Oh(ut.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Oh(ut.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(PB,"restartClustering");async function bA(){await Ah.removeNatsConfig(ut.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ah.removeNatsConfig(ut.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(bA,"removeNatsConfig")});var VB=T((mOe,$B)=>{"use strict";var hOe=require("lodash"),vr=C(),{handleHDBError:UB,hdb_errors:One}=te(),{HDB_ERROR_MSGS:Nne,HTTP_STATUS_CODES:bne}=One,CA=F();$B.exports={getRolePermissions:Ine};var Aa=Object.create(null),yne=a(e=>({key:e,perms:{}}),"perms_template_obj"),qB=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),xB=a((e=!1,t=!1,r=!1,n=!1)=>({[vr.PERMS_CRUD_ENUM.READ]:e,[vr.PERMS_CRUD_ENUM.INSERT]:t,[vr.PERMS_CRUD_ENUM.UPDATE]:r,[vr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),LA=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...xB(t,r,n,s)}),"table_perms_template"),vB=a((e,t=xB())=>({attribute_name:e,describe:kB(t),[O_]:t[O_],[DA]:t[DA],[PA]:t[PA]}),"attr_perms_template"),BB=a((e,t=!1)=>({attribute_name:e,describe:t,[O_]:t}),"timestamp_attr_perms_template"),{READ:O_,INSERT:DA,UPDATE:PA}=vr.PERMS_CRUD_ENUM,FB=Object.values(vr.PERMS_CRUD_ENUM),GB=[O_,DA,PA];function Ine(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[vr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Aa[t]&&Aa[t].key===n)return Aa[t].perms;let s=wne(e,r);return Aa[t]?Aa[t].key=n:Aa[t]=yne(n),Aa[t].perms=s,s}catch(r){if(!e[vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<vr.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw CA.error(n),CA.debug(r),UB(new Error,Nne.OUTDATED_PERMS_TRANSLATION_ERROR,bne.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
12
- ${r.stack}`;throw CA.error(n),UB(new Error)}}}a(Ine,"getRolePermissions");function wne(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[vr.SYSTEM_SCHEMA_NAME]=n[vr.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=Cne(t[i]);return}r[i]=qB(),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],_=Lne(c,l);r[i].describe||FB.forEach(u=>{_[u]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=LA()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=LA()})}),r}a(wne,"translateRolePermissions");function Cne(e){let t=qB(!0);return Object.keys(e).forEach(r=>{t.tables[r]=LA(!0,!0,!0,!0,!0)}),t}a(Cne,"createStructureUserPermissions");function Lne(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 vr.TIME_STAMP_NAMES.includes(d)&&(f=BB(d,u[O_])),_[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=kB(u),s.attribute_permissions.push(u),c||Dne(u,l)}else if(_!==o){let u;vr.TIME_STAMP_NAMES.includes(_)?u=BB(_):u=vB(_),s.attribute_permissions.push(u)}}),c||s.attribute_permissions.push(l),s.describe=HB(s),s}else return e.describe=HB(e),e}a(Lne,"getTableAttrPerms");function HB(e){return FB.filter(t=>e[t]).length>0}a(HB,"getSchemaTableDescribePerm");function kB(e){return GB.filter(t=>e[t]).length>0}a(kB,"getAttributeDescribePerm");function Dne(e,t){GB.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Dne,"checkForHashPerms")});var YB={};$e(YB,{Headers:()=>fo});var fo,bh=Ne(()=>{fo=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];n?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var N_={};$e(N_,{authentication:()=>ZB,bypassAuth:()=>qne,login:()=>Fne,logout:()=>Gne,start:()=>xne});function qne(){XB=!0}async function ZB(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?vne?Une:[]:Mne?Pne:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new fo([["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 p=s.indexOf(";",h),S=s.indexOf("=",h);l=s.slice(S+1,p===-1?s.length:p),_=await WB.get(l)}e.session=_||(_={})}e.user=null;let u=a((E,h,p)=>{let S=new wh.AuthAuditLog(E,h,Xt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,l&&(S.session_id=l),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===Xt.AUTH_AUDIT_STATUS.SUCCESS?KB.notify(S):KB.error(S)},"authAuditLog"),d;if(n){if(d=Oa.get(n),!d){let[E,h]=n.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await ft.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,Ih.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,Ih.validateRefreshToken)(h),c({status:-1})}catch{throw R}}break}}catch(R){return Hne&&(Oa.get(h)||(Oa.set(h,h),u(p,Xt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:Eo({error:R.message},e)})}Oa.set(n,d),Bne&&u(d.username,Xt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await ft.getUser(_.user,null,e):(XB&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,jB.getSuperUser)());yh&&(e.session.update=function(E){if(!l){l=(0,zB.v4)();let p=`${(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",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=l,WB.put(E)},e.login=async function(E,h){e.user=await ft.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")&&Vi.loginPath?(f.status=302,f.headers.set("Location",Vi.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 fo);for(let d=0;d<_;){let f=o[d++];u.set(f,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function xne({server:e,port:t}){e.request(ZB,{port:t||"all"}),QB||(QB=!0,setInterval(()=>{Oa=new Map},Hn.get(Xt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),JB.user.addListener(()=>{Oa=new Map}))}async function Fne(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 Gne(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var jB,Ih,zB,Hn,Xt,wh,JB,KB,Pne,Mne,Une,vne,WB,yh,XB,Bne,Hne,Oa,QB,Ch=Ne(()=>{jB=H(br());Er();Kl();Ih=H(s_());Ae();zB=require("uuid"),Hn=H(J()),Xt=H(C()),wh=H(F()),JB=H(yu());bh();Vc();KB=(0,wh.loggerWithTag)("auth-event");Hn.initSync();Pne=Hn.get(Xt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),Mne=Hn.get(Xt.CONFIG_PARAMS.HTTP_CORS),Une=Hn.get(Xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),vne=Hn.get(Xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),WB=mt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),yh=Hn.get(Xt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,XB=Hn.get(Xt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Bne=Hn.get(Xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Hne=Hn.get(Xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Oa=new Map;ft.onInvalidatedUser(()=>{Oa=new Map});a(qne,"bypassAuth");a(ZB,"authentication");a(xne,"start");a(Fne,"login");a(Gne,"logout")});var oH=T((bOe,iH)=>{"use strict";var Ce=require("joi"),eH=require("fs-extra"),tH=require("path"),Si=it(),rH=J(),nH=C(),sH=F(),{hdb_errors:kne}=te(),{HDB_ERROR_MSGS:cr}=kne,pi=/^[a-zA-Z0-9-_]+$/;iH.exports={getDropCustomFunctionValidator:Vne,setCustomFunctionValidator:Yne,addComponentValidator:jne,dropCustomFunctionProjectValidator:zne,packageComponentValidator:Jne,deployComponentValidator:Xne,setComponentFileValidator:Kne,getComponentFileValidator:Qne,dropComponentFileValidator:Wne};function Lh(e,t,r){try{let n=rH.get(nH.CONFIG_PARAMS.COMPONENTSROOT),s=tH.join(n,t);return eH.existsSync(s)?e?t:r.message(cr.PROJECT_EXISTS):e?r.message(cr.NO_PROJECT):t}catch(n){return sH.error(n),r.message(cr.VALIDATION_ERR)}}a(Lh,"checkProjectExists");function b_(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(b_,"checkFilePath");function $ne(e,t,r,n){try{let s=rH.get(nH.CONFIG_PARAMS.COMPONENTSROOT),i=tH.join(s,e,t,r+".js");return eH.existsSync(i)?r:n.message(cr.NO_FILE)}catch(s){return sH.error(s),n.message(cr.VALIDATION_ERR)}}a($ne,"checkFileExists");function Vne(e){let t=Ce.object({project:Ce.string().pattern(pi).custom(Lh.bind(null,!0)).required().messages({"string.pattern.base":cr.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(pi).custom($ne.bind(null,e.project,e.type)).custom(b_).required().messages({"string.pattern.base":cr.BAD_FILE_NAME})});return Si.validateBySchema(e,t)}a(Vne,"getDropCustomFunctionValidator");function Yne(e){let t=Ce.object({project:Ce.string().pattern(pi).custom(Lh.bind(null,!0)).required().messages({"string.pattern.base":cr.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(b_).required(),function_content:Ce.string().required()});return Si.validateBySchema(e,t)}a(Yne,"setCustomFunctionValidator");function Kne(e){let t=Ce.object({project:Ce.string().pattern(pi).required().messages({"string.pattern.base":cr.BAD_PROJECT_NAME}),file:Ce.string().custom(b_).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Si.validateBySchema(e,t)}a(Kne,"setComponentFileValidator");function Wne(e){let t=Ce.object({project:Ce.string().pattern(pi).required().messages({"string.pattern.base":cr.BAD_PROJECT_NAME}),file:Ce.string().custom(b_).optional()});return Si.validateBySchema(e,t)}a(Wne,"dropComponentFileValidator");function Qne(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(b_).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Si.validateBySchema(e,t)}a(Qne,"getComponentFileValidator");function jne(e){let t=Ce.object({project:Ce.string().pattern(pi).custom(Lh.bind(null,!1)).required().messages({"string.pattern.base":cr.BAD_PROJECT_NAME})});return Si.validateBySchema(e,t)}a(jne,"addComponentValidator");function zne(e){let t=Ce.object({project:Ce.string().pattern(pi).custom(Lh.bind(null,!0)).required().messages({"string.pattern.base":cr.BAD_PROJECT_NAME})});return Si.validateBySchema(e,t)}a(zne,"dropCustomFunctionProjectValidator");function Jne(e){let t=Ce.object({project:Ce.string().pattern(pi).required().messages({"string.pattern.base":cr.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean()});return Si.validateBySchema(e,t)}a(Jne,"packageComponentValidator");function Xne(e){let t=Ce.object({project:Ce.string().pattern(pi).required().messages({"string.pattern.base":cr.BAD_PROJECT_NAME}),payload:Ce.string().optional().messages({"string.pattern.base":cr.BAD_PACKAGE}),package:Ce.string().optional()});return Si.validateBySchema(e,t)}a(Xne,"deployComponentValidator")});var Uh=T((IOe,fH)=>{"use strict";var Dh=require("joi"),Ph=require("path"),aH=require("fs-extra"),{exec:Zne}=require("child_process"),ese=require("util"),cH=ese.promisify(Zne),y_=C(),{handleHDBError:Yc,hdb_errors:tse}=te(),{HTTP_STATUS_CODES:Kc}=tse,I_=J(),rse=it(),Wc=F();I_.initSync();var MA=I_.get(y_.CONFIG_PARAMS.COMPONENTSROOT),lH="npm install --omit=dev --json",nse=`${lH} --dry-run`;fH.exports={installModules:ase,auditModules:cse,installAllRootModules:sse,uninstallRootModule:ise,linkHarperdb:ose};async function sse(e=!1){await Mh(),await w_(e?"npm install --ignore-scripts":"npm install",I_.get(y_.CONFIG_PARAMS.ROOTPATH))}a(sse,"installAllRootModules");async function ise(e){await w_(`npm uninstall ${e}`,I_.get(y_.CONFIG_PARAMS.ROOTPATH))}a(ise,"uninstallRootModule");async function ose(){await Mh(),await w_(`npm link ${y_.PACKAGE_ROOT}`,I_.get(y_.CONFIG_PARAMS.ROOTPATH))}a(ose,"linkHarperdb");async function w_(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await cH(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
13
- `,""))}return n&&!n.includes("Debugger listening")&&Wc.error("Error running NPM command:",e,n),Wc.trace(r,n),r?.replace(`
14
- `,"")}a(w_,"runCommand");async function ase(e){Wc.info(`starting installModules for request: ${e}`);let t=dH(e);if(t)throw Yc(t,t.message,Kc.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?nse:lH;await Mh(),await _H(r);let i={};for(let o=0,c=r.length;o<c;o++){let l=r[o];i[l]={npm_output:null,npm_error:null};let _=Ph.join(MA,l),u,d=null;try{let{stdout:f,stderr:E}=await cH(s,{cwd:_});u=f?f.replace(`
11
+ `,"")}a(NU,"runCommand");async function A6(){try{await e6.access(rR)}catch{return!1}let e=await NU(`${rR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return t6.eq(t,g6)}a(A6,"checkNATSServerInstalled");async function oR(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await gU.getClusterUser();if(Ea(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}un.trace("create nats connection called");let i=await d6({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Wt.get(Be.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Wt.get(Be.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Wt.get(Be.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),un.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&un.error("Error with Nats client connection, connection closed",o),bU()}),i}a(oR,"createConnection");function bU(){Ln=void 0,_a=void 0,da=void 0,fa=void 0}a(bU,"clearClientCache");async function O6(){Ln&&(await Ln.drain(),Ln=void 0,_a=void 0,da=void 0,fa=void 0)}a(O6,"closeConnection");var Ln,fa;async function DE(){return fa||(fa=oR(Wt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Ln=await fa),Ln||fa}a(DE,"getConnection");async function zu(){if(_a)return _a;Ea(Ln)&&await DE();let{domain:e}=Ju(Be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ea(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return _a=await Ln.jetstreamManager({domain:e,timeout:6e4}),_a}a(zu,"getJetStreamManager");async function yU(){if(da)return da;Ea(Ln)&&await DE();let{domain:e}=Ju(Be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ea(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return da=Ln.jetstream({domain:e,timeout:6e4}),da}a(yU,"getJetStream");async function Or(){let e=Ln||await DE(),t=_a||await zu(),r=da||await yU();return{connection:e,jsm:t,js:r}}a(Or,"getNATSReferences");async function N6(e){let t=Wt.get(Be.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await gU.getClusterUser(),s=await oR(t,r,n),i=iR(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=OU.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 nR.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(N6,"getServerList");async function aR(e,t){let{jsm:r}=await Or(),n=Wt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Wt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Wt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:RU.File,retention:AU.Limits,subjects:t,discard:f6.Old,max_msgs:s,max_bytes:i,max_age:n})}a(aR,"createLocalStream");async function IU(){let{jsm:e}=await Or(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(IU,"listStreams");async function b6(e){let{jsm:t}=await Or();await t.streams.delete(e)}a(b6,"deleteLocalStream");async function y6(e){let{connection:t}=await Or(),r=[],n=iR(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(OU.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(y6,"listRemoteStreams");async function I6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Or(),i=pU(),o={durable_name:i,ack_policy:CE.Explicit};t&&(o.deliver_policy=LE.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=sR(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(I6,"viewStream");async function*w6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Or(),i=pU(),o={durable_name:i,ack_policy:CE.Explicit};t&&(o.deliver_policy=LE.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=sR(_.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(w6,"viewStreamIterator");async function C6(e,t,r,n){un.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=wU(n,r);let{js:s}=await Or(),i=await Xu(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:TU.encode(n);try{un.trace(`publishToStream publishing to subject: ${o}`),S6(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 PU(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){un.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await aR(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(C6,"publishToStream");function wU(e,t){t===void 0&&(t=h6());let r=Wt.get(Be.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(we.MSG_HEADERS.ORIGIN)&&r&&t.append(we.MSG_HEADERS.ORIGIN,r),t}a(wU,"addNatsMsgHeader");function Ju(e){e=e.toLowerCase();let t=ju.join(Wt.get(Be.CONFIG_PARAMS.ROOTPATH),T6);if(e===Be.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ea(tR)&&(tR={port:Wu.getConfigFromFile(Be.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Wu.getConfigFromFile(Be.CONFIG_PARAMS.CLUSTERING_NODENAME)+we.SERVER_SUFFIX.HUB,config_file:we.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:ju.join(t,we.PID_FILES.HUB),hdb_nats_path:t}),tR;if(e===Be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ea(eR)&&(eR={port:Wu.getConfigFromFile(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Wu.getConfigFromFile(Be.CONFIG_PARAMS.CLUSTERING_NODENAME)+we.SERVER_SUFFIX.LEAF,config_file:we.NATS_CONFIG_FILES.LEAF_SERVER,domain:Wu.getConfigFromFile(Be.CONFIG_PARAMS.CLUSTERING_NODENAME)+we.SERVER_SUFFIX.LEAF,pid_file_path:ju.join(t,we.PID_FILES.LEAF),hdb_nats_path:t}),eR;un.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ju,"getServerConfig");async function L6(e){let{jsm:t}=await Or(),r=await Xu();try{await t.streams.add({name:e.stream_name,storage:RU.File,retention:AU.Limits,max_age:u6,max_bytes:_6,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:CE.Explicit,durable_name:e.durable_name,deliver_policy:LE.All,max_ack_pending:1e4});else throw n}}a(L6,"createWorkQueueStream");async function D6(){let{jsm:e}=await Or();(await e.consumers.info(we.WORK_QUEUE_CONSUMER_NAMES.stream_name,we.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(un.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),un.info("Adding pull consumer to ingest stream"),await e.consumers.add(we.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:CE.Explicit,durable_name:we.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:LE.All,max_ack_pending:1e4}))}a(D6,"updateIngestStreamConsumer");async function CU(e,t,r){let{jsm:n}=await Or(),s=await n.streams.info(t),i=LU(n.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:l}=r,_=wE.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 p=0,S=s.config.sources.length;p<S;p++)if(d=s.config.sources[p],f=p,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 p=`txn.${c}.${l}.${e}`;await n.streams.purge(t,{filter:p}),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(CU,"addSourceToWorkStream");function LU(e){return e.split(".")[1]}a(LU,"extractServerName");async function DU(e,t,r){let{jsm:n}=await Or(),{schema:s,table:i}=r,o=`txn.${s}.${i}.${e}`;await n.streams.purge(t,{filter:o});let c=wE.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(DU,"removeSourceFromWorkStream");async function P6(e,t,r=6e4,n=iR()){if(!nR.isObject(t))throw new Error("data param must be an object");let s=TU.encode(t),{connection:i}=await Or(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return sR(c.data)}a(P6,"request");function cR(e){return new Promise(async(t,r)=>{let n=i6(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(cR,"reloadNATS");async function M6(){let{pid_file_path:e}=Ju(Be.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await cR(e)}a(M6,"reloadNATSHub");async function U6(){let{pid_file_path:e}=Ju(Be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await cR(e)}a(U6,"reloadNATSLeaf");function v6(e,t,r){let n;switch(e.code){case mU.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case mU.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(v6,"requestErrorHandler");async function B6(e,t){let r=t+we.SERVER_SUFFIX.LEAF;await PU(async()=>{e.subscribe===!0?await CU(r,we.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await DU(r,we.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(B6,"updateWorkStream");function PU(e){return o6.writeTransaction(Be.SYSTEM_SCHEMA_NAME,Be.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(PU,"exclusiveLock");async function MU(e,t){let r=wE.createNatsTableStreamName(e,t),n=await Xu(),s=F6(e,t,n);await aR(r,[s])}a(MU,"createLocalTableStream");async function H6(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await MU(n,s)}}a(H6,"createTableStreams");async function UU(e,t,r=!1){if(Wt.get(Be.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=wE.createNatsTableStreamName(e,t),{jsm:s}=await Or();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")un.warn(n);else throw n}}a(UU,"purgeTableStream");async function q6(e,t){if(Wt.get(Be.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await UU(e,t[r])}a(q6,"purgeSchemaTableStreams");async function x6(e){return(await zu()).streams.info(e)}a(x6,"getStreamInfo");function F6(e,t,r){return`${we.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(F6,"createSubjectName");async function Xu(){if(Qu)return Qu;if(Qu=(await zu())?.nc?.info?.server_name,Qu===void 0)throw new Error("Unable to get jetstream manager server name");return Qu}a(Xu,"getJsmServerName");async function G6(){let e=await zu(),t=await Xu(),r=await IU();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=k6(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}`;un.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}`;un.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let u=_.join(".");un.trace(`Updating stream subject name from: ${i} to: ${u}`),s.subjects[0]=u}await e.streams.update(s.name,s)}}}a(G6,"updateLocalStreams");function k6(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=Wt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Wt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Wt.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(k6,"updateStreamLimits")});var vE=g((pRe,xU)=>{"use strict";var wc=Af(),Cc=hU(),$6=G(),V6=require("uuid").v4,mRe=require("clone"),ME=si(),Lc=C(),Y6=require("util"),to=bn(),{handleHDBError:Nr,hdb_errors:K6}=re(),{HDB_ERROR_MSGS:PE,HTTP_STATUS_CODES:br}=K6,{SchemaEventMsg:UE}=zn(),BU=Et(),{getDatabases:W6}=(Ne(),ne(xe)),{transformReq:Dc}=W();xU.exports={createSchema:Q6,createSchemaStructure:HU,createTable:j6,createTableStructure:qU,createAttribute:e9,dropSchema:z6,dropTable:J6,dropAttribute:X6,getBackup:t9};async function Q6(e){let t=await HU(e);return ME.signalSchemaChange(new UE(process.pid,e.operation,e.schema)),t}a(Q6,"createSchema");async function HU(e){let t=wc.schema_object(e);if(t)throw Nr(t,t.message,br.BAD_REQUEST,void 0,void 0,!0);if(Dc(e),!await Cc.checkSchemaExists(e.schema))throw Nr(new Error,PE.SCHEMA_EXISTS_ERR(e.schema),br.BAD_REQUEST,Lc.LOG_LEVELS.ERROR,PE.SCHEMA_EXISTS_ERR(e.schema),!0);return await to.createSchema(e),`database '${e.schema}' successfully created`}a(HU,"createSchemaStructure");async function j6(e){return Dc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await qU(e)}a(j6,"createTable");async function qU(e){let t=wc.create_table_object(e);if(t)throw Nr(t,t.message,br.BAD_REQUEST,void 0,void 0,!0);if(wc.validateTableResidence(e.residence),!await Cc.checkSchemaTableExists(e.schema,e.table))throw Nr(new Error,PE.TABLE_EXISTS_ERR(e.schema,e.table),br.BAD_REQUEST,Lc.LOG_LEVELS.ERROR,PE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:V6(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await to.createTable(n,e);else throw Nr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",br.BAD_REQUEST);else await to.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(qU,"createTableStructure");async function z6(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=wc.schema_object(e),n=t??r;if(n)throw Nr(n,n.message,br.BAD_REQUEST,void 0,void 0,!0);Dc(e);let s=await Cc.checkSchemaExists(e.schema);if(s)throw Nr(new Error,s,br.NOT_FOUND,Lc.LOG_LEVELS.ERROR,s,!0);let i=await Cc.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await to.dropSchema(e),ME.signalSchemaChange(new UE(process.pid,e.operation,e.schema)),await BU.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(z6,"dropSchema");async function J6(e){let t=wc.table_object(e);if(t)throw Nr(t,t.message,br.BAD_REQUEST,void 0,void 0,!0);Dc(e);let r=await Cc.checkSchemaTableExists(e.schema,e.table);if(r)throw Nr(new Error,r,br.NOT_FOUND,Lc.LOG_LEVELS.ERROR,r,!0);return await to.dropTable(e),await BU.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(J6,"dropTable");async function X6(e){let t=wc.attribute_object(e);if(t)throw Nr(t,t.message,br.BAD_REQUEST,void 0,void 0,!0);Dc(e);let r=await Cc.checkSchemaTableExists(e.schema,e.table);if(r)throw Nr(new Error,r,br.NOT_FOUND,Lc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Nr(new Error,"You cannot drop a hash attribute",br.BAD_REQUEST,void 0,void 0,!0);if(Lc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Nr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,br.BAD_REQUEST,void 0,void 0,!0);try{return await to.dropAttribute(e),Z6(e),ME.signalSchemaChange(new UE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw $6.error(`Got an error deleting attribute ${Y6.inspect(e)}.`),n}}a(X6,"dropAttribute");function Z6(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(Z6,"dropAttributeFromGlobal");async function e9(e){Dc(e);let t=W6()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Nr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,br.BAD_REQUEST,void 0,void 0,!0);return await to.createAttribute(e),ME.signalSchemaChange(new UE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(e9,"createAttribute");function t9(e){return to.getBackup(e)}a(t9,"getBackup")});var GU=g((TRe,FU)=>{"use strict";var{OPERATIONS_ENUM:r9}=C(),lR=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=r9.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};FU.exports=lR});var uR=g((ARe,KU)=>{"use strict";var n9=bn(),RRe=GU(),BE=W(),HE=C(),s9=J(),{handleHDBError:kU,hdb_errors:i9}=re(),{HDB_ERROR_MSGS:$U,HTTP_STATUS_CODES:VU}=i9,o9=Object.values(HE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),YU="To use this operation audit log must be enabled in harperdb-config.yaml";KU.exports=a9;async function a9(e){if(BE.isEmpty(e.schema))throw new Error($U.SCHEMA_REQUIRED_ERR);if(BE.isEmpty(e.table))throw new Error($U.TABLE_REQUIRED_ERR);if(!s9.get(HE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw kU(new Error,YU,VU.BAD_REQUEST,HE.LOG_LEVELS.ERROR,YU,!0);let t=BE.checkSchemaTableExist(e.schema,e.table);if(t)throw kU(new Error,t,VU.NOT_FOUND,HE.LOG_LEVELS.ERROR,t,!0);if(!BE.isEmpty(e.search_type)&&o9.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await n9.readAuditLog(e)}a(a9,"readAuditLog")});var QU=g((NRe,WU)=>{"use strict";var{OPERATIONS_ENUM:c9}=C(),_R=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=c9.GET_BACKUP,this.schema=t,this.table=r}};WU.exports=_R});var JU=g((wRe,zU)=>{"use strict";var l9=bn(),yRe=QU(),dR=W(),u9=C(),IRe=J(),{handleHDBError:_9,hdb_errors:d9}=re(),{HDB_ERROR_MSGS:jU,HTTP_STATUS_CODES:f9}=d9;zU.exports=E9;async function E9(e){if(dR.isEmpty(e.schema))throw new Error(jU.SCHEMA_REQUIRED_ERR);if(dR.isEmpty(e.table))throw new Error(jU.TABLE_REQUIRED_ERR);let t=dR.checkSchemaTableExist(e.schema,e.table);if(t)throw _9(new Error,t,f9.NOT_FOUND,u9.LOG_LEVELS.ERROR,t,!0);return await l9.getBackup(read_audit_log_object)}a(E9,"getBackup")});var nv=g((LRe,rv)=>{var ro=require("validate.js"),ZU=tt(),Pc=C(),{handleHDBError:h9,hdb_errors:m9}=re(),{HDB_ERROR_MSGS:ht,HTTP_STATUS_CODES:p9}=m9,fR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),S9={STRUCTURE_USER:"structure_user"},XU=Object.values(Pc.ROLE_TYPES_ENUM),T9="attribute_permissions",g9="attribute_name",{PERMS_CRUD_ENUM:Mc}=Pc,R9=[T9,...Object.values(Mc)],ev=[Mc.READ,Mc.INSERT,Mc.UPDATE],A9=[g9,...ev];function O9(e){let t=fR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,tv(e,t)}a(O9,"addRoleValidation");function N9(e){let t=fR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,tv(e,t)}a(N9,"alterRoleValidation");function b9(e){let t=fR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,ZU.validateObject(e,t)}a(b9,"dropRoleValidation");var y9=["operation","role","id","permission","hdb_user","hdb_auth_header"];function tv(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)y9.includes(n[o])||s.push(n[o]);s.length>0&&Rt(ht.INVALID_ROLE_JSON_KEYS(s),r);let i=ZU.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Rt(o,r)}),e.permission){let o=I9(e);o&&Rt(o,r),XU.forEach(c=>{e.permission[c]&&!ro.isBoolean(e.permission[c])&&Rt(ht.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(XU.indexOf(o)<0){if(o===S9.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]||Rt(ht.SCHEMA_NOT_FOUND(d),r)}continue}Rt(ht.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Rt(ht.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]){Rt(ht.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(_).forEach(u=>{R9.includes(u)||Rt(ht.INVALID_PERM_KEY(u),r,o,l)}),Object.values(Mc).forEach(u=>{ro.isDefined(_[u])?ro.isBoolean(_[u])||Rt(ht.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):Rt(ht.TABLE_PERM_MISSING(u),r,o,l)}),ro.isDefined(_.attribute_permissions)){if(!ro.isArray(_.attribute_permissions)){Rt(ht.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}}else{Rt(ht.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(p=>{!A9.includes(p)&&p!==Mc.DELETE&&Rt(ht.INVALID_ATTR_PERM_KEY(p),r,o,l)}),!ro.isDefined(E.attribute_name)){Rt(ht.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=E.attribute_name;if(!u.includes(h)){Rt(ht.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}ev.forEach(p=>{ro.isDefined(E[p])?ro.isBoolean(E[p])||Rt(ht.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,l):Rt(ht.ATTR_PERM_MISSING(p,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}`;Rt(ht.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,l)}}}}return w9(r)}a(tv,"customValidate");rv.exports={addRoleValidation:O9,alterRoleValidation:N9,dropRoleValidation:b9};function I9(e){let{operation:t,permission:r}=e;if(t===Pc.OPERATIONS_ENUM.ADD_ROLE||t===Pc.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 ht.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Pc.ROLE_TYPES_ENUM.SUPER_USER:Pc.ROLE_TYPES_ENUM.CLUSTER_USER;return ht.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(I9,"validateNoSUPerms");function w9(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:ht.ROLE_PERMS_ERROR,...e};return h9(new Error,n,p9.BAD_REQUEST)}else return null}a(w9,"generateRolePermResponse");function Rt(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(Rt,"addPermError")});var xE=g((PRe,av)=>{"use strict";var sv=Tr(),iv=Sr(),C9=Xo(),hR=nv(),mR=si(),L9=require("uuid").v4,D9=require("util"),qE=C(),P9=W(),pR=iv.searchByValue,M9=iv.searchByHash,U9=D9.promisify(C9.delete),v9=Jn(),B9=Ec(),{hdb_errors:H9,handleHDBError:ha}=re(),{HDB_ERROR_MSGS:ov,HTTP_STATUS_CODES:Zu}=H9,{UserEventMsg:SR}=zn();av.exports={addRole:q9,alterRole:x9,dropRole:F9,listRoles:G9};function ER(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(ER,"scrubRoleDetails");async function q9(e){let t=hR.addRoleValidation(e);if(t)throw t;e=ER(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await pR(r)||[])}catch(i){throw ha(i)}if(n&&n.length>0)throw ha(new Error,ov.ROLE_ALREADY_EXISTS(e.role),Zu.CONFLICT,void 0,void 0,!0);e.id||(e.id=L9());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await sv.insert(s),mR.signalUserChange(new SR(process.pid)),e=ER(e),e}a(q9,"addRole");async function x9(e){let t=hR.alterRoleValidation(e);if(t)throw t;e=ER(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await sv.update(r)}catch(s){throw ha(s)}if(n&&n?.message==="updated 0 of 1 records")throw ha(new Error,"Invalid role id",Zu.BAD_REQUEST,void 0,void 0,!0);return await mR.signalUserChange(new SR(process.pid)),e}a(x9,"alterRole");async function F9(e){let t=hR.dropRoleValidation(e);if(t)throw ha(new Error,t,Zu.BAD_REQUEST,void 0,void 0,!0);let r=new B9(qE.SYSTEM_SCHEMA_NAME,qE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await M9(r));if(n.length===0)throw ha(new Error,ov.ROLE_NOT_FOUND,Zu.NOT_FOUND,void 0,void 0,!0);let s=new v9(qE.SYSTEM_SCHEMA_NAME,qE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await pR(s)),o=!1;if(P9.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw ha(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Zu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await U9(c),mR.signalUserChange(new SR(process.pid)),`${n[0].role} successfully deleted`}a(F9,"dropRole");async function G9(){return pR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(G9,"listRoles")});var _v=g((URe,uv)=>{"use strict";var k9=J(),no=require("joi"),$9=tt(),cv=require("moment"),V9=require("fs-extra"),TR=require("path"),Y9=require("lodash"),e_=C(),{LOG_LEVELS:ma}=C(),K9="YYYY-MM-DD hh:mm:ss",W9=TR.resolve(__dirname,"../logs");uv.exports=function(e){return $9.validateBySchema(e,Q9)};var Q9=no.object({from:no.custom(lv),until:no.custom(lv),level:no.valid(ma.NOTIFY,ma.FATAL,ma.ERROR,ma.WARN,ma.INFO,ma.DEBUG,ma.TRACE),order:no.valid("asc","desc"),limit:no.number().min(1),start:no.number().min(0),log_name:no.custom(j9)});function lv(e,t){if(cv(e,cv.ISO_8601).format(K9)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(lv,"validateDatetime");function j9(e,t){if(Y9.invert(e_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=k9.get(e_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?e_.LOG_NAMES.HDB:e,i=s===e_.LOG_NAMES.INSTALL?TR.join(W9,e_.LOG_NAMES.INSTALL):TR.join(n,s);return V9.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(j9,"validateReadLogPath")});var RR=g((BRe,fv)=>{"use strict";var FE=C(),z9=G(),J9=J(),X9=_v(),gR=require("path"),dv=require("fs-extra"),{once:Z9}=require("events"),{handleHDBError:e7,hdb_errors:t7}=re(),{PACKAGE_ROOT:r7}=C(),n7=gR.join(r7,"logs"),s7=1e3,i7=200;fv.exports=o7;async function o7(e){let t=X9(e);if(t)throw e7(t,t.message,t7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=J9.get(FE.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?FE.LOG_NAMES.HDB:e.log_name,s=n===FE.LOG_NAMES.INSTALL?gR.join(n7,FE.LOG_NAMES.INSTALL):gR.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?s7:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!l&&!u&&(p=Math.max(dv.statSync(s).size-(h+5)*i7,0));let S=dv.createReadStream(s,{start:p});S.on("error",v=>{z9.error(v)});let O=0,T=[],R="",B;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 V=0,Y;for(;(Y=P.exec(v))&&!S.destroyed;){B&&(B.message=v.slice(V,Y.index),H(B));let[z,oe,Re]=Y,ce=Re.split("] ["),Ge=ce[0],Ee=ce[1];ce.splice(0,2),B={timestamp:oe,thread:Ge,level:Ee,tags:ce,message:""},V=Y.index+z.length}R=v.slice(V)}),S.on("end",v=>{S.destroyed||B&&(B.message=R.trim(),H(B))}),S.resume();function H(v){let P,V,Y;switch(!0){case(i&&c&&_):P=new Date(v.timestamp),V=new Date(l),Y=new Date(u),v.level===o&&P>=V&&P<=Y&&O<E?O++:v.level===o&&P>=V&&P<=Y&&(so(v,f,T),O++,O===h&&S.destroy());break;case(i&&c):P=new Date(v.timestamp),V=new Date(l),v.level===o&&P>=V&&O<E?O++:v.level===o&&P>=V&&(so(v,f,T),O++,O===h&&S.destroy());break;case(i&&_):P=new Date(v.timestamp),Y=new Date(u),v.level===o&&P<=Y&&O<E?O++:v.level===o&&P<=Y&&(so(v,f,T),O++,O===h&&S.destroy());break;case(c&&_):P=new Date(v.timestamp),V=new Date(l),Y=new Date(u),P>=V&&P<=Y&&O<E?O++:P>=V&&P<=Y&&(so(v,f,T),O++,O===h&&S.destroy());break;case i:v.level===o&&O<E?O++:v.level===o&&(so(v,f,T),O++,O===h&&S.destroy());break;case c:P=new Date(v.timestamp),V=new Date(l),P>=V&&O<E?O++:P>=V&&O>=E&&(so(v,f,T),O++,O===h&&S.destroy());break;case _:P=new Date(v.timestamp),Y=new Date(u),P<=Y&&O<E?O++:P<=Y&&O>=E&&(so(v,f,T),O++,O===h&&S.destroy());break;default:O<E?O++:(so(v,f,T),O++,O===h&&S.destroy())}}return a(H,"onLogMessage"),await Z9(S,"close"),T}a(o7,"readLog");function so(e,t,r){t==="desc"?a7(e,r):t==="asc"?c7(e,r):r.push(e)}a(so,"pushLineToResult");function a7(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(a7,"insertDescending");function c7(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(c7,"insertAscending")});var GE=g((GRe,pv)=>{"use strict";var AR=require("joi"),{string:t_,boolean:Ev,date:l7}=AR.types(),u7=tt(),{validateSchemaExists:qRe,validateTableExists:xRe,validateSchemaName:FRe}=As(),_7=C(),d7=Je(),hv=J();hv.initSync();var f7=t_.invalid(hv.get(_7.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(d7.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(),mv={operation:t_.valid("add_node","update_node","set_node_replication"),node_name:f7,subscriptions:AR.array().items({table:t_.optional(),schema:t_.optional(),database:t_.optional(),subscribe:Ev.required(),publish:Ev.required().custom(h7),start_time:l7.iso()}).min(1).required()};function E7(e){return u7.validateBySchema(e,AR.object(mv))}a(E7,"addUpdateNodeValidator");function h7(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(h7,"checkForFalsy");pv.exports={addUpdateNodeValidator:E7,validation_schema:mv}});var Tv=g(($Re,Sv)=>{var m7=tt(),p7={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Sv.exports=function(e){return m7.validateObject(e,p7)}});var kE=g((VRe,gv)=>{"use strict";var S7=C().OPERATIONS_ENUM,OR=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=S7.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};gv.exports=OR});var Av=g((KRe,Rv)=>{"use strict";var T7={OPERATION:"operation",REFRESH:"refresh"},NR=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},bR=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};Rv.exports={JWTTokens:NR,TOKEN_TYPE_ENUM:T7,JWTRSAKeys:bR}});var s_=g((QRe,yv)=>{"use strict";var n_=require("jsonwebtoken"),yR=require("fs-extra"),IR=W(),Dn=C(),{handleHDBError:yr,hdb_errors:g7}=re(),{HTTP_STATUS_CODES:Ir,AUTHENTICATION_ERROR_MSGS:wr}=g7,r_=G(),Ov=jf(),LR=Rr(),R7=Tr().update,A7=kE(),O7=si(),{UserEventMsg:N7}=zn(),io=J();io.initSync();var wR=require("path"),{JWTTokens:b7,JWTRSAKeys:y7,TOKEN_TYPE_ENUM:$E}=Av(),I7=io.get(Dn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?io.get(Dn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",w7=io.get(Dn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?io.get(Dn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",VE="RS256",CR;yv.exports={createTokens:C7,validateOperationToken:D7,refreshOperationToken:L7,validateRefreshToken:bv};async function C7(e){if(IR.isEmpty(e)||typeof e!="object")throw yr(new Error,wr.INVALID_AUTH_OBJECT,Ir.BAD_REQUEST,void 0,void 0,!0);if(IR.isEmpty(e.username))throw yr(new Error,wr.USERNAME_REQUIRED,Ir.BAD_REQUEST,void 0,void 0,!0);if(IR.isEmpty(e.password))throw yr(new Error,wr.PASSWORD_REQUIRED,Ir.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await LR.findAndValidateUser(e.username,e.password),!t)throw yr(new Error,wr.INVALID_CREDENTIALS,Ir.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw r_.error(f),yr(new Error,wr.INVALID_CREDENTIALS,Ir.UNAUTHORIZED,void 0,void 0,!0)}let r=await YE(),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 Nv(i,r.private_key,r.passphrase),c=await n_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:w7,algorithm:VE,subject:$E.REFRESH}),l=Ov.hash(c),_=new A7(Dn.SYSTEM_SCHEMA_NAME,Dn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await R7(_)}catch(f){r_.error(f),d=f}if(d!==void 0||u.skipped_hashes.length>0)throw yr(new Error,wr.REFRESH_TOKEN_SAVE_FAILED,Ir.INTERNAL_SERVER_ERROR);return O7.signalUserChange(new N7(process.pid)),new b7(o,c)}a(C7,"createTokens");async function Nv(e,t,r){return await n_.sign(e,{key:t,passphrase:r},{expiresIn:I7,algorithm:VE,subject:$E.OPERATION})}a(Nv,"signOperationToken");async function YE(){if(CR===void 0)try{let e=wR.join(io.getHdbBasePath(),Dn.LICENSE_KEY_DIR_NAME,Dn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=wR.join(io.getHdbBasePath(),Dn.LICENSE_KEY_DIR_NAME,Dn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=wR.join(io.getHdbBasePath(),Dn.LICENSE_KEY_DIR_NAME,Dn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await yR.readFile(e)).toString(),s=(await yR.readFile(t)).toString(),i=(await yR.readFile(r)).toString();CR=new y7(i,s,n)}catch(e){throw r_.error(e),yr(new Error,wr.NO_ENCRYPTION_KEYS,Ir.INTERNAL_SERVER_ERROR)}return CR}a(YE,"getJWTRSAKeys");async function L7(e){if(!e)throw yr(new Error,wr.INVALID_BODY,Ir.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw yr(new Error,wr.REFRESH_TOKEN_REQUIRED,Ir.BAD_REQUEST,void 0,void 0,!0);await bv(e.refresh_token);let t=await YE(),r=await n_.decode(e.refresh_token);return{operation_token:await Nv({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(L7,"refreshOperationToken");async function D7(e){try{let t=await YE(),r=await n_.verify(e,t.public_key,{algorithms:VE,subject:$E.OPERATION});return await LR.findAndValidateUser(r.username,void 0,!1)}catch(t){throw r_.warn(t),t.name&&t.name==="TokenExpiredError"?yr(new Error,wr.TOKEN_EXPIRED,Ir.FORBIDDEN):yr(new Error,wr.INVALID_TOKEN,Ir.UNAUTHORIZED)}}a(D7,"validateOperationToken");async function bv(e){let t;try{let r=await YE(),n=await n_.verify(e,r.public_key,{algorithms:VE,subject:$E.REFRESH});t=await LR.findAndValidateUser(n.username,void 0,!1)}catch(r){throw r_.warn(r),r.name&&r.name==="TokenExpiredError"?yr(new Error,wr.TOKEN_EXPIRED,Ir.FORBIDDEN):yr(new Error,wr.INVALID_TOKEN,Ir.UNAUTHORIZED)}if(!Ov.validate(t.refresh_token,e))throw yr(new Error,wr.INVALID_TOKEN,Ir.UNAUTHORIZED);return t}a(bv,"validateRefreshToken")});var DR=g((JRe,Cv)=>{"use strict";var P7=Tv(),Uc=require("passport"),M7=require("passport-local").Strategy,U7=require("passport-http").BasicStrategy,v7=require("util"),B7=Rr(),wv=v7.callbackify(B7.findAndValidateUser),zRe=Yr(),H7=C(),Iv=s_();Uc.use(new M7(function(e,t,r){wv(e,t,r)}));Uc.use(new U7(function(e,t,r){wv(e,t,r)}));Uc.serializeUser(function(e,t){t(null,e)});Uc.deserializeUser(function(e,t){t(null,e)});function q7(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":Uc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===H7.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Iv.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):Iv.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Uc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(q7,"authorize");function x7(e,t){let r=P7(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(x7,"checkPermissions");Cv.exports={authorize:q7,checkPermissions:x7}});var vc=g((ZRe,Lv)=>{"use strict";var PR=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},MR=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};Lv.exports={Node:PR,NodeSubscription:MR}});var Pv=g((tAe,Dv)=>{"use strict";var F7=C().OPERATIONS_ENUM,UR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=F7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Dv.exports=UR});var i_=g((nAe,Mv)=>{"use strict";var vR=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},BR=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)}};Mv.exports={RemotePayloadObject:vR,RemotePayloadSubscription:BR}});var vv=g((iAe,Uv)=>{"use strict";var HR=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}};Uv.exports=HR});var qv=g((uAe,Hv)=>{"use strict";var G7=vv(),aAe=ut(),Bv=$e(),k7=G(),{getSchemaPath:cAe,getTransactionAuditStorePath:lAe}=Qe(),{getDatabases:$7}=(Ne(),ne(xe));Hv.exports=V7;async function V7(e){let t=new G7;try{let r=$7()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await Bv.environmentDataSize(schema_path,e.name),o=await Bv.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){k7.warn(`unable to stat table dbi due to ${r}`)}return t}a(V7,"lmdbGetTableSize")});var Fv=g((dAe,xv)=>{"use strict";var qR=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}};xv.exports=qR});var _i=g((mAe,Vv)=>{"use strict";var Y7=require("fs-extra"),K7=require("path"),nr=require("systeminformation"),oo=G(),W7=Et(),xR=Je(),WE=C(),Q7=qv(),$v=Wi(),{getThreadInfo:Gv}=et(),jR=J();jR.initSync();var j7=Fv(),{openEnvironment:EAe}=$e(),{getSchemaPath:hAe}=Qe(),{database:z7}=(Ne(),ne(xe)),KE;Vv.exports={getHDBProcessInfo:$R,getNetworkInfo:YR,getDiskInfo:VR,getMemoryInfo:kR,getCPUInfo:GR,getTimeInfo:FR,getSystemInformation:KR,systemInformation:J7,getTableSize:WR,getMetrics:QR};function FR(){return nr.time()}a(FR,"getTimeInfo");async function GR(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:_,...u}=await nr.cpu();u.cpu_speed=await nr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:O,...T}=await nr.currentLoad();return T.cpus=[],O.forEach(R=>{let{raw_load:B,raw_load_idle:H,raw_load_irq:v,raw_load_nice:P,raw_load_system:V,raw_load_user:Y,...z}=R;T.cpus.push(z)}),u.current_load=T,u}catch(e){return oo.error(`error in getCPUInfo: ${e}`),{}}}a(GR,"getCPUInfo");async function kR(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await nr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return oo.error(`error in getMemoryInfo: ${e}`),{}}}a(kR,"getMemoryInfo");async function $R(){let e={core:[],clustering:[]};try{let t=await nr.processes(),r;try{r=Number.parseInt(await Y7.readFile(K7.join(jR.get(WE.CONFIG_PARAMS.ROOTPATH),WE.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===WE.NODE_ERROR_CODES.ENOENT)oo.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 oo.error(`error in getHDBProcessInfo: ${t}`),e}}a($R,"getHDBProcessInfo");async function VR(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await nr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,..._}=await nr.fsStats();return e.read_write=_,e.size=await nr.fsSize(),e}catch(t){return oo.error(`error in getDiskInfo: ${t}`),e}}a(VR,"getDiskInfo");async function YR(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await nr.networkInterfaceDefault(),e.latency=await nr.inetChecksite("google.com"),(await nr.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 nr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return oo.error(`error in getNetworkInfo: ${t}`),e}}a(YR,"getNetworkInfo");async function KR(){if(KE!==void 0)return KE;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await nr.osInfo();e=c;let l=await nr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,KE=e,KE}catch(t){return oo.error(`error in getSystemInformation: ${t}`),e}}a(KR,"getSystemInformation");async function WR(){let e=[],t=await $v.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Q7(n));return e}a(WR,"getTableSize");async function QR(){let e=await $v.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=z7({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){oo.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(QR,"getMetrics");async function kv(){if(jR.get(WE.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await W7.getNATSReferences(),r=await t.streams.info(xR.WORK_QUEUE_CONSUMER_NAMES.stream_name),n=await e.consumers.get(xR.WORK_QUEUE_CONSUMER_NAMES.stream_name,xR.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(kv,"getNatsStreamInfo");async function J7(e){let t=new j7;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await KR(),t.time=FR(),t.cpu=await GR(),t.memory=await kR(),t.disk=await VR(),t.network=await YR(),t.harperdb_processes=await $R(),t.table_size=await WR(),t.metrics=await QR(),t.threads=await Gv(),t.replication=await kv(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await KR();break;case"time":t.time=FR();break;case"cpu":t.cpu=await GR();break;case"memory":t.memory=await kR();break;case"disk":t.disk=await VR();break;case"network":t.network=await YR();break;case"harperdb_processes":t.harperdb_processes=await $R();break;case"table_size":t.table_size=await WR();break;case"database_metrics":case"metrics":t.metrics=await QR();break;case"threads":t.threads=await Gv();break;case"replication":t.replication=await kv();break;default:break}return t}a(J7,"systemInformation")});var di=g((gAe,Qv)=>{"use strict";var X7=Tr(),zR=W(),Z7=require("util"),pa=C(),Yv=J();Yv.initSync();var eee=DR(),Kv=Sr(),{Node:SAe,NodeSubscription:TAe}=vc(),tee=Ec(),ree=Pv(),{RemotePayloadObject:nee,RemotePayloadSubscription:see}=i_(),{handleHDBError:iee,hdb_errors:oee}=re(),{HTTP_STATUS_CODES:aee,HDB_ERROR_MSGS:cee}=oee,lee=Jn(),uee=_i(),_ee=xi(),{getDatabases:dee}=(Ne(),ne(xe)),fee=Z7.promisify(eee.authorize),Eee=Kv.searchByHash,hee=Kv.searchByValue;Qv.exports={authHeaderToUser:mee,isEmpty:pee,getNodeRecord:See,upsertNodeRecord:Tee,buildNodePayloads:gee,checkClusteringEnabled:Ree,getAllNodeRecords:Aee,getSystemInfo:Oee,reverseSubscription:Wv};async function mee(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await fee(t,null),e}a(mee,"authHeaderToUser");function pee(e){return e==null}a(pee,"isEmpty");async function See(e){let t=new tee(pa.SYSTEM_SCHEMA_NAME,pa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Eee(t)}a(See,"getNodeRecord");async function Tee(e){let t=new ree(pa.SYSTEM_SCHEMA_NAME,pa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return X7.upsert(t)}a(Tee,"upsertNodeRecord");function Wv(e){if(zR.isEmpty(e.subscribe)||zR.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(Wv,"reverseSubscription");function gee(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=zR.getTableHashAttribute(l,_),{subscribe:d,publish:f}=Wv(c),E=dee()[l]?.[_],h=new see(l,_,u,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new nee(r,t,s,n)}a(gee,"buildNodePayloads");function Ree(){if(!Yv.get(pa.CONFIG_PARAMS.CLUSTERING_ENABLED))throw iee(new Error,cee.CLUSTERING_NOT_ENABLED,aee.BAD_REQUEST,void 0,void 0,!0)}a(Ree,"checkClusteringEnabled");async function Aee(){let e=new lee(pa.SYSTEM_SCHEMA_NAME,pa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await hee(e))}a(Aee,"getAllNodeRecords");async function Oee(){let e=await uee.getSystemInformation();return{hdb_version:_ee.version(),node_version:e.node_version,platform:e.platform}}a(Oee,"getSystemInfo")});var JR=g((AAe,r0)=>{"use strict";var QE=Et(),jv=W(),zv=Je(),Jv=C(),jE=G(),Xv=vE(),Nee=Eu(),{RemotePayloadObject:bee}=i_(),{handleHDBError:Zv,hdb_errors:yee}=re(),{HTTP_STATUS_CODES:e0}=yee,{NodeSubscription:t0}=vc();r0.exports=Iee;async function Iee(e,t){let r;try{r=await QE.request(`${t}.${zv.REQUEST_SUFFIX}`,new bee(Jv.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),jE.trace("Response from remote describe all request:",r)}catch(o){jE.error(`addNode received error from describe all request to remote node: ${o}`);let c=QE.requestErrorHandler(o,"add_node",t);throw Zv(new Error,c,e0.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===zv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw Zv(new Error,o,e0.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===Jv.SYSTEM_SCHEMA_NAME){await QE.createLocalTableStream(l,c);let h=new t0(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=jv.doesSchemaExist(l),u=n[l]!==void 0,d=c?jv.doesTableExist(l,c):!0,f=c?n?.[l]?.[c]!==void 0:!0;if(!_&&!u||!d&&!f){s.push(o);continue}if(!_&&u&&(jE.trace(`addNode creating schema: ${l}`),await Xv.createSchema({operation:"create_schema",schema:l})),!d&&f){jE.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Nee(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await Xv.createTable(h)}await QE.createLocalTableStream(l,c);let E=new t0(l,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(Iee,"reviewSubscriptions")});var c_=g((NAe,i0)=>{"use strict";var{handleHDBError:zE,hdb_errors:wee}=re(),{HTTP_STATUS_CODES:JE}=wee,{addUpdateNodeValidator:Cee}=GE(),o_=G(),s0=C(),n0=Je(),Lee=W(),XR=Et(),a_=di(),Dee=J(),Pee=JR(),{Node:Mee,NodeSubscription:Uee}=vc(),{broadcast:vee}=et(),Bee="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Hee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",qee=Dee.get(s0.CONFIG_PARAMS.CLUSTERING_NODENAME);i0.exports=xee;async function xee(e,t=!1){o_.trace("addNode called with:",e),a_.checkClusteringEnabled();let r=Cee(e);if(r)throw zE(r,r.message,JE.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await a_.getNodeRecord(n);if(!Lee.isEmptyOrZeroLength(d))throw zE(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,JE.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Pee(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Bee,o;let c=a_.buildNodePayloads(s,qee,s0.OPERATIONS_ENUM.ADD_NODE,await a_.getSystemInfo());o_.trace("addNode sending remote payload:",c);let l;try{l=await XR.request(`${n}.${n0.REQUEST_SUFFIX}`,c)}catch(d){o_.error(`addNode received error from request: ${d}`);let f=XR.requestErrorHandler(d,"add_node",n);throw zE(new Error,f,JE.INTERNAL_SERVER_ERROR,"error",f)}if(l.status===n0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${l.message}`;throw zE(new Error,d,JE.INTERNAL_SERVER_ERROR,"error",d)}o_.trace(l);let _=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];o_.trace("Add node updating work stream for node:",n,"subscriptions:",E),await XR.updateWorkStream(E,n),s[d].start_time===void 0&&delete s[d].start_time,_.push(new Uee(E.schema,E.table,E.publish,E.subscribe))}let u=new Mee(n,_,l.system_info);return await a_.upsertNodeRecord(u),vee({type:"nats_update"}),i.length>0?o.message=Hee:o.message=`Successfully added '${n}' to manifest`,o}a(xee,"addNode")});var rA=g((IAe,c0)=>{"use strict";var{handleHDBError:ZR,hdb_errors:Fee}=re(),{HTTP_STATUS_CODES:eA}=Fee,{addUpdateNodeValidator:Gee}=GE(),l_=G(),a0=C(),o0=Je(),yAe=W(),tA=Et(),u_=di(),kee=J(),{cloneDeep:$ee}=require("lodash"),Vee=JR(),{Node:Yee,NodeSubscription:Kee}=vc(),{broadcast:Wee}=et(),Qee="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",jee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",zee=kee.get(a0.CONFIG_PARAMS.CLUSTERING_NODENAME);c0.exports=Jee;async function Jee(e){l_.trace("updateNode called with:",e),u_.checkClusteringEnabled();let t=Gee(e);if(t)throw ZR(t,t.message,eA.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await u_.getNodeRecord(r);s.length>0&&(n=$ee(s));let{added:i,skipped:o}=await Vee(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Qee,c;let l=u_.buildNodePayloads(i,zee,a0.OPERATIONS_ENUM.UPDATE_NODE,await u_.getSystemInfo());l_.trace("updateNode sending remote payload:",l);let _;try{_=await tA.request(`${r}.${o0.REQUEST_SUFFIX}`,l)}catch(u){l_.error(`updateNode received error from request: ${u}`);let d=tA.requestErrorHandler(u,"update_node",r);throw ZR(new Error,d,eA.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===o0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw ZR(new Error,u,eA.INTERNAL_SERVER_ERROR,"error",u)}l_.trace(_);for(let u=0,d=i.length;u<d;u++){let f=i[u];l_.trace(`updateNode updating work stream for node: ${r} subscription:`,f),await tA.updateWorkStream(f,r),i[u].start_time===void 0&&delete i[u].start_time}return n||(n=[new Yee(r,[],_.system_info)]),await Xee(n[0],i,_.system_info),o.length>0?c.message=jee:c.message=`Successfully updated '${r}'`,c}a(Jee,"updateNode");async function Xee(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 Kee(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await u_.upsertNodeRecord(n),Wee({type:"nats_update"})}a(Xee,"updateNodeTable")});var f0=g((CAe,d0)=>{"use strict";var _0=require("joi"),{string:l0}=_0.types(),Zee=tt(),u0=C(),ete=J(),tte=Je();d0.exports=rte;function rte(e){let t=l0.invalid(ete.get(u0.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(tte.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=_0.object({operation:l0.valid(u0.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Zee.validateBySchema(e,r)}a(rte,"removeNodeValidator")});var ZE=g((DAe,T0)=>{"use strict";var{handleHDBError:E0,hdb_errors:nte}=re(),{HTTP_STATUS_CODES:h0}=nte,ste=f0(),__=G(),m0=di(),ite=W(),XE=C(),p0=Je(),S0=Et(),ote=J(),{RemotePayloadObject:ate}=i_(),{NodeSubscription:cte}=vc(),lte=fu(),ute=Xo(),{broadcast:_te}=et(),dte=ote.get(XE.CONFIG_PARAMS.CLUSTERING_NODENAME);T0.exports=fte;async function fte(e){__.trace("removeNode called with:",e),m0.checkClusteringEnabled();let t=ste(e);if(t)throw E0(t,t.message,h0.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await m0.getNodeRecord(r);if(ite.isEmptyOrZeroLength(n))throw E0(new Error,`Node '${r}' was not found.`,h0.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new ate(XE.OPERATIONS_ENUM.REMOVE_NODE,dte,[]),i,o=!1;try{i=await S0.request(`${r}.${p0.REQUEST_SUFFIX}`,s),__.trace("Remove node reply from remote node:",r,i)}catch(l){__.error("removeNode received error from request:",l),o=!0}for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];__.trace(`Remove node removing subscription: ${u.schema}.${u.table} for node: ${r}`);let d=new cte(u.schema,u.table,!1,!1);await S0.updateWorkStream(d,r)}let c=new lte(XE.SYSTEM_SCHEMA_NAME,XE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await ute.deleteRecord(c),_te({type:"nats_update"}),i?.status===p0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(__.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(fte,"removeNode")});var A0=g((MAe,R0)=>{"use strict";var g0=require("joi"),{string:Ete,array:hte}=g0.types(),mte=tt(),pte=GE();R0.exports=Ste;function Ste(e){let t=g0.object({operation:Ete.valid("configure_cluster").required(),connections:hte.items(pte.validation_schema).required()});return mte.validateBySchema(e,t)}a(Ste,"configureClusterValidator")});var th=g((vAe,I0)=>{"use strict";var Tte=C(),eh=G(),gte=W(),Rte=ZE(),Ate=c_(),O0=di(),Ote=A0(),{handleHDBError:N0,hdb_errors:Nte}=re(),{HTTP_STATUS_CODES:b0}=Nte,bte="Configure cluster complete.",yte="Failed to configure the cluster. Check the logs for more details.",Ite="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";I0.exports=wte;async function wte(e){eh.trace("configure cluster called with:",e),O0.checkClusteringEnabled();let t=Ote(e);if(t)throw N0(t,t.message,b0.BAD_REQUEST,void 0,void 0,!0);let r=await O0.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(y0(Rte,{operation:Tte.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);eh.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(y0(Ate,E,E.node_name))}let c=await Promise.allSettled(i);eh.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"&&(eh.error(h.reason),l.includes(h.reason.node_name)||l.push(h.reason.node_name)),h.status==="fulfilled"&&(u=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(gte.isEmptyOrZeroLength(l))return{message:bte,connections:_};if(u)return{message:Ite,failed_nodes:l,connections:_};throw N0(new Error,yte,b0.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(wte,"configureCluster");async function y0(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(y0,"functionWrapper")});var C0=g((HAe,w0)=>{"use strict";var rh=require("joi"),Cte=tt(),{validateSchemaExists:Lte,validateTableExists:Dte,validateSchemaName:Pte}=As(),Mte=rh.object({operation:rh.string().valid("purge_stream"),schema:rh.string().custom(Lte).custom(Pte).required(),table:rh.string().custom(Dte).required()});function Ute(e){return Cte.validateBySchema(e,Mte)}a(Ute,"purgeStreamValidator");w0.exports=Ute});var nA=g((xAe,L0)=>{"use strict";var{handleHDBError:vte,hdb_errors:Bte}=re(),{HTTP_STATUS_CODES:Hte}=Bte,qte=C0(),xte=Et(),Fte=di();L0.exports=Gte;async function Gte(e){if(e.purge_ingest!==!0){let s=qte(e);if(s)throw vte(s,s.message,Hte.BAD_REQUEST,void 0,void 0,!0)}Fte.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await xte.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(Gte,"purgeStream")});var sh=g((GAe,B0)=>{"use strict";var iA=di(),kte=Et(),M0=J(),nh=C(),Sa=Je(),$te=W(),sA=G(),{RemotePayloadObject:Vte}=i_(),{ErrorCode:D0}=require("nats"),P0=M0.get(nh.CONFIG_PARAMS.CLUSTERING_ENABLED),U0=M0.get(nh.CONFIG_PARAMS.CLUSTERING_NODENAME);B0.exports={clusterStatus:Yte,buildNodeStatus:v0};async function Yte(){let e={node_name:U0,is_enabled:P0,connections:[]};if(!P0)return e;let t=await iA.getAllNodeRecords();if($te.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(v0(t[n],e.connections));return await Promise.allSettled(r),e}a(Yte,"clusterStatus");async function v0(e,t){let r=e.name,n=new Vte(nh.OPERATIONS_ENUM.CLUSTER_STATUS,U0,void 0,await iA.getSystemInfo()),s,i,o=Sa.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await kte.request(Sa.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Sa.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Sa.CLUSTER_STATUS_STATUSES.CLOSED,sA.error(`Error getting node status from ${r} `,s))}catch(l){sA.warn(`Error getting node status from ${r}`,l),l.code===D0.NoResponders?o=Sa.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===D0.Timeout?o=Sa.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Sa.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Kte(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==nh.PRE_4_0_0_VERSION&&await iA.upsertNodeRecord(l)}catch(l){sA.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(v0,"buildNodeStatus");function Kte(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(Kte,"NodeStatusObject")});var oh=g(($Ae,H0)=>{"use strict";var{handleHDBError:Wte,hdb_errors:Qte}=re(),{HTTP_STATUS_CODES:jte}=Qte,zte=Et(),Jte=di(),oA=W(),ih=require("joi"),Xte=tt(),Zte=2e3,ere=ih.object({timeout:ih.number().min(1),connected_nodes:ih.boolean(),routes:ih.boolean()});H0.exports=tre;async function tre(e){Jte.checkClusteringEnabled();let t=Xte.validateBySchema(e,ere);if(t)throw Wte(t,t.message,jte.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||oA.autoCastBoolean(n),o=s===void 0||oA.autoCastBoolean(s),c={nodes:[]},l=await zte.getServerList(r??Zte),_={};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(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:oA.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(tre,"clusterNetwork")});var G0=g((YAe,F0)=>{"use strict";var aA=require("joi"),q0=tt(),{route_constraints:x0}=sg();F0.exports={setRoutesValidator:rre,deleteRoutesValidator:nre};function rre(e){let t=aA.object({server:aA.valid("hub","leaf").required(),routes:x0.required()});return q0.validateBySchema(e,t)}a(rre,"setRoutesValidator");function nre(e){let t=aA.object({routes:x0.required()});return q0.validateBySchema(e,t)}a(nre,"deleteRoutesValidator")});var ch=g((WAe,Y0)=>{"use strict";var Ta=ft(),cA=W(),ah=C(),k0=G0(),{handleHDBError:$0,hdb_errors:sre}=re(),{HTTP_STATUS_CODES:V0}=sre,ire="cluster routes successfully set",ore="cluster routes successfully deleted";Y0.exports={setRoutes:are,getRoutes:cre,deleteRoutes:lre};function are(e){let t=k0.setRoutesValidator(e);if(t)throw $0(t,t.message,V0.BAD_REQUEST,void 0,void 0,!0);let r=Ta.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=cA.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"?Ta.updateConfigValue(ah.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):Ta.updateConfigValue(ah.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:ire,set:o,skipped:i}}a(are,"setRoutes");function cre(){let e=Ta.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(cre,"getRoutes");function lre(e){let t=k0.deleteRoutesValidator(e);if(t)throw $0(t,t.message,V0.BAD_REQUEST,void 0,void 0,!0);let r=Ta.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 p=n[E];if(d.host===p.host&&d.port===p.port){n.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=s.length;h<p;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=cA.isEmptyOrZeroLength(n)?null:n,Ta.updateConfigValue(ah.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=cA.isEmptyOrZeroLength(s)?null:s,Ta.updateConfigValue(ah.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:ore,deleted:i,skipped:o}}a(lre,"deleteRoutes")});var W0=g((jAe,K0)=>{"use strict";var d_=require("alasql"),ga=require("recursive-iterator"),is=G(),ure=W(),f_=C(),lA=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,dre(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=>f_.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=>!f_.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][f_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=_re(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(_=>!f_.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new d_.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 _re(e){return e.filter(t=>t[f_.PERMS_CRUD_ENUM.READ])}a(_re,"filterReadRestrictedAttrs");function dre(e,t,r,n,s){fre(e,t,r,n,s)}a(dre,"interpretAST");function E_(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(E_,"addSchemaTableToMap");function fre(e,t,r,n,s){if(!e){is.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof d_.yy.Insert?pre(e,t,r):e instanceof d_.yy.Select?Ere(e,t,r,n,s):e instanceof d_.yy.Update?hre(e,t,r):e instanceof d_.yy.Delete?mre(e,t,r):is.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(fre,"getRecordAttributesAST");function Ere(e,t,r,n,s){if(!e){is.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(ure.isEmptyOrZeroLength(i)){is.error("No schema specified");return}e.from.forEach(c=>{E_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),E_(c.table,t,r,n,s)});let o=new ga(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{is.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 ga(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{is.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 ga(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{is.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 ga(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{is.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(l.columnid)<0&&t.get(u).get(_).push(l.columnid)}}}a(Ere,"getSelectAttributes");function hre(e,t,r){if(!e){is.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new ga(e.columns),s=e.table.databaseid;E_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&uA(e.table.tableid,s,i.columnid,t,r)}a(hre,"getUpdateAttributes");function mre(e,t,r){if(!e){is.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new ga(e.where),s=e.table.databaseid;E_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&uA(e.table.tableid,s,i.columnid,t,r)}a(mre,"getDeleteAttributes");function pre(e,t,r){if(!e){is.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new ga(e.columns),s=e.into.databaseid;E_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&uA(e.into.tableid,s,i.columnid,t,r)}a(pre,"getInsertAttributes");function uA(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(uA,"pushAttribute");K0.exports=lA});var uh=g((JAe,J0)=>{var lh=ra(),Q0=require("chalk"),_n=G(),j0=require("prompt"),{promisify:Sre}=require("util"),_A=C(),Tre=require("fs-extra"),gre=require("path"),Rre=W(),Are=xi(),z0=J();z0.initSync();var Ore=require("moment"),Nre=Sre(j0.get),bre=gre.join(z0.getHdbBasePath(),_A.LICENSE_KEY_DIR_NAME,_A.LICENSE_FILE_NAME,_A.LICENSE_FILE_NAME);J0.exports={getFingerprint:Ire,setLicense:yre,parseLicense:dA,register:wre,getRegistrationInfo:Lre};async function yre(e){if(e&&e.key&&e.company){try{_n.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await dA(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw _n.error(r),_n.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(yre,"setLicense");async function Ire(){let e={};try{e=await lh.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw _n.error(r),_n.error(t),new Error(r)}return e}a(Ire,"getFingerprint");async function dA(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");_n.info("Validating license input...");let r=lh.validateLicense(e,t);if(_n.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(_n.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(_n.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{_n.info("writing license to disk"),await Tre.writeFile(bre,JSON.stringify({license_key:e,company:t}))}catch(n){throw _n.error("Failed to write License"),n}return"Registration successful."}a(dA,"parseLicense");async function wre(){let e=await Cre();return dA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(wre,"register");async function Cre(){let e=await lh.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:Q0.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:Q0.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{j0.start()}catch(n){_n.error(n)}let r;try{r=await Nre(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(Cre,"promptForRegistration");async function Lre(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await lh.getLicense()}catch(r){throw _n.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Rre.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Are.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Ore.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Lre,"getRegistrationInfo")});var Z0=g((ZAe,X0)=>{"use strict";var Dre=Je(),fA=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+Dre.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"}};X0.exports=fA});var rB=g((tOe,tB)=>{"use strict";var eB=Je(),EA=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+eB.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+eB.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"}};tB.exports=EA});var sB=g((nOe,nB)=>{"use strict";var hA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};nB.exports=hA});var oB=g((iOe,iB)=>{"use strict";var Pre=Je(),mA=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Pre.SERVER_SUFFIX.ADMIN,this.password=r}};iB.exports=mA});var hh=g((aOe,lB)=>{"use strict";var Bc=require("path"),fh=require("fs-extra"),Mre=Z0(),Ure=rB(),vre=sB(),Bre=oB(),pA=Rr(),qc=W(),Cr=ft(),dh=C(),h_=Je(),{CONFIG_PARAMS:mt}=dh,m_=G(),p_=J(),aB=ci(),SA=Et(),Hc="clustering",Hre=1e4,cB=5;lB.exports={generateNatsConfig:xre,removeNatsConfig:Fre,getHubConfigPath:qre};function qre(){let e=p_.get(mt.ROOTPATH);return Bc.join(e,Hc,h_.NATS_CONFIG_FILES.HUB_SERVER)}a(qre,"getHubConfigPath");async function xre(e=!1,t=void 0){p_.initSync();let r=p_.get(mt.ROOTPATH),n=Bc.join(r,Hc,h_.PID_FILES.HUB),s=Bc.join(r,Hc,h_.PID_FILES.LEAF),i=Cr.getConfigFromFile(mt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Bc.join(r,Hc,h_.NATS_CONFIG_FILES.HUB_SERVER),c=Bc.join(r,Hc,h_.NATS_CONFIG_FILES.LEAF_SERVER),l=Cr.getConfigFromFile(mt.CLUSTERING_TLS_CERTIFICATE),_=Cr.getConfigFromFile(mt.CLUSTERING_TLS_PRIVATEKEY),u=Cr.getConfigFromFile(mt.CLUSTERING_TLS_CERT_AUTH),d=Cr.getConfigFromFile(mt.CLUSTERING_TLS_INSECURE),f=Cr.getConfigFromFile(mt.CLUSTERING_TLS_VERIFY),E=Cr.getConfigFromFile(mt.CLUSTERING_NODENAME),h=Cr.getConfigFromFile(mt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await SA.checkNATSServerInstalled()||Eh("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await pA.listUsers(),S=Cr.getConfigFromFile(mt.CLUSTERING_USER),O=await pA.getClusterUser();(qc.isEmpty(O)||O.active!==!0)&&Eh(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await _h(mt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await _h(mt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await _h(mt.CLUSTERING_HUBSERVER_NETWORK_PORT),await _h(mt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let T=[],R=[];for(let[z,oe]of p.entries())oe.role.role===dh.ROLE_TYPES_ENUM.CLUSTER_USER&&oe.active&&(T.push(new Bre(oe.username,aB.decrypt(oe.hash))),R.push(new vre(oe.username,aB.decrypt(oe.hash))));let B=[],{hub_routes:H}=Cr.getClusteringRoutes();if(!qc.isEmptyOrZeroLength(H))for(let z of H)B.push(`tls://${O.sys_name_encoded}:${O.uri_encoded_d_hash}@${z.host}:${z.port}`);let v=new Mre(Cr.getConfigFromFile(mt.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,l,_,u,d,f,h,Cr.getConfigFromFile(mt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Cr.getConfigFromFile(mt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),B,T,R);u==null&&(delete v.tls.ca_file,delete v.leafnodes.tls.ca_file),t=qc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===dh.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await fh.writeJson(o,v),m_.trace(`Hub server config written to ${o}`));let P=`tls://${O.sys_name_encoded}:${O.uri_encoded_d_hash}@0.0.0.0:${h}`,V=`tls://${O.uri_encoded_name}:${O.uri_encoded_d_hash}@0.0.0.0:${h}`,Y=new Ure(Cr.getConfigFromFile(mt.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[P],[V],T,R,l,_,u,d);u==null&&delete Y.tls.ca_file,(t===void 0||t===dh.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await fh.writeJson(c,Y),m_.trace(`Leaf server config written to ${c}`))}a(xre,"generateNatsConfig");async function _h(e){let t=p_.get(e);return qc.isEmpty(t)&&Eh(`port undefined for '${e}'`),await qc.isPortTaken(t)&&Eh(`'${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(_h,"isPortAvailable");function Eh(e){let t=`Error generating clustering config: ${e}`;m_.error(t),console.error(t),process.exit(1)}a(Eh,"generateNatsConfigError");async function Fre(e){let{port:t,config_file:r}=SA.getServerConfig(e),{username:n,decrypt_hash:s}=await pA.getClusterUser(),i=0,o=2e3;for(;i<cB;){try{let _=await SA.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){m_.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=cB)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 qc.async_set_timeout(o*(i*2))}let c="0".repeat(Hre),l=Bc.join(p_.get(mt.ROOTPATH),Hc,r);await fh.writeFile(l,c),await fh.remove(l),m_.notify(e,"started.")}a(Fre,"removeNatsConfig")});var hB=g((lOe,EB)=>{"use strict";var dn=J(),Gre=ra(),ge=C(),S_=Je(),fi=require("path"),{PACKAGE_ROOT:ph}=C(),uB=J(),mh=W(),xc="/dev/null",kre=fi.join(ph,"launchServiceScripts"),_B=fi.join(ph,"utility/scripts"),$re=fi.join(_B,ge.HDB_RESTART_SCRIPT),dB=fi.resolve(ph,"dependencies",`${process.platform}-${process.arch}`,S_.NATS_BINARY_NAME);function fB(){let t=Gre.licenseSearch().ram_allocation||ge.RAM_ALLOCATION_ENUM.DEFAULT,r=ge.MEM_SETTING_KEY+t,n={[ge.PROCESS_NAME_ENV_PROP]:ge.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return mh.noBootFile()&&(n[ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=mh.getEnvCliRootPath()),{name:ge.PROCESS_DESCRIPTORS.HDB,script:ge.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:ph}}a(fB,"generateMainServerConfig");var Vre=9930;function Yre(){dn.initSync(!0);let e=dn.get(ge.CONFIG_PARAMS.ROOTPATH),t=fi.join(e,"clustering",S_.NATS_CONFIG_FILES.HUB_SERVER),r=fi.join(dn.get(ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ge.LOG_NAMES.HDB),n=uB.get(ge.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=S_.LOG_LEVEL_FLAGS[dn.get(ge.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ge.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Vre?"-"+n:""),script:dB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ge.PROCESS_NAME_ENV_PROP]:ge.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return dn.get(ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=xc,i.error_file=xc),i}a(Yre,"generateNatsHubServerConfig");var Kre=9940;function Wre(){dn.initSync(!0);let e=dn.get(ge.CONFIG_PARAMS.ROOTPATH),t=fi.join(e,"clustering",S_.NATS_CONFIG_FILES.LEAF_SERVER),r=fi.join(dn.get(ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ge.LOG_NAMES.HDB),n=uB.get(ge.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=S_.LOG_LEVEL_FLAGS[dn.get(ge.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Kre?"-"+n:""),script:dB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ge.PROCESS_NAME_ENV_PROP]:ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return dn.get(ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=xc,i.error_file=xc),i}a(Wre,"generateNatsLeafServerConfig");function Qre(){dn.initSync();let e=fi.join(dn.get(ge.CONFIG_PARAMS.LOGGING_ROOT),ge.LOG_NAMES.HDB),t={name:ge.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ge.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ge.PROCESS_NAME_ENV_PROP]:ge.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:kre,autorestart:!1};return dn.get(ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=xc,t.error_file=xc),t}a(Qre,"generateClusteringUpgradeV4ServiceConfig");function jre(){let e={[ge.PROCESS_NAME_ENV_PROP]:ge.PROCESS_DESCRIPTORS.RESTART_HDB};return mh.noBootFile()&&(e[ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=mh.getEnvCliRootPath()),{...{name:ge.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:_B},script:$re}}a(jre,"generateRestart");function zre(){return{apps:[fB()]}}a(zre,"generateAllServiceConfigs");EB.exports={generateAllServiceConfigs:zre,generateMainServerConfig:fB,generateRestart:jre,generateNatsHubServerConfig:Yre,generateNatsLeafServerConfig:Wre,generateClusteringUpgradeV4ServiceConfig:Qre}});var Fc=g((dOe,wB)=>{"use strict";var ve=C(),Jre=W(),Ei=hh(),T_=Et(),Ds=Je(),ao=hB(),Sh=J(),co=G(),Xre=di(),{startWorker:mB,onMessageFromWorkers:Zre}=et(),ene=_i(),_Oe=require("util"),tne=require("child_process"),rne=require("fs"),{execFile:nne}=tne,Ce;wB.exports={enterPM2Mode:sne,start:lo,stop:TA,reload:SB,restart:TB,list:gA,describe:RB,connect:hi,kill:lne,startAllServices:une,startService:RA,getUniqueServicesList:AB,restartAllServices:_ne,isServiceRegistered:OB,reloadStopStart:NB,restartHdb:gB,deleteProcess:ane,startClusteringProcesses:yB,startClusteringThreads:IB,isHdbRestartRunning:cne,isClusteringRunning:fne,stopClustering:dne,reloadClustering:Ene};var g_=!1;Zre(e=>{e.type==="restart"&&Sh.initSync(!0)});function sne(){g_=!0}a(sne,"enterPM2Mode");function hi(){return Ce||(Ce=require("pm2")),new Promise((e,t)=>{Ce.connect((r,n)=>{co.setupConsoleLogging(),r&&t(r),e(n)})})}a(hi,"connect");var Lr,ine=10,pB;function lo(e,t=!1){if(g_)return one(e);let r=nne(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Lr.indexOf(r);o>-1&&Lr.splice(o,1),!pB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<ine&&(rne.existsSync(Ei.getHubConfigPath())?lo(e):(await Ei.generateNatsConfig(!0),lo(e),await new Promise(c=>setTimeout(c,3e3)),await Ei.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ei.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Sh.get(ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,_=0,u;for(;l=c.exec(i);){if(l.index&&Ds.LOG_LEVEL_HIERARCHY[o]>=Ds.LOG_LEVEL_HIERARCHY[u||"info"]){let E=u===Ds.LOG_LEVELS.ERR||u===Ds.LOG_LEVELS.WRN?co.OUTPUTS.STDERR:co.OUTPUTS.STDOUT;co.logCustomLevel(u||"info",E,n,i.slice(_,l.index).trim())}let[d,f]=l;_=l.index+d.length,u=Ds.LOG_LEVELS[f]}if(Ds.LOG_LEVEL_HIERARCHY[o]>=Ds.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===Ds.LOG_LEVELS.ERR||u===Ds.LOG_LEVELS.WRN?co.OUTPUTS.STDERR:co.OUTPUTS.STDOUT;co.logCustomLevel(u||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),Lr=[],!Lr&&!t){let i=a(()=>{pB=!0,Lr&&(Lr.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)}Lr.push(r)}a(lo,"start");function one(e){return new Promise(async(t,r)=>{try{await hi()}catch(n){r(n)}Ce.start(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(one,"startWithPM2");function TA(e){if(!g_){for(let t of Lr||[])t.name===e&&(Lr.splice(Lr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await hi()}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(TA,"stop");function SB(e){return new Promise(async(t,r)=>{try{await hi()}catch(n){r(n)}Ce.reload(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(SB,"reload");function TB(e){if(!g_)for(let t of Lr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await hi()}catch(n){r(n)}Ce.restart(e,(n,s)=>{Ce.disconnect(),t(s)})})}a(TB,"restart");function ane(e){return new Promise(async(t,r)=>{try{await hi()}catch(n){r(n)}Ce.delete(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(ane,"deleteProcess");async function gB(){await lo(ao.generateRestart())}a(gB,"restartHdb");async function cne(){let e=await gA();for(let t in e)if(e[t].name===ve.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(cne,"isHdbRestartRunning");function gA(){return new Promise(async(e,t)=>{try{await hi()}catch(r){t(r)}Ce.list((r,n)=>{r&&(Ce.disconnect(),t(r)),Ce.disconnect(),e(n)})})}a(gA,"list");function RB(e){return new Promise(async(t,r)=>{try{await hi()}catch(n){r(n)}Ce.describe(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(RB,"describe");function lne(){if(!g_){for(let e of Lr||[])e.kill();Lr=[];return}return new Promise(async(e,t)=>{try{await hi()}catch(r){t(r)}Ce.killDaemon((r,n)=>{r&&(Ce.disconnect(),t(r)),Ce.disconnect(),e(n)})})}a(lne,"kill");async function une(){try{await yB(),await IB(),await lo(ao.generateAllServiceConfigs())}catch(e){throw Ce?.disconnect(),e}}a(une,"startAllServices");async function RA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ve.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=ao.generateMainServerConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=ao.generateNatsIngestServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=ao.generateNatsReplyServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=ao.generateNatsHubServerConfig(),await lo(r,t),await Ei.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=ao.generateNatsLeafServerConfig(),await lo(r,t),await Ei.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=ao.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await lo(r)}catch(r){throw Ce?.disconnect(),r}}a(RA,"startService");async function AB(){try{let e=await gA(),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(AB,"getUniqueServicesList");async function _ne(e=[]){try{let t=!1,r=await AB();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===ve.PROCESS_DESCRIPTORS.HDB?t=!0:await TB(o))}t&&await NB(ve.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ce?.disconnect(),t}}a(_ne,"restartAllServices");async function OB(e){if(Lr?.find(r=>r.name===e))return!0;let t=await ene.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(OB,"isServiceRegistered");async function NB(e){let t=e===ve.PROCESS_DESCRIPTORS.HDB?Sh.get(ve.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):Sh.get(ve.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await RB(e),n=Jre.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await TA(e),await RA(e)):e===ve.PROCESS_DESCRIPTORS.HDB?await gB():await SB(e)}a(NB,"reloadStopStart");var bB;async function yB(e=!1){for(let t in ve.CLUSTERING_PROCESSES){let r=ve.CLUSTERING_PROCESSES[t];await RA(r,e)}}a(yB,"startClusteringProcesses");async function IB(){bB=mB(ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await T_.createWorkQueueStream(Ds.WORK_QUEUE_CONSUMER_NAMES),await T_.updateIngestStreamConsumer(),await T_.updateLocalStreams();let e=await Xre.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ve.PRE_4_0_0_VERSION){co.info("Starting clustering upgrade 4.0.0 process"),mB(ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(IB,"startClusteringThreads");async function dne(){for(let e in ve.CLUSTERING_PROCESSES)if(e!==ve.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ve.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await bB.terminate();else{let t=ve.CLUSTERING_PROCESSES[e];await TA(t)}}a(dne,"stopClustering");async function fne(){for(let e in ve.CLUSTERING_PROCESSES){let t=ve.CLUSTERING_PROCESSES[e];if(await OB(t)===!1)return!1}return!0}a(fne,"isClusteringRunning");async function Ene(){await Ei.generateNatsConfig(!0),await T_.reloadNATSHub(),await T_.reloadNATSLeaf(),await Ei.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ei.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Ene,"reloadClustering")});var Ra=g((EOe,vB)=>{"use strict";var hne=require("minimist"),{isMainThread:NA,parentPort:DB}=require("worker_threads"),at=C(),{PROCESS_DESCRIPTORS_VALIDATE:R_}=at,Ps=G(),bA=W(),Th=hh(),Gc=Et(),AA=Je(),PB=ft(),Ms=Fc(),CB=_i(),mne=Do(),{restartWorkers:gh,onMessageByType:pne}=et(),{handleHDBError:Sne,hdb_errors:Tne}=re(),{HTTP_STATUS_CODES:gne}=Tne,Rh=J();Rh.initSync();var A_=`Restarting HarperDB. This may take up to ${at.RESTART_TIMEOUT_MS/1e3} seconds.`,Rne="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",LB="Clustering is not enabled so cannot be restarted",Ane="Invalid service",kc,Pn;vB.exports={restart:MB,restartService:yA};NA&&pne(at.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?yA({service:e.workerType}):MB({operation:"restart"})});async function MB(e){Pn=Object.keys(e).length===0,kc=await Ms.isServiceRegistered(at.HDB_PROC_DESCRIPTOR);let t=hne(process.argv);if(t.service){await yA(t);return}if(Pn&&!kc){console.error(Rne);return}if(Pn&&console.log(A_),kc){Ms.enterPM2Mode(),Ps.notify(A_);let r=mne(Object.keys(at.CONFIG_PARAM_MAP),!0);return bA.isEmptyOrZeroLength(Object.keys(r))||PB.updateConfigValue(void 0,void 0,r,!0,!0),Nne(),A_}return NA?(Ps.notify(A_),setTimeout(()=>{gh()},50)):DB.postMessage({type:at.ITC_EVENT_TYPES.RESTART}),A_}a(MB,"restart");async function yA(e){let{service:t}=e;if(at.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Sne(new Error,Ane,gne.BAD_REQUEST,void 0,void 0,!0);if(kc=await Ms.isServiceRegistered(at.HDB_PROC_DESCRIPTOR),!NA)return DB.postMessage({type:at.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case R_.clustering:if(!Rh.get(at.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=LB;break}Pn&&console.log("Restarting clustering"),Ps.notify("Restarting clustering"),await UB();break;case R_.clustering_config:case R_["clustering config"]:if(!Rh.get(at.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=LB;break}Pn&&console.log("Restarting clustering_config"),Ps.notify("Restarting clustering_config"),await Ms.reloadClustering();break;case"custom_functions":case"custom functions":case R_.harperdb:case R_.http_workers:if(Pn&&!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}Pn&&console.log("Restarting http_workers"),Ps.notify("Restarting http_workers"),Pn?await Ms.restart(at.HDB_PROC_DESCRIPTOR):setTimeout(()=>{gh("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Ps.error(r),Pn&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(yA,"restartService");async function One(){await Gc.publishToStream(`${AA.SUBJECT_PREFIXES.TXN}.${AA.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,AA.WORK_QUEUE_CONSUMER_NAMES.stream_name,Gc.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(One,"postDummyNatsMsg");async function Nne(){await UB(),await Ms.restart(at.HDB_PROC_DESCRIPTOR),await bA.async_set_timeout(2e3),Rh.get(at.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await OA(),Pn&&(await Gc.closeConnection(),process.exit(0))}a(Nne,"restartPM2Mode");async function UB(){if(!PB.getConfigFromFile(at.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await CB.getHDBProcessInfo()).clustering.length===0)Ps.trace("Clustering not running, restart will start clustering services"),await Th.generateNatsConfig(!0),await Ms.startClusteringProcesses(),await Ms.startClusteringThreads(),await OA(),Pn&&await Gc.closeConnection();else{await One(),await Th.generateNatsConfig(!0),kc?(Ps.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Ms.restart(at.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ms.restart(at.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await CB.getHDBProcessInfo()).clustering.forEach(s=>{Ps.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await bA.async_set_timeout(3e3),await OA(),await Gc.updateLocalStreams(),Pn&&await Gc.closeConnection(),Ps.trace("Restart clustering restarting ingest and reply service threads");let t=gh(at.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=gh(at.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(UB,"restartClustering");async function OA(){await Th.removeNatsConfig(at.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Th.removeNatsConfig(at.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(OA,"removeNatsConfig")});var KB=g((pOe,YB)=>{"use strict";var mOe=require("lodash"),Dr=C(),{handleHDBError:BB,hdb_errors:bne}=re(),{HDB_ERROR_MSGS:yne,HTTP_STATUS_CODES:Ine}=bne,IA=G();YB.exports={getRolePermissions:Cne};var Aa=Object.create(null),wne=a(e=>({key:e,perms:{}}),"perms_template_obj"),FB=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),GB=a((e=!1,t=!1,r=!1,n=!1)=>({[Dr.PERMS_CRUD_ENUM.READ]:e,[Dr.PERMS_CRUD_ENUM.INSERT]:t,[Dr.PERMS_CRUD_ENUM.UPDATE]:r,[Dr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),wA=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...GB(t,r,n,s)}),"table_perms_template"),HB=a((e,t=GB())=>({attribute_name:e,describe:VB(t),[O_]:t[O_],[CA]:t[CA],[LA]:t[LA]}),"attr_perms_template"),qB=a((e,t=!1)=>({attribute_name:e,describe:t,[O_]:t}),"timestamp_attr_perms_template"),{READ:O_,INSERT:CA,UPDATE:LA}=Dr.PERMS_CRUD_ENUM,kB=Object.values(Dr.PERMS_CRUD_ENUM),$B=[O_,CA,LA];function Cne(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[Dr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Aa[t]&&Aa[t].key===n)return Aa[t].perms;let s=Lne(e,r);return Aa[t]?Aa[t].key=n:Aa[t]=wne(n),Aa[t].perms=s,s}catch(r){if(!e[Dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Dr.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 IA.error(n),IA.debug(r),BB(new Error,yne.OUTDATED_PERMS_TRANSLATION_ERROR,Ine.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
12
+ ${r.stack}`;throw IA.error(n),BB(new Error)}}}a(Cne,"getRolePermissions");function Lne(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Dr.SYSTEM_SCHEMA_NAME]=n[Dr.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]=Dne(t[i]);return}r[i]=FB(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],_=Pne(c,l);r[i].describe||kB.forEach(u=>{_[u]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=wA()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=wA()})}),r}a(Lne,"translateRolePermissions");function Dne(e){let t=FB(!0);return Object.keys(e).forEach(r=>{t.tables[r]=wA(!0,!0,!0,!0,!0)}),t}a(Dne,"createStructureUserPermissions");function Pne(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,u)=>{let{attribute_name:d}=u,f=u;return Dr.TIME_STAMP_NAMES.includes(d)&&(f=qB(d,u[O_])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=HB(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let u=i[_];u.describe=VB(u),s.attribute_permissions.push(u),c||Mne(u,l)}else if(_!==o){let u;Dr.TIME_STAMP_NAMES.includes(_)?u=qB(_):u=HB(_),s.attribute_permissions.push(u)}}),c||s.attribute_permissions.push(l),s.describe=xB(s),s}else return e.describe=xB(e),e}a(Pne,"getTableAttrPerms");function xB(e){return kB.filter(t=>e[t]).length>0}a(xB,"getSchemaTableDescribePerm");function VB(e){return $B.filter(t=>e[t]).length>0}a(VB,"getAttributeDescribePerm");function Mne(e,t){$B.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Mne,"checkForHashPerms")});var WB={};ke(WB,{Headers:()=>uo});var uo,Ah=ye(()=>{uo=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];n?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var N_={};ke(N_,{authentication:()=>tH,bypassAuth:()=>Fne,login:()=>kne,logout:()=>$ne,start:()=>Gne});function Fne(){eH=!0}async function tH(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?Hne?Bne:[]:vne?Une:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new uo([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Oh&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Oh&&o.push("Access-Control-Allow-Credentials","true")}}let l,_;if(Oh){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.indexOf(E);if(h>=0){let p=s.indexOf(";",h),S=s.indexOf("=",h);l=s.slice(S+1,p===-1?s.length:p),_=await jB.get(l)}e.session=_||(_={})}e.user=null;let u=a((E,h,p)=>{let S=new bh.AuthAuditLog(E,h,Qt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,l&&(S.session_id=l),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===Qt.AUTH_AUDIT_STATUS.SUCCESS?QB.notify(S):QB.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 st.getUser(E,null,null))}let d;if(!e.user)if(n){if(d=Oa.get(n),!d){let[E,h]=n.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await st.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,Nh.validateOperationToken)(h)}catch(O){if(O.message==="invalid token")try{return await(0,Nh.validateRefreshToken)(h),c({status:-1})}catch{throw O}}break}}catch(O){return xne&&(Oa.get(h)||(Oa.set(h,h),u(p,Qt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:_o({error:O.message},e)})}Oa.set(n,d),qne&&u(d.username,Qt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await st.getUser(_.user,null,e):(eH&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,JB.getSuperUser)());Oh&&(e.session.update=function(E){if(!l){l=(0,XB.v4)();let p=`${(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",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=l,jB.put(E)},e.login=async function(E,h){e.user=await st.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")&&ki.loginPath?(f.status=302,f.headers.set("Location",ki.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 uo);for(let d=0;d<_;){let f=o[d++];u.set(f,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function Gne({server:e,port:t}){e.request(tH,{port:t||"all"}),zB||(zB=!0,setInterval(()=>{Oa=new Map},Mn.get(Qt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),ZB.user.addListener(()=>{Oa=new Map}))}async function kne(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 $ne(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var JB,Nh,XB,Mn,Qt,bh,ZB,QB,Une,vne,Bne,Hne,jB,Oh,eH,qne,xne,Oa,zB,yh=ye(()=>{JB=q(Rr());ur();Kl();Nh=q(s_());Ne();XB=require("uuid"),Mn=q(J()),Qt=q(C()),bh=q(G()),ZB=q(yu());Ah();$c();QB=(0,bh.loggerWithTag)("auth-event");Mn.initSync();Une=Mn.get(Qt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),vne=Mn.get(Qt.CONFIG_PARAMS.HTTP_CORS),Bne=Mn.get(Qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Hne=Mn.get(Qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),jB=dt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Oh=Mn.get(Qt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,eH=Mn.get(Qt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,qne=Mn.get(Qt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,xne=Mn.get(Qt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Oa=new Map;st.onInvalidatedUser(()=>{Oa=new Map});a(Fne,"bypassAuth");a(tH,"authentication");a(Gne,"start");a(kne,"login");a($ne,"logout")});var cH=g((yOe,aH)=>{"use strict";var Le=require("joi"),rH=require("fs-extra"),nH=require("path"),pi=tt(),sH=J(),iH=C(),oH=G(),{hdb_errors:Vne}=re(),{HDB_ERROR_MSGS:sr}=Vne,mi=/^[a-zA-Z0-9-_]+$/;aH.exports={getDropCustomFunctionValidator:Kne,setCustomFunctionValidator:Wne,addComponentValidator:Jne,dropCustomFunctionProjectValidator:Xne,packageComponentValidator:Zne,deployComponentValidator:ese,setComponentFileValidator:Qne,getComponentFileValidator:zne,dropComponentFileValidator:jne};function Ih(e,t,r){try{let n=sH.get(iH.CONFIG_PARAMS.COMPONENTSROOT),s=nH.join(n,t);return rH.existsSync(s)?e?t:r.message(sr.PROJECT_EXISTS):e?r.message(sr.NO_PROJECT):t}catch(n){return oH.error(n),r.message(sr.VALIDATION_ERR)}}a(Ih,"checkProjectExists");function b_(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(b_,"checkFilePath");function Yne(e,t,r,n){try{let s=sH.get(iH.CONFIG_PARAMS.COMPONENTSROOT),i=nH.join(s,e,t,r+".js");return rH.existsSync(i)?r:n.message(sr.NO_FILE)}catch(s){return oH.error(s),n.message(sr.VALIDATION_ERR)}}a(Yne,"checkFileExists");function Kne(e){let t=Le.object({project:Le.string().pattern(mi).custom(Ih.bind(null,!0)).required().messages({"string.pattern.base":sr.BAD_PROJECT_NAME}),type:Le.string().valid("helpers","routes").required(),file:Le.string().pattern(mi).custom(Yne.bind(null,e.project,e.type)).custom(b_).required().messages({"string.pattern.base":sr.BAD_FILE_NAME})});return pi.validateBySchema(e,t)}a(Kne,"getDropCustomFunctionValidator");function Wne(e){let t=Le.object({project:Le.string().pattern(mi).custom(Ih.bind(null,!0)).required().messages({"string.pattern.base":sr.BAD_PROJECT_NAME}),type:Le.string().valid("helpers","routes").required(),file:Le.string().custom(b_).required(),function_content:Le.string().required()});return pi.validateBySchema(e,t)}a(Wne,"setCustomFunctionValidator");function Qne(e){let t=Le.object({project:Le.string().pattern(mi).required().messages({"string.pattern.base":sr.BAD_PROJECT_NAME}),file:Le.string().custom(b_).required(),payload:Le.string().allow("").optional(),encoding:Le.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return pi.validateBySchema(e,t)}a(Qne,"setComponentFileValidator");function jne(e){let t=Le.object({project:Le.string().pattern(mi).required().messages({"string.pattern.base":sr.BAD_PROJECT_NAME}),file:Le.string().custom(b_).optional()});return pi.validateBySchema(e,t)}a(jne,"dropComponentFileValidator");function zne(e){let t=Le.object({project:Le.string().required(),file:Le.string().custom(b_).required(),encoding:Le.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return pi.validateBySchema(e,t)}a(zne,"getComponentFileValidator");function Jne(e){let t=Le.object({project:Le.string().pattern(mi).custom(Ih.bind(null,!1)).required().messages({"string.pattern.base":sr.BAD_PROJECT_NAME})});return pi.validateBySchema(e,t)}a(Jne,"addComponentValidator");function Xne(e){let t=Le.object({project:Le.string().pattern(mi).custom(Ih.bind(null,!0)).required().messages({"string.pattern.base":sr.BAD_PROJECT_NAME})});return pi.validateBySchema(e,t)}a(Xne,"dropCustomFunctionProjectValidator");function Zne(e){let t=Le.object({project:Le.string().pattern(mi).required().messages({"string.pattern.base":sr.BAD_PROJECT_NAME}),skip_node_modules:Le.boolean()});return pi.validateBySchema(e,t)}a(Zne,"packageComponentValidator");function ese(e){let t=Le.object({project:Le.string().pattern(mi).required().messages({"string.pattern.base":sr.BAD_PROJECT_NAME}),payload:Le.string().optional().messages({"string.pattern.base":sr.BAD_PACKAGE}),package:Le.string().optional()});return pi.validateBySchema(e,t)}a(ese,"deployComponentValidator")});var Dh=g((wOe,hH)=>{"use strict";var wh=require("joi"),Ch=require("path"),lH=require("fs-extra"),{exec:tse}=require("child_process"),rse=require("util"),uH=rse.promisify(tse),y_=C(),{handleHDBError:Vc,hdb_errors:nse}=re(),{HTTP_STATUS_CODES:Yc}=nse,I_=J(),sse=tt(),Kc=G();I_.initSync();var DA=I_.get(y_.CONFIG_PARAMS.COMPONENTSROOT),_H="npm install --omit=dev --json",ise=`${_H} --dry-run`;hH.exports={installModules:lse,auditModules:use,installAllRootModules:ose,uninstallRootModule:ase,linkHarperdb:cse};async function ose(e=!1){await Lh(),await w_(e?"npm install --ignore-scripts":"npm install",I_.get(y_.CONFIG_PARAMS.ROOTPATH))}a(ose,"installAllRootModules");async function ase(e){await w_(`npm uninstall ${e}`,I_.get(y_.CONFIG_PARAMS.ROOTPATH))}a(ase,"uninstallRootModule");async function cse(){await Lh(),await w_(`npm link ${y_.PACKAGE_ROOT}`,I_.get(y_.CONFIG_PARAMS.ROOTPATH))}a(cse,"linkHarperdb");async function w_(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
+ `,""))}return n&&!n.includes("Debugger listening")&&Kc.error("Error running NPM command:",e,n),Kc.trace(r,n),r?.replace(`
14
+ `,"")}a(w_,"runCommand");async function lse(e){Kc.info(`starting installModules for request: ${e}`);let t=EH(e);if(t)throw Vc(t,t.message,Yc.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?ise:_H;await Lh(),await fH(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 _=Ch.join(DA,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=uH(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 Wc.info(`finished installModules with response ${i}`),i}a(ase,"installModules");function uH(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(uH,"parseNPMStdErr");async function cse(e){Wc.info(`starting auditModules for request: ${e}`);let t=dH(e);if(t)throw Yc(t,t.message,Kc.BAD_REQUEST);let{projects:r}=e;await Mh(),await _H(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Ph.join(MA,o);n[o]={npm_output:null,npm_error:null};try{let l=await w_("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=uH(l.stderr)}}return Wc.info(`finished auditModules with response ${n}`),n}a(cse,"auditModules");async function Mh(){try{return await w_("npm -v"),!0}catch{throw Yc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Kc.BAD_REQUEST,void 0,void 0,!0)}}a(Mh,"checkNPMInstalled");async function _H(e){if(!Array.isArray(e)||e.length===0)throw Yc(new Error,"projects argument must be an array with at least 1 element",Kc.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(MA,i.toString());if(!await aH.pathExists(o)){t.push(i);continue}let l=Ph.join(o,"package.json");await aH.pathExists(l)||r.push(i)}if(t.length>0)throw Yc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Kc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Yc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Kc.BAD_REQUEST,void 0,void 0,!0)}a(_H,"checkProjectPaths");function dH(e){let t=Dh.object({projects:Dh.array().min(1).items(Dh.string()).required(),dry_run:Dh.boolean().default(!1)});return rse.validateBySchema(e,t)}a(dH,"modulesValidator")});var vA=T((COe,SH)=>{"use strict";var Qc=require("fs-extra"),UA=require("path"),vh=F(),EH=Y(),Bh=C(),pH=J(),lse=pt();SH.exports=use;async function use(){let e=_se(),t=pH.get(Bh.CONFIG_PARAMS.ROOTPATH),r=UA.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Bh.PACKAGE_ROOT}},s=UA.join(t,"node_modules");await Qc.ensureDir(s);let i,o=!0,c=!1;try{i=await Qc.readJson(r)}catch(l){if(EH.isEmptyOrZeroLength(e))return;if(l.code!==Bh.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!EH.isEmptyOrZeroLength(e)){for(let{name:l,package:_}of e){let u=await hH(_);n.dependencies[l]=u+_}if(!o){vh.notify("Installing components"),await mH(r,n,null);return}for(let{name:l,package:_}of e){let u=i.dependencies[l],d=await hH(_);if(u===void 0||u!==d+_){c=!0;break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(vh.notify("Removing component",l),c=!0);c&&(vh.notify("Updating components."),await mH(r,n,i))}a(use,"installComponents");function _se(){let e=lse.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(_se,"getComponentsConfig");async function hH(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":UA.extname(e)||await Qc.pathExists(e)?"file:":"github:"}a(hH,"getPkgPrefix");async function mH(e,t,r){vh.trace("npm installing components package.json",t),await Qc.writeFile(e,JSON.stringify(t,null," "));try{await Uh().installAllRootModules(pH.get(Bh.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await Qc.writeFile(e,JSON.stringify(r,null," ")):await Qc.unlink(e),n}}a(mH,"installPackages")});var Hh=T((POe,AH)=>{"use strict";var Ye=require("fs-extra"),BA=require("fast-glob"),Re=require("path"),gH=require("tar-fs"),DOe=require("uuid").v4,HA=require("normalize-path"),vs=oH(),Bt=F(),Ze=C(),yt=J(),C_=pt(),dse=Y(),{PACKAGE_ROOT:fse}=C(),{handleHDBError:Kt,hdb_errors:Ese}=te(),{basename:hse}=require("path"),mse=vA(),RH=J(),pse=C(),{Readable:Sse}=require("stream"),{isMainThread:Tse}=require("worker_threads"),{HDB_ERROR_MSGS:Na,HTTP_STATUS_CODES:Wt}=Ese,gse=Re.join(fse,"application-template"),TH=Re.join(yt.get(Ze.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Rse(){Bt.trace("getting custom api status");let e={};try{e={port:yt.get(Ze.CONFIG_PARAMS.HTTP_PORT),directory:yt.get(Ze.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Kt(new Error,Na.FUNCTION_STATUS,Wt.INTERNAL_SERVER_ERROR,Bt.ERR,t)}return e}a(Rse,"customFunctionsStatus");function Ase(){Bt.trace("getting custom api endpoints");let e={},t=yt.get(Ze.CONFIG_PARAMS.COMPONENTSROOT);try{BA.sync(HA(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:BA.sync(HA(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:BA.sync(HA(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Kt(new Error,Na.GET_FUNCTIONS,Wt.INTERNAL_SERVER_ERROR,Bt.ERR,r)}return e}a(Ase,"getCustomFunctions");function Ose(e){e.project&&(e.project=Re.parse(e.project).name),e.file&&(e.file=Re.parse(e.file).name);let t=vs.getDropCustomFunctionValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);Bt.trace("getting custom api endpoint file content");let r=yt.get(Ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=Re.join(r,n,s,i+".js");try{return Ye.readFileSync(o,{encoding:"utf8"})}catch(c){throw Kt(new Error,Na.GET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Bt.ERR,c)}}a(Ose,"getCustomFunction");function Nse(e){e.project&&(e.project=Re.parse(e.project).name),e.file&&(e.file=Re.parse(e.file).name);let t=vs.setCustomFunctionValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);Bt.trace("setting custom function file content");let r=yt.get(Ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return Ye.outputFileSync(Re.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Kt(new Error,Na.SET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Bt.ERR,c)}}a(Nse,"setCustomFunction");function bse(e){e.project&&(e.project=Re.parse(e.project).name),e.file&&(e.file=Re.parse(e.file).name);let t=vs.getDropCustomFunctionValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);Bt.trace("dropping custom function file");let r=yt.get(Ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return Ye.unlinkSync(Re.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Kt(new Error,Na.DROP_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Bt.ERR,o)}}a(bse,"dropCustomFunction");function yse(e){e.project&&(e.project=Re.parse(e.project).name);let t=vs.addComponentValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);Bt.trace("adding component");let r=yt.get(Ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Re.join(r,n);return Ye.mkdirSync(s,{recursive:!0}),Ye.copySync(gse,s),`Successfully added project: ${n}`}catch(s){throw Kt(new Error,Na.ADD_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Bt.ERR,s)}}a(yse,"addComponent");function Ise(e){e.project&&(e.project=Re.parse(e.project).name);let t=vs.dropCustomFunctionProjectValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);Bt.trace("dropping custom function project");let r=yt.get(Ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=yt.get(Ze.CONFIG_PARAMS.APPS);if(!dse.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return C_.updateConfigValue(Ze.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Re.join(r,n);return Ye.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Kt(new Error,Na.DROP_FUNCTION_PROJECT,Wt.INTERNAL_SERVER_ERROR,Bt.ERR,i)}}a(Ise,"dropCustomFunctionProject");async function wse(e){e.project&&(e.project=Re.parse(e.project).name);let t=vs.packageComponentValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);let r=yt.get(Ze.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Bt.trace("packaging component",n);let s;try{s=await Ye.realpath(Re.join(r,n))}catch(l){if(l.code!==Ze.NODE_ERROR_CODES.ENOENT)throw l;try{s=await Ye.realpath(Re.join(yt.get(Ze.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===Ze.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await Ye.ensureDir(TH);let i=Re.join(TH,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:l=>l.includes(Re.join(s,"node_modules"))}),gH.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(wse,"packageComponent");async function Cse(e){e.project&&(e.project=Re.parse(e.project).name);let t=vs.deployComponentValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);let r=yt.get(Ze.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=Re.join(r,n),i="file:"+o,await Ye.ensureDir(o);let f=Sse.from(Buffer.from(s,"base64"));await new Promise((h,p)=>{f.pipe(gH.extract(o,{finish:h})).on("error",p)});let E=await Ye.readdir(o);E.length===1&&E[0]==="package"&&(await Ye.copy(Re.join(o,"package"),o),await Ye.remove(Re.join(o,"package")))}if(await C_.addConfig(n,{package:i}),!s){await mse();let f=RH.get(pse.CONFIG_PARAMS.ROOTPATH);o=Re.join(f,"node_modules",n)}if(Tse)return;let c=new Map;c.isWorker=!0;let l=(xh(),re(qh)),_;l.setErrorReporter(f=>_=f);let u=hse(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(Cse,"deployComponent");async function Lse(){let e=C_.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let l=await Ye.readdir(o,{withFileTypes:!0});for(let _ of l){let u=_.name;if(u.startsWith(".")||u==="node_modules")continue;let d=Re.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:Re.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(yt.get(Ze.CONFIG_PARAMS.COMPONENTSROOT),{name:yt.get(Ze.CONFIG_PARAMS.COMPONENTSROOT).split(Re.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(Re.join(yt.get(Ze.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(xh(),re(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(Lse,"getComponents");async function Dse(e){let t=vs.getComponentFileValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);let n=C_.getConfigObj()[e.project]||e.project==="harperdb"?Re.join(RH.get(Ze.CONFIG_PARAMS.ROOTPATH),"node_modules"):yt.get(Ze.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ye.stat(Re.join(n,e.project,e.file));return{message:await Ye.readFile(Re.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Ze.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Re.join(e.project,e.file)}'`):i}}a(Dse,"getComponentFile");async function Pse(e){let t=vs.setComponentFileValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Re.join(yt.get(Ze.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Ye.ensureFile(n),await Ye.outputFile(n,e.payload,r)):await Ye.ensureDir(n),"Successfully set component: "+e.file}a(Pse,"setComponentFile");async function Mse(e){let t=vs.dropComponentFileValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);let r=e.file?Re.join(e.project,e.file):e.project,n=Re.join(yt.get(Ze.CONFIG_PARAMS.COMPONENTSROOT),r);return await Ye.pathExists(n)&&await Ye.remove(n),C_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(Mse,"dropComponent");AH.exports={customFunctionsStatus:Rse,getCustomFunctions:Ase,getCustomFunction:Ose,setCustomFunction:Nse,dropCustomFunction:bse,addComponent:yse,dropCustomFunctionProject:Ise,packageComponent:wse,deployComponent:Cse,getComponents:Lse,getComponentFile:Dse,setComponentFile:Pse,dropComponent:Mse}});var qA=T((UOe,NH)=>{"use strict";var Bs=require("joi"),OH=it();NH.exports={readTransactionLogValidator:Use,deleteTransactionLogsBeforeValidator:vse};function Use(e){let t=Bs.object({schema:Bs.string().required(),table:Bs.string().required(),from:Bs.date().timestamp(),to:Bs.date().timestamp(),limit:Bs.number().min(1)});return OH.validateBySchema(e,t)}a(Use,"readTransactionLogValidator");function vse(e){let t=Bs.object({schema:Bs.string().required(),table:Bs.string().required(),timestamp:Bs.date().timestamp().required()});return OH.validateBySchema(e,t)}a(vse,"deleteTransactionLogsBeforeValidator")});var Gh=T((BOe,CH)=>{"use strict";var xA=C(),Fh=St(),bH=Y(),yH=J(),IH=li(),{handleHDBError:jc,hdb_errors:Bse}=te(),{HTTP_STATUS_CODES:zc}=Bse,{readTransactionLogValidator:Hse,deleteTransactionLogsBeforeValidator:qse}=qA(),wH="This operation relies on clustering and cannot run with it disable.",xse="Logs successfully deleted from transaction log.",Fse="All logs successfully deleted from transaction log.";CH.exports={readTransactionLog:Gse,deleteTransactionLogsBefore:kse};async function*Gse(e){let t=Hse(e);if(t)throw jc(t,t.message,zc.BAD_REQUEST,void 0,void 0,!0);if(!yH.get(xA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw jc(new Error,wH,zc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=bH.checkSchemaTableExist(r,n);if(s)throw jc(new Error,s,zc.NOT_FOUND,void 0,void 0,!0);let i=IH.createNatsTableStreamName(r,n),o=await Fh.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===xA.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(Gse,"readTransactionLog");async function kse(e){let t=qse(e);if(t)throw jc(t,t.message,zc.BAD_REQUEST,void 0,void 0,!0);if(!yH.get(xA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw jc(new Error,wH,zc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=bH.checkSchemaTableExist(r,n);if(i)throw jc(new Error,i,zc.NOT_FOUND,void 0,void 0,!0);let o=IH.createNatsTableStreamName(r,n),{jsm:c}=await Fh.getNATSReferences(),l=await Fh.getStreamInfo(o),_=new Date(l.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let u=xse,d,f=new Date(l.state.last_ts).getTime();return s>f?(d=l.state.last_seq+1,u=Fse):d=(await Fh.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),u}a(kse,"deleteTransactionLogsBefore")});var DH=T((qOe,LH)=>{"use strict";var FA=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}};LH.exports=FA});var MH=T((FOe,PH)=>{"use strict";var GA=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};PH.exports=GA});var $A=T((kOe,vH)=>{"use strict";var UH=DH(),$se=MH(),{HDB_ERROR_MSGS:Vse}=jr(),kA=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Vse.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new UH(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new $se(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new UH(r,n,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};vH.exports=kA});var Yh=T((VOe,JH)=>{"use strict";var VA=Or(),kh=Ar(),xn=qE(),P_=ji(),YA=Xo(),Yse=dR(),Kse=jU(),M_=br(),$h=kE(),Ht=F(),Wse=OR(),Qse=c_(),jse=sA(),zse=rh(),Jse=sh(),Xse=iA(),Zse=ah(),eie=lh(),KA=_h(),Ti=Y(),tie=Y0(),WA=fh(),qH=Ra(),qn=C(),xH=VB(),rie=di(),FH=s_(),GH=(Ch(),re(N_)),kH=pt(),mn=Hh(),nie=require("alasql"),$H=Gh(),VH=Uh(),YH=$A(),{handleHDBError:Br,hdb_errors:KH}=te(),{HDB_ERROR_MSGS:Zt,HTTP_STATUS_CODES:L_}=KH,k=new Map,WH="delete",ho="insert",gi="read",ba="update",D_="describe",BH=P_.describeSchema.name,HH=P_.describeTable.name,QH={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},sie="catchup",iie="handleGetJob",oie="handleGetJobsByStartDate",Vh={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},aie=[xn.createTable.name,xn.createAttribute.name,xn.dropTable.name,xn.dropAttribute.name],jH={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}};k.set(VA.insert.name,new Q(!1,[ho]));k.set(VA.update.name,new Q(!1,[ba]));k.set(VA.upsert.name,new Q(!1,[ho,ba]));k.set(kh.searchByConditions.name,new Q(!1,[gi]));k.set(kh.searchByHash.name,new Q(!1,[gi]));k.set(kh.searchByValue.name,new Q(!1,[gi]));k.set(kh.search.name,new Q(!1,[gi]));k.set(xn.createSchema.name,new Q(!0,[]));k.set(xn.createTable.name,new Q(!0,[]));k.set(xn.createAttribute.name,new Q(!1,[ho]));k.set(xn.dropSchema.name,new Q(!0,[]));k.set(xn.dropTable.name,new Q(!0,[]));k.set(xn.dropAttribute.name,new Q(!0,[]));k.set(P_.describeSchema.name,new Q(!1,[gi]));k.set(P_.describeTable.name,new Q(!1,[gi]));k.set(YA.deleteRecord.name,new Q(!1,[WH]));k.set(M_.addUser.name,new Q(!0,[]));k.set(M_.alterUser.name,new Q(!0,[]));k.set(M_.dropUser.name,new Q(!0,[]));k.set(M_.listUsersExternal.name,new Q(!0,[]));k.set($h.listRoles.name,new Q(!0,[]));k.set($h.addRole.name,new Q(!0,[]));k.set($h.alterRole.name,new Q(!0,[]));k.set($h.dropRole.name,new Q(!0,[]));k.set(Wse.name,new Q(!0,[]));k.set(Qse.name,new Q(!0,[]));k.set(jse.name,new Q(!0,[]));k.set(zse.name,new Q(!0,[]));k.set(Jse.name,new Q(!0,[]));k.set(Xse.name,new Q(!0,[]));k.set(KA.setRoutes.name,new Q(!0,[]));k.set(KA.getRoutes.name,new Q(!0,[]));k.set(KA.deleteRoutes.name,new Q(!0,[]));k.set(kH.setConfiguration.name,new Q(!0,[]));k.set(Zse.clusterStatus.name,new Q(!0,[]));k.set(eie.name,new Q(!0,[]));k.set(WA.getFingerprint.name,new Q(!0,[]));k.set(WA.setLicense.name,new Q(!0,[]));k.set(YA.deleteFilesBefore.name,new Q(!0,[]));k.set(YA.deleteAuditLogsBefore.name,new Q(!0,[]));k.set(qH.restart.name,new Q(!0,[]));k.set(qH.restartService.name,new Q(!0,[]));k.set(Yse.name,new Q(!0,[]));k.set(Kse.name,new Q(!0,[gi]));k.set(rie.systemInformation.name,new Q(!0,[]));k.set(kH.getConfiguration.name,new Q(!0,[]));k.set($H.readTransactionLog.name,new Q(!0,[]));k.set($H.deleteTransactionLogsBefore.name,new Q(!0,[]));k.set(VH.installModules.name,new Q(!0,[]));k.set(VH.auditModules.name,new Q(!0,[]));k.set(FH.createTokens.name,new Q(!1,[]));k.set(FH.refreshOperationToken.name,new Q(!1,[]));k.set(GH.login.name,new Q(!1,[]));k.set(GH.logout.name,new Q(!1,[]));k.set(mn.customFunctionsStatus.name,new Q(!0,[]));k.set(mn.getCustomFunctions.name,new Q(!0,[]));k.set(mn.getComponents.name,new Q(!0,[]));k.set(mn.getComponentFile.name,new Q(!0,[]));k.set(mn.setComponentFile.name,new Q(!0,[]));k.set(mn.dropComponent.name,new Q(!0,[]));k.set(mn.getCustomFunction.name,new Q(!0,[]));k.set(mn.setCustomFunction.name,new Q(!0,[]));k.set(mn.dropCustomFunction.name,new Q(!0,[]));k.set(mn.addComponent.name,new Q(!0,[]));k.set(mn.dropCustomFunctionProject.name,new Q(!0,[]));k.set(mn.packageComponent.name,new Q(!0,[]));k.set(mn.deployComponent.name,new Q(!0,[]));k.set(WA.getRegistrationInfo.name,new Q(!1,[]));k.set(M_.userInfo.name,new Q(!1,[]));k.set(P_.describeAll.name,new Q(!1,[]));k.set(iie,new Q(!1,[]));k.set(oie,new Q(!0,[]));k.set(sie,new Q(!0,[]));k.set(Vh.CSV_DATA_LOAD,new Q(!1,[ho,ba]));k.set(Vh.CSV_URL_LOAD,new Q(!1,[ho,ba]));k.set(Vh.CSV_FILE_LOAD,new Q(!1,[ho,ba]));k.set(Vh.IMPORT_FROM_S3,new Q(!1,[ho,ba]));k.set(jH.EXPORT_TO_S3,new Q(!0,[]));k.set(jH.EXPORT_LOCAL,new Q(!0,[]));k.set(qn.VALID_SQL_OPS_ENUM.DELETE,new Q(!1,[WH]));k.set(qn.VALID_SQL_OPS_ENUM.SELECT,new Q(!1,[gi]));k.set(qn.VALID_SQL_OPS_ENUM.INSERT,new Q(!1,[ho]));k.set(qn.VALID_SQL_OPS_ENUM.UPDATE,new Q(!1,[ba]));JH.exports={verifyPerms:lie,verifyPermsAst:cie,verifyBulkLoadAttributePerms:_ie};function cie(e,t,r){if(Ti.isEmptyOrZeroLength(e))throw Ht.info("verify_perms_ast has an empty user parameter"),Br(new Error);if(Ti.isEmptyOrZeroLength(t))throw Ht.info("verify_perms_ast has an empty user parameter"),Br(new Error);if(Ti.isEmptyOrZeroLength(r))throw Ht.info("verify_perms_ast has a null operation parameter"),Br(new Error);try{let n=new YH,s=new tie(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."),Br(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&QH[r])throw Br(new Error,Zt.DROP_SYSTEM,L_.FORBIDDEN);if(c&&!l)return null;let _=xH.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof nie.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=zH(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]),p=jA(t.role.permission,f,d[E]);QA(h,p,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw Br(n)}}a(cie,"verifyPermsAst");function lie(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Ht.info("null required parameter in verifyPerms"),Br(new Error,Zt.DEFAULT_INVALID_REQUEST,L_.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new YH;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(Zt.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(qn.SYSTEM_SCHEMA_NAME)||s===qn.SYSTEM_SCHEMA_NAME;if(u&&QH[r])throw Br(new Error,Zt.DROP_SYSTEM,L_.FORBIDDEN);if(l&&!u||_===!0&&(r===xn.createSchema.name||r===xn.dropSchema.name))return null;if(aie.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=xH.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===BH||r===HH){if(s===qn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Zt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===BH&&(!d[s]||!d[s][D_]))return c.handleInvalidItem(Zt.SCHEMA_NOT_FOUND(s));if(r===HH&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][D_]))return c.handleInvalidItem(Zt.TABLE_NOT_FOUND(s,i))}}let f=zH(e.hdb_user,r,o,c,n);if(f)return f;if(k.get(r)&&k.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&qn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[s].tables[i];S[qn.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(g=>g[qn.PERMS_CRUD_ENUM.READ]).forEach(g=>{p.push(g.attribute_name)}):p=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=p)}let E=uie(e),h=jA(e.hdb_user.role.permission,s,i);return QA(E,h,r,i,s,c,n),c.getPermsResponse()}a(lie,"verifyPerms");function zH(e,t,r,n,s){if(Ti.arrayHasEmptyValues([e,t,r]))throw Ht.info("hasPermissions has an invalid parameter"),Br(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||k.get(t).requires_su))return null;if(!k.get(t))throw Ht.info(`operation ${t} not found.`),Br(new Error,Zt.OP_NOT_FOUND(t),L_.BAD_REQUEST);if(k.get(t)&&k.get(t).requires_su)return Ht.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Zt.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][D_]===!1){n.addInvalidItem(Zt.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(Zt.SCHEMA_NOT_FOUND(l));continue}let _=r.get(l);for(let u of _){let d=o[l].tables[u];if(!d||d[D_]===!1)n.addInvalidItem(Zt.TABLE_NOT_FOUND(l,u));else try{let f=[],E=k.get(t).perms;!Ti.isEmpty(s)&&E.includes(s)&&(E=[s]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(Ht.info(`Required ${p} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&n.addUnauthorizedTable(l,u,f)}catch(f){let E=Zt.UNKNOWN_OP_AUTH_ERROR(t,l,u);throw Ht.error(E),Ht.error(f),Br(KH.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(zH,"hasPermissions");function QA(e,t,r,n,s,i,o){if(!e||!t)throw Ht.info("no attributes specified in checkAttributePerms."),Br(new Error);let c=k.get(r).perms;if(!c||c==="")throw Ht.info(`no permissions found for ${r} in checkAttributePerms().`),Br(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[D_]===!1){i.addInvalidItem(Zt.ATTR_NOT_FOUND(s,n,u),s,n);continue}if(c)for(let f of c){if(qn.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==gi)throw Br(new Error,Zt.SYSTEM_TIMESTAMP_PERMS_ERR,L_.FORBIDDEN);d[f]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(f):l[d.attribute_name]=[f])}}else i.addInvalidItem(Zt.ATTR_NOT_FOUND(s,n,u),s,n)}let _=Object.keys(l);_.length>0&&i.addUnauthorizedAttributes(_,s,n,l)}a(QA,"checkAttributePerms");function uie(e){let t=new Set;try{if(e.action)return t;if(e.operation===qn.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(uie,"getRecordAttributes");function jA(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(jA,"getAttributePermissions");function _ie(e,t,r,n,s,i,o){let c=new Set(i),l=jA(e,n,s);QA(c,l,t,s,n,o,r)}a(_ie,"verifyBulkLoadAttributePerms")});var Wh=T((KOe,rq)=>{"use strict";rq.exports={evaluateSQL:Nie,processAST:tq,convertSQLToAST:eq,checkASTPermissions:ZH};var die=Or(),XH=require("util"),fie=XH.callbackify(die.insert),Eie=Ar().search,hie=oU().update,mie=XH.callbackify(hie),pie=cU().convertDelete,mo=require("alasql"),Sie=Yh(),Kh=F(),Tie=Ff(),gie=Y(),U_=C(),{hdb_errors:Rie,handleHDBError:zA}=te(),{HTTP_STATUS_CODES:JA}=Rie;Tie(mo);var Aie=403,Oie="There was a problem performing this insert. Please check the logs and try again.",XA=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Nie(e,t){let r=e.parsed_sql_object;if(!r){r=eq(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)&&gie.isEmptyOrZeroLength(n))return t("No schema specified",null)}tq(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Nie,"evaluateSQL");function ZH(e,t){let r;try{r=Sie.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(ZH,"checkASTPermissions");function eq(e){let t=new XA;if(!e)throw zA(new Error,"The 'sql' parameter is missing from the request body",JA.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]?zA(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,JA.BAD_REQUEST):zA(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",JA.BAD_REQUEST)}return t}a(eq,"convertSQLToAST");function tq(e,t,r){try{let n=bie;if(!e.bypass_auth&&!t.permissions_checked){let i=ZH(e,t);if(i&&i.length>0)return r(Aie,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case U_.VALID_SQL_OPS_ENUM.SELECT:n=Eie,s=t.ast.statements[0];break;case U_.VALID_SQL_OPS_ENUM.INSERT:n=yie;break;case U_.VALID_SQL_OPS_ENUM.UPDATE:n=mie;break;case U_.VALID_SQL_OPS_ENUM.DELETE:n=pie;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(tq,"processAST");function bie(e,t){Kh.info(e),t("unknown sql statement")}a(bie,"nullFunction");function yie({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=Iie(i,e.values)}catch(o){return r(o)}fie(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(yie,"convertInsert");function Iie(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 [${U_.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Kh.error(r),new Error(Oie)}}a(Iie,"createDataObjects")});var ZA=T((QOe,sq)=>{"use strict";var{S3:wie,GetObjectCommand:Cie}=require("@aws-sdk/client-s3");sq.exports={getFileStreamFromS3:Lie,getS3AuthObj:nq};async function Lie(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await nq(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Cie(r))).Body}a(Lie,"getFileStreamFromS3");function nq(e,t,r){return new wie({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(nq,"getS3AuthObj")});var Qh=T((zOe,fq)=>{"use strict";var tO=Ar(),Die=Wh(),Pie=ZA(),{AsyncParser:Mie,Transform:Uie}=require("json2csv"),B_=require("stream"),pn=Y(),eO=require("fs-extra"),vie=require("path"),Fn=F(),{promisify:aq}=require("util"),v_=Y(),{handleHDBError:It,hdb_errors:Bie}=te(),{HDB_ERROR_MSGS:Hr,HTTP_STATUS_CODES:wt}=Bie,{streamAsJSON:Hie}=(Jg(),re(tU)),{Upload:qie}=require("@aws-sdk/lib-storage"),iq=["search_by_value","search_by_hash","sql","search_by_conditions"],oq=["json","csv"],cq="json",lq="csv",xie="Successfully exported JSON locally.",Fie="Successfully exported CSV locally.",Gie=1e3,kie=tO.searchByHash,$ie=tO.searchByValue,Vie=aq(Die.evaluateSQL),Yie=aq(B_.finished);fq.exports={export_to_s3:jie,export_local:Kie,toCsvStream:uq};async function Kie(e){Fn.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=_q(e);if(!pn.isEmpty(t))throw Fn.error(t),It(new Error,t,wt.BAD_REQUEST,void 0,void 0,!0);if(pn.isEmpty(e.path))throw Fn.error(Hr.MISSING_VALUE("path")),It(new Error,Hr.MISSING_VALUE("path"),wt.BAD_REQUEST,void 0,void 0,!0);let r=(pn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(vie.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=pn.buildFolderPath(e.path,r);await Wie(e.path);let s=await dq(e);return await Qie(n,e.format,s)}a(Kie,"export_local");async function Wie(e){if(Fn.trace("in confirmPath"),pn.isEmptyOrZeroLength(e))throw It(new Error,`Invalid path: ${e}`,wt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await eO.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,Fn.error(n),It(new Error,n,wt.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw Fn.error(r),It(new Error,r,wt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Wie,"confirmPath");async function Qie(e,t,r){if(Fn.trace("in saveToLocal"),v_.isEmptyOrZeroLength(e))throw It(new Error,Hr.INVALID_VALUE("file_path"),wt.BAD_REQUEST,void 0,void 0,!0);if(v_.isEmptyOrZeroLength(t))throw It(new Error,Hr.INVALID_VALUE("Source format"),wt.BAD_REQUEST,void 0,void 0,!0);if(v_.isEmpty(r))throw It(new Error,Hr.NOT_FOUND("Data"),wt.BAD_REQUEST,void 0,void 0,!0);if(t===cq){let n=eO.createWriteStream(e);return Hie(r).pipe(n),await Yie(n),{message:xie,path:e}}else if(t===lq){let n=eO.createWriteStream(e),s=B_.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(u=>({label:u,value:u})));let c={objectMode:!0};return await new Mie(i,c).fromInput(s).toOutput(n).promise(!1),{message:Fie,path:e}}throw It(new Error,Hr.INVALID_VALUE("format"),wt.BAD_REQUEST)}a(Qie,"saveToLocal");async function jie(e){if(!e.s3||Object.keys(e.s3).length===0)throw It(new Error,Hr.MISSING_VALUE("S3 object"),wt.BAD_REQUEST);if(pn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw It(new Error,Hr.MISSING_VALUE("aws_access_key_id"),wt.BAD_REQUEST);if(pn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw It(new Error,Hr.MISSING_VALUE("aws_secret_access_key"),wt.BAD_REQUEST);if(pn.isEmptyOrZeroLength(e.s3.bucket))throw It(new Error,Hr.MISSING_VALUE("bucket"),wt.BAD_REQUEST);if(pn.isEmptyOrZeroLength(e.s3.key))throw It(new Error,Hr.MISSING_VALUE("key"),wt.BAD_REQUEST);if(pn.isEmptyOrZeroLength(e.s3.region))throw It(new Error,Hr.MISSING_VALUE("region"),wt.BAD_REQUEST);let t=_q(e);if(!pn.isEmpty(t))throw It(new Error,t,wt.BAD_REQUEST);Fn.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await dq(e)}catch(l){throw Fn.error(l),l}let n,s=await Pie.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new B_.PassThrough;if(e.format===lq){i=e.s3.key+".csv";let l=uq(r,r.getColumns?.());l.on("error",_=>{throw _}),l.pipe(o)}else if(e.format===cq){i=e.s3.key+".json";let l=new B_.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%Gie===0&&(l.push(u),u="")}u.length!==0&&l.push(u),l.push("]"),l.push(null)}else throw It(new Error,Hr.INVALID_VALUE("format"),wt.BAD_REQUEST);return new qie({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(jie,"export_to_s3");function uq(e,t){let r=B_.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 Uie(n,s);return r.pipe(i)}a(uq,"toCsvStream");function _q(e){if(Fn.trace("in exportCoreValidation"),pn.isEmpty(e.format))return"format missing";if(oq.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${oq.join(", ")}`;let t=e.search_operation.operation;if(pn.isEmpty(t))return"search_operation.operation missing";if(iq.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${iq.join(", ")}`}a(_q,"exportCoreValidation");async function dq(e){Fn.trace("in getRecords");let t,r;if(v_.isEmpty(e.search_operation)||v_.isEmptyOrZeroLength(e.search_operation.operation))throw It(new Error,Hr.INVALID_VALUE("Search operation"),wt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=$ie;break;case"search_by_hash":t=kie;break;case"search_by_conditions":t=tO.searchByConditions;break;case"sql":t=Vie;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Fn.error(r),It(new Error,r,wt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(dq,"getRecords")});var Rq={};$e(Rq,{contentTypes:()=>oO,findBestSerializer:()=>zh,getDeserializer:()=>Ia,registerContentHandlers:()=>aO,serialize:()=>Jh,serializeMessage:()=>Eo});function zie(e){try{return e?.[0]===123?iO(e):e}catch{return e}}function aO(e){e.register(Xie,{serializers:[{regex:/^application\/json$/,serializer:Ku},{regex:/^application\/cbor$/,serializer:function(t){return new ya.EncoderStream(q_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?jh.Readable.from((0,Hs.encodeIter)(t,q_)):(0,Hs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,rO.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Hs.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,ya.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 p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=Qt.get(_);if(E){let h=(E.q||1)*d;h>s&&(n=E,i=E.type||_,s=h,o=f)}}if(!n){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Qt.keys()).join(", "))}};n=Qt.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function Jh(e,t,r){let n=hq&&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>hq?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Ri.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function Eo(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return H_(e);let r=t.serialize;if(r)return r(e);let n=zh(t);return r=t.serialize=n.serializer.serialize,r(e)}function Zie(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 Ia(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Qt.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Qt.get(e)?.deserialize||mq(e,n);return o=>Zie(o).then(i)}return e&&Qt.get(e)?.deserialize||mq(e,n)}function mq(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 iO(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function eoe(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 rO,Hs,ya,Ri,jh,pq,nO,sO,Sq,Tq,H_,iO,q_,Qt,oO,Eq,gq,Jie,Xie,hq,Vc=Ne(()=>{Jg();rO=H(Qh()),Hs=require("msgpackr"),ya=require("cbor-x"),Ri=require("zlib"),jh=require("stream");Er();pq=require("../index"),nO=H(J()),sO=H(C()),Sq=H(require("yaml")),Tq=nO.default.get(sO.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,H_=Tq?ua:JSON.stringify,iO=Tq?zg:JSON.parse,q_={useRecords:!1,useToJSON:!0},Qt=new Map,oO=Qt;ft.contentTypes=oO;(0,pq._assignPackageExport)("contentTypes",oO);Qt.set("application/json",{serializeStream:Ku,serialize:H_,deserialize:iO,q:.8});Eq=new ya.Encoder(q_);Qt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new ya.EncoderStream(q_).end(e)},serialize:Eq.encode,deserialize:Eq.decode,q:1});Qt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?jh.Readable.from((0,Hs.encodeIter)(e,q_)):(0,Hs.pack)(e)},serialize:Hs.pack,deserialize:Hs.unpack,q:.9});Qt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,rO.toCsvStream)(e,e?.getColumns?.())},q:.1});Qt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Qt.set("text/yaml",{serialize(e){return Sq.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Qt.set("text/event-stream",{serializeStream:function(e){return jh.Readable.from(eoe(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+`
16
+ `,""):null}catch(f){f.stderr?i[l].npm_error=dH(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 Kc.info(`finished installModules with response ${i}`),i}a(lse,"installModules");function dH(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(dH,"parseNPMStdErr");async function use(e){Kc.info(`starting auditModules for request: ${e}`);let t=EH(e);if(t)throw Vc(t,t.message,Yc.BAD_REQUEST);let{projects:r}=e;await Lh(),await fH(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Ch.join(DA,o);n[o]={npm_output:null,npm_error:null};try{let l=await w_("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=dH(l.stderr)}}return Kc.info(`finished auditModules with response ${n}`),n}a(use,"auditModules");async function Lh(){try{return await w_("npm -v"),!0}catch{throw Vc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Yc.BAD_REQUEST,void 0,void 0,!0)}}a(Lh,"checkNPMInstalled");async function fH(e){if(!Array.isArray(e)||e.length===0)throw Vc(new Error,"projects argument must be an array with at least 1 element",Yc.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=Ch.join(DA,i.toString());if(!await lH.pathExists(o)){t.push(i);continue}let l=Ch.join(o,"package.json");await lH.pathExists(l)||r.push(i)}if(t.length>0)throw Vc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Yc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Vc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Yc.BAD_REQUEST,void 0,void 0,!0)}a(fH,"checkProjectPaths");function EH(e){let t=wh.object({projects:wh.array().min(1).items(wh.string()).required(),dry_run:wh.boolean().default(!1)});return sse.validateBySchema(e,t)}a(EH,"modulesValidator")});var MA=g((LOe,gH)=>{"use strict";var Wc=require("fs-extra"),PA=require("path"),Ph=G(),mH=W(),Mh=C(),TH=J(),_se=ft();gH.exports=dse;async function dse(){let e=fse(),t=TH.get(Mh.CONFIG_PARAMS.ROOTPATH),r=PA.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Mh.PACKAGE_ROOT}},s=PA.join(t,"node_modules");await Wc.ensureDir(s);let i,o=!0,c=!1;try{i=await Wc.readJson(r)}catch(l){if(mH.isEmptyOrZeroLength(e))return;if(l.code!==Mh.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!mH.isEmptyOrZeroLength(e)){for(let{name:l,package:_}of e){let u=await pH(_);n.dependencies[l]=u+_}if(!o){Ph.notify("Installing components"),await SH(r,n,null);return}for(let{name:l,package:_}of e){let u=i.dependencies[l],d=await pH(_);if(u===void 0||u!==d+_){c=!0;break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Ph.notify("Removing component",l),c=!0);c&&(Ph.notify("Updating components."),await SH(r,n,i))}a(dse,"installComponents");function fse(){let e=_se.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(fse,"getComponentsConfig");async function pH(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":PA.extname(e)||await Wc.pathExists(e)?"file:":"github:"}a(pH,"getPkgPrefix");async function SH(e,t,r){Ph.trace("npm installing components package.json",t),await Wc.writeFile(e,JSON.stringify(t,null," "));try{await Dh().installAllRootModules(TH.get(Mh.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await Wc.writeFile(e,JSON.stringify(r,null," ")):await Wc.unlink(e),n}}a(SH,"installPackages")});var Uh=g((MOe,NH)=>{"use strict";var Ve=require("fs-extra"),UA=require("fast-glob"),Oe=require("path"),AH=require("tar-fs"),POe=require("uuid").v4,vA=require("normalize-path"),Us=cH(),Mt=G(),je=C(),At=J(),C_=ft(),Ese=W(),{PACKAGE_ROOT:hse}=C(),{handleHDBError:kt,hdb_errors:mse}=re(),{basename:pse}=require("path"),Sse=MA(),OH=J(),Tse=C(),{Readable:gse}=require("stream"),{isMainThread:Rse}=require("worker_threads"),{HDB_ERROR_MSGS:Na,HTTP_STATUS_CODES:$t}=mse,Ase=Oe.join(hse,"application-template"),RH=Oe.join(At.get(je.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Ose(){Mt.trace("getting custom api status");let e={};try{e={port:At.get(je.CONFIG_PARAMS.HTTP_PORT),directory:At.get(je.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw kt(new Error,Na.FUNCTION_STATUS,$t.INTERNAL_SERVER_ERROR,Mt.ERR,t)}return e}a(Ose,"customFunctionsStatus");function Nse(){Mt.trace("getting custom api endpoints");let e={},t=At.get(je.CONFIG_PARAMS.COMPONENTSROOT);try{UA.sync(vA(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:UA.sync(vA(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:UA.sync(vA(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw kt(new Error,Na.GET_FUNCTIONS,$t.INTERNAL_SERVER_ERROR,Mt.ERR,r)}return e}a(Nse,"getCustomFunctions");function bse(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=Us.getDropCustomFunctionValidator(e);if(t)throw kt(t,t.message,$t.BAD_REQUEST);Mt.trace("getting custom api endpoint file content");let r=At.get(je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=Oe.join(r,n,s,i+".js");try{return Ve.readFileSync(o,{encoding:"utf8"})}catch(c){throw kt(new Error,Na.GET_FUNCTION,$t.INTERNAL_SERVER_ERROR,Mt.ERR,c)}}a(bse,"getCustomFunction");function yse(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=Us.setCustomFunctionValidator(e);if(t)throw kt(t,t.message,$t.BAD_REQUEST);Mt.trace("setting custom function file content");let r=At.get(je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return Ve.outputFileSync(Oe.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw kt(new Error,Na.SET_FUNCTION,$t.INTERNAL_SERVER_ERROR,Mt.ERR,c)}}a(yse,"setCustomFunction");function Ise(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=Us.getDropCustomFunctionValidator(e);if(t)throw kt(t,t.message,$t.BAD_REQUEST);Mt.trace("dropping custom function file");let r=At.get(je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return Ve.unlinkSync(Oe.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw kt(new Error,Na.DROP_FUNCTION,$t.INTERNAL_SERVER_ERROR,Mt.ERR,o)}}a(Ise,"dropCustomFunction");function wse(e){e.project&&(e.project=Oe.parse(e.project).name);let t=Us.addComponentValidator(e);if(t)throw kt(t,t.message,$t.BAD_REQUEST);Mt.trace("adding component");let r=At.get(je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Oe.join(r,n);return Ve.mkdirSync(s,{recursive:!0}),Ve.copySync(Ase,s),`Successfully added project: ${n}`}catch(s){throw kt(new Error,Na.ADD_FUNCTION,$t.INTERNAL_SERVER_ERROR,Mt.ERR,s)}}a(wse,"addComponent");function Cse(e){e.project&&(e.project=Oe.parse(e.project).name);let t=Us.dropCustomFunctionProjectValidator(e);if(t)throw kt(t,t.message,$t.BAD_REQUEST);Mt.trace("dropping custom function project");let r=At.get(je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=At.get(je.CONFIG_PARAMS.APPS);if(!Ese.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return C_.updateConfigValue(je.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Oe.join(r,n);return Ve.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw kt(new Error,Na.DROP_FUNCTION_PROJECT,$t.INTERNAL_SERVER_ERROR,Mt.ERR,i)}}a(Cse,"dropCustomFunctionProject");async function Lse(e){e.project&&(e.project=Oe.parse(e.project).name);let t=Us.packageComponentValidator(e);if(t)throw kt(t,t.message,$t.BAD_REQUEST);let r=At.get(je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Mt.trace("packaging component",n);let s;try{s=await Ve.realpath(Oe.join(r,n))}catch(l){if(l.code!==je.NODE_ERROR_CODES.ENOENT)throw l;try{s=await Ve.realpath(Oe.join(At.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 Ve.ensureDir(RH);let i=Oe.join(RH,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:l=>l.includes(Oe.join(s,"node_modules"))}),AH.pack(s,o).pipe(Ve.createWriteStream(i,{overwrite:!0})),await new Promise(l=>setTimeout(l,2e3));let c=Ve.readFileSync(i,{encoding:"base64"});return await Ve.remove(i),{project:n,payload:c}}a(Lse,"packageComponent");async function Dse(e){e.project&&(e.project=Oe.parse(e.project).name);let t=Us.deployComponentValidator(e);if(t)throw kt(t,t.message,$t.BAD_REQUEST);let r=At.get(je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(Mt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=Oe.join(r,n),i="file:"+o,await Ve.ensureDir(o);let f=gse.from(Buffer.from(s,"base64"));await new Promise((h,p)=>{f.pipe(AH.extract(o,{finish:h})).on("error",p)});let E=await Ve.readdir(o);E.length===1&&E[0]==="package"&&(await Ve.copy(Oe.join(o,"package"),o),await Ve.remove(Oe.join(o,"package")))}if(await C_.addConfig(n,{package:i}),!s){await Sse();let f=OH.get(Tse.CONFIG_PARAMS.ROOTPATH);o=Oe.join(f,"node_modules",n)}if(Rse)return;let c=new Map;c.isWorker=!0;let l=(Bh(),ne(vh)),_;l.setErrorReporter(f=>_=f);let u=pse(o),d=l.component_errors.get(u);try{await l.loadComponent(o,c)}finally{l.component_errors.set(u,d)}if(_)throw _;return Mt.info("Installed component"),`Successfully deployed: ${n}`}a(Dse,"deployComponent");async function Pse(){let e=C_.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let l=await Ve.readdir(o,{withFileTypes:!0});for(let _ of l){let u=_.name;if(u.startsWith(".")||u==="node_modules")continue;let d=Oe.join(o,u);if(_.isDirectory()||_.isSymbolicLink()){let f={name:u,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Ve.stat(d),E={name:Oe.basename(u),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(l){return Mt.warn("Error loading package",l),{error:l.toString(),entries:[]}}},"walk_dir"),n=await r(At.get(je.CONFIG_PARAMS.COMPONENTSROOT),{name:At.get(je.CONFIG_PARAMS.COMPONENTSROOT).split(Oe.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(Oe.join(At.get(je.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(Bh(),ne(vh)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return n}a(Pse,"getComponents");async function Mse(e){let t=Us.getComponentFileValidator(e);if(t)throw kt(t,t.message,$t.BAD_REQUEST);let n=C_.getConfigObj()[e.project]||e.project==="harperdb"?Oe.join(OH.get(je.CONFIG_PARAMS.ROOTPATH),"node_modules"):At.get(je.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ve.stat(Oe.join(n,e.project,e.file));return{message:await Ve.readFile(Oe.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 '${Oe.join(e.project,e.file)}'`):i}}a(Mse,"getComponentFile");async function Use(e){let t=Us.setComponentFileValidator(e);if(t)throw kt(t,t.message,$t.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Oe.join(At.get(je.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Ve.ensureFile(n),await Ve.outputFile(n,e.payload,r)):await Ve.ensureDir(n),"Successfully set component: "+e.file}a(Use,"setComponentFile");async function vse(e){let t=Us.dropComponentFileValidator(e);if(t)throw kt(t,t.message,$t.BAD_REQUEST);let r=e.file?Oe.join(e.project,e.file):e.project,n=Oe.join(At.get(je.CONFIG_PARAMS.COMPONENTSROOT),r);return await Ve.pathExists(n)&&await Ve.remove(n),C_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(vse,"dropComponent");NH.exports={customFunctionsStatus:Ose,getCustomFunctions:Nse,getCustomFunction:bse,setCustomFunction:yse,dropCustomFunction:Ise,addComponent:wse,dropCustomFunctionProject:Cse,packageComponent:Lse,deployComponent:Dse,getComponents:Pse,getComponentFile:Mse,setComponentFile:Use,dropComponent:vse}});var BA=g((vOe,yH)=>{"use strict";var vs=require("joi"),bH=tt();yH.exports={readTransactionLogValidator:Bse,deleteTransactionLogsBeforeValidator:Hse};function Bse(e){let t=vs.object({schema:vs.string().required(),table:vs.string().required(),from:vs.date().timestamp(),to:vs.date().timestamp(),limit:vs.number().min(1)});return bH.validateBySchema(e,t)}a(Bse,"readTransactionLogValidator");function Hse(e){let t=vs.object({schema:vs.string().required(),table:vs.string().required(),timestamp:vs.date().timestamp().required()});return bH.validateBySchema(e,t)}a(Hse,"deleteTransactionLogsBeforeValidator")});var qh=g((HOe,DH)=>{"use strict";var HA=C(),Hh=Et(),IH=W(),wH=J(),CH=ci(),{handleHDBError:Qc,hdb_errors:qse}=re(),{HTTP_STATUS_CODES:jc}=qse,{readTransactionLogValidator:xse,deleteTransactionLogsBeforeValidator:Fse}=BA(),LH="This operation relies on clustering and cannot run with it disable.",Gse="Logs successfully deleted from transaction log.",kse="All logs successfully deleted from transaction log.";DH.exports={readTransactionLog:$se,deleteTransactionLogsBefore:Vse};async function*$se(e){let t=xse(e);if(t)throw Qc(t,t.message,jc.BAD_REQUEST,void 0,void 0,!0);if(!wH.get(HA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Qc(new Error,LH,jc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=IH.checkSchemaTableExist(r,n);if(s)throw Qc(new Error,s,jc.NOT_FOUND,void 0,void 0,!0);let i=CH.createNatsTableStreamName(r,n),o=await Hh.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let l=Math.floor(c?.nats_timestamp/1e6);if(e.to&&l>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:l,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===HA.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a($se,"readTransactionLog");async function Vse(e){let t=Fse(e);if(t)throw Qc(t,t.message,jc.BAD_REQUEST,void 0,void 0,!0);if(!wH.get(HA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Qc(new Error,LH,jc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=IH.checkSchemaTableExist(r,n);if(i)throw Qc(new Error,i,jc.NOT_FOUND,void 0,void 0,!0);let o=CH.createNatsTableStreamName(r,n),{jsm:c}=await Hh.getNATSReferences(),l=await Hh.getStreamInfo(o),_=new Date(l.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let u=Gse,d,f=new Date(l.state.last_ts).getTime();return s>f?(d=l.state.last_seq+1,u=kse):d=(await Hh.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),u}a(Vse,"deleteTransactionLogsBefore")});var MH=g((xOe,PH)=>{"use strict";var qA=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};PH.exports=qA});var vH=g((GOe,UH)=>{"use strict";var xA=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};UH.exports=xA});var GA=g(($Oe,HH)=>{"use strict";var BH=MH(),Yse=vH(),{HDB_ERROR_MSGS:Kse}=Yr(),FA=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Kse.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 BH(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Yse(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 BH(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}};HH.exports=FA});var kh=g((YOe,ZH)=>{"use strict";var kA=Tr(),xh=Sr(),vn=vE(),P_=Wi(),$A=Xo(),Wse=uR(),Qse=JU(),M_=Rr(),Fh=xE(),Ut=G(),jse=RR(),zse=c_(),Jse=rA(),Xse=ZE(),Zse=th(),eie=nA(),tie=sh(),rie=oh(),VA=ch(),Si=W(),nie=W0(),YA=uh(),FH=Ra(),Un=C(),GH=KB(),sie=_i(),kH=s_(),$H=(yh(),ne(N_)),VH=ft(),fn=Uh(),iie=require("alasql"),YH=qh(),KH=Dh(),WH=GA(),{handleHDBError:Pr,hdb_errors:QH}=re(),{HDB_ERROR_MSGS:jt,HTTP_STATUS_CODES:L_}=QH,$=new Map,jH="delete",fo="insert",Ti="read",ba="update",D_="describe",qH=P_.describeSchema.name,xH=P_.describeTable.name,zH={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},oie="catchup",aie="handleGetJob",cie="handleGetJobsByStartDate",Gh={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},lie=[vn.createTable.name,vn.createAttribute.name,vn.dropTable.name,vn.dropAttribute.name],JH={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},j=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};$.set(kA.insert.name,new j(!1,[fo]));$.set(kA.update.name,new j(!1,[ba]));$.set(kA.upsert.name,new j(!1,[fo,ba]));$.set(xh.searchByConditions.name,new j(!1,[Ti]));$.set(xh.searchByHash.name,new j(!1,[Ti]));$.set(xh.searchByValue.name,new j(!1,[Ti]));$.set(xh.search.name,new j(!1,[Ti]));$.set(vn.createSchema.name,new j(!0,[]));$.set(vn.createTable.name,new j(!0,[]));$.set(vn.createAttribute.name,new j(!1,[fo]));$.set(vn.dropSchema.name,new j(!0,[]));$.set(vn.dropTable.name,new j(!0,[]));$.set(vn.dropAttribute.name,new j(!0,[]));$.set(P_.describeSchema.name,new j(!1,[Ti]));$.set(P_.describeTable.name,new j(!1,[Ti]));$.set($A.deleteRecord.name,new j(!1,[jH]));$.set(M_.addUser.name,new j(!0,[]));$.set(M_.alterUser.name,new j(!0,[]));$.set(M_.dropUser.name,new j(!0,[]));$.set(M_.listUsersExternal.name,new j(!0,[]));$.set(Fh.listRoles.name,new j(!0,[]));$.set(Fh.addRole.name,new j(!0,[]));$.set(Fh.alterRole.name,new j(!0,[]));$.set(Fh.dropRole.name,new j(!0,[]));$.set(jse.name,new j(!0,[]));$.set(zse.name,new j(!0,[]));$.set(Jse.name,new j(!0,[]));$.set(Xse.name,new j(!0,[]));$.set(Zse.name,new j(!0,[]));$.set(eie.name,new j(!0,[]));$.set(VA.setRoutes.name,new j(!0,[]));$.set(VA.getRoutes.name,new j(!0,[]));$.set(VA.deleteRoutes.name,new j(!0,[]));$.set(VH.setConfiguration.name,new j(!0,[]));$.set(tie.clusterStatus.name,new j(!0,[]));$.set(rie.name,new j(!0,[]));$.set(YA.getFingerprint.name,new j(!0,[]));$.set(YA.setLicense.name,new j(!0,[]));$.set($A.deleteFilesBefore.name,new j(!0,[]));$.set($A.deleteAuditLogsBefore.name,new j(!0,[]));$.set(FH.restart.name,new j(!0,[]));$.set(FH.restartService.name,new j(!0,[]));$.set(Wse.name,new j(!0,[]));$.set(Qse.name,new j(!0,[Ti]));$.set(sie.systemInformation.name,new j(!0,[]));$.set(VH.getConfiguration.name,new j(!0,[]));$.set(YH.readTransactionLog.name,new j(!0,[]));$.set(YH.deleteTransactionLogsBefore.name,new j(!0,[]));$.set(KH.installModules.name,new j(!0,[]));$.set(KH.auditModules.name,new j(!0,[]));$.set(kH.createTokens.name,new j(!1,[]));$.set(kH.refreshOperationToken.name,new j(!1,[]));$.set($H.login.name,new j(!1,[]));$.set($H.logout.name,new j(!1,[]));$.set(fn.customFunctionsStatus.name,new j(!0,[]));$.set(fn.getCustomFunctions.name,new j(!0,[]));$.set(fn.getComponents.name,new j(!0,[]));$.set(fn.getComponentFile.name,new j(!0,[]));$.set(fn.setComponentFile.name,new j(!0,[]));$.set(fn.dropComponent.name,new j(!0,[]));$.set(fn.getCustomFunction.name,new j(!0,[]));$.set(fn.setCustomFunction.name,new j(!0,[]));$.set(fn.dropCustomFunction.name,new j(!0,[]));$.set(fn.addComponent.name,new j(!0,[]));$.set(fn.dropCustomFunctionProject.name,new j(!0,[]));$.set(fn.packageComponent.name,new j(!0,[]));$.set(fn.deployComponent.name,new j(!0,[]));$.set(YA.getRegistrationInfo.name,new j(!1,[]));$.set(M_.userInfo.name,new j(!1,[]));$.set(P_.describeAll.name,new j(!1,[]));$.set(aie,new j(!1,[]));$.set(cie,new j(!0,[]));$.set(oie,new j(!0,[]));$.set(Gh.CSV_DATA_LOAD,new j(!1,[fo,ba]));$.set(Gh.CSV_URL_LOAD,new j(!1,[fo,ba]));$.set(Gh.CSV_FILE_LOAD,new j(!1,[fo,ba]));$.set(Gh.IMPORT_FROM_S3,new j(!1,[fo,ba]));$.set(JH.EXPORT_TO_S3,new j(!0,[]));$.set(JH.EXPORT_LOCAL,new j(!0,[]));$.set(Un.VALID_SQL_OPS_ENUM.DELETE,new j(!1,[jH]));$.set(Un.VALID_SQL_OPS_ENUM.SELECT,new j(!1,[Ti]));$.set(Un.VALID_SQL_OPS_ENUM.INSERT,new j(!1,[fo]));$.set(Un.VALID_SQL_OPS_ENUM.UPDATE,new j(!1,[ba]));ZH.exports={verifyPerms:_ie,verifyPermsAst:uie,verifyBulkLoadAttributePerms:fie};function uie(e,t,r){if(Si.isEmptyOrZeroLength(e))throw Ut.info("verify_perms_ast has an empty user parameter"),Pr(new Error);if(Si.isEmptyOrZeroLength(t))throw Ut.info("verify_perms_ast has an empty user parameter"),Pr(new Error);if(Si.isEmptyOrZeroLength(r))throw Ut.info("verify_perms_ast has a null operation parameter"),Pr(new Error);try{let n=new WH,s=new nie(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Ut.info("No schemas defined in verifyPermsAst(), will not continue."),Pr(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&zH[r])throw Pr(new Error,jt.DROP_SYSTEM,L_.FORBIDDEN);if(c&&!l)return null;let _=GH.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof iie.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=XH(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]),p=WA(t.role.permission,f,d[E]);KA(h,p,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw Pr(n)}}a(uie,"verifyPermsAst");function _ie(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Ut.info("null required parameter in verifyPerms"),Pr(new Error,jt.DEFAULT_INVALID_REQUEST,L_.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new WH;if(Si.isEmptyOrZeroLength(e.hdb_user.role)||Si.isEmptyOrZeroLength(e.hdb_user.role.permission))return Ut.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(jt.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(Un.SYSTEM_SCHEMA_NAME)||s===Un.SYSTEM_SCHEMA_NAME;if(u&&zH[r])throw Pr(new Error,jt.DROP_SYSTEM,L_.FORBIDDEN);if(l&&!u||_===!0&&(r===vn.createSchema.name||r===vn.dropSchema.name))return null;if(lie.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=GH.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===qH||r===xH){if(s===Un.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(jt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===qH&&(!d[s]||!d[s][D_]))return c.handleInvalidItem(jt.SCHEMA_NOT_FOUND(s));if(r===xH&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][D_]))return c.handleInvalidItem(jt.TABLE_NOT_FOUND(s,i))}}let f=XH(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&&Un.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[s].tables[i];S[Un.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(T=>T[Un.PERMS_CRUD_ENUM.READ]).forEach(T=>{p.push(T.attribute_name)}):p=global.hdb_schema[s][i].attributes.map(O=>O.attribute),e.get_attributes=p)}let E=die(e),h=WA(e.hdb_user.role.permission,s,i);return KA(E,h,r,i,s,c,n),c.getPermsResponse()}a(_ie,"verifyPerms");function XH(e,t,r,n,s){if(Si.arrayHasEmptyValues([e,t,r]))throw Ut.info("hasPermissions has an invalid parameter"),Pr(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 Ut.info(`operation ${t} not found.`),Pr(new Error,jt.OP_NOT_FOUND(t),L_.BAD_REQUEST);if($.get(t)&&$.get(t).requires_su)return Ut.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(jt.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][D_]===!1){n.addInvalidItem(jt.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(jt.SCHEMA_NOT_FOUND(l));continue}let _=r.get(l);for(let u of _){let d=o[l].tables[u];if(!d||d[D_]===!1)n.addInvalidItem(jt.TABLE_NOT_FOUND(l,u));else try{let f=[],E=$.get(t).perms;!Si.isEmpty(s)&&E.includes(s)&&(E=[s]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(Ut.info(`Required ${p} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&n.addUnauthorizedTable(l,u,f)}catch(f){let E=jt.UNKNOWN_OP_AUTH_ERROR(t,l,u);throw Ut.error(E),Ut.error(f),Pr(QH.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(XH,"hasPermissions");function KA(e,t,r,n,s,i,o){if(!e||!t)throw Ut.info("no attributes specified in checkAttributePerms."),Pr(new Error);let c=$.get(r).perms;if(!c||c==="")throw Ut.info(`no permissions found for ${r} in checkAttributePerms().`),Pr(new Error);if(Si.isEmptyOrZeroLength(t))return Ut.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[D_]===!1){i.addInvalidItem(jt.ATTR_NOT_FOUND(s,n,u),s,n);continue}if(c)for(let f of c){if(Un.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Ti)throw Pr(new Error,jt.SYSTEM_TIMESTAMP_PERMS_ERR,L_.FORBIDDEN);d[f]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(f):l[d.attribute_name]=[f])}}else i.addInvalidItem(jt.ATTR_NOT_FOUND(s,n,u),s,n)}let _=Object.keys(l);_.length>0&&i.addUnauthorizedAttributes(_,s,n,l)}a(KA,"checkAttributePerms");function die(e){let t=new Set;try{if(e.action)return t;if(e.operation===Un.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){Ut.info(r)}return t}a(die,"getRecordAttributes");function WA(e,t,r){let n=new Map;if(Si.isEmpty(e))return Ut.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{Ut.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(WA,"getAttributePermissions");function fie(e,t,r,n,s,i,o){let c=new Set(i),l=WA(e,n,s);KA(c,l,t,s,n,o,r)}a(fie,"verifyBulkLoadAttributePerms")});var Vh=g((WOe,sq)=>{"use strict";sq.exports={evaluateSQL:yie,processAST:nq,convertSQLToAST:rq,checkASTPermissions:tq};var Eie=Tr(),eq=require("util"),hie=eq.callbackify(Eie.insert),mie=Sr().search,pie=cU().update,Sie=eq.callbackify(pie),Tie=uU().convertDelete,Eo=require("alasql"),gie=kh(),$h=G(),Rie=qf(),Aie=W(),U_=C(),{hdb_errors:Oie,handleHDBError:QA}=re(),{HTTP_STATUS_CODES:jA}=Oie;Rie(Eo);var Nie=403,bie="There was a problem performing this insert. Please check the logs and try again.",zA=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function yie(e,t){let r=e.parsed_sql_object;if(!r){r=rq(e.sql);let n,s=r.ast.statements[0];if(s instanceof Eo.yy.Insert?n=s.into.databaseid:s instanceof Eo.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Eo.yy.Update||s instanceof Eo.yy.Delete?n=s.table.databaseid:$h.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Eo.yy.Select)&&Aie.isEmptyOrZeroLength(n))return t("No schema specified",null)}nq(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(yie,"evaluateSQL");function tq(e,t){let r;try{r=gie.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(tq,"checkASTPermissions");function rq(e){let t=new zA;if(!e)throw QA(new Error,"The 'sql' parameter is missing from the request body",jA.BAD_REQUEST);try{let r=e.trim(),n=Eo.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
18
+ `);throw n[1]?QA(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,jA.BAD_REQUEST):QA(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",jA.BAD_REQUEST)}return t}a(rq,"convertSQLToAST");function nq(e,t,r){try{let n=Iie;if(!e.bypass_auth&&!t.permissions_checked){let i=tq(e,t);if(i&&i.length>0)return r(Nie,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case U_.VALID_SQL_OPS_ENUM.SELECT:n=mie,s=t.ast.statements[0];break;case U_.VALID_SQL_OPS_ENUM.INSERT:n=wie;break;case U_.VALID_SQL_OPS_ENUM.UPDATE:n=Sie;break;case U_.VALID_SQL_OPS_ENUM.DELETE:n=Tie;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(nq,"processAST");function Iie(e,t){$h.info(e),t("unknown sql statement")}a(Iie,"nullFunction");function wie({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=Cie(i,e.values)}catch(o){return r(o)}hie(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){$h.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(wie,"convertInsert");function Cie(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]]=Eo.compile(`SELECT ${s.toString()} AS [${U_.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw $h.error(r),new Error(bie)}}a(Cie,"createDataObjects")});var JA=g((jOe,oq)=>{"use strict";var{S3:Lie,GetObjectCommand:Die}=require("@aws-sdk/client-s3");oq.exports={getFileStreamFromS3:Pie,getS3AuthObj:iq};async function Pie(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await iq(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Die(r))).Body}a(Pie,"getFileStreamFromS3");function iq(e,t,r){return new Lie({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(iq,"getS3AuthObj")});var Yh=g((JOe,hq)=>{"use strict";var ZA=Sr(),Mie=Vh(),Uie=JA(),{AsyncParser:vie,Transform:Bie}=require("json2csv"),B_=require("stream"),En=W(),XA=require("fs-extra"),Hie=require("path"),Bn=G(),{promisify:lq}=require("util"),v_=W(),{handleHDBError:Ot,hdb_errors:qie}=re(),{HDB_ERROR_MSGS:Mr,HTTP_STATUS_CODES:Nt}=qie,{streamAsJSON:xie}=(jg(),ne(nU)),{Upload:Fie}=require("@aws-sdk/lib-storage"),aq=["search_by_value","search_by_hash","sql","search_by_conditions"],cq=["json","csv"],uq="json",_q="csv",Gie="Successfully exported JSON locally.",kie="Successfully exported CSV locally.",$ie=1e3,Vie=ZA.searchByHash,Yie=ZA.searchByValue,Kie=lq(Mie.evaluateSQL),Wie=lq(B_.finished);hq.exports={export_to_s3:Jie,export_local:Qie,toCsvStream:dq};async function Qie(e){Bn.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=fq(e);if(!En.isEmpty(t))throw Bn.error(t),Ot(new Error,t,Nt.BAD_REQUEST,void 0,void 0,!0);if(En.isEmpty(e.path))throw Bn.error(Mr.MISSING_VALUE("path")),Ot(new Error,Mr.MISSING_VALUE("path"),Nt.BAD_REQUEST,void 0,void 0,!0);let r=(En.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Hie.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=En.buildFolderPath(e.path,r);await jie(e.path);let s=await Eq(e);return await zie(n,e.format,s)}a(Qie,"export_local");async function jie(e){if(Bn.trace("in confirmPath"),En.isEmptyOrZeroLength(e))throw Ot(new Error,`Invalid path: ${e}`,Nt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await XA.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,Bn.error(n),Ot(new Error,n,Nt.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 Bn.error(r),Ot(new Error,r,Nt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(jie,"confirmPath");async function zie(e,t,r){if(Bn.trace("in saveToLocal"),v_.isEmptyOrZeroLength(e))throw Ot(new Error,Mr.INVALID_VALUE("file_path"),Nt.BAD_REQUEST,void 0,void 0,!0);if(v_.isEmptyOrZeroLength(t))throw Ot(new Error,Mr.INVALID_VALUE("Source format"),Nt.BAD_REQUEST,void 0,void 0,!0);if(v_.isEmpty(r))throw Ot(new Error,Mr.NOT_FOUND("Data"),Nt.BAD_REQUEST,void 0,void 0,!0);if(t===uq){let n=XA.createWriteStream(e);return xie(r).pipe(n),await Wie(n),{message:Gie,path:e}}else if(t===_q){let n=XA.createWriteStream(e),s=B_.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(u=>({label:u,value:u})));let c={objectMode:!0};return await new vie(i,c).fromInput(s).toOutput(n).promise(!1),{message:kie,path:e}}throw Ot(new Error,Mr.INVALID_VALUE("format"),Nt.BAD_REQUEST)}a(zie,"saveToLocal");async function Jie(e){if(!e.s3||Object.keys(e.s3).length===0)throw Ot(new Error,Mr.MISSING_VALUE("S3 object"),Nt.BAD_REQUEST);if(En.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Ot(new Error,Mr.MISSING_VALUE("aws_access_key_id"),Nt.BAD_REQUEST);if(En.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Ot(new Error,Mr.MISSING_VALUE("aws_secret_access_key"),Nt.BAD_REQUEST);if(En.isEmptyOrZeroLength(e.s3.bucket))throw Ot(new Error,Mr.MISSING_VALUE("bucket"),Nt.BAD_REQUEST);if(En.isEmptyOrZeroLength(e.s3.key))throw Ot(new Error,Mr.MISSING_VALUE("key"),Nt.BAD_REQUEST);if(En.isEmptyOrZeroLength(e.s3.region))throw Ot(new Error,Mr.MISSING_VALUE("region"),Nt.BAD_REQUEST);let t=fq(e);if(!En.isEmpty(t))throw Ot(new Error,t,Nt.BAD_REQUEST);Bn.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await Eq(e)}catch(l){throw Bn.error(l),l}let n,s=await Uie.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new B_.PassThrough;if(e.format===_q){i=e.s3.key+".csv";let l=dq(r,r.getColumns?.());l.on("error",_=>{throw _}),l.pipe(o)}else if(e.format===uq){i=e.s3.key+".json";let l=new B_.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%$ie===0&&(l.push(u),u="")}u.length!==0&&l.push(u),l.push("]"),l.push(null)}else throw Ot(new Error,Mr.INVALID_VALUE("format"),Nt.BAD_REQUEST);return new Fie({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Jie,"export_to_s3");function dq(e,t){let r=B_.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 Bie(n,s);return r.pipe(i)}a(dq,"toCsvStream");function fq(e){if(Bn.trace("in exportCoreValidation"),En.isEmpty(e.format))return"format missing";if(cq.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${cq.join(", ")}`;let t=e.search_operation.operation;if(En.isEmpty(t))return"search_operation.operation missing";if(aq.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${aq.join(", ")}`}a(fq,"exportCoreValidation");async function Eq(e){Bn.trace("in getRecords");let t,r;if(v_.isEmpty(e.search_operation)||v_.isEmptyOrZeroLength(e.search_operation.operation))throw Ot(new Error,Mr.INVALID_VALUE("Search operation"),Nt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Yie;break;case"search_by_hash":t=Vie;break;case"search_by_conditions":t=ZA.searchByConditions;break;case"sql":t=Kie;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Bn.error(r),Ot(new Error,r,Nt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(Eq,"getRecords")});var Oq={};ke(Oq,{contentTypes:()=>sO,findBestSerializer:()=>Wh,getDeserializer:()=>Ia,registerContentHandlers:()=>iO,serialize:()=>Qh,serializeMessage:()=>_o});function Xie(e){try{return e?.[0]===123?nO(e):e}catch{return e}}function iO(e){e.register(eoe,{serializers:[{regex:/^application\/json$/,serializer:Ku},{regex:/^application\/cbor$/,serializer:function(t){return new ya.EncoderStream(q_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Kh.Readable.from((0,Bs.encodeIter)(t,q_)):(0,Bs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,eO.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Bs.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,ya.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function Wh(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 p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=Vt.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(Vt.keys()).join(", "))}};n=Vt.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function Qh(e,t,r){let n=pq&&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=Wh(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,gi.createBrotliCompress)({params:{[gi.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?gi.constants.BROTLI_MODE_TEXT:gi.constants.BROTLI_MODE_GENERIC,[gi.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>pq?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,gi.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function _o(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return H_(e);let r=t.serialize;if(r)return r(e);let n=Wh(t);return r=t.serialize=n.serializer.serialize,r(e)}function toe(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 Ia(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Vt.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Vt.get(e)?.deserialize||Sq(e,n);return o=>toe(o).then(i)}return e&&Vt.get(e)?.deserialize||Sq(e,n)}function Sq(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return n=>({contentType:e,data:n.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return nO(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function roe(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}var eO,Bs,ya,gi,Kh,Tq,tO,rO,gq,Rq,H_,nO,q_,Vt,sO,mq,Aq,Zie,eoe,pq,$c=ye(()=>{jg();eO=q(Yh()),Bs=require("msgpackr"),ya=require("cbor-x"),gi=require("zlib"),Kh=require("stream");ur();Tq=require("../index"),tO=q(J()),rO=q(C()),gq=q(require("yaml")),Rq=tO.default.get(rO.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,H_=Rq?ua:JSON.stringify,nO=Rq?Qg:JSON.parse,q_={useRecords:!1,useToJSON:!0},Vt=new Map,sO=Vt;st.contentTypes=sO;(0,Tq._assignPackageExport)("contentTypes",sO);Vt.set("application/json",{serializeStream:Ku,serialize:H_,deserialize:nO,q:.8});mq=new ya.Encoder(q_);Vt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new ya.EncoderStream(q_).end(e)},serialize:mq.encode,deserialize:mq.decode,q:1});Vt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Kh.Readable.from((0,Bs.encodeIter)(e,q_)):(0,Bs.pack)(e)},serialize:Bs.pack,deserialize:Bs.unpack,q:.9});Vt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,eO.toCsvStream)(e,e?.getColumns?.())},q:.1});Vt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Vt.set("text/yaml",{serialize(e){return gq.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Vt.set("text/event-stream",{serializeStream:function(e){return Kh.Readable.from(roe(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
19
  `),e.data){let r=e.data;typeof r=="object"&&(r=H_(r)),t+="data: "+r+`
20
20
  `}return e.id&&(t+="id: "+e.id+`
21
21
  `),e.retry&&(t+="retry: "+e.retry+`
@@ -24,81 +24,84 @@
24
24
 
25
25
  `:`data: ${e}
26
26
 
27
- `},compressible:!1,q:.8});Qt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,n]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let s=t[r];Array.isArray(s)?s.push(n):t.key=[s,n]}else t[r]=n},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});gq={type:"application/json",serializeStream:Ku,serialize:H_,deserialize:zie,q:.8};Qt.set("*/*",gq);Qt.set("",gq);a(zie,"tryJSONParse");a(aO,"registerContentHandlers");Jie=require("fastify-plugin"),Xie=Jie(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");hq=nO.default.get(sO.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Jh,"serialize");a(Eo,"serializeMessage");a(Zie,"streamToBuffer");a(Ia,"getDeserializer");a(mq,"deserializerUnknownType");a(eoe,"transformIterable")});function Iq(e){let t={openapi:toe,info:{title:"HarperDB HTTP REST interface",version:(0,yq.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,{attributes:i,primaryKey:o,prototype:c}=n.Resource;if(o=o??"id",!o)continue;let l={},_=[];if(i)for(let{type:g,name:O}of i)l[O]=new bq(Aq[g],g),_.push(new uO(O,"query",l[O]));let u=Object.keys(l),d=new uO(o,"path",new bq(Aq.ID,"ID"));d.required=!0,d.description="primary key of record";let f=new uO("property","path",{enum:u});f.required=!0,t.components.schemas[s]=new soe(l);let E=c.post!==Resource.prototype.post||c.update,h=c.hasOwnProperty("put"),p=c.hasOwnProperty("get"),S=c.hasOwnProperty("delete"),R="/"+s+"/";E&&(t.paths[R]={},t.paths[R].post=new roe(s,r,"create a new record auto-assigning a primary key")),p&&(t.paths[R]||(t.paths[R]={}),t.paths[R].get=new cO(_,r,{200:new lO({$ref:Xh+s})},"search for records by the specified property name and value")),S&&(t.paths[R]||(t.paths[R]={}),t.paths[R].delete=new Nq(_,r,"delete all the records that match the provided query",{204:new Oq})),R="/"+s+"/{"+o+"}",p&&(t.paths[R]={},t.paths[R].get=new cO([d],r,{200:new lO({$ref:Xh+s})},"retrieve a record by its primary key")),h&&(t.paths[R]||(t.paths[R]={}),t.paths[R].put=new noe([d],r,s,"create or update the record with the URL path that maps to the record's primary key")),S&&(t.paths[R]||(t.paths[R]={}),t.paths[R].delete=new Nq([d],r,"delete a record with the given primary key",{204:new Oq})),p&&f.schema.enum.length>0&&(R="/"+s+"/{"+o+"}.{property}",t.paths[R]={},t.paths[R].get=new cO([d,f],r,{200:new lO({enum:u})},"used to retrieve the specified property of the specified record"))}return t}function roe(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Xh+e}}}},this.security=t,this.responses={200:{description:_O,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function cO(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function lO(e){this.description=_O,this.content={"application/json":{schema:e}}}function Oq(){this.description="successfully processed request, no content returned to client"}function noe(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Xh+r}}}},this.responses={200:{description:_O}}}function Nq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function soe(e){this.type="object",this.properties=e}function bq(e,t){this.type=e,this.format=t}function uO(e,t,r){this.name=e,this.in=t,this.schema=r}var yq,toe,Aq,Xh,_O,wq=Ne(()=>{yq=H(Fi()),toe="3.0.3",Aq={ID:"string",Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",Any:"string",BigInt:"integer"},Xh="#/components/schemas/",_O="successful operation";a(Iq,"generateJsonApi");a(roe,"Post");a(cO,"Get");a(lO,"Response200");a(Oq,"Response204");a(noe,"Put");a(Nq,"Delete");a(soe,"ResourceSchema");a(bq,"Type");a(uO,"Parameter")});var em={};$e(em,{start:()=>aoe});async function ooe(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&cf(e);let s=new fo;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==Cq){let h=Zh.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 tt(e,()=>{if(n==="POST"||n==="PUT"||n==="PATCH"||n==="QUERY")try{e.data=Ia(r["content-type"],!0)(e.body)}catch(h){throw new F_.ClientError(h,400)}if(e.authorize=!0,i===Cq&&n==="GET")return Iq(Zh);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 F_.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new F_.ServerError(`Method ${n} is not recognized`,501)}}),u=200,d;if(_==null)u=n==="GET"||n==="HEAD"?404:204,dO.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){ioe[0]=d;let h=String.fromCharCode(34,(er[0]&63)+62,(er[0]>>6)+(er[1]<<2&63)+62,(er[1]>>4)+(er[2]<<4&63)+62,(er[2]>>2)+62,(er[3]&63)+62,(er[3]>>6)+(er[4]<<2&63)+62,(er[4]>>4)+(er[5]<<4&63)+62,(er[5]>>2)+62,(er[6]&63)+62,(er[6]>>6)+(er[7]<<2&63)+62,34),p=r["if-none-match"];p&&h==p?(_?.onDone&&_.onDone(),u=304,_=void 0):s.setIfNone("ETag",h),dO.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?wa.warn(i):wa.info(i):wa.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 aoe(e){dO=e,!Lq&&(Lq=!0,Zh=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return ooe(t,r)}),e.server.ws(async(t,r,n)=>{x_++;let s=new Qn;Dq||(Dq=!0,Lu(u=>{x_>0&&u.push({metric:"ws-connections",connections:x_,byThread:!0})}));let i;t.on("error",u=>{i=!0,wa.warn(u)});let o;t.on("message",a(function(d){o||(o=Ia(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{x_--,Dn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let l=r.url.slice(1),_=Zh.getMatch(l);if(Dn(!!_,"connection","ws","connect"),!_)t.send(Eo(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,an(h=>({count:h.count,total:x_}),"connections",r.handlerPath,"connect","ws");let u={url:_.relativeURL,async:!0},d=_.Resource;c=(await tt(r,()=>d.connect(u,s,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=Eo(E.value,r);t.send(h),an(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var wa,F_,er,ioe,dO,Cq,Lq,Zh,Dq,x_,Pq=Ne(()=>{Vc();ui();wa=H(F()),F_=H(te());lf();ql();Fo();bh();wq();er=new Uint8Array(8),ioe=new Float64Array(er.buffer,0,1),dO={},Cq="openapi";a(ooe,"http");x_=0;a(aoe,"start")});var fO=T((_Ne,Mq)=>{var{recordAction:tm,recordActionBinary:coe}=(ui(),re(Du)),loe=require("fastify-plugin"),uoe=200;Mq.exports=loe(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),tm(o,"duration",_,d,u),coe(s.raw.statusCode<400,"success",_,d,u);let f=uoe;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{tm(performance.now()-c,"transfer",_,d,u),tm(f,"bytes-sent",_,d,u)})):(f+=i?.length||0,tm(f,"bytes-sent",_,d,u));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var pO=T((dNe,qq)=>{var om=require("clone"),am=it(),_oe=Y(),sm=C(),doe=F(),rm=require("fs"),EO=require("joi"),{string:im}=EO.types(),{hdb_errors:foe,handleHDBError:G_}=te(),{HDB_ERROR_MSGS:Eoe,HTTP_STATUS_CODES:nm}=foe,{common_validators:Jc}=Os(),Uq=1e9,vq=" is required",hoe=["insert","update","upsert"],hO={database:{presence:!1,format:Jc.schema_format,length:Jc.schema_length},schema:{presence:!1,format:Jc.schema_format,length:Jc.schema_length},table:{presence:!0,format:Jc.schema_format,length:Jc.schema_length},action:{inclusion:{within:hoe,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},moe={schema:im.required(),table:im.required(),action:im.valid("insert","update","upsert")},{AWS_ACCESS_KEY:poe,AWS_SECRET:Soe,AWS_BUCKET:Toe,AWS_FILE_KEY:goe,REGION:Roe}=sm.S3_BUCKET_AUTH_KEYS,Aoe={s3:{presence:!0},[`s3.${poe}`]:{presence:!0,type:"String"},[`s3.${Soe}`]:{presence:!0,type:"String"},[`s3.${Toe}`]:{presence:!0,type:"String"},[`s3.${goe}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Roe}`]:{presence:!0,type:"String"}},Bq=om(hO);Bq.data.presence={message:vq};var Hq=om(hO);Hq.file_path.presence={message:vq};var Ooe=Object.assign(om(hO),Aoe),mO=om(moe);mO.csv_url=im.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();mO.passthrough_headers=EO.object();function Noe(e){let t=am.validateObject(e,Bq);return cm(e,t)}a(Noe,"dataObject");function boe(e){let t=am.validateBySchema(e,EO.object(mO));return cm(e,t)}a(boe,"urlObject");function yoe(e){let t=am.validateObject(e,Hq);return cm(e,t)}a(yoe,"fileObject");function Ioe(e){let t=am.validateObject(e,Ooe);return cm(e,t)}a(Ioe,"s3FileObject");function cm(e,t){if(!t){let r=_oe.checkGlobalSchemaTable(e.schema,e.table);if(r)return G_(new Error,r,nm.BAD_REQUEST);if(e.operation===sm.OPERATIONS_ENUM.CSV_FILE_LOAD){try{rm.accessSync(e.file_path,rm.constants.R_OK|rm.constants.F_OK)}catch(n){return n.code===sm.NODE_ERROR_CODES.ENOENT?G_(n,`No such file or directory ${n.path}`,nm.BAD_REQUEST):n.code===sm.NODE_ERROR_CODES.EACCES?G_(n,`Permission denied ${n.path}`,nm.BAD_REQUEST):G_(n)}try{let n=rm.statSync(e.file_path).size;if(n>Uq)return G_(new Error,Eoe.MAX_FILE_SIZE_ERR(n,Uq),nm.BAD_REQUEST)}catch(n){doe.error(n),console.error(n)}}}return t}a(cm,"postValidateChecks");qq.exports={dataObject:Noe,urlObject:boe,fileObject:yoe,s3FileObject:Ioe}});var SO=T((ENe,xq)=>{"use strict";var k_=F(),lm=C();async function woe(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===lm.OPERATIONS_ENUM.INSERT||t.operation===lm.OPERATIONS_ENUM.UPDATE||t.operation===lm.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===lm.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(woe,"callOperationFunctionAsAwait");xq.exports={callOperationFunctionAsAwait:woe}});var Gq=T((mNe,Fq)=>{"use strict";var TO=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}};Fq.exports={BulkLoadFileObject:TO,BulkLoadDataObject:gO}});var $q=T((SNe,kq)=>{"use strict";var RO=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};kq.exports=RO});var IO=T((NNe,ox)=>{"use strict";var um=Or(),dm=pO(),Coe=require("needle"),ls=C(),gNe=rt(),Xc=Y(),{handleHDBError:_t,hdb_errors:Xq}=te(),{HTTP_STATUS_CODES:tr,HDB_ERROR_MSGS:qt,CHECK_LOGS_WRAPPER:La}=Xq,Zc=F(),AO=require("papaparse");Xc.promisifyPapaParse();var us=require("fs-extra"),Loe=require("path"),{chain:Vq}=require("stream-chain"),Yq=require("stream-json/streamers/StreamArray"),Kq=require("stream-json/utils/Batch"),Wq=require("stream-chain/utils/comp"),{finished:Qq}=require("stream"),Doe=J(),Zq=SO(),Poe=ZA(),{BulkLoadFileObject:NO,BulkLoadDataObject:Moe}=Gq(),bO=$A(),{verifyBulkLoadAttributePerms:ex}=Yh(),RNe=$q(),ANe=St(),ONe=li(),{databases:Uoe}=(Ae(),re(Ge)),{coerceType:voe}=(mE(),re(Pg)),jq="No records parsed from csv file.",Ca=`${Doe.get("HDB_ROOT")}/tmp`,{schema_regex:Boe}=Os(),zq=1024*1024*2,Jq=5e3,Hoe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};ox.exports={csvDataLoad:qoe,csvURLLoad:xoe,csvFileLoad:Foe,importFromS3:Goe};async function qoe(e,t){let r=dm.dataObject(e);if(r)throw _t(r,r.message,tr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=nx(e.schema,e.table),i=AO.parse(e.data,{header:!0,skipEmptyLines:!0,transform:OO.bind(null,s),dynamicTyping:!1}),o=new bO;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&ex(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw _t(new Error,c,tr.BAD_REQUEST,void 0,void 0,!0);let l=new Moe(e.action,e.schema,e.table,i.data);return n=await Zq.callOperationFunctionAsAwait(sx,l,null),n.message===jq?jq:ix(n.records,n.number_written)}catch(s){throw Da(s)}}a(qoe,"csvDataLoad");async function xoe(e){let t=dm.urlObject(e);if(t)throw _t(t,t.message,tr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Ca}/${r}`;try{await koe(e,r)}catch(s){throw Zc.error(qt.DOWNLOAD_FILE_ERR(r)+" - "+s),_t(s,La(qt.DOWNLOAD_FILE_ERR(r)))}try{let s=new NO(this.job_operation_function.name,e.action,e.schema,e.table,n,ls.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await yO(s);return await _m(n),i}catch(s){throw await _m(n),Da(s)}}a(xoe,"csvURLLoad");async function Foe(e){let t=dm.fileObject(e);if(t)throw _t(t,t.message,tr.BAD_REQUEST,void 0,void 0,!0);let r=new NO(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,ls.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await yO(r)}catch(n){throw Da(n)}}a(Foe,"csvFileLoad");async function Goe(e){let t=dm.s3FileObject(e);if(t)throw _t(t,t.message,tr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Loe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Ca}/${s}`;let i=new NO(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await $oe(s,e);let o=await yO(i);return await _m(r),o}catch(n){throw await _m(r),Da(n)}}a(Goe,"importFromS3");async function koe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Coe("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw _t(n,s,n.statusCode,ls.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Yoe(r,e.csv_url),await Voe(t,r.raw)}a(koe,"downloadCSVFile");async function $oe(e,t){try{let r=`${Ca}/${e}`;await us.mkdirp(Ca),await us.writeFile(`${Ca}/${e}`,"",{flag:"a+"});let n=await us.createWriteStream(r),s=await Poe.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(){Zc.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Zc.error(qt.S3_DOWNLOAD_ERR+" - "+r),_t(r,La(qt.S3_DOWNLOAD_ERR))}}a($oe,"downloadFileFromS3");async function Voe(e,t){try{await us.mkdirp(Ca),await us.writeFile(`${Ca}/${e}`,t)}catch(r){throw Zc.error(qt.WRITE_TEMP_FILE_ERR),_t(r,La(qt.DEFAULT_BULK_LOAD_ERR))}}a(Voe,"writeFileToTempFolder");async function _m(e){if(e)try{await us.access(e),await us.unlink(e)}catch{Zc.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(_m,"deleteTempFile");function Yoe(e,t){if(e.statusCode!==Xq.HTTP_STATUS_CODES.OK)throw _t(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,tr.BAD_REQUEST);if(!Hoe[e.headers["content-type"]])throw _t(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,tr.BAD_REQUEST);if(!e.raw)throw _t(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,tr.BAD_REQUEST)}a(Yoe,"validateURLResponse");async function yO(e){try{let t;switch(e.file_type){case ls.VALID_S3_FILE_TYPES.CSV:t=await Koe(e);break;case ls.VALID_S3_FILE_TYPES.JSON:t=await Woe(e);break;default:throw _t(new Error,qt.DEFAULT_BULK_LOAD_ERR,tr.BAD_REQUEST,ls.LOG_LEVELS.ERROR,qt.INVALID_FILE_EXT_ERR(e))}return ix(t.records,t.number_written)}catch(t){throw Da(t)}}a(yO,"fileLoad");async function tx(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 um.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&ex(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=_t(c);r(l)}}a(tx,"validateChunk");async function rx(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Xc.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Xc.isEmpty(c)&&!Xc.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 Zq.callOperationFunctionAsAwait(sx,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=_t(c,La(qt.INSERT_CSV_ERR),tr.INTERNAL_SERVER_ERROR,ls.LOG_LEVELS.ERROR,qt.INSERT_CSV_ERR+" - "+c);r(l)}}a(rx,"insertChunk");async function Koe(e){let t={records:0,number_written:0},r=nx(e.schema,e.table);try{let n=new bO,s=us.createReadStream(e.file_path,{highWaterMark:zq});s.setEncoding("utf8"),await AO.parsePromise(s,tx.bind(null,e,n),OO.bind(null,r));let i=n.getPermsResponse();if(i)throw _t(new Error,i,tr.BAD_REQUEST);return s=us.createReadStream(e.file_path,{highWaterMark:zq}),s.setEncoding("utf8"),await AO.parsePromise(s,rx.bind(null,e,t),OO.bind(null,r)),s.destroy(),t}catch(n){throw _t(n,La(qt.PAPA_PARSE_ERR),tr.INTERNAL_SERVER_ERROR,ls.LOG_LEVELS.ERROR,qt.PAPA_PARSE_ERR+n)}}a(Koe,"callPapaParse");function nx(e,t){let r=Uoe[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>voe(i,s));return n}a(nx,"createTransformMap");function OO(e,t,r){let n=e.get(r);return n?n(t):Xc.autoCast(t)}a(OO,"typeFunction");async function Woe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new bO,s=Vq([us.createReadStream(e.file_path,{encoding:"utf-8"}),Yq.withParser(),c=>c.value,new Kq({batchSize:Jq}),Wq(async c=>{await tx(e,n,r,c)})]);await new Promise((c,l)=>{Qq(s,_=>{_?l(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw _t(new Error,i,tr.BAD_REQUEST);let o=Vq([us.createReadStream(e.file_path,{encoding:"utf-8"}),Yq.withParser(),c=>c.value,new Kq({batchSize:Jq}),Wq(async c=>{await rx(e,t,r,c)})]);return await new Promise((c,l)=>{Qq(o,_=>{_?l(_):c()}),o.resume()}),t}catch(n){throw _t(n,La(qt.INSERT_JSON_ERR),tr.INTERNAL_SERVER_ERROR,ls.LOG_LEVELS.ERROR,qt.INSERT_JSON_ERR+n)}}a(Woe,"insertJson");async function sx(e){let t={};try{e.data&&e.data.length>0&&Qoe(e.data[0])?t=await joe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Zc.info(t.message))}catch(r){throw Da(r)}return t}a(sx,"callBulkFileLoad");function Qoe(e){let t=Object.keys(e);for(let r of t)if(!Boe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Qoe,"validateColumnNames");async function joe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=um.insert;break;case"update":i=um.update;break;case"upsert":i=um.upsert;break;default:throw _t(new Error,qt.INVALID_ACTION_PARAM_ERR(n),tr.BAD_REQUEST,ls.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=Xc.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw Da(o)}}a(joe,"bulkFileLoad");function ix(e,t){return`successfully loaded ${t} of ${e} records`}a(ix,"buildResponseMsg");function Da(e){return _t(e,La(qt.DEFAULT_BULK_LOAD_ERR),tr.INTERNAL_SERVER_ERROR,ls.LOG_LEVELS.ERROR,qt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Da,"buildTopLevelErrMsg")});var cx=T((yNe,ax)=>{"use strict";var wO=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};ax.exports=wO});var _x=T((wNe,ux)=>{"use strict";var zoe=C(),lx=require("moment"),Joe=require("uuid").v4,CO=class{static{a(this,"JobObject")}constructor(){this.id=Joe(),this.type=void 0,this.start_datetime=lx().valueOf(),this.created_datetime=lx().valueOf(),this.end_datetime=void 0,this.status=zoe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};ux.exports=CO});var LO=T((LNe,px)=>{"use strict";var Xoe=require("uuid").v4,Ex=Or(),hx=Ar(),Zoe=es(),eae=hc(),tae=cx(),dt=C(),rae=_x(),nae=YE(),Gn=F(),sae=tu(),el=Y(),{promisify:iae}=require("util"),Pa=require("moment"),oae=Wh(),fm=pO(),dx=QT(),{deleteTransactionLogsBeforeValidator:aae}=qA(),{handleHDBError:cae,hdb_errors:lae}=te(),{HTTP_STATUS_CODES:uae}=lae,fx=hx.searchByValue,_ae=hx.searchByHash,dae=Ex.insert,fae=iae(oae.evaluateSQL),Eae=Ex.update;px.exports={addJob:pae,updateJob:Tae,handleGetJob:hae,handleGetJobsByStartDate:mae,getJobById:mx};async function hae(e){try{let t=await mx(e.id);return el.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 Gn.error("There was an error getting job",t),new Error(r)}}a(hae,"handleGetJob");async function mae(e){try{let t=await Sae(e);if(Gn.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=Pa(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Pa(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 Gn.error(r),new Error(r)}}a(mae,"handleGetJobsByStartDate");async function pae(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||el.isEmptyOrZeroLength(e.operation)){let u="job parameter is invalid";return Gn.info(u),t.error=u,t}if(!dt.JOB_TYPE_ENUM[e.operation])return Gn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case dt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=fm.fileObject(e);break;case dt.OPERATIONS_ENUM.CSV_URL_LOAD:n=fm.urlObject(e);break;case dt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=fm.dataObject(e);break;case dt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=fm.s3FileObject(e);break;case dt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case dt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=dx(e,"date");break;case dt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=dx(e,"timestamp");break;case dt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=aae(e);break;default:break}if(n)throw cae(n,n.message,uae.BAD_REQUEST,void 0,void 0,!0);let s=new rae;s.type=e.operation===dt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?dt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new Zoe(dt.SYSTEM_SCHEMA_NAME,dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await fx(i))}catch(u){let d=`There was an error inserting a new job: ${u}`;return Gn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=Xoe();try{o=await fx(i)}catch(u){let d=`There was an error inserting a new job: ${u}`;return Gn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Gn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new sae(dt.SYSTEM_SCHEMA_NAME,dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await dae(l)}catch(u){return Gn.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,Gn.trace(u)}return t}a(pae,"addJob");async function Sae(e){let t=Pa(e.from_date,Pa.ISO_8601),r=Pa(e.to_date,Pa.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 tae(n,e.hdb_user);try{return await fae(s)}catch(i){throw Gn.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(Sae,"getJobsInDateRange");async function mx(e){if(el.isEmptyOrZeroLength(e))return el.errorizeMessage("Invalid job ID specified.");let t=new eae(dt.SYSTEM_SCHEMA_NAME,dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await _ae(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Gn.error(n),el.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(mx,"getJobById");async function Tae(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(el.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===dt.JOB_STATUS_ENUM.COMPLETE||e.status===dt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Pa().valueOf());let t=new nae(dt.SYSTEM_SCHEMA_NAME,dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Eae(t),r}a(Tae,"updateJob")});var Ox=T((PNe,Ax)=>{"use strict";var Sx=Y(),qr=C(),gae=require("moment"),Em=IO(),hm=F(),Tx=LO(),gx=Qh(),Rx=Xo(),Rae=st(),Aae=Gh(),DO=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Oae(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(Sx.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Sx.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case qr.JOB_TYPE_ENUM.csv_file_load:await Ai(e,Em.csvFileLoad);break;case qr.JOB_TYPE_ENUM.csv_url_load:await Ai(e,Em.csvURLLoad);break;case qr.JOB_TYPE_ENUM.csv_data_load:await Ai(e,Em.csvDataLoad);break;case qr.JOB_TYPE_ENUM.import_from_s3:await Ai(e,Em.importFromS3);break;case qr.JOB_TYPE_ENUM.empty_trash:break;case qr.JOB_TYPE_ENUM.export_local:await Ai(e,gx.export_local);break;case qr.JOB_TYPE_ENUM.export_to_s3:await Ai(e,gx.export_to_s3);break;case qr.JOB_TYPE_ENUM.delete_files_before:case qr.JOB_TYPE_ENUM.delete_records_before:await Ai(e,Rx.deleteFilesBefore);break;case qr.JOB_TYPE_ENUM.delete_audit_logs_before:await Ai(e,Rx.deleteAuditLogsBefore);break;case qr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Ai(e,Aae.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(Oae,"parseMessage");async function Ai(e,t){try{e.job.status=qr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=gae().valueOf(),await Tx.updateJob(e.job),await Nae(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):hm.error(`There was an error running ${t.name} job with id ${e.job.id}`),hm.error(n),e.job.message=n,e.job.status=qr.JOB_STATUS_ENUM.ERROR;try{await Tx.updateJob(e.job)}catch(s){throw hm.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Ai,"runJob");async function Nae(e){hm.trace("launching job thread:",e),Rae.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[qr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Nae,"launchJobThread");Ax.exports={parseMessage:Oae,RunnerMessage:DO}});var bx=T((UNe,Nx)=>{"use strict";var PO=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};Nx.exports=PO});var kx=T((BNe,qO)=>{"use strict";var Tm=Ar(),vO=Wh(),mm=IO(),Oi=qE(),pm=ji(),V_=Xo(),bae=dR(),$_=br(),Sm=kE(),rr=Hh(),xt=F(),yae=OR(),Iae=c_(),yx=sA(),wae=rh(),Cae=sh(),Lae=iA(),Dae=ah(),Pae=lh(),MO=_h(),Ix=Qh(),Mae=Yh(),BO=LO(),x=C(),{hdb_errors:K_,handleHDBError:Y_}=te(),{HTTP_STATUS_CODES:wx}=K_,UO=fh(),Cx=Ra(),qx=require("util"),tl=Or(),Uae=Cn(),vae=di(),Lx=Ox(),Dx=s_(),Px=(Ch(),re(N_)),Mx=pt(),Ux=Gh(),vx=Uh(),{setServerUtilities:Bae}=(mE(),re(Pg)),{CONTEXT:Hae}=(jn(),re(ES)),{_assignPackageExport:qae}=require("../index"),{transformReq:xae}=Y(),{server:Fae}=(Er(),re(Uo)),Gae=SO(),Bx=Tm.searchByHash,kae=Tm.searchByValue,$ae=qx.promisify(Tm.search),Vae=qx.promisify(vO.evaluateSQL),Yae={[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},V=bx();async function xx(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 Gae.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Yae[e.body.operation]&&Uae.setSchemaDataToGlobal(n=>{n&&xt.error(n)}),r}a(xx,"processLocalTransaction");var Hx=Wae();qO.exports={chooseOperation:Fx,getOperationFunction:Gx,operation:HO,processLocalTransaction:xx};Bae(qO.exports);Fae.operation=HO;function Fx(e){let t;try{t=Gx(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=vO.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=vO.checkASTPermissions(e,i);if(o)throw xt.error(`${wx.FORBIDDEN} from operation ${e.operation}`),xt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Y_(new Error,o,K_.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=Mae.verifyPerms(i,s);if(o)throw xt.error(`${wx.FORBIDDEN} from operation ${e.operation}`),xt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Y_(new Error,o,K_.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw Y_(s,"There was an error when trying to choose an operation path")}return r}a(Fx,"chooseOperation");function Gx(e){if(xt.trace(`getOperationFunction with operation: ${e.operation}`),Hx.has(e.operation))return Hx.get(e.operation);throw Y_(new Error,K_.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),K_.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(Gx,"getOperationFunction");qae("operation",HO);function HO(e,t){e.hdb_user=this[Hae]?.user,e.bypass_auth=!t;let r=Fx(e);return xx({body:e},r)}a(HO,"operation");async function Kae(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 tl.insert(i);break;case x.OPERATIONS_ENUM.UPDATE:o=await tl.update(i);break;case x.OPERATIONS_ENUM.UPSERT:o=await tl.upsert(i);break;case x.OPERATIONS_ENUM.DELETE:o=await V_.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(Kae,"catchup");async function qs(e){xae(e);let t,r;try{r=await BO.addJob(e),t=r.createdJob,xt.info("addJob result",r);let n=new Lx.RunnerMessage(t,e);return await Lx.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),Y_(n,s)}}a(qs,"executeJob");function Wae(){let e=new Map;return e.set(x.OPERATIONS_ENUM.INSERT,new V(tl.insert)),e.set(x.OPERATIONS_ENUM.UPDATE,new V(tl.update)),e.set(x.OPERATIONS_ENUM.UPSERT,new V(tl.upsert)),e.set(x.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new V(Tm.searchByConditions)),e.set(x.OPERATIONS_ENUM.SEARCH_BY_HASH,new V(Bx)),e.set(x.OPERATIONS_ENUM.SEARCH_BY_ID,new V(Bx)),e.set(x.OPERATIONS_ENUM.SEARCH_BY_VALUE,new V(kae)),e.set(x.OPERATIONS_ENUM.SEARCH,new V($ae)),e.set(x.OPERATIONS_ENUM.SQL,new V(Vae)),e.set(x.OPERATIONS_ENUM.CSV_DATA_LOAD,new V(qs,mm.csvDataLoad)),e.set(x.OPERATIONS_ENUM.CSV_FILE_LOAD,new V(qs,mm.csvFileLoad)),e.set(x.OPERATIONS_ENUM.CSV_URL_LOAD,new V(qs,mm.csvURLLoad)),e.set(x.OPERATIONS_ENUM.IMPORT_FROM_S3,new V(qs,mm.importFromS3)),e.set(x.OPERATIONS_ENUM.CREATE_SCHEMA,new V(Oi.createSchema)),e.set(x.OPERATIONS_ENUM.CREATE_DATABASE,new V(Oi.createSchema)),e.set(x.OPERATIONS_ENUM.CREATE_TABLE,new V(Oi.createTable)),e.set(x.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new V(Oi.createAttribute)),e.set(x.OPERATIONS_ENUM.DROP_SCHEMA,new V(Oi.dropSchema)),e.set(x.OPERATIONS_ENUM.DROP_DATABASE,new V(Oi.dropSchema)),e.set(x.OPERATIONS_ENUM.DROP_TABLE,new V(Oi.dropTable)),e.set(x.OPERATIONS_ENUM.DROP_ATTRIBUTE,new V(Oi.dropAttribute)),e.set(x.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new V(pm.describeSchema)),e.set(x.OPERATIONS_ENUM.DESCRIBE_DATABASE,new V(pm.describeSchema)),e.set(x.OPERATIONS_ENUM.DESCRIBE_TABLE,new V(pm.describeTable)),e.set(x.OPERATIONS_ENUM.DESCRIBE_ALL,new V(pm.describeAll)),e.set(x.OPERATIONS_ENUM.DELETE,new V(V_.deleteRecord)),e.set(x.OPERATIONS_ENUM.ADD_USER,new V($_.addUser)),e.set(x.OPERATIONS_ENUM.ALTER_USER,new V($_.alterUser)),e.set(x.OPERATIONS_ENUM.DROP_USER,new V($_.dropUser)),e.set(x.OPERATIONS_ENUM.LIST_USERS,new V($_.listUsersExternal)),e.set(x.OPERATIONS_ENUM.LIST_ROLES,new V(Sm.listRoles)),e.set(x.OPERATIONS_ENUM.ADD_ROLE,new V(Sm.addRole)),e.set(x.OPERATIONS_ENUM.ALTER_ROLE,new V(Sm.alterRole)),e.set(x.OPERATIONS_ENUM.DROP_ROLE,new V(Sm.dropRole)),e.set(x.OPERATIONS_ENUM.USER_INFO,new V($_.userInfo)),e.set(x.OPERATIONS_ENUM.READ_LOG,new V(yae)),e.set(x.OPERATIONS_ENUM.ADD_NODE,new V(Iae)),e.set(x.OPERATIONS_ENUM.UPDATE_NODE,new V(yx)),e.set(x.OPERATIONS_ENUM.SET_NODE_REPLICATION,new V(yx)),e.set(x.OPERATIONS_ENUM.REMOVE_NODE,new V(wae)),e.set(x.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new V(Cae)),e.set(x.OPERATIONS_ENUM.PURGE_STREAM,new V(Lae)),e.set(x.OPERATIONS_ENUM.SET_CONFIGURATION,new V(Mx.setConfiguration)),e.set(x.OPERATIONS_ENUM.CLUSTER_STATUS,new V(Dae.clusterStatus)),e.set(x.OPERATIONS_ENUM.CLUSTER_NETWORK,new V(Pae)),e.set(x.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new V(MO.setRoutes)),e.set(x.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new V(MO.getRoutes)),e.set(x.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new V(MO.deleteRoutes)),e.set(x.OPERATIONS_ENUM.EXPORT_TO_S3,new V(qs,Ix.export_to_s3)),e.set(x.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new V(qs,V_.deleteFilesBefore)),e.set(x.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new V(qs,V_.deleteFilesBefore)),e.set(x.OPERATIONS_ENUM.EXPORT_LOCAL,new V(qs,Ix.export_local)),e.set(x.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new V(BO.handleGetJobsByStartDate)),e.set(x.OPERATIONS_ENUM.GET_JOB,new V(BO.handleGetJob)),e.set(x.OPERATIONS_ENUM.GET_FINGERPRINT,new V(UO.getFingerprint)),e.set(x.OPERATIONS_ENUM.SET_LICENSE,new V(UO.setLicense)),e.set(x.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new V(UO.getRegistrationInfo)),e.set(x.OPERATIONS_ENUM.RESTART,new V(Cx.restart)),e.set(x.OPERATIONS_ENUM.RESTART_SERVICE,new V(Cx.restartService)),e.set(x.OPERATIONS_ENUM.CATCHUP,new V(Kae)),e.set(x.OPERATIONS_ENUM.SYSTEM_INFORMATION,new V(vae.systemInformation)),e.set(x.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new V(qs,V_.deleteAuditLogsBefore)),e.set(x.OPERATIONS_ENUM.READ_AUDIT_LOG,new V(bae)),e.set(x.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new V(Dx.createTokens)),e.set(x.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new V(Dx.refreshOperationToken)),e.set(x.OPERATIONS_ENUM.LOGIN,new V(Px.login)),e.set(x.OPERATIONS_ENUM.LOGOUT,new V(Px.logout)),e.set(x.OPERATIONS_ENUM.GET_CONFIGURATION,new V(Mx.getConfiguration)),e.set(x.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new V(rr.customFunctionsStatus)),e.set(x.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new V(rr.getCustomFunctions)),e.set(x.OPERATIONS_ENUM.GET_COMPONENT_FILE,new V(rr.getComponentFile)),e.set(x.OPERATIONS_ENUM.GET_COMPONENTS,new V(rr.getComponents)),e.set(x.OPERATIONS_ENUM.SET_COMPONENT_FILE,new V(rr.setComponentFile)),e.set(x.OPERATIONS_ENUM.DROP_COMPONENT,new V(rr.dropComponent)),e.set(x.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new V(rr.getCustomFunction)),e.set(x.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new V(rr.setCustomFunction)),e.set(x.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new V(rr.dropCustomFunction)),e.set(x.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new V(rr.addComponent)),e.set(x.OPERATIONS_ENUM.ADD_COMPONENT,new V(rr.addComponent)),e.set(x.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new V(rr.dropCustomFunctionProject)),e.set(x.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new V(rr.packageComponent)),e.set(x.OPERATIONS_ENUM.PACKAGE_COMPONENT,new V(rr.packageComponent)),e.set(x.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new V(rr.deployComponent)),e.set(x.OPERATIONS_ENUM.DEPLOY_COMPONENT,new V(rr.deployComponent)),e.set(x.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new V(Ux.readTransactionLog)),e.set(x.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new V(qs,Ux.deleteTransactionLogsBefore)),e.set(x.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new V(vx.installModules)),e.set(x.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new V(vx.auditModules)),e.set(x.OPERATIONS_ENUM.GET_BACKUP,new V(Oi.getBackup)),e}a(Wae,"initializeOperationFunctionMap")});var Rm=T((qNe,Yx)=>{"use strict";var xO=C(),Qae=Y(),W_=F(),{handleHDBError:FO,hdb_errors:gm}=te(),{isMainThread:jae}=require("worker_threads"),{Readable:zae}=require("stream"),$x=require("os"),Jae=require("util"),Xae=MR(),Zae=Jae.promisify(Xae.authorize),Vx=kx(),{createGzip:ece,constants:tce}=require("zlib");function rce(e){let t=`Found an uncaught exception with message: ${e.message}. ${$x.EOL}Stack: ${e.stack} ${$x.EOL}Terminating ${jae?"HDB":"thread"}.`;console.error(t),W_.fatal(t),process.exit(1)}a(rce,"handleServerUncaughtException");function nce(e,t,r){if(W_[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:gm.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(nce,"serverErrorHandler");function sce(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=FO(new Error,"Invalid JSON.",gm.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(Qae.isEmpty(e.body.operation)){let n=FO(new Error,"Request body must include an 'operation' property.",gm.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(sce,"reqBodyValidationHandler");function ice(e,t,r){let n;e.body.operation!==xO.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==xO.OPERATIONS_ENUM.LOGIN&&e.body.operation!==xO.OPERATIONS_ENUM.LOGOUT?Zae(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{W_.warn(s),W_.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(FO(s,i,gm.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(ice,"authHandler");async function oce(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=Vx.chooseOperation(e.body);let s=await Vx.processLocalTransaction(e,n);if(s instanceof zae&&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(ece({level:tce.Z_BEST_SPEED})))}return s}catch(s){throw W_.error(s),s}}a(oce,"handlePostRequest");Yx.exports={authHandler:ice,handlePostRequest:oce,handleServerUncaughtException:rce,serverErrorHandler:nce,reqBodyValidationHandler:sce}});var jx=T((FNe,Qx)=>{"use strict";var ace=require("fastify-plugin"),{handlePostRequest:Kx,authHandler:cce,reqBodyValidationHandler:lce}=Rm();async function uce(e){e.decorate("hdbCore",{preValidation:[lce,cce],request:t=>Wx(Kx(t,response)),requestWithoutAuthentication:(t,r)=>Wx(Kx(t,r,!0))})}a(uce,"hdbCore");async function Wx(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(Wx,"convertAsyncIterators");Qx.exports=ace(uce)});var Xx=T(($Ne,Jx)=>{"use strict";var kNe=require("fs"),GO=J();GO.initSync();var{CONFIG_PARAMS:zx}=C(),_ce=1024*1024*1024;function dce(e){let t=GO.get(zx.HTTP_TIMEOUT),r=GO.get(zx.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:_ce,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(dce,"getServerOptions");Jx.exports=dce});var tF=T((YNe,eF)=>{"use strict";var kO=J();kO.initSync();var{CONFIG_PARAMS:Zx}=C();function fce(){let e=kO.get(Zx.HTTP_CORSACCESSLIST),t=kO.get(Zx.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");eF.exports=fce});var sF=T((WNe,nF)=>{"use strict";var rF=J();rF.initSync();var Ece=C();function hce(){return rF.get(Ece.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(hce,"getHeaderTimeoutConfig");nF.exports=hce});var VO={};$e(VO,{customFunctionsServer:()=>Sce,ready:()=>TF,start:()=>pce});function pce(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Ni||(Ni=SF(t),ft.http((await Ni).server));let o=await Ni,c=(0,$O.dirname)(s),l=(0,$O.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!iF.has(c)){iF.add(c);try{o.register(gce(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:TF}}async function Sce(){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 Tce();let e=_F.get(dF.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Ni=await SF(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 Tce(){try{Ke.info("Custom Functions starting configuration."),await fF.setUsersToGlobal(),Ke.info("Custom Functions completed configuration.")}catch(e){Ke.error(e)}}function gce(e,t){return async function(r){try{Ke.info("Custom Functions starting buildRoutes"),Ke.trace("Loading fastify routes folder "+e),(0,oF.existsSync)(e)&&r.register(uF.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 SF(e){Ke.info("Custom Functions starting buildServer.");let t=(0,EF.default)(e),r=(0,aF.default)(t);r.server.headersTimeout=(0,mF.default)(),r.setErrorHandler(pF.serverErrorHandler);let n=(0,hF.default)();return n&&r.register(cF.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(lF.default),await r.register(mce),await r.after(),aO(r),Ke.info("Custom Functions completed buildServer."),r}function TF(){if(Ni)return Ni.then?Ni.then(e=>e.ready()):Ni.ready()}var $O,oF,aF,cF,lF,uF,_F,dF,Ke,mce,fF,EF,hF,mF,pF,Ni,iF,gF=Ne(()=>{$O=require("path"),oF=require("fs"),aF=H(require("fastify")),cF=H(require("@fastify/cors")),lF=H(fO()),uF=H(require("@fastify/autoload")),_F=H(J()),dF=H(C()),Ke=H(F()),mce=H(jx()),fF=H(br()),EF=H(Xx()),hF=H(tF()),mF=H(sF()),pF=H(Rm());Vc();Er();iF=new Set;a(pce,"start");a(Sce,"customFunctionsServer");a(Tce,"setUp");a(gce,"buildRouteFolder");a(SF,"buildServer");a(TF,"ready")});var YO={};$e(YO,{start:()=>Rce});function Rce(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,bF.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){AF||(AF=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=RF.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,OF.default)(s,(0,NF.realpathSync)(o))}}return i(s)},{runFirst:!0})),RF.set(r,n)}}}var OF,NF,bF,RF,AF,yF=Ne(()=>{OF=H(require("send")),NF=require("fs"),bF=H(require("serve-static")),RF=new Map;a(Rce,"start")});var jO={};$e(jO,{Request:()=>KO,createReuseportFd:()=>Am});var IF,KO,WO,QO,Am,Om=Ne(()=>{IF=require("os"),KO=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 QO(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 body(){return this.#e||(this.#e=new WO(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},WO=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},QO=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,IF.platform)()!="win32"&&(Am=require("node-unix-socket").createReuseportFd)});var DF=T((ibe,LF)=>{"use strict";var Ace=require("cluster"),Ma=J();Ma.initSync();var CF=C(),ebe=require("util"),bi=F(),tbe=require("fs"),Oce=require("fastify"),rbe=Mo(),Nce=require("@fastify/cors"),bce=require("@fastify/compress"),yce=require("@fastify/static"),Ice=fO(),wce=require("path"),{PACKAGE_ROOT:Cce}=C(),Lce=Cn(),Dce=Y(),Pce=br(),Mce=ra(),{server:Uce}=(Er(),re(Uo)),{node_request_key:nbe}=(Om(),re(jO)),{authHandler:vce,handlePostRequest:Bce,serverErrorHandler:Hce,reqBodyValidationHandler:qce}=Rm(),sbe=require("net"),{registerContentHandlers:xce}=(Vc(),re(Rq)),Fce=6e4,Gce=1024*1024*1024,kce="TRUE",{CONFIG_PARAMS:Q_}=CF,rl;LF.exports={hdbServer:wF,start:wF};async function wF(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=Ace.isMaster,await $ce();let t=e.securePort>0;rl=Vce(t),await rl.ready(),e||(e={}),e.isOperationsServer=!0;try{Uce.http(rl.server,e),rl.server.closeIdleConnections||await rl.listen({port:0,host:"::"})}catch(r){throw rl.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(wF,"operationsServer");async function $ce(){bi.trace("Configuring HarperDB process."),Lce.setSchemaDataToGlobal(),await Pce.setUsersToGlobal(),await Mce.getLicense()}a($ce,"setUp");function Vce(e){bi.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Yce(e),r=Oce(t);r.server.headersTimeout=Wce(),r.setErrorHandler(Hce);let n=Kce();n&&r.register(Nce,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,_){r.server.emit("unhandled",l.raw,_.raw)}),c()}),r.register(Ice),r.register(bce),r.register(yce,{root:wce.join(Cce,"studio/build-local")}),xce(r);let s=Ma.get(CF.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Dce.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[qce,vce],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Bce(i,o)}),r.get("/health",()=>"HarperDB is running."),bi.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Vce,"buildServer");function Yce(e){let t=Ma.get(Q_.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ma.get(Q_.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Gce,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Yce,"getServerOptions");function Kce(){let e=Ma.get(Q_.OPERATIONSAPI_NETWORK_CORS),t=Ma.get(Q_.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===kce)&&(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(Kce,"getCORSOpts");function Wce(){return Ma.get(Q_.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Fce}a(Wce,"getHeaderTimeoutConfig")});var GF=T((ube,FF)=>{"use strict";var{decode:Qce}=require("msgpackr"),{isMainThread:abe,parentPort:jce,threadId:cbe}=require("worker_threads"),JO=St(),yi=rt(),zce=C(),po=F(),PF=J(),UF=C();st();var Jce=li(),{recordAction:Xce,recordActionBinary:Zce}=(ui(),re(Du)),{publishToStream:ele}=JO,{ConsumerEvents:tle}=require("nats"),lbe={durable:yi.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:yi.WORK_QUEUE_CONSUMER_NAMES.deliver_group},rle,nle,sle,vF,BF;FF.exports={initialize:XO,workQueueListener:xF,setSubscription:ile,setIgnoreOrigin:ale,getDatabaseSubscriptions:ole};async function XO(){BF=!0,po.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await JO.getNATSReferences();rle=e,nle=e.info.server_name,sle=t,vF=r}a(XO,"initialize");var bm=new Map;function ile(e,t,r){let n=bm.get(e);n||bm.set(e,n=new Map),n.set(t,r),BF||XO().then(xF)}a(ile,"setSubscription");function ole(){return bm}a(ole,"getDatabaseSubscriptions");var HF;function ale(e){HF=e}a(ale,"setIgnoreOrigin");var qF=100,MF=new Array(qF),Nm=0;async function xF(){let e=await vF.consumers.get(yi.WORK_QUEUE_CONSUMER_NAMES.stream_name,yi.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(jce?.on("message",async n=>{let{type:s}=n;s===UF.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===tle.HeartbeatsMissed){let s=n.data;po.trace(`${s} clustering ingest consumer heartbeats missed`),s===2&&(po.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let n of r)await MF[Nm],MF[Nm]=cle(n).catch(s=>{po.error(s)}),++Nm>=qF&&(Nm=0)}catch(n){po.error("Error consuming clustering ingest, restarting consumer",n)}JO.clearClientCache(),await XO()}}a(xF,"workQueueListener");async function cle(e){let t=Qce(e.data);Xce(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,n=!1,s=PF.get(zce.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&&!HF),Zce(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;po.trace("processing message:",o,c,_,(u?"records: "+u.map(O=>O?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),po.trace(`messageProcessor nats msg id: ${e.headers.get(yi.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let{timestamp:p,user:S,node_name:R}=f||{},g=bm.get(c)?.get(_);if(!g)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,g.send(t);else if(u.length===1&&!l)g.send({type:zO(o),value:u[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:R});else{let O=u.map((v,G)=>({type:zO(o),value:v,expiresAt:E,id:d?.[G],table:_}));for(;l;)O.push({type:zO(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;g.send({type:"transaction",writes:O,table:_,timestamp:p,onCommit:h,user:S,nodeName:R})}PF.get(UF.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&ele(e.subject.split(".").slice(0,-1).join("."),Jce.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){po.error(o)}e.ack()}a(cle,"messageProcessor");function zO(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(zO,"convertOperation")});var sN={};$e(sN,{disableNATS:()=>ule,publishToStream:()=>Lm,setNATSReplicator:()=>ZO,setPublishToStream:()=>_le,setSubscription:()=>nN,start:()=>lle});function lle(){Im.default.get(wm.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&fle()}function ule(e=!0){KF=e}function _le(e,t){Lm=e,nN=t}function fle(){if(KF||process.env._DISABLE_NATS)return;let e=rs(),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];ZO(s,r,i)}}Hg((r,n)=>{ZO(r.tableName,r.databaseName,r),n&&QF(r)}),!kF&&(kF=!0)}function ZO(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[De],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[De]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[De],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[De],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[De]})}static defineSchema(i){QF(i)}static subscribe(){let i=new Qn;return nN(t,e,i),i}static subscribeOnThisThread(i){return i<dle}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 ym(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=WF;return i}a(n,"getNATSTransaction")}function QF(e){let t=Im.default.get(wm.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Lm(`${tN.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,rN.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 $F,tN,rN,VF,YF,Im,wm,Cm,KF,Lm,nN,dle,WF,kF,ym,eN,jF=Ne(()=>{Ae();jn();$F=H(St()),tN=H(rt()),rN=H(li());ql();VF=H(GF()),YF=H(mr()),Im=H(J()),wm=H(C()),Cm=H(F());a(lle,"start");a(ule,"disableNATS");Lm=$F.publishToStream,nN=VF.setSubscription;a(_le,"setPublishToStream");dle=2;a(fle,"assignReplicationSource");a(ZO,"setNATSReplicator");a(QF,"publishSchema");ym=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=Im.default.get(wm.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||(Cm.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(Lm(`${tN.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,rN.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(u=>{throw Cm.error("An error has occurred trying to replicate transaction",l,u),u.statusCode=504,u}))}return Promise.all(n)}},eN=class extends ym{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,YF.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};WF=new eN});var _N=T(va=>{"use strict";var{isMainThread:Ele,parentPort:J_,threadId:j_}=require("worker_threads"),{Socket:hle,createServer:mle}=require("net"),{createServer:ple,IncomingMessage:Sle}=require("http"),{createServer:Tle}=require("https"),{readFileSync:nl,unlinkSync:zF,existsSync:gle}=require("fs"),_s=F(),We=J(),xr=C(),{server:Mm}=(Er(),re(Uo)),{WebSocketServer:Rle}=require("ws"),{createServer:Ale}=require("tls"),{getTicketKeys:Ole,restartNumber:Nle,getWorkerIndex:JF}=st(),{Headers:rG}=(bh(),re(YB)),{recordAction:z_,recordActionBinary:ble}=(ui(),re(Du)),{Request:nG,createReuseportFd:XF}=(Om(),re(jO)),{checkMemoryLimit:yle}=ra(),sG=require("tls"),ZF=sG.createSecureContext;sG.createSecureContext=function(e){if(!e.cert||!e.key)return ZF(e);let t={...e};delete t.key,delete t.cert;let r=ZF(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){Nle<=1&&_s.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:pbe,CONFIG_PARAMS:Ile}=xr;We.initSync();var wle=We.get(Ile.HTTP_SESSIONAFFINITY),xs={};va.registerServer=lN;va.httpServer=uN;va.deliverSocket=cN;va.startServers=iG;va.when_components_loaded=null;Mm.http=uN;Mm.request=Ple;Mm.socket=Mle;Mm.ws=Ule;var iN=[],Dm=[],Cle,Ua={},Pm={},Lle=[],oN=[];function iG(){return va.when_components_loaded=Um().loadRootComponents(!0).then(()=>{J_?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)cN(n,r,s);else if(t.requestId)Dle(t);else if(t.type===xr.ITC_EVENT_TYPES.SHUTDOWN){_s.trace("received shutdown request",j_);for(let i in xs){let o=xs[i],c;o.closeIdleConnections&&(setInterval(()=>{o.closeIdleConnections()},25).unref(),setTimeout(()=>{o.closeAllConnections(),_s.info("Closed all http connections",i,j_)},4e3).unref()),o.close?.(()=>{if(We.get(xr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&JF()==0)try{zF(We.get(xr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,j_),o.cantCleanupProperly||_s.warn("Had to forcefully exit the thread",j_),process.exit(0)},5e3).unref()})}if(process.env.DEV_MODE)try{require("inspector").close()}catch(i){console.error("Could not close debugger",i)}}}).ref();let e=[];if(XF&&!wle)for(let t in xs){let r=xs[t];if(isNaN(t)&&JF()==0){gle(t)&&zF(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),_s.info("Domain socket listening on "+t)}).on("error",i)}));continue}let n;try{n=XF(+t,"::")}catch(s){console.error(`Unable to bind to port ${t}`,s);continue}e.push(new Promise((s,i)=>{r.listen({fd:n},()=>{s(),_s.trace("Listening on port "+t,j_)}).on("error",i)}))}Promise.all(e).then(()=>{J_?.postMessage({type:xr.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(iG,"startServers");Ele||iG();function cN(e,t,r){let n=e?.read?e:new hle({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=xs[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=xs[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(_s.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(cN,"deliverSocket");var eG=new Map;function Dle(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=eG.get(s),r){case"connection":i=cN(void 0,t),eG.set(s,i),i.write=(c,l,_)=>(J_.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,l,_)=>(J_.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),J_.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(Dle,"proxyRequest");function lN(e,t,r=!0){!+t&&t!==We.get(xr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(We.get(xr.CONFIG_PARAMS.HTTP_PORT),10));let n=xs[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",tG),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else xs[t]=e;e.on("unhandled",tG)}a(lN,"registerServer");function oG(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=[],We.get(xr.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:We.get(xr.CONFIG_PARAMS.HTTP_PORT),secure:We.get(xr.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),We.get(xr.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:We.get(xr.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&We.get(xr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:We.get(xr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(oG,"getPorts");function uN(e,t){for(let{port:r,secure:n}of oG(t))aG(r,n,t?.isOperationsServer),typeof e=="function"?oN[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,lN(e,r,!1)),Pm[r]=aN(oN,r),Cle=aN(Lle,r)}a(uN,"httpServer");function aG(e,t,r){if(!Ua[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:We.get(n+"_keepAliveTimeout"),headersTimeout:We.get(n+"_headersTimeout"),requestTimeout:We.get(n+"_timeout")},i=We.get(n+"_mtls");if(t){n=r?"operationsApi_":"";let c=We.get(n+"tls_privateKey"),l=We.get(n+"tls_certificate"),_=We.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:nl(c),ciphers:We.get("tls_ciphers"),cert:nl(l),ca:_&&nl(_),requestCert:!!i,ticketKeys:Ole()})}let o=yle();Ua[e]=(t?Tle:ple)(s,async(c,l)=>{try{let u=performance.now(),d=new nG(c,l);r&&(d.isOperationsServer=!0);let f=await Pm[e](d);if(!f){if(d._nodeResponse.statusCode)return;f=cG(d)}if(o?f.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):f.headers?.set?.("Server","HarperDB"),f.status===-1){for(let v of f.headers||[])l.setHeader(v[0],v[1]);return c.baseRequest=d,l.baseResponse=f,Ua[e].emit("unhandled",c,l)}let E=f.status||200,h=performance.now(),p=h-u,S=f.body,R;if(!f.handlesHeaders){let v=f.headers||new rG;if(S?S.length>=0&&(typeof S=="string"?v.set("Content-Length",Buffer.byteLength(S)):v.set("Content-Length",S.length),R=!0):(v.set("Content-Length","0"),R=!0),v.append){let G=`hdb;dur=${p.toFixed(2)}`;f.wasCacheMiss&&(G+=", miss"),v.append("Server-Timing",G,!0)}l.writeHead(E,v&&(v[Symbol.iterator]?Array.from(v):v)),R&&l.end(S)}let g=d.handlerPath,O=d.method;if(z_(p,"duration",g,O,f.wasCacheMiss==null?void 0:f.wasCacheMiss?"cache-miss":"cache-hit"),ble(E<400,"success",g,O),!R)if(S?.pipe){S.pipe(l),S.destroy&&l.on("close",()=>{S.destroy()});let v=0;S.on("data",G=>{v+=G.length}),S.on("end",()=>{z_(performance.now()-h,"transfer",g,O),z_(v,"bytes-sent",g,O)})}else S?.then?S.then(v=>{l.end(v)},_):l.end(S)}catch(u){_(u)}function _(u){let d=u.headers;l.writeHead(u.statusCode||500,d&&(d[Symbol.iterator]?Array.from(d):d)),l.end(u.toString()),u.statusCode?u.statusCode===500?_s.warn(u):_s.info(u):_s.error(u)}a(_,"onError")}),t&&(Ua[e].on("secureConnection",c=>{c._parent.startTime&&z_(performance.now()-c._parent.startTime,"tls-handshake",e),z_(c.isSessionReused(),"tls-reused",e)}),Ua[e].isSecure=!0),lN(Ua[e],e)}return Ua[e]}a(aG,"getHTTPServer");function aN(e,t){let r=cG;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(aN,"makeCallbackChain");function cG(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new rG}}a(cG,"unhandled");function Ple(e,t){uN(e,{requestOnly:!0,...t})}a(Ple,"onRequest");function Mle(e,t){let r;if(t.securePort){let n=We.get("tls_privateKey"),s=We.get("tls_certificate"),i=t.mtls?.certificateAuthority||We.get("tls_certificateAuthority");r=Ale({ciphers:We.get("tls_ciphers"),key:nl(n),cert:nl(s),ca:i&&nl(i),rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls},e),xs[t.securePort]=r}return t.port&&(r=mle(e),xs[t.port]=r),r}a(Mle,"onSocket");Object.defineProperty(Sle.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 Ule(e,t){for(let{port:r,secure:n}of oG(t)){Dm[r]||(Dm[r]=new Rle({server:aG(r,n)}),Dm[r].on("connection",async(i,o)=>{try{let c=new nG(o);c.isWebSocket=!0;let l=Pm[r](c),_=o.headers["sec-websocket-protocol"]||"";for(let u=0;u<iN.length;u++){let d=iN[u];if(d.protocol){if(d.protocol===_){d.listener(i,c,l);break}}else d.listener(i,c,l)}}catch(c){_s.warn("Error handling WebSocket connection",c)}}),Dm[r].on("error",i=>{console.log("Error in setting up WebSocket server",i)}));let s=t?.subProtocol||"";iN.push({listener:e,protocol:s}),Pm[r]=aN(oN,r)}}a(Ule,"onWebSocket");function tG(e,t){t.writeHead(404),t.end(`Not found
28
- `)}a(tG,"defaultNotFound")});async function dG({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await dN.getResource(e,{});s=new hN(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await dN.get(e);i&&i.delete()}s=new Bm(e,t)}return n&&(n.id=e,n.user={username:t?.username},X_.put(n)),s}function fN(){return vm++,vm>65500&&(vm=1),vm}function EN(e,t,r=e){let{topic:n,retain:s}=e;e.data=t,e.async=!0,e.authorize=!0;let i=Vi.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 tt(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var lG,Ba,uG,_G,dN,X_,vm,Bm,hN,fG=Ne(()=>{Ae();Kl();lG=H(mr()),Ba=H(F());Fo();uG=H(st()),_G=H(_N());Er();dN=mt({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"}]}}]}),X_=mt({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,uG.getWorkerIndex)()===0&&(async()=>{await _G.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of X_.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await ft.getUser(r.user.username)),tt(r,()=>{try{EN(r,t)}finally{X_.delete(e.id,r)}})}})();a(dG,"getSession");vm=1;a(fN,"getNextMessageId");Bm=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,Ba.trace)("Resuming subscription from",s,"from",o);let E=Vi.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("/"),O;for(let B=0;B<g.length;B++)if(g[B].indexOf("+")>-1)if(g[B]==="+")O=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&O)throw new Error("Filters can not be combined");let v=!0;g[g.length-1]==="#"&&(g.length--,v=!1),O&&(n=a(B=>{let U=B.id;if(!Array.isArray(U)||v&&U.length!==g.length)return!1;for(let j=0;j<g.length;j++)if(g[j]!=="+"&&g[j]!==U[j])return!1;return!0},"filter"));let G=g.indexOf("+");f.url="/"+(G>-1?g.slice(0,G):g).concat("").join("/")}}let h=E.path,p=E.Resource,S=await tt(f,async()=>{let R=await p.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 O;if(g.type&&g.type!=="put"&&g.type!=="delete"&&g.type!=="message"&&g.type!=="patch"||n&&!n(g))continue;r?(g.topic=s,O=this.needsAcknowledge(g)):(g.acknowledge?.(),O=fN());let v=g.id;Array.isArray(v)&&(v=oc(v)),v==null&&(v=""),this.listener(h+"/"+v,g.value,O,t)}catch(O){(0,Ba.warn)(O)}})(),R});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=fN();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,EN(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};tt(r,async()=>{if(!t){let n=await X_.get(this.sessionId,r);n?.doesExist()&&await EN(n,n.data,r)}await X_.delete(this.sessionId,r)}).catch(n=>{(0,Ba.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(EN,"publish");hN=class extends Bm{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=fN(),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,Ba.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,lG.getNextMonotonicTime)()),(0,Ba.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),dN.put(this.sessionRecord)),t.qos}}});var mN={};$e(mN,{bypassAuth:()=>vle,start:()=>Ble});function vle(){SG=!0}function Ble({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}=mG(_,(h,p)=>{if(_.send(h),p&&_._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,Fr.info)("WebSocket error",h)})}},{subProtocol:"mqtt"})),(t||s)&&(c=e.socket(async _=>{let u;if(l){if(_.authorized)try{let E=l.user;u!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),u=await e.getUser(E,null,null))}catch(E){(0,Fr.error)(E)}else if(l.required)return(0,Fr.info)(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!u&&SG&&_.remoteAddress.includes("127.0.0.1")&&(u=await(0,pG.getSuperUser)());let{onMessage:d,onClose:f}=mG(_,E=>_.write(E),null,u,o);_.on("data",d),_.on("close",f),_.on("error",E=>{(0,Fr.info)("Socket error",E)})},{port:t,securePort:s,mtls:l})),c}function mG(e,t,r,n,s){hG||(hG=!0,Lu(d=>{Hm>0&&d.push({metric:"mqtt-connections",connections:Hm,byThread:!0})}));let i;Hm++;let o,c={protocolVersion:4},l=(0,xm.parser)({protocolVersion:5});function _(d){l.parse(d)}a(_,"onMessage");function u(){Hm--,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 ft.getUser(d.username,d.password.toString(),r),(0,qm.get)(Fs.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&EG.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,qm.get)(Fs.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&EG.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 Dn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let O=e.deserialize||(e.deserialize=Ia(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?O(d.will.payload):void 0,delete d.will.payload}o=dG({user:n,...d}),o=await o,s.sessions.add(o)}catch(O){return(0,Fr.error)(O),Dn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:O.code||5,returnCode:O.code||128})}Dn(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((O,v,G,B)=>{try{let U=O.indexOf("/",1),j=U>0?O.slice(0,U):O;f({cmd:"publish",topic:O,payload:E(v),messageId:G||Math.floor(Math.random()*1e8),qos:B.qos},j)}catch(U){(0,Fr.error)(U),o?.disconnect(),s.sessions.delete(o)}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let O of d.subscriptions){let v;try{v=(await o.addSubscription(O,O.qos>=1)).qos||0}catch(G){(0,Fr.error)(G),v=c.protocolVersion<5?128:G.statusCode===403?135:G.statusCode===404?143:128}h.push(v)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let O=[];for(let v of d.unsubscriptions)O.push(o.removeSubscription(v)?0:17);f({cmd:"unsuback",granted:O,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let p=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=Ia(r?.headers.get?.("content-type"))),R=d.payload?.length>0?S(d.payload):void 0,g;try{g=await o.publish(d,R)}catch(O){(0,Fr.warn)(O),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,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){(0,Fr.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,xm.generate)(h,c);t(S),an(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Eo(h,r)}a(E,"serialize")}),{onMessage:_,onClose:u}}var xm,pG,qm,Fs,Fr,EG,SG,hG,Hm,TG=Ne(()=>{xm=require("mqtt-packet");fG();pG=H(br());Vc();ui();Er();qm=H(J()),Fs=H(C()),Fr=H(F()),EG=(0,Fr.loggerWithTag)("auth-event"),SG=(0,qm.get)(Fs.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(vle,"bypassAuth");a(Ble,"start");Hm=0;a(mG,"onSocket")});var qh={};$e(qh,{component_errors:()=>il,loadComponent:()=>Fm,loadComponentDirectories:()=>wG,setErrorReporter:()=>Fle});function wG(e,t){t&&(SN=t),e&&(TN=e);let r=[];if((0,ds.existsSync)(pN)){let s=(0,ds.readdirSync)(pN,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Ct.join)(pN,o);r.push(Fm(c,SN,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Fm(n,SN,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{IG=!0})}function Fle(e){ed=e}async function Fm(e,t,r,n,s,i){if(!RG.has(e)){RG.set(e,!0),s&&(TN=s);try{let o;n&&(il=new Map);let c=(0,Ct.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,ds.existsSync)(c)?o=n?(0,yG.getConfigObj)():(0,AG.parseDocument)((0,ds.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=gN;let l=[],_=n;for(let u in o){let d=o[u];if(il.set(n?u:(0,Ct.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let g=e,O;for(;!(0,ds.existsSync)(O=(0,Ct.join)(g,"node_modules",u));)if(g=(0,Ct.dirname)(g),g.length<(0,bG.getHdbBasePath)().length){O=null;break}if(O)f=await Fm(O,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,mt(g)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,R=!p?.https&&p?.port;if(sl.isMainThread&&(f=await f.startOnMainThread?.({server:ft,ensureTable:h,port:R,securePort:S,resources:t,...d})||f,n&&p))for(let g of[R,S])try{if(+g&&!gG.includes(g)){let O=RN.get(AN.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);O&&Z_.default.warn("Session affinity is not recommended and may cause memory leaks"),(O||!Am)&&(gG.push(g),ON(g,O))}}catch(O){console.error("Error listening on socket",g,O,u)}if(t.isWorker&&(f=await f.start?.({server:ft,ensureTable:h,port:R,securePort:S,resources:t,...d})||f),TN.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,NG.handleHDBError)("Can not reference parent directories");let g=(0,Ct.join)(e,d.files).replace(/\\/g,"/"),O=g.indexOf("/*");if(O>-1&&d.files!==gN[u]?.files&&!(0,ds.existsSync)(g.slice(0,O)))throw new Error(`The path '${g.slice(0,O)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let v=(0,Ct.basename)(e),G=d.path||"/";G=G.startsWith("/")?G:G.startsWith("./")?"/"+v+G.slice(2):G==="."?"/"+v:"/"+v+"/"+G;let B,U,j;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",U=(0,Ct.join)(e,z)}else(j=g.indexOf("/*"))>-1&&(U=g.slice(0,j+1),B=(0,Ct.relative)(e,U));let K=!1;if(sl.isMainThread&&f.setupDirectory&&(K=await f.setupDirectory?.(G,U,t)),t.isWorker&&f.handleDirectory&&(K=await f.handleDirectory?.(G,U,t)),K)continue;for(let z of await(0,OG.default)(g,{onlyFiles:!1,objectMode:!0})){let{path:oe,dirent:Te}=z;_=!0;let ce=(0,Ct.relative)(e,oe).replace(/\\/g,"/");if(B)if(ce.startsWith(B))ce=ce.slice(B.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${ce}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let ke=G+(G.endsWith("/")?"":"/")+ce;try{if(Te.isFile()){let ue=await qle(oe);sl.isMainThread&&await f.setupFile?.(ue,ke,oe,t),t.isWorker&&await f.handleFile?.(ue,ke,oe,t)}else sl.isMainThread&&await f.setupDirectory?.(ke,oe,t),t.isWorker&&await f.handleDirectory?.(ke,oe,t)}catch(ue){ue.message=`Could not load ${Te.isFile()?"file":"directory"} '${oe}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${ue.message}`,ed?.(ue),((0,ol.getWorkerIndex)()===0?console:Z_.default).error(ue),t.set(d.path||"/",new td(ue)),il.set(n?u:(0,Ct.basename)(e),ue.message)}}}}catch(h){h.message=`Could not load component '${u}' for application '${(0,Ct.basename)(e)}' due to: ${h.message}`,ed?.(h),((0,ol.getWorkerIndex)()===0?console:Z_.default).error(h),t.set(d.path||"/",new td(h),null,!0),il.set(n?u:(0,Ct.basename)(e),h.message)}}if(sl.isMainThread&&!IG&&i&&(0,ol.watchDir)(e,async()=>wG()),o.extensionModule)return await CE((0,Ct.join)(e,o.extensionModule));if(!_&&t.isWorker){let u=`${e} did not load any modules, resources, or files, is this a valid component?`;ed?.(new Error(u)),((0,ol.getWorkerIndex)()===0?console:Z_.default).error(u),il.set((0,Ct.basename)(e),u)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,ed?.(o),t.set("",new td(o))}}}var ds,Ct,sl,AG,RN,AN,OG,ol,Z_,NG,bG,Hle,yG,qle,pN,TN,IG,SN,il,xle,gN,gG,RG,ed,td,xh=Ne(()=>{ds=require("fs"),Ct=require("path"),sl=require("worker_threads"),AG=require("yaml"),RN=H(J()),AN=H(C());$M();WM();QM();Pq();gF();yF();OG=H(require("fast-glob")),ol=H(st()),Z_=H(F());Vg();Er();NG=H(te());jn();Ae();Gm();bG=H(J()),Hle=H(DF());Ch();jF();TG();yG=H(pt());Om();({readFile:qle}=ds.promises),pN=RN.get(AN.CONFIG_PARAMS.COMPONENTSROOT),TN=new Map,il=new Map;a(wG,"loadComponentDirectories");xle={REST:em,rest:em,graphqlSchema:$g,jsResource:Kg,fastifyRoutes:VO,login:Qg,static:YO,operationsApi:Hle,customFunctions:{},http:{},clustering:sN,authentication:N_,mqtt:mN},gN={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(gN,"static",{value:{files:"web/**"}});gG=[],RG=new Map;a(Fle,"setErrorReporter");a(Fm,"loadComponent");td=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 Um=T(($be,LG)=>{var{isMainThread:CG}=require("worker_threads"),{getTables:Gle}=(Ae(),re(Ge)),{loadComponentDirectories:kle,loadComponent:$le}=(xh(),re(qh)),{resetResources:Vle}=(Kl(),re(gI)),Yle=vA(),Kle=pt(),{dirname:Wle}=require("path"),{getConnection:Qle}=St(),jle=J(),zle=C(),NN=new Map;async function Jle(e=!1){!CG&&jle.get(zle.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Qle();try{CG&&await Yle()}catch(n){console.error(n)}let t=Vle();Gle(),t.isWorker=e,await $le(Wle(Kle.getConfigFilePath()),t,"hdb",!0,NN),await kle(NN,t);let r=[];for(let[n]of NN)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(Jle,"loadRootComponents");LG.exports.loadRootComponents=Jle});var st=T((Ybe,To)=>{"use strict";var{Worker:Xle,MessageChannel:Zle,parentPort:Gs,isMainThread:CN,threadId:eue,workerData:Ii}=require("worker_threads"),{PACKAGE_ROOT:tue}=C(),{join:UG,isAbsolute:rue,extname:nue}=require("path"),{server:vG}=(Er(),re(Uo)),{watch:sue,readdir:iue}=require("fs/promises"),{totalmem:DG}=require("os"),rd=C(),BG=J(),wi=F(),{randomBytes:oue}=require("crypto"),{_assignPackageExport:aue}=require("../index"),cue=C(),PG=1024*1024,So=[],kn=[],lue=50,LN=1e4,uue="restart",HG="request_thread_info",qG="resource_report",xG="thread_info",FG="added-port",_ue="ack",bN;aue("threads",kn);To.exports={startWorker:yN,restartWorkers:PN,shutdownWorkers:mue,workers:So,setMonitorListener:Nue,onMessageFromWorkers:pue,onMessageByType:KG,broadcast:Tue,broadcastWithAcknowledgement:Rue,setChildListenerByType:hue,getWorkerIndex:GG,getWorkerCount:kG,getTicketKeys:$G,setMainIsWorker:fue,setTerminateTimeout:due,restartNumber:Ii?.restartNumber||1};kn.onMessageByType=KG;kn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=kn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var DN;function due(e){LN=e}a(due,"setTerminateTimeout");function GG(){return Ii?Ii.workerIndex:DN?0:void 0}a(GG,"getWorkerIndex");function kG(){return Ii?Ii.workerCount:DN?1:void 0}a(kG,"getWorkerCount");function fue(e){DN=e}a(fue,"setMainIsWorker");var km;function $G(){return km||(km=CN?oue(48):Ii.ticketKeys,km)}a($G,"getTicketKeys");Object.defineProperty(vG,"workerIndex",{get(){return GG()}});Object.defineProperty(vG,"workerCount",{get(){return kG()}});var VG={[HG](e,t){Aue(t)},[qG](e,t){Oue(t,e)}};function yN(e,t={}){let r=process.constrainedMemory?.()||DG();r=Math.min(r,DG(),2e4*PG);let n=BG.get(rd.CONFIG_PARAMS.MAXHEAPMEMORY)??Math.max(Math.floor(r/PG/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of kn){let _=new Zle;_.existingPort=l,i.push(_),o.push(_.port2)}nue(e)||(e+=".js");let c=new Xle(rue(e)?e:UG(tue,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:t.threadCount,name:t.name,restartNumber:To.exports.restartNumber,ticketKeys:$G()},transferList:o},t));for(let{port1:l,existingPort:_}of i)_.postMessage({type:FG,port:l,threadId:c.threadId},[l]);return Vm(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>yN(e,t),c.on("error",l=>{console.error("Worker error:",l),wi.error("Worker error:",l)}),c.on("exit",l=>{So.splice(So.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<lue?(t.unexpectedRestarts=c.unexpectedRestarts+1,yN(e,t)):wi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{VG[l.type]?.(l,c)}),So.push(c),yue(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(yN,"startWorker");var Eue=[rd.THREAD_TYPES.HTTP];async function PN(e=null,t=2,r=!0){if(CN){if(r){let{loadRootComponents:o}=Um();await o()}To.exports.restartNumber++,t<1&&(t=t*So.length);let n=[],s=[];for(let o of So.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;wi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:To.exports.restartNumber,type:rd.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Eue.indexOf(o.name)>-1,l=new Promise(_=>{let u=setTimeout(()=>o.terminate(),LN*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===cue.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}=Ra();r&&(e==="http"||!e)&&BG.get(rd.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Gs.postMessage({type:uue,workerType:e})}a(PN,"restartWorkers");function hue(e,t){VG[e]=t}a(hue,"setChildListenerByType");function mue(e){return PN(e,1/0,!1)}a(mue,"shutdownWorkers");var YG=[];function pue(e){YG.push(e)}a(pue,"onMessageFromWorkers");var IN=new Map;function KG(e,t){let r=IN.get(e);r||IN.set(e,r=[]),r.push(t)}a(KG,"onMessageByType");var Sue=10;async function Tue(e){let t=0;for(let r of kn)try{r.postMessage(e),t++>Sue&&(t=0,await new Promise(setImmediate))}catch(n){wi.error("Unable to send message to worker",n)}}a(Tue,"broadcast");var $m=new Map,gue=1;function Rue(e){return new Promise(t=>{let r=0;for(let n of kn)try{let s=gue++,i=a(()=>{$m.delete(s),--r===0&&t(),n!==Gs&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,$m.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of $m)o.port===n&&o()})),n.postMessage(e),r++}catch(s){wi.error("Unable to send message to worker",s)}r===0&&t()})}a(Rue,"broadcastWithAcknowledgement");function Aue(e){e.postMessage({type:xG,workers:WG()})}a(Aue,"sendThreadInfo");function WG(){let e=Date.now();return So.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(WG,"getChildWorkerInfo");function Oue(e,t){e.resources=t,e.resources.updated=Date.now()}a(Oue,"recordResourceReport");var wN;function Nue(e){wN=e}a(Nue,"setMonitorListener");var bue=1e3,MG=!1;function yue(){MG||(MG=!0,setInterval(()=>{for(let e of So){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}wN&&wN()},bue).unref())}a(yue,"startMonitoring");var Iue=1e3;if(Gs){Vm(Gs);for(let e=0,t=Ii.addPorts.length;e<t;e++){let r=Ii.addPorts[e];r.threadId=Ii.addThreadIds[e],Vm(r)}setInterval(()=>{let e=process.memoryUsage();Gs.postMessage({type:qG,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Iue).unref(),bN=a(()=>new Promise((e,t)=>{Gs.on("message",r),Gs.postMessage({type:HG});function r(n){n.type===xG&&(Gs.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else bN=WG;To.exports.getThreadInfo=bN;function Vm(e,t){kn.push(e),e.on("message",r=>{if(r.type===FG)r.port.threadId=r.threadId,Vm(r.port);else if(r.type===_ue){let n=$m.get(r.id);n&&n()}else{for(let s of YG)s(r,e);let n=IN.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){wi.error(i)}}}).on("close",()=>{kn.splice(kn.indexOf(e),1)}).on("exit",()=>{kn.splice(kn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Vm,"addPort");if(CN){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await iue(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(UG(n,i.name));try{for await(let{filename:i}of sue(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await PN(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");To.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Gs.on("message",async e=>{let{type:t}=e;t===rd.ITC_EVENT_TYPES.SHUTDOWN&&(To.exports.restartNumber=e.restartNumber,Gs.unref(),setTimeout(()=>{wi.warn("Thread did not voluntarily terminate",eue),process.exit(0)},LN).unref())})});var HN={};$e(HN,{startHTTPThreads:()=>Cue,startSocketServer:()=>ON,updateWorkerIdleness:()=>ek});async function Cue(e=2,t){if(t)UN(0,1,!0);else{let{loadRootComponents:n}=Um();if(e===0)return(0,go.setMainIsWorker)(!0),await _N().startServers(),Promise.resolve([]);await n()}let r=(0,JG.checkMemoryLimit)();r&&!process.env.DEV_MODE&&(console.error(r),setInterval(()=>{Qm.notify(r)},wue).unref());for(let n=0;n<e;n++)UN(n,e);return Promise.all(ZG)}function UN(e,t=1,r){if(MN++,(0,go.startWorker)("server/threads/threadServer.js",{name:Wm.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(_){_.type===Wm.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});ZG.push(s),await s,al.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=Km.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=al.indexOf(n);o>-1&&al.splice(o,1)}if(a(i,"removeWorker"),cl){let o=cl;cl=[];for(let c of o)XG[c.localPort](null,c)}}}),r){let n=setInterval(()=>{vN?vN=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,go.shutdownWorkers)(),MN=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function ON(e=0,t){if(typeof e=="string")try{(0,jm.existsSync)(e)&&(0,jm.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Lue:r=Due(t):r=BN;let n=(0,ll.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=XG[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),vN=!0,r(o,(c,l)=>{if(!c){if(QG){let u=o._socket||new ll.Socket({handle:o,writable:!0,readable:!0});QG.deliverSocket(u,e,l),u.resume()}else MN>0?(cl.length===0&&setTimeout(()=>{cl.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,cl.push(o)):(console.log("start up a dynamic thread to handle request"),UN(0));an(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:l});else{let u=o._socket||new ll.Socket({handle:o,writable:!0,readable:!0});Uue(u,c,e)}an(!0,"socket-routed")})};let s=Mo();Qm.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 BN(e,t){let r,n=0;for(let s of al){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Ym)return Ym=i,t(r);n=i}Ym=0,t(r)}function Lue(e,t){let r={};e.getpeername(r);let n=r.address,s=ul.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);BN(e,o=>{ul.set(n,{worker:o,lastUsed:i}),t(o)})}function Due(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new ll.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],_=ul.get(l),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,s(_.worker);BN(n,d=>{ul.set(l,{worker:d,lastUsed:u}),s(d,o)})})}a(r,"findByHeaderAffinity")}function ek(){Ym=0;for(let e of al)e.expectedIdle=e.recentELU.idle+Pue,e.requests=1;al.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Uue(e,t,r){let n=Mue++;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(),Km.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")),Km.delete(n)),s.event=="destroy"&&(e.destroy(),Km.delete(n))})}var go,ll,Wm,Qm,jm,zG,JG,al,cl,XG,QG,MN,ZG,wue,vN,Ym,jG,ul,Pue,Km,Mue,Gm=Ne(()=>{go=H(st()),ll=require("net"),Wm=H(C()),Qm=H(F()),jm=require("fs");ui();zG=require("worker_threads"),JG=H(ra()),al=[],cl=[],XG=[],MN=0,ZG=[];zG.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});wue=6e5;a(Cue,"startHTTPThreads");a(UN,"startHTTPWorker");a(ON,"startSocketServer");Ym=0;a(BN,"findMostIdleWorker");jG=36e5,ul=new Map;a(Lue,"findByRemoteAddressAffinity");a(Due,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of ul)r.lastUsed+jG<e&&ul.delete(t)},jG).unref();Pue=1e3;a(ek,"updateWorkerIdleness");(0,go.setMonitorListener)(ek);Km=new Map,Mue=1;a(Uue,"proxySocket")});var nk=T((jbe,rk)=>{"use strict";var Jm=J();Jm.initSync();var zm=C(),{httpRequest:vue}=Y(),Bue=require("path"),tk=require("fs-extra"),Hue=require("yaml"),que={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};rk.exports={cliOperations:Fue,buildRequest:xue};function xue(){let e={};for(let t of process.argv){if(que[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 Fue(e){await tk.exists(Bue.join(Jm.get(zm.CONFIG_PARAMS.ROOTPATH),zm.HDB_PID_FILE))||(console.error("HarperDB must be running to perform this operation"),process.exit()),await tk.exists(Jm.get(zm.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))||(console.error("No domain socket found, unable to perform this operation"),process.exit());try{let t=await vue({method:"POST",protocol:"http:",socketPath:Jm.get(zm.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(Hue.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(Fue,"cliOperations")});var xN=T((Jbe,sk)=>{"use strict";var nd=J();nd.initSync();var _l=require("fs-extra"),qN=require("path"),dl=C(),Gue=require("crypto"),kue=require("uuid").v4;sk.exports=$ue;function $ue(){if(nd.getHdbBasePath()!==void 0){let e=qN.join(nd.getHdbBasePath(),dl.LICENSE_KEY_DIR_NAME,dl.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=qN.join(nd.getHdbBasePath(),dl.LICENSE_KEY_DIR_NAME,dl.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=qN.join(nd.getHdbBasePath(),dl.LICENSE_KEY_DIR_NAME,dl.JWT_ENUM.JWT_PASSPHRASE_NAME);try{_l.accessSync(r),_l.accessSync(e),_l.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=kue(),i=Gue.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});_l.writeFileSync(r,s),_l.writeFileSync(e,i.privateKey),_l.writeFileSync(t,i.publicKey)}else throw n}}}a($ue,"checkJWTTokenExist")});var ok=T((Zbe,ik)=>{"use strict";var FN=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};ik.exports={HdbInfoInsertObject:FN}});var lk=T((tye,ck)=>{"use strict";var ak=C(),GN=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}};ck.exports={UpgradeObject:GN}});var Xm=T((nye,_k)=>{"use strict";var $n=require("prompt"),fl=require("chalk"),uk=F(),Es=require("os"),kN=Do(),$N=["yes","y"];async function Vue(e){let t=`${Es.EOL}`+fl.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Es.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Es.EOL}${Es.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Es.EOL}`;$n.override=kN(["CONFIRM_UPGRADE"]),$n.start(),$n.message=t;let r={properties:{CONFIRM_UPGRADE:{description:fl.magenta(`${Es.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 $n.get([r])}catch(s){return uk.error("There was an error when prompting user about an upgrade."),uk.error(s),!1}return $N.includes(n.CONFIRM_UPGRADE)}a(Vue,"forceUpdatePrompt");async function Yue(e){let t=`${Es.EOL}`+fl.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.${Es.EOL}`);$n.override=kN(["CONFIRM_DOWNGRADE"]),$n.start(),$n.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:fl.magenta(`${Es.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 $n.get([r]);return $N.includes(n.CONFIRM_DOWNGRADE)}a(Yue,"forceDowngradePrompt");async function Kue(){let e=`${Es.EOL}`+fl.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");$n.override=kN(["GENERATE_CERTS"]),$n.start(),$n.message=e;let t={properties:{GENERATE_CERTS:{description:fl.magenta(`${Es.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 $n.get([t]);return $N.includes(r.GENERATE_CERTS)}a(Kue,"upgradeCertsPrompt");_k.exports={forceUpdatePrompt:Vue,forceDowngradePrompt:Yue,upgradeCertsPrompt:Kue}});var YN=T((iye,dk)=>{"use strict";var VN=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};dk.exports=VN});var Ek=T((_ye,fk)=>{"use strict";var Wue=Y(),Que=pt(),aye=F(),cye=require("path"),lye=require("fs"),uye=C();fk.exports={getOldPropsValue:jue};function jue(e,t,r=!1){let n=t.getRaw(e);return Wue.isNotEmptyAndHasValue(n)?n:r?Que.getDefaultConfig(e):""}a(jue,"getOldPropsValue")});var Sk=T((fye,pk)=>{"use strict";var Ro=require("path"),Ao=require("fs-extra"),zue=require("properties-reader"),Jue=YN(),Lt=F(),{getOldPropsValue:Qe}=Ek(),{HDB_SETTINGS_NAMES:ee,CONFIG_PARAMS:Ha}=C(),qa=pt(),Zm=J(),hk=Y(),ks=C(),KN=new Jue("3.1.0"),mk=[];function Xue(){let e=zue(Zm.get(ee.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Lt.info(t);let r=` ;Settings for the HarperDB process.
27
+ `},compressible:!1,q:.8});Vt.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()}});Aq={type:"application/json",serializeStream:Ku,serialize:H_,deserialize:Xie,q:.8};Vt.set("*/*",Aq);Vt.set("",Aq);a(Xie,"tryJSONParse");a(iO,"registerContentHandlers");Zie=require("fastify-plugin"),eoe=Zie(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Wh(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(Wh,"findBestSerializer");pq=tO.default.get(rO.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Qh,"serialize");a(_o,"serializeMessage");a(toe,"streamToBuffer");a(Ia,"getDeserializer");a(Sq,"deserializerUnknownType");a(roe,"transformIterable")});function wq(e){let t={openapi:noe,info:{title:"HarperDB HTTP REST interface",version:(0,Iq.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:B,elements:H,relationship:v,definition:P}of o){if(v)R==="array"?_[B]={type:"array",items:{$ref:ho+H.type}}:_[B]={$ref:ho+R};else{let V=P??H?.definition;if(V){if(!t.components.schemas[V.type]){let Y={};V.properties.forEach(z=>{Y[z.name]=new lO(oO[z.type],z.type)}),t.components.schemas[V.type]=new yq(Y)}R==="array"?_[B]={type:"array",items:{$ref:ho+V.type}}:_[B]={$ref:ho+V.type}}else R==="array"?H.type==="Any"||H.type=="ID"?_[B]={type:"array",items:{format:H.type}}:_[B]={type:"array",items:new lO(oO[H.type],H.type)}:R==="Any"||R=="ID"?_[B]={format:R}:_[B]=new lO(oO[R],R)}u.push(new uO(B,"query",_[B]))}let d=Object.keys(_),f=new uO(c,"path",{format:"ID"});f.required=!0,f.description="primary key of record";let E=new uO("property","path",{enum:d});E.required=!0,t.components.schemas[i]=new yq(_);let h=l.post!==Resource.prototype.post||l.update,p=typeof l.put=="function",S=typeof l.get=="function",O=typeof l.delete=="function",T="/"+s+"/";h&&(t.paths[T]={},t.paths[T].post=new soe(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[T]||(t.paths[T]={}),t.paths[T].get=new aO(u,r,{200:new cO({$ref:ho+i})},"search for records by the specified property name and value pairs")),O&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new bq(u,r,"delete all the records that match the provided query",{204:new Nq})),T="/"+s+"/{"+c+"}",S&&(t.paths[T]={},t.paths[T].get=new aO([f],r,{200:new cO({$ref:ho+i})},"retrieve a record by its primary key")),p&&(t.paths[T]||(t.paths[T]={}),t.paths[T].put=new ioe([f],r,i,"create or update the record with the URL path that maps to the record's primary key")),O&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new bq([f],r,"delete a record with the given primary key",{204:new Nq})),S&&E.schema.enum.length>0&&(T="/"+s+"/{"+c+"}.{property}",t.paths[T]={},t.paths[T].get=new aO([f,E],r,{200:new cO({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function soe(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:ho+e}}}},this.security=t,this.responses={200:{description:_O,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function aO(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function cO(e){this.description=_O,this.content={"application/json":{schema:e}}}function Nq(){this.description="successfully processed request, no content returned to client"}function ioe(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:ho+r}}}},this.responses={200:{description:_O}}}function bq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function yq(e){this.type="object",this.properties=e}function lO(e,t){this.type=e,this.format=t}function uO(e,t,r){this.name=e,this.in=t,this.schema=r}var Iq,noe,oO,ho,_O,Cq=ye(()=>{Iq=q(xi()),noe="3.0.3",oO={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},ho="#/components/schemas/",_O="successful operation";a(wq,"generateJsonApi");a(soe,"Post");a(aO,"Get");a(cO,"Response200");a(Nq,"Response204");a(ioe,"Put");a(bq,"Delete");a(yq,"ResourceSchema");a(lO,"Type");a(uO,"Parameter")});var zh={};ke(zh,{start:()=>coe});async function aoe(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&of(e);let s=new uo;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==Lq){let h=jh.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=Ia(r["content-type"],!0)(e.body)}catch(h){throw new zc.ClientError(h,400)}if(e.authorize=!0,i===Lq&&n==="GET"){if(e?.user?.role?.permission?.super_user)return wq(jh);throw new zc.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 zc.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new zc.ServerError(`Method ${n} is not recognized`,501)}}),u=200,d;if(_==null)u=n==="GET"||n==="HEAD"?404:204,dO.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){ooe[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),p=r["if-none-match"];p&&h==p?(_?.onDone&&_.onDone(),u=304,_=void 0):s.setIfNone("ETag",h),dO.lastModified&&s.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(u=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let f={status:u,headers:s,body:void 0},E=_?.wasLoadedFromSource?.();return E!==void 0&&(f.wasCacheMiss=E,!E&&d&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||d))/1e3))),_!==void 0&&(f.body=Qh(_,e,f),n==="HEAD"&&(f.body=void 0)),f}catch(i){i.statusCode?i.statusCode===500?wa.warn(i):wa.info(i):wa.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),s.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:s,body:void 0};return o.body=Qh(i.contentType?i:i.toString(),e,o),o}}function coe(e){dO=e,!Dq&&(Dq=!0,jh=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return aoe(t,r)}),e.server.ws(async(t,r,n)=>{x_++;let s=new Yn;Pq||(Pq=!0,Lu(u=>{x_>0&&u.push({metric:"ws-connections",connections:x_,byThread:!0})}));let i;t.on("error",u=>{i=!0,wa.warn(u)});let o;t.on("message",a(function(d){o||(o=Ia(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{x_--,In(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let l=r.url.slice(1),_=jh.getMatch(l);if(In(!!_,"connection","ws","connect"),!_)t.send(_o(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,nn(h=>({count:h.count,total:x_}),"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=_o(E.value,r);t.send(h),nn(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var wa,zc,zt,ooe,dO,Lq,Dq,jh,Pq,x_,Mq=ye(()=>{$c();li();wa=q(G()),zc=q(re());af();ql();Fo();Ah();Cq();zt=new Uint8Array(8),ooe=new Float64Array(zt.buffer,0,1),dO={},Lq="openapi";a(aoe,"http");x_=0;a(coe,"start")});var fO=g((dNe,Uq)=>{var{recordAction:Jh,recordActionBinary:loe}=(li(),ne(Du)),uoe=require("fastify-plugin"),_oe=200;Uq.exports=uoe(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),Jh(o,"duration",_,d,u),loe(s.raw.statusCode<400,"success",_,d,u);let f=_oe;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Jh(performance.now()-c,"transfer",_,d,u),Jh(f,"bytes-sent",_,d,u)})):(f+=i?.length||0,Jh(f,"bytes-sent",_,d,u));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var TO=g((hNe,qq)=>{var tm=require("clone"),rm=tt(),doe=W(),Zh=C(),fNe=G(),EO=require("fs"),mO=require("joi"),{string:em}=mO.types(),{hdb_errors:foe,handleHDBError:Xh}=re(),{HDB_ERROR_MSGS:ENe,HTTP_STATUS_CODES:hO}=foe,{common_validators:Jc}=As(),vq=" is required",Eoe=["insert","update","upsert"],pO={database:{presence:!1,format:Jc.schema_format,length:Jc.schema_length},schema:{presence:!1,format:Jc.schema_format,length:Jc.schema_length},table:{presence:!0,format:Jc.schema_format,length:Jc.schema_length},action:{inclusion:{within:Eoe,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},hoe={schema:em.required(),table:em.required(),action:em.valid("insert","update","upsert")},{AWS_ACCESS_KEY:moe,AWS_SECRET:poe,AWS_BUCKET:Soe,AWS_FILE_KEY:Toe,REGION:goe}=Zh.S3_BUCKET_AUTH_KEYS,Roe={s3:{presence:!0},[`s3.${moe}`]:{presence:!0,type:"String"},[`s3.${poe}`]:{presence:!0,type:"String"},[`s3.${Soe}`]:{presence:!0,type:"String"},[`s3.${Toe}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${goe}`]:{presence:!0,type:"String"}},Bq=tm(pO);Bq.data.presence={message:vq};var Hq=tm(pO);Hq.file_path.presence={message:vq};var Aoe=Object.assign(tm(pO),Roe),SO=tm(hoe);SO.csv_url=em.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();SO.passthrough_headers=mO.object();function Ooe(e){let t=rm.validateObject(e,Bq);return nm(e,t)}a(Ooe,"dataObject");function Noe(e){let t=rm.validateBySchema(e,mO.object(SO));return nm(e,t)}a(Noe,"urlObject");function boe(e){let t=rm.validateObject(e,Hq);return nm(e,t)}a(boe,"fileObject");function yoe(e){let t=rm.validateObject(e,Aoe);return nm(e,t)}a(yoe,"s3FileObject");function nm(e,t){if(!t){let r=doe.checkGlobalSchemaTable(e.schema,e.table);if(r)return Xh(new Error,r,hO.BAD_REQUEST);if(e.operation===Zh.OPERATIONS_ENUM.CSV_FILE_LOAD)try{EO.accessSync(e.file_path,EO.constants.R_OK|EO.constants.F_OK)}catch(n){return n.code===Zh.NODE_ERROR_CODES.ENOENT?Xh(n,`No such file or directory ${n.path}`,hO.BAD_REQUEST):n.code===Zh.NODE_ERROR_CODES.EACCES?Xh(n,`Permission denied ${n.path}`,hO.BAD_REQUEST):Xh(n)}}return t}a(nm,"postValidateChecks");qq.exports={dataObject:Ooe,urlObject:Noe,fileObject:boe,s3FileObject:yoe}});var gO=g((pNe,xq)=>{"use strict";var F_=G(),sm=C();async function Ioe(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===sm.OPERATIONS_ENUM.INSERT||t.operation===sm.OPERATIONS_ENUM.UPDATE||t.operation===sm.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===sm.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(F_.info(i.message),i):i.http_resp_msg?(F_.error(`Error calling operation: ${e.name}`),F_.error(i.http_resp_msg),i):(F_.error(`Error calling operation: ${e.name}`),F_.error(i),i)}}a(Ioe,"callOperationFunctionAsAwait");xq.exports={callOperationFunctionAsAwait:Ioe}});var Gq=g((TNe,Fq)=>{"use strict";var RO=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}},AO=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};Fq.exports={BulkLoadFileObject:RO,BulkLoadDataObject:AO}});var $q=g((RNe,kq)=>{"use strict";var OO=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};kq.exports=OO});var CO=g((INe,ox)=>{"use strict";var im=Tr(),am=TO(),woe=require("needle"),os=C(),ONe=Je(),Xc=W(),{handleHDBError:ct,hdb_errors:Xq}=re(),{HTTP_STATUS_CODES:Jt,HDB_ERROR_MSGS:vt,CHECK_LOGS_WRAPPER:La}=Xq,Zc=G(),NO=require("papaparse");Xc.promisifyPapaParse();var as=require("fs-extra"),Coe=require("path"),{chain:Vq}=require("stream-chain"),Yq=require("stream-json/streamers/StreamArray"),Kq=require("stream-json/utils/Batch"),Wq=require("stream-chain/utils/comp"),{finished:Qq}=require("stream"),Loe=J(),Zq=gO(),Doe=JA(),{BulkLoadFileObject:yO,BulkLoadDataObject:Poe}=Gq(),IO=GA(),{verifyBulkLoadAttributePerms:ex}=kh(),NNe=$q(),bNe=Et(),yNe=ci(),{databases:Moe}=(Ne(),ne(xe)),{coerceType:Uoe}=(EE(),ne(Cg)),jq="No records parsed from csv file.",Ca=`${Loe.get("HDB_ROOT")}/tmp`,{schema_regex:voe}=As(),zq=1024*1024*2,Jq=5e3,Boe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};ox.exports={csvDataLoad:Hoe,csvURLLoad:qoe,csvFileLoad:xoe,importFromS3:Foe};async function Hoe(e,t){let r=am.dataObject(e);if(r)throw ct(r,r.message,Jt.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=nx(e.schema,e.table),i=NO.parse(e.data,{header:!0,skipEmptyLines:!0,transform:bO.bind(null,s),dynamicTyping:!1}),o=new IO;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&ex(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 ct(new Error,c,Jt.BAD_REQUEST,void 0,void 0,!0);let l=new Poe(e.action,e.schema,e.table,i.data);return n=await Zq.callOperationFunctionAsAwait(sx,l,null),n.message===jq?jq:ix(n.records,n.number_written)}catch(s){throw Da(s)}}a(Hoe,"csvDataLoad");async function qoe(e){let t=am.urlObject(e);if(t)throw ct(t,t.message,Jt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Ca}/${r}`;try{await Goe(e,r)}catch(s){throw Zc.error(vt.DOWNLOAD_FILE_ERR(r)+" - "+s),ct(s,La(vt.DOWNLOAD_FILE_ERR(r)))}try{let s=new yO(this.job_operation_function.name,e.action,e.schema,e.table,n,os.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await wO(s);return await om(n),i}catch(s){throw await om(n),Da(s)}}a(qoe,"csvURLLoad");async function xoe(e){let t=am.fileObject(e);if(t)throw ct(t,t.message,Jt.BAD_REQUEST,void 0,void 0,!0);let r=new yO(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,os.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await wO(r)}catch(n){throw Da(n)}}a(xoe,"csvFileLoad");async function Foe(e){let t=am.s3FileObject(e);if(t)throw ct(t,t.message,Jt.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Coe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Ca}/${s}`;let i=new yO(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await koe(s,e);let o=await wO(i);return await om(r),o}catch(n){throw await om(r),Da(n)}}a(Foe,"importFromS3");async function Goe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await woe("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 ct(n,s,n.statusCode,os.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Voe(r,e.csv_url),await $oe(t,r.raw)}a(Goe,"downloadCSVFile");async function koe(e,t){try{let r=`${Ca}/${e}`;await as.mkdirp(Ca),await as.writeFile(`${Ca}/${e}`,"",{flag:"a+"});let n=await as.createWriteStream(r),s=await Doe.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(){Zc.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Zc.error(vt.S3_DOWNLOAD_ERR+" - "+r),ct(r,La(vt.S3_DOWNLOAD_ERR))}}a(koe,"downloadFileFromS3");async function $oe(e,t){try{await as.mkdirp(Ca),await as.writeFile(`${Ca}/${e}`,t)}catch(r){throw Zc.error(vt.WRITE_TEMP_FILE_ERR),ct(r,La(vt.DEFAULT_BULK_LOAD_ERR))}}a($oe,"writeFileToTempFolder");async function om(e){if(e)try{await as.access(e),await as.unlink(e)}catch{Zc.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(om,"deleteTempFile");function Voe(e,t){if(e.statusCode!==Xq.HTTP_STATUS_CODES.OK)throw ct(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Jt.BAD_REQUEST);if(!Boe[e.headers["content-type"]])throw ct(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Jt.BAD_REQUEST);if(!e.raw)throw ct(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Jt.BAD_REQUEST)}a(Voe,"validateURLResponse");async function wO(e){try{let t;switch(e.file_type){case os.VALID_S3_FILE_TYPES.CSV:t=await Yoe(e);break;case os.VALID_S3_FILE_TYPES.JSON:t=await Koe(e);break;default:throw ct(new Error,vt.DEFAULT_BULK_LOAD_ERR,Jt.BAD_REQUEST,os.LOG_LEVELS.ERROR,vt.INVALID_FILE_EXT_ERR(e))}return ix(t.records,t.number_written)}catch(t){throw Da(t)}}a(wO,"fileLoad");async function tx(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 im.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&ex(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=ct(c);r(l)}}a(tx,"validateChunk");async function rx(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Xc.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Xc.isEmpty(c)&&!Xc.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 Zq.callOperationFunctionAsAwait(sx,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=ct(c,La(vt.INSERT_CSV_ERR),Jt.INTERNAL_SERVER_ERROR,os.LOG_LEVELS.ERROR,vt.INSERT_CSV_ERR+" - "+c);r(l)}}a(rx,"insertChunk");async function Yoe(e){let t={records:0,number_written:0},r=nx(e.schema,e.table);try{let n=new IO,s=as.createReadStream(e.file_path,{highWaterMark:zq});s.setEncoding("utf8"),await NO.parsePromise(s,tx.bind(null,e,n),bO.bind(null,r));let i=n.getPermsResponse();if(i)throw ct(new Error,i,Jt.BAD_REQUEST);return s=as.createReadStream(e.file_path,{highWaterMark:zq}),s.setEncoding("utf8"),await NO.parsePromise(s,rx.bind(null,e,t),bO.bind(null,r)),s.destroy(),t}catch(n){throw ct(n,La(vt.PAPA_PARSE_ERR),Jt.INTERNAL_SERVER_ERROR,os.LOG_LEVELS.ERROR,vt.PAPA_PARSE_ERR+n)}}a(Yoe,"callPapaParse");function nx(e,t){let r=Moe[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>Uoe(i,s));return n}a(nx,"createTransformMap");function bO(e,t,r){let n=e.get(r);return n?n(t):Xc.autoCast(t)}a(bO,"typeFunction");async function Koe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new IO,s=Vq([as.createReadStream(e.file_path,{encoding:"utf-8"}),Yq.withParser(),c=>c.value,new Kq({batchSize:Jq}),Wq(async c=>{await tx(e,n,r,c)})]);await new Promise((c,l)=>{Qq(s,_=>{_?l(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw ct(new Error,i,Jt.BAD_REQUEST);let o=Vq([as.createReadStream(e.file_path,{encoding:"utf-8"}),Yq.withParser(),c=>c.value,new Kq({batchSize:Jq}),Wq(async c=>{await rx(e,t,r,c)})]);return await new Promise((c,l)=>{Qq(o,_=>{_?l(_):c()}),o.resume()}),t}catch(n){throw ct(n,La(vt.INSERT_JSON_ERR),Jt.INTERNAL_SERVER_ERROR,os.LOG_LEVELS.ERROR,vt.INSERT_JSON_ERR+n)}}a(Koe,"insertJson");async function sx(e){let t={};try{e.data&&e.data.length>0&&Woe(e.data[0])?t=await Qoe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Zc.info(t.message))}catch(r){throw Da(r)}return t}a(sx,"callBulkFileLoad");function Woe(e){let t=Object.keys(e);for(let r of t)if(!voe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Woe,"validateColumnNames");async function Qoe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=im.insert;break;case"update":i=im.update;break;case"upsert":i=im.upsert;break;default:throw ct(new Error,vt.INVALID_ACTION_PARAM_ERR(n),Jt.BAD_REQUEST,os.LOG_LEVELS.ERROR,vt.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=Xc.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw Da(o)}}a(Qoe,"bulkFileLoad");function ix(e,t){return`successfully loaded ${t} of ${e} records`}a(ix,"buildResponseMsg");function Da(e){return ct(e,La(vt.DEFAULT_BULK_LOAD_ERR),Jt.INTERNAL_SERVER_ERROR,os.LOG_LEVELS.ERROR,vt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Da,"buildTopLevelErrMsg")});var cx=g((CNe,ax)=>{"use strict";var LO=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};ax.exports=LO});var _x=g((DNe,ux)=>{"use strict";var joe=C(),lx=require("moment"),zoe=require("uuid").v4,DO=class{static{a(this,"JobObject")}constructor(){this.id=zoe(),this.type=void 0,this.start_datetime=lx().valueOf(),this.created_datetime=lx().valueOf(),this.end_datetime=void 0,this.status=joe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};ux.exports=DO});var PO=g((MNe,px)=>{"use strict";var Joe=require("uuid").v4,Ex=Tr(),hx=Sr(),Xoe=Jn(),Zoe=Ec(),eae=cx(),lt=C(),tae=_x(),rae=kE(),Hn=G(),nae=tu(),el=W(),{promisify:sae}=require("util"),Pa=require("moment"),iae=Vh(),cm=TO(),dx=YT(),{deleteTransactionLogsBeforeValidator:oae}=BA(),{handleHDBError:aae,hdb_errors:cae}=re(),{HTTP_STATUS_CODES:lae}=cae,fx=hx.searchByValue,uae=hx.searchByHash,_ae=Ex.insert,dae=sae(iae.evaluateSQL),fae=Ex.update;px.exports={addJob:mae,updateJob:Sae,handleGetJob:Eae,handleGetJobsByStartDate:hae,getJobById:mx};async function Eae(e){try{let t=await mx(e.id);return el.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 Hn.error("There was an error getting job",t),new Error(r)}}a(Eae,"handleGetJob");async function hae(e){try{let t=await pae(e);if(Hn.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=Pa(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Pa(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 Hn.error(r),new Error(r)}}a(hae,"handleGetJobsByStartDate");async function mae(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||el.isEmptyOrZeroLength(e.operation)){let u="job parameter is invalid";return Hn.info(u),t.error=u,t}if(!lt.JOB_TYPE_ENUM[e.operation])return Hn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case lt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=cm.fileObject(e);break;case lt.OPERATIONS_ENUM.CSV_URL_LOAD:n=cm.urlObject(e);break;case lt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=cm.dataObject(e);break;case lt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=cm.s3FileObject(e);break;case lt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case lt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=dx(e,"date");break;case lt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=dx(e,"timestamp");break;case lt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=oae(e);break;default:break}if(n)throw aae(n,n.message,lae.BAD_REQUEST,void 0,void 0,!0);let s=new tae;s.type=e.operation===lt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?lt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new Xoe(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await fx(i))}catch(u){let d=`There was an error inserting a new job: ${u}`;return Hn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=Joe();try{o=await fx(i)}catch(u){let d=`There was an error inserting a new job: ${u}`;return Hn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Hn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new nae(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await _ae(l)}catch(u){return Hn.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,Hn.trace(u)}return t}a(mae,"addJob");async function pae(e){let t=Pa(e.from_date,Pa.ISO_8601),r=Pa(e.to_date,Pa.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 eae(n,e.hdb_user);try{return await dae(s)}catch(i){throw Hn.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(pae,"getJobsInDateRange");async function mx(e){if(el.isEmptyOrZeroLength(e))return el.errorizeMessage("Invalid job ID specified.");let t=new Zoe(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await uae(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Hn.error(n),el.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(mx,"getJobById");async function Sae(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(el.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===lt.JOB_STATUS_ENUM.COMPLETE||e.status===lt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Pa().valueOf());let t=new rae(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await fae(t),r}a(Sae,"updateJob")});var Ox=g((vNe,Ax)=>{"use strict";var Sx=W(),Ur=C(),Tae=require("moment"),lm=CO(),um=G(),Tx=PO(),gx=Yh(),Rx=Xo(),gae=et(),Rae=qh(),MO=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Aae(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(Sx.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Sx.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Ur.JOB_TYPE_ENUM.csv_file_load:await Ri(e,lm.csvFileLoad);break;case Ur.JOB_TYPE_ENUM.csv_url_load:await Ri(e,lm.csvURLLoad);break;case Ur.JOB_TYPE_ENUM.csv_data_load:await Ri(e,lm.csvDataLoad);break;case Ur.JOB_TYPE_ENUM.import_from_s3:await Ri(e,lm.importFromS3);break;case Ur.JOB_TYPE_ENUM.empty_trash:break;case Ur.JOB_TYPE_ENUM.export_local:await Ri(e,gx.export_local);break;case Ur.JOB_TYPE_ENUM.export_to_s3:await Ri(e,gx.export_to_s3);break;case Ur.JOB_TYPE_ENUM.delete_files_before:case Ur.JOB_TYPE_ENUM.delete_records_before:await Ri(e,Rx.deleteFilesBefore);break;case Ur.JOB_TYPE_ENUM.delete_audit_logs_before:await Ri(e,Rx.deleteAuditLogsBefore);break;case Ur.JOB_TYPE_ENUM.delete_transaction_logs_before:await Ri(e,Rae.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(Aae,"parseMessage");async function Ri(e,t){try{e.job.status=Ur.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Tae().valueOf(),await Tx.updateJob(e.job),await Oae(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):um.error(`There was an error running ${t.name} job with id ${e.job.id}`),um.error(n),e.job.message=n,e.job.status=Ur.JOB_STATUS_ENUM.ERROR;try{await Tx.updateJob(e.job)}catch(s){throw um.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Ri,"runJob");async function Oae(e){um.trace("launching job thread:",e),gae.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Ur.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Oae,"launchJobThread");Ax.exports={parseMessage:Aae,RunnerMessage:MO}});var bx=g((HNe,Nx)=>{"use strict";var UO=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};Nx.exports=UO});var kx=g((xNe,FO)=>{"use strict";var Em=Sr(),HO=Vh(),_m=CO(),Ai=vE(),dm=Wi(),k_=Xo(),Nae=uR(),G_=Rr(),fm=xE(),Xt=Uh(),Bt=G(),bae=RR(),yae=c_(),yx=rA(),Iae=ZE(),wae=th(),Cae=nA(),Lae=sh(),Dae=oh(),vO=ch(),Ix=Yh(),Pae=kh(),qO=PO(),F=C(),{hdb_errors:V_,handleHDBError:$_}=re(),{HTTP_STATUS_CODES:wx}=V_,BO=uh(),Cx=Ra(),qx=require("util"),tl=Tr(),Mae=yn(),Uae=_i(),Lx=Ox(),Dx=s_(),Px=(yh(),ne(N_)),Mx=ft(),Ux=qh(),vx=Dh(),{setServerUtilities:vae}=(EE(),ne(Cg)),{CONTEXT:Bae}=(Kn(),ne(_S)),{_assignPackageExport:Hae}=require("../index"),{transformReq:qae}=W(),{server:xae}=(ur(),ne(Uo)),Fae=gO(),Bx=Em.searchByHash,Gae=Em.searchByValue,kae=qx.promisify(Em.search),$ae=qx.promisify(HO.evaluateSQL),Vae={[F.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[F.OPERATIONS_ENUM.CREATE_TABLE]:!0,[F.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[F.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[F.OPERATIONS_ENUM.DROP_TABLE]:!0,[F.OPERATIONS_ENUM.DROP_SCHEMA]:!0},K=bx();async function xx(e,t){try{if(e.body.operation!=="read_log"&&(Bt.log_level===F.LOG_LEVELS.INFO||Bt.log_level===F.LOG_LEVELS.DEBUG||Bt.log_level===F.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;Bt.info(o)}}catch(n){Bt.error(n)}let r=await Fae.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Vae[e.body.operation]&&Mae.setSchemaDataToGlobal(n=>{n&&Bt.error(n)}),r}a(xx,"processLocalTransaction");var Hx=Kae();FO.exports={chooseOperation:Fx,getOperationFunction:Gx,operation:xO,processLocalTransaction:xx};vae(FO.exports);xae.operation=xO;function Fx(e){let t;try{t=Gx(e)}catch(s){throw Bt.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=HO.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=HO.checkASTPermissions(e,i);if(o)throw Bt.error(`${wx.FORBIDDEN} from operation ${e.operation}`),Bt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),$_(new Error,o,V_.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==F.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==F.OPERATIONS_ENUM.LOGIN&&e.operation!==F.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=Pae.verifyPerms(i,s);if(o)throw Bt.error(`${wx.FORBIDDEN} from operation ${e.operation}`),Bt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),$_(new Error,o,V_.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw $_(s,"There was an error when trying to choose an operation path")}return r}a(Fx,"chooseOperation");function Gx(e){if(Bt.trace(`getOperationFunction with operation: ${e.operation}`),Hx.has(e.operation))return Hx.get(e.operation);throw $_(new Error,V_.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),V_.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(Gx,"getOperationFunction");Hae("operation",xO);function xO(e,t){e.hdb_user=this[Bae]?.user,e.bypass_auth=!t;let r=Fx(e);return xx({body:e},r)}a(xO,"operation");async function Yae(e){Bt.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[F.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case F.OPERATIONS_ENUM.INSERT:o=await tl.insert(i);break;case F.OPERATIONS_ENUM.UPDATE:o=await tl.update(i);break;case F.OPERATIONS_ENUM.UPSERT:o=await tl.upsert(i);break;case F.OPERATIONS_ENUM.DELETE:o=await k_.deleteRecord(i);break;default:Bt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Bt.info("Invalid operation in transaction"),Bt.error(o)}}a(Yae,"catchup");async function Hs(e){qae(e);let t,r;try{r=await qO.addJob(e),t=r.createdJob,Bt.info("addJob result",r);let n=new Lx.RunnerMessage(t,e);return await Lx.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 Bt.error(s),$_(n,s)}}a(Hs,"executeJob");function Kae(){let e=new Map;return e.set(F.OPERATIONS_ENUM.INSERT,new K(tl.insert)),e.set(F.OPERATIONS_ENUM.UPDATE,new K(tl.update)),e.set(F.OPERATIONS_ENUM.UPSERT,new K(tl.upsert)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new K(Em.searchByConditions)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_HASH,new K(Bx)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_ID,new K(Bx)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_VALUE,new K(Gae)),e.set(F.OPERATIONS_ENUM.SEARCH,new K(kae)),e.set(F.OPERATIONS_ENUM.SQL,new K($ae)),e.set(F.OPERATIONS_ENUM.CSV_DATA_LOAD,new K(Hs,_m.csvDataLoad)),e.set(F.OPERATIONS_ENUM.CSV_FILE_LOAD,new K(Hs,_m.csvFileLoad)),e.set(F.OPERATIONS_ENUM.CSV_URL_LOAD,new K(Hs,_m.csvURLLoad)),e.set(F.OPERATIONS_ENUM.IMPORT_FROM_S3,new K(Hs,_m.importFromS3)),e.set(F.OPERATIONS_ENUM.CREATE_SCHEMA,new K(Ai.createSchema)),e.set(F.OPERATIONS_ENUM.CREATE_DATABASE,new K(Ai.createSchema)),e.set(F.OPERATIONS_ENUM.CREATE_TABLE,new K(Ai.createTable)),e.set(F.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new K(Ai.createAttribute)),e.set(F.OPERATIONS_ENUM.DROP_SCHEMA,new K(Ai.dropSchema)),e.set(F.OPERATIONS_ENUM.DROP_DATABASE,new K(Ai.dropSchema)),e.set(F.OPERATIONS_ENUM.DROP_TABLE,new K(Ai.dropTable)),e.set(F.OPERATIONS_ENUM.DROP_ATTRIBUTE,new K(Ai.dropAttribute)),e.set(F.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new K(dm.describeSchema)),e.set(F.OPERATIONS_ENUM.DESCRIBE_DATABASE,new K(dm.describeSchema)),e.set(F.OPERATIONS_ENUM.DESCRIBE_TABLE,new K(dm.describeTable)),e.set(F.OPERATIONS_ENUM.DESCRIBE_ALL,new K(dm.describeAll)),e.set(F.OPERATIONS_ENUM.DELETE,new K(k_.deleteRecord)),e.set(F.OPERATIONS_ENUM.ADD_USER,new K(G_.addUser)),e.set(F.OPERATIONS_ENUM.ALTER_USER,new K(G_.alterUser)),e.set(F.OPERATIONS_ENUM.DROP_USER,new K(G_.dropUser)),e.set(F.OPERATIONS_ENUM.LIST_USERS,new K(G_.listUsersExternal)),e.set(F.OPERATIONS_ENUM.LIST_ROLES,new K(fm.listRoles)),e.set(F.OPERATIONS_ENUM.ADD_ROLE,new K(fm.addRole)),e.set(F.OPERATIONS_ENUM.ALTER_ROLE,new K(fm.alterRole)),e.set(F.OPERATIONS_ENUM.DROP_ROLE,new K(fm.dropRole)),e.set(F.OPERATIONS_ENUM.USER_INFO,new K(G_.userInfo)),e.set(F.OPERATIONS_ENUM.READ_LOG,new K(bae)),e.set(F.OPERATIONS_ENUM.ADD_NODE,new K(yae)),e.set(F.OPERATIONS_ENUM.UPDATE_NODE,new K(yx)),e.set(F.OPERATIONS_ENUM.SET_NODE_REPLICATION,new K(yx)),e.set(F.OPERATIONS_ENUM.REMOVE_NODE,new K(Iae)),e.set(F.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new K(wae)),e.set(F.OPERATIONS_ENUM.PURGE_STREAM,new K(Cae)),e.set(F.OPERATIONS_ENUM.SET_CONFIGURATION,new K(Mx.setConfiguration)),e.set(F.OPERATIONS_ENUM.CLUSTER_STATUS,new K(Lae.clusterStatus)),e.set(F.OPERATIONS_ENUM.CLUSTER_NETWORK,new K(Dae)),e.set(F.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new K(vO.setRoutes)),e.set(F.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new K(vO.getRoutes)),e.set(F.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new K(vO.deleteRoutes)),e.set(F.OPERATIONS_ENUM.EXPORT_TO_S3,new K(Hs,Ix.export_to_s3)),e.set(F.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new K(Hs,k_.deleteFilesBefore)),e.set(F.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new K(Hs,k_.deleteFilesBefore)),e.set(F.OPERATIONS_ENUM.EXPORT_LOCAL,new K(Hs,Ix.export_local)),e.set(F.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new K(qO.handleGetJobsByStartDate)),e.set(F.OPERATIONS_ENUM.GET_JOB,new K(qO.handleGetJob)),e.set(F.OPERATIONS_ENUM.GET_FINGERPRINT,new K(BO.getFingerprint)),e.set(F.OPERATIONS_ENUM.SET_LICENSE,new K(BO.setLicense)),e.set(F.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new K(BO.getRegistrationInfo)),e.set(F.OPERATIONS_ENUM.RESTART,new K(Cx.restart)),e.set(F.OPERATIONS_ENUM.RESTART_SERVICE,new K(Cx.restartService)),e.set(F.OPERATIONS_ENUM.CATCHUP,new K(Yae)),e.set(F.OPERATIONS_ENUM.SYSTEM_INFORMATION,new K(Uae.systemInformation)),e.set(F.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new K(Hs,k_.deleteAuditLogsBefore)),e.set(F.OPERATIONS_ENUM.READ_AUDIT_LOG,new K(Nae)),e.set(F.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new K(Dx.createTokens)),e.set(F.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new K(Dx.refreshOperationToken)),e.set(F.OPERATIONS_ENUM.LOGIN,new K(Px.login)),e.set(F.OPERATIONS_ENUM.LOGOUT,new K(Px.logout)),e.set(F.OPERATIONS_ENUM.GET_CONFIGURATION,new K(Mx.getConfiguration)),e.set(F.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new K(Xt.customFunctionsStatus)),e.set(F.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new K(Xt.getCustomFunctions)),e.set(F.OPERATIONS_ENUM.GET_COMPONENT_FILE,new K(Xt.getComponentFile)),e.set(F.OPERATIONS_ENUM.GET_COMPONENTS,new K(Xt.getComponents)),e.set(F.OPERATIONS_ENUM.SET_COMPONENT_FILE,new K(Xt.setComponentFile)),e.set(F.OPERATIONS_ENUM.DROP_COMPONENT,new K(Xt.dropComponent)),e.set(F.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new K(Xt.getCustomFunction)),e.set(F.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new K(Xt.setCustomFunction)),e.set(F.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new K(Xt.dropCustomFunction)),e.set(F.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new K(Xt.addComponent)),e.set(F.OPERATIONS_ENUM.ADD_COMPONENT,new K(Xt.addComponent)),e.set(F.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new K(Xt.dropCustomFunctionProject)),e.set(F.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new K(Xt.packageComponent)),e.set(F.OPERATIONS_ENUM.PACKAGE_COMPONENT,new K(Xt.packageComponent)),e.set(F.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new K(Xt.deployComponent)),e.set(F.OPERATIONS_ENUM.DEPLOY_COMPONENT,new K(Xt.deployComponent)),e.set(F.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new K(Ux.readTransactionLog)),e.set(F.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new K(Hs,Ux.deleteTransactionLogsBefore)),e.set(F.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new K(vx.installModules)),e.set(F.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new K(vx.auditModules)),e.set(F.OPERATIONS_ENUM.GET_BACKUP,new K(Ai.getBackup)),e}a(Kae,"initializeOperationFunctionMap")});var mm=g((GNe,Yx)=>{"use strict";var GO=C(),Wae=W(),Y_=G(),{handleHDBError:kO,hdb_errors:hm}=re(),{isMainThread:Qae}=require("worker_threads"),{Readable:jae}=require("stream"),$x=require("os"),zae=require("util"),Jae=DR(),Xae=zae.promisify(Jae.authorize),Vx=kx(),{createGzip:Zae,constants:ece}=require("zlib");function tce(e){let t=`Found an uncaught exception with message: ${e.message}. ${$x.EOL}Stack: ${e.stack} ${$x.EOL}Terminating ${Qae?"HDB":"thread"}.`;console.error(t),Y_.fatal(t),process.exit(1)}a(tce,"handleServerUncaughtException");function rce(e,t,r){if(Y_[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:hm.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(rce,"serverErrorHandler");function nce(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=kO(new Error,"Invalid JSON.",hm.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(Wae.isEmpty(e.body.operation)){let n=kO(new Error,"Request body must include an 'operation' property.",hm.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(nce,"reqBodyValidationHandler");function sce(e,t,r){let n;e.body.operation!==GO.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==GO.OPERATIONS_ENUM.LOGIN&&e.body.operation!==GO.OPERATIONS_ENUM.LOGOUT?Xae(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{Y_.warn(s),Y_.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(kO(s,i,hm.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(sce,"authHandler");async function ice(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=Vx.chooseOperation(e.body);let s=await Vx.processLocalTransaction(e,n);if(s instanceof jae&&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(Zae({level:ece.Z_BEST_SPEED})))}return s}catch(s){throw Y_.error(s),s}}a(ice,"handlePostRequest");Yx.exports={authHandler:sce,handlePostRequest:ice,handleServerUncaughtException:tce,serverErrorHandler:rce,reqBodyValidationHandler:nce}});var jx=g(($Ne,Qx)=>{"use strict";var oce=require("fastify-plugin"),{handlePostRequest:Kx,authHandler:ace,reqBodyValidationHandler:cce}=mm();async function lce(e){e.decorate("hdbCore",{preValidation:[cce,ace],request:t=>Wx(Kx(t,response)),requestWithoutAuthentication:(t,r)=>Wx(Kx(t,r,!0))})}a(lce,"hdbCore");async function Wx(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(Wx,"convertAsyncIterators");Qx.exports=oce(lce)});var Xx=g((KNe,Jx)=>{"use strict";var YNe=require("fs"),$O=J();$O.initSync();var{CONFIG_PARAMS:zx}=C(),uce=1024*1024*1024;function _ce(e){let t=$O.get(zx.HTTP_TIMEOUT),r=$O.get(zx.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:uce,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(_ce,"getServerOptions");Jx.exports=_ce});var tF=g((QNe,eF)=>{"use strict";var VO=J();VO.initSync();var{CONFIG_PARAMS:Zx}=C();function dce(){let e=VO.get(Zx.HTTP_CORSACCESSLIST),t=VO.get(Zx.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(dce,"getCORSOptions");eF.exports=dce});var sF=g((zNe,nF)=>{"use strict";var rF=J();rF.initSync();var fce=C();function Ece(){return rF.get(fce.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Ece,"getHeaderTimeoutConfig");nF.exports=Ece});var KO={};ke(KO,{customFunctionsServer:()=>pce,ready:()=>TF,start:()=>mce});function mce(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Oi||(Oi=SF(t),st.http((await Oi).server));let o=await Oi,c=(0,YO.dirname)(s),l=(0,YO.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!iF.has(c)){iF.add(c);try{o.register(Tce(c,l))}catch(_){if(_.message==="Root plugin has already booted")Ye.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:TF}}async function pce(){try{Ye.info("In Custom Functions Fastify server"+process.cwd()),Ye.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ye.debug(`Custom Functions server process ${process.pid} starting up.`),await Sce();let e=_F.get(dF.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Oi=await SF(e)}catch(r){throw Ye.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ye.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ye.error(`Custom Functions ${process.pid} Error: ${e}`),Ye.error(e),process.exit(1)}}async function Sce(){try{Ye.info("Custom Functions starting configuration."),await fF.setUsersToGlobal(),Ye.info("Custom Functions completed configuration.")}catch(e){Ye.error(e)}}function Tce(e,t){return async function(r){try{Ye.info("Custom Functions starting buildRoutes"),Ye.trace("Loading fastify routes folder "+e),(0,oF.existsSync)(e)&&r.register(uF.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Ye.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Ye.error(s.message):s&&Ye.error(s),o()})}catch(n){Ye.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function SF(e){Ye.info("Custom Functions starting buildServer.");let t=(0,EF.default)(e),r=(0,aF.default)(t);r.server.headersTimeout=(0,mF.default)(),r.setErrorHandler(pF.serverErrorHandler);let n=(0,hF.default)();return n&&r.register(cF.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(lF.default),await r.register(hce),await r.after(),iO(r),Ye.info("Custom Functions completed buildServer."),r}function TF(){if(Oi)return Oi.then?Oi.then(e=>e.ready()):Oi.ready()}var YO,oF,aF,cF,lF,uF,_F,dF,Ye,hce,fF,EF,hF,mF,pF,Oi,iF,gF=ye(()=>{YO=require("path"),oF=require("fs"),aF=q(require("fastify")),cF=q(require("@fastify/cors")),lF=q(fO()),uF=q(require("@fastify/autoload")),_F=q(J()),dF=q(C()),Ye=q(G()),hce=q(jx()),fF=q(Rr()),EF=q(Xx()),hF=q(tF()),mF=q(sF()),pF=q(mm());$c();ur();iF=new Set;a(mce,"start");a(pce,"customFunctionsServer");a(Sce,"setUp");a(Tce,"buildRouteFolder");a(SF,"buildServer");a(TF,"ready")});var WO={};ke(WO,{start:()=>gce});function gce(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,bF.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){AF||(AF=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=RF.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,OF.default)(s,(0,NF.realpathSync)(o))}}return i(s)},{runFirst:!0})),RF.set(r,n)}}}var OF,NF,bF,RF,AF,yF=ye(()=>{OF=q(require("send")),NF=require("fs"),bF=q(require("serve-static")),RF=new Map;a(gce,"start")});var JO={};ke(JO,{Request:()=>QO,createReuseportFd:()=>pm});var IF,QO,jO,zO,pm,Sm=ye(()=>{IF=require("os"),QO=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 zO(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 jO(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},jO=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},zO=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,IF.platform)()!="win32"&&(pm=require("node-unix-socket").createReuseportFd)});var DF=g((cbe,LF)=>{"use strict";var Rce=require("cluster"),Ma=J();Ma.initSync();var CF=C(),nbe=require("util"),Ni=G(),sbe=require("fs"),Ace=require("fastify"),ibe=Mo(),Oce=require("@fastify/cors"),Nce=require("@fastify/compress"),bce=require("@fastify/static"),yce=fO(),Ice=require("path"),{PACKAGE_ROOT:wce}=C(),Cce=yn(),Lce=W(),Dce=Rr(),Pce=ra(),{server:Mce}=(ur(),ne(Uo)),{node_request_key:obe}=(Sm(),ne(JO)),{authHandler:Uce,handlePostRequest:vce,serverErrorHandler:Bce,reqBodyValidationHandler:Hce}=mm(),abe=require("net"),{registerContentHandlers:qce}=($c(),ne(Oq)),xce=6e4,Fce=1024*1024*1024,Gce="TRUE",{CONFIG_PARAMS:K_}=CF,rl;LF.exports={hdbServer:wF,start:wF};async function wF(e){try{Ni.info("In Fastify server"+process.cwd()),Ni.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ni.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Rce.isMaster,await kce();let t=e.securePort>0;rl=$ce(t),await rl.ready(),e||(e={}),e.isOperationsServer=!0;try{Mce.http(rl.server,e),rl.server.closeIdleConnections||await rl.listen({port:0,host:"::"})}catch(r){throw rl.close(),Ni.error(r),Ni.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Ni.fatal(t),process.exit(1)}}a(wF,"operationsServer");async function kce(){Ni.trace("Configuring HarperDB process."),Cce.setSchemaDataToGlobal(),await Dce.setUsersToGlobal(),await Pce.getLicense()}a(kce,"setUp");function $ce(e){Ni.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Vce(e),r=Ace(t);r.server.headersTimeout=Kce(),r.setErrorHandler(Bce);let n=Yce();n&&r.register(Oce,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,_){r.server.emit("unhandled",l.raw,_.raw)}),c()}),r.register(yce),r.register(Nce),r.register(bce,{root:Ice.join(wce,"studio/build-local")}),qce(r);let s=Ma.get(CF.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Lce.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Hce,Uce],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),vce(i,o)}),r.get("/health",()=>"HarperDB is running."),Ni.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a($ce,"buildServer");function Vce(e){let t=Ma.get(K_.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ma.get(K_.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Fce,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Vce,"getServerOptions");function Yce(){let e=Ma.get(K_.OPERATIONSAPI_NETWORK_CORS),t=Ma.get(K_.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Gce)&&(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(Yce,"getCORSOpts");function Kce(){return Ma.get(K_.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??xce}a(Kce,"getHeaderTimeoutConfig")});var GF=g((fbe,FF)=>{"use strict";var{decode:Wce}=require("msgpackr"),{isMainThread:ube,parentPort:Qce,threadId:_be}=require("worker_threads"),ZO=Et(),bi=Je(),jce=C(),mo=G(),PF=J(),UF=C();et();var zce=ci(),{recordAction:Jce,recordActionBinary:Xce}=(li(),ne(Du)),{publishToStream:Zce}=ZO,{ConsumerEvents:ele}=require("nats"),dbe={durable:bi.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:bi.WORK_QUEUE_CONSUMER_NAMES.deliver_group},tle,rle,nle,vF,BF;FF.exports={initialize:eN,workQueueListener:xF,setSubscription:sle,setIgnoreOrigin:ole,getDatabaseSubscriptions:ile};async function eN(){BF=!0,mo.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await ZO.getNATSReferences();tle=e,rle=e.info.server_name,nle=t,vF=r}a(eN,"initialize");var gm=new Map;function sle(e,t,r){let n=gm.get(e);n||gm.set(e,n=new Map),n.set(t,r),BF||eN().then(xF)}a(sle,"setSubscription");function ile(){return gm}a(ile,"getDatabaseSubscriptions");var HF;function ole(e){HF=e}a(ole,"setIgnoreOrigin");var qF=100,MF=new Array(qF),Tm=0;async function xF(){let e=await vF.consumers.get(bi.WORK_QUEUE_CONSUMER_NAMES.stream_name,bi.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(Qce?.on("message",async n=>{let{type:s}=n;s===UF.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===ele.HeartbeatsMissed){let s=n.data;mo.trace(`${s} clustering ingest consumer heartbeats missed`),s===2&&(mo.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let n of r)await MF[Tm],MF[Tm]=ale(n).catch(s=>{mo.error(s)}),++Tm>=qF&&(Tm=0)}catch(n){mo.error("Error consuming clustering ingest, restarting consumer",n)}ZO.clearClientCache(),await eN()}}a(xF,"workQueueListener");async function ale(e){let t=Wce(e.data);Jce(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,n=!1,s=PF.get(jce.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(bi.MSG_HEADERS.TRANSACTED_NODES)&&r.values(bi.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(bi.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!HF),Xce(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(bi.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:_,records:u,hash_values:d,__origin:f,expiresAt:E}=t;mo.trace("processing message:",o,c,_,(u?"records: "+u.map(R=>R?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),mo.trace(`messageProcessor nats msg id: ${e.headers.get(bi.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let{timestamp:p,user:S,node_name:O}=f||{},T=gm.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:XO(o),value:u[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:O});else{let R=u.map((B,H)=>({type:XO(o),value:B,expiresAt:E,id:d?.[H],table:_}));for(;l;)R.push({type:XO(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:p,onCommit:h,user:S,nodeName:O})}PF.get(UF.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Zce(e.subject.split(".").slice(0,-1).join("."),zce.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){mo.error(o)}e.ack()}a(ale,"messageProcessor");function XO(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(XO,"convertOperation")});var oN={};ke(oN,{disableNATS:()=>lle,publishToStream:()=>bm,setNATSReplicator:()=>tN,setPublishToStream:()=>ule,setSubscription:()=>iN,start:()=>cle});function cle(){Am.default.get(Om.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&dle()}function lle(e=!0){KF=e}function ule(e,t){bm=e,iN=t}function dle(){if(KF||process.env._DISABLE_NATS)return;let e=Zn(),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];tN(s,r,i)}}Ug((r,n)=>{tN(r.tableName,r.databaseName,r),n&&QF(r)}),!kF&&(kF=!0)}function tN(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 Yt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Pe],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Pe]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Pe],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Pe],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Pe]})}static defineSchema(i){QF(i)}static subscribe(){let i=new Yn;return iN(t,e,i),i}static subscribeOnThisThread(i){return i<_le}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 Rm(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=WF;return i}a(n,"getNATSTransaction")}function QF(e){let t=Am.default.get(Om.default.CONFIG_PARAMS.CLUSTERING_NODENAME);bm(`${nN.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 $F,nN,sN,VF,YF,Am,Om,Nm,KF,bm,iN,_le,WF,kF,Rm,rN,jF=ye(()=>{Ne();Kn();$F=q(Et()),nN=q(Je()),sN=q(ci());ql();VF=q(GF()),YF=q(dr()),Am=q(J()),Om=q(C()),Nm=q(G());a(cle,"start");a(lle,"disableNATS");bm=$F.publishToStream,iN=VF.setSubscription;a(ule,"setPublishToStream");_le=2;a(dle,"assignReplicationSource");a(tN,"setNATSReplicator");a(QF,"publishSchema");Rm=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=Am.default.get(Om.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||(Nm.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(bm(`${nN.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,sN.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(u=>{throw Nm.error("An error has occurred trying to replicate transaction",l,u),u.statusCode=504,u}))}return Promise.all(n)}},rN=class extends Rm{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,YF.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};WF=new rN});var fN=g(Ua=>{"use strict";var{isMainThread:fle,parentPort:Q_,threadId:ym}=require("worker_threads"),{Socket:Ele,createServer:hle}=require("net"),{createServer:mle,IncomingMessage:ple}=require("http"),{createServer:Sle}=require("https"),{readFileSync:nl,unlinkSync:zF,existsSync:Tle}=require("fs"),qn=G(),Fe=J(),vr=C(),{server:Cm}=(ur(),ne(Uo)),{WebSocketServer:gle}=require("ws"),{createServer:Rle}=require("tls"),{getTicketKeys:Ale,restartNumber:Ole,getWorkerIndex:JF}=et(),{Headers:rG}=(Ah(),ne(WB)),{recordAction:W_,recordActionBinary:Nle}=(li(),ne(Du)),{Request:nG,createReuseportFd:XF}=(Sm(),ne(JO)),{checkMemoryLimit:ble}=ra(),sG=require("tls"),ZF=sG.createSecureContext;sG.createSecureContext=function(e){if(!e.cert||!e.key)return ZF(e);let t={...e};delete t.key,delete t.cert;let r=ZF(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){Ole<=1&&qn.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:gbe,CONFIG_PARAMS:yle}=vr;Fe.initSync();var Ile=Fe.get(yle.HTTP_SESSIONAFFINITY),qs={};Ua.registerServer=_N;Ua.httpServer=dN;Ua.deliverSocket=uN;Ua.startServers=iG;Ua.when_components_loaded=null;Cm.http=dN;Cm.request=Dle;Cm.socket=Ple;Cm.ws=Mle;var aN={},Im={},wle,po={},wm={},Cle=[],cN=[];function iG(){return Ua.when_components_loaded=Lm().loadRootComponents(!0).then(()=>{Q_?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)uN(n,r,s);else if(t.requestId)Lle(t);else if(t.type===vr.ITC_EVENT_TYPES.SHUTDOWN){qn.trace("received shutdown request",ym);for(let i in qs){let o=qs[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?qn.info(`Closing ${E.length} idle connections`):f&&qn.warn(`Forcefully closing ${E.length} active connections`);for(let h=0,p=E.length;h<p;h++){let S=E[h].socket;S._httpMessage&&!S._httpMessage.finished&&!f||(f?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
28
+ Connection: close\r
29
+ \r
30
+ `))}},25).unref()}o.close?.(()=>{if(Fe.get(vr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&JF()==0)try{zF(Fe.get(vr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,ym),o.cantCleanupProperly||qn.warn("Had to forcefully exit the thread",ym),process.exit(0)},5e3).unref()})}if(process.env.DEV_MODE)try{require("inspector").close()}catch(i){console.error("Could not close debugger",i)}}}).ref();let e=[];if(XF&&!Ile)for(let t in qs){let r=qs[t];if(isNaN(t)&&JF()==0){Tle(t)&&zF(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),qn.info("Domain socket listening on "+t)}).on("error",i)}));continue}let n;try{n=XF(+t,"::")}catch(s){console.error(`Unable to bind to port ${t}`,s);continue}e.push(new Promise((s,i)=>{r.listen({fd:n},()=>{s(),qn.trace("Listening on port "+t,ym)}).on("error",i)}))}Promise.all(e).then(()=>{Q_?.postMessage({type:vr.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(iG,"startServers");fle||iG();function uN(e,t,r){let n=e?.read?e:new Ele({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=qs[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=qs[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(qn.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(uN,"deliverSocket");var eG=new Map;function Lle(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=eG.get(s),r){case"connection":i=uN(void 0,t),eG.set(s,i),i.write=(c,l,_)=>(Q_.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,l,_)=>(Q_.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Q_.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(Lle,"proxyRequest");function _N(e,t,r=!0){!+t&&t!==Fe.get(vr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(Fe.get(vr.CONFIG_PARAMS.HTTP_PORT),10));let n=qs[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",tG),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else qs[t]=e;e.on("unhandled",tG)}a(_N,"registerServer");function oG(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=[],Fe.get(vr.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Fe.get(vr.CONFIG_PARAMS.HTTP_PORT),secure:Fe.get(vr.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Fe.get(vr.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Fe.get(vr.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Fe.get(vr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:Fe.get(vr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(oG,"getPorts");function dN(e,t){for(let{port:r,secure:n}of oG(t))aG(r,n,t?.isOperationsServer),typeof e=="function"?cN[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,_N(e,r,!1)),wm[r]=lN(cN,r),wle=lN(Cle,r)}a(dN,"httpServer");function aG(e,t,r){if(!po[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:Fe.get(n+"_keepAliveTimeout"),headersTimeout:Fe.get(n+"_headersTimeout"),requestTimeout:Fe.get(n+"_timeout")},i=Fe.get(n+"_mtls"),o=Fe.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let l=Fe.get(n+"tls_privateKey"),_=Fe.get(n+"tls_certificate"),u=Fe.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:nl(l),ciphers:Fe.get("tls_ciphers"),cert:nl(_),ca:u&&nl(u),rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:Ale()})}let c=ble();po[e]=(t?Sle:mle)(s,async(l,_)=>{try{let d=performance.now(),f=new nG(l,_);r&&(f.isOperationsServer=!0);let E=await wm[e](f);if(!E){if(f._nodeResponse.statusCode)return;E=cG(f)}if(c?E.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):E.headers?.set?.("Server","HarperDB"),E.status===-1){for(let H of E.headers||[])_.setHeader(H[0],H[1]);return l.baseRequest=f,_.baseResponse=E,po[e].emit("unhandled",l,_)}let h=E.status||200,p=performance.now(),S=p-d,O=E.body,T;if(!E.handlesHeaders){let H=E.headers||new rG;if(O?O.length>=0&&(typeof O=="string"?H.set("Content-Length",Buffer.byteLength(O)):H.set("Content-Length",O.length),T=!0):(H.set("Content-Length","0"),T=!0),H.append){let v=`hdb;dur=${S.toFixed(2)}`;E.wasCacheMiss&&(v+=", miss"),H.append("Server-Timing",v,!0)}_.writeHead(h,H&&(H[Symbol.iterator]?Array.from(H):H)),T&&_.end(O)}let R=f.handlerPath,B=f.method;if(W_(S,"duration",R,B,E.wasCacheMiss==null?void 0:E.wasCacheMiss?"cache-miss":"cache-hit"),Nle(h<400,"success",R,B),!T)if(O?.pipe){O.pipe(_),O.destroy&&_.on("close",()=>{O.destroy()});let H=0;O.on("data",v=>{H+=v.length}),O.on("end",()=>{W_(performance.now()-p,"transfer",R,B),W_(H,"bytes-sent",R,B)})}else O?.then?O.then(H=>{_.end(H)},u):_.end(O)}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?qn.warn(d):qn.info(d):qn.error(d)}a(u,"onError")}),i&&(po[e].mtlsConfig=i),t&&(po[e].on("secureConnection",l=>{l._parent.startTime&&W_(performance.now()-l._parent.startTime,"tls-handshake",e),W_(l.isSessionReused(),"tls-reused",e)}),po[e].isSecure=!0),_N(po[e],e)}return po[e]}a(aG,"getHTTPServer");function lN(e,t){let r=cG;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(lN,"makeCallbackChain");function cG(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new rG}}a(cG,"unhandled");function Dle(e,t){dN(e,{requestOnly:!0,...t})}a(Dle,"onRequest");function Ple(e,t){let r;if(t.securePort){let n=Fe.get("tls_privateKey"),s=Fe.get("tls_certificate"),i=t.mtls?.certificateAuthority||Fe.get("tls_certificateAuthority");r=Rle({ciphers:Fe.get("tls_ciphers"),key:nl(n),cert:nl(s),ca:i&&nl(i),rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls},e),qs[t.securePort]=r}return t.port&&(r=hle(e),qs[t.port]=r),r}a(Ple,"onSocket");Object.defineProperty(ple.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 Mle(e,t){let r;for(let{port:n,secure:s}of oG(t)){Im[n]||(Im[n]=new gle({server:r=aG(n,s)}),Im[n].on("connection",async(c,l)=>{try{let _=new nG(l);_.isWebSocket=!0;let u=wm[n](_),d=l.headers["sec-websocket-protocol"]||"",f=aN[n];if(d){let E;for(let h=0;h<f.length;h++){let p=f[h];p.protocol===d&&(E=!0,p.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(_){qn.warn("Error handling WebSocket connection",_)}}),Im[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=aN[n];o||(o=aN[n]=[]),o.push({listener:e,protocol:i}),wm[n]=lN(cN,n)}return r}a(Mle,"onWebSocket");function tG(e,t){t.writeHead(404),t.end(`Not found
31
+ `)}a(tG,"defaultNotFound")});async function dG({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await EN.getResource(e,{});s=new pN(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await EN.get(e);i&&i.delete()}s=new Pm(e,t)}return n&&(n.id=e,n.user={username:t?.username},j_.put(n)),s}function hN(){return Dm++,Dm>65500&&(Dm=1),Dm}function mN(e,t,r=e){let{topic:n,retain:s}=e;e.data=t,e.async=!0,e.authorize=!0;let i=ki.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 lG,va,uG,_G,EN,j_,Dm,Pm,pN,fG=ye(()=>{Ne();Kl();lG=q(dr()),va=q(G());Fo();uG=q(et()),_G=q(fN());ur();EN=dt({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"}]}}]}),j_=dt({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,uG.getWorkerIndex)()===0&&(async()=>{await _G.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of j_.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await st.getUser(r.user.username)),ze(r,()=>{try{mN(r,t)}finally{j_.delete(e.id,r)}})}})();a(dG,"getSession");Dm=1;a(hN,"getNextMessageId");Pm=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(O=>O.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,va.trace)("Resuming subscription from",s,"from",o);let E=ki.getMatch(_);if(!E){let O=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw O.statusCode=404,O}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let O=f.url.slice(1);if(O.indexOf("#")>-1&&O.indexOf("#")!==O.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,O.indexOf("+")===O.length-1)f.onlyChildren=!0,f.url="/"+O.slice(0,O.length-1);else{let T=O.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 B=!0;T[T.length-1]==="#"&&(T.length--,B=!1),R&&(n=a(v=>{let P=v.id;if(!Array.isArray(P)||B&&P.length!==T.length)return!1;for(let V=0;V<T.length;V++)if(T[V]!=="+"&&T[V]!==P[V])return!1;return!0},"filter"));let H=T.indexOf("+");f.url="/"+(H>-1?T.slice(0,H):T).concat("").join("/")}}let h=E.path,p=E.Resource,S=await ze(f,async()=>{let O=await p.subscribe(f);if(!O)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!O[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let T of O)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=hN());let B=T.id;Array.isArray(B)&&(B=ic(B)),B==null&&(B=""),this.listener(h+"/"+B,T.value,R,t)}catch(R){(0,va.warn)(R)}})(),O});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=hN();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,mN(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};ze(r,async()=>{if(!t){let n=await j_.get(this.sessionId,r);n?.doesExist()&&await mN(n,n.data,r)}await j_.delete(this.sessionId,r)}).catch(n=>{(0,va.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(mN,"publish");pN=class extends Pm{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=hN(),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,va.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,lG.getNextMonotonicTime)()),(0,va.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),EN.put(this.sessionRecord)),t.qos}}});var SN={};ke(SN,{bypassAuth:()=>Ule,start:()=>vle});function Ule(){SG=!0}function vle({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}=mG(_,(h,p)=>{if(_.send(h),p&&_._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,Br.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,Br.error)(E)}else if(l.required)return(0,Br.info)(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!u&&SG&&_.remoteAddress.includes("127.0.0.1")&&(u=await(0,pG.getSuperUser)());let{onMessage:d,onClose:f}=mG(_,E=>_.write(E),null,u,o);_.on("data",d),_.on("close",f),_.on("error",E=>{(0,Br.info)("Socket error",E)})},{port:t,securePort:s,mtls:l})),c}function mG(e,t,r,n,s){hG||(hG=!0,Lu(d=>{Mm>0&&d.push({metric:"mqtt-connections",connections:Mm,byThread:!0})}));let i;Mm++;let o,c={protocolVersion:4},l=(0,vm.parser)({protocolVersion:5});function _(d){l.parse(d)}a(_,"onMessage");function u(){Mm--,i||(i=!0,o?.disconnect(),s.sessions.delete(o),In(!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 st.getUser(d.username,d.password.toString(),r),(0,Um.get)(xs.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&EG.notify({username:n.username,status:xs.AUTH_AUDIT_STATUS.SUCCESS,type:xs.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,Um.get)(xs.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&EG.error({username:n.username,status:xs.AUTH_AUDIT_STATUS.FAILURE,type:xs.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return In(!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=Ia(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?R(d.will.payload):void 0,delete d.will.payload}o=dG({user:n,...d}),o=await o,s.sessions.add(o)}catch(R){return(0,Br.error)(R),In(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:R.code||5,returnCode:R.code||128})}In(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((R,B,H,v)=>{try{let P=R.indexOf("/",1),V=P>0?R.slice(0,P):R;f({cmd:"publish",topic:R,payload:E(B),messageId:H||Math.floor(Math.random()*1e8),qos:v.qos},V)}catch(P){(0,Br.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 B;try{B=(await o.addSubscription(R,R.qos>=1)).qos||0}catch(H){(0,Br.error)(H),B=c.protocolVersion<5?128:H.statusCode===403?135:H.statusCode===404?143:128}h.push(B)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let R=[];for(let B of d.unsubscriptions)R.push(o.removeSubscription(B)?0:17);f({cmd:"unsuback",granted:R,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let p=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=Ia(r?.headers.get?.("content-type"))),O=d.payload?.length>0?S(d.payload):void 0,T;try{T=await o.publish(d,O)}catch(R){(0,Br.warn)(R),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode: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),In(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Br.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,vm.generate)(h,c);t(S),nn(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return _o(h,r)}a(E,"serialize")}),{onMessage:_,onClose:u}}var vm,pG,Um,xs,Br,EG,SG,hG,Mm,TG=ye(()=>{vm=require("mqtt-packet");fG();pG=q(Rr());$c();li();ur();Um=q(J()),xs=q(C()),Br=q(G()),EG=(0,Br.loggerWithTag)("auth-event"),SG=(0,Um.get)(xs.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Ule,"bypassAuth");a(vle,"start");Mm=0;a(mG,"onSocket")});var vh={};ke(vh,{component_errors:()=>il,loadComponent:()=>Bm,loadComponentDirectories:()=>wG,setErrorReporter:()=>xle});function wG(e,t){t&&(gN=t),e&&(RN=e);let r=[];if((0,cs.existsSync)(TN)){let s=(0,cs.readdirSync)(TN,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,bt.join)(TN,o);r.push(Bm(c,gN,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Bm(n,gN,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{IG=!0})}function xle(e){J_=e}async function Bm(e,t,r,n,s,i){if(!RG.has(e)){RG.set(e,!0),s&&(RN=s);try{let o;n&&(il=new Map);let c=(0,bt.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,cs.existsSync)(c)?o=n?(0,yG.getConfigObj)():(0,AG.parseDocument)((0,cs.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=AN;let l=[],_=n;for(let u in o){let d=o[u];if(il.set(n?u:(0,bt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let T=e,R;for(;!(0,cs.existsSync)(R=(0,bt.join)(T,"node_modules",u));)if(T=(0,bt.dirname)(T),T.length<(0,bG.getHdbBasePath)().length){R=null;break}if(R)f=await Bm(R,t,r,!1),_=!0;else throw new Error(`Unable to find package ${u}:${E}`)}else f=qle[u];if(!f)continue;l.push(f);let h=a(T=>(T.origin=r,dt(T)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,O=!p?.https&&p?.port;if(sl.isMainThread&&(f=await f.startOnMainThread?.({server:st,ensureTable:h,port:O,securePort:S,resources:t,...d})||f,n&&p))for(let T of[O,S])try{if(+T&&!gG.includes(T)){let R=ON.get(NN.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);R&&z_.default.warn("Session affinity is not recommended and may cause memory leaks"),(R||!pm)&&(gG.push(T),bN(T,R))}}catch(R){console.error("Error listening on socket",T,R,u)}if(t.isWorker&&(f=await f.start?.({server:st,ensureTable:h,port:O,securePort:S,resources:t,...d})||f),RN.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,NG.handleHDBError)("Can not reference parent directories");let T=(0,bt.join)(e,d.files).replace(/\\/g,"/"),R=T.indexOf("/*");if(R>-1&&d.files!==AN[u]?.files&&!(0,cs.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 B=(0,bt.basename)(e),H=d.path||"/";H=H.startsWith("/")?H:H.startsWith("./")?"/"+B+H.slice(2):H==="."?"/"+B:"/"+B+"/"+H;let v,P,V;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",P=(0,bt.join)(e,z)}else(V=T.indexOf("/*"))>-1&&(P=T.slice(0,V+1),v=(0,bt.relative)(e,P));let Y=!1;if(sl.isMainThread&&f.setupDirectory&&(Y=await f.setupDirectory?.(H,P,t)),t.isWorker&&f.handleDirectory&&(Y=await f.handleDirectory?.(H,P,t)),Y)continue;for(let z of await(0,OG.default)(T,{onlyFiles:!1,objectMode:!0})){let{path:oe,dirent:Re}=z;_=!0;let ce=(0,bt.relative)(e,oe).replace(/\\/g,"/");if(v)if(ce.startsWith(v))ce=ce.slice(v.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${ce}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Ge=H+(H.endsWith("/")?"":"/")+ce;try{if(Re.isFile()){let Ee=await Hle(oe);sl.isMainThread&&await f.setupFile?.(Ee,Ge,oe,t),t.isWorker&&await f.handleFile?.(Ee,Ge,oe,t)}else sl.isMainThread&&await f.setupDirectory?.(Ge,oe,t),t.isWorker&&await f.handleDirectory?.(Ge,oe,t)}catch(Ee){Ee.message=`Could not load ${Re.isFile()?"file":"directory"} '${oe}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${Ee.message}`,J_?.(Ee),((0,ol.getWorkerIndex)()===0?console:z_.default).error(Ee),t.set(d.path||"/",new X_(Ee)),il.set(n?u:(0,bt.basename)(e),Ee.message)}}}}catch(h){h.message=`Could not load component '${u}' for application '${(0,bt.basename)(e)}' due to: ${h.message}`,J_?.(h),((0,ol.getWorkerIndex)()===0?console:z_.default).error(h),t.set(d.path||"/",new X_(h),null,!0),il.set(n?u:(0,bt.basename)(e),h.message)}}if(sl.isMainThread&&!IG&&i&&(0,ol.watchDir)(e,async()=>wG()),o.extensionModule)return await yE((0,bt.join)(e,o.extensionModule));if(!_&&t.isWorker){let u=`${e} did not load any modules, resources, or files, is this a valid component?`;J_?.(new Error(u)),((0,ol.getWorkerIndex)()===0?console:z_.default).error(u),il.set((0,bt.basename)(e),u)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,J_?.(o),t.set("",new X_(o))}}}var cs,bt,sl,AG,ON,NN,OG,ol,z_,NG,bG,Ble,yG,Hle,TN,RN,IG,gN,il,qle,AN,gG,RG,J_,X_,Bh=ye(()=>{cs=require("fs"),bt=require("path"),sl=require("worker_threads"),AG=require("yaml"),ON=q(J()),NN=q(C());YM();jM();zM();Mq();gF();yF();OG=q(require("fast-glob")),ol=q(et()),z_=q(G());kg();ur();NG=q(re());Kn();Ne();Hm();bG=q(J()),Ble=q(DF());yh();jF();TG();yG=q(ft());Sm();({readFile:Hle}=cs.promises),TN=ON.get(NN.CONFIG_PARAMS.COMPONENTSROOT),RN=new Map,il=new Map;a(wG,"loadComponentDirectories");qle={REST:zh,rest:zh,graphqlSchema:Gg,jsResource:Vg,fastifyRoutes:KO,login:Kg,static:WO,operationsApi:Ble,customFunctions:{},http:{},clustering:oN,authentication:N_,mqtt:SN},AN={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(AN,"static",{value:{files:"web/**"}});gG=[],RG=new Map;a(xle,"setErrorReporter");a(Bm,"loadComponent");X_=class extends Yt{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 Lm=g((Kbe,LG)=>{var{isMainThread:CG}=require("worker_threads"),{getTables:Fle}=(Ne(),ne(xe)),{loadComponentDirectories:Gle,loadComponent:kle}=(Bh(),ne(vh)),{resetResources:$le}=(Kl(),ne(AI)),Vle=MA(),Yle=ft(),{dirname:Kle}=require("path"),{getConnection:Wle}=Et(),Qle=J(),jle=C(),yN=new Map;async function zle(e=!1){!CG&&Qle.get(jle.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Wle();try{CG&&await Vle()}catch(n){console.error(n)}let t=$le();Fle(),t.isWorker=e,await kle(Kle(Yle.getConfigFilePath()),t,"hdb",!0,yN),await Gle(yN,t);let r=[];for(let[n]of yN)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(zle,"loadRootComponents");LG.exports.loadRootComponents=zle});var et=g((Qbe,To)=>{"use strict";var{Worker:Jle,MessageChannel:Xle,parentPort:Fs,isMainThread:DN,threadId:Zle,workerData:yi}=require("worker_threads"),{PACKAGE_ROOT:eue}=C(),{join:UG,isAbsolute:tue,extname:rue}=require("path"),{server:vG}=(ur(),ne(Uo)),{watch:nue,readdir:sue}=require("fs/promises"),{totalmem:DG}=require("os"),Z_=C(),BG=J(),Ii=G(),{randomBytes:iue}=require("crypto"),{_assignPackageExport:oue}=require("../index"),aue=C(),PG=1024*1024,So=[],xn=[],cue=50,PN=1e4,lue="restart",HG="request_thread_info",qG="resource_report",xG="thread_info",FG="added-port",uue="ack",IN;oue("threads",xn);To.exports={startWorker:wN,restartWorkers:UN,shutdownWorkers:hue,workers:So,setMonitorListener:Oue,onMessageFromWorkers:mue,onMessageByType:WG,broadcast:Sue,broadcastWithAcknowledgement:gue,setChildListenerByType:Eue,getWorkerIndex:GG,getWorkerCount:kG,getTicketKeys:VG,setMainIsWorker:due,setTerminateTimeout:_ue,restartNumber:yi?.restartNumber||1};xn.onMessageByType=WG;xn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=xn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var MN;function _ue(e){PN=e}a(_ue,"setTerminateTimeout");function GG(){return yi?yi.workerIndex:MN?0:void 0}a(GG,"getWorkerIndex");function kG(){return yi?yi.workerCount:MN?1:void 0}a(kG,"getWorkerCount");function due(e){MN=e}a(due,"setMainIsWorker");var $G=1,qm;function VG(){return qm||(qm=DN?iue(48):yi.ticketKeys,qm)}a(VG,"getTicketKeys");Object.defineProperty(vG,"workerIndex",{get(){return GG()}});Object.defineProperty(vG,"workerCount",{get(){return kG()}});var YG={[HG](e,t){Rue(t)},[qG](e,t){Aue(t,e)}};function wN(e,t={}){let r=process.constrainedMemory?.()||DG();r=Math.min(r,DG(),2e4*PG);let n=BG.get(Z_.CONFIG_PARAMS.MAXHEAPMEMORY)??Math.max(Math.floor(r/PG/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of xn){let _=new Xle;_.existingPort=l,i.push(_),o.push(_.port2)}rue(e)||(e+=".js");let c=new Jle(tue(e)?e:UG(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:$G=t.threadCount,name:t.name,restartNumber:To.exports.restartNumber,ticketKeys:VG()},transferList:o},t));for(let{port1:l,existingPort:_}of i)_.postMessage({type:FG,port:l,threadId:c.threadId},[l]);return Fm(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>wN(e,t),c.on("error",l=>{console.error("Worker error:",l),Ii.error("Worker error:",l)}),c.on("exit",l=>{So.splice(So.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<cue?(t.unexpectedRestarts=c.unexpectedRestarts+1,wN(e,t)):Ii.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{YG[l.type]?.(l,c)}),So.push(c),bue(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(wN,"startWorker");var fue=[Z_.THREAD_TYPES.HTTP];async function UN(e=null,t=Math.max($G>3,1),r=!0){if(DN){if(r){let{loadRootComponents:o}=Lm();await o()}To.exports.restartNumber++,t<1&&(t=t*So.length);let n=[],s=[];for(let o of So.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Ii.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:To.exports.restartNumber,type:Z_.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=fue.indexOf(o.name)>-1,l=new Promise(_=>{let u=setTimeout(()=>o.terminate(),PN*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===aue.ITC_EVENT_TYPES.CHILD_STARTED&&(Ii.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(u)),_.off("message",f))},"startListener");Ii.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}=Ra();r&&(e==="http"||!e)&&BG.get(Z_.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Fs.postMessage({type:lue,workerType:e})}a(UN,"restartWorkers");function Eue(e,t){YG[e]=t}a(Eue,"setChildListenerByType");function hue(e){return UN(e,1/0,!1)}a(hue,"shutdownWorkers");var KG=[];function mue(e){KG.push(e)}a(mue,"onMessageFromWorkers");var CN=new Map;function WG(e,t){let r=CN.get(e);r||CN.set(e,r=[]),r.push(t)}a(WG,"onMessageByType");var pue=10;async function Sue(e){let t=0;for(let r of xn)try{r.postMessage(e),t++>pue&&(t=0,await new Promise(setImmediate))}catch(n){Ii.error("Unable to send message to worker",n)}}a(Sue,"broadcast");var xm=new Map,Tue=1;function gue(e){return new Promise(t=>{let r=0;for(let n of xn)try{let s=Tue++,i=a(()=>{xm.delete(s),--r===0&&t(),n!==Fs&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,xm.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of xm)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Ii.error("Unable to send message to worker",s)}r===0&&t()})}a(gue,"broadcastWithAcknowledgement");function Rue(e){e.postMessage({type:xG,workers:QG()})}a(Rue,"sendThreadInfo");function QG(){let e=Date.now();return So.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(QG,"getChildWorkerInfo");function Aue(e,t){e.resources=t,e.resources.updated=Date.now()}a(Aue,"recordResourceReport");var LN;function Oue(e){LN=e}a(Oue,"setMonitorListener");var Nue=1e3,MG=!1;function bue(){MG||(MG=!0,setInterval(()=>{for(let e of So){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}LN&&LN()},Nue).unref())}a(bue,"startMonitoring");var yue=1e3;if(Fs){Fm(Fs);for(let e=0,t=yi.addPorts.length;e<t;e++){let r=yi.addPorts[e];r.threadId=yi.addThreadIds[e],Fm(r)}setInterval(()=>{let e=process.memoryUsage();Fs.postMessage({type:qG,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},yue).unref(),IN=a(()=>new Promise((e,t)=>{Fs.on("message",r),Fs.postMessage({type:HG});function r(n){n.type===xG&&(Fs.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else IN=QG;To.exports.getThreadInfo=IN;function Fm(e,t){xn.push(e),e.on("message",r=>{if(r.type===FG)r.port.threadId=r.threadId,Fm(r.port);else if(r.type===uue){let n=xm.get(r.id);n&&n()}else{for(let s of KG)s(r,e);let n=CN.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){Ii.error(i)}}}).on("close",()=>{xn.splice(xn.indexOf(e),1)}).on("exit",()=>{xn.splice(xn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Fm,"addPort");if(DN){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(UG(n,i.name));try{for await(let{filename:i}of nue(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await UN(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");To.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Fs.on("message",async e=>{let{type:t}=e;t===Z_.ITC_EVENT_TYPES.SHUTDOWN&&(To.exports.restartNumber=e.restartNumber,Fs.unref(),setTimeout(()=>{Ii.warn("Thread did not voluntarily terminate",Zle),process.exit(0)},PN).unref())})});var xN={};ke(xN,{startHTTPThreads:()=>wue,startSocketServer:()=>bN,updateWorkerIdleness:()=>tk});async function wue(e=2,t){if(t)BN(0,1,!0);else{let{loadRootComponents:n}=Lm();if(e===0)return(0,go.setMainIsWorker)(!0),await fN().startServers(),Promise.resolve([]);await n()}let r=(0,XG.checkMemoryLimit)();r&&!process.env.DEV_MODE&&(console.error(r),setInterval(()=>{Vm.notify(r)},Iue).unref());for(let n=0;n<e;n++)BN(n,e);return Promise.all(ek)}function BN(e,t=1,r){if(vN++,(0,go.startWorker)("server/threads/threadServer.js",{name:$m.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(_){_.type===$m.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});ek.push(s),await s,al.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=km.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=al.indexOf(n);o>-1&&al.splice(o,1)}if(a(i,"removeWorker"),cl){let o=cl;cl=[];for(let c of o)ZG[c.localPort](null,c)}}}),r){let n=setInterval(()=>{HN?HN=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,go.shutdownWorkers)(),vN=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function bN(e=0,t){if(typeof e=="string")try{(0,Ym.existsSync)(e)&&(0,Ym.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Cue:r=Lue(t):r=qN;let n=(0,ll.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=ZG[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),HN=!0,r(o,(c,l)=>{if(!c){if(jG){let u=o._socket||new ll.Socket({handle:o,writable:!0,readable:!0});jG.deliverSocket(u,e,l),u.resume()}else vN>0?(cl.length===0&&setTimeout(()=>{cl.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,cl.push(o)):(console.log("start up a dynamic thread to handle request"),BN(0));nn(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:l});else{let u=o._socket||new ll.Socket({handle:o,writable:!0,readable:!0});Mue(u,c,e)}nn(!0,"socket-routed")})};let s=Mo();Vm.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 qN(e,t){let r,n=0;for(let s of al){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Gm)return Gm=i,t(r);n=i}Gm=0,t(r)}function Cue(e,t){let r={};e.getpeername(r);let n=r.address,s=ul.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);qN(e,o=>{ul.set(n,{worker:o,lastUsed:i}),t(o)})}function Lue(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new ll.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],_=ul.get(l),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,s(_.worker);qN(n,d=>{ul.set(l,{worker:d,lastUsed:u}),s(d,o)})})}a(r,"findByHeaderAffinity")}function tk(){Gm=0;for(let e of al)e.expectedIdle=e.recentELU.idle+Due,e.requests=1;al.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Mue(e,t,r){let n=Pue++;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(),km.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")),km.delete(n)),s.event=="destroy"&&(e.destroy(),km.delete(n))})}var go,ll,$m,Vm,Ym,JG,XG,al,cl,ZG,jG,vN,ek,Iue,HN,Gm,zG,ul,Due,km,Pue,Hm=ye(()=>{go=q(et()),ll=require("net"),$m=q(C()),Vm=q(G()),Ym=require("fs");li();JG=require("worker_threads"),XG=q(ra()),al=[],cl=[],ZG=[],vN=0,ek=[];JG.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});Iue=6e5;a(wue,"startHTTPThreads");a(BN,"startHTTPWorker");a(bN,"startSocketServer");Gm=0;a(qN,"findMostIdleWorker");zG=36e5,ul=new Map;a(Cue,"findByRemoteAddressAffinity");a(Lue,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of ul)r.lastUsed+zG<e&&ul.delete(t)},zG).unref();Due=1e3;a(tk,"updateWorkerIdleness");(0,go.setMonitorListener)(tk);km=new Map,Pue=1;a(Mue,"proxySocket")});var sk=g((Xbe,nk)=>{"use strict";var Wm=J();Wm.initSync();var Km=C(),{httpRequest:Uue}=W(),vue=require("path"),rk=require("fs-extra"),Bue=require("yaml"),Hue={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};nk.exports={cliOperations:xue,buildRequest:que};function que(){let e={};for(let t of process.argv){if(Hue[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(que,"buildRequest");async function xue(e){await rk.exists(vue.join(Wm.get(Km.CONFIG_PARAMS.ROOTPATH),Km.HDB_PID_FILE))||(console.error("HarperDB must be running to perform this operation"),process.exit()),await rk.exists(Wm.get(Km.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))||(console.error("No domain socket found, unable to perform this operation"),process.exit());try{let t=await Uue({method:"POST",protocol:"http:",socketPath:Wm.get(Km.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(Bue.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(xue,"cliOperations")});var GN=g((eye,ik)=>{"use strict";var ed=J();ed.initSync();var _l=require("fs-extra"),FN=require("path"),dl=C(),Fue=require("crypto"),Gue=require("uuid").v4;ik.exports=kue;function kue(){if(ed.getHdbBasePath()!==void 0){let e=FN.join(ed.getHdbBasePath(),dl.LICENSE_KEY_DIR_NAME,dl.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=FN.join(ed.getHdbBasePath(),dl.LICENSE_KEY_DIR_NAME,dl.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=FN.join(ed.getHdbBasePath(),dl.LICENSE_KEY_DIR_NAME,dl.JWT_ENUM.JWT_PASSPHRASE_NAME);try{_l.accessSync(r),_l.accessSync(e),_l.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=Gue(),i=Fue.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});_l.writeFileSync(r,s),_l.writeFileSync(e,i.privateKey),_l.writeFileSync(t,i.publicKey)}else throw n}}}a(kue,"checkJWTTokenExist")});var ak=g((rye,ok)=>{"use strict";var kN=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};ok.exports={HdbInfoInsertObject:kN}});var uk=g((sye,lk)=>{"use strict";var ck=C(),$N=class{static{a(this,"UpgradeObject")}constructor(t,r){this[ck.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[ck.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};lk.exports={UpgradeObject:$N}});var Qm=g((oye,dk)=>{"use strict";var Fn=require("prompt"),fl=require("chalk"),_k=G(),ls=require("os"),VN=Do(),YN=["yes","y"];async function $ue(e){let t=`${ls.EOL}`+fl.bold.green("Your current HarperDB version requires that we complete an update process.")+`${ls.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${ls.EOL}${ls.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${ls.EOL}`;Fn.override=VN(["CONFIRM_UPGRADE"]),Fn.start(),Fn.message=t;let r={properties:{CONFIRM_UPGRADE:{description:fl.magenta(`${ls.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 _k.error("There was an error when prompting user about an upgrade."),_k.error(s),!1}return YN.includes(n.CONFIRM_UPGRADE)}a($ue,"forceUpdatePrompt");async function Vue(e){let t=`${ls.EOL}`+fl.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.${ls.EOL}`);Fn.override=VN(["CONFIRM_DOWNGRADE"]),Fn.start(),Fn.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:fl.magenta(`${ls.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 YN.includes(n.CONFIRM_DOWNGRADE)}a(Vue,"forceDowngradePrompt");async function Yue(){let e=`${ls.EOL}`+fl.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=VN(["GENERATE_CERTS"]),Fn.start(),Fn.message=e;let t={properties:{GENERATE_CERTS:{description:fl.magenta(`${ls.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 YN.includes(r.GENERATE_CERTS)}a(Yue,"upgradeCertsPrompt");dk.exports={forceUpdatePrompt:$ue,forceDowngradePrompt:Vue,upgradeCertsPrompt:Yue}});var WN=g((cye,fk)=>{"use strict";var KN=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};fk.exports=KN});var hk=g((Eye,Ek)=>{"use strict";var Kue=W(),Wue=ft(),uye=G(),_ye=require("path"),dye=require("fs"),fye=C();Ek.exports={getOldPropsValue:Que};function Que(e,t,r=!1){let n=t.getRaw(e);return Kue.isNotEmptyAndHasValue(n)?n:r?Wue.getDefaultConfig(e):""}a(Que,"getOldPropsValue")});var Tk=g((mye,Sk)=>{"use strict";var Ro=require("path"),Ao=require("fs-extra"),jue=require("properties-reader"),zue=WN(),yt=G(),{getOldPropsValue:Ke}=hk(),{HDB_SETTINGS_NAMES:te,CONFIG_PARAMS:Ba}=C(),Ha=ft(),jm=J(),mk=W(),Gs=C(),QN=new zue("3.1.0"),pk=[];function Jue(){let e=jue(jm.get(te.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),yt.info(t);let r=` ;Settings for the HarperDB process.
29
32
 
30
33
  ;The directory selected during install where the database files reside.
31
- ${ee.HDB_ROOT_KEY} = ${Qe(ee.HDB_ROOT_KEY,e)}
34
+ ${te.HDB_ROOT_KEY} = ${Ke(te.HDB_ROOT_KEY,e)}
32
35
  ;The port the HarperDB REST interface will listen on.
33
- ${ee.SERVER_PORT_KEY} = ${Qe(ee.SERVER_PORT_KEY,e)}
36
+ ${te.SERVER_PORT_KEY} = ${Ke(te.SERVER_PORT_KEY,e)}
34
37
  ;Set to true to enable HTTPS on the HarperDB REST endpoint. Requires a valid certificate and key.
35
- ${ee.HTTP_SECURE_ENABLED_KEY} = ${Qe(ee.HTTP_SECURE_ENABLED_KEY,e)}
38
+ ${te.HTTP_SECURE_ENABLED_KEY} = ${Ke(te.HTTP_SECURE_ENABLED_KEY,e)}
36
39
  ;The path to the SSL certificate used when running with HTTPS enabled.
37
- ${ee.CERT_KEY} = ${Qe(ee.CERT_KEY,e)}
40
+ ${te.CERT_KEY} = ${Ke(te.CERT_KEY,e)}
38
41
  ;The path to the SSL private key used when running with HTTPS enabled.
39
- ${ee.PRIVATE_KEY_KEY} = ${Qe(ee.PRIVATE_KEY_KEY,e)}
42
+ ${te.PRIVATE_KEY_KEY} = ${Ke(te.PRIVATE_KEY_KEY,e)}
40
43
  ;Set to true to enable Cross Origin Resource Sharing, which allows requests across a domain.
41
- ${ee.CORS_ENABLED_KEY} = ${Qe(ee.CORS_ENABLED_KEY,e)}
44
+ ${te.CORS_ENABLED_KEY} = ${Ke(te.CORS_ENABLED_KEY,e)}
42
45
  ;Allows for setting allowable domains with CORS. Comma separated list.
43
- ${ee.CORS_WHITELIST_KEY} = ${Qe(ee.CORS_WHITELIST_KEY,e)}
46
+ ${te.CORS_WHITELIST_KEY} = ${Ke(te.CORS_WHITELIST_KEY,e)}
44
47
  ;Length of time in milliseconds after which a request will timeout. Defaults to 120,000 ms (2 minutes).
45
- ${ee.SERVER_TIMEOUT_KEY} = ${Qe(ee.SERVER_TIMEOUT_KEY,e,!0)}
48
+ ${te.SERVER_TIMEOUT_KEY} = ${Ke(te.SERVER_TIMEOUT_KEY,e,!0)}
46
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).
47
- ${ee.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${Qe(ee.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
50
+ ${te.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${Ke(te.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
48
51
  ;Limit the amount of time the parser will wait to receive the complete HTTP headers.. Defaults to 60,000 ms (1 minute).
49
- ${ee.SERVER_HEADERS_TIMEOUT_KEY} = ${Qe(ee.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
52
+ ${te.SERVER_HEADERS_TIMEOUT_KEY} = ${Ke(te.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
50
53
  ;Define whether to log to file or not.
51
- ${ee.LOG_TO_FILE} = ${qa.getDefaultConfig(Ha.LOGGING_FILE)}
54
+ ${te.LOG_TO_FILE} = ${Ha.getDefaultConfig(Ba.LOGGING_FILE)}
52
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.
53
- ${ee.LOG_TO_STDSTREAMS} = ${qa.getDefaultConfig(Ha.LOGGING_STDSTREAMS)}
56
+ ${te.LOG_TO_STDSTREAMS} = ${Ha.getDefaultConfig(Ba.LOGGING_STDSTREAMS)}
54
57
  ;Set to control amount of logging generated. Accepted levels are trace, debug, warn, error, fatal.
55
- ${ee.LOG_LEVEL_KEY} = ${Qe(ee.LOG_LEVEL_KEY,e)}
58
+ ${te.LOG_LEVEL_KEY} = ${Ke(te.LOG_LEVEL_KEY,e)}
56
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'
57
- ${ee.LOG_PATH_KEY} = ${Qe(ee.LOG_PATH_KEY,e)}
60
+ ${te.LOG_PATH_KEY} = ${Ke(te.LOG_PATH_KEY,e)}
58
61
  ;Set to true to enable daily log file rotations - each log file name will be prepended with YYYY-MM-DD.
59
- ${ee.LOG_DAILY_ROTATE_KEY} = ${Qe(ee.LOG_DAILY_ROTATE_KEY,e)}
62
+ ${te.LOG_DAILY_ROTATE_KEY} = ${Ke(te.LOG_DAILY_ROTATE_KEY,e)}
60
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
61
64
  ;daily log files which may consume a large amount of storage depending on your log settings.
62
- ${ee.LOG_MAX_DAILY_FILES_KEY} = ${Qe(ee.LOG_MAX_DAILY_FILES_KEY,e)}
65
+ ${te.LOG_MAX_DAILY_FILES_KEY} = ${Ke(te.LOG_MAX_DAILY_FILES_KEY,e)}
63
66
  ;The environment used by NodeJS. Setting to production will be the most performant, settings to development will generate more logging.
64
- ${ee.PROPS_ENV_KEY} = ${Qe(ee.PROPS_ENV_KEY,e)}
67
+ ${te.PROPS_ENV_KEY} = ${Ke(te.PROPS_ENV_KEY,e)}
65
68
  ;This allows self signed certificates to be used in clustering. This is a security risk
66
69
  ;as clustering will not validate the cert, so should only be used internally.
67
70
  ;The HDB install creates a self signed certificate, if you use that cert this must be set to true.
68
- ${ee.ALLOW_SELF_SIGNED_SSL_CERTS} = ${Qe(ee.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
71
+ ${te.ALLOW_SELF_SIGNED_SSL_CERTS} = ${Ke(te.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
69
72
  ;Set the max number of processes HarperDB will start. This can also be limited by number of cores and licenses.
70
- ${ee.MAX_HDB_PROCESSES} = ${Qe(ee.MAX_HDB_PROCESSES,e)}
73
+ ${te.MAX_HDB_PROCESSES} = ${Ke(te.MAX_HDB_PROCESSES,e)}
71
74
  ;Set to true to enable clustering. Requires a valid enterprise license.
72
- ${ee.CLUSTERING_ENABLED_KEY} = ${Qe(ee.CLUSTERING_ENABLED_KEY,e,!0)}
75
+ ${te.CLUSTERING_ENABLED_KEY} = ${Ke(te.CLUSTERING_ENABLED_KEY,e,!0)}
73
76
  ;The port that will be used for HarperDB clustering.
74
- ${ee.CLUSTERING_PORT_KEY} = ${Qe(ee.CLUSTERING_PORT_KEY,e)}
77
+ ${te.CLUSTERING_PORT_KEY} = ${Ke(te.CLUSTERING_PORT_KEY,e)}
75
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.
76
- ${ee.CLUSTERING_NODE_NAME_KEY} = ${Qe(ee.CLUSTERING_NODE_NAME_KEY,e)}
79
+ ${te.CLUSTERING_NODE_NAME_KEY} = ${Ke(te.CLUSTERING_NODE_NAME_KEY,e)}
77
80
  ;The user used to connect to other instances of HarperDB, this user must have a role of cluster_user.
78
- ${ee.CLUSTERING_USER_KEY} = ${Qe(ee.CLUSTERING_USER_KEY,e)}
81
+ ${te.CLUSTERING_USER_KEY} = ${Ke(te.CLUSTERING_USER_KEY,e)}
79
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.
80
- ${ee.DISABLE_TRANSACTION_LOG_KEY} = ${Qe(ee.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
83
+ ${te.DISABLE_TRANSACTION_LOG_KEY} = ${Ke(te.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
81
84
  ;Defines the length of time an operation token will be valid until it expires. Example values: https://github.com/vercel/ms
82
- ${ee.OPERATION_TOKEN_TIMEOUT_KEY} = ${Qe(ee.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
85
+ ${te.OPERATION_TOKEN_TIMEOUT_KEY} = ${Ke(te.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
83
86
  ;Defines the length of time a refresh token will be valid until it expires. Example values: https://github.com/vercel/ms
84
- ${ee.REFRESH_TOKEN_TIMEOUT_KEY} = ${Qe(ee.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
87
+ ${te.REFRESH_TOKEN_TIMEOUT_KEY} = ${Ke(te.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
85
88
  ;The port the IPC server will run on.
86
- ${ee.IPC_SERVER_PORT} = ${qa.getDefaultConfig(Ha.IPC_NETWORK_PORT)}
89
+ ${te.IPC_SERVER_PORT} = ${Ha.getDefaultConfig(Ba.IPC_NETWORK_PORT)}
87
90
  ;Run HDB in the foreground.
88
- ${ee.RUN_IN_FOREGROUND} = ${qa.getDefaultConfig(Ha.OPERATIONSAPI_FOREGROUND)}
91
+ ${te.RUN_IN_FOREGROUND} = ${Ha.getDefaultConfig(Ba.OPERATIONSAPI_FOREGROUND)}
89
92
  ;Set to true to enable custom API endpoints. Requires a valid enterprise license.
90
- ${ee.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${qa.getDefaultConfig(Ha.CUSTOMFUNCTIONS_ENABLED)}
93
+ ${te.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${Ha.getDefaultConfig(Ba.CUSTOMFUNCTIONS_ENABLED)}
91
94
  ;The port used to access the custom functions server.
92
- ${ee.CUSTOM_FUNCTIONS_PORT_KEY} = ${qa.getDefaultConfig(Ha.HTTP_PORT)}
95
+ ${te.CUSTOM_FUNCTIONS_PORT_KEY} = ${Ha.getDefaultConfig(Ba.HTTP_PORT)}
93
96
  ;The path to the folder containing HarperDB custom function files.
94
- ${ee.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${Ro.join(Qe(ee.HDB_ROOT_KEY,e),"custom_functions")}
97
+ ${te.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${Ro.join(Ke(te.HDB_ROOT_KEY,e),"custom_functions")}
95
98
  ;Set the max number of processes HarperDB will start for the Custom Functions server
96
- ${ee.MAX_CUSTOM_FUNCTION_PROCESSES} = ${qa.getDefaultConfig(Ha.HTTP_THREADS)}
97
- `,n=Zm.get("settings_path"),s=Ro.dirname(n),i=Ro.join(s,"3_1_0_upgrade_settings.bak");try{Lt.info(`Backing up old settings file to: ${i}`),Ao.copySync(n,i)}catch(c){throw Lt.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Lt.info("New settings file values for 3.1.0 upgrade:",r),Lt.info(`Creating new/upgraded settings file at '${n}'`),Ao.writeFileSync(n,r),Lt.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."),Lt.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Lt.error(c),Ao.copySync(i,n),c}Zm.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),Lt.info(o),o}a(Xue,"updateSettingsFile_3_1_0");function Zue(){let e=Ro.join(hk.getHomeDir(),ks.HDB_HOME_DIR_NAME,ks.LICENSE_KEY_DIR_NAME,ks.LICENSE_FILE_NAME),t=Ro.join(hk.getHomeDir(),ks.HDB_HOME_DIR_NAME,ks.LICENSE_KEY_DIR_NAME,ks.REG_KEY_FILE_NAME),r=Ro.join(Zm.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME,ks.LICENSE_FILE_NAME),n=Ro.join(r,ks.LICENSE_FILE_NAME),s=Ro.join(r,ks.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Lt.info(i);let o="Creating .license directory";console.log(o),Lt.info(o),Ao.mkdirpSync(r);try{Ao.accessSync(e);try{let c="Moving licence file";console.log(c),Lt.info(c),Ao.moveSync(e,n);let l="License file successfully moved.";console.log(l),Lt.info(l)}catch{let l="moving license file failed";console.error(l),Lt.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Lt.warn(l)}try{Ao.accessSync(t);try{let c="Moving registration file";console.log(c),Lt.info(c),Ao.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Lt.info(l)}catch{let l="moving registration file failed";console.error(l),Lt.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Lt.warn(l)}}a(Zue,"moveLicenseFiles");KN.sync_functions.push(Xue);KN.sync_functions.push(Zue);mk.push(KN);pk.exports=mk});var Ok=T((hye,Ak)=>{"use strict";var Sn=Ve(),{insertRecords:e_e}=ko(),t_e=mr(),Oo=Et(),r_e=Y(),Ci=F(),n_e=Y(),$s=require("fs-extra"),Li=require("path"),s_e=require("cli-progress"),sd=require("assert"),i_e=require("pino"),o_e=J();Ak.exports=a_e;var ep,Tk,tp,WN,lr,id=!1;async function a_e(e=!0){return ep=o_e.getHdbBasePath(),Tk=Li.join(ep,"schema"),tp=Li.join(ep,"4_0_0_upgrade_tmp"),WN=Li.join(ep,"transactions"),console.info("Reindexing upgrade started for schemas"),Ci.notify("Reindexing upgrade started for schemas"),await gk(Tk,!1,e),await $s.pathExists(WN)&&(console.info(`
99
+ ${te.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Ha.getDefaultConfig(Ba.HTTP_THREADS)}
100
+ `,n=jm.get("settings_path"),s=Ro.dirname(n),i=Ro.join(s,"3_1_0_upgrade_settings.bak");try{yt.info(`Backing up old settings file to: ${i}`),Ao.copySync(n,i)}catch(c){throw yt.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{yt.info("New settings file values for 3.1.0 upgrade:",r),yt.info(`Creating new/upgraded settings file at '${n}'`),Ao.writeFileSync(n,r),yt.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."),yt.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),yt.error(c),Ao.copySync(i,n),c}jm.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),yt.info(o),o}a(Jue,"updateSettingsFile_3_1_0");function Xue(){let e=Ro.join(mk.getHomeDir(),Gs.HDB_HOME_DIR_NAME,Gs.LICENSE_KEY_DIR_NAME,Gs.LICENSE_FILE_NAME),t=Ro.join(mk.getHomeDir(),Gs.HDB_HOME_DIR_NAME,Gs.LICENSE_KEY_DIR_NAME,Gs.REG_KEY_FILE_NAME),r=Ro.join(jm.getHdbBasePath(),Gs.LICENSE_KEY_DIR_NAME,Gs.LICENSE_FILE_NAME),n=Ro.join(r,Gs.LICENSE_FILE_NAME),s=Ro.join(r,Gs.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),yt.info(i);let o="Creating .license directory";console.log(o),yt.info(o),Ao.mkdirpSync(r);try{Ao.accessSync(e);try{let c="Moving licence file";console.log(c),yt.info(c),Ao.moveSync(e,n);let l="License file successfully moved.";console.log(l),yt.info(l)}catch{let l="moving license file failed";console.error(l),yt.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),yt.warn(l)}try{Ao.accessSync(t);try{let c="Moving registration file";console.log(c),yt.info(c),Ao.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),yt.info(l)}catch{let l="moving registration file failed";console.error(l),yt.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),yt.warn(l)}}a(Xue,"moveLicenseFiles");QN.sync_functions.push(Jue);QN.sync_functions.push(Xue);pk.push(QN);Sk.exports=pk});var Nk=g((Sye,Ok)=>{"use strict";var hn=$e(),{insertRecords:Zue}=ko(),e_e=dr(),Oo=ut(),t_e=W(),wi=G(),r_e=W(),ks=require("fs-extra"),Ci=require("path"),n_e=require("cli-progress"),td=require("assert"),s_e=require("pino"),i_e=J();Ok.exports=o_e;var zm,gk,Jm,jN,ir,rd=!1;async function o_e(e=!0){return zm=i_e.getHdbBasePath(),gk=Ci.join(zm,"schema"),Jm=Ci.join(zm,"4_0_0_upgrade_tmp"),jN=Ci.join(zm,"transactions"),console.info("Reindexing upgrade started for schemas"),wi.notify("Reindexing upgrade started for schemas"),await Rk(gk,!1,e),await ks.pathExists(jN)&&(console.info(`
98
101
 
99
- Reindexing upgrade started for transaction logs`),Ci.notify("Reindexing upgrade started for transaction logs"),await gk(WN,!0,e)),Ci.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(id?", but errors occurred":"")}a(a_e,"reindexUpgrade");async function gk(e,t,r){let n=await $s.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 $s.readdir(c),_=l.length;for(let u=0;u<_;u++){let d=l[u];if(d!==".DS_Store"&&$s.statSync(Li.join(c,d)).isDirectory())try{await c_e(o,d,t),lr.info(`Reindexing started for ${o}.${d}`),Ci.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await u_e(o,d,c,t,r),lr.info(`Reindexing completed for ${o}.${d}`),Ci.notify(`Reindexing completed for ${o}.${d}`)}catch(f){id=!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(!id)try{await $s.rm(tp,{recursive:!0})}catch{}}a(gk,"processTables");async function c_e(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Li.join(tp,s);await $s.ensureDir(tp),await $s.writeFile(i,""),lr=i_e({level:"debug",formatters:{bindings(){}}},i)}a(c_e,"initPinoLogger");var l_e=20;async function u_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`),lr.error(g);return}throw g}let o=f_e(i.dbis),c=Sn.openDBI(i,o),l=Object.keys(i.dbis),_=Sn.statDBI(i,o);lr.info(`Old environment stats: ${JSON.stringify(_)}`);let u=new s_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>l_e&&await E();await E()}catch(g){throw id=!0,lr.error(g),g}async function E(){let g,O=f.map(({value:G})=>G);n?g=await Promise.all(O.map(G=>__e(d,G))):g=await e_e(d,o,l.filter(G=>G!=="__blob__"),O,!1);for(let G=0,B=f.length;G<B;G++){let{key:U,value:j}=f[G];lr.info(`Record hash value: ${U} hash: ${o}`);let K;n?K=g[G]:K=g.written_hashes.indexOf(U)>-1,sd(K,!0),d_e(d,o,j[o],n),lr.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`),lr.info(`${u.value}/${u.total} records inserted`)}a(E,"finishOutstanding"),u.stop();let h=Sn.statDBI(i,o),p=Sn.statDBI(d,o);if(lr.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${p.entryCount}`),sd.deepStrictEqual(h.entryCount,p.entryCount),await Sn.closeEnvironment(i),await Sn.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let g=Li.join(r,t),O=Li.join(g,"data.mdb"),v=Li.join(g,"lock.mdb");await $s.unlink(O),await $s.unlink(v),await $s.rmdir(g),lr.info(`Deleted old environment files from schema folder: ${O}, ${v}`)}let S=await Sn.openEnvironment(r,t),R=Sn.statDBI(S,o);lr.info(`New stats: ${JSON.stringify(p)}. New stats after move: ${JSON.stringify(R)}`),sd.deepStrictEqual(R.entryCount,p.entryCount),await Sn.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(u_e,"processTable");async function __e(e,t){Sn.initializeDBIs(e,Oo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Oo.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Oo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Oo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),n_e.isEmpty(t.user_name)||e.dbis[Oo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Oo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(__e,"insertTransaction");function d_e(e,t,r,n){let i=e.dbis[t].get(r);sd.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Oo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Oo.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&&!r_e.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let _=0,u=l.length;_<u;_++){let d=l[_];Rk(e,c,d,r)}else Rk(e,c,l,r)}a(d_e,"validateIndices");function Rk(e,t,r,n){try{let s=!1,i=t_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}`),sd.deepStrictEqual(s,!0)}catch(s){id=!0,lr.error(s),console.error(s)}}a(Rk,"validateIndex");function f_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(f_e,"getHashDBI")});var np=T((pye,bk)=>{"use strict";var E_e=require("mkcert"),rp=require("path"),QN=require("fs-extra"),jN=F(),h_e=J(),zN=C(),El=ig(),m_e=Do(),p_e=pt();bk.exports={generateKeys:S_e,updateConfigCert:Nk};async function S_e(){let e=h_e.getHdbBasePath(),t=rp.join(e,zN.LICENSE_KEY_DIR_NAME),r=await E_e.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:3650,caKey:El.CERTIFICATE_VALUES.key,caCert:El.CERTIFICATE_VALUES.cert}),n=rp.join(t,El.CERTIFICATE_PEM_NAME),s=rp.join(t,El.PRIVATEKEY_PEM_NAME),i=rp.join(t,El.CA_PEM_NAME);try{await QN.writeFile(n,r.cert)}catch(o){throw jN.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await QN.writeFile(s,r.key)}catch(o){throw jN.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await QN.writeFile(i,El.CERTIFICATE_VALUES.cert)}catch(o){throw jN.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}Nk(n,s,i)}a(S_e,"generateKeys");function Nk(e,t,r){let n=m_e(Object.keys(zN.CONFIG_PARAM_MAP),!0),s=zN.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()]),p_e.updateConfigValue(void 0,void 0,i,!1,!0)}a(Nk,"updateConfigCert")});var Lk=T((gye,Ck)=>{"use strict";var sp=require("path"),No=require("fs-extra"),T_e=YN(),xa=F(),yk=pt(),JN=J(),hs=C(),ip=Y(),g_e=require("properties-reader"),R_e=es(),A_e=YE(),O_e=Ar(),Tye=require("util"),N_e=O_e.searchByValue,b_e=Or(),y_e=_h(),I_e=rt(),w_e=Ok(),Ik=np(),C_e=Xm(),cd=new T_e("4.0.0"),wk=[],od,ad;async function L_e(){try{if(await C_e.upgradeCertsPrompt()){if(console.log("Generating new certificates."),od){let t=ip.changeExtension(od,".bak");await No.move(od,t)}if(ad){let t=ip.changeExtension(ad,".bak");await No.move(ad,t)}await Ik.generateKeys()}else console.log("Using existing certificates."),Ik.updateConfigCert(od,ad,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(L_e,"generateNewKeys");async function D_e(){console.log("Updating HarperDB nodes."),xa.info("Updating HarperDB nodes.");let e=[];try{let t=new R_e(hs.SYSTEM_SCHEMA_NAME,hs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await N_e(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!I_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:hs.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(ip.isEmptyOrZeroLength(n))return;let s=new A_e(hs.SYSTEM_SCHEMA_NAME,hs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await b_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{y_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(D_e,"updateNodes");async function P_e(){let e=JN.get(hs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(sp.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=sp.dirname(e),n=JN.get(hs.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=sp.join(n,"backup","4_0_0_upgrade_settings.bak"),i=sp.join(n,hs.HDB_CONFIG_FILE);try{xa.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),No.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=yk.initOldConfig(e);od=d[hs.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],ad=d[hs.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],yk.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=ip.getPropsFilePath();No.accessSync(o,No.constants.F_OK|No.constants.R_OK);let l=g_e(o).get(hs.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
100
- install_user = ${l}`;try{No.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{JN.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{No.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(P_e,"updateSettingsFile_4_0_0");cd.async_functions.push(P_e);cd.async_functions.push(L_e);cd.async_functions.push(w_e);cd.async_functions.push(D_e);wk.push(cd);Ck.exports=wk});var XN=T((Aye,Uk)=>{"use strict";var Fa=Y(),M_e=C(),Dk=F(),{DATA_VERSION:U_e,UPGRADE_VERSION:v_e}=M_e.UPGRADE_JSON_FIELD_NAMES_ENUM,Pk=Sk(),op=Lk(),Ga=new Map;Pk&&Pk.forEach(e=>{Ga.set(e.version,e)});op&&op.forEach(e=>{Ga.set(e.version,e)});op&&op.forEach(e=>{Ga.set(e.version,e)});function B_e(){return[...Ga.keys()].sort(Fa.compareVersions)}a(B_e,"getSortedVersions");function Mk(e){let t=e[U_e],r=e[v_e];return Fa.isEmptyOrZeroLength(t)||Fa.isEmptyOrZeroLength(r)?(Dk.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),Dk.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."),[]):[...Ga.keys()].sort(Fa.compareVersions).filter(function(n){return Fa.compareVersions(n,t)>0&&Fa.compareVersions(n,r)<=0})}a(Mk,"getVersionsForUpgrade");function H_e(e){return Mk(e).length>0}a(H_e,"hasUpgradesRequired");function q_e(e){return Fa.isEmptyOrZeroLength(e)?null:Ga.has(e)?Ga.get(e):null}a(q_e,"getDirectiveByVersion");Uk.exports={getSortedVersions:B_e,getDirectiveByVersion:q_e,getVersionsForUpgrade:Mk,hasUpgradesRequired:H_e}});var ap=T((Nye,xk)=>{"use strict";var x_e=require("util"),ZN=require("chalk"),F_e=require("os"),Bk=Or(),G_e=Ar(),Tn=C(),Hk=ok(),tb=ZT(),{UpgradeObject:vk}=lk(),{forceDowngradePrompt:k_e}=Xm(),$_e=Fi(),ld=F(),hl=Y(),rb=Cn(),V_e=(Ae(),re(Ge)),Y_e=XN(),K_e=x_e.promisify(rb.setSchemaDataToGlobal),W_e=G_e.searchByValue,Q_e="info_id",j_e="2.9.9",z_e="3.0.0";async function J_e(e){let t=new Hk.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 rb.setSchemaDataToGlobal(),Bk.insert(r)}a(J_e,"insertHdbInstallInfo");async function eb(e){let t,r=await qk(),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 Hk.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 K_e(),Bk.insert(o)}a(eb,"insertHdbUpgradeInfo");async function qk(){let e=new tb.NoSQLSeachObject(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Q_e,Tn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await W_e(e))}catch(r){ld.info(r)}return t}a(qk,"getAllHdbInfoRecords");async function X_e(){let e=await qk();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(X_e,"getLatestHdbInfoRecord");async function Z_e(){ld.info("Checking if HDB software has been updated");try{let e=$_e.version(),t=await X_e(),r;if(hl.isEmpty(t))r=j_e;else if(r=t.data_version_num,hl.compareVersions(r.toString(),e.toString())>0){if(!hl.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(ZN.yellow(`This instance's data was last run on version ${r}`)),console.error(ZN.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.${F_e.EOL}${Tn.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");hl.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(ZN.yellow(`This instance's data was last run on version ${r}`)),await k_e(new vk(r,e))?await eb(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(rb.setSchemaDataToGlobal(),ede(r),e.toString()===r.toString())return;let n=new vk(r,e);if(Y_e.hasUpgradesRequired(n))return n;hl.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await eb(n.upgrade_version),ld.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw ld.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),ld.fatal(e),e}}a(Z_e,"getVersionUpdateInfo");function ede(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 V_e.databases.system))throw console.log(t),new Error(t);if(!hl.isEmpty(e)&&e<z_e)throw console.log(t),new Error(t)}a(ede,"checkIfInstallIsSupported");xk.exports={insertHdbInstallInfo:J_e,insertHdbUpgradeInfo:eb,getVersionUpdateInfo:Z_e}});var Vk=T((yye,$k)=>{"use strict";var nb=require("joi"),{boolean:tde,string:Fk,number:rde}=nb.types(),Gk=require("fs-extra"),ud=C(),kk=require("path"),nde=it();$k.exports=sde;function sde(e){let t=Fk.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=nb.object({[ud.INSTALL_PROMPTS.ROOTPATH]:nb.custom(ide),[ud.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:rde.min(0),[ud.INSTALL_PROMPTS.TC_AGREEMENT]:Fk.valid("yes","YES","Yes"),[ud.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[ud.INSTALL_PROMPTS.CLUSTERING_ENABLED]:tde});return nde.validateBySchema(e,r)}a(sde,"installValidator");function ide(e,t){if(Gk.existsSync(kk.join(e,"system/hdb_user/data.mdb"))||Gk.existsSync(kk.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(ide,"validateRootAvailable")});var Kk=T((wye,Yk)=>{"use strict";var{mkdirpSync:ode}=require("fs-extra"),Vs=require("path"),ml=C(),ib=F(),ade=wn(),sb=ri(),cde=Xe();Yk.exports=lde;async function lde(e){ib.trace("Mounting HarperDB"),ms(e),ms(Vs.join(e,"backup")),ms(Vs.join(e,"trash")),ms(Vs.join(e,"keys")),ms(Vs.join(e,"keys",ml.LICENSE_FILE_NAME)),ms(Vs.join(e,"log")),ms(Vs.join(e,"doc")),ms(Vs.join(e,"database")),ms(Vs.join(e,ml.TRANSACTIONS_DIR_NAME)),ms(Vs.join(e,"clustering","leaf")),ms(Vs.join(e,"components")),await ude()}a(lde,"mountHdb");async function ude(){let e=Eu(),t=Object.keys(sb);for(let r=0;r<t.length;r++){let n=t[r],s=sb[n].hash_attribute;try{cde.initSystemSchemaPaths(ml.SYSTEM_SCHEMA_NAME,n);let i=new e(ml.SYSTEM_SCHEMA_NAME,n,s);i.attributes=sb[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,await ade.createTable(n,i)}catch(i){throw ib.error(`issue creating environment for ${ml.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(ude,"createLMDBTables");function ms(e){ode(e,{mode:ml.HDB_FILE_PERMISSIONS}),ib.info(`Directory ${e} created`)}a(ms,"makeDirectory")});var lp=T((Lye,n$)=>{"use strict";var ab=require("os"),zk=require("inquirer"),Vn=require("fs-extra"),_de=require("properties-reader"),ka=require("chalk"),Ws=require("path"),dde=require("human-readable-ids").hri,fde=require("ora"),Ede=require("yaml"),Dt=F(),Io=J(),_d=Y(),cp=Do(),Jk=ap(),Xk=Fi(),Z=C(),hde=Vk(),mde=Kk(),cb=pt(),pde=br(),Sde=kE(),Tde=xN(),gde=Cn(),Rde=require("util").promisify,Ade=Rde(gde.setSchemaDataToGlobal),Ode=np(),pl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),ur=a(e=>ka.magenta.bold(e),"HDB_PROMPT_MSG"),Nde="https://harperdb.io/legal/end-user-license-agreement",wo=ab.EOL,bo="",bde="yes",Wk="Starting HarperDB install...",Qk="HarperDB installation was successful.",jk="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",yde="An out of date version of HarperDB is already installed.",ob="It appears that HarperDB is already installed. Exiting install...",Ide="Aborting install",wde=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])$/),Cde=new RegExp(/^[^\s.,*>]+$/),Lde=ab.homedir(),Dde=Ws.join(Lde,Z.HDB_ROOT_DIR_NAME),Pde=9925,Mde="HDB_ADMIN",Ude="CLUSTER_USER",Gr={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:"},Sl=cp([Z.INSTALL_PROMPTS.HDB_CONFIG]),Ks,Zk=!1;n$.exports=e$;e$.createSuperUser=r$;async function e$(){console.log(ur(wo+Wk+wo)),Dt.notify(Wk);let e;Sl[Z.INSTALL_PROMPTS.HDB_CONFIG]&&(e=vde());let t=Hde();Object.assign(t,e);let r=hde(t);if(r)throw r.message;await qde(),await xde(t);let n=await Bde(t);n[Z.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT]&&(n[Z.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]=null),Ks=n[Z.INSTALL_PROMPTS.ROOTPATH],Sl[Z.INSTALL_PROMPTS.HDB_CONFIG]&&Ws.dirname(Sl[Z.INSTALL_PROMPTS.HDB_CONFIG])===Ks&&(Zk=!0),!Sl[Z.INSTALL_PROMPTS.HDB_CONFIG]&&await Vn.pathExists(Ws.join(Ks,Z.HDB_CONFIG_FILE))&&(console.error(ob),process.exit());let s=fde({prefixText:ur("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),_d.isEmpty(Ks))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Io.setHdbBasePath(Ks),await mde(Ks),await Fde(),await Gde(n),Dt.initLogSettings(!0),await r$(n),await $de(n),await Ode.generateKeys(),await Vde(),Tde(),s.stop(),console.log(ur(wo+Qk+wo)),Dt.notify(Qk)}a(e$,"install");function vde(){let e=Ede.parseDocument(Vn.readFileSync(Sl[Z.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=cb.flattenConfig(e.toJSON());return t[Z.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[Z.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(vde,"getConfigFromFile");async function Bde(e){Dt.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:pl,when:yo(e[Z.INSTALL_PROMPTS.ROOTPATH],Gr.DESTINATION),name:Z.INSTALL_PROMPTS.ROOTPATH,prefix:bo,default:Dde,validate:async s=>Ys(s)?Ys(s):await Vn.pathExists(Ws.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,message:ur(Gr.DESTINATION)},{type:"input",transformer:pl,when:yo(e[Z.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]??e[Z.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT],Gr.HDB_PORT),name:Z.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:bo,default:Pde,validate:s=>wde.test(s)?!0:"Invalid port.",message:ur(Gr.HDB_PORT)},{type:"input",transformer:pl,when:yo(e[Z.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Gr.HDB_USERNAME),name:Z.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:bo,default:Mde,validate:s=>Ys(s)?Ys(s):(t=s,!0),message:ur(Gr.HDB_USERNAME)},{type:"password",when:yo(e[Z.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Gr.HDB_PASS),name:Z.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:bo,validate:s=>Ys(s)?Ys(s):!0,message:ur(Gr.HDB_PASS)}];if(_d.autoCastBoolean(e[Z.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:pl,when:yo(e[Z.INSTALL_PROMPTS.CLUSTERING_NODENAME],Gr.NODE_NAME),name:Z.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:bo,default:dde.random(),validate:i=>Cde.test(i)?!0:"Invalid node name, must not contain ., * or >",message:ur(Gr.NODE_NAME)},{type:"input",transformer:pl,when:yo(e[Z.INSTALL_PROMPTS.CLUSTERING_USER],Gr.CLUSTER_USERNAME),name:Z.INSTALL_PROMPTS.CLUSTERING_USER,prefix:bo,default:Ude,validate:i=>Ys(i)?Ys(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:ur(Gr.CLUSTER_USERNAME)},{type:"password",when:yo(e[Z.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Gr.CLUSTER_PASS),name:Z.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:bo,validate:i=>Ys(i)?Ys(i):!0,message:ur(Gr.CLUSTER_PASS)}];r.push(...s)}let n=await zk.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(Bde,"installPrompts");function yo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${ur(t)} ${ka.gray("[hidden]")}`),Dt.trace(`${ur(t)} [hidden]`)):(console.log(`${ur(t)} ${e}`),Dt.trace(`${ur(t)} ${e}`)),!1):!0}a(yo,"displayCmdEnvVar");function Ys(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Ys,"checkForEmptyValue");function Hde(){let e=Object.keys(Z.INSTALL_PROMPTS),t=cp(e),r=cp(Object.keys(Z.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=Z.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(Hde,"checkForPromptOverride");async function qde(){Dt.trace("Checking for existing install.");let e=_d.getPropsFilePath(),t=await Vn.pathExists(e),r;if(t){Dt.trace(`Install found an existing boot prop file at:${e}`);let n=_de(e),s=cb.getConfigValue(Z.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(Z.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Vn.pathExists(s)}if(!t&&_d.noBootFile()&&(r=!0),r){if(Dt.trace(`Install found existing HDB config at:${e}`),await Jk.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${Xk.version()}. Exiting install...`;console.log(wo+ka.magenta.bold(yde)),console.log(ka.magenta.bold(s)),Dt.error(s)}else console.log(wo+ka.magenta.bold(ob)),Dt.error(ob);process.exit(0)}}a(qde,"checkForExistingInstall");async function xde(e){Dt.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Nde}${wo}and can be viewed by typing or copying and pasting the URL into your web browser.${wo}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:bo,transformer:pl,when:yo(e[Z.INSTALL_PROMPTS.TC_AGREEMENT],t),name:Z.INSTALL_PROMPTS.TC_AGREEMENT,message:ur(t),validate:s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:ka.yellow("Please enter 'yes' or 'no'")},n=await zk.prompt([r]);n[Z.INSTALL_PROMPTS.TC_AGREEMENT]&&n[Z.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==bde&&(console.log(ka.yellow(jk)),Dt.error(jk),process.exit(0))}a(xde,"termsAgreement");async function Fde(){let e=Ws.join(Ks,Z.HDB_CONFIG_FILE),t;try{t=ab.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}
101
- install_user = ${t}`,n=_d.getHomeDir(),s=Ws.join(n,Z.HDB_HOME_DIR_NAME),i=Ws.join(s,Z.LICENSE_KEY_DIR_NAME);try{Vn.mkdirpSync(s,{mode:Z.HDB_FILE_PERMISSIONS}),Vn.mkdirpSync(i,{mode:Z.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${Z.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Ws.join(s,Z.BOOT_PROPS_FILE_NAME);try{await Vn.writeFile(o,r)}catch(c){throw Dt.error(`There was an error creating the boot file at path: ${o}`),c}Io.setProperty(Z.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Io.setProperty(Z.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Io.setProperty(Io.BOOT_PROPS_FILE_PATH,o)}}a(Fde,"createBootPropertiesFile");async function Gde(e){Dt.trace("Creating HarperDB config file");let t=cp(Object.keys(Z.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{cb.createConfigFile(t),Io.initSync()}catch(r){kde(r)}}a(Gde,"createConfigFile");function kde(e){Dt.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Ide);let t=Ws.resolve(Io.get(Io.BOOT_PROPS_FILE_PATH),"../");t&&Vn.removeSync(t),Ks&&(Zk?Vn.readdirSync(Ks,{withFileTypes:!0}).forEach(n=>{let s=Ws.join(n.path,n.name);s!==Sl[Z.INSTALL_PROMPTS.HDB_CONFIG]&&Vn.removeSync(s)}):Vn.removeSync(Ks)),process.exit(1)}a(kde,"rollbackInstall");async function t$(e,t){Dt.trace("Creating admin user"),await Ade();let r;try{r=await Sde.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 pde.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(t$,"createAdminUser");async function r$(e){Dt.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[Z.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[Z.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await t$(t,r),delete e[Z.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[Z.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(r$,"createSuperUser");async function $de(e){Dt.trace("Creating Cluster user.");let t;e[Z.INSTALL_PROMPTS.CLUSTERING_USER]&&e[Z.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[Z.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[Z.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await t$({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[Z.INSTALL_PROMPTS.CLUSTERING_USER],delete e[Z.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a($de,"createClusterUser");async function Vde(){let e=Xk.version();if(e)await Jk.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(Vde,"insertHdbVersionInfo")});var o$=T((Pye,i$)=>{"use strict";var lb=Y(),gn=F(),s$=XN();i$.exports={processDirectives:Yde};async function Yde(e){console.log("Starting upgrade process...");let t=s$.getVersionsForUpgrade(e),r=Qde(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=Kde(o.sync_functions)}catch(u){throw gn.error(`Error while running an upgrade script for ${o.version}`),u}try{_=await Wde(o.async_functions)}catch(u){throw gn.error(`Error while running an upgrade script for ${o.version}`),u}n.push(...l,..._)}return n}a(Yde,"processDirectives");function Kde(e){if(lb.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(Kde,"runSyncFunctions");async function Wde(e){if(lb.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(Wde,"runAsyncFunctions");function Qde(e){if(lb.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=s$.getDirectiveByVersion(r);n&&t.push(n)}return t}a(Qde,"getUpgradeDirectivesToInstall")});var db=T((Uye,d$)=>{"use strict";var up=J();up.initSync();var u$=require("chalk"),a$=require("fs-extra"),Pi=F(),Di=C(),c$=Fi(),jde=o$(),ub=Y(),_$=ap(),zde=Xm(),l$=Hp(),Jde=Cn(),Xde=require("util").promisify,Zde=Xde(Jde.setSchemaDataToGlobal),_b,{UPGRADE_VERSION:_p}=Di.UPGRADE_JSON_FIELD_NAMES_ENUM;d$.exports={upgrade:efe};async function efe(e){await Zde(),_b===void 0&&(_b=Gc()),a$.existsSync(up.get(up.BOOT_PROPS_FILE_PATH))||(dd("The hdb_boot_properties file was not found. Please install HDB.",Di.LOG_LEVELS.ERROR),process.exit(1)),a$.existsSync(up.get(Di.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(dd("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 _$.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),dd(`This version of HarperDB is ${c$.version()}`,Di.LOG_LEVELS.INFO);let r=t[_p]?t[_p]:c$.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 tfe();let n,s=0;try{n=await zde.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 rfe(t),dd(`HarperDB was successfully upgraded to version ${t[_p]}`,Di.LOG_LEVELS.INFO)}a(efe,"upgrade");async function tfe(){let e=!1,t=await l$.findPs(Di.HDB_PROC_NAME);if(ub.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await l$.findPs("hdb_express");ub.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await _b.list();ub.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(u$.red(r)),Pi.error(r),process.exit(1)}}a(tfe,"checkIfRunning");async function rfe(e){try{await jde.processDirectives(e)}catch(t){throw dd("There was an error during the data upgrade. Please check the logs.",Di.LOG_LEVELS.ERROR),t}try{await _$.insertHdbUpgradeInfo(e[_p])}catch(t){Pi.error("Error updating the 'hdb_info' system table."),Pi.error(t)}}a(rfe,"runUpgrade");function dd(e,t=void 0){t||(t=Pi.info),Pi[t](e),console.log(u$.magenta(e))}a(dd,"printToLogAndConsole")});var p$=T((Bye,m$)=>{"use strict";var{promises:Eb,createReadStream:nfe,createWriteStream:sfe}=require("fs"),{createGzip:ife}=require("zlib"),{promisify:ofe}=require("util"),{pipeline:afe}=require("stream"),cfe=ofe(afe),lfe=require("path"),Va=J();Va.initSync();var $a=F(),{CONFIG_PARAMS:fd,ITC_EVENT_TYPES:ufe}=C(),{onMessageFromWorkers:_fe}=st(),dfe=6e4,ffe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Efe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",fb,E$;m$.exports=h$;_fe(e=>{e.type===ufe.RESTART&&(Va.initSync(!0),clearInterval(E$),Va.get(fd.LOGGING_ROTATION_ENABLED)&&h$())});async function h$(){try{let e=$a.getLogFilePath(),t=Va.get(fd.LOGGING_ROTATION_MAXSIZE),r=Va.get(fd.LOGGING_ROTATION_INTERVAL);if(!t&&!r){$a.error(ffe);return}let n=Va.get(fd.LOGGING_ROTATION_PATH);if(!n){$a.error(Efe);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}fb=Date.now()/6e4,$a.trace("Log rotate enabled, maxSize:",t,"interval:",r),E$=setInterval(async()=>{if(s){let o;o=await Eb.stat(e),o.size>=s&&await f$(e,n)}i&&Date.now()/6e4-fb>=i&&(await f$(e,n),fb=Date.now()/6e4)},dfe).unref()}catch(e){$a.error(e)}}a(h$,"logRotator");async function f$(e,t){let r=Va.get(fd.LOGGING_ROTATION_COMPRESS),n=lfe.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await cfe(nfe(e),ife(),sfe(n)),await Eb.unlink(e)):await Eb.rename(e,n),$a.closeLogFile(),$a.notify(`hdb.log rotated, old log moved to ${n}`)}a(f$,"moveLogFile")});var Ya=T((Kye,b$)=>{"use strict";var Yn=J();Yn.initSync();var qye=Ra(),Ft=C(),js=F(),Mi=require("fs-extra"),Co=require("path"),hfe=require("systeminformation"),mfe=xN(),pfe=lp(),hb=require("chalk"),Sfe=Mo(),Ui=Y(),T$=pt(),g$=Do(),S$=Sh(),Tfe=db(),gfe=p$(),Rfe=require("minimist"),{PACKAGE_ROOT:Afe}=C(),{startHTTPThreads:Ofe,startSocketServer:xye,mostIdleRouting:Fye,remoteAffinityRouting:Gye}=(Gm(),re(HN)),Nfe=ap(),{isMainThread:bfe}=require("worker_threads"),kye=ri(),$ye=ji(),Vye=gT(),Yye=Eu(),mb=C(),Qs,Tl,R$=!1,yfe="Upgrade complete. Starting HarperDB.",Ife="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",wfe="HarperDB not found, starting install process.",Cfe="There was an error during install, check install_log.log for more details. Exiting.",Lfe="HarperDB successfully started.";function Dfe(){if(!R$){let e=a(()=>{Mi.removeSync(Co.join(Yn.get(Ft.CONFIG_PARAMS.ROOTPATH),Ft.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(Dfe,"addExitListeners");async function A$(e=!1,t=!1){if(console.log(hb.magenta("Starting HarperDB...")),await N$()===!1){console.log(wfe);try{await pfe()}catch(o){console.error(Cfe,o),js.error(o),process.exit(1)}}let r,n=Tl?.service==="clustering";Tl?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Mi.readFile(Co.join(Yn.get(Ft.CONFIG_PARAMS.ROOTPATH),Ft.HDB_PID_FILE),"utf8")),c=await hfe.processes();for(let l of c.list)if(l.pid===o){n?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}Qs===void 0&&(Qs=Gc()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Yn.get(Ft.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await S$.generateNatsConfig(),await Qs.startClusteringProcesses(!0),process.exit()),Dfe(),await Mi.writeFile(Co.join(Yn.get(mb.CONFIG_PARAMS.ROOTPATH),mb.HDB_PID_FILE),`${process.pid}`),js.info("HarperDB PID",process.pid);let s;try{let o=await Nfe.getVersionUpdateInfo();o!==void 0&&(s=o[Ft.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await Tfe.upgrade(o),console.log(yfe))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`),js.error(o)):(console.error(Ife),js.error(o)),process.exit(1)}if(!e){let o=g$(Object.keys(Ft.CONFIG_PARAM_MAP),!0);!Ui.isEmpty(o)&&!Ui.isEmptyOrZeroLength(Object.keys(o))&&T$.updateConfigValue(void 0,void 0,o,!0,!0)}mfe(),Ufe(),Ui.autoCastBoolean(Yn.get(Ft.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&bfe&&await S$.generateNatsConfig(t)}a(A$,"initialize");async function Pfe(e=!1){try{Tl=Rfe(process.argv),Tl.ROOTPATH&&T$.updateConfigObject("settings_path",Co.join(Tl.ROOTPATH,Ft.HDB_CONFIG_FILE)),await A$(e,!0);let t=process.env.IS_SCRIPTED_SERVICE&&!Tl.service;Ui.autoCastBoolean(Yn.get(Ft.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await Qs.startClusteringProcesses(),await Qs.startClusteringThreads()),await Ofe(process.env.DEV_MODE?1:Yn.get(mb.CONFIG_PARAMS.THREADS)),Yn.get(Ft.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await gfe(),t||O$()}catch(t){console.error(t),js.error(t),process.exit(1)}}a(Pfe,"main");function O$(){js.suppressLogging(()=>{console.log(hb.magenta(""+Mi.readFileSync(Co.join(Afe,"utility/install/ascii_logo.txt")))),console.log(hb.magenta(`|------------- HarperDB ${Sfe.version} successfully started ------------|`))}),js.notify(Lfe)}a(O$,"started");async function Mfe(e=!0){R$=!e;try{Qs===void 0&&(Qs=Gc()),Qs.enterPM2Mode(),await A$(),Ui.autoCastBoolean(Yn.get(Ft.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await Qs.startClusteringProcesses(),await Qs.startService(Ft.PROCESS_DESCRIPTORS.HDB),O$(),e&&process.exit(0)}catch(t){console.error(t),js.error(t),process.exit(1)}}a(Mfe,"launch");function Ufe(){let e=Co.join(Yn.getHdbBasePath(),Ft.LICENSE_KEY_DIR_NAME,Ft.LICENSE_FILE_NAME),t=Co.join(e,Ft.LICENSE_FILE_NAME),r=Co.join(e,Ft.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=g$(["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),js.error(s)}}a(Ufe,"writeLicenseFromVars");b$.exports={launch:Mfe,main:Pfe,isHdbInstalled:N$};async function N$(){try{await Mi.stat(Ui.getPropsFilePath()),await Mi.stat(Yn.get(Ft.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Ui.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw js.error(`Error checking for HDB install - ${e}`),e}return!0}a(N$,"isHdbInstalled")});var pb=T((Qye,w$)=>{"use strict";var vfe=F(),Bfe=C(),Hfe=require("util"),qfe=require("child_process"),y$=Hfe.promisify(qfe.exec),xfe=di(),Ed=Gc(),I$="Stopping HarperDB.";w$.exports=Ffe;async function Ffe(){if(console.log(I$),vfe.notify(I$),await Ed.isServiceRegistered(Bfe.HDB_PROC_DESCRIPTOR)){Ed.enterPM2Mode();let r=await Ed.getUniqueServicesList();for(let n in r)await Ed.stop(n)}await Ed.kill();let t=await xfe.getHDBProcessInfo();t.clustering.forEach(r=>{y$(`kill ${r.pid}`)}),t.core.forEach(r=>{y$(`kill ${r.pid}`)})}a(Ffe,"stop")});var Nb=T((zye,H$)=>{"use strict";var Gfe=require("os"),fp=require("https"),C$=require("http"),vi=require("fs-extra"),kfe=require("yaml"),$fe=require("human-readable-ids").hri,{pipeline:L$}=require("stream/promises"),{createWriteStream:Ep,ensureDir:hp}=require("fs-extra"),{join:Ss}=require("path"),Ab=require("lodash"),Vfe=require("minimist"),U$=J(),Yfe=di(),v$=F(),md=pt(),{restart:Kfe}=Ra(),Wfe=pb(),Tb=Y(),D$=St(),Qfe=Cn(),{isHdbInstalled:jfe,main:B$,launch:zfe}=Ya(),Jfe=lp(),mp=C(),{SYSTEM_TABLE_NAMES:P$,SYSTEM_SCHEMA_NAME:Xfe,CONFIG_PARAMS:hd,OPERATIONS_ENUM:_r}=mp,Zfe=9925,eEe="info",tEe=1e4,rEe="clone-node-config.yaml",Ob=[P$.ROLE_TABLE_NAME,P$.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"},Wa=Vfe(process.argv),pd=Wa[kr.HDB_LEADER_USERNAME]??process.env[kr.HDB_LEADER_USERNAME],Sd=Wa[kr.HDB_LEADER_PASSWORD]??process.env[kr.HDB_LEADER_PASSWORD],gl=Wa[kr.HDB_LEADER_URL]??process.env[kr.HDB_LEADER_URL],Sb=Wa[kr.HDB_LEADER_CLUSTERING_HOST]??process.env[kr.HDB_LEADER_CLUSTERING_HOST],nEe=Wa[kr.HDB_LEADER_CLUSTERING_PORT]??process.env[kr.HDB_LEADER_CLUSTERING_PORT],sEe=(Wa[kr.HDB_FULLY_CONNECTED]??process.env[kr.HDB_FULLY_CONNECTED])==="true",Lo=(Wa[kr.HDB_CLONE_OVERTOP]??process.env[kr.HDB_CLONE_OVERTOP])==="true",gb,je,Rt,At,Al,Rl,Rn,ps,Rb;H$.exports=a(async function(t=!1){delete process.env.HDB_LEADER_URL;let r=await jfe();if(!Lo&&r)return console.info("HarperDB is already installed, clone will not be performed"),B$();if(Lo&&!r){console.info("No existing install of HarperDB found, cannot clone overtop");return}let n=Lo?`Cloning node ${gl} overtop of existing HarperDB install`:`Cloning node: ${gl}`;if(console.info(n),Lo)Rb=md.readConfigFile(),Rl=Rb.rootPath,await Wfe();else try{Rl=process.env.ROOTPATH?process.env.ROOTPATH:Ss(Gfe.homedir(),mp.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=Ss(Rl,rEe),je=kfe.parseDocument(vi.readFileSync(s,"utf8"),{simpleKeys:!0}).toJSON()}catch{console.info(s+" not found, using default config values.")}Al=je?.clustering?.nodeName??$fe.random(),Rt=await Td({operation:_r.GET_CONFIGURATION}),Rt=await JSON.parse(Rt.body),process.env.HDB_FETCH==="true"?(await cEe(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await aEe(),Lo||await oEe(),await iEe(),await lEe(),await uEe(t),console.info("Successfully cloned node: "+gl),t&&process.exit()},"cloneNode");async function iEe(){console.info("Cloning configuration"),gb=Rt?.clustering?.enabled;let e={[hd.ROOTPATH]:Rl};if(gb&&je?.clustering?.enabled!==!1){if(Sb==null)throw new Error("'HDB_LEADER_CLUSTERING_HOST' must be defined");e[hd.CLUSTERING_ENABLED]=!0;let n=Rt?.clustering?.hubServer?.cluster?.network?.routes,s=parseInt(nEe)||Rt?.clustering?.hubServer?.cluster?.network?.port;e[hd.CLUSTERING_USER]=Rt?.clustering?.user;let i=U$.get(hd.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES);Array.isArray(i)?i.push({host:Sb,port:s}):i=[{host:Sb,port:s}],Array.isArray(n)&&(i=i.concat(n)),e[hd.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES]=i}let t=je?.componentConfig?.exclude;t=t?t.reduce((n,s)=>({...n,[s.name]:!0}),{}):[];for(let n in Rt)Rt[n]?.package&&!t[n]&&await md.addConfig(n,Rt[n]);je?.databases&&await md.addConfig("databases",Rt?.schemas);let r;je&&(r=md.flattenConfig(je));for(let n in r){let s=mp.CONFIG_PARAM_MAP[n.toLowerCase()];s&&(e[s]=r[n])}e.rootPath==null&&delete e.rootPath,e?.clustering_nodeName==null&&(Lo?e.clustering_nodeName=Rb?.clustering?.nodeName??Al:e.clustering_nodeName=Al),v$.info("Cloning config:",e),Ab.isEmpty(e)||md.updateConfigValue(void 0,void 0,e,!1,!0)}a(iEe,"cloneConfig");async function oEe(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=Rl,!pd)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=pd,!Sd)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=Sd,process.env.OPERATIONSAPI_NETWORK_PORT=je?.operationsApi?.network?.port??Zfe,process.env.CLUSTERING_NODENAME=Al,process.env.CLUSTERING_LOGLEVEL=je?.clustering?.logLevel??eEe,await Jfe()}a(oEe,"installHDB");async function aEe(){console.info("Cloning system database");let e=Ka("system");await hp(e);let t=Ss(e,"system.mdb"),r=Ep(t,{overwrite:!0}),n={operation:_r.GET_BACKUP,database:"system"};Lo||(n.tables=Ob);let s=await M$(n,r);if(await vi.utimes(t,Date.now(),new Date(s.date)),At=await Td({operation:_r.DESCRIBE_ALL}),At=await JSON.parse(At.body),Rn=je?.databaseConfig?.excludeDatabases,Rn=Rn?Rn.reduce((i,o)=>({...i,[o.database]:!0}),{}):{},Rt.schemas)for(let i in Rt.schemas)Object.keys(Rt.schemas[i]).includes("tables")&&(Rn[i]=!0,console.info(`Excluding database '${i}' from clone because leader node has custom pathing configured for one or more of its tables`));ps=je?.databaseConfig?.excludeTables,ps=ps?ps.reduce((i,o)=>({...i,[o.database==null?null:o.database+o.table]:!0}),{}):{};for(let i in At){if(Rn[i]){At[i]="excluded";continue}if(Ab.isEmpty(At[i]))continue;let o=[],c=!1;for(let E in At[i])ps[i+E]?(c=!0,At[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 _=Ka(i);await hp(_);let u=Ss(_,i+".mdb"),d=Ep(u,{overwrite:!0}),f=await M$(l,d);await vi.utimes(u,Date.now(),new Date(f.date))}}a(aEe,"cloneTables");async function cEe(){console.info("Cloning system database using fetch");let e={operation:_r.GET_BACKUP,database:"system"};Lo||(e.tables=Ob);let t=await dp(e,!0),r=Ka("system");await hp(r);let n=Ss(r,"system.mdb");if(await L$(t.body,Ep(n,{overwrite:!0})),await vi.utimes(n,Date.now(),new Date(t.headers.get("date"))),At=await dp({operation:_r.DESCRIBE_ALL}),At=await At.json(),Rn=je?.databaseConfig?.excludeDatabases,Rn=Rn?Rn.reduce((s,i)=>({...s,[i.database]:!0}),{}):{},Rt.schemas)for(let s in Rt.schemas)Object.keys(Rt.schemas[s]).includes("tables")&&(Rn[s]=!0,console.info(`Excluding database '${s}' from clone because leader node has custom pathing configured for one or more of its tables`));ps=je?.databaseConfig?.excludeTables,ps=ps?ps.reduce((s,i)=>({...s,[i.database==null?null:i.database+i.table]:!0}),{}):{};for(let s in At){if(Rn[s]){At[s]="excluded";continue}if(Ab.isEmpty(At[s]))continue;let i=[],o=!1;for(let f in At[s])ps[s+f]?(o=!0,At[s][f]="excluded"):i.push(f);if(i.length===0)return;let c;o?(console.info(`Cloning database: ${s} tables: ${i}`),c=await dp({operation:_r.GET_BACKUP,database:s,tables:i},!0)):(console.info(`Cloning database: ${s}`),c=await dp({operation:_r.GET_BACKUP,database:s},!0));let l=Ka(s);await hp(l);let _=new Date(c.headers.get("date")),u=Ss(l,`${_.getTime()}-${s}.mdb`);await L$(c.body,Ep(u,{overwrite:!0}));let d=Ss(l,s+".mdb");await vi.rename(u,d),await vi.utimes(d,Date.now(),_)}}a(cEe,"cloneTablesFetch");async function dp(e,t=!1){let r=je?.httpsRejectUnauthorized??!1,n=new fp.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(pd+":"+Sd).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(gl,{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(dp,"leaderHttpReqFetch");function Ka(e){return je?.databases&&je?.databases[e]?.path||je?.storage&&je?.storage?.path||Ss(Rl,"database")}a(Ka,"getDbFileDir");async function lEe(){let{deployComponent:e}=Hh(),t=await Td({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(je?.componentConfig?.exclude){for(let o of je.componentConfig.exclude)if(o?.name!=null&&o.name===s.name){i=!0;break}}i||r.push(s.name)}let n=je?.componentConfig?.skipNodeModules!==!1;for(let s of r){console.info("Cloning component: "+s);let i=await Td({operation:_r.PACKAGE_COMPONENT,project:s,skip_node_modules:n}),{payload:o}=await JSON.parse(i.body);await e({payload:o,project:s})}}}a(lEe,"cloneComponents");async function uEe(e){if(!gb)return;let t=await Yfe.getHDBProcessInfo();t.clustering.length===0||t.core.length===0?e?await zfe(!1):await B$():(console.info(await Kfe({operation:_r.RESTART})),await Tb.async_set_timeout(tEe)),console.info("Clustering cloned tables"),e&&await Tb.async_set_timeout(2e3);let r=je?.clusteringConfig?.subscribeToLeaderNode!==!1,n=je?.clusteringConfig?.publishToLeaderNode!==!1;await Qfe.setSchemaDataToGlobalAsync();let s=c_(),i=await Td({operation:_r.CLUSTER_STATUS});i=await JSON.parse(i.body);let o=[],c=await vi.stat(Ss(Ka("system"),"system.mdb"));for(let _ of Ob)o.push({schema:Xfe,table:_,subscribe:r,publish:n,start_time:c.mtime.toISOString()});for(let _ in At){if(At[_]==="excluded")continue;let u=await vi.stat(Ss(Ka(_),_+".mdb"));u.mtime.setSeconds(u.mtime.getSeconds()-10);for(let d in At[_])At[_][d]!=="excluded"&&o.push({schema:_,table:d,subscribe:r,publish:n,start_time:u.mtime.toISOString()})}await D$.createTableStreams(o),v$.info("Sending add_node request to node:",Rt?.clustering?.nodeName,"with subscriptions:",o);let l;if(sEe==="true"&&i.connections.length>0){let _=sh(),u=[{node_name:Rt?.clustering?.nodeName,subscriptions:o}],d=!1;Al=U$.get(mp.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let f of i.connections){if(f.node_name===Al)continue;let E={node_name:f.node_name,subscriptions:[]};for(let h of f.subscriptions){if(Rn[h.schema]||ps[h.schema+h.table])continue;d=!0;let p=await vi.stat(Ss(Ka(h.schema),h.schema+".mdb"));p.mtime.setSeconds(p.mtime.getSeconds()-10),h.start_time=p.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:Rt?.clustering?.nodeName,subscriptions:o},!0),await D$.closeConnection()}a(uEe,"clusterTables");async function Td(e){let t=new fp.Agent({rejectUnauthorized:je?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(pd+":"+Sd).toString("base64"),"Content-Type":"application/json"},s=new URL(gl),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 Tb.httpRequest(i,e)}a(Td,"leaderHttpReq");async function M$(e,t){let r=new fp.Agent({rejectUnauthorized:je?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(pd+":"+Sd).toString("base64"),"Content-Type":"application/json"},i=new URL(gl),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:s};return i.protocol==="https:"&&(o.agent=r,C$=fp),i.port&&(o.port=i.port),new Promise((c,l)=>{let _=C$.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(M$,"leaderHttpStream")});var x$=T((Xye,q$)=>{var _Ee=lp(),dEe=F();q$.exports=fEe;async function fEe(){try{await _Ee()}catch(e){console.error("There was an error during the install."),console.error(e),dEe.error(e),process.exit(1)}}a(fEe,"install")});var k$=T((eIe,G$)=>{"use strict";var EEe=fh(),hEe=F(),F$="Registration failed.";async function mEe(){let e;try{e=await EEe.register()}catch(t){return hEe.error(`Registration error ${t}`),F$}return e||F$}a(mEe,"register");G$.exports={register:mEe}});var K$=T((rIe,Y$)=>{"use strict";var yb=require("fs-extra"),Ib=require("path"),bb=require("yaml"),gd=St(),Rd=C(),$$=rt(),wb=F(),pEe=br(),SEe=lh(),TEe=ah(),gEe=di(),V$=J(),{isHdbInstalled:REe}=Ya();V$.initSync();var Kn={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},$r={LEAF:"leaf server",HUB:"hub server"},pp;Y$.exports=AEe;async function AEe(){let e={harperdb:{status:Kn.STOPPED}};if(!await REe()){e.harperdb.status=Kn.NOT_INSTALLED,console.log(bb.stringify(e));return}pp=V$.get(Rd.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await yb.readFile(Ib.join(pp,Rd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Rd.NODE_ERROR_CODES.ENOENT){wb.info("`harperdb status` did not find a hdb.pid file"),e.harperdb.status=Kn.STOPPED,console.log(bb.stringify(e));return}throw n}let r=await gEe.getHDBProcessInfo();for(let n of r.core)if(n.pid===t){e.harperdb.status=Kn.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await OEe(r),e.clustering[$r.HUB].status===Kn.RUNNING&&e.clustering[$r.LEAF].status===Kn.RUNNING){let n=[],s=await SEe({});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 TEe.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 gd.closeConnection()}console.log(bb.stringify(e)),process.exit()}a(AEe,"status");async function OEe(e){let t={[$r.HUB]:{},[$r.LEAF]:{}};if(e.clustering.length===0)return t[$r.HUB].status=Kn.STOPPED,t[$r.LEAF].status=Kn.STOPPED,t;let{port:r}=gd.getServerConfig(Rd.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:n,decrypt_hash:s}=await pEe.getClusterUser();try{(await gd.createConnection(r,n,s,!1)).close(),t[$r.HUB].status=Kn.RUNNING}catch{t[$r.HUB].status=Kn.ERRORED}let{port:i}=gd.getServerConfig(Rd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await gd.createConnection(i,n,s,!1)).close(),t[$r.LEAF].status=Kn.RUNNING}catch{t[$r.LEAF].status=Kn.ERRORED}try{t[$r.HUB].pid=Number.parseInt(await yb.readFile(Ib.join(pp,"clustering",$$.PID_FILES.HUB),"utf8"))}catch(o){wb.error(o),t[$r.HUB].pid=void 0}try{t[$r.LEAF].pid=Number.parseInt(await yb.readFile(Ib.join(pp,"clustering",$$.PID_FILES.LEAF),"utf8"))}catch(o){wb.error(o),t[$r.LEAF].pid=void 0}return t}a(OEe,"getHubLeafStatus")});var Qa=F(),NEe=Fi(),Cb=C(),Sp=require("fs"),W$=require("path"),sIe=require("os"),{PACKAGE_ROOT:bEe}=C(),yEe=Ey(),iIe=(Gm(),re(HN)),Q$=nk(),{SERVICE_ACTIONS_ENUM:Vr}=Cb;IEe();function IEe(){let e=yEe();if(e)if(e.error){console.error(e.error),Qa.error(e.error);return}else e.warn&&(console.warn(e.warn),Qa.warn(e.warn));let t;Sp.readdir(W$.join(bEe,"bin"),r=>{if(r)return Qa.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let n=Q$.buildRequest();n.operation&&(t=Vr.OPERATION);let s;switch(t){case Vr.OPERATION:Qa.trace("calling cli operations with:",n),Q$.cliOperations(n).then();break;case Vr.DEV:process.env.DEV_MODE=!0;case Vr.RUN:let i=process.argv[3];i&&i[0]!=="-"&&(Sp.existsSync(i)||(console.error(`The folder ${i} does not exist`),process.exit(1)),Sp.statSync(i).isDirectory()||(console.error(`The path ${i} is not a folder`),process.exit(1)),Sp.existsSync(W$.join(i,Cb.HDB_CONFIG_FILE))?process.env.ROOTPATH=i:process.env.RUN_HDB_APP=i),Ya().main();break;case Vr.START:process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL")?Nb()(!0).catch(h=>{console.log(h)}):s=Ya().launch();break;case Vr.INSTALL:x$()().then(()=>Ya().main(!0)).catch(E=>{console.error(E)});break;case Vr.REGISTER:k$().register().then(E=>{console.log(E)}).catch(E=>{console.error(E)});break;case Vr.STOP:pb()().then(()=>{process.exit(0)}).catch(E=>{console.error(E)});break;case Vr.RESTART:Ra().restart({}).then().catch(E=>{Qa.error(E),console.error(`There was an error restarting HarperDB. ${E}`),process.exit(1)});break;case Vr.VERSION:NEe.printVersion();break;case Vr.UPGRADE:Qa.setLogLevel(Cb.LOG_LEVELS.INFO),db().upgrade(null).then(()=>{console.log("Your instance of HarperDB is up to date!")}).catch(E=>{Qa.error(`Got an error during upgrade ${E}`)});break;case Vr.STATUS:K$()().then().catch(E=>{console.error(E)});break;case Vr.RENEWCERTS:let{generateKeys:f}=np();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")?Nb()().catch(h=>{console.log(h)}):Ya().main();break;default:console.warn(`The "${t}" command is not understood.`);case Vr.HELP:console.log(`
102
+ Reindexing upgrade started for transaction logs`),wi.notify("Reindexing upgrade started for transaction logs"),await Rk(jN,!0,e)),wi.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(rd?", but errors occurred":"")}a(o_e,"reindexUpgrade");async function Rk(e,t,r){let n=await ks.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=Ci.join(e,o.toString());if(o===".DS_Store")continue;let l=await ks.readdir(c),_=l.length;for(let u=0;u<_;u++){let d=l[u];if(d!==".DS_Store"&&ks.statSync(Ci.join(c,d)).isDirectory())try{await a_e(o,d,t),ir.info(`Reindexing started for ${o}.${d}`),wi.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await l_e(o,d,c,t,r),ir.info(`Reindexing completed for ${o}.${d}`),wi.notify(`Reindexing completed for ${o}.${d}`)}catch(f){rd=!0,f.schema_path=c,f.table_name=d,wi.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),wi.error(f),ir.error(f),console.error(f)}}}if(!rd)try{await ks.rm(Jm,{recursive:!0})}catch{}}a(Rk,"processTables");async function a_e(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Ci.join(Jm,s);await ks.ensureDir(Jm),await ks.writeFile(i,""),ir=s_e({level:"debug",formatters:{bindings(){}}},i)}a(a_e,"initPinoLogger");var c_e=20;async function l_e(e,t,r,n,s){let i;try{i=await hn.openEnvironment(r,t,n)}catch(T){if(T.message==="MDB_INVALID: File is not an LMDB file"){wi.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`),ir.error(T);return}throw T}let o=d_e(i.dbis),c=hn.openDBI(i,o),l=Object.keys(i.dbis),_=hn.statDBI(i,o);ir.info(`Old environment stats: ${JSON.stringify(_)}`);let u=new n_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 hn.createEnvironment(r,t,!1);hn.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>c_e&&await E();await E()}catch(T){throw rd=!0,ir.error(T),T}async function E(){let T,R=f.map(({value:H})=>H);n?T=await Promise.all(R.map(H=>u_e(d,H))):T=await Zue(d,o,l.filter(H=>H!=="__blob__"),R,!1);for(let H=0,v=f.length;H<v;H++){let{key:P,value:V}=f[H];ir.info(`Record hash value: ${P} hash: ${o}`);let Y;n?Y=T[H]:Y=T.written_hashes.indexOf(P)>-1,td(Y,!0),__e(d,o,V[o],n),ir.info(`Insert success, written hashes: ${T.written_hashes}`),u.increment()}f=[],u.value/u.total*100%10===0&&wi.notify(`${e}.${t} ${u.value}/${u.total} records inserted`),ir.info(`${u.value}/${u.total} records inserted`)}a(E,"finishOutstanding"),u.stop();let h=hn.statDBI(i,o),p=hn.statDBI(d,o);if(ir.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${p.entryCount}`),td.deepStrictEqual(h.entryCount,p.entryCount),await hn.closeEnvironment(i),await hn.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let T=Ci.join(r,t),R=Ci.join(T,"data.mdb"),B=Ci.join(T,"lock.mdb");await ks.unlink(R),await ks.unlink(B),await ks.rmdir(T),ir.info(`Deleted old environment files from schema folder: ${R}, ${B}`)}let S=await hn.openEnvironment(r,t),O=hn.statDBI(S,o);ir.info(`New stats: ${JSON.stringify(p)}. New stats after move: ${JSON.stringify(O)}`),td.deepStrictEqual(O.entryCount,p.entryCount),await hn.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(l_e,"processTable");async function u_e(e,t){hn.initializeDBIs(e,Oo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Oo.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Oo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Oo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),r_e.isEmpty(t.user_name)||e.dbis[Oo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Oo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(u_e,"insertTransaction");function __e(e,t,r,n){let i=e.dbis[t].get(r);td.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Oo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Oo.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&&!t_e.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let _=0,u=l.length;_<u;_++){let d=l[_];Ak(e,c,d,r)}else Ak(e,c,l,r)}a(__e,"validateIndices");function Ak(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||ir.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),td.deepStrictEqual(s,!0)}catch(s){rd=!0,ir.error(s),console.error(s)}}a(Ak,"validateIndex");function d_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(d_e,"getHashDBI")});var Zm=g((gye,yk)=>{"use strict";var f_e=require("mkcert"),Xm=require("path"),zN=require("fs-extra"),JN=G(),E_e=J(),XN=C(),El=rg(),h_e=Do(),m_e=ft();yk.exports={generateKeys:p_e,updateConfigCert:bk};async function p_e(){let e=E_e.getHdbBasePath(),t=Xm.join(e,XN.LICENSE_KEY_DIR_NAME),r=await f_e.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:3650,caKey:El.CERTIFICATE_VALUES.key,caCert:El.CERTIFICATE_VALUES.cert}),n=Xm.join(t,El.CERTIFICATE_PEM_NAME),s=Xm.join(t,El.PRIVATEKEY_PEM_NAME),i=Xm.join(t,El.CA_PEM_NAME);try{await zN.writeFile(n,r.cert)}catch(o){throw JN.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await zN.writeFile(s,r.key)}catch(o){throw JN.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await zN.writeFile(i,El.CERTIFICATE_VALUES.cert)}catch(o){throw JN.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}bk(n,s,i)}a(p_e,"generateKeys");function bk(e,t,r){let n=h_e(Object.keys(XN.CONFIG_PARAM_MAP),!0),s=XN.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()]),m_e.updateConfigValue(void 0,void 0,i,!1,!0)}a(bk,"updateConfigCert")});var Dk=g((Oye,Lk)=>{"use strict";var ep=require("path"),No=require("fs-extra"),S_e=WN(),qa=G(),Ik=ft(),ZN=J(),us=C(),tp=W(),T_e=require("properties-reader"),g_e=Jn(),R_e=kE(),A_e=Sr(),Aye=require("util"),O_e=A_e.searchByValue,N_e=Tr(),b_e=ch(),y_e=Je(),I_e=Nk(),wk=Zm(),w_e=Qm(),id=new S_e("4.0.0"),Ck=[],nd,sd;async function C_e(){try{if(await w_e.upgradeCertsPrompt()){if(console.log("Generating new certificates."),nd){let t=tp.changeExtension(nd,".bak");await No.move(nd,t)}if(sd){let t=tp.changeExtension(sd,".bak");await No.move(sd,t)}await wk.generateKeys()}else console.log("Using existing certificates."),wk.updateConfigCert(nd,sd,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(C_e,"generateNewKeys");async function L_e(){console.log("Updating HarperDB nodes."),qa.info("Updating HarperDB nodes.");let e=[];try{let t=new g_e(us.SYSTEM_SCHEMA_NAME,us.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await O_e(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!y_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:us.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(tp.isEmptyOrZeroLength(n))return;let s=new R_e(us.SYSTEM_SCHEMA_NAME,us.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await N_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{b_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(L_e,"updateNodes");async function D_e(){let e=ZN.get(us.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(ep.join("config","settings.js"))){qa.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),qa.info(t);let r=ep.dirname(e),n=ZN.get(us.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=ep.join(n,"backup","4_0_0_upgrade_settings.bak"),i=ep.join(n,us.HDB_CONFIG_FILE);try{qa.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),No.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{qa.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),qa.info("Updating env variables with new settings values");let d=Ik.initOldConfig(e);nd=d[us.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],sd=d[us.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],Ik.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=tp.getPropsFilePath();No.accessSync(o,No.constants.F_OK|No.constants.R_OK);let l=T_e(o).get(us.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
103
+ install_user = ${l}`;try{No.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{ZN.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{No.removeSync(r),console.log(u),qa.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(D_e,"updateSettingsFile_4_0_0");id.async_functions.push(D_e);id.async_functions.push(C_e);id.async_functions.push(I_e);id.async_functions.push(L_e);Ck.push(id);Lk.exports=Ck});var eb=g((bye,vk)=>{"use strict";var xa=W(),P_e=C(),Pk=G(),{DATA_VERSION:M_e,UPGRADE_VERSION:U_e}=P_e.UPGRADE_JSON_FIELD_NAMES_ENUM,Mk=Tk(),rp=Dk(),Fa=new Map;Mk&&Mk.forEach(e=>{Fa.set(e.version,e)});rp&&rp.forEach(e=>{Fa.set(e.version,e)});rp&&rp.forEach(e=>{Fa.set(e.version,e)});function v_e(){return[...Fa.keys()].sort(xa.compareVersions)}a(v_e,"getSortedVersions");function Uk(e){let t=e[M_e],r=e[U_e];return xa.isEmptyOrZeroLength(t)||xa.isEmptyOrZeroLength(r)?(Pk.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),Pk.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."),[]):[...Fa.keys()].sort(xa.compareVersions).filter(function(n){return xa.compareVersions(n,t)>0&&xa.compareVersions(n,r)<=0})}a(Uk,"getVersionsForUpgrade");function B_e(e){return Uk(e).length>0}a(B_e,"hasUpgradesRequired");function H_e(e){return xa.isEmptyOrZeroLength(e)?null:Fa.has(e)?Fa.get(e):null}a(H_e,"getDirectiveByVersion");vk.exports={getSortedVersions:v_e,getDirectiveByVersion:H_e,getVersionsForUpgrade:Uk,hasUpgradesRequired:B_e}});var np=g((Iye,Fk)=>{"use strict";var q_e=require("util"),tb=require("chalk"),x_e=require("os"),Hk=Tr(),F_e=Sr(),mn=C(),qk=ak(),nb=zT(),{UpgradeObject:Bk}=uk(),{forceDowngradePrompt:G_e}=Qm(),k_e=xi(),od=G(),hl=W(),sb=yn(),$_e=(Ne(),ne(xe)),V_e=eb(),Y_e=q_e.promisify(sb.setSchemaDataToGlobal),K_e=F_e.searchByValue,W_e="info_id",Q_e="2.9.9",j_e="3.0.0";async function z_e(e){let t=new qk.HdbInfoInsertObject(1,e,e),r=new nb.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 sb.setSchemaDataToGlobal(),Hk.insert(r)}a(z_e,"insertHdbInstallInfo");async function rb(e){let t,r=await xk(),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 qk.HdbInfoInsertObject(i,e,e);let o=new nb.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 Y_e(),Hk.insert(o)}a(rb,"insertHdbUpgradeInfo");async function xk(){let e=new nb.NoSQLSeachObject(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,W_e,mn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await K_e(e))}catch(r){od.info(r)}return t}a(xk,"getAllHdbInfoRecords");async function J_e(){let e=await xk();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(J_e,"getLatestHdbInfoRecord");async function X_e(){od.info("Checking if HDB software has been updated");try{let e=k_e.version(),t=await J_e(),r;if(hl.isEmpty(t))r=Q_e;else if(r=t.data_version_num,hl.compareVersions(r.toString(),e.toString())>0){if(!hl.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(tb.yellow(`This instance's data was last run on version ${r}`)),console.error(tb.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.${x_e.EOL}${mn.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");hl.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(tb.yellow(`This instance's data was last run on version ${r}`)),await G_e(new Bk(r,e))?await rb(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(sb.setSchemaDataToGlobal(),Z_e(r),e.toString()===r.toString())return;let n=new Bk(r,e);if(V_e.hasUpgradesRequired(n))return n;hl.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await rb(n.upgrade_version),od.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw od.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),od.fatal(e),e}}a(X_e,"getVersionUpdateInfo");function Z_e(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 $_e.databases.system))throw console.log(t),new Error(t);if(!hl.isEmpty(e)&&e<j_e)throw console.log(t),new Error(t)}a(Z_e,"checkIfInstallIsSupported");Fk.exports={insertHdbInstallInfo:z_e,insertHdbUpgradeInfo:rb,getVersionUpdateInfo:X_e}});var Yk=g((Cye,Vk)=>{"use strict";var ib=require("joi"),{boolean:ede,string:Gk,number:tde}=ib.types(),kk=require("fs-extra"),ad=C(),$k=require("path"),rde=tt();Vk.exports=nde;function nde(e){let t=Gk.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=ib.object({[ad.INSTALL_PROMPTS.ROOTPATH]:ib.custom(sde),[ad.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:tde.min(0),[ad.INSTALL_PROMPTS.TC_AGREEMENT]:Gk.valid("yes","YES","Yes"),[ad.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[ad.INSTALL_PROMPTS.CLUSTERING_ENABLED]:ede});return rde.validateBySchema(e,r)}a(nde,"installValidator");function sde(e,t){if(kk.existsSync($k.join(e,"system/hdb_user/data.mdb"))||kk.existsSync($k.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(sde,"validateRootAvailable")});var Wk=g((Dye,Kk)=>{"use strict";var{mkdirpSync:ide}=require("fs-extra"),$s=require("path"),ml=C(),ab=G(),ode=bn(),ob=ti(),ade=Qe();Kk.exports=cde;async function cde(e){ab.trace("Mounting HarperDB"),_s(e),_s($s.join(e,"backup")),_s($s.join(e,"trash")),_s($s.join(e,"keys")),_s($s.join(e,"keys",ml.LICENSE_FILE_NAME)),_s($s.join(e,"log")),_s($s.join(e,"doc")),_s($s.join(e,"database")),_s($s.join(e,ml.TRANSACTIONS_DIR_NAME)),_s($s.join(e,"clustering","leaf")),_s($s.join(e,"components")),await lde()}a(cde,"mountHdb");async function lde(){let e=Eu(),t=Object.keys(ob);for(let r=0;r<t.length;r++){let n=t[r],s=ob[n].hash_attribute;try{ade.initSystemSchemaPaths(ml.SYSTEM_SCHEMA_NAME,n);let i=new e(ml.SYSTEM_SCHEMA_NAME,n,s);i.attributes=ob[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,await ode.createTable(n,i)}catch(i){throw ab.error(`issue creating environment for ${ml.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(lde,"createLMDBTables");function _s(e){ide(e,{mode:ml.HDB_FILE_PERMISSIONS}),ab.info(`Directory ${e} created`)}a(_s,"makeDirectory")});var ip=g((Mye,s$)=>{"use strict";var lb=require("os"),Jk=require("inquirer"),Gn=require("fs-extra"),ude=require("properties-reader"),Ga=require("chalk"),Ks=require("path"),_de=require("human-readable-ids").hri,dde=require("ora"),fde=require("yaml"),It=G(),Io=J(),cd=W(),sp=Do(),Xk=np(),Zk=xi(),ee=C(),Ede=Yk(),hde=Wk(),ub=ft(),mde=Rr(),pde=xE(),Sde=GN(),Tde=yn(),gde=require("util").promisify,Rde=gde(Tde.setSchemaDataToGlobal),Ade=Zm(),pl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),or=a(e=>Ga.magenta.bold(e),"HDB_PROMPT_MSG"),Ode="https://harperdb.io/legal/end-user-license-agreement",wo=lb.EOL,bo="",Nde="yes",Qk="Starting HarperDB install...",jk="HarperDB installation was successful.",zk="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",bde="An out of date version of HarperDB is already installed.",cb="It appears that HarperDB is already installed. Exiting install...",yde="Aborting install",Ide=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])$/),wde=new RegExp(/^[^\s.,*>]+$/),Cde=lb.homedir(),Lde=Ks.join(Cde,ee.HDB_ROOT_DIR_NAME),Dde=9925,Pde="HDB_ADMIN",Mde="CLUSTER_USER",Hr={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:"},Sl=sp([ee.INSTALL_PROMPTS.HDB_CONFIG]),Ys,e$=!1;s$.exports=t$;t$.createSuperUser=n$;async function t$(){console.log(or(wo+Qk+wo)),It.notify(Qk);let e;Sl[ee.INSTALL_PROMPTS.HDB_CONFIG]&&(e=Ude());let t=Bde();Object.assign(t,e);let r=Ede(t);if(r)throw r.message;await Hde(),await qde(t);let n=await vde(t);n[ee.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT]&&(n[ee.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]=null),Ys=n[ee.INSTALL_PROMPTS.ROOTPATH],Sl[ee.INSTALL_PROMPTS.HDB_CONFIG]&&Ks.dirname(Sl[ee.INSTALL_PROMPTS.HDB_CONFIG])===Ys&&(e$=!0),!Sl[ee.INSTALL_PROMPTS.HDB_CONFIG]&&await Gn.pathExists(Ks.join(Ys,ee.HDB_CONFIG_FILE))&&(console.error(cb),process.exit());let s=dde({prefixText:or("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),cd.isEmpty(Ys))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Io.setHdbBasePath(Ys),await hde(Ys),await xde(),await Fde(n),It.initLogSettings(!0),await n$(n),await kde(n),await Ade.generateKeys(),await $de(),Sde(),s.stop(),console.log(or(wo+jk+wo)),It.notify(jk)}a(t$,"install");function Ude(){let e=fde.parseDocument(Gn.readFileSync(Sl[ee.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=ub.flattenConfig(e.toJSON());return t[ee.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[ee.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(Ude,"getConfigFromFile");async function vde(e){It.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:pl,when:yo(e[ee.INSTALL_PROMPTS.ROOTPATH],Hr.DESTINATION),name:ee.INSTALL_PROMPTS.ROOTPATH,prefix:bo,default:Lde,validate:async s=>Vs(s)?Vs(s):await Gn.pathExists(Ks.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,message:or(Hr.DESTINATION)},{type:"input",transformer:pl,when:yo(e[ee.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]??e[ee.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT],Hr.HDB_PORT),name:ee.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:bo,default:Dde,validate:s=>Ide.test(s)?!0:"Invalid port.",message:or(Hr.HDB_PORT)},{type:"input",transformer:pl,when:yo(e[ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Hr.HDB_USERNAME),name:ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:bo,default:Pde,validate:s=>Vs(s)?Vs(s):(t=s,!0),message:or(Hr.HDB_USERNAME)},{type:"password",when:yo(e[ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Hr.HDB_PASS),name:ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:bo,validate:s=>Vs(s)?Vs(s):!0,message:or(Hr.HDB_PASS)}];if(cd.autoCastBoolean(e[ee.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:pl,when:yo(e[ee.INSTALL_PROMPTS.CLUSTERING_NODENAME],Hr.NODE_NAME),name:ee.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:bo,default:_de.random(),validate:i=>wde.test(i)?!0:"Invalid node name, must not contain ., * or >",message:or(Hr.NODE_NAME)},{type:"input",transformer:pl,when:yo(e[ee.INSTALL_PROMPTS.CLUSTERING_USER],Hr.CLUSTER_USERNAME),name:ee.INSTALL_PROMPTS.CLUSTERING_USER,prefix:bo,default:Mde,validate:i=>Vs(i)?Vs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:or(Hr.CLUSTER_USERNAME)},{type:"password",when:yo(e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Hr.CLUSTER_PASS),name:ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:bo,validate:i=>Vs(i)?Vs(i):!0,message:or(Hr.CLUSTER_PASS)}];r.push(...s)}let n=await Jk.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(vde,"installPrompts");function yo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${or(t)} ${Ga.gray("[hidden]")}`),It.trace(`${or(t)} [hidden]`)):(console.log(`${or(t)} ${e}`),It.trace(`${or(t)} ${e}`)),!1):!0}a(yo,"displayCmdEnvVar");function Vs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Vs,"checkForEmptyValue");function Bde(){let e=Object.keys(ee.INSTALL_PROMPTS),t=sp(e),r=sp(Object.keys(ee.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=ee.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(Bde,"checkForPromptOverride");async function Hde(){It.trace("Checking for existing install.");let e=cd.getPropsFilePath(),t=await Gn.pathExists(e),r;if(t){It.trace(`Install found an existing boot prop file at:${e}`);let n=ude(e),s=ub.getConfigValue(ee.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(ee.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Gn.pathExists(s)}if(!t&&cd.noBootFile()&&(r=!0),r){if(It.trace(`Install found existing HDB config at:${e}`),await Xk.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${Zk.version()}. Exiting install...`;console.log(wo+Ga.magenta.bold(bde)),console.log(Ga.magenta.bold(s)),It.error(s)}else console.log(wo+Ga.magenta.bold(cb)),It.error(cb);process.exit(0)}}a(Hde,"checkForExistingInstall");async function qde(e){It.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Ode}${wo}and can be viewed by typing or copying and pasting the URL into your web browser.${wo}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:bo,transformer:pl,when:yo(e[ee.INSTALL_PROMPTS.TC_AGREEMENT],t),name:ee.INSTALL_PROMPTS.TC_AGREEMENT,message:or(t),validate:s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:Ga.yellow("Please enter 'yes' or 'no'")},n=await Jk.prompt([r]);n[ee.INSTALL_PROMPTS.TC_AGREEMENT]&&n[ee.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Nde&&(console.log(Ga.yellow(zk)),It.error(zk),process.exit(0))}a(qde,"termsAgreement");async function xde(){let e=Ks.join(Ys,ee.HDB_CONFIG_FILE),t;try{t=lb.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=cd.getHomeDir(),s=Ks.join(n,ee.HDB_HOME_DIR_NAME),i=Ks.join(s,ee.LICENSE_KEY_DIR_NAME);try{Gn.mkdirpSync(s,{mode:ee.HDB_FILE_PERMISSIONS}),Gn.mkdirpSync(i,{mode:ee.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${ee.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Ks.join(s,ee.BOOT_PROPS_FILE_NAME);try{await Gn.writeFile(o,r)}catch(c){throw It.error(`There was an error creating the boot file at path: ${o}`),c}Io.setProperty(ee.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Io.setProperty(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Io.setProperty(Io.BOOT_PROPS_FILE_PATH,o)}}a(xde,"createBootPropertiesFile");async function Fde(e){It.trace("Creating HarperDB config file");let t=sp(Object.keys(ee.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{ub.createConfigFile(t),Io.initSync()}catch(r){Gde(r)}}a(Fde,"createConfigFile");function Gde(e){It.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(yde);let t=Ks.resolve(Io.get(Io.BOOT_PROPS_FILE_PATH),"../");t&&Gn.removeSync(t),Ys&&(e$?Gn.readdirSync(Ys,{withFileTypes:!0}).forEach(n=>{let s=Ks.join(n.path,n.name);s!==Sl[ee.INSTALL_PROMPTS.HDB_CONFIG]&&Gn.removeSync(s)}):Gn.removeSync(Ys)),process.exit(1)}a(Gde,"rollbackInstall");async function r$(e,t){It.trace("Creating admin user"),await Rde();let r;try{r=await pde.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 mde.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(r$,"createAdminUser");async function n$(e){It.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await r$(t,r),delete e[ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(n$,"createSuperUser");async function kde(e){It.trace("Creating Cluster user.");let t;e[ee.INSTALL_PROMPTS.CLUSTERING_USER]&&e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[ee.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await r$({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[ee.INSTALL_PROMPTS.CLUSTERING_USER],delete e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(kde,"createClusterUser");async function $de(){let e=Zk.version();if(e)await Xk.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a($de,"insertHdbVersionInfo")});var a$=g((vye,o$)=>{"use strict";var _b=W(),pn=G(),i$=eb();o$.exports={processDirectives:Vde};async function Vde(e){console.log("Starting upgrade process...");let t=i$.getVersionsForUpgrade(e),r=Wde(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;pn.notify(c),console.log(c);let l=[],_=[];try{l=Yde(o.sync_functions)}catch(u){throw pn.error(`Error while running an upgrade script for ${o.version}`),u}try{_=await Kde(o.async_functions)}catch(u){throw pn.error(`Error while running an upgrade script for ${o.version}`),u}n.push(...l,..._)}return n}a(Vde,"processDirectives");function Yde(e){if(_b.isEmptyOrZeroLength(e))return pn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return pn.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(pn.info(`Running function ${r.name}`),!(r instanceof Function)){pn.info("Variable being processed is not a function");continue}let n=r();pn.info(n),t.push(n)}return t}a(Yde,"runSyncFunctions");async function Kde(e){if(_b.isEmptyOrZeroLength(e))return pn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return pn.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(pn.info(`Running function ${s.name}`),!(s instanceof Function)){pn.info("Variable being processed is not a function");continue}let i=await s();pn.info(i),t.push(i)}return t}a(Kde,"runAsyncFunctions");function Wde(e){if(_b.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=i$.getDirectiveByVersion(r);n&&t.push(n)}return t}a(Wde,"getUpgradeDirectivesToInstall")});var Eb=g((Hye,f$)=>{"use strict";var op=J();op.initSync();var _$=require("chalk"),c$=require("fs-extra"),Di=G(),Li=C(),l$=xi(),Qde=a$(),db=W(),d$=np(),jde=Qm(),u$=Mp(),zde=yn(),Jde=require("util").promisify,Xde=Jde(zde.setSchemaDataToGlobal),fb,{UPGRADE_VERSION:ap}=Li.UPGRADE_JSON_FIELD_NAMES_ENUM;f$.exports={upgrade:Zde};async function Zde(e){await Xde(),fb===void 0&&(fb=Fc()),c$.existsSync(op.get(op.BOOT_PROPS_FILE_PATH))||(ld("The hdb_boot_properties file was not found. Please install HDB.",Li.LOG_LEVELS.ERROR),process.exit(1)),c$.existsSync(op.get(Li.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(ld("The hdb settings file was not found. Please make sure HDB is installed.",Li.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await d$.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),ld(`This version of HarperDB is ${l$.version()}`,Li.LOG_LEVELS.INFO);let r=t[ap]?t[ap]:l$.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Li.HDB_SUPPORT_ADDRESS}`),Di.notify("Missing new version field from upgrade info object"),process.exit(1)),await efe();let n,s=0;try{n=await jde.forceUpdatePrompt(t)}catch(i){Di.error("There was an error when prompting user about upgrade."),Di.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Di.info(`Starting upgrade to version ${r}`),await tfe(t),ld(`HarperDB was successfully upgraded to version ${t[ap]}`,Li.LOG_LEVELS.INFO)}a(Zde,"upgrade");async function efe(){let e=!1,t=await u$.findPs(Li.HDB_PROC_NAME);if(db.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await u$.findPs("hdb_express");db.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await fb.list();db.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(_$.red(r)),Di.error(r),process.exit(1)}}a(efe,"checkIfRunning");async function tfe(e){try{await Qde.processDirectives(e)}catch(t){throw ld("There was an error during the data upgrade. Please check the logs.",Li.LOG_LEVELS.ERROR),t}try{await d$.insertHdbUpgradeInfo(e[ap])}catch(t){Di.error("Error updating the 'hdb_info' system table."),Di.error(t)}}a(tfe,"runUpgrade");function ld(e,t=void 0){t||(t=Di.info),Di[t](e),console.log(_$.magenta(e))}a(ld,"printToLogAndConsole")});var S$=g((xye,p$)=>{"use strict";var{promises:mb,createReadStream:rfe,createWriteStream:nfe}=require("fs"),{createGzip:sfe}=require("zlib"),{promisify:ife}=require("util"),{pipeline:ofe}=require("stream"),afe=ife(ofe),cfe=require("path"),$a=J();$a.initSync();var ka=G(),{CONFIG_PARAMS:ud,ITC_EVENT_TYPES:lfe}=C(),{onMessageFromWorkers:ufe}=et(),_fe=6e4,dfe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",ffe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",hb,h$;p$.exports=m$;ufe(e=>{e.type===lfe.RESTART&&($a.initSync(!0),clearInterval(h$),$a.get(ud.LOGGING_ROTATION_ENABLED)&&m$())});async function m$(){try{let e=ka.getLogFilePath(),t=$a.get(ud.LOGGING_ROTATION_MAXSIZE),r=$a.get(ud.LOGGING_ROTATION_INTERVAL);if(!t&&!r){ka.error(dfe);return}let n=$a.get(ud.LOGGING_ROTATION_PATH);if(!n){ka.error(ffe);return}let s;if(t){let o=t.slice(-1),c=t.slice(0,-1);o==="G"?s=c*1e9:o==="M"?s=c*1e6:s=c*1e3}let i;if(r){let o=r.slice(-1),c=r.slice(0,-1);o==="D"?i=c*1440:o==="H"?i=c*60:i=c}hb=Date.now()/6e4,ka.trace("Log rotate enabled, maxSize:",t,"interval:",r),h$=setInterval(async()=>{if(s){let o;o=await mb.stat(e),o.size>=s&&await E$(e,n)}i&&Date.now()/6e4-hb>=i&&(await E$(e,n),hb=Date.now()/6e4)},_fe).unref()}catch(e){ka.error(e)}}a(m$,"logRotator");async function E$(e,t){let r=$a.get(ud.LOGGING_ROTATION_COMPRESS),n=cfe.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await afe(rfe(e),sfe(),nfe(n)),await mb.unlink(e)):await mb.rename(e,n),ka.closeLogFile(),ka.notify(`hdb.log rotated, old log moved to ${n}`)}a(E$,"moveLogFile")});var Va=g((jye,y$)=>{"use strict";var kn=J();kn.initSync();var Gye=Ra(),Ht=C(),Qs=G(),Pi=require("fs-extra"),Co=require("path"),Efe=require("systeminformation"),hfe=GN(),mfe=ip(),pb=require("chalk"),pfe=Mo(),Mi=W(),g$=ft(),R$=Do(),T$=hh(),Sfe=Eb(),Tfe=S$(),gfe=require("minimist"),{PACKAGE_ROOT:Rfe}=C(),{startHTTPThreads:Afe,startSocketServer:kye,mostIdleRouting:$ye,remoteAffinityRouting:Vye}=(Hm(),ne(xN)),Ofe=np(),{isMainThread:Nfe}=require("worker_threads"),Yye=ti(),Kye=Wi(),Wye=pT(),Qye=Eu(),Sb=C(),Ws,Tl,A$=!1,bfe="Upgrade complete. Starting HarperDB.",yfe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",Ife="HarperDB not found, starting install process.",wfe="There was an error during install, check install_log.log for more details. Exiting.",Cfe="HarperDB successfully started.";function Lfe(){if(!A$){let e=a(()=>{Pi.removeSync(Co.join(kn.get(Ht.CONFIG_PARAMS.ROOTPATH),Ht.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(Lfe,"addExitListeners");async function O$(e=!1,t=!1){if(console.log(pb.magenta("Starting HarperDB...")),await b$()===!1){console.log(Ife);try{await mfe()}catch(o){console.error(wfe,o),Qs.error(o),process.exit(1)}}let r,n=Tl?.service==="clustering";Tl?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Pi.readFile(Co.join(kn.get(Ht.CONFIG_PARAMS.ROOTPATH),Ht.HDB_PID_FILE),"utf8")),c=await Efe.processes();for(let l of c.list)if(l.pid===o){n?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}Ws===void 0&&(Ws=Fc()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),kn.get(Ht.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await T$.generateNatsConfig(),await Ws.startClusteringProcesses(!0),process.exit()),Lfe(),await Pi.writeFile(Co.join(kn.get(Sb.CONFIG_PARAMS.ROOTPATH),Sb.HDB_PID_FILE),`${process.pid}`),Qs.info("HarperDB PID",process.pid);let s;try{let o=await Ofe.getVersionUpdateInfo();o!==void 0&&(s=o[Ht.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await Sfe.upgrade(o),console.log(bfe))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`),Qs.error(o)):(console.error(yfe),Qs.error(o)),process.exit(1)}if(!e){let o=R$(Object.keys(Ht.CONFIG_PARAM_MAP),!0);!Mi.isEmpty(o)&&!Mi.isEmptyOrZeroLength(Object.keys(o))&&g$.updateConfigValue(void 0,void 0,o,!0,!0)}hfe(),Mfe(),Mi.autoCastBoolean(kn.get(Ht.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&Nfe&&await T$.generateNatsConfig(t)}a(O$,"initialize");async function Dfe(e=!1){try{Tl=gfe(process.argv),Tl.ROOTPATH&&g$.updateConfigObject("settings_path",Co.join(Tl.ROOTPATH,Ht.HDB_CONFIG_FILE)),await O$(e,!0);let t=process.env.IS_SCRIPTED_SERVICE&&!Tl.service;Mi.autoCastBoolean(kn.get(Ht.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await Ws.startClusteringProcesses(),await Ws.startClusteringThreads()),await Afe(process.env.DEV_MODE?1:kn.get(Sb.CONFIG_PARAMS.THREADS)),kn.get(Ht.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await Tfe(),t||N$()}catch(t){console.error(t),Qs.error(t),process.exit(1)}}a(Dfe,"main");function N$(){Qs.suppressLogging(()=>{console.log(pb.magenta(""+Pi.readFileSync(Co.join(Rfe,"utility/install/ascii_logo.txt")))),console.log(pb.magenta(`|------------- HarperDB ${pfe.version} successfully started ------------|`))}),Qs.notify(Cfe)}a(N$,"started");async function Pfe(e=!0){A$=!e;try{Ws===void 0&&(Ws=Fc()),Ws.enterPM2Mode(),await O$(),Mi.autoCastBoolean(kn.get(Ht.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await Ws.startClusteringProcesses(),await Ws.startService(Ht.PROCESS_DESCRIPTORS.HDB),N$(),e&&process.exit(0)}catch(t){console.error(t),Qs.error(t),process.exit(1)}}a(Pfe,"launch");function Mfe(){let e=Co.join(kn.getHdbBasePath(),Ht.LICENSE_KEY_DIR_NAME,Ht.LICENSE_FILE_NAME),t=Co.join(e,Ht.LICENSE_FILE_NAME),r=Co.join(e,Ht.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=R$(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Mi.isEmpty(n)||Mi.isEmpty(s))return;Pi.mkdirpSync(e),Pi.writeFileSync(r,n),Pi.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),Qs.error(s)}}a(Mfe,"writeLicenseFromVars");y$.exports={launch:Pfe,main:Dfe,isHdbInstalled:b$};async function b$(){try{await Pi.stat(Mi.getPropsFilePath()),await Pi.stat(kn.get(Ht.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Mi.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw Qs.error(`Error checking for HDB install - ${e}`),e}return!0}a(b$,"isHdbInstalled")});var Tb=g((Jye,C$)=>{"use strict";var Ufe=G(),vfe=C(),Bfe=require("util"),Hfe=require("child_process"),I$=Bfe.promisify(Hfe.exec),qfe=_i(),_d=Fc(),w$="Stopping HarperDB.";C$.exports=xfe;async function xfe(){if(console.log(w$),Ufe.notify(w$),await _d.isServiceRegistered(vfe.HDB_PROC_DESCRIPTOR)){_d.enterPM2Mode();let r=await _d.getUniqueServicesList();for(let n in r)await _d.stop(n)}await _d.kill();let t=await qfe.getHDBProcessInfo();t.clustering.forEach(r=>{I$(`kill ${r.pid}`)}),t.core.forEach(r=>{I$(`kill ${r.pid}`)})}a(xfe,"stop")});var yb=g((Zye,q$)=>{"use strict";var Ffe=require("os"),lp=require("https"),L$=require("http"),Ui=require("fs-extra"),Gfe=require("yaml"),kfe=require("human-readable-ids").hri,{pipeline:D$}=require("stream/promises"),{createWriteStream:up,ensureDir:_p}=require("fs-extra"),{join:Es}=require("path"),Nb=require("lodash"),$fe=require("minimist"),v$=J(),Vfe=_i(),B$=G(),fd=ft(),{restart:Yfe}=Ra(),Kfe=Tb(),Rb=W(),P$=Et(),Wfe=yn(),{isHdbInstalled:Qfe,main:H$,launch:jfe}=Va(),zfe=ip(),dp=C(),{SYSTEM_TABLE_NAMES:M$,SYSTEM_SCHEMA_NAME:Jfe,CONFIG_PARAMS:dd,OPERATIONS_ENUM:ar}=dp,Xfe=9925,Zfe="info",eEe=1e4,tEe="clone-node-config.yaml",bb=[M$.ROLE_TABLE_NAME,M$.USER_TABLE_NAME],qr={HDB_LEADER_USERNAME:"HDB_LEADER_USERNAME",HDB_LEADER_PASSWORD:"HDB_LEADER_PASSWORD",HDB_LEADER_URL:"HDB_LEADER_URL",HDB_LEADER_CLUSTERING_HOST:"HDB_LEADER_CLUSTERING_HOST",HDB_LEADER_CLUSTERING_PORT:"HDB_LEADER_CLUSTERING_PORT",HDB_FULLY_CONNECTED:"HDB_FULLY_CONNECTED",HDB_CLONE_OVERTOP:"HDB_CLONE_OVERTOP"},Ka=$fe(process.argv),Ed=Ka[qr.HDB_LEADER_USERNAME]??process.env[qr.HDB_LEADER_USERNAME],hd=Ka[qr.HDB_LEADER_PASSWORD]??process.env[qr.HDB_LEADER_PASSWORD],gl=Ka[qr.HDB_LEADER_URL]??process.env[qr.HDB_LEADER_URL],gb=Ka[qr.HDB_LEADER_CLUSTERING_HOST]??process.env[qr.HDB_LEADER_CLUSTERING_HOST],rEe=Ka[qr.HDB_LEADER_CLUSTERING_PORT]??process.env[qr.HDB_LEADER_CLUSTERING_PORT],nEe=(Ka[qr.HDB_FULLY_CONNECTED]??process.env[qr.HDB_FULLY_CONNECTED])==="true",Lo=(Ka[qr.HDB_CLONE_OVERTOP]??process.env[qr.HDB_CLONE_OVERTOP])==="true",Ab,We,pt,St,Al,Rl,Sn,ds,Ob;q$.exports=a(async function(t=!1){delete process.env.HDB_LEADER_URL;let r=await Qfe();if(!Lo&&r)return console.info("HarperDB is already installed, clone will not be performed"),H$();if(Lo&&!r){console.info("No existing install of HarperDB found, cannot clone overtop");return}let n=Lo?`Cloning node ${gl} overtop of existing HarperDB install`:`Cloning node: ${gl}`;if(console.info(n),Lo)Ob=fd.readConfigFile(),Rl=Ob.rootPath,await Kfe();else try{Rl=process.env.ROOTPATH?process.env.ROOTPATH:Es(Ffe.homedir(),dp.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=Es(Rl,tEe),We=Gfe.parseDocument(Ui.readFileSync(s,"utf8"),{simpleKeys:!0}).toJSON()}catch{console.info(s+" not found, using default config values.")}Al=We?.clustering?.nodeName??kfe.random(),pt=await md({operation:ar.GET_CONFIGURATION}),pt=await JSON.parse(pt.body),process.env.HDB_FETCH==="true"?(await aEe(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await oEe(),Lo||await iEe(),await sEe(),await cEe(),await lEe(t),console.info("Successfully cloned node: "+gl),t&&process.exit()},"cloneNode");async function sEe(){console.info("Cloning configuration"),Ab=pt?.clustering?.enabled;let e={[dd.ROOTPATH]:Rl};if(Ab&&We?.clustering?.enabled!==!1){if(gb==null)throw new Error("'HDB_LEADER_CLUSTERING_HOST' must be defined");e[dd.CLUSTERING_ENABLED]=!0;let n=pt?.clustering?.hubServer?.cluster?.network?.routes,s=parseInt(rEe)||pt?.clustering?.hubServer?.cluster?.network?.port;e[dd.CLUSTERING_USER]=pt?.clustering?.user;let i=v$.get(dd.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES);Array.isArray(i)?i.push({host:gb,port:s}):i=[{host:gb,port:s}],Array.isArray(n)&&(i=i.concat(n)),e[dd.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES]=i}let t=We?.componentConfig?.exclude;t=t?t.reduce((n,s)=>({...n,[s.name]:!0}),{}):[];for(let n in pt)pt[n]?.package&&!t[n]&&await fd.addConfig(n,pt[n]);We?.databases&&await fd.addConfig("databases",pt?.schemas);let r;We&&(r=fd.flattenConfig(We));for(let n in r){let s=dp.CONFIG_PARAM_MAP[n.toLowerCase()];s&&(e[s]=r[n])}e.rootPath==null&&delete e.rootPath,e?.clustering_nodeName==null&&(Lo?e.clustering_nodeName=Ob?.clustering?.nodeName??Al:e.clustering_nodeName=Al),B$.info("Cloning config:",e),Nb.isEmpty(e)||fd.updateConfigValue(void 0,void 0,e,!1,!0)}a(sEe,"cloneConfig");async function iEe(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=Rl,!Ed)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=Ed,!hd)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=hd,process.env.OPERATIONSAPI_NETWORK_PORT=We?.operationsApi?.network?.port??Xfe,process.env.CLUSTERING_NODENAME=Al,process.env.CLUSTERING_LOGLEVEL=We?.clustering?.logLevel??Zfe,await zfe()}a(iEe,"installHDB");async function oEe(){console.info("Cloning system database");let e=Ya("system");await _p(e);let t=Es(e,"system.mdb"),r=up(t,{overwrite:!0}),n={operation:ar.GET_BACKUP,database:"system"};Lo||(n.tables=bb);let s=await U$(n,r);if(await Ui.utimes(t,Date.now(),new Date(s.date)),St=await md({operation:ar.DESCRIBE_ALL}),St=await JSON.parse(St.body),Sn=We?.databaseConfig?.excludeDatabases,Sn=Sn?Sn.reduce((i,o)=>({...i,[o.database]:!0}),{}):{},pt.schemas)for(let i in pt.schemas)Object.keys(pt.schemas[i]).includes("tables")&&(Sn[i]=!0,console.info(`Excluding database '${i}' from clone because leader node has custom pathing configured for one or more of its tables`));ds=We?.databaseConfig?.excludeTables,ds=ds?ds.reduce((i,o)=>({...i,[o.database==null?null:o.database+o.table]:!0}),{}):{};for(let i in St){if(Sn[i]){St[i]="excluded";continue}if(Nb.isEmpty(St[i]))continue;let o=[],c=!1;for(let E in St[i])ds[i+E]?(c=!0,St[i][E]="excluded"):o.push(E);let l;c?(console.info(`Cloning database: ${i} tables: ${o}`),l={operation:ar.GET_BACKUP,database:i,tables:o}):(console.info(`Cloning database: ${i}`),l={operation:ar.GET_BACKUP,database:i});let _=Ya(i);await _p(_);let u=Es(_,i+".mdb"),d=up(u,{overwrite:!0}),f=await U$(l,d);await Ui.utimes(u,Date.now(),new Date(f.date))}}a(oEe,"cloneTables");async function aEe(){console.info("Cloning system database using fetch");let e={operation:ar.GET_BACKUP,database:"system"};Lo||(e.tables=bb);let t=await cp(e,!0),r=Ya("system");await _p(r);let n=Es(r,"system.mdb");if(await D$(t.body,up(n,{overwrite:!0})),await Ui.utimes(n,Date.now(),new Date(t.headers.get("date"))),St=await cp({operation:ar.DESCRIBE_ALL}),St=await St.json(),Sn=We?.databaseConfig?.excludeDatabases,Sn=Sn?Sn.reduce((s,i)=>({...s,[i.database]:!0}),{}):{},pt.schemas)for(let s in pt.schemas)Object.keys(pt.schemas[s]).includes("tables")&&(Sn[s]=!0,console.info(`Excluding database '${s}' from clone because leader node has custom pathing configured for one or more of its tables`));ds=We?.databaseConfig?.excludeTables,ds=ds?ds.reduce((s,i)=>({...s,[i.database==null?null:i.database+i.table]:!0}),{}):{};for(let s in St){if(Sn[s]){St[s]="excluded";continue}if(Nb.isEmpty(St[s]))continue;let i=[],o=!1;for(let f in St[s])ds[s+f]?(o=!0,St[s][f]="excluded"):i.push(f);if(i.length===0)return;let c;o?(console.info(`Cloning database: ${s} tables: ${i}`),c=await cp({operation:ar.GET_BACKUP,database:s,tables:i},!0)):(console.info(`Cloning database: ${s}`),c=await cp({operation:ar.GET_BACKUP,database:s},!0));let l=Ya(s);await _p(l);let _=new Date(c.headers.get("date")),u=Es(l,`${_.getTime()}-${s}.mdb`);await D$(c.body,up(u,{overwrite:!0}));let d=Es(l,s+".mdb");await Ui.rename(u,d),await Ui.utimes(d,Date.now(),_)}}a(aEe,"cloneTablesFetch");async function cp(e,t=!1){let r=We?.httpsRejectUnauthorized??!1,n=new lp.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(Ed+":"+hd).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(gl,{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(cp,"leaderHttpReqFetch");function Ya(e){return We?.databases&&We?.databases[e]?.path||We?.storage&&We?.storage?.path||Es(Rl,"database")}a(Ya,"getDbFileDir");async function cEe(){let{deployComponent:e}=Uh(),t=await md({operation:ar.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(We?.componentConfig?.exclude){for(let o of We.componentConfig.exclude)if(o?.name!=null&&o.name===s.name){i=!0;break}}i||r.push(s.name)}let n=We?.componentConfig?.skipNodeModules!==!1;for(let s of r){console.info("Cloning component: "+s);let i=await md({operation:ar.PACKAGE_COMPONENT,project:s,skip_node_modules:n}),{payload:o}=await JSON.parse(i.body);await e({payload:o,project:s})}}}a(cEe,"cloneComponents");async function lEe(e){if(!Ab)return;let t=await Vfe.getHDBProcessInfo();t.clustering.length===0||t.core.length===0?e?await jfe(!1):await H$():(console.info(await Yfe({operation:ar.RESTART})),await Rb.async_set_timeout(eEe)),console.info("Clustering cloned tables"),e&&await Rb.async_set_timeout(2e3);let r=We?.clusteringConfig?.subscribeToLeaderNode!==!1,n=We?.clusteringConfig?.publishToLeaderNode!==!1;await Wfe.setSchemaDataToGlobalAsync();let s=c_(),i=await md({operation:ar.CLUSTER_STATUS});i=await JSON.parse(i.body);let o=[],c=await Ui.stat(Es(Ya("system"),"system.mdb"));for(let _ of bb)o.push({schema:Jfe,table:_,subscribe:r,publish:n,start_time:c.mtime.toISOString()});for(let _ in St){if(St[_]==="excluded")continue;let u=await Ui.stat(Es(Ya(_),_+".mdb"));u.mtime.setSeconds(u.mtime.getSeconds()-10);for(let d in St[_])St[_][d]!=="excluded"&&o.push({schema:_,table:d,subscribe:r,publish:n,start_time:u.mtime.toISOString()})}await P$.createTableStreams(o),B$.info("Sending add_node request to node:",pt?.clustering?.nodeName,"with subscriptions:",o);let l;if(nEe==="true"&&i.connections.length>0){let _=th(),u=[{node_name:pt?.clustering?.nodeName,subscriptions:o}],d=!1;Al=v$.get(dp.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let f of i.connections){if(f.node_name===Al)continue;let E={node_name:f.node_name,subscriptions:[]};for(let h of f.subscriptions){if(Sn[h.schema]||ds[h.schema+h.table])continue;d=!0;let p=await Ui.stat(Es(Ya(h.schema),h.schema+".mdb"));p.mtime.setSeconds(p.mtime.getSeconds()-10),h.start_time=p.mtime.toISOString(),E.subscriptions.push(h)}u.push(E)}d&&(l=await _({operation:ar.CONFIGURE_CLUSTER,connections:u}),console.info(JSON.stringify(l)))}l||await s({operation:ar.ADD_NODE,node_name:pt?.clustering?.nodeName,subscriptions:o},!0),await P$.closeConnection()}a(lEe,"clusterTables");async function md(e){let t=new lp.Agent({rejectUnauthorized:We?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(Ed+":"+hd).toString("base64"),"Content-Type":"application/json"},s=new URL(gl),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 Rb.httpRequest(i,e)}a(md,"leaderHttpReq");async function U$(e,t){let r=new lp.Agent({rejectUnauthorized:We?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(Ed+":"+hd).toString("base64"),"Content-Type":"application/json"},i=new URL(gl),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:s};return i.protocol==="https:"&&(o.agent=r,L$=lp),i.port&&(o.port=i.port),new Promise((c,l)=>{let _=L$.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(U$,"leaderHttpStream")});var F$=g((tIe,x$)=>{var uEe=ip(),_Ee=G();x$.exports=dEe;async function dEe(){try{await uEe()}catch(e){console.error("There was an error during the install."),console.error(e),_Ee.error(e),process.exit(1)}}a(dEe,"install")});var $$=g((nIe,k$)=>{"use strict";var fEe=uh(),EEe=G(),G$="Registration failed.";async function hEe(){let e;try{e=await fEe.register()}catch(t){return EEe.error(`Registration error ${t}`),G$}return e||G$}a(hEe,"register");k$.exports={register:hEe}});var W$=g((iIe,K$)=>{"use strict";var wb=require("fs-extra"),Cb=require("path"),Ib=require("yaml"),pd=Et(),Sd=C(),V$=Je(),Lb=G(),mEe=Rr(),pEe=oh(),SEe=sh(),TEe=_i(),Y$=J(),{isHdbInstalled:gEe}=Va();Y$.initSync();var $n={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},xr={LEAF:"leaf server",HUB:"hub server"},fp;K$.exports=REe;async function REe(){let e={harperdb:{status:$n.STOPPED}};if(!await gEe()){e.harperdb.status=$n.NOT_INSTALLED,console.log(Ib.stringify(e));return}fp=Y$.get(Sd.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await wb.readFile(Cb.join(fp,Sd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Sd.NODE_ERROR_CODES.ENOENT){Lb.info("`harperdb status` did not find a hdb.pid file"),e.harperdb.status=$n.STOPPED,console.log(Ib.stringify(e));return}throw n}let r=await TEe.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 AEe(r),e.clustering[xr.HUB].status===$n.RUNNING&&e.clustering[xr.LEAF].status===$n.RUNNING){let n=[],s=await pEe({});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 SEe.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 pd.closeConnection()}console.log(Ib.stringify(e)),process.exit()}a(REe,"status");async function AEe(e){let t={[xr.HUB]:{},[xr.LEAF]:{}};if(e.clustering.length===0)return t[xr.HUB].status=$n.STOPPED,t[xr.LEAF].status=$n.STOPPED,t;let{port:r}=pd.getServerConfig(Sd.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:n,decrypt_hash:s}=await mEe.getClusterUser();try{(await pd.createConnection(r,n,s,!1)).close(),t[xr.HUB].status=$n.RUNNING}catch{t[xr.HUB].status=$n.ERRORED}let{port:i}=pd.getServerConfig(Sd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await pd.createConnection(i,n,s,!1)).close(),t[xr.LEAF].status=$n.RUNNING}catch{t[xr.LEAF].status=$n.ERRORED}try{t[xr.HUB].pid=Number.parseInt(await wb.readFile(Cb.join(fp,"clustering",V$.PID_FILES.HUB),"utf8"))}catch(o){Lb.error(o),t[xr.HUB].pid=void 0}try{t[xr.LEAF].pid=Number.parseInt(await wb.readFile(Cb.join(fp,"clustering",V$.PID_FILES.LEAF),"utf8"))}catch(o){Lb.error(o),t[xr.LEAF].pid=void 0}return t}a(AEe,"getHubLeafStatus")});var Wa=G(),OEe=xi(),Db=C(),Ep=require("fs"),Q$=require("path"),aIe=require("os"),{PACKAGE_ROOT:NEe}=C(),bEe=my(),cIe=(Hm(),ne(xN)),j$=sk(),{SERVICE_ACTIONS_ENUM:Fr}=Db;yEe();function yEe(){let e=bEe();if(e)if(e.error){console.error(e.error),Wa.error(e.error);return}else e.warn&&(console.warn(e.warn),Wa.warn(e.warn));let t;Ep.readdir(Q$.join(NEe,"bin"),r=>{if(r)return Wa.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let n=j$.buildRequest();n.operation&&(t=Fr.OPERATION);let s;switch(t){case Fr.OPERATION:Wa.trace("calling cli operations with:",n),j$.cliOperations(n).then();break;case Fr.DEV:process.env.DEV_MODE=!0;case Fr.RUN:let i=process.argv[3];i&&i[0]!=="-"&&(Ep.existsSync(i)||(console.error(`The folder ${i} does not exist`),process.exit(1)),Ep.statSync(i).isDirectory()||(console.error(`The path ${i} is not a folder`),process.exit(1)),Ep.existsSync(Q$.join(i,Db.HDB_CONFIG_FILE))?process.env.ROOTPATH=i:process.env.RUN_HDB_APP=i),Va().main();break;case Fr.START:process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL")?yb()(!0).catch(h=>{console.log(h)}):s=Va().launch();break;case Fr.INSTALL:F$()().then(()=>Va().main(!0)).catch(E=>{console.error(E)});break;case Fr.REGISTER:$$().register().then(E=>{console.log(E)}).catch(E=>{console.error(E)});break;case Fr.STOP:Tb()().then(()=>{process.exit(0)}).catch(E=>{console.error(E)});break;case Fr.RESTART:Ra().restart({}).then().catch(E=>{Wa.error(E),console.error(`There was an error restarting HarperDB. ${E}`),process.exit(1)});break;case Fr.VERSION:OEe.printVersion();break;case Fr.UPGRADE:Wa.setLogLevel(Db.LOG_LEVELS.INFO),Eb().upgrade(null).then(()=>{console.log("Your instance of HarperDB is up to date!")}).catch(E=>{Wa.error(`Got an error during upgrade ${E}`)});break;case Fr.STATUS:W$()().then().catch(E=>{console.error(E)});break;case Fr.RENEWCERTS:let{generateKeys:f}=Zm();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")?yb()().catch(h=>{console.log(h)}):Va().main();break;default:console.warn(`The "${t}" command is not understood.`);case Fr.HELP:console.log(`
102
105
  Usage: harperdb [command]
103
106
 
104
107
  With no command, harperdb will simply run HarperDB (in the foreground)
@@ -115,4 +118,4 @@ Commands:
115
118
  upgrade - Upgrade harperdb
116
119
  renew-certs - Generate a new set of self-signed certificates
117
120
  status - Print the status of HarperDB and clustering
118
- <api-operation> <parameter>=<value> - Run an API operation and return result to the CLI, not all operations are supported`)}})}a(IEe,"harperDBService");
121
+ <api-operation> <parameter>=<value> - Run an API operation and return result to the CLI, not all operations are supported`)}})}a(yEe,"harperDBService");