harperdb 4.3.0-beta.3 → 4.3.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,30 +1,30 @@
1
- "use strict";var Jx=Object.create;var za=Object.defineProperty;var Xx=Object.getOwnPropertyDescriptor;var jx=Object.getOwnPropertyNames;var Zx=Object.getPrototypeOf,eF=Object.prototype.hasOwnProperty;var a=(e,t)=>za(e,"name",{value:t,configurable:!0});var Oe=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ke=(e,t)=>{for(var r in t)za(e,r,{get:t[r],enumerable:!0})},OA=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of jx(t))!eF.call(e,s)&&s!==r&&za(e,s,{get:()=>t[s],enumerable:!(n=Xx(t,s))||n.enumerable});return e};var x=(e,t,r)=>(r=e!=null?Jx(Zx(e)):{},OA(t||!e||!e.__esModule?za(r,"default",{value:e,enumerable:!0}):r,e)),te=e=>OA(za({},"__esModule",{value:!0}),e);var yA=T((Lie,NA)=>{var tF=require("fast-glob"),{statSync:WE,existsSync:QE,readFileSync:rF,writeFileSync:nF}=require("fs"),{spawnSync:sF,spawn:iF,execFileSync:Die}=require("child_process"),{isMainThread:oF}=require("worker_threads"),{join:$s,relative:bA}=require("path"),{PACKAGE_ROOT:Sn}=U(),{tmpdir:aF,platform:cF}=require("os");require("source-map-support").install();var uF=["resources","server","dataLayer","components"],Ja="ts-build",zE,lF=__filename.endsWith("tsBuild.js");if(lF){if(oF){let r;try{WE($s(Sn,Ja)),r=!0}catch{}if(r)for(let n of tF.sync(uF.map(s=>s+"/**/*.ts"),{cwd:Sn})){let s=0,i=0;try{s=WE($s(Sn,n)).mtimeMs-5e3,i=WE($s(Sn,Ja,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."),zE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),zE=!0;if(zE){let n=$s(Sn,"node_modules/.bin/tsc");cF()==="win32"&&(n+=".cmd");let s=sF(n,{cwd:Sn});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=$s(aF(),"harperdb-tsc.pid"),o;if(QE(i))try{process.kill(+rF(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=iF(n,["--watch"],{cwd:Sn,detached:!0,stdio:"ignore"});nF(i,c.pid.toString()),c.unref()}}}}let e=NA.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(Sn)&&!n[0].includes("node_modules")){let i=bA(Sn,n[0]),o;i.startsWith(Ja)?o=$s(Sn,bA(Ja,i)):o=$s(Sn,Ja,i);let c=$s(o,r),u=c+".js";if(QE(u))return u;if(c.includes(".")&&QE(c))return c}return t(r,n,s)}}});var U=T((Pie,qA)=>{"use strict";var Jr=require("path"),_F=require("fs"),{relative:Mie,join:Uie}=Jr,{existsSync:dF}=_F;function fF(){let e=__dirname;for(;!dF(Jr.join(e,"package.json"));){let t=Jr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(fF,"getHDBPackageRoot");var Ys=fF(),wA="js",Cl=wA,EF="harperdb-config.yaml",hF="defaultConfig.yaml",mF="hdb",IA=`harperdb.${Cl}`,CA=`customFunctionsServer.${Cl}`,pF=`restartHdb.${Cl}`,XE="HarperDB",Il="Custom Functions",Dl="Clustering Hub",Ll="Clustering Leaf",SF="Clustering Ingest Service",TF="Clustering Reply Service",gF="foreground.pid",RF="hdb.pid",AF="data",OF={HDB:XE,CLUSTERING_HUB:Dl,CLUSTERING_LEAF:Ll,CLUSTERING_INGEST_SERVICE:SF,CLUSTERING_REPLY_SERVICE:TF,CUSTOM_FUNCTIONS:Il,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"},bF={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},NF={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},yF={harperdb:XE,"clustering hub":Dl,"clustering leaf":Ll,"custom functions":Il,custom_functions:Il,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},wF={CLUSTERING_HUB_PROC_DESCRIPTOR:Dl,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ll},JE={HDB:Jr.join(Ys,"server/harperdb"),CUSTOM_FUNCTIONS:Jr.join(Ys,"server/customFunctions"),CLUSTERING_HUB:Jr.join(Ys,"server/nats"),CLUSTERING_LEAF:Jr.join(Ys,"server/nats")},IF={HDB:Jr.join(JE.HDB,IA),CUSTOM_FUNCTIONS:Jr.join(JE.CUSTOM_FUNCTIONS,CA)},CF={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Jr.join(Ys,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Jr.join(Ys,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Jr.join(Ys,"launchServiceScripts/launchUpdateNodes4-0-0.js")},DF={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},DA="support@harperdb.io",LF="customer-success@harperdb.io",LA=1,MF=4141,MA="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",UF="https://www.harperdb.io/product",PF=`For support, please submit a request at ${MA} or contact ${DA}`,UA=`For license support, please contact ${LF}`,vF="None of the specified records were found.",BF="hash attribute not found",HF=`Your current license only supports ${LA} role. ${UA}`,xF="Your current license only supports 3 connections to a node.",FF="127.0.0.1",qF=1,GF=/^\.$/,kF=/^\.\.$/,VF="U+002E",$F=/\//g,YF="U+002F",KF=/U\+002F/g,WF=/^U\+002E$/,QF=/^U\+002EU\+002E$/,zF="d",JF=999999,XF="*",jF="--max-old-space-size=",ZF="system",eq="__hdb_hash",tq=".harperdb",rq=".hdb",nq="keys",sq="hdb_boot_properties.file",iq=".updateConfig.json",oq="SIGTSTP",aq=24,cq=6e4,uq=448,lq="blob",_q="trash",dq="database",fq="schema",Eq="transactions",hq=".count",mq="id",pq="PROCESS_NAME",PA={SETTINGS_PATH_KEY:"settings_path"},vA=require("lodash"),Sq={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"},Tq={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},gq={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Rq={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"},Aq={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"},Or="hdb_internal:",Oq={CREATE_SCHEMA:Or+"create_schema",CREATE_TABLE:Or+"create_table",CREATE_ATTRIBUTE:Or+"create_attribute",ADD_USER:Or+"add_user",ALTER_USER:Or+"alter_user",DROP_USER:Or+"drop_user",HDB_NODES:Or+"hdb_nodes",HDB_USERS:Or+"hdb_users",HDB_WORKERS:Or+"hdb_workers",CATCHUP:Or+"catchup",SCHEMA_CATCHUP:Or+"schema_catchup",WORKER_ROOM:Or+"cluster_workers"},bq={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"},Nq="060493.ks",yq=".license",wq={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"},Iq={CSV:".csv",JSON:".json"},Cq={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Dq={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Xa={};Xa[X.INSERT]=X.INSERT;Xa[X.UPDATE]=X.UPDATE;Xa[X.UPSERT]=X.UPSERT;Xa[X.DELETE]=X.DELETE;var Be=Object.create(null);Be[X.DESCRIBE_ALL]=X.DESCRIBE_ALL;Be[X.DESCRIBE_TABLE]=X.DESCRIBE_TABLE;Be[X.DESCRIBE_SCHEMA]=X.DESCRIBE_SCHEMA;Be[X.READ_LOG]=X.READ_LOG;Be[X.ADD_NODE]=X.ADD_NODE;Be[X.LIST_USERS]=X.LIST_USERS;Be[X.LIST_ROLES]=X.LIST_ROLES;Be[X.USER_INFO]=X.USER_INFO;Be[X.SQL]=X.SQL;Be[X.GET_JOB]=X.GET_JOB;Be[X.SEARCH_JOBS_BY_START_DATE]=X.SEARCH_JOBS_BY_START_DATE;Be[X.DELETE_FILES_BEFORE]=X.DELETE_FILES_BEFORE;Be[X.EXPORT_LOCAL]=X.EXPORT_LOCAL;Be[X.EXPORT_TO_S3]=X.EXPORT_TO_S3;Be[X.CLUSTER_STATUS]=X.CLUSTER_STATUS;Be[X.REMOVE_NODE]=X.REMOVE_NODE;Be[X.RESTART]=X.RESTART;Be[X.CUSTOM_FUNCTIONS_STATUS]=X.CUSTOM_FUNCTIONS_STATUS;Be[X.GET_CUSTOM_FUNCTIONS]=X.GET_CUSTOM_FUNCTIONS;Be[X.GET_CUSTOM_FUNCTION]=X.GET_CUSTOM_FUNCTION;Be[X.SET_CUSTOM_FUNCTION]=X.SET_CUSTOM_FUNCTION;Be[X.DROP_CUSTOM_FUNCTION]=X.DROP_CUSTOM_FUNCTION;Be[X.ADD_CUSTOM_FUNCTION_PROJECT]=X.ADD_CUSTOM_FUNCTION_PROJECT;Be[X.DROP_CUSTOM_FUNCTION_PROJECT]=X.DROP_CUSTOM_FUNCTION_PROJECT;Be[X.PACKAGE_CUSTOM_FUNCTION_PROJECT]=X.PACKAGE_CUSTOM_FUNCTION_PROJECT;Be[X.DEPLOY_CUSTOM_FUNCTION_PROJECT]=X.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Lq={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"},Mq={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},BA={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"},Uq=vA.invert(BA),Pq={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"},C={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"},HA={settings_path:PA.SETTINGS_PATH_KEY,hdb_root_key:C.ROOTPATH,hdb_root:C.ROOTPATH,rootpath:C.ROOTPATH,server_port_key:C.OPERATIONSAPI_NETWORK_PORT,server_port:C.OPERATIONSAPI_NETWORK_PORT,cert_key:C.TLS_CERTIFICATE,certificate:C.TLS_CERTIFICATE,private_key_key:C.TLS_PRIVATEKEY,private_key:C.TLS_PRIVATEKEY,http_secure_enabled_key:C.OPERATIONSAPI_NETWORK_HTTPS,https_on:C.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:C.OPERATIONSAPI_NETWORK_CORS,cors_on:C.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:C.LOGGING_LEVEL,log_level:C.LOGGING_LEVEL,log_path_key:C.LOGGING_ROOT,log_path:C.LOGGING_ROOT,clustering_node_name_key:C.CLUSTERING_NODENAME,node_name:C.CLUSTERING_NODENAME,clustering_enabled_key:C.CLUSTERING_ENABLED,clustering:C.CLUSTERING_ENABLED,max_http_threads:C.THREADS,max_hdb_processes:C.THREADS,server_timeout_key:C.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:C.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:C.LOGGING_AUDITLOG,disable_transaction_log:C.LOGGING_AUDITLOG,operation_token_timeout_key:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:C.HTTP_PORT,custom_functions_port:C.HTTP_PORT,custom_functions_directory_key:C.COMPONENTSROOT,custom_functions_directory:C.COMPONENTSROOT,max_custom_function_processes:C.THREADS,log_to_file:C.LOGGING_FILE,log_to_stdstreams:C.LOGGING_STDSTREAMS,local_studio_on:C.LOCALSTUDIO_ENABLED,clustering_port:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:C.CLUSTERING_USER,clustering_enabled:C.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:C.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:C.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:C.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:C.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:C.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:C.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:C.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:C.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:C.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:C.CLUSTERING_NODENAME,clustering_tls_certificate:C.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:C.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:C.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:C.CLUSTERING_TLS_INSECURE,clustering_tls_verify:C.CLUSTERING_TLS_VERIFY,clustering_loglevel:C.CLUSTERING_LOGLEVEL,clustering_republishmessages:C.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:C.CLUSTERING_DATABASELEVEL,customfunctions_network_port:C.HTTP_PORT,customfunctions_tls_certificate:C.TLS_CERTIFICATE,customfunctions_network_cors:C.HTTP_CORS,customfunctions_network_corsaccesslist:C.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:C.HTTP_HEADERSTIMEOUT,customfunctions_network_https:C.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:C.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:C.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:C.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:C.HTTP_TIMEOUT,http_threads:C.THREADS,threads:C.THREADS,maxheapmemory:C.MAXHEAPMEMORY,http_session_affinity:C.HTTP_SESSIONAFFINITY,http_compressionthreshold:C.HTTP_COMPRESSIONTHRESHOLD,http_cors:C.HTTP_CORS,http_corsaccesslist:C.HTTP_CORSACCESSLIST,http_headerstimeout:C.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:C.HTTP_KEEPALIVETIMEOUT,http_timeout:C.HTTP_TIMEOUT,http_port:C.HTTP_PORT,http_secureport:C.HTTP_SECUREPORT,http_mtls:C.HTTP_MTLS,http_mtls_user:C.HTTP_MTLS_USER,http_mtls_required:C.HTTP_MTLS_REQUIRED,customfunctions_processes:C.THREADS,customfunctions_root:C.COMPONENTSROOT,localstudio_enabled:C.LOCALSTUDIO_ENABLED,logging_file:C.LOGGING_FILE,logging_level:C.LOGGING_LEVEL,logging_root:C.LOGGING_ROOT,logging_rotation_enabled:C.LOGGING_ROTATION_ENABLED,logging_rotation_compress:C.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:C.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:C.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:C.LOGGING_ROTATION_PATH,logging_stdstreams:C.LOGGING_STDSTREAMS,logging_auditlog:C.LOGGING_AUDITLOG,logging_auditretention:C.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:C.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:C.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:C.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:C.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:C.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:C.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:C.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:C.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:C.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:C.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:C.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:C.ROOTPATH,databases:C.DATABASES,storage_path:C.STORAGE_PATH,ignorescripts:C.IGNORE_SCRIPTS,mqtt_network_port:C.MQTT_NETWORK_PORT,mqtt_websocket:C.MQTT_WEBSOCKET,mqtt_network_secureport:C.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:C.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:C.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:C.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:C.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:C.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:C.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:C.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:C.AUTHENTICATION_CACHETTL,authentication_enablesessions:C.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:C.COMPONENTSROOT,tls_certificate:C.TLS_CERTIFICATE,tls_privatekey:C.TLS_PRIVATEKEY,tls_certificateauthority:C.TLS_CERTIFICATEAUTHORITY,tls_ciphers:C.TLS_CIPHERS};for(let e in C){let t=C[e];HA[t.toLowerCase()]=t}var vq={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},Bq={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"},Hq={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"},xq={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Fq={VERSION_DEFAULT:"2.2.0"},qq={DEVELOPMENT:8192,DEFAULT:512},Gq={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"},kq={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"},Vq={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},xA={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},$q=Symbol("metadata"),Yq="__clustering__",Kq=Object.values(xA),Wq=15984864e5,FA={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Qq=vA.invert(FA),zq={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"},Jq=111,Xq=`\r
2
- `,jq={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Zq=["*","%"],eG="unauthorized_access",tG="func_val",rG={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},nG={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},sG={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"},iG={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},oG={HTTP:"http"},aG={STOPPED:"stopped",ONLINE:"online"},cG="3.x.x",uG={SUCCESS:"success",FAILURE:"failure"},lG={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};qA.exports={LOCAL_HARPERDB_OPERATIONS:Be,HDB_SUPPORT_ADDRESS:DA,HDB_SUPPORT_URL:MA,HDB_PRICING_URL:UF,SUPPORT_HELP_MSG:PF,LICENSE_HELP_MSG:UA,HDB_PROC_NAME:IA,HDB_PROC_DESCRIPTOR:XE,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ll,CLUSTERING_HUB_PROC_DESCRIPTOR:Dl,SYSTEM_SCHEMA_NAME:ZF,HASH_FOLDER_NAME:eq,HDB_HOME_DIR_NAME:tq,UPDATE_FILE_NAME:iq,LICENSE_KEY_DIR_NAME:nq,BOOT_PROPS_FILE_NAME:sq,JOB_TYPE_ENUM:Bq,JOB_STATUS_ENUM:wq,SYSTEM_TABLE_NAMES:Rq,SYSTEM_TABLE_HASH_ATTRIBUTES:Aq,OPERATIONS_ENUM:X,VALID_S3_FILE_TYPES:Iq,S3_BUCKET_AUTH_KEYS:Cq,VALID_SQL_OPS_ENUM:Dq,GEO_CONVERSION_ENUM:Mq,HDB_SETTINGS_NAMES:BA,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Uq,SERVICE_ACTIONS_ENUM:Lq,CLUSTER_MESSAGE_TYPE_ENUM:Hq,CLUSTER_CONNECTION_DIRECTION_ENUM:xq,CLUSTER_EVENTS_DEFS_ENUM:Gq,PERIOD_REGEX:GF,DOUBLE_PERIOD_REGEX:kF,UNICODE_PERIOD:VF,FORWARD_SLASH_REGEX:$F,UNICODE_FORWARD_SLASH:YF,ESCAPED_FORWARD_SLASH_REGEX:KF,ESCAPED_PERIOD_REGEX:WF,ESCAPED_DOUBLE_PERIOD_REGEX:QF,REG_KEY_FILE_NAME:Nq,RESTART_TIMEOUT_MS:cq,HDB_FILE_PERMISSIONS:uq,DATABASES_DIR_NAME:dq,LEGACY_DATABASES_DIR_NAME:fq,TRANSACTIONS_DIR_NAME:Eq,LIMIT_COUNT_NAME:hq,ID_ATTRIBUTE_STRING:mq,INSERT_MODULE_ENUM:Tq,UPGRADE_JSON_FIELD_NAMES_ENUM:gq,RESTART_CODE:oq,RESTART_CODE_NUM:aq,CLUSTER_OPERATIONS:Xa,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:bq,HDB_INTERNAL_SC_CHANNEL_PREFIX:Or,INTERNAL_SC_CHANNELS:Oq,CLUSTERING_MESSAGE_TYPES:zq,HDB_FILE_SUFFIX:rq,BLOB_FOLDER_NAME:lq,HDB_TRASH_DIR:_q,ORIGINATOR_SET_VALUE:Jq,LICENSE_VALUES:Fq,RAM_ALLOCATION_ENUM:qq,TIME_STAMP_NAMES_ENUM:xA,TIME_STAMP_NAMES:Kq,PERMS_UPDATE_RELEASE_TIMESTAMP:Wq,SEARCH_NOT_FOUND_MESSAGE:vF,SEARCH_ATTRIBUTE_NOT_FOUND:BF,LICENSE_ROLE_DENIED_RESPONSE:HF,LICENSE_MAX_CONNS_REACHED:xF,BASIC_LICENSE_MAX_NON_CU_ROLES:LA,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:MF,VALUE_SEARCH_COMPARATORS:FA,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Qq,LICENSE_FILE_NAME:yq,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:kq,NEW_LINE:Xq,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:qF,MOMENT_DAYS_TAG:zF,API_TURNOVER_SEC:JF,LOOPBACK:FF,CODE_EXTENSION:Cl,WILDCARD_SEARCH_VALUE:XF,NODE_ERROR_CODES:Vq,JAVASCRIPT_EXTENSION:wA,PERMS_CRUD_ENUM:jq,UNAUTHORIZED_PERMISSION_NAME:eG,SEARCH_WILDCARDS:Zq,FUNC_VAL:tG,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:rG,JWT_ENUM:nG,CLUSTERING_FLAG:Yq,ITC_EVENT_TYPES:sG,CUSTOM_FUNCTION_PROC_NAME:CA,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Il,SERVICES:iG,THREAD_TYPES:oG,MEM_SETTING_KEY:jF,HDB_RESTART_SCRIPT:pF,PROCESS_DESCRIPTORS:OF,SERVICE_SERVERS:IF,SERVICE_SERVERS_CWD:JE,PROCESS_DESCRIPTORS_VALIDATE:yF,LAUNCH_SERVICE_SCRIPTS:CF,LOG_LEVELS:NF,PROCESS_NAME_ENV_PROP:pq,LOG_NAMES:bF,PM2_PROCESS_STATUSES:aG,CONFIG_PARAM_MAP:HA,CONFIG_PARAMS:C,HDB_CONFIG_FILE:EF,HDB_DEFAULT_CONFIG_FILE:hF,ROLE_TYPES_ENUM:DF,BOOT_PROP_PARAMS:PA,INSTALL_PROMPTS:Sq,HDB_ROOT_DIR_NAME:mF,CLUSTERING_PROCESSES:wF,FOREGROUND_PID_FILE:gF,PACKAGE_ROOT:Ys,PRE_4_0_0_VERSION:cG,DATABASES_PARAM_CONFIG:vq,METADATA_PROPERTY:$q,AUTH_AUDIT_STATUS:uG,AUTH_AUDIT_TYPES:lG,HDB_PID_FILE:RF,DEFAULT_DATABASE_NAME:AF,LEGACY_CONFIG_PARAMS:Pq};yA()});var jE=T((Bie,VA)=>{"use strict";var GA=require("minimist");VA.exports=_G;function _G(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=kA(process.env),n=kA(GA(process.argv))):(r=process.env,n=GA(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(_G,"assignCMDENVVariables");function kA(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(kA,"objKeysToLowerCase")});var W=T((xie,ih)=>{"use strict";var Ni=require("fs-extra"),{workerData:dG,threadId:fG}=require("worker_threads"),_s=require("path"),KA=require("yaml"),WA=require("properties-reader"),Tt=U(),$A=jE(),EG=require("os"),{PACKAGE_ROOT:eh}=U(),{_assignPackageExport:hG}=require("../../index"),Za={};for(let e in console)Za[e]||(Za[e]=console[e]);var Jt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},QA={STDOUT:"stdOut",STDERR:"stdErr"},mG=_s.join(eh,"logs"),pG=_s.join(eh,"config/yaml/",Tt.HDB_DEFAULT_CONFIG_FILE),SG=1e4,ls,qn,zt,Ml,Ul,ec,Mo,ja;ja===void 0&&zA();ih.exports={notify:jA,fatal:ZA,error:tc,warn:sh,info:Pl,debug:nh,trace:rh,setLogLevel:NG,log_level:zt,loggerWithTag:TG,suppressLogging:gG,initLogSettings:zA,setupConsoleLogging:JA,logCustomLevel:OG,closeLogFile:th,getLogFilePath:()=>ec,OUTPUTS:QA,AuthAuditLog:IG};hG("logger",ih.exports);function zA(e=!1){try{if(ja===void 0||e){th();let t=bG(),r=$A(["ROOTPATH"]);try{ja=WA(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Ni.pathExistsSync(_s.join(r.ROOTPATH,Tt.HDB_CONFIG_FILE)))throw n}({level:zt,config_log_path:Ul,to_file:ls,to_stream:qn}=yG(r.ROOTPATH?_s.join(r.ROOTPATH,Tt.HDB_CONFIG_FILE):ja.get("settings_path"))),Ml=Tt.LOG_NAMES.HDB,ec=_s.join(Ul,Ml)}}catch(t){if(ja=void 0,t.code===Tt.NODE_ERROR_CODES.ENOENT){let r=$A(Object.keys(Tt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Tt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===Tt.CONFIG_PARAMS.LOGGING_LEVEL){zt=u;continue}if(c===Tt.CONFIG_PARAMS.LOGGING_STDSTREAMS){qn=u;continue}c===Tt.CONFIG_PARAMS.LOGGING_FILE&&(ls=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=wG();ls=ls===void 0?s:ls,ls=YA(ls),qn=qn===void 0?i:qn,qn=YA(qn),zt=zt===void 0?n:zt,Ul=mG,Ml=Tt.LOG_NAMES.INSTALL,ec=_s.join(Ul,Ml);return}throw tc("Error initializing log settings"),tc(t),t}process.env.DEV_MODE&&(qn=!0),JA()}a(zA,"initLogSettings");var ZE=!0;function JA(){Lo("error",tc),Lo("warn",sh),Lo("log",Pl),Lo("info",Pl),Lo("debug",nh),Lo("trace",rh)}a(JA,"setupConsoleLogging");function Lo(e,t){console[e]=function(...r){if(ZE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Za[e](...r)}}a(Lo,"logConsole");function TG(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(jA),fatal:r(ZA),error:r(tc),warn:r(sh),info:r(Pl),debug:r(nh),trace:r(rh)};function r(n){return function(...s){return n(t,...s)}}}a(TG,"loggerWithTag");function gG(e){try{ZE=!1,e()}finally{ZE=!0}}a(gG,"suppressLogging");var RG=dG?.name?.replace(/ /g,"-")||"main";function ds(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||RG+"/"+fG);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}
3
- `}a(ds,"createLogRecord");function rc(e){ls&&XA(e),qn&&process.stdout.write(e)}a(rc,"logStdOut");function vl(e){ls&&XA(e),qn&&process.stderr.write(e)}a(vl,"logStdErr");function XA(e){AG(),Mo?Ni.appendFileSync(Mo,e):Za.log(e)}a(XA,"logToFile");function th(){try{Ni.closeSync(Mo)}catch{}Mo=null}a(th,"closeLogFile");function AG(){if(!Mo){try{if(!ec)debugger;Mo=Ni.openSync(ec,"a")}catch(e){Za.error(e)}setTimeout(()=>{th()},SG).unref()}}a(AG,"openLogFile");function Pl(...e){Jt[zt]<=Jt.info&&rc(ds("info",e))}a(Pl,"info");function rh(...e){Jt[zt]<=Jt.trace&&rc(ds("trace",e))}a(rh,"trace");function tc(...e){Jt[zt]<=Jt.error&&vl(ds("error",e))}a(tc,"error");function nh(...e){Jt[zt]<=Jt.debug&&rc(ds("debug",e))}a(nh,"debug");function jA(...e){Jt[zt]<=Jt.notify&&rc(ds("notify",e))}a(jA,"notify");function ZA(...e){Jt[zt]<=Jt.fatal&&vl(ds("fatal",e))}a(ZA,"fatal");function sh(...e){Jt[zt]<=Jt.warn&&vl(ds("warn",e))}a(sh,"warn");function OG(e,t,...r){t===QA.STDERR?vl(ds(e,r)):rc(ds(e,r))}a(OG,"logCustomLevel");function bG(){let e;try{e=EG.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=_s.join(e,Tt.HDB_HOME_DIR_NAME,Tt.BOOT_PROPS_FILE_NAME);return Ni.existsSync(t)||(t=_s.join(eh,"utility/hdb_boot_properties.file")),t}a(bG,"getPropsFilePath");function NG(e){zt=e}a(NG,"setLogLevel");function YA(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(YA,"autoCastBoolean");function yG(e){try{if(e.includes("config/settings.js")){let o=WA(e);return{level:o.get(Tt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:_s.dirname(o.get(Tt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Tt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Tt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=KA.parseDocument(Ni.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===Tt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(yG,"getLogConfig");function wG(){try{let e=KA.parseDocument(Ni.readFileSync(pG,"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(wG,"getDefaultConfig");function IG(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(IG,"AuthAuditLog")});var tO=T((qie,eO)=>{"use strict";var CG=require("util"),DG=require("path"),LG=require("child_process"),MG=CG.promisify(LG.execFile),UG=1e3*1e3*10;eO.exports={findPs:PG};async function PG(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await MG("ps",["wwxo",`pid,${r}`],{maxBuffer:UG});for(let s of n.trim().split(`
4
- `).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:DG.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(PG,"findPs")});var lt=T((kie,nO)=>{"use strict";var vG="__dbis__",BG="__txns__",HG="__environment_name__",xG="__dbi_defintion__",FG={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"},qG=["__createdtime__","__updatedtime__"],GG="\uFFFF",rO={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},kG=Object.values(rO);nO.exports={AUDIT_STORE_NAME:BG,INTERNAL_DBIS_NAME:vG,DBI_DEFINITION_NAME:xG,SEARCH_TYPES:FG,TIMESTAMP_NAMES:qG,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:HG,TRANSACTIONS_DBI_NAMES_ENUM:rO,TRANSACTIONS_DBIS:kG,OVERFLOW_MARKER:GG}});var br=T((Vie,dO)=>{"use strict";var sO=U(),iO=lt(),oO={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},aO=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),cO={500:aO("There was an error processing your request."),400:"Invalid request"},VG=cO[oO.INTERNAL_SERVER_ERROR],$G={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.`},YG={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},KG={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"},WG={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 ${iO.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${iO.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"},QG={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${sO.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 ${sO.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"},uO={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"},zG={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."},JG={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`},XG={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"},jG={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},ZG={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`},lO={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.`},_O={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}`},ek={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."},tk={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},rk={...uO,...KG,...$G,...zG,...JG,...XG,...jG,...ZG,...QG,...lO,..._O,...ek,...tk,...YG};dO.exports={CHECK_LOGS_WRAPPER:aO,HDB_ERROR_MSGS:rk,DEFAULT_ERROR_MSGS:cO,DEFAULT_ERROR_RESP:VG,HTTP_STATUS_CODES:oO,LMDB_ERRORS_ENUM:WG,AUTHENTICATION_ERROR_MSGS:uO,VALIDATION_ERROR_MSGS:lO,ITC_ERRORS:_O}});var ee=T((Yie,hO)=>{"use strict";var Uo=br(),nk=W(),sk=U(),Bl=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,fO),this.statusCode=n||Uo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Uo.DEFAULT_ERROR_MSGS[n]?Uo.DEFAULT_ERROR_MSGS[n]:Uo.DEFAULT_ERROR_MSGS[Uo.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&&nk[s](i)}},oh=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}},ah=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function fO(e,t,r,n=sk.LOG_LEVELS.ERROR,s=null,i=!1){if(EO(e))return e;let o=new Bl(e,t,r,n,s);return i&&delete o.stack,o}a(fO,"handleHDBError");function EO(e){return e.__proto__.constructor.name===Bl.name}a(EO,"isHDBError");hO.exports={isHDBError:EO,handleHDBError:fO,ClientError:oh,ServerError:ah,hdb_errors:Uo}});var pO=T((Wie,mO)=>{"use strict";var ik={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
1
+ "use strict";var Zx=Object.create;var Xa=Object.defineProperty;var eF=Object.getOwnPropertyDescriptor;var tF=Object.getOwnPropertyNames;var rF=Object.getPrototypeOf,nF=Object.prototype.hasOwnProperty;var a=(e,t)=>Xa(e,"name",{value:t,configurable:!0});var Re=(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)Xa(e,r,{get:t[r],enumerable:!0})},wA=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of tF(t))!nF.call(e,s)&&s!==r&&Xa(e,s,{get:()=>t[s],enumerable:!(n=eF(t,s))||n.enumerable});return e};var x=(e,t,r)=>(r=e!=null?Zx(rF(e)):{},wA(t||!e||!e.__esModule?Xa(r,"default",{value:e,enumerable:!0}):r,e)),ne=e=>wA(Xa({},"__esModule",{value:!0}),e);var DA=T((vie,CA)=>{var sF=require("fast-glob"),{statSync:QE,existsSync:zE,readFileSync:iF,writeFileSync:oF}=require("fs"),{spawnSync:aF,spawn:cF,execFileSync:Pie}=require("child_process"),{isMainThread:uF}=require("worker_threads"),{join:Ys,relative:IA}=require("path"),{PACKAGE_ROOT:Tn}=M(),{tmpdir:lF,platform:_F}=require("os");require("source-map-support").install();var dF=["resources","server","dataLayer","components"],ja="ts-build",JE,fF=__filename.endsWith("tsBuild.js");if(fF){if(uF){let r;try{QE(Ys(Tn,ja)),r=!0}catch{}if(r)for(let n of sF.sync(dF.map(s=>s+"/**/*.ts"),{cwd:Tn})){let s=0,i=0;try{s=QE(Ys(Tn,n)).mtimeMs-5e3,i=QE(Ys(Tn,ja,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."),JE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),JE=!0;if(JE){let n=Ys(Tn,"node_modules/.bin/tsc");_F()==="win32"&&(n+=".cmd");let s=aF(n,{cwd:Tn});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=Ys(lF(),"harperdb-tsc.pid"),o;if(zE(i))try{process.kill(+iF(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=cF(n,["--watch"],{cwd:Tn,detached:!0,stdio:"ignore"});oF(i,c.pid.toString()),c.unref()}}}}let e=CA.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(Tn)&&!n[0].includes("node_modules")){let i=IA(Tn,n[0]),o;i.startsWith(ja)?o=Ys(Tn,IA(ja,i)):o=Ys(Tn,ja,i);let c=Ys(o,r),u=c+".js";if(zE(u))return u;if(c.includes(".")&&zE(c))return c}return t(r,n,s)}}});var M=T((xie,$A)=>{"use strict";var Xr=require("path"),EF=require("fs"),{relative:Bie,join:Hie}=Xr,{existsSync:hF}=EF;function mF(){let e=__dirname;for(;!hF(Xr.join(e,"package.json"));){let t=Xr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(mF,"getHDBPackageRoot");var Ks=mF(),LA="js",Ll=LA,pF="harperdb-config.yaml",SF="defaultConfig.yaml",TF="hdb",UA=`harperdb.${Ll}`,MA=`customFunctionsServer.${Ll}`,gF=`restartHdb.${Ll}`,jE="HarperDB",Dl="Custom Functions",Ul="Clustering Hub",Ml="Clustering Leaf",RF="Clustering Ingest Service",AF="Clustering Reply Service",OF="foreground.pid",bF="hdb.pid",NF="data",yF={HDB:jE,CLUSTERING_HUB:Ul,CLUSTERING_LEAF:Ml,CLUSTERING_INGEST_SERVICE:RF,CLUSTERING_REPLY_SERVICE:AF,CUSTOM_FUNCTIONS:Dl,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"},wF={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},IF={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},CF={harperdb:jE,"clustering hub":Ul,"clustering leaf":Ml,"custom functions":Dl,custom_functions:Dl,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},DF={CLUSTERING_HUB_PROC_DESCRIPTOR:Ul,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ml},XE={HDB:Xr.join(Ks,"server/harperdb"),CUSTOM_FUNCTIONS:Xr.join(Ks,"server/customFunctions"),CLUSTERING_HUB:Xr.join(Ks,"server/nats"),CLUSTERING_LEAF:Xr.join(Ks,"server/nats")},LF={HDB:Xr.join(XE.HDB,UA),CUSTOM_FUNCTIONS:Xr.join(XE.CUSTOM_FUNCTIONS,MA)},UF={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Xr.join(Ks,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Xr.join(Ks,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Xr.join(Ks,"launchServiceScripts/launchUpdateNodes4-0-0.js")},MF={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},PA="support@harperdb.io",PF="customer-success@harperdb.io",vA=1,vF=4141,BA="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",BF="https://www.harperdb.io/product",HF=`For support, please submit a request at ${BA} or contact ${PA}`,HA=`For license support, please contact ${PF}`,xF="None of the specified records were found.",FF="hash attribute not found",qF=`Your current license only supports ${vA} role. ${HA}`,GF="Your current license only supports 3 connections to a node.",kF="127.0.0.1",VF=1,$F=/^\.$/,YF=/^\.\.$/,KF="U+002E",WF=/\//g,QF="U+002F",zF=/U\+002F/g,JF=/^U\+002E$/,XF=/^U\+002EU\+002E$/,jF="d",ZF=999999,eq="*",tq="--max-old-space-size=",rq="system",nq="__hdb_hash",sq=".harperdb",iq=".hdb",oq="keys",aq="hdb_boot_properties.file",cq=".updateConfig.json",uq="SIGTSTP",lq=24,_q=6e4,dq=448,fq="blob",Eq="trash",hq="database",mq="schema",pq="transactions",Sq=".count",Tq="id",gq="PROCESS_NAME",xA={SETTINGS_PATH_KEY:"settings_path"},FA=require("lodash"),Rq={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"},Aq={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},Oq={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},bq={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"},Nq={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"},Ar="hdb_internal:",yq={CREATE_SCHEMA:Ar+"create_schema",CREATE_TABLE:Ar+"create_table",CREATE_ATTRIBUTE:Ar+"create_attribute",ADD_USER:Ar+"add_user",ALTER_USER:Ar+"alter_user",DROP_USER:Ar+"drop_user",HDB_NODES:Ar+"hdb_nodes",HDB_USERS:Ar+"hdb_users",HDB_WORKERS:Ar+"hdb_workers",CATCHUP:Ar+"catchup",SCHEMA_CATCHUP:Ar+"schema_catchup",WORKER_ROOM:Ar+"cluster_workers"},wq={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"},Iq="060493.ks",Cq=".license",Dq={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},j={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"},Lq={CSV:".csv",JSON:".json"},Uq={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Mq={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Za={};Za[j.INSERT]=j.INSERT;Za[j.UPDATE]=j.UPDATE;Za[j.UPSERT]=j.UPSERT;Za[j.DELETE]=j.DELETE;var Be=Object.create(null);Be[j.DESCRIBE_ALL]=j.DESCRIBE_ALL;Be[j.DESCRIBE_TABLE]=j.DESCRIBE_TABLE;Be[j.DESCRIBE_SCHEMA]=j.DESCRIBE_SCHEMA;Be[j.READ_LOG]=j.READ_LOG;Be[j.ADD_NODE]=j.ADD_NODE;Be[j.LIST_USERS]=j.LIST_USERS;Be[j.LIST_ROLES]=j.LIST_ROLES;Be[j.USER_INFO]=j.USER_INFO;Be[j.SQL]=j.SQL;Be[j.GET_JOB]=j.GET_JOB;Be[j.SEARCH_JOBS_BY_START_DATE]=j.SEARCH_JOBS_BY_START_DATE;Be[j.DELETE_FILES_BEFORE]=j.DELETE_FILES_BEFORE;Be[j.EXPORT_LOCAL]=j.EXPORT_LOCAL;Be[j.EXPORT_TO_S3]=j.EXPORT_TO_S3;Be[j.CLUSTER_STATUS]=j.CLUSTER_STATUS;Be[j.REMOVE_NODE]=j.REMOVE_NODE;Be[j.RESTART]=j.RESTART;Be[j.CUSTOM_FUNCTIONS_STATUS]=j.CUSTOM_FUNCTIONS_STATUS;Be[j.GET_CUSTOM_FUNCTIONS]=j.GET_CUSTOM_FUNCTIONS;Be[j.GET_CUSTOM_FUNCTION]=j.GET_CUSTOM_FUNCTION;Be[j.SET_CUSTOM_FUNCTION]=j.SET_CUSTOM_FUNCTION;Be[j.DROP_CUSTOM_FUNCTION]=j.DROP_CUSTOM_FUNCTION;Be[j.ADD_CUSTOM_FUNCTION_PROJECT]=j.ADD_CUSTOM_FUNCTION_PROJECT;Be[j.DROP_CUSTOM_FUNCTION_PROJECT]=j.DROP_CUSTOM_FUNCTION_PROJECT;Be[j.PACKAGE_CUSTOM_FUNCTION_PROJECT]=j.PACKAGE_CUSTOM_FUNCTION_PROJECT;Be[j.DEPLOY_CUSTOM_FUNCTION_PROJECT]=j.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Pq={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"},vq={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},qA={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"},Bq=FA.invert(qA),Hq={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},I={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers"},GA={settings_path:xA.SETTINGS_PATH_KEY,hdb_root_key:I.ROOTPATH,hdb_root:I.ROOTPATH,rootpath:I.ROOTPATH,server_port_key:I.OPERATIONSAPI_NETWORK_PORT,server_port:I.OPERATIONSAPI_NETWORK_PORT,cert_key:I.TLS_CERTIFICATE,certificate:I.TLS_CERTIFICATE,private_key_key:I.TLS_PRIVATEKEY,private_key:I.TLS_PRIVATEKEY,http_secure_enabled_key:I.OPERATIONSAPI_NETWORK_HTTPS,https_on:I.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:I.OPERATIONSAPI_NETWORK_CORS,cors_on:I.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:I.LOGGING_LEVEL,log_level:I.LOGGING_LEVEL,log_path_key:I.LOGGING_ROOT,log_path:I.LOGGING_ROOT,clustering_node_name_key:I.CLUSTERING_NODENAME,node_name:I.CLUSTERING_NODENAME,clustering_enabled_key:I.CLUSTERING_ENABLED,clustering:I.CLUSTERING_ENABLED,max_http_threads:I.THREADS_COUNT,max_hdb_processes:I.THREADS_COUNT,server_timeout_key:I.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:I.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:I.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:I.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:I.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:I.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:I.LOGGING_AUDITLOG,disable_transaction_log:I.LOGGING_AUDITLOG,operation_token_timeout_key:I.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:I.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:I.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:I.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:I.HTTP_PORT,custom_functions_port:I.HTTP_PORT,custom_functions_directory_key:I.COMPONENTSROOT,custom_functions_directory:I.COMPONENTSROOT,max_custom_function_processes:I.THREADS_COUNT,log_to_file:I.LOGGING_FILE,log_to_stdstreams:I.LOGGING_STDSTREAMS,local_studio_on:I.LOCALSTUDIO_ENABLED,clustering_port:I.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:I.CLUSTERING_USER,clustering_enabled:I.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:I.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:I.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:I.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:I.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:I.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:I.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:I.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:I.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:I.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:I.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:I.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:I.CLUSTERING_NODENAME,clustering_tls_certificate:I.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:I.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:I.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:I.CLUSTERING_TLS_INSECURE,clustering_tls_verify:I.CLUSTERING_TLS_VERIFY,clustering_loglevel:I.CLUSTERING_LOGLEVEL,clustering_republishmessages:I.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:I.CLUSTERING_DATABASELEVEL,customfunctions_network_port:I.HTTP_PORT,customfunctions_tls_certificate:I.TLS_CERTIFICATE,customfunctions_network_cors:I.HTTP_CORS,customfunctions_network_corsaccesslist:I.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:I.HTTP_HEADERSTIMEOUT,customfunctions_network_https:I.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:I.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:I.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:I.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:I.HTTP_TIMEOUT,http_threads:I.THREADS_COUNT,threads:I.THREADS_COUNT,threads_count:I.THREADS_COUNT,threads_debug:I.THREADS_DEBUG,threads_maxheapmemory:I.THREADS_MAXHEAPMEMORY,http_session_affinity:I.HTTP_SESSIONAFFINITY,http_compressionthreshold:I.HTTP_COMPRESSIONTHRESHOLD,http_cors:I.HTTP_CORS,http_corsaccesslist:I.HTTP_CORSACCESSLIST,http_headerstimeout:I.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:I.HTTP_KEEPALIVETIMEOUT,http_timeout:I.HTTP_TIMEOUT,http_port:I.HTTP_PORT,http_secureport:I.HTTP_SECUREPORT,http_mtls:I.HTTP_MTLS,http_mtls_user:I.HTTP_MTLS_USER,http_mtls_required:I.HTTP_MTLS_REQUIRED,customfunctions_processes:I.THREADS_COUNT,customfunctions_root:I.COMPONENTSROOT,localstudio_enabled:I.LOCALSTUDIO_ENABLED,logging_file:I.LOGGING_FILE,logging_level:I.LOGGING_LEVEL,logging_root:I.LOGGING_ROOT,logging_rotation_enabled:I.LOGGING_ROTATION_ENABLED,logging_rotation_compress:I.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:I.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:I.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:I.LOGGING_ROTATION_PATH,logging_stdstreams:I.LOGGING_STDSTREAMS,logging_auditlog:I.LOGGING_AUDITLOG,logging_auditretention:I.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:I.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:I.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:I.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:I.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:I.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:I.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:I.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:I.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:I.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:I.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:I.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:I.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:I.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:I.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:I.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:I.ROOTPATH,databases:I.DATABASES,storage_path:I.STORAGE_PATH,ignorescripts:I.IGNORE_SCRIPTS,mqtt_network_port:I.MQTT_NETWORK_PORT,mqtt_websocket:I.MQTT_WEBSOCKET,mqtt_network_secureport:I.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:I.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:I.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:I.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:I.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:I.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:I.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:I.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:I.AUTHENTICATION_CACHETTL,authentication_enablesessions:I.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:I.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:I.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:I.COMPONENTSROOT,tls_certificate:I.TLS_CERTIFICATE,tls_privatekey:I.TLS_PRIVATEKEY,tls_certificateauthority:I.TLS_CERTIFICATEAUTHORITY,tls_ciphers:I.TLS_CIPHERS};for(let e in I){let t=I[e];GA[t.toLowerCase()]=t}var xq={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},Fq={csv_file_load:"csv_file_load",csv_data_load:j.CSV_DATA_LOAD,csv_url_load:j.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"},qq={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"},Gq={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},kq={VERSION_DEFAULT:"2.2.0"},Vq={DEVELOPMENT:8192,DEFAULT:512},$q={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"},Yq={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"},Kq={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},kA={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Wq=Symbol("metadata"),Qq="__clustering__",zq=Object.values(kA),Jq=15984864e5,VA={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Xq=FA.invert(VA),jq={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"},Zq=111,eG=`\r
2
+ `,tG={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},rG=["*","%"],nG="unauthorized_access",sG="func_val",iG={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},oG={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},aG={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"},cG={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},uG={HTTP:"http"},lG={STOPPED:"stopped",ONLINE:"online"},_G="3.x.x",dG={SUCCESS:"success",FAILURE:"failure"},fG={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};$A.exports={LOCAL_HARPERDB_OPERATIONS:Be,HDB_SUPPORT_ADDRESS:PA,HDB_SUPPORT_URL:BA,HDB_PRICING_URL:BF,SUPPORT_HELP_MSG:HF,LICENSE_HELP_MSG:HA,HDB_PROC_NAME:UA,HDB_PROC_DESCRIPTOR:jE,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ml,CLUSTERING_HUB_PROC_DESCRIPTOR:Ul,SYSTEM_SCHEMA_NAME:rq,HASH_FOLDER_NAME:nq,HDB_HOME_DIR_NAME:sq,UPDATE_FILE_NAME:cq,LICENSE_KEY_DIR_NAME:oq,BOOT_PROPS_FILE_NAME:aq,JOB_TYPE_ENUM:Fq,JOB_STATUS_ENUM:Dq,SYSTEM_TABLE_NAMES:bq,SYSTEM_TABLE_HASH_ATTRIBUTES:Nq,OPERATIONS_ENUM:j,VALID_S3_FILE_TYPES:Lq,S3_BUCKET_AUTH_KEYS:Uq,VALID_SQL_OPS_ENUM:Mq,GEO_CONVERSION_ENUM:vq,HDB_SETTINGS_NAMES:qA,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Bq,SERVICE_ACTIONS_ENUM:Pq,CLUSTER_MESSAGE_TYPE_ENUM:qq,CLUSTER_CONNECTION_DIRECTION_ENUM:Gq,CLUSTER_EVENTS_DEFS_ENUM:$q,PERIOD_REGEX:$F,DOUBLE_PERIOD_REGEX:YF,UNICODE_PERIOD:KF,FORWARD_SLASH_REGEX:WF,UNICODE_FORWARD_SLASH:QF,ESCAPED_FORWARD_SLASH_REGEX:zF,ESCAPED_PERIOD_REGEX:JF,ESCAPED_DOUBLE_PERIOD_REGEX:XF,REG_KEY_FILE_NAME:Iq,RESTART_TIMEOUT_MS:_q,HDB_FILE_PERMISSIONS:dq,DATABASES_DIR_NAME:hq,LEGACY_DATABASES_DIR_NAME:mq,TRANSACTIONS_DIR_NAME:pq,LIMIT_COUNT_NAME:Sq,ID_ATTRIBUTE_STRING:Tq,INSERT_MODULE_ENUM:Aq,UPGRADE_JSON_FIELD_NAMES_ENUM:Oq,RESTART_CODE:uq,RESTART_CODE_NUM:lq,CLUSTER_OPERATIONS:Za,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:wq,HDB_INTERNAL_SC_CHANNEL_PREFIX:Ar,INTERNAL_SC_CHANNELS:yq,CLUSTERING_MESSAGE_TYPES:jq,HDB_FILE_SUFFIX:iq,BLOB_FOLDER_NAME:fq,HDB_TRASH_DIR:Eq,ORIGINATOR_SET_VALUE:Zq,LICENSE_VALUES:kq,RAM_ALLOCATION_ENUM:Vq,TIME_STAMP_NAMES_ENUM:kA,TIME_STAMP_NAMES:zq,PERMS_UPDATE_RELEASE_TIMESTAMP:Jq,SEARCH_NOT_FOUND_MESSAGE:xF,SEARCH_ATTRIBUTE_NOT_FOUND:FF,LICENSE_ROLE_DENIED_RESPONSE:qF,LICENSE_MAX_CONNS_REACHED:GF,BASIC_LICENSE_MAX_NON_CU_ROLES:vA,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:vF,VALUE_SEARCH_COMPARATORS:VA,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Xq,LICENSE_FILE_NAME:Cq,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Yq,NEW_LINE:eG,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:VF,MOMENT_DAYS_TAG:jF,API_TURNOVER_SEC:ZF,LOOPBACK:kF,CODE_EXTENSION:Ll,WILDCARD_SEARCH_VALUE:eq,NODE_ERROR_CODES:Kq,JAVASCRIPT_EXTENSION:LA,PERMS_CRUD_ENUM:tG,UNAUTHORIZED_PERMISSION_NAME:nG,SEARCH_WILDCARDS:rG,FUNC_VAL:sG,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:iG,JWT_ENUM:oG,CLUSTERING_FLAG:Qq,ITC_EVENT_TYPES:aG,CUSTOM_FUNCTION_PROC_NAME:MA,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Dl,SERVICES:cG,THREAD_TYPES:uG,MEM_SETTING_KEY:tq,HDB_RESTART_SCRIPT:gF,PROCESS_DESCRIPTORS:yF,SERVICE_SERVERS:LF,SERVICE_SERVERS_CWD:XE,PROCESS_DESCRIPTORS_VALIDATE:CF,LAUNCH_SERVICE_SCRIPTS:UF,LOG_LEVELS:IF,PROCESS_NAME_ENV_PROP:gq,LOG_NAMES:wF,PM2_PROCESS_STATUSES:lG,CONFIG_PARAM_MAP:GA,CONFIG_PARAMS:I,HDB_CONFIG_FILE:pF,HDB_DEFAULT_CONFIG_FILE:SF,ROLE_TYPES_ENUM:MF,BOOT_PROP_PARAMS:xA,INSTALL_PROMPTS:Rq,HDB_ROOT_DIR_NAME:TF,CLUSTERING_PROCESSES:DF,FOREGROUND_PID_FILE:OF,PACKAGE_ROOT:Ks,PRE_4_0_0_VERSION:_G,DATABASES_PARAM_CONFIG:xq,METADATA_PROPERTY:Wq,AUTH_AUDIT_STATUS:dG,AUTH_AUDIT_TYPES:fG,HDB_PID_FILE:bF,DEFAULT_DATABASE_NAME:NF,LEGACY_CONFIG_PARAMS:Hq};DA()});var ZE=T((qie,WA)=>{"use strict";var YA=require("minimist");WA.exports=EG;function EG(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=KA(process.env),n=KA(YA(process.argv))):(r=process.env,n=YA(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(EG,"assignCMDENVVariables");function KA(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(KA,"objKeysToLowerCase")});var W=T((kie,oh)=>{"use strict";var Ii=require("fs-extra"),{workerData:hG,threadId:mG}=require("worker_threads"),ds=require("path"),JA=require("yaml"),XA=require("properties-reader"),Tt=M(),QA=ZE(),pG=require("os"),{PACKAGE_ROOT:th}=M(),{_assignPackageExport:SG}=require("../../index"),tc={};for(let e in console)tc[e]||(tc[e]=console[e]);var Zt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},jA={STDOUT:"stdOut",STDERR:"stdErr"},TG=ds.join(th,"logs"),gG=ds.join(th,"config/yaml/",Tt.HDB_DEFAULT_CONFIG_FILE),RG=1e4,_s,Gn,jt,Pl,vl,rc,Po,ec;ec===void 0&&ZA();oh.exports={notify:rO,fatal:nO,error:nc,warn:ih,info:Bl,debug:sh,trace:nh,setLogLevel:IG,log_level:jt,loggerWithTag:AG,suppressLogging:OG,initLogSettings:ZA,setupConsoleLogging:eO,logCustomLevel:yG,closeLogFile:rh,getLogFilePath:()=>rc,OUTPUTS:jA,AuthAuditLog:LG};SG("logger",oh.exports);function ZA(e=!1){try{if(ec===void 0||e){rh();let t=wG(),r=QA(["ROOTPATH"]);try{ec=XA(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Ii.pathExistsSync(ds.join(r.ROOTPATH,Tt.HDB_CONFIG_FILE)))throw n}({level:jt,config_log_path:vl,to_file:_s,to_stream:Gn}=CG(r.ROOTPATH?ds.join(r.ROOTPATH,Tt.HDB_CONFIG_FILE):ec.get("settings_path"))),Pl=Tt.LOG_NAMES.HDB,rc=ds.join(vl,Pl)}}catch(t){if(ec=void 0,t.code===Tt.NODE_ERROR_CODES.ENOENT){let r=QA(Object.keys(Tt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Tt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===Tt.CONFIG_PARAMS.LOGGING_LEVEL){jt=u;continue}if(c===Tt.CONFIG_PARAMS.LOGGING_STDSTREAMS){Gn=u;continue}c===Tt.CONFIG_PARAMS.LOGGING_FILE&&(_s=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=DG();_s=_s===void 0?s:_s,_s=zA(_s),Gn=Gn===void 0?i:Gn,Gn=zA(Gn),jt=jt===void 0?n:jt,vl=TG,Pl=Tt.LOG_NAMES.INSTALL,rc=ds.join(vl,Pl);return}throw nc("Error initializing log settings"),nc(t),t}process.env.DEV_MODE&&(Gn=!0),eO()}a(ZA,"initLogSettings");var eh=!0;function eO(){Mo("error",nc),Mo("warn",ih),Mo("log",Bl),Mo("info",Bl),Mo("debug",sh),Mo("trace",nh)}a(eO,"setupConsoleLogging");function Mo(e,t){console[e]=function(...r){if(eh&&t(...r),!/PM2 log:|App \[/.test(r[0]))return tc[e](...r)}}a(Mo,"logConsole");function AG(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(rO),fatal:r(nO),error:r(nc),warn:r(ih),info:r(Bl),debug:r(sh),trace:r(nh)};function r(n){return function(...s){return n(t,...s)}}}a(AG,"loggerWithTag");function OG(e){try{eh=!1,e()}finally{eh=!0}}a(OG,"suppressLogging");var bG=hG?.name?.replace(/ /g,"-")||"main";function Es(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||bG+"/"+mG);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}
3
+ `}a(Es,"createLogRecord");function sc(e){_s&&tO(e),Gn&&process.stdout.write(e)}a(sc,"logStdOut");function Hl(e){_s&&tO(e),Gn&&process.stderr.write(e)}a(Hl,"logStdErr");function tO(e){NG(),Po?Ii.appendFileSync(Po,e):tc.log(e)}a(tO,"logToFile");function rh(){try{Ii.closeSync(Po)}catch{}Po=null}a(rh,"closeLogFile");function NG(){if(!Po){try{if(!rc)debugger;Po=Ii.openSync(rc,"a")}catch(e){tc.error(e)}setTimeout(()=>{rh()},RG).unref()}}a(NG,"openLogFile");function Bl(...e){Zt[jt]<=Zt.info&&sc(Es("info",e))}a(Bl,"info");function nh(...e){Zt[jt]<=Zt.trace&&sc(Es("trace",e))}a(nh,"trace");function nc(...e){Zt[jt]<=Zt.error&&Hl(Es("error",e))}a(nc,"error");function sh(...e){Zt[jt]<=Zt.debug&&sc(Es("debug",e))}a(sh,"debug");function rO(...e){Zt[jt]<=Zt.notify&&sc(Es("notify",e))}a(rO,"notify");function nO(...e){Zt[jt]<=Zt.fatal&&Hl(Es("fatal",e))}a(nO,"fatal");function ih(...e){Zt[jt]<=Zt.warn&&Hl(Es("warn",e))}a(ih,"warn");function yG(e,t,...r){t===jA.STDERR?Hl(Es(e,r)):sc(Es(e,r))}a(yG,"logCustomLevel");function wG(){let e;try{e=pG.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ds.join(e,Tt.HDB_HOME_DIR_NAME,Tt.BOOT_PROPS_FILE_NAME);return Ii.existsSync(t)||(t=ds.join(th,"utility/hdb_boot_properties.file")),t}a(wG,"getPropsFilePath");function IG(e){jt=e}a(IG,"setLogLevel");function zA(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(zA,"autoCastBoolean");function CG(e){try{if(e.includes("config/settings.js")){let o=XA(e);return{level:o.get(Tt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ds.dirname(o.get(Tt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Tt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Tt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=JA.parseDocument(Ii.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===Tt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(CG,"getLogConfig");function DG(){try{let e=JA.parseDocument(Ii.readFileSync(gG,"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(DG,"getDefaultConfig");function LG(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(LG,"AuthAuditLog")});var iO=T(($ie,sO)=>{"use strict";var UG=require("util"),MG=require("path"),PG=require("child_process"),vG=UG.promisify(PG.execFile),BG=1e3*1e3*10;sO.exports={findPs:HG};async function HG(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await vG("ps",["wwxo",`pid,${r}`],{maxBuffer:BG});for(let s of n.trim().split(`
4
+ `).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:MG.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(HG,"findPs")});var _t=T((Kie,aO)=>{"use strict";var xG="__dbis__",FG="__txns__",qG="__environment_name__",GG="__dbi_defintion__",kG={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"},VG=["__createdtime__","__updatedtime__"],$G="\uFFFF",oO={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},YG=Object.values(oO);aO.exports={AUDIT_STORE_NAME:FG,INTERNAL_DBIS_NAME:xG,DBI_DEFINITION_NAME:GG,SEARCH_TYPES:kG,TIMESTAMP_NAMES:VG,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:qG,TRANSACTIONS_DBI_NAMES_ENUM:oO,TRANSACTIONS_DBIS:YG,OVERFLOW_MARKER:$G}});var Or=T((Wie,mO)=>{"use strict";var cO=M(),uO=_t(),lO={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},_O=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),dO={500:_O("There was an error processing your request."),400:"Invalid request"},KG=dO[lO.INTERNAL_SERVER_ERROR],WG={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.`},QG={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},zG={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"},JG={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 ${uO.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${uO.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"},XG={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${cO.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 ${cO.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"},fO={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"},jG={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."},ZG={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},ek={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},tk={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},rk={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`},EO={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.`},hO={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},nk={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file."},sk={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},ik={...fO,...zG,...WG,...jG,...ZG,...ek,...tk,...rk,...XG,...EO,...hO,...nk,...sk,...QG};mO.exports={CHECK_LOGS_WRAPPER:_O,HDB_ERROR_MSGS:ik,DEFAULT_ERROR_MSGS:dO,DEFAULT_ERROR_RESP:KG,HTTP_STATUS_CODES:lO,LMDB_ERRORS_ENUM:JG,AUTHENTICATION_ERROR_MSGS:fO,VALIDATION_ERROR_MSGS:EO,ITC_ERRORS:hO}});var re=T((zie,TO)=>{"use strict";var vo=Or(),ok=W(),ak=M(),xl=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,pO),this.statusCode=n||vo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(vo.DEFAULT_ERROR_MSGS[n]?vo.DEFAULT_ERROR_MSGS[n]:vo.DEFAULT_ERROR_MSGS[vo.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&&ok[s](i)}},ah=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}},ch=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function pO(e,t,r,n=ak.LOG_LEVELS.ERROR,s=null,i=!1){if(SO(e))return e;let o=new xl(e,t,r,n,s);return i&&delete o.stack,o}a(pO,"handleHDBError");function SO(e){return e.__proto__.constructor.name===xl.name}a(SO,"isHDBError");TO.exports={isHDBError:SO,handleHDBError:pO,ClientError:ah,ServerError:ch,hdb_errors:vo}});var RO=T((Xie,gO)=>{"use strict";var ck={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
5
5
  `),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
6
- `)},ok="certificate.pem",ak="privateKey.pem",ck="ca.pem";mO.exports={CERTIFICATE_VALUES:ik,CERTIFICATE_PEM_NAME:ok,PRIVATEKEY_PEM_NAME:ak,CA_PEM_NAME:ck}});var Xe=T((Qie,SO)=>{"use strict";var Xt=require("validate.js");Xt.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Xt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Xt.validators.type.checks={Object:function(e){return Xt.isObject(e)&&!Xt.isArray(e)},Array:Xt.isArray,Integer:Xt.isInteger,Number:Xt.isNumber,String:Xt.isString,Date:Xt.isDate,Boolean:function(e){return typeof e=="boolean"}};Xt.validators.hasValidFileExt=function(e,t){return Xt.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};SO.exports={validateObject:uk,validateObjectAsync:lk,validateBySchema:_k};function uk(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Xt(e,t,{format:"flat"});return r?new Error(r):null}a(uk,"validateObject");async function lk(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Xt.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(lk,"validateObjectAsync");function _k(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(_k,"validateBySchema")});var uh=T((Xie,OO)=>{"use strict";var AO=require("fs-extra"),ue=require("joi"),dk=require("os"),{boolean:De,string:Nr,number:Ct,array:ch}=ue.types(),{totalmem:TO}=require("os"),yi=require("path"),fk=W(),Hl=J(),Jie=pO(),gO=U(),Ek=Xe(),RO="log",hk="components",mk="Invalid logging.rotation.maxSize unit. Available units are G, M or K",pk="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Sk="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",Tk="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",gk="rootPath config parameter is undefined",Rk="clustering.enabled config parameter is undefined",wi=Ct.min(0).required(),xl=ch.items({host:Nr.required(),port:wi}).empty(null),Gn;OO.exports={configValidator:Ak,routesValidator:Ik,route_constraints:xl};function Ak(e){if(Gn=e.rootPath,Hl.isEmpty(Gn))throw gk;let t=De.required(),r=Ct.min(0).max(1e3).empty(null).default(wk),n=Nr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(nc),s=Nr.optional().empty(null),i=Nr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ue.string().empty(null).default(nc),c=ue.custom(bk).empty(null).default(nc),u=e.clustering?.enabled;if(Hl.isEmpty(u))throw Rk;let _;return u===!0?_=ue.object({enabled:t,hubServer:ue.object({cluster:ue.object({name:ue.required().empty(null),network:ue.object({port:wi,routes:xl}).required()}).required(),leafNodes:ue.object({network:ue.object({port:wi}).required()}).required(),network:ue.object({port:wi}).required()}).required(),leafServer:ue.object({network:ue.object({port:wi,routes:xl}).required(),streams:ue.object({maxAge:Ct.min(120).allow(null).optional(),maxBytes:Ct.min(1).allow(null).optional(),maxMsgs:Ct.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ue.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:De.optional(),databaseLevel:De.optional(),tls:ue.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:De.required(),verify:De.optional()}),user:Nr.optional().empty(null)}).required():_=ue.object({enabled:t,tls:ue.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:De.required()})}).required(),ue.object({authentication:ue.object({authorizeLocal:De,cacheTTL:Ct.required(),enableSessions:De}),analytics:ue.object({aggregatePeriod:Ct}),componentsRoot:n.optional(),clustering:_,localStudio:ue.object({enabled:t}).required(),logging:ue.object({auditAuthEvents:ue.object({logFailed:De,logSuccessful:De}),file:De.required(),level:ue.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ue.object({enabled:De.optional(),compress:De.optional(),interval:Nr.custom(yk).optional().empty(null),maxSize:Nr.custom(Nk).optional().empty(null),path:Nr.optional().empty(null).default(nc)}).required(),root:n,stdStreams:De.required(),auditLog:De.required()}).required(),operationsApi:ue.object({network:ue.object({cors:De.optional(),corsAccessList:ch.optional(),headersTimeout:Ct.min(1).optional(),keepAliveTimeout:Ct.min(1).optional(),port:Ct.optional().empty(null),domainSocket:ue.optional().empty("hdb/operations-server").default(nc),securePort:Ct.optional().empty(null),timeout:Ct.min(1).optional()}).optional(),tls:ue.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:Nr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ue.object({network:ue.object({port:wi,securePort:wi,mtls:ue.alternatives([De.optional(),ue.object({user:Nr.optional(),certificateAuthority:s,required:De.optional()})])}).required(),webSocket:De.optional(),requireAuthentication:De.optional()}),http:ue.object({compressionThreshold:Ct.optional(),cors:De.optional(),corsAccessList:ch.optional(),headersTimeout:Ct.min(1).optional(),port:Ct.min(0).optional().empty(null),securePort:Ct.min(0).optional().empty(null),mtls:ue.alternatives([De.optional(),ue.object({user:Nr.optional(),certificateAuthority:s,required:De.optional()})])}).required(),threads:r.optional(),maxHeapMemory:Ct.min(0).optional(),storage:ue.object({writeAsync:De.required(),overlappingSync:De.optional(),caching:De.optional(),compression:De.optional(),noReadAhead:De.optional(),path:c,prefetchWrites:De.optional()}).required(),ignoreScripts:De.optional(),tls:ue.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:Nr.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(Ak,"configValidator");function Ok(e){return AO.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Ok,"doesPathExist");function bk(e,t){ue.assert(e,Nr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Ok(e);if(r)return t.message(r)}a(bk,"validatePath");function Nk(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(mk);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Sk):e}a(Nk,"validateRotationMaxSize");function yk(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(pk);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Tk):e}a(yk,"validateRotationInterval");function wk(e,t){let r=t.state.path.join("."),n=dk.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||TO();return i=Math.round(Math.min(i,TO())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),fk.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(wk,"setDefaultThreads");function nc(e,t){let r=t.state.path.join(".");if(!Hl.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Hl.isEmpty(Gn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return yi.join(Gn,hk);case"logging.root":return yi.join(Gn,RO);case"clustering.leafServer.streams.path":return yi.join(Gn,"clustering","leaf");case"storage.path":let n=yi.join(Gn,gO.LEGACY_DATABASES_DIR_NAME);return AO.existsSync(n)?n:yi.join(Gn,gO.DATABASES_DIR_NAME);case"logging.rotation.path":return yi.join(Gn,RO);case"operationsApi.network.domainSocket":return r==null?null:yi.join(Gn,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(nc,"setDefaultRoot");function Ik(e){let t=ue.object({routes:xl});return Ek.validateBySchema({routes:e},t)}a(Ik,"routesValidator")});var Ii={};ke(Ii,{server:()=>je});var bO,je,jt=Oe(()=>{bO=require("../../index"),je={};(0,bO._assignPackageExport)("server",je)});var Ir=T((eoe,UO)=>{"use strict";var wr=U(),Dt=J(),gt=W(),{configValidator:Ck,routesValidator:NO}=uh(),Zt=require("fs-extra"),Dk=require("yaml"),Tn=require("path"),Lk=require("is-number"),wO=require("properties-reader"),Mk=require("lodash"),{handleHDBError:Uk}=ee(),{HTTP_STATUS_CODES:Pk,HDB_ERROR_MSGS:Fl}=br(),Zie=require("minimist"),{server:vk}=(jt(),te(Ii)),{DATABASES_PARAM_CONFIG:sc,CONFIG_PARAMS:yr,CONFIG_PARAM_MAP:gn}=wr,Bk="Unable to get config value because config is uninitialized",Hk="Config successfully initialized",xk="Error backing up config file",Fk="Empty parameter sent to getConfigValue",IO=Tn.join(wr.PACKAGE_ROOT,"config","yaml",wr.HDB_DEFAULT_CONFIG_FILE),qk="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",yO={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"},ql,Rt,Gl;UO.exports={createConfigFile:Gk,getDefaultConfig:kk,getConfigValue:DO,initConfig:_h,flattenConfig:Po,updateConfigValue:LO,updateConfigObject:$k,getConfiguration:Wk,setConfiguration:Qk,readConfigFile:fh,getClusteringRoutes:zk,initOldConfig:MO,getConfigFromFile:Jk,getConfigFilePath:Ci,addConfig:Xk,deleteConfigFromFile:jk,getConfigObj:Zk};function Gk(e){let t=Ks(IO);ql=Po(t.toJSON());let r;for(let o in e){let c=gn[o.toLowerCase()];if(c===yr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=lh(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){gt.error(l)}}}r&&CO(t,r),dh(t);let n=t.toJSON();Rt=Po(n);let s=t.getIn(["rootPath"]),i=Tn.join(s,wr.HDB_CONFIG_FILE);Zt.createFileSync(i),Zt.writeFileSync(i,String(t)),gt.trace(`Config file written to ${i}`)}a(Gk,"createConfigFile");function CO(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Dt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(sc.TABLES))for(let i in n[s][sc.TABLES])for(let o in n[s][sc.TABLES][i]){let c=n[s][sc.TABLES][i][o],u=[yr.DATABASES,s,sc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in n[s]){let o=n[s][i],c=[yr.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){gt.error("Error parsing schemas CLI/env config arguments",n)}}a(CO,"setSchemasConfig");function kk(e){if(ql===void 0){let r=Ks(IO);ql=Po(r.toJSON())}let t=gn[e.toLowerCase()];if(t!==void 0)return ql[t.toLowerCase()]}a(kk,"getDefaultConfig");function DO(e){if(e==null){gt.error(Fk);return}if(Rt===void 0){gt.trace(Bk);return}let t=gn[e.toLowerCase()];if(t!==void 0)return Rt[t.toLowerCase()]}a(DO,"getConfigValue");function Ci(e=Dt.getPropsFilePath()){let t=Dt.getEnvCliRootPath();return t?Tn.join(t,wr.HDB_CONFIG_FILE):wO(e).get(wr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Ci,"getConfigFilePath");function _h(e=!1){if(Rt===void 0||e){let t;if(!Dt.noBootFile()){t=Dt.getPropsFilePath();try{Zt.accessSync(t,Zt.constants.F_OK|Zt.constants.R_OK)}catch(i){throw gt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Ci(t),n;if(r.includes("config/settings.js"))try{MO(r);return}catch(i){if(i.code!==wr.NODE_ERROR_CODES.ENOENT)throw i}try{n=Ks(r)}catch(i){if(i.code===wr.NODE_ERROR_CODES.ENOENT){gt.trace(`HarperDB config file not found at ${r}.
7
- This can occur during early stages of install where the config file has not yet been created`);return}else throw gt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Vk(n,r),dh(n);let s=n.toJSON();if(vk.config=s,Rt=Po(s),Rt.logging_rotation_rotate)for(let i in yO)Rt[i]&&gt.error(`Config ${yO[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);gt.trace(Hk)}}a(_h,"initConfig");function Vk(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Tn.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Tn.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Tn.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(gt.trace("Updating config file with missing config params"),Zt.writeFileSync(t,String(e)))}a(Vk,"checkForUpdatedConfig");function dh(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=Ck(t);if(r.error)throw Fl.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(dh,"validateConfig");function $k(e,t){Rt===void 0&&(Rt={});let r=gn[e.toLowerCase()];if(r===void 0){gt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Rt[r.toLowerCase()]=t}a($k,"updateConfigObject");function LO(e,t,r=void 0,n=!1,s=!1,i=!1){Rt===void 0&&_h();let o=DO(gn.hdb_root),c=Tn.join(o,wr.HDB_CONFIG_FILE),u=Ks(c),_;if(r===void 0&&e.toLowerCase()===yr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=gn[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=lh(f,t);u.setIn([...E],h)}else for(let f in r){let E=gn[f.toLowerCase()];if(E===yr.HTTP_SECUREPORT&&r[f]===Rt[yr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===yr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===Rt[yr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===yr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=wr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=lh(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(O){gt.error(O)}}}_&&CO(u,_),dh(u);let l=u.getIn(["rootPath"]),d=Tn.join(l,wr.HDB_CONFIG_FILE);n===!0&&Yk(c,l),Zt.writeFileSync(d,String(u)),s&&(Rt=Po(u.toJSON())),gt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(LO,"updateConfigValue");function Yk(e,t){try{let r=Tn.join(t,"backup",`${wr.HDB_CONFIG_FILE}.bak`);Zt.copySync(e,r),gt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){gt.error(xk),gt.error(r)}}a(Yk,"backupConfigFile");var Kk=["databases"];function Po(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)),Gl=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])&&!Kk.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!yr[u.toUpperCase()]&&gn[u]&&(s[gn[u].toLowerCase()]=o[c]),s[u]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Po,"flattenConfig");function lh(e,t){if(e===yr.CLUSTERING_NODENAME||e===yr.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(Lk(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Dt.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 Dt.autoCast(t)}a(lh,"castConfigValue");function Wk(){let e=Dt.getPropsFilePath(),t=Ci(e);return Ks(t).toJSON()}a(Wk,"getConfiguration");async function Qk(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return LO(void 0,void 0,s,!0),qk}catch(i){throw typeof i=="string"||i instanceof String?Uk(i,i,Pk.BAD_REQUEST,void 0,void 0,!0):i}}a(Qk,"setConfiguration");function fh(){let e=Dt.getPropsFilePath();try{Zt.accessSync(e,Zt.constants.F_OK|Zt.constants.R_OK)}catch(n){if(!Dt.noBootFile())throw gt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Ci(e);return Ks(t).toJSON()}a(fh,"readConfigFile");function Ks(e){return Dk.parseDocument(Zt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Ks,"parseYamlDoc");function zk(){let e=fh(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Dt.isEmptyOrZeroLength(t)?[]:t;let r=NO(t);if(r)throw Fl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Dt.isEmptyOrZeroLength(n)?[]:n;let s=NO(n);if(s)throw Fl.CONFIG_VALIDATION(s.message);if(!Dt.isEmptyOrZeroLength(n)&&!Dt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Dt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Fl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(zk,"getClusteringRoutes");function MO(e){let t=wO(e);Rt={};for(let r in gn){let n=t.get(r.toUpperCase());if(Dt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=gn[r].toLowerCase();s===yr.LOGGING_ROOT?Rt[s]=Tn.dirname(n):Rt[s]=n}return Rt}a(MO,"initOldConfig");function Jk(e){let t=fh();return Mk.get(t,e.replaceAll("_","."))}a(Jk,"getConfigFromFile");async function Xk(e,t){let r=Ks(Ci());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Zt.writeFile(Ci(),String(r))}a(Xk,"addConfig");function jk(e){let t=Ci(Dt.getPropsFilePath()),r=Ks(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Tn.join(n,wr.HDB_CONFIG_FILE);Zt.writeFileSync(s,String(r))}a(jk,"deleteConfigFromFile");function Zk(){return Gl||(_h(),Gl)}a(Zk,"getConfigObj")});var Z=T((roe,HO)=>{"use strict";var Eh=require("fs-extra"),Di=require("path"),PO=require("os"),eV=require("properties-reader"),oc=W(),ic=J(),_e=U(),kl=Ir(),tV="Error initializing environment manager",Vl="BOOT_PROPS_FILE_PATH",vO=!1,rV={[_e.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Es={};HO.exports={BOOT_PROPS_FILE_PATH:Vl,getHdbBasePath:nV,setHdbBasePath:sV,get:BO,initSync:oV,setProperty:Le,initTestEnvironment:aV};function nV(){return Es[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(nV,"getHdbBasePath");function sV(e){Es[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(sV,"setHdbBasePath");function BO(e){let t=kl.getConfigValue(e);return t===void 0?Es[e]:t}a(BO,"get");function Le(e,t){rV[e]&&(Es[e]=t),kl.updateConfigObject(e,t)}a(Le,"setProperty");function iV(){let e;try{e=ic.getPropsFilePath(),Eh.accessSync(e,Eh.constants.F_OK|Eh.constants.R_OK),vO=!0;let t=eV(e);return Es[_e.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(_e.HDB_SETTINGS_NAMES.INSTALL_USER),Es[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Es[Vl]=e,!0}catch{return oc.trace(`Environment manager found no properties file at ${e}`),!1}}a(iV,"doesPropFileExist");function oV(e=!1){try{(vO||iV()||ic.noBootFile())&&(kl.initConfig(e),Es[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=kl.getConfigValue(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){oc.error(tV),oc.error(t),console.error(t),process.exit(1)}}a(oV,"initSync");function aV(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,u=Di.join(__dirname,"../../","unitTests");Es[Vl]=Di.join(u,"hdb_boot_properties.file"),Le(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Di.join(u,"settings.test")),Le(_e.HDB_SETTINGS_NAMES.INSTALL_USER,PO.userInfo()?PO.userInfo().username:void 0),Le(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Le(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Di.join(u,"envDir","log")),Le(_e.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Le(_e.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Le(_e.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Le(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Di.join(u,"envDir")),Le(_e.CONFIG_PARAMS.STORAGE_PATH,Di.join(u,"envDir")),s&&(Le(_e.CONFIG_PARAMS.HTTP_SECUREPORT,BO(_e.CONFIG_PARAMS.HTTP_PORT)),Le(_e.CONFIG_PARAMS.HTTP_PORT,null)),Le(_e.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Le(_e.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Le(_e.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,ic.isEmpty(i)?!1:i),Le(_e.CONFIG_PARAMS.HTTP_CORS,ic.isEmpty(i)?!1:i),Le(_e.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Le(_e.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Le(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Le(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Le(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Di.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Le(_e.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,ic.isEmpty(c)?!1:c),o&&(Le("CORS_ACCESSLIST",o),Le(_e.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Le(_e.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Le(_e.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Le(_e.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Le(_e.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Le(_e.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Le(_e.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Vl}. Please check your boot props and settings files`;oc.fatal(r),oc.error(t)}}a(aV,"initTestEnvironment")});var Ye=T((soe,$O)=>{"use strict";var _c=U(),cV=J(),er=Z(),dc=require("path"),uV=require("minimist"),xO=require("fs-extra"),FO=require("lodash");er.initSync();var{CONFIG_PARAMS:Ws,DATABASES_PARAM_CONFIG:ac,SYSTEM_SCHEMA_NAME:$l}=_c,cc,uc,lc;function qO(){if(cc!==void 0)return cc;if(er.getHdbBasePath()!==void 0)return cc=er.get(Ws.STORAGE_PATH)||dc.join(er.getHdbBasePath(),_c.DATABASES_DIR_NAME),cc}a(qO,"getBaseSchemaPath");function GO(){if(uc!==void 0)return uc;if(er.getHdbBasePath()!==void 0)return uc=VO($l),uc}a(GO,"getSystemSchemaPath");function kO(){if(lc!==void 0)return lc;if(er.getHdbBasePath()!==void 0)return lc=er.get(_c.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||dc.join(er.getHdbBasePath(),_c.TRANSACTIONS_DIR_NAME),lc}a(kO,"getTransactionAuditStoreBasePath");function lV(e,t){let r=er.get(Ws.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||dc.join(kO(),e.toString())}a(lV,"getTransactionAuditStorePath");function VO(e,t){e=e.toString(),t=t&&t.toString();let r=er.get(_c.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||dc.join(qO(),e)}a(VO,"getSchemaPath");function _V(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,uV(process.argv));let n=r[Ws.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!cV.isObject(n))throw o;i=n}for(let o of i){let c=o[$l];if(!c)continue;let u=er.get(Ws.DATABASES);u=u??{};let _=c?.tables?.[t]?.[ac.PATH];if(_)return FO.set(u,[$l,ac.TABLES,t,ac.PATH],_),er.setProperty(Ws.DATABASES,u),_;let l=c?.[ac.PATH];if(l)return FO.set(u,[$l,ac.PATH],l),er.setProperty(Ws.DATABASES,u),l}}let s=r[Ws.STORAGE_PATH.toUpperCase()];if(s){if(!xO.pathExistsSync(s))throw new Error(s+" does not exist");let i=dc.join(s,e);return xO.mkdirsSync(i),er.setProperty(Ws.STORAGE_PATH,s),i}return GO()}a(_V,"initSystemSchemaPaths");function dV(){cc=void 0,uc=void 0,lc=void 0}a(dV,"resetPaths");$O.exports={getBaseSchemaPath:qO,getSystemSchemaPath:GO,getTransactionAuditStorePath:lV,getTransactionAuditStoreBasePath:kO,getSchemaPath:VO,initSystemSchemaPaths:_V,resetPaths:dV}});var Cr=T((coe,zO)=>{"use strict";var fV=br().LMDB_ERRORS_ENUM,ooe=require("lmdb"),EV=lt(),aoe=require("buffer").Buffer,{OVERFLOW_MARKER:YO,MAX_SEARCH_KEY_LENGTH:Yl}=EV,KO=["number","string","symbol","boolean","bigint"];function hV(e){if(e=e?.primaryStore||e,!e)throw new Error(fV.ENV_REQUIRED)}a(hV,"validateEnv");function mV(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(mV,"stringifyData");function pV(e){return e instanceof Date?e.valueOf():e}a(pV,"convertKeyValueToWrite");function SV(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(KO.includes(typeof e))return e.length>Yl?[e.slice(0,Yl)+YO]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(KO.includes(typeof i))i.length>Yl?r.push(i.slice(0,Yl)+YO):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(SV,"getIndexedValues");var Kl=0,WO=0;function QO(){WO=Date.now()-performance.now()}a(QO,"adjustStartTime");QO();var TV=6e4;setInterval(QO,TV).unref();function gV(){let e=performance.now()+WO;return e>Kl?(Kl=e,e):(Kl+=488e-6,Kl)}a(gV,"getNextMonotonicTime");zO.exports={validateEnv:hV,stringifyData:mV,convertKeyValueToWrite:pV,getNextMonotonicTime:gV,getIndexedValues:SV}});var JO,Rn,hh,fc=Oe(()=>{JO=require("events"),Rn=class extends JO.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new hh;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)}},hh=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 Sh={};ke(Sh,{loadGQLSchema:()=>OV,start:()=>ph,startOnMainThread:()=>AV});function ph({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=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 u.OBJECT_TYPE_DEFINITION:let H=function(v){if(v.kind==="NonNullType"){let K=H(v.type);return K.nullable=!1,K}if(v.kind==="ListType")return{type:"array",elements:H(v.type)};let $={type:v.name?.value};return Object.defineProperty($,"location",{value:v.loc.startToken}),$};a(H,"getProperty");let O=S.name.value,g=[],R={table:null,database:null,properties:g};f.set(O,R);for(let v of S.directives){if(v.name.value==="table"){for(let M of v.arguments)R[M.name.value]=M.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 M of v.arguments)M.name.value==="name"&&(R.export={name:M.value.value})}}let B=!1;for(let v of S.fields){let M=H(v.type);M.name=v.name.value,g.push(M);for(let $ of v.directives)if($.name.value==="primaryKey")B?console.warn("Can not define two attributes as a primary key"):(M.isPrimaryKey=!0,B=!0);else if($.name.value==="indexed")M.indexed=!0;else if($.name.value==="relationship"){let K={};for(let z of $.arguments)K[z.name.value]=z.value.value;M.relationship=K}else if($.name.value==="createdTime")M.assignCreatedTime=!0;else if($.name.value==="updatedTime")M.assignUpdatedTime=!0;else if($.name.value==="expiresAt")M.expiresAt=!0;else if($.name.value==="allow"){let K=M.authorizedRoles=[];for(let z of $.arguments)z.name.value==="role"&&K.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):RV.includes(S.type)||(0,XO.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,mh.dirname)(n),S.tableClass):i.set((0,mh.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var mh,XO,RV,AV,OV,jO=Oe(()=>{mh=require("path");be();XO=x(Ze()),RV=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(ph,"start");AV=ph,OV=ph({ensureTable:ot}).handleFile});async function Wl(e){return bV?(Ec||(Ec=NV(wV)),(await(await Ec).import(e)).namespace):import(e)}async function NV(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ec=new Compartment({console,Math,Date,fetch:yV,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,eb.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:vt,tables:Dr,databases:et})}};let n=await(0,ZO.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Ec}function yV(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function wV(){return{Resource:vt,tables:Dr}}var ZO,eb,bV,Ec,Th=Oe(()=>{An();be();ZO=require("fs/promises"),eb=require("path"),bV=!1;a(Wl,"secureImport");a(NV,"getCompartment");a(yV,"secureOnlyFetch");a(wV,"getGlobalVars")});var Rh={};ke(Rh,{handleFile:()=>IV});async function IV(e,t,r,n){let s=new Map,i=(0,tb.pathToFileURL)(r).toString(),o=await Wl(i);u(o.default)&&n.set((0,gh.dirname)(t),o.default),c(o,(0,gh.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?n.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),s}var tb,gh,rb=Oe(()=>{tb=require("url");Th();gh=require("path");a(IV,"handleFile")});var Oh={};ke(Oh,{start:()=>CV});function CV({resources:e}){e.set("login",Ah),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Ah,nb=Oe(()=>{An();a(CV,"start");Ah=class extends vt{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 lb={};ke(lb,{parse:()=>Nh,streamAsJSON:()=>hc,stringify:()=>Li});function hc(e){return new bh({value:e})}function sb(e){return console.error(e),JSON.stringify(e.toString())}function ib(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Li(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===cb)return ub(e);if(t.resolution)return t.resolution.then(()=>Li(e));throw t}}function ub(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+=ub(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Li(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Nh(e){return MV.test(e)?DV.parse(e):JSON.parse(e)}var ob,ab,DV,LV,cb,bh,MV,yh=Oe(()=>{ob=require("stream"),ab=x(require("json-bigint-fixes")),DV=(0,ab.default)({useNativeBigInt:!0}),LV=1e4,cb={};BigInt.prototype.toJSON=function(){throw cb};a(hc,"streamAsJSON");bh=class extends ob.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),sb)}catch(s){yield sb(s)}else yield Li(t)}else yield Li(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);ib(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>LV?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return ib(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(sb,"handleError");a(ib,"when");a(Li,"stringify");a(ub,"jsStringify");MV=/-?\d{16,}/;a(Nh,"parse")});var Ob=T((boe,Ab)=>{"use strict";var wh=require("recursive-iterator"),UV=require("alasql"),Ih=require("clone"),_b=J(),{handleHDBError:db,hdb_errors:PV}=ee(),{HDB_ERROR_MSGS:fb,HTTP_STATUS_CODES:Eb}=PV,{getDatabases:vV}=(be(),te(Fe)),BV=["DISTINCT_ARRAY"],hb=Symbol("validateTables"),Ch=Symbol("validateTable"),Ooe=Symbol("getAllColumns"),mb=Symbol("validateAllColumns"),Ql=Symbol("findColumn"),pb=Symbol("validateOrderBy"),mc=Symbol("validateSegment"),Dh=Symbol("validateColumn"),Sb=Symbol("setColumnsForTable"),Tb=Symbol("checkColumnsForAsterisk"),gb=Symbol("validateGroupBy"),Rb=Symbol("hasColumns"),Lh=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[hb](),this[Tb](),this[mb]()}[hb](){if(this[Rb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Ch](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Ch](t.table)})}}[Rb](){let t=!1,r=new wh(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Ch](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=vV();if(!r[t.databaseid])throw db(new Error,fb.SCHEMA_NOT_FOUND(t.databaseid),Eb.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw db(new Error,fb.TABLE_NOT_FOUND(t.databaseid,t.tableid),Eb.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Ih(s);i.table=Ih(t),this.attributes.push(i)})}[Ql](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)}[Tb](){let t=new wh(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[Sb](r.tableid)}[Sb](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new UV.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[mb](){this[mc](this.statement.columns,!1),this[mc](this.statement.joins,!1),this[mc](this.statement.where,!1),this[gb](this.statement.group,!1),this[mc](this.statement.order,!0)}[mc](t,r){if(!t)return;let n=new wh(t),s=[];for(let{node:i,path:o}of n)!_b.isEmpty(i)&&!_b.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[pb](i):s.push(this[Dh](i)));return s}[gb](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&BV.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Ih(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Ql](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[Ql](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`}[pb](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[Dh](t)}[Dh](t){let r=this[Ql](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]}};Ab.exports=Lh});var Nb=T((yoe,bb)=>{"use strict";var Mh=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")}};bb.exports=Mh});var wb=T((Ioe,yb)=>{"use strict";var Uh=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};yb.exports=Uh});var Lb={};ke(Lb,{HAS_EXPIRATION:()=>Gh,LAST_TIMESTAMP_PLACEHOLDER:()=>Tc,LOCAL_TIMESTAMP:()=>HV,METADATA:()=>pc,NO_TIMESTAMP:()=>vh,PENDING_LOCAL_TIME:()=>kh,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>qh,RecordEncoder:()=>xh,TIMESTAMP_ASSIGN_LAST:()=>FV,TIMESTAMP_ASSIGN_NEW:()=>Cb,TIMESTAMP_ASSIGN_PREVIOUS:()=>Db,TIMESTAMP_PLACEHOLDER:()=>zl,TIMESTAMP_RECORD_PREVIOUS:()=>Bh,fromResource:()=>Zl,getUpdateRecord:()=>Vh,handleLocalTimeForGets:()=>e_});function GV(){return Sc[0]=Sc[0]^64,xV.getFloat64(0)}function Zl(e){Fh=!0;try{return e()}finally{Fh=!1}}function e_(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),u=c?.value,_=u?.[pc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[pc]>=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 u=c.value,_=u[pc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.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,Mi.push(new WeakRef(this))),!Fh)try{throw new Error("Read transaction used outside of resource")}catch(u){this.readStack=u.stack}o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Mi.length;u++){let _=Mi[u].deref();(!_||_.isDone||_.isCommitted)&&Mi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function Vh(e,t,r){return function(n,s,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?vo=i?.localTime?Bh|Db:vh:vo=u?i?.localTime?Bh|16384:Cb|16384:vh,l>0&&(c|=Gh),Xl=c,Hh=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:vo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(n,s,h);if(u){let O=_?.user?.username;if(E&&(Jl=e.encoder.encode(E)),f&&i?.localTime){let g=i?.localTime,R=r.get(g);if(R){let B=Lt(R).previousLocalTime;return r.put(g,jl(o,t,n,B,O,d,Jl),{ifVersion:p}),S}}r.put(Tc,jl(o,t,n,i?.localTime?1:0,O,d,Jl),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var Ib,Ph,zl,Tc,qh,HV,pc,Sc,xV,vh,Cb,FV,Db,Bh,Gh,kh,qV,Jl,vo,Xl,Hh,xh,Loe,Fh,Mi,Bo=Oe(()=>{Ib=require("msgpackr");Ui();Ph=x(W()),zl=new Uint8Array([1,1,1,1,4,64,0,0]),Tc=new Uint8Array([1,1,1,1,1,0,0,0]),qh=new Uint8Array([1,1,1,1,3,64,0,0]),HV=Symbol("local-timestamp"),pc=Symbol("metadata"),Sc=new Uint8Array(8),xV=new DataView(Sc.buffer,0,8),vh=0,Cb=0,FV=1,Db=3,Bh=4,Gh=16,kh=1,vo=0,Xl=-1,Hh=0,xh=class extends Ib.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(vo||Xl>=0){let i=0,o=vo;o&&(i+=8,vo=0);let c=Xl,u=Hh;c>=0&&(i+=2,Xl=-1,u&&(i+=8,Hh=0));let _=qV=r.call(this,n,s|2048|i);Jl=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(zl[4]=o,zl[5]=o>>8,_.set(zl,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,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,u;if(i===2){if(t.copy)t.copy(Sc,0,c),c+=8;else for(let d=0;d<8;d++)Sc[d]=t[c++];u=GV(),i=t[c]}let _;i<32&&(o=i,c+=2,o&Gh&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,s),s-c);return{localTime:u,value:l,[pc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(GV,"getTimestamp");Loe=Map.prototype.get;a(Zl,"fromResource");a(e_,"handleLocalTimeForGets");Mi=[];setInterval(()=>{for(let e=0;e<Mi.length;e++){let t=Mi[e].deref();!t||t.isDone||t.isCommitted?Mi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Ph.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Ph.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(Vh,"getUpdateRecord")});var t_=T((Uoe,Mb)=>{"use strict";var Yh=Z(),Kh=U(),{RecordEncoder:kV}=(Bo(),te(Lb));Yh.initSync();var VV=Yh.get(Kh.CONFIG_PARAMS.STORAGE_COMPRESSION),$V=Yh.get(Kh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,YV=Kh.UPDATES_PROPERTY,$h=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=VV&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=$V&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:kV},this.alwaysLazyProperty=n=>n===YV)}};Mb.exports=$h});var n_=T((voe,Pb)=>{"use strict";var Ho=Z(),gc=U();Ho.initSync();var KV=Ho.get(gc.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Ho.get(gc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Ho.get(gc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Ub=Ho.get(gc.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),WV=Ho.get(gc.CONFIG_PARAMS.STORAGE_NOREADAHEAD),r_=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=KV,this.noFSAccess=!0,Ub!==void 0&&(this.overlappingSync=Ub),this.noReadAhead=WV}};Pb.exports=r_;r_.MAX_DBS=1e4});var Ve=T((Hoe,$b)=>{"use strict";var Qh=require("lmdb"),On=require("fs-extra"),Lr=require("path"),s_=Cr(),Hb=W(),tr=br().LMDB_ERRORS_ENUM,i_=wb(),zh=t_(),xb=n_(),Qs=lt(),vb=U(),{table:QV,resetDatabases:zV}=(be(),te(Fe)),Bb=Z(),bn=Qs.INTERNAL_DBIS_NAME,Fb=Qs.DBI_DEFINITION_NAME,JV="data.mdb",XV="lock.mdb",Rc=".mdb",jV="-lock",Wh=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Xr(t,r),this.key_type=this.dbi[Qs.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Qs.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new Qh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function o_(e,t){if(e===void 0)throw new Error(tr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(tr.ENV_NAME_REQUIRED)}a(o_,"pathEnvNameValidation");async function Jh(e,t,r=!0){try{await On.access(e)}catch(n){throw n.code==="ENOENT"?new Error(tr.INVALID_BASE_PATH):n}try{let n=Lr.join(e,t+Rc);return await On.access(n,On.constants.R_OK|On.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await On.access(Lr.join(e,t,JV),On.constants.R_OK|On.constants.F_OK),Lr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(tr.INVALID_ENVIRONMENT)}else throw new Error(tr.INVALID_ENVIRONMENT);throw n}}a(Jh,"validateEnvironmentPath");function a_(e,t){if(s_.validateEnv(e),t===void 0)throw new Error(tr.DBI_NAME_REQUIRED)}a(a_,"validateEnvDBIName");async function ZV(e,t,r=!1,n=!1){o_(e,t);let s=Lr.basename(e);t=t.toString();let i=Bb.get(vb.CONFIG_PARAMS.DATABASES);i||Bb.setProperty(vb.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Jh(e,t,n),qb(e,t,r)}catch(o){if(o.message===tr.INVALID_ENVIRONMENT){let c=Lr.join(e,t);await On.mkdirp(n?c:e);let u=new xb(n?c:c+Rc,!1),_=Qh.open(u);_.dbis=Object.create(null);let l=new zh(!1);_.openDB(bn,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Xh(e,t,r);return _[Qs.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(ZV,"createEnvironment");async function e$(e,t,r,n=!0){o_(e,t),t=t.toString();let s=Lr.join(e,t);return QV({table:t,database:Lr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(e$,"copyEnvironment");async function qb(e,t,r=!1){o_(e,t),t=t.toString();let n=Xh(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 Jh(e,t),i=Lr.join(e,t+Rc),o=s!=i,c=new xb(s,o),u=Qh.open(c);u.dbis=Object.create(null);let _=kb(u);for(let l=0;l<_.length;l++)Xr(u,_[l]);return u[Qs.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=u,u}a(qb,"openEnvironment");async function t$(e,t,r=!1){o_(e,t),t=t.toString();let n=Lr.join(e,t+Rc),s=await Jh(e,t);if(global.lmdb_map!==void 0){let i=Xh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Gb(o),delete global.lmdb_map[i]}}await On.remove(s),await On.remove(s===n?s+jV:Lr.join(Lr.dirname(s),XV))}a(t$,"deleteEnvironment");async function Gb(e){s_.validateEnv(e);let t=e[Qs.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Gb,"closeEnvironment");function Xh(e,t,r=!1){let s=`${Lr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(Xh,"getCachedEnvironmentName");function r$(e){s_.validateEnv(e);let t=Object.create(null),r=Xr(e,bn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==bn)try{t[n]=Object.assign(new i_,s)}catch{Hb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(r$,"listDBIDefinitions");function kb(e){s_.validateEnv(e);let t=[],r=Xr(e,bn);for(let{key:n}of r.getRange({start:!1}))n!==bn&&t.push(n);return t}a(kb,"listDBIs");function n$(e,t){let n=Xr(e,bn).getEntry(t),s=new i_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{Hb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(n$,"getDBIDefinition");function Vb(e,t,r,n=!r){if(a_(e,t),t=t.toString(),t===bn)throw new Error(tr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Xr(e,t)}catch(s){if(s.message===tr.DBI_DOES_NOT_EXIST){let i=new zh(r,n===!0),o=e.openDB(t,i),c=new i_(r===!0,n);return o[Fb]=c,Xr(e,bn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(Vb,"createDBI");function Xr(e,t){if(a_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==bn?r=n$(e,t):r=new i_,r===void 0)throw new Error(tr.DBI_DOES_NOT_EXIST);let n;try{let s=new zh(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(tr.DBI_DOES_NOT_EXIST):s}return n[Fb]=r,e.dbis[t]=n,n}a(Xr,"openDBI");function s$(e,t){a_(e,t),t=t.toString();let r=Xr(e,t),n=r.getStats();return r[Qs.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(s$,"statDBI");async function i$(e,t){try{let r=Lr.join(e,t+Rc);return(await On.stat(r)).size}catch{throw new Error(tr.INVALID_ENVIRONMENT)}}a(i$,"environmentDataSize");function o$(e,t){if(a_(e,t),t=t.toString(),t===bn)throw new Error(tr.CANNOT_DROP_INTERNAL_DBIS_NAME);Xr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Xr(e,bn).removeSync(t)}a(o$,"dropDBI");function a$(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Xr(e,i)}catch(o){if(o.message===tr.DBI_DOES_NOT_EXIST)Vb(e,i,i!==t,i===t),n=!0;else throw o}}n&&zV()}a(a$,"initializeDBIs");$b.exports={openDBI:Xr,openEnvironment:qb,createEnvironment:ZV,listDBIs:kb,listDBIDefinitions:r$,createDBI:Vb,dropDBI:o$,statDBI:s$,deleteEnvironment:t$,initializeDBIs:a$,TransactionCursor:Wh,environmentDataSize:i$,copyEnvironment:e$,closeEnvironment:Gb}});var Kb=T((Foe,Yb)=>{"use strict";var jh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};Yb.exports=jh});var Qb=T((Goe,Wb)=>{"use strict";var Zh=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}};Wb.exports=Zh});var Jb=T((Voe,zb)=>{"use strict";var em=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};zb.exports=em});var xo=T((Qoe,Zb)=>{"use strict";var c$=Ve(),u$=Kb(),l$=Qb(),_$=Jb(),kn=Cr(),Ac=br().LMDB_ERRORS_ENUM,d$=lt(),hs=U(),f$=J(),E$=require("uuid"),Yoe=require("lmdb"),{handleHDBError:h$,hdb_errors:m$}=ee(),{OVERFLOW_MARKER:Koe,MAX_SEARCH_KEY_LENGTH:Woe}=d$,Xb=Z();Xb.initSync();var c_=Xb.get(hs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),tm=hs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Pi=hs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function p$(e,t,r,n,s=kn.getNextMonotonicTime()){im(e,t,r,n),rm(e,t,r);let i=new u$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u];jb(_,!0,s);let l=S$(e,t,r,_),d=_[t];o.push(l),c.push(d)}return nm(o,c,n,i,s)}a(p$,"insertRecords");function S$(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 l=c([[{}]]);Array.isArray(l)&&(c=l[0][hs.FUNC_VAL],n[o]=c)}let u=kn.getIndexedValues(c),_=e.dbis[o];if(u){c_&&_.prefetch(u.map(l=>({key:l,value:s})),u_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],s)}}c_&&e.dbis[t].prefetch([s],u_),e.dbis[t].put(s,n,n[Pi])})}a(S$,"insertRecord");function T$(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(T$,"removeSkippedRecords");function jb(e,t,r){let n=r>0;(n||!Number.isInteger(e[Pi]))&&(e[Pi]=r||(r=kn.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[tm]))&&(e[tm]=r||kn.getNextMonotonicTime()):delete e[tm]}a(jb,"setTimestamps");function rm(e,t,r){r.indexOf(hs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(hs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(hs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(hs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),c$.initializeDBIs(e,t,r)}a(rm,"initializeTransaction");async function g$(e,t,r,n,s=kn.getNextMonotonicTime()){im(e,t,r,n),rm(e,t,r);let i=new l$,o=[],c=[],u=[];for(let _=0;_<n.length;_++){let l=n[_],d=l[t],f;try{f=sm(e,t,l,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return nm(c,u,n,i,s,o)}a(g$,"updateRecords");async function R$(e,t,r,n,s=kn.getNextMonotonicTime()){try{im(e,t,r,n)}catch(u){throw h$(u,u.message,m$.HTTP_STATUS_CODES.BAD_REQUEST)}rm(e,t,r);let i=new _$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u],l;f$.isEmpty(_[t])?(l=E$.v4(),_[t]=l):l=_[t];let d=sm(e,t,_,l,i,!1,s);o.push(d),c.push(l)}return nm(o,c,n,i,s)}a(R$,"upsertRecords");async function nm(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||kn.getNextMonotonicTime(),T$(r,i),n}a(nm,"finalizeWrite");function sm(e,t,r,n,s,i=!1,o){let c=e.dbis[t],u=c.getEntry(n),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(jb(r,!l,o),Number.isInteger(r[Pi])&&_[Pi]>r[Pi])return!1;l&&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][hs.FUNC_VAL],r[h]=p)}if(p===O)continue;let g=kn.getIndexedValues(O);if(g){c_&&S.prefetch(g.map(R=>({key:R,value:n})),u_);for(let R=0,B=g.length;R<B;R++)S.remove(g[R],n)}if(g=kn.getIndexedValues(p),g){c_&&S.prefetch(g.map(R=>({key:R,value:n})),u_);for(let R=0,B=g.length;R<B;R++)S.put(g[R],n)}}let E=Object.assign({},_,r);c.put(n,E,E[Pi])},"do_put");return u?d=c.ifVersion(n,u.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:sm(e,t,r,n,s,i,o))}a(sm,"updateUpsertRecord");function A$(e,t,r){if(kn.validateEnv(e),t===void 0)throw new Error(Ac.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ac.WRITE_ATTRIBUTES_REQUIRED):new Error(Ac.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(A$,"validateBasic");function im(e,t,r,n){if(A$(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Ac.RECORDS_REQUIRED):new Error(Ac.RECORDS_MUST_BE_ARRAY)}a(im,"validateWrite");function u_(){}a(u_,"noop");Zb.exports={insertRecords:p$,updateRecords:g$,upsertRecords:R$}});var vi=T((Joe,O$)=>{O$.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var $n=T((Xoe,rN)=>{"use strict";var tN=J(),eN=U(),Fo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Vn=require("joi"),zs={schema_format:{pattern:Fo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},b$=Vn.alternatives(Vn.string().min(1).max(zs.schema_length.maximum).pattern(Fo).messages({"string.pattern.base":"{:#label} "+zs.schema_format.message}),Vn.number(),Vn.array()).required(),N$=Vn.alternatives(Vn.string().min(1).max(zs.schema_length.maximum).pattern(Fo).messages({"string.pattern.base":"{:#label} "+zs.schema_format.message}),Vn.number()),y$=Vn.alternatives(Vn.string().min(1).max(zs.schema_length.maximum).pattern(Fo).messages({"string.pattern.base":"{:#label} "+zs.schema_format.message}),Vn.number()).required();function w$(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>zs.schema_length.maximum?`'${e}' maximum of 250 characters`:Fo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(w$,"checkValidTable");function I$(e,t){return tN.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(I$,"validateSchemaExists");function C$(e,t){let r=t.state.ancestors[0].schema;return tN.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(C$,"validateTableExists");function D$(e,t){return e.toLowerCase()===eN.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${eN.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(D$,"validateSchemaName");rN.exports={common_validators:zs,schema_regex:Fo,hdb_schema_table:b$,validateSchemaExists:I$,validateTableExists:C$,validateSchemaName:D$,checkValidTable:w$,hdb_database:N$,hdb_table:y$}});var l_=T((Zoe,nN)=>{var{common_validators:Yn}=$n(),bc=Xe(),Oc="is required",_t={database:{presence:!1,format:Yn.schema_format,length:Yn.schema_length},schema:{presence:!1,format:Yn.schema_format,length:Yn.schema_length},table:{presence:!0,format:Yn.schema_format,length:Yn.schema_length},attribute:{presence:!0,format:Yn.schema_format,length:Yn.schema_length},hash_attribute:{presence:!0,format:Yn.schema_format,length:Yn.schema_length}};function Nc(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(Nc,"makeAttributesStrings");function L$(e){return e=Nc(e),_t.table.presence=!1,_t.attribute.presence=!1,_t.hash_attribute.presence=!1,bc.validateObject(e,_t)}a(L$,"schema_object");function M$(e){return e=Nc(e),_t.table.presence={message:Oc},_t.attribute.presence=!1,_t.hash_attribute.presence=!1,bc.validateObject(e,_t)}a(M$,"table_object");function U$(e){return e=Nc(e),_t.table.presence={message:Oc},_t.attribute.presence=!1,bc.validateObject(e,_t)}a(U$,"create_table_object");function P$(e){return e=Nc(e),_t.table.presence={message:Oc},_t.attribute.presence={message:Oc},_t.hash_attribute.presence=!1,bc.validateObject(e,_t)}a(P$,"attribute_object");function v$(e){return e=Nc(e),_t.table.presence={message:Oc},_t.attribute.presence=!1,_t.hash_attribute.presence=!1,bc.validateObject(e,_t)}a(v$,"describe_table");function B$(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(B$,"validateTableResidence");nN.exports={schema_object:L$,create_table_object:U$,table_object:M$,attribute_object:P$,describe_table:v$,validateTableResidence:B$}});var iN=T((tae,sN)=>{"use strict";var H$=require("uuid"),om=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||H$.v4(),this.schema_table=`${this.schema}.${this.table}`}};sN.exports=om});var __=T((nae,oN)=>{"use strict";var x$=iN(),am=class extends x${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}};oN.exports=am});var cN=T((iae,aN)=>{"use strict";aN.exports=q$;var F$="inserted";function q$(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===F$?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(q$,"returnObject")});var d_=T((aae,fN)=>{"use strict";var G$=U(),cm=Ve(),k$=xo(),{getSystemSchemaPath:V$,getSchemaPath:$$}=Ye(),Y$=vi(),K$=l_(),W$=__(),Q$=cN(),{handleHDBError:uN,hdb_errors:_N}=ee(),lN=J(),{HTTP_STATUS_CODES:z$}=_N,um=Y$.hdb_attribute,dN=[];for(let e=0;e<um.attributes.length;e++)dN.push(um.attributes[e].attribute);var J$="inserted";fN.exports=X$;async function X$(e){let t=K$.attribute_object(e);if(t)throw uN(new Error,t.message,_N.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&lN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw uN(new Error,r,z$.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=lN.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 W$(e.schema,e.table,e.attribute,e.id);try{let i=await cm.openEnvironment($$(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}`);cm.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await cm.openEnvironment(V$(),G$.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await k$.insertRecords(o,um.hash_attribute,dN,[s]);return Q$(J$,c,{records:[s]},u)}catch(i){throw i}}a(X$,"lmdbCreateAttribute")});var _m=T((uae,hN)=>{var{hdb_table:j$,hdb_database:EN}=$n(),Z$=Xe(),lm=require("joi"),e1={undefined:"undefined",null:"null"},t1=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||e1[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"),r1=lm.object({database:EN,schema:EN,table:j$,records:lm.array().items(lm.object().custom(t1)).required()});hN.exports=function(e){return Z$.validateBySchema(e,r1)}});var yc=T((dae,pN)=>{"use strict";var ms=J(),mN=W(),_ae=_m(),{getDatabases:n1}=(be(),te(Fe)),{ClientError:Bi}=ee();pN.exports=s1;function s1(e){if(ms.isEmpty(e))throw new Bi("invalid update parameters defined.");if(ms.isEmptyOrZeroLength(e.schema))throw new Bi("invalid schema specified.");if(ms.isEmptyOrZeroLength(e.table))throw new Bi("invalid table specified.");if(!Array.isArray(e.records))throw new Bi("records must be an array");let t=n1()[e.schema]?.[e.table];if(ms.isEmpty(t))throw new Bi(`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&&ms.isEmptyOrZeroLength(o[r]))throw mN.error("a valid hash attribute must be provided with update record:",o),new Bi("a valid hash attribute must be provided with update record, check log for more info");if(!ms.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw mN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Bi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!ms.isEmpty(o[r])&&o[r]!==""&&n.has(ms.autoCast(o[r]))&&(o.skip=!0),n.add(ms.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(s1,"insertUpdateValidate")});var wc=T((Eae,SN)=>{"use strict";var i1=U().OPERATIONS_ENUM,dm=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=i1.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};SN.exports=dm});var Lc=T((pae,TN)=>{"use strict";var mae=wc(),f_=U(),Em=J(),fm=W(),o1=require("uuid"),{handleHDBError:Ic,hdb_errors:a1}=ee(),{HDB_ERROR_MSGS:Cc,HTTP_STATUS_CODES:Dc}=a1;TN.exports=c1;function c1(e,t,r){for(let s=0;s<t.length;s++)u1(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];l1(i,r,e.operation)}}a(c1,"processRows");function u1(e){if(Buffer.byteLength(String(e))>f_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ic(new Error,Cc.ATTR_NAME_LENGTH_ERR(e),Dc.BAD_REQUEST,void 0,void 0,!0);if(Em.isEmptyOrZeroLength(e)||Em.isEmpty(e.trim()))throw Ic(new Error,Cc.ATTR_NAME_NULLISH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0)}a(u1,"validateAttribute");function l1(e,t,r){if(!e.hasOwnProperty(t)||Em.isEmptyOrZeroLength(e[t])){if(r===f_.OPERATIONS_ENUM.INSERT||r===f_.OPERATIONS_ENUM.UPSERT){e[t]=o1.v4();return}throw fm.error("Update transaction aborted due to record with no hash value:",e),Ic(new Error,Cc.RECORD_MISSING_HASH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>f_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw fm.error(e),Ic(new Error,Cc.HASH_VAL_LENGTH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw fm.error(e),Ic(new Error,Cc.INVALID_FORWARD_SLASH_IN_HASH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0)}a(l1,"validateHash")});var RN=T((Tae,gN)=>{"use strict";var hm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};gN.exports=hm});var bN=T((Rae,ON)=>{"use strict";var mm=Ve(),_1=W(),AN=br().LMDB_ERRORS_ENUM;ON.exports=d1;async function d1(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await mm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==AN.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await mm.closeEnvironment(global.lmdb_map[n]),await mm.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==AN.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){_1.error(t)}}a(d1,"cleanLMDBMap")});var ps=T((Oae,IN)=>{"use strict";var Mc=require("crypto"),f1=Z(),{CONFIG_PARAMS:E1}=U(),yN="aes-256-cbc",h1=32,m1=16,pm=64,wN=32,p1=pm+wN,NN=new Map;IN.exports={encrypt:S1,decrypt:T1,createNatsTableStreamName:g1};function S1(e){let t=Mc.randomBytes(h1),r=Mc.randomBytes(m1),n=Mc.createCipheriv(yN,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(S1,"encrypt");function T1(e){let t=e.substr(0,pm),r=e.substr(pm,wN),n=e.substr(p1,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Mc.createDecipheriv(yN,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(T1,"decrypt");function g1(e,t){let r=f1.get(E1.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=NN.get(r);return n||(n=Mc.createHash("md5").update(r).digest("hex"),NN.set(r,n)),n}a(g1,"createNatsTableStreamName")});var Hi=T((yae,DN)=>{"use strict";var Nae=jr(),E_=W(),CN=l_(),R1=ps(),h_=J(),{handleHDBError:m_,hdb_errors:A1}=ee(),{HDB_ERROR_MSGS:p_,HTTP_STATUS_CODES:Sm}=A1,O1=Z();O1.initSync();var{getDatabases:Tm}=(be(),te(Fe));DN.exports={describeAll:b1,describeTable:S_,describeSchema:N1};async function b1(e){try{let t=h_.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=Tm(),i={},o={},c=[],u=e?.exact_count;for(let l in s){i[l]=!0,!t&&!n&&(o[l]=e.hdb_user.role.permission[l].describe);let d=s[l];for(let f in d)try{let E;if(t||n)E=await S_({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await S_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){E_.error(E)}}let _={};for(let l in c)t||n?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||n?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return E_.error("Got an error in describeAll"),E_.error(t),m_(new Error,p_.DESCRIBE_ALL_ERR)}}a(b1,"describeAll");async function S_(e,t){h_.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=CN.describe_table(e);if(i)throw i;let c=Tm()[r];if(!c)throw m_(new Error,p_.SCHEMA_NOT_FOUND(e.schema),Sm.NOT_FOUND);let u=c[n];if(!u)throw m_(new Error,p_.TABLE_NOT_FOUND(e.schema,e.table),Sm.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(s){let f={};s.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=R1.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){E_.warn(`unable to stat table dbi due to ${f}`)}return d}a(S_,"descTable");async function N1(e){h_.transformReq(e);let t=CN.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=Tm()[n];if(!i)throw m_(new Error,p_.SCHEMA_NOT_FOUND(e.schema),Sm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),h_.isEmpty(u)||u.describe){let _=await S_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(N1,"describeSchema")});var Js=T((Dae,vN)=>{var y1=vi(),{callbackify:MN,promisify:w1}=require("util"),{getDatabases:UN}=(be(),te(Fe));vN.exports={setSchemaDataToGlobal:LN,getTableSchema:I1,getSystemSchema:C1,setSchemaDataToGlobalAsync:w1(LN)};var PN=Hi(),Iae=MN(PN.describeAll),Cae=MN(PN.describeTable);function LN(e){global.hdb_schema=UN(),e&&e()}a(LN,"setSchemaDataToGlobal");function I1(e,t,r){let n=UN()[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(I1,"getTableSchema");function C1(){return y1}a(C1,"getSystemSchema")});var Zr=T((Mae,FN)=>{"use strict";var g_=_m(),Bt=J(),D1=require("util"),R_=Nn(),L1=Js(),BN=W(),{handleHDBError:xi,hdb_errors:M1}=ee(),{HTTP_STATUS_CODES:Fi}=M1,U1=D1.promisify(L1.getTableSchema),P1="updated",HN="inserted",xN="upserted";FN.exports={insert:B1,update:H1,upsert:x1,validation:v1,flush:F1};async function v1(e){if(Bt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Bt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Bt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await U1(e.schema,e.table),r=g_(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&&Bt.isEmptyOrZeroLength(c[n]))throw BN.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(!Bt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw BN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Bt.isEmpty(c[n])&&c[n]!==""&&s.has(Bt.autoCast(c[n]))&&(c.skip=!0),s.add(Bt.autoCast(c[n]));for(let u in c)i[u]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(v1,"validation");async function B1(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=g_(e);if(t)throw xi(new Error,t.message,Fi.BAD_REQUEST);Bt.transformReq(e);let r=Bt.checkSchemaTableExist(e.schema,e.table);if(r)throw xi(new Error,r,Fi.BAD_REQUEST);let n=await R_.createRecords(e);return T_(HN,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(B1,"insertData");async function H1(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=g_(e);if(t)throw xi(new Error,t.message,Fi.BAD_REQUEST);Bt.transformReq(e);let r=Bt.checkSchemaTableExist(e.schema,e.table);if(r)throw xi(new Error,r,Fi.BAD_REQUEST);let n=await R_.updateRecords(e);return Bt.isEmpty(n.existing_rows)?T_(P1,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):T_(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(H1,"updateData");async function x1(e){if(e.operation!=="upsert")throw xi(new Error,"invalid operation, must be upsert",Fi.INTERNAL_SERVER_ERROR);let t=g_(e);if(t)throw xi(new Error,t.message,Fi.BAD_REQUEST);Bt.transformReq(e);let r=Bt.checkSchemaTableExist(e.schema,e.table);if(r)throw xi(new Error,r,Fi.BAD_REQUEST);let n=await R_.upsertRecords(e);return T_(xN,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(x1,"upsertData");function T_(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===HN?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===xN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(T_,"returnObject");function F1(e){return Bt.transformReq(e),R_.flush(e.schema,e.table)}a(F1,"flush")});var Rm=T((Pae,kN)=>{var q1=Xe(),gm=require("joi"),{hdb_table:G1,hdb_database:qN}=$n(),GN={schema:qN,database:qN,table:G1},k1={date:gm.date().iso().required()},V1={timestamp:gm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};kN.exports=function(e,t){let r=t==="timestamp"?{...GN,...V1}:{...GN,...k1},n=gm.object(r);return q1.validateBySchema(e,n)}});var YN=T((vae,$N)=>{var $1=Xe(),Am=require("joi"),{hdb_table:Y1,hdb_database:VN}=$n(),K1=Am.object({schema:VN,database:VN,table:Y1,hash_values:Am.array().required(),ids:Am.array()});$N.exports=function(e){return $1.validateBySchema(e,K1)}});var WN=T((Bae,KN)=>{"use strict";var Om=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}},bm=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}},Nm=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};KN.exports={InsertObject:Om,NoSQLSeachObject:bm,DeleteResponseObject:Nm}});var ki=T((xae,jN)=>{"use strict";var zN=Rm(),W1=YN(),qi=J(),QN=require("moment"),JN=W(),{promisify:Q1,callbackify:z1}=require("util"),Gi=U(),J1=Js(),ym=Q1(J1.getTableSchema),wm=Nn(),{DeleteResponseObject:X1}=WN(),{handleHDBError:Xs,hdb_errors:j1}=ee(),{HDB_ERROR_MSGS:A_,HTTP_STATUS_CODES:js}=j1,Z1="records successfully deleted",eY=z1(XN);jN.exports={delete:eY,deleteRecord:XN,deleteFilesBefore:tY,deleteAuditLogsBefore:rY};async function tY(e){let t=zN(e,"date");if(t)throw Xs(t,t.message,js.BAD_REQUEST,void 0,void 0,!0);if(qi.transformReq(e),!QN(e.date,QN.ISO_8601).isValid())throw Xs(new Error,A_.INVALID_DATE,js.BAD_REQUEST,Gi.LOG_LEVELS.ERROR,A_.INVALID_DATE,!0);let n=qi.checkSchemaTableExist(e.schema,e.table);if(n)throw Xs(new Error,n,js.NOT_FOUND,Gi.LOG_LEVELS.ERROR,n,!0);let s=await wm.deleteRecordsBefore(e);if(await ym(e.schema,e.table),JN.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(tY,"deleteFilesBefore");async function rY(e){let t=zN(e,"timestamp");if(t)throw Xs(t,t.message,js.BAD_REQUEST,void 0,void 0,!0);if(qi.transformReq(e),isNaN(e.timestamp))throw Xs(new Error,A_.INVALID_VALUE("Timestamp"),js.BAD_REQUEST,Gi.LOG_LEVELS.ERROR,A_.INVALID_VALUE("Timestamp"),!0);let r=qi.checkSchemaTableExist(e.schema,e.table);if(r)throw Xs(new Error,r,js.NOT_FOUND,Gi.LOG_LEVELS.ERROR,r,!0);let n=await wm.deleteAuditLogsBefore(e);return await ym(e.schema,e.table),JN.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(rY,"deleteAuditLogsBefore");async function XN(e){e.ids&&(e.hash_values=e.ids);let t=W1(e);if(t)throw Xs(t,t.message,js.BAD_REQUEST,void 0,void 0,!0);qi.transformReq(e);let r=qi.checkSchemaTableExist(e.schema,e.table);if(r)throw Xs(new Error,r,js.NOT_FOUND,Gi.LOG_LEVELS.ERROR,r,!0);try{await ym(e.schema,e.table);let n=await wm.deleteRecords(e);return qi.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Z1}`),n}catch(n){if(n.message===Gi.SEARCH_NOT_FOUND_MESSAGE){let s=new X1;return s.message=Gi.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(XN,"deleteRecord")});var O_=T((qae,ty)=>{var nY=require("crypto"),ZN=9;function sY(e){let t=oY(ZN),r=ey(e+t);return t+r}a(sY,"createHash");function iY(e,t){let r=e?.substr(0,ZN),n=r+ey(t+r);return e===n}a(iY,"validateHash");function oY(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(oY,"generateSalt");function ey(e){return nY.createHash("md5").update(e).digest("hex")}a(ey,"md5");ty.exports={hash:sY,validate:iY}});var ny=T((kae,ry)=>{var Im=Xe(),Vt={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 aY(e){return Vt.password.presence=!0,Vt.username.presence=!0,Vt.role.presence=!0,Vt.active.presence=!0,Im.validateObject(e,Vt)}a(aY,"addUserValidation");function cY(e){return Vt.password.presence=!1,Vt.username.presence=!0,Vt.role.presence=!1,Vt.active.presence=!1,Im.validateObject(e,Vt)}a(cY,"alterUserValidation");function uY(e){return Vt.password.presence=!1,Vt.username.presence=!0,Vt.role.presence=!1,Vt.active.presence=!1,Im.validateObject(e,Vt)}a(uY,"dropUserValidation");ry.exports={addUserValidation:aY,alterUserValidation:cY,dropUserValidation:uY}});var tt=T((Yae,iy)=>{"use strict";var{platform:$ae}=require("os"),lY="nats-server.zip",Cm="nats-server",_Y=process.platform==="win32"?`${Cm}.exe`:Cm,Dm="HDB",dY=/^[^\s.,*>]+$/,sy="__request__",fY=a(e=>`${e}.${sy}`,"REQUEST_SUBJECT"),EY={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},hY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},mY={HUB:"hub.pid",LEAF:"leaf.pid"},pY={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},SY={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Dm,deliver_subject:"__HDB__.WORKQUEUE"},TY={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Dm,deliver_subject:"HDB.SCHEMAQUEUE"},gY={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Dm,deliver_subject:"HDB.USERQUEUE"},RY={SUCCESS:"success",ERROR:"error"},AY={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},OY={TXN:"txn",MSGID:"msgid"},qo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},bY={[qo.ERR]:1,[qo.WRN]:2,[qo.INF]:3,[qo.DBG]:4,[qo.TRC]:5},NY={debug:"-D",trace:"-DVV"};iy.exports={NATS_SERVER_ZIP:lY,NATS_SERVER_NAME:Cm,NATS_BINARY_NAME:_Y,PID_FILES:mY,NATS_CONFIG_FILES:hY,SERVER_SUFFIX:pY,WORK_QUEUE_CONSUMER_NAMES:SY,SCHEMA_QUEUE_CONSUMER_NAMES:TY,USER_QUEUE_CONSUMER_NAMES:gY,NATS_TERM_CONSTRAINTS_RX:dY,REQUEST_SUFFIX:sy,UPDATE_REMOTE_RESPONSE_STATUSES:RY,CLUSTER_STATUS_STATUSES:AY,REQUEST_SUBJECT:fY,SUBJECT_PREFIXES:OY,MSG_HEADERS:EY,LOG_LEVELS:qo,LOG_LEVEL_FLAGS:NY,LOG_LEVEL_HIERARCHY:bY}});var ay=T((Wae,oy)=>{"use strict";var b_=U(),N_=class{static{a(this,"BaseLicense")}constructor(t=0,r=b_.RAM_ALLOCATION_ENUM.DEFAULT,n=b_.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},Lm=class extends N_{static{a(this,"ExtendedLicense")}constructor(t=0,r=b_.RAM_ALLOCATION_ENUM.DEFAULT,n=b_.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};oy.exports={BaseLicense:N_,ExtendedLicense:Lm}});var Vi=T((zae,fy)=>{"use strict";var ko=require("fs-extra"),uy=O_(),ly=require("crypto"),yY=require("moment"),wY=require("uuid").v4,$t=W(),Um=require("path"),IY=J(),Zs=U(),{totalmem:cy}=require("os"),CY=ay().ExtendedLicense,Go="invalid license key format",DY="061183",LY="mofi25",MY="aes-256-cbc",UY=16,PY=32,_y=Z();_y.initSync();var Mm;fy.exports={validateLicense:dy,generateFingerPrint:BY,licenseSearch:Bm,getLicense:FY,checkMemoryLimit:qY};function Pm(){return Um.join(_y.getHdbBasePath(),Zs.LICENSE_KEY_DIR_NAME,Zs.LICENSE_FILE_NAME)}a(Pm,"getLicenseDirPath");function vY(){let e=Pm();return Um.join(e,Zs.LICENSE_FILE_NAME)}a(vY,"getLicenseFilePath");function vm(){let e=Pm();return Um.join(e,Zs.REG_KEY_FILE_NAME)}a(vm,"getFingerPrintFilePath");async function BY(){let e=vm();try{return await ko.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await HY();throw $t.error(`Error writing fingerprint file to ${e}`),$t.error(t),new Error("There was an error generating the fingerprint")}}a(BY,"generateFingerPrint");async function HY(){let e=wY(),t=uy.hash(e),r=vm();try{await ko.mkdirp(Pm()),await ko.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw $t.error(`Error writing fingerprint file to ${r}`),$t.error(n),new Error("There was an error generating the fingerprint")}return t}a(HY,"writeFingerprint");function dy(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Zs.RAM_ALLOCATION_ENUM.DEFAULT,version:Zs.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return $t.error("empty license key passed to validate."),r;let n=vm(),s=!1;try{s=ko.statSync(n)}catch(i){$t.error(i)}if(s){let i;try{i=ko.readFileSync(n,"utf8")}catch{$t.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(LY),c=o[1];c=Buffer.concat([Buffer.from(c)],UY);let u=Buffer.concat([Buffer.from(i)],PY),_=ly.createDecipheriv(MY,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=xY(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Go),$t.error(Go),new Error(Go)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Go),$t.error(Go),new Error(Go)}else r.exp_date=l;r.exp_date<yY().valueOf()&&(r.valid_date=!1),uy.validate(o[1],`${DY}${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||$t.error("Invalid licence"),r}a(dy,"validateLicense");function xY(e,t){try{let r=ly.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{$t.warn("Check old license failed")}}a(xY,"checkOldLicense");function Bm(){let e=new CY,t=[];try{t=ko.readFileSync(vY(),"utf-8").split(Zs.NEW_LINE)}catch(r){r.code==="ENOENT"?$t.info("no license file found"):$t.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(IY.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=dy(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){$t.error("There was an error parsing the license string."),$t.error(s),e.ram_allocation=Zs.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Mm=e,e}a(Bm,"licenseSearch");async function FY(){return Mm||await Bm(),Mm}a(FY,"getLicense");function qY(){let e=Bm().ram_allocation,t=process.constrainedMemory?.()||cy();if(t=Math.round(Math.min(t,cy())/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(qY,"checkMemoryLimit")});var en=T((ece,Cy)=>{"use strict";var py="username is required",Sy="nothing to update, must supply active, role or password to update",Ty="password cannot be an empty string",gy="If role is specified, it cannot be empty.",Ry="active must be true or false";Cy.exports={addUser:zY,alterUser:JY,dropUser:jY,getSuperUser:rK,userInfo:ZY,listUsers:w_,listUsersExternal:eK,setUsersToGlobal:$o,findAndValidateUser:wy,getClusterUser:nK,USERNAME_REQUIRED:py,ALTERUSER_NOTHING_TO_UPDATE:Sy,EMPTY_PASSWORD:Ty,EMPTY_ROLE:gy,ACTIVE_BOOLEAN:Ry};var Ay=Zr(),GY=ki(),Fm=O_(),Oy=ny(),by=jr(),qm=Ss(),Mr=J(),Ny=require("validate.js"),Ae=W(),{promisify:kY}=require("util"),Gm=ps(),Ey=U(),hy=tt(),VY=Ir(),Xae=Z(),jae=Vi(),$Y=vi(),{table:Zae}=(be(),te(Fe)),{handleHDBError:Kn,hdb_errors:YY}=ee(),{HTTP_STATUS_CODES:Wn,AUTHENTICATION_ERROR_MSGS:Hm,HDB_ERROR_MSGS:Vo}=YY,{UserEventMsg:km}=yn(),xm=require("lodash"),{server:Vm}=(jt(),te(Ii)),KY=W();Vm.getUser=(e,t)=>wy(e,t,t!=null);var yy={username:!0,active:!0,role:!0,password:!0},my=new Map,y_=by.searchByValue,WY=by.searchByHash,QY=kY(GY.delete);async function zY(e){let t=Ny.cleanAttributes(e,yy),r=Oy.addUserValidation(t);if(r)throw Kn(new Error,r.message,Wn.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 y_(n),s=s&&Array.from(s)}catch(u){throw Ae.error("There was an error searching for a role in add user"),Ae.error(u),u}if(!s||s.length<1)throw Kn(new Error,Vo.ROLE_NAME_NOT_FOUND(t.role),Wn.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Kn(new Error,Vo.DUP_ROLES_FOUND(t.role),Wn.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Gm.encrypt(t.password)),t.password=Fm.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Ay.insert(i)}catch(u){throw Ae.error("There was an error searching for a user."),Ae.error(u),u}Ae.debug(o);try{await $o()}catch(u){throw Ae.error("Got an error setting users to global"),Ae.error(u),u}if(o.skipped_hashes.length===1)throw Kn(new Error,Vo.USER_ALREADY_EXISTS(t.username),Wn.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],qm.signalUserChange(new km(process.pid)),`${c.username} successfully added`}a(zY,"addUser");async function JY(e){let t=Ny.cleanAttributes(e,yy);if(Mr.isEmptyOrZeroLength(t.username))throw new Error(py);if(Mr.isEmptyOrZeroLength(t.password)&&Mr.isEmptyOrZeroLength(t.role)&&Mr.isEmptyOrZeroLength(t.active))throw new Error(Sy);if(!Mr.isEmpty(t.password)&&Mr.isEmptyOrZeroLength(t.password.trim()))throw new Error(Ty);if(!Mr.isEmpty(t.active)&&!Mr.isBoolean(t.active))throw new Error(Ry);let r=XY(t.username);if(!Mr.isEmpty(t.password)&&!Mr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Gm.encrypt(t.password)),t.password=Fm.hash(t.password)),t.role==="")throw new Error(gy);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 y_(i)||[])}catch(c){throw Ae.error("Got an error searching for a role."),Ae.error(c),c}if(!o||o.length===0){let c=Vo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ae.error(c),Kn(new Error,c,Wn.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Vo.ALTER_USER_DUP_ROLES(t.role);throw Ae.error(c),Kn(new Error,c,Wn.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 Ay.update(n)}catch(i){throw Ae.error("Error during update."),Ae.error(i),i}try{await $o()}catch(i){throw Ae.error("Got an error setting users to global"),Ae.error(i),i}return qm.signalUserChange(new km(process.pid)),s}a(JY,"alterUser");function XY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(XY,"isClusterUser");async function jY(e){try{let t=Oy.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Mr.isEmpty(global.hdb_users.get(e.username)))throw Kn(new Error,Vo.USER_NOT_EXIST(e.username),Wn.NOT_FOUND,void 0,void 0,!0);let n;try{n=await QY(r)}catch(s){throw Ae.error("Got an error deleting a user."),Ae.error(s),s}Ae.debug(n);try{await $o()}catch(s){throw Ae.error("Got an error setting users to global."),Ae.error(s),s}return qm.signalUserChange(new km(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(jY,"dropUser");async function ZY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=xm.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await WY(r)}catch(s){throw Ae.error("Got an error searching for a role."),Ae.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ae.error(r),r}return t}a(ZY,"userInfo");async function eK(){let e;try{e=await w_()}catch(t){throw Ae.error("Got an error listing users."),Ae.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(eK,"listUsersExternal");async function w_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await y_(e)}catch(o){throw Ae.error("Got an error searching for roles."),Ae.error(o),o}let r={};for(let o of t)r[o.id]=xm.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 y_(n)}catch(o){throw Ae.error("Got an error searching for users."),Ae.error(o),o}let i=new Map;for(let o of s)o=xm.cloneDeep(o),o.role=r[o.role],tK(o.role),i.set(o.username,o);return i}catch(e){throw Ae.error("got an error listing users"),Ae.error(e),Mr.errorizeMessage(e)}return null}a(w_,"listUsers");function tK(e){try{if(!e){Ae.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($Y)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ae.error("Got an error trying to set system permissions."),Ae.error(t)}}a(tK,"appendSystemTablesToRole");async function $o(){try{let e=await w_();global.hdb_users=e}catch(e){throw Ae.error(e),e}}a($o,"setUsersToGlobal");async function wy(e,t,r=!0){global.hdb_users||await $o();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Kn(new Error,Hm.GENERIC_AUTH_FAIL,Wn.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Kn(new Error,Hm.USER_INACTIVE,Wn.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(my.get(t)===n.password)return s;if(Fm.validate(n.password,t))my.set(t,n.password);else throw Kn(new Error,Hm.GENERIC_AUTH_FAIL,Wn.UNAUTHORIZED,void 0,void 0,!0)}return s}a(wy,"findAndValidateUser");async function rK(){global.hdb_users||await $o();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(rK,"getSuperUser");async function nK(){let e=await w_(),t=VY.getConfigFromFile(Ey.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Mr.isEmpty(r)&&r?.role?.role===Ey.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Gm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+hy.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+hy.SERVER_SUFFIX.ADMIN,r}a(nK,"getClusterUser");var Iy=[];Vm.invalidateUser=function(e){for(let t of Iy)try{t(e)}catch(r){KY.error("Error invalidating user",r)}};Vm.onInvalidatedUser=function(e){Iy.push(e)}});var Pc=T((sce,Uy)=>{"use strict";var $i=W(),Ur=U(),sK=bN(),rce=Js(),nce=Hi(),iK=en(),{validateEvent:Dy}=yn(),Uc=Nn(),oK=require("process"),{resetDatabases:aK}=(be(),te(Fe)),cK={[Ur.ITC_EVENT_TYPES.SCHEMA]:uK,[Ur.ITC_EVENT_TYPES.USER]:My};async function uK(e){let t=Dy(e);if(t){$i.error(t);return}$i.trace("ITC schemaHandler received schema event:",e),await sK(e.message),await lK(e.message)}a(uK,"schemaHandler");async function lK(e){try{Uc.resetReadTxn(Ur.SYSTEM_SCHEMA_NAME,Ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Uc.resetReadTxn(Ur.SYSTEM_SCHEMA_NAME,Ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Uc.resetReadTxn(Ur.SYSTEM_SCHEMA_NAME,Ur.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=aK();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){$i.error(t)}}a(lK,"syncSchemaMetadata");var Ly=[];async function My(e){try{try{Uc.resetReadTxn(Ur.SYSTEM_SCHEMA_NAME,Ur.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Uc.resetReadTxn(Ur.SYSTEM_SCHEMA_NAME,Ur.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){$i.warn(r)}let t=Dy(e);if(t){$i.error(t);return}$i.trace(`ITC userHandler ${Ur.HDB_ITC_CLIENT_PREFIX}${oK.pid} received user event:`,e),await iK.setUsersToGlobal();for(let r of Ly)r()}catch(t){$i.error(t)}}a(My,"userHandler");My.addListener=function(e){Ly.push(e)};Uy.exports=cK});var yn=T((lce,vy)=>{"use strict";var oce=W(),$m=J(),_K=U(),{ITC_ERRORS:vc}=br(),{parentPort:ace,threadId:dK,isMainThread:fK,workerData:cce}=require("worker_threads"),{onMessageFromWorkers:EK,broadcast:uce,broadcastWithAcknowledgement:hK}=Ze();vy.exports={sendItcEvent:mK,validateEvent:Py,SchemaEventMsg:pK,UserEventMsg:SK};var I_;EK(async(e,t)=>{I_=I_||Pc(),Py(e),I_[e.type]&&await I_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function mK(e){return!fK&&e.message&&(e.message.originator=dK),hK(e)}a(mK,"sendItcEvent");function Py(e){if(typeof e!="object")return vc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||$m.isEmpty(e.type))return vc.MISSING_TYPE;if(!e.hasOwnProperty("message")||$m.isEmpty(e.message))return vc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||$m.isEmpty(e.message.originator))return vc.MISSING_ORIGIN;if(_K.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return vc.INVALID_EVENT(e.type)}a(Py,"validateEvent");function pK(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(pK,"SchemaEventMsg");function SK(e){this.originator=e}a(SK,"UserEventMsg")});var Ss=T((fce,Fy)=>{"use strict";var By=U(),dce=J(),C_=W(),Hy=RN(),Yo,{sendItcEvent:xy}=yn();function TK(e){try{C_.trace("signalSchemaChange called with message:",e),Yo=Yo||Pc();let t=new Hy(By.ITC_EVENT_TYPES.SCHEMA,e);return Yo.schema(t),xy(t)}catch(t){C_.error(t)}}a(TK,"signalSchemaChange");function gK(e){try{C_.trace("signalUserChange called with message:",e),Yo=Yo||Pc();let t=new Hy(By.ITC_EVENT_TYPES.USER,e);return Yo.user(t),xy(t)}catch(t){C_.error(t)}}a(gK,"signalUserChange");Fy.exports={signalSchemaChange:TK,signalUserChange:gK}});var D_=T((hce,Gy)=>{"use strict";var qy=J(),RK=U(),AK=W(),OK=d_(),bK=__(),NK=Ss(),{SchemaEventMsg:yK}=yn(),wK="already exists in";Gy.exports=IK;async function IK(e,t,r){if(qy.isEmptyOrZeroLength(r))return r;let n=[];qy.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 CK(e,t.schema,t.name,i)})),s}a(IK,"lmdbCheckForNewAttributes");async function CK(e,t,r,n){let s=new bK(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await DK(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(wK))AK.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(CK,"createNewAttribute");async function DK(e){let t;return t=await OK(e),NK.signalSchemaChange(new yK(process.pid,RK.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(DK,"createAttribute")});var Ko=T((pce,ky)=>{"use strict";var Ym=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}};ky.exports=Ym});var $y=T((Tce,Vy)=>{"use strict";var LK=Ko(),MK=U().OPERATIONS_ENUM,Km=class extends LK{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(MK.INSERT,r,n,s,i),this.records=t}};Vy.exports=Km});var Ky=T((Rce,Yy)=>{"use strict";var UK=Ko(),PK=U().OPERATIONS_ENUM,Wm=class extends UK{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(PK.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};Yy.exports=Wm});var Qy=T((Oce,Wy)=>{"use strict";var vK=Ko(),BK=U().OPERATIONS_ENUM,Qm=class extends vK{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(BK.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};Wy.exports=Qm});var Jy=T((Nce,zy)=>{"use strict";var HK=Ko(),xK=U().OPERATIONS_ENUM,zm=class extends HK{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(xK.DELETE,n,s,t,i),this.original_records=r}};zy.exports=zm});var Bc=T((Ice,ew)=>{"use strict";var wce=require("path"),Xy=Ve(),FK=$y(),qK=Ky(),GK=Qy(),kK=Jy(),Wo=lt(),jy=J(),{CONFIG_PARAMS:VK}=U(),Zy=Z();Zy.initSync();var L_=U().OPERATIONS_ENUM,{getTransactionAuditStorePath:$K}=Ye();ew.exports=YK;async function YK(e,t){if(Zy.get(VK.LOGGING_AUDITLOG)===!1)return;let r=$K(e.schema,e.table),n=await Xy.openEnvironment(r,e.table,!0),s=KK(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){Xy.initializeDBIs(n,Wo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Wo.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Wo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Wo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),jy.isEmpty(s.user_name)||n.dbis[Wo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Wo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(YK,"writeTransaction");function KK(e,t){let r=jy.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===L_.INSERT)return new FK(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===L_.UPDATE)return new qK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===L_.UPSERT)return new GK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===L_.DELETE)return new kK(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(KK,"createTransactionObject")});var Jm=T((Lce,tw)=>{"use strict";var WK=yc(),Dce=wc(),Hc=U(),QK=Lc(),zK=xo().insertRecords,JK=Ve(),XK=W(),jK=D_(),{getSchemaPath:ZK}=Ye(),eW=Bc();tw.exports=tW;async function tW(e){try{let{schema_table:t,attributes:r}=WK(e);QK(e,r,t.hash_attribute),e.schema!==Hc.SYSTEM_SCHEMA_NAME&&(r.includes(Hc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Hc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Hc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Hc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await jK(e.hdb_auth_header,t,r),s=ZK(e.schema,e.table),i=await JK.openEnvironment(s,e.table),o=await zK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await eW(e,o)}catch(c){XK.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(tW,"lmdbCreateRecords")});var sw=T((Uce,nw)=>{"use strict";var rw=U(),rW=Jm(),nW=wc(),sW=require("fs-extra"),{getSchemaPath:iW}=Ye();nw.exports=oW;async function oW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new nW(rw.SYSTEM_SCHEMA_NAME,rw.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await rW(r),await sW.mkdirp(iW(e.schema))}a(oW,"lmdbCreateSchema")});var ow=T((vce,iw)=>{"use strict";var Xm=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}};iw.exports=Xm});var lw=T((qce,uw)=>{"use strict";var aw=Ve(),jm=Cr(),Zm=br().LMDB_ERRORS_ENUM,aW=lt(),cw=W(),Hce=J(),cW=require("lmdb"),uW=ow(),lW=U(),{OVERFLOW_MARKER:xce,MAX_SEARCH_KEY_LENGTH:Fce}=aW,_W=lW.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function dW(e,t,r,n){if(jm.validateEnv(e),t===void 0)throw new Error(Zm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Zm.IDS_REQUIRED):new Error(Zm.IDS_MUST_BE_ITERABLE);try{let s=aw.listDBIs(e);aw.initializeDBIs(e,t,s);let i=new uW,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||n&&h[_W]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,cW.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 g=e.dbis[O],R=h[O];if(R!=null)try{let B=jm.getIndexedValues(R);if(B)for(let H=0,v=B.length;H<v;H++)g.remove(B[H],o)}catch{cw.warn(`cannot delete from attribute: ${O}, ${R}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){cw.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=jm.getNextMonotonicTime(),i}catch(s){throw s}}a(dW,"deleteRecords");uw.exports={deleteRecords:dW}});var xc=T((kce,dw)=>{"use strict";var Qo=J(),fW=lw(),EW=Ve(),{getSchemaPath:hW}=Ye(),mW=Bc(),pW=W();dw.exports=SW;async function SW(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Qo.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Qo.isEmptyOrZeroLength(e.hash_values)&&!Qo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];Qo.isEmpty(u)||e.hash_values.push(u)}}if(Qo.isEmptyOrZeroLength(e.hash_values))return _w([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Qo.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=hW(e.schema,e.table),i=await EW.openEnvironment(s,e.table),o=await fW.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await mW(e,o)}catch(c){pW.error(`unable to write transaction due to ${c.message}`)}return _w(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(SW,"lmdbDeleteRecords");function _w(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(_w,"createDeleteResponse")});var tp=T((Yce,fw)=>{"use strict";var TW=U(),$ce=Cr();function ep(e,t){let r=Object.create(null);if(t.length===1&&TW.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(ep,"parseRow");function gW(e,t,r,n){let s=ep(r,e);n.push(s)}a(gW,"searchAll");function RW(e,t,r,n){let s=ep(r,e);n[t]=s}a(RW,"searchAllToMap");function AW(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(AW,"iterateDBI");function Yi(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(Yi,"pushResults");function OW(e,t,r,n,s,i){t.toString().endsWith(e)&&Yi(t,r,n,s,i)}a(OW,"endsWith");function bW(e,t,r,n,s,i){t.toString().includes(e)&&Yi(t,r,n,s,i)}a(bW,"contains");function NW(e,t,r,n,s,i){t>e&&Yi(t,r,n,s,i)}a(NW,"greaterThanCompare");function yW(e,t,r,n,s,i){t>=e&&Yi(t,r,n,s,i)}a(yW,"greaterThanEqualCompare");function wW(e,t,r,n,s,i){t<e&&Yi(t,r,n,s,i)}a(wW,"lessThanCompare");function IW(e,t,r,n,s,i){t<=e&&Yi(t,r,n,s,i)}a(IW,"lessThanEqualCompare");fw.exports={parseRow:ep,searchAll:gW,searchAllToMap:RW,iterateDBI:AW,endsWith:OW,contains:bW,greaterThanCompare:NW,greaterThanEqualCompare:yW,lessThanCompare:wW,lessThanEqualCompare:IW,pushResults:Yi}});var zo=T((Jce,gw)=>{"use strict";var ei=Ve(),Wce=W(),Pr=Cr(),M_=lt(),at=br().LMDB_ERRORS_ENUM,Qce=J(),CW=U(),U_=tp(),{parseRow:DW}=U_,zce=require("lmdb"),{OVERFLOW_MARKER:Ew,MAX_SEARCH_KEY_LENGTH:LW}=M_;function hw(e,t,r,n=!1,s=void 0,i=void 0){return Ki(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(hw,"iterateFullIndex");function Fc(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Ki(e,t,r,(l,d,f,E)=>{let g={transaction:l,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(g.values=!1,d.getRange(g).map(R=>({value:R}))):d.getRange(g)})}a(Fc,"iterateRangeBetween");function Ki(e,t,r,n){let s=e.database||e,i=ei.openDBI(s,r);i[M_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ei.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(Ki,"setupTransaction");function mw(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(Ew)){if(!s)if(r)s=ei.openDBI(e,r);else{let u=ei.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=ei.openDBI(e,u[_]),!s[M_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(mw,"getOverflowCheck");function MW(e,t,r,n=!1,s=void 0,i=void 0){if(Pr.validateEnv(e),t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);return Ki(e,t,t,(o,c,u)=>(P_(r),r=qc(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>DW(_.value,r))))}a(MW,"searchAll");function UW(e,t,r,n=!1,s=void 0,i=void 0){if(Pr.validateEnv(e),t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);P_(r),r=qc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of hw(e,t,t,n,s,i))o.set(c,U_.parseRow(u,r));return o}a(UW,"searchAllToMap");function PW(e,t,r=!1,n=void 0,s=void 0){if(Pr.validateEnv(e),t===void 0)throw new Error(at.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=hw(e,void 0,t,r,n,s),c=o.transaction,u=mw(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(PW,"iterateDBI");function vW(e,t){if(Pr.validateEnv(e),t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);return ei.statDBI(e,t).entryCount}a(vW,"countAll");function BW(e,t,r,n,s=!1,i=void 0,o=void 0){return ti(e,r,n),Ki(e,t,r,(c,u,_,l)=>(n=Pr.convertKeyValueToWrite(n),l===r?u.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:u.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(BW,"equals");function HW(e,t,r){return ti(e,t,r),ei.openDBI(e,t).getValuesCount(r)}a(HW,"count");function xW(e,t,r,n,s=!1,i=void 0,o=void 0){return ti(e,r,n),Ki(e,null,r,(c,u)=>{n=Pr.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let l;if(s===!0){let d;for(let f of u.getKeys({transaction:c,start:n}))if(!f.startsWith(n)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.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 l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(xW,"startsWith");function FW(e,t,r,n,s=!1,i=void 0,o=void 0){return pw(e,t,r,n,s,i,o,!0)}a(FW,"endsWith");function pw(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ti(e,r,n),Ki(e,null,r,(u,_,l,d)=>{let f=mw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:s?!1:void 0,reverse:s}).flatMap(E=>{let h=E.toString();return h.endsWith(Ew)?_.getValues(E,{transaction:u}).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))?_[M_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(pw,"contains");function qW(e,t,r,n,s=!1,i=void 0,o=void 0){ti(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Fc(e,t,r,n,u,s,i,o,!0,!1)}a(qW,"greaterThan");function GW(e,t,r,n,s=!1,i=void 0,o=void 0){ti(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Fc(e,t,r,n,u,s,i,o,!1,!1)}a(GW,"greaterThanEqual");function kW(e,t,r,n,s=!1,i=void 0,o=void 0){ti(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Fc(e,t,r,u,n,s,i,o,!1,!0)}a(kW,"lessThan");function VW(e,t,r,n,s=!1,i=void 0,o=void 0){ti(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Fc(e,t,r,u,n,s,i,o,!1,!1)}a(VW,"lessThanEqual");function $W(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Pr.validateEnv(e),r===void 0)throw new Error(at.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(at.START_VALUE_REQUIRED);if(s===void 0)throw new Error(at.END_VALUE_REQUIRED);if(n=Pr.convertKeyValueToWrite(n),s=Pr.convertKeyValueToWrite(s),n>s)throw new Error(at.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Fc(e,t,r,n,s,i,o,c)}a($W,"between");function YW(e,t,r,n){Pr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);if(P_(r),r=qc(s,r),n===void 0)throw new Error(at.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=U_.parseRow(c,r)),o}a(YW,"searchByHash");function KW(e,t,r){Pr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(at.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(KW,"checkHashExists");function WW(e,t,r,n,s=[]){return Tw(e,t,r,n,s),Sw(e,t,r,n,s).map(i=>i[1])}a(WW,"batchSearchByHash");function QW(e,t,r,n,s=[]){Tw(e,t,r,n,s);let i=new Map;for(let[o,c]of Sw(e,t,r,n,s))i.set(o,c);return i}a(QW,"batchSearchByHashToMap");function Sw(e,t,r,n,s=[]){return Ki(e,t,t,(i,o,c)=>{r=qc(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,U_.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(Sw,"batchHashSearch");function Tw(e,t,r,n,s){if(Pr.validateEnv(e),t===void 0)throw new Error(at.HASH_ATTRIBUTE_REQUIRED);if(P_(r),n==null)throw new Error(at.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(at.IDS_MUST_BE_ITERABLE)}a(Tw,"initializeBatchSearchByHash");function P_(e){if(!Array.isArray(e))throw e===void 0?new Error(at.FETCH_ATTRIBUTES_REQUIRED):new Error(at.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(P_,"validateFetchAttributes");function ti(e,t,r){if(Pr.validateEnv(e),t===void 0)throw new Error(at.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(at.SEARCH_VALUE_REQUIRED);if(r?.length>LW)throw new Error(at.SEARCH_VALUE_TOO_LARGE)}a(ti,"validateComparisonFunctions");function qc(e,t){return t.length===1&&CW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ei.listDBIs(e)),t}a(qc,"setGetWholeRowAttributes");gw.exports={searchAll:MW,searchAllToMap:UW,count:HW,countAll:vW,equals:BW,startsWith:xW,endsWith:FW,contains:pw,searchByHash:YW,setGetWholeRowAttributes:qc,batchSearchByHash:WW,batchSearchByHashToMap:QW,checkHashExists:KW,iterateDBI:PW,greaterThan:qW,greaterThanEqual:GW,lessThan:kW,lessThanEqual:VW,between:$W}});var Jo=T((jce,Nw)=>{var Rw=require("lodash"),Aw=Xe(),me=require("joi"),zW=J(),{hdb_schema_table:Gc,checkValidTable:Ow,hdb_table:bw,hdb_database:v_}=$n(),{handleHDBError:JW,hdb_errors:XW}=ee(),{getDatabases:jW}=(be(),te(Fe)),{HTTP_STATUS_CODES:ZW}=XW,eQ=me.object({database:v_,schema:v_,table:bw,search_attribute:Gc,search_value:me.any().required(),get_attributes:me.array().min(1).items(me.alternatives(Gc,me.object())).optional(),desc:me.bool(),limit:me.number().integer().min(1),offset:me.number().integer().min(0)}),tQ=me.object({database:v_,schema:v_,table:bw,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(Gc,me.object())).optional(),sort:me.object({attribute:me.alternatives(Gc,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(Gc,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()});Nw.exports=function(e,t){let r=null;switch(t){case"value":r=Aw.validateBySchema(e,eQ);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(Ow("database",e.schema)),i(Ow("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=Aw.validateBySchema(e,tQ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=zW.checkGlobalSchemaTable(e.schema,e.table);if(s)return JW(new Error,s,ZW.NOT_FOUND);let o=jW()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,f=l.conditions.length;d<f;d++){let E=l.conditions[d];E.conditions?u(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=Rw.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!Rw.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var rp=T((eue,yw)=>{"use strict";var rQ=Ve(),nQ=Jo(),{getSchemaPath:sQ}=Ye();yw.exports=iQ;function iQ(e){let t=nQ(e,"hashes");if(t)throw t;let r=sQ(e.schema,e.table);return rQ.openEnvironment(r,e.table)}a(iQ,"initialize")});var np=T((rue,ww)=>{"use strict";var oQ=zo(),aQ=rp();ww.exports=cQ;async function cQ(e){let t=await aQ(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return oQ.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(cQ,"lmdbGetDataByHash")});var Xo=T((sue,Iw)=>{"use strict";var sp=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};Iw.exports=sp});var Dw=T((aue,Cw)=>{"use strict";var oue=Xo(),uQ=zo(),lQ=rp();Cw.exports=_Q;async function _Q(e){let t=await lQ(e),r=global.hdb_schema[e.schema][e.table];return uQ.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(_Q,"lmdbSearchByHash")});var Qn=T((uue,Lw)=>{"use strict";var ip=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,u=!1,_=void 0,l=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=u,this.limit=_,this.offset=l}};Lw.exports=ip});var B_=T((_ue,Hw)=>{"use strict";var Yt=zo(),dQ=Ve(),fQ=J(),pe=lt(),Wi=U(),EQ=vi(),Mw=br().LMDB_ERRORS_ENUM,{getSchemaPath:hQ}=Ye(),Ts=Wi.SEARCH_WILDCARDS;async function mQ(e,t,r){let n;e.schema===Wi.SYSTEM_SCHEMA_NAME?n=EQ[e.table]:n=global.hdb_schema[e.schema][e.table];let s=Bw(e,n.hash_attribute,r,t);return Pw(e,s,n.hash_attribute,r)}a(mQ,"prepSearch");async function Pw(e,t,r,n){let s=hQ(e.schema,e.table),i=await dQ.openEnvironment(s,e.table),o=vw(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(pQ(e,r)===!1){let l=e.search_attribute;if(l===r)return n?Uw(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return n?Uw(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return n===!0?Yt.batchSearchByHashToMap(c,r,e.get_attributes,_):Yt.batchSearchByHash(c,r,e.get_attributes,_)}a(Pw,"executeSearch");function vw(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case pe.SEARCH_TYPES.EQUALS:s=Yt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case pe.SEARCH_TYPES.CONTAINS:s=Yt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case pe.SEARCH_TYPES.ENDS_WITH:case pe.SEARCH_TYPES._ENDS_WITH:s=Yt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case pe.SEARCH_TYPES.STARTS_WITH:case pe.SEARCH_TYPES._STARTS_WITH:s=Yt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Yt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Yt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.SEARCH_ALL:return Yt.searchAll(e,n,t.get_attributes,o,c,u);case pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Yt.searchAllToMap(e,n,t.get_attributes,o,c,u);case pe.SEARCH_TYPES.BETWEEN:s=Yt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case pe.SEARCH_TYPES.GREATER_THAN:case pe.SEARCH_TYPES._GREATER_THAN:s=Yt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case pe.SEARCH_TYPES.GREATER_THAN_EQUAL:case pe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Yt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case pe.SEARCH_TYPES.LESS_THAN:case pe.SEARCH_TYPES._LESS_THAN:s=Yt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case pe.SEARCH_TYPES.LESS_THAN_EQUAL:case pe.SEARCH_TYPES._LESS_THAN_EQUAL:s=Yt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return s}a(vw,"searchByType");function Uw(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(Uw,"createMapFromIterable");function pQ(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(pQ,"checkToFetchMore");function Bw(e,t,r,n){if(fQ.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),Ts.indexOf(s)>-1)return r===!0?pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:pe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Ts[0])<0&&s.indexOf(Ts[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(Ts.indexOf(i)>=0&&Ts.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),pe.SEARCH_TYPES.CONTAINS;if(Ts.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),pe.SEARCH_TYPES.ENDS_WITH;if(Ts.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),pe.SEARCH_TYPES.STARTS_WITH;if(s.includes(Ts[0])||s.includes(Ts[1]))return pe.SEARCH_TYPES.EQUALS;throw new Error(Mw.UNKNOWN_SEARCH_TYPE)}else switch(n){case Wi.VALUE_SEARCH_COMPARATORS.BETWEEN:return pe.SEARCH_TYPES.BETWEEN;case Wi.VALUE_SEARCH_COMPARATORS.GREATER:return pe.SEARCH_TYPES.GREATER_THAN;case Wi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return pe.SEARCH_TYPES.GREATER_THAN_EQUAL;case Wi.VALUE_SEARCH_COMPARATORS.LESS:return pe.SEARCH_TYPES.LESS_THAN;case Wi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return pe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Mw.UNKNOWN_SEARCH_TYPE)}}a(Bw,"createSearchTypeFromSearchObject");Hw.exports={executeSearch:Pw,createSearchTypeFromSearchObject:Bw,prepSearch:mQ,searchByType:vw}});var Fw=T((Eue,xw)=>{"use strict";var fue=Qn(),SQ=Jo(),TQ=J(),gQ=U(),RQ=B_();xw.exports=AQ;function AQ(e,t){if(!TQ.isEmpty(t)&&gQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=SQ(e,"value");if(n)throw n;return RQ.prepSearch(e,t,!0)}a(AQ,"lmdbGetDataByValue")});var kc=T((pue,qw)=>{"use strict";var mue=Qn(),OQ=Jo(),bQ=J(),NQ=U(),yQ=B_();qw.exports=wQ;async function wQ(e,t){if(!bQ.isEmpty(t)&&NQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=OQ(e,"value");if(n)throw n;return yQ.prepSearch(e,t,!1)}a(wQ,"lmdbSearchByValue")});var kw=T((gue,Gw)=>{"use strict";var Tue=lt(),op=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}},ap=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},cp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Gw.exports={SearchByConditionsObject:op,SearchCondition:ap,SortAttribute:cp}});var Ww=T((bue,Kw)=>{"use strict";var Aue=kw().SearchByConditionsObject,IQ=Qn(),CQ=Jo(),up=zo(),H_=lt(),{Resource:Oue}=(An(),te(lp)),Yw=B_(),DQ=tp(),LQ=require("lodash"),{getSchemaPath:MQ}=Ye(),Vw=Ve(),{handleHDBError:UQ,hdb_errors:PQ}=ee(),{HTTP_STATUS_CODES:vQ}=PQ,BQ=1e8;Kw.exports=HQ;async function HQ(e){let t=CQ(e,"conditions");if(t)throw UQ(t,t.message,vQ.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=MQ(e.schema,e.table),n=await Vw.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Vw.openDBI(n,_.search_attribute);let i=LQ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===H_.SEARCH_TYPES.EQUALS?_.estimated_count=up.count(n,_.search_attribute,_.search_value):l===H_.SEARCH_TYPES.CONTAINS||l===H_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=BQ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await $w(o,e,i[0],s.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],l=i.slice(1).map(Yw.filterByType),d=l.length,f=up.setGetWholeRowAttributes(n,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>DQ.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await $w(o,e,f,s.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=up.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(HQ,"lmdbSearchByConditions");async function $w(e,t,r,n){let s=new IQ(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===H_.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,Yw.searchByType(e,s,i,n).map(o=>o.value)}a($w,"executeConditionSearch")});var Vc=T((yue,Qw)=>{"use strict";var xQ=U().OPERATIONS_ENUM,_p=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=xQ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};Qw.exports=_p});var dp=T((Iue,rI)=>{"use strict";var jw=Qn(),Zw=Vc(),eI=kc(),tI=xc(),rr=U(),zw=J(),Jw=Ve(),{getTransactionAuditStorePath:FQ,getSchemaPath:qQ}=Ye(),Xw=W();rI.exports=GQ;async function GQ(e){try{if(zw.isEmpty(global.hdb_schema[e.schema])||zw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await kQ(e),await VQ(e);let t=qQ(e.schema,e.table);try{await Jw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Xw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=FQ(e.schema,e.table);await Jw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Xw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(GQ,"lmdbDropTable");async function kQ(e){let t=new jw(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await eI(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 Zw(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await tI(s)}a(kQ,"deleteAttributesFromSystem");async function VQ(e){let t=new jw(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await eI(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 Zw(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await tI(s)}catch(i){throw i}}a(VQ,"dropTableFromSystem")});var sI=T((Due,nI)=>{"use strict";var $Q=require("fs-extra"),YQ=Qn(),KQ=Xo(),WQ=Vc(),QQ=dp(),zQ=xc(),JQ=np(),XQ=kc(),gs=U(),{getSchemaPath:jQ}=Ye(),{handleHDBError:ZQ,hdb_errors:ez}=ee(),{HDB_ERROR_MSGS:tz,HTTP_STATUS_CODES:rz}=ez;nI.exports=nz;async function nz(e){let t;try{t=await sz(e.schema);let r=new YQ(gs.SYSTEM_SCHEMA_NAME,gs.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,gs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[gs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await XQ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await QQ(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new WQ(gs.SYSTEM_SCHEMA_NAME,gs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await zQ(s);let i=jQ(t);await $Q.remove(i)}catch(r){throw r}}a(nz,"lmdbDropSchema");async function sz(e){let t=new KQ(gs.SYSTEM_SCHEMA_NAME,gs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[gs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await JQ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw ZQ(new Error,tz.SCHEMA_NOT_FOUND(e),rz.NOT_FOUND,void 0,void 0,!0);return n}a(sz,"validateDropSchema")});var Ep=T((Mue,iI)=>{"use strict";var fp=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};iI.exports=fp});var aI=T((vue,oI)=>{"use strict";var iz=require("fs-extra"),x_=Ve(),{getTransactionAuditStorePath:oz}=Ye(),hp=lt(),Pue=Ep();oI.exports=az;async function az(e){let t;try{let r=oz(e.schema,e.table);await iz.mkdirp(r),t=await x_.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{x_.createDBI(t,hp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),x_.createDBI(t,hp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),x_.createDBI(t,hp.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(az,"createTransactionsAuditEnvironment")});var _I=T((Hue,lI)=>{"use strict";var mp=U(),cI=Ve(),cz=xo(),{getSystemSchemaPath:uz,getSchemaPath:lz}=Ye(),_z=vi(),dz=d_(),pp=__(),fz=W(),Ez=aI(),Tp=_z.hdb_table,uI=[];for(let e=0;e<Tp.attributes.length;e++)uI.push(Tp.attributes[e].attribute);lI.exports=hz;async function hz(e,t){let r=lz(t.schema,t.table),n=new pp(t.schema,t.table,mp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new pp(t.schema,t.table,mp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new pp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await cI.createEnvironment(r,t.table),e!==void 0){let o=await cI.openEnvironment(uz(),mp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await cz.insertRecords(o,Tp.hash_attribute,uI,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Sp(n),await Sp(s),await Sp(i)}await Ez(t)}catch(o){throw o}}a(hz,"lmdbCreateTable");async function Sp(e){try{await dz(e)}catch(t){fz.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Sp,"createAttribute")});var fI=T((Fue,dI)=>{"use strict";var mz=yc(),pz=Lc(),Sz=D_(),$c=U(),Tz=xo().updateRecords,gz=Ve(),{getSchemaPath:Rz}=Ye(),Az=Bc(),Oz=W();dI.exports=bz;async function bz(e){try{let{schema_table:t,attributes:r}=mz(e);pz(e,r,t.hash_attribute),e.schema!==$c.SYSTEM_SCHEMA_NAME&&(r.includes($c.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push($c.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes($c.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push($c.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Sz(e.hdb_auth_header,t,r),s=Rz(e.schema,e.table),i=await gz.openEnvironment(s,e.table),o=await Tz(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Az(e,o)}catch(c){Oz.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(bz,"lmdbUpdateRecords")});var hI=T((Gue,EI)=>{"use strict";var Nz=U().OPERATIONS_ENUM,gp=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Nz.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};EI.exports=gp});var pI=T(($ue,mI)=>{"use strict";var Vue=hI(),yz=yc(),wz=Lc(),Iz=D_(),Yc=U(),Cz=xo().upsertRecords,Dz=Ve(),{getSchemaPath:Lz}=Ye(),Mz=Bc(),Uz=W(),{handleHDBError:Pz,hdb_errors:vz}=ee();mI.exports=Bz;async function Bz(e){let t;try{t=yz(e)}catch(u){throw Pz(u,u.message,vz.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;wz(e,n,r.hash_attribute),e.schema!==Yc.SYSTEM_SCHEMA_NAME&&(n.includes(Yc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Yc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Yc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Yc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Iz(e.hdb_auth_header,r,n),i=Lz(e.schema,e.table),o=await Dz.openEnvironment(i,e.table),c=await Cz(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await Mz(e,c)}catch(u){Uz.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(Bz,"lmdbUpsertRecords")});var TI=T((Kue,SI)=>{"use strict";var Rp=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};SI.exports=Rp});var RI=T((Que,gI)=>{"use strict";var Ap=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}};gI.exports=Ap});var bI=T((Xue,OI)=>{"use strict";var Op=Ve(),{getTransactionAuditStorePath:Hz}=Ye(),Jue=TI(),Kc=lt(),xz=J(),AI=RI(),Fz=require("util").promisify,qz=Fz(setTimeout),Gz=1e4,kz=100;OI.exports=Vz;async function Vz(e){let t=Hz(e.schema,e.table),r=await Op.openEnvironment(t,e.table,!0),n=Op.listDBIs(r);Op.initializeDBIs(r,Kc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new AI;do s=await $z(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 qz(kz);while(s.transactions_deleted>0);return i}a(Vz,"deleteAuditLogsBefore");async function $z(e,t){let r=new AI;try{let n=e.dbis[Kc.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[Kc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];xz.isEmpty(c)||(s=e.dbis[Kc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[Kc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Gz)break}return await s,r}catch(n){throw n}}a($z,"deleteTransactions")});var yI=T((Zue,NI)=>{"use strict";var bp=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};NI.exports=bp});var II=T((rle,wI)=>{"use strict";var Yz=Qn(),Kz=Vc(),tle=yI(),zn=U(),Wz=J(),Np=Ve(),Qz=vi(),zz=kc(),Jz=xc(),{getSchemaPath:Xz}=Ye();wI.exports=jz;async function jz(e,t=!0){let r;e.schema===zn.SYSTEM_SCHEMA_NAME?r=Qz[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await eJ(e),s=Xz(e.schema,e.table),i=await Np.openEnvironment(s,e.table);return t===!0&&await Zz(e,i,r.hash_attribute),Np.dropDBI(i,e.attribute),n}a(jz,"lmdbDropAttribute");async function Zz(e,t,r){let n=Np.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:u}of n.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);s=t.dbis[r].put(o,_,u)}await s}a(Zz,"removeAttributeFromAllObjects");async function eJ(e){let t=new Yz(zn.SYSTEM_SCHEMA_NAME,zn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,zn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[zn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,zn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await zz(t)).filter(o=>o[zn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Wz.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[zn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Kz(zn.SYSTEM_SCHEMA_NAME,zn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Jz(i)}a(eJ,"dropAttributeFromSystem")});var PI=T((ile,UI)=>{"use strict";var yp=Ve(),jo=lt(),sle=Cr(),wp=U(),CI=J(),{getTransactionAuditStorePath:tJ}=Ye(),rJ=zo(),F_=Ko(),nJ=W();UI.exports=sJ;async function sJ(e){let t=tJ(e.schema,e.table),r=await yp.openEnvironment(t,e.table,!0),n=yp.listDBIs(r);yp.initializeDBIs(r,jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return DI(r,e.search_values);case wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,oJ(r,e.search_values,s);case wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return iJ(r,e.search_values);default:return DI(r)}}a(sJ,"readAuditLog");function DI(e,t=[0,Date.now()]){CI.isEmpty(t[0])&&(t[0]=0),CI.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[jo.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 F_,s))}a(DI,"searchTransactionsByTimestamp");function iJ(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[jo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,MI(e,i))}return Object.fromEntries(r)}a(iJ,"searchTransactionsByUsername");function oJ(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=rJ.equals(e,jo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,jo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);n.has(f)?n.get(f).push(_.toString()):n.set(f,[_.toString()])}}let s=Array.from(n.keys()),i=MI(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);LI(u,"records",r,l,o),LI(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(oJ,"searchTransactionsByHashValues");function LI(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],u=c[r].toString();if(n.indexOf(u)>=0)if(s.has(u)){let _=s.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new F_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new F_(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(LI,"loopRecords");function MI(e,t){let r=[];try{let n=e.dbis[jo.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 F_,i);r.push(o)}}catch(i){nJ.warn(i)}return r}catch(n){throw n}}a(MI,"batchSearchTransactions")});var BI=T((ule,vI)=>{"use strict";var{getSchemaPath:ale}=Ye(),cle=Ve(),{database:aJ}=(be(),te(Fe));vI.exports={writeTransaction:cJ};async function cJ(e,t,r){return aJ({database:e,table:t}).transaction(r)}a(cJ,"writeTransaction")});var qI=T((_le,FI)=>{"use strict";var{getSchemaPath:HI}=Ye(),xI=Ve();FI.exports={flush:uJ,resetReadTxn:lJ};async function uJ(e,t){return(await xI.openEnvironment(HI(e,t),t.toString())).flushed}a(uJ,"flush");async function lJ(e,t){try{(await xI.openEnvironment(HI(e,t),t.toString())).resetReadTxn()}catch{}}a(lJ,"resetReadTxn")});var $I=T((fle,VI)=>{"use strict";var{Readable:_J}=require("stream"),{getDatabases:dJ}=(be(),te(Fe)),{readSync:fJ,openSync:EJ,createReadStream:GI}=require("fs"),{open:hJ}=require("lmdb"),kI=t_(),mJ=n_(),{AUDIT_STORE_OPTIONS:pJ}=(Ui(),te(YI)),{INTERNAL_DBIS_NAME:SJ,AUDIT_STORE_NAME:TJ}=lt();VI.exports=RJ;var Ip=32768,gJ=100;async function RJ(e){let t=e.database||e.schema||"data",r=dJ()[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 l=_.dbisDB,d=hJ({noSync:!0,maxDbs:mJ.MAX_DBS}),f,E=d.openDB(SJ,new kI(!1)),h=l.useReadTransaction(),p=0,S=a(async function(g,R){R.encoding="binary",R.encoder=void 0;let B=d.openDB(g,R),H=l.openDB(g,R);for(let{key:v,version:M,value:$}of H.getRange({transaction:h,versions:H.useVersions}))f=B.put(v,$,M),p++%gJ===0&&(await new Promise(K=>setTimeout(K,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:g,value:R}of l.getRange({transaction:h,start:!1}))if(s.some(B=>g.startsWith?.(B+"/"))){E.put(g,R);let[,B]=g.split("/"),H=!B,v=new kI(!H,H);await S(g,v)}e.include_audit&&await S(TJ,Object.assign({},pJ)),await f;let O=GI(d.path);return O.headers=u(),O.on("close",()=>{h.done(),d.close()}),O}let o=r[Object.keys(r)[0]].primaryStore,c=EJ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Ip);fJ(c,_,0,Ip),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=GI(null,{fd:c,start:Ip}),f=new _J.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(RJ,"getBackup")});var QI=T((hle,WI)=>{"use strict";var AJ=W(),{handleHDBError:OJ}=ee(),bJ=Nb(),NJ=d_(),yJ=Jm(),wJ=sw(),IJ=xc(),CJ=np(),DJ=Dw(),LJ=Fw(),MJ=kc(),UJ=Ww(),PJ=sI(),vJ=_I(),BJ=fI(),HJ=pI(),xJ=bI(),FJ=dp(),qJ=II(),GJ=PI(),kJ=BI(),KI=qI(),VJ=$I(),Cp=class extends bJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return UJ(t)}async getDataByHash(t){return await CJ(t)}async searchByHash(t){return await DJ(t)}async getDataByValue(t,r){return await LJ(t,r)}async searchByValue(t){return await MJ(t)}async createSchema(t){return await wJ(t)}async dropSchema(t){return await PJ(t)}async createTable(t,r){return await vJ(t,r)}async dropTable(t){return await FJ(t)}async createAttribute(t){return await NJ(t)}async createRecords(t){return await yJ(t)}async updateRecords(t){return await BJ(t)}async upsertRecords(t){try{return await HJ(t)}catch(r){throw OJ(r,null,null,AJ.ERR,r)}}async deleteRecords(t){return await IJ(t)}async dropAttribute(t){return await qJ(t)}async deleteAuditLogsBefore(t){return await xJ(t)}async readAuditLog(t){return await GJ(t)}writeTransaction(t,r,n){return kJ.writeTransaction(t,r,n)}flush(t,r){return KI.flush(t,r)}resetReadTxn(t,r){return KI.resetReadTxn(t,r)}getBackup(t){return VJ(t)}};WI.exports=Cp});function WJ(){KJ=setInterval(function(){for(let e of Dp)if(e.stale){let t=e[Ne]?.url;zI.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},YJ).unref()}var Lp,zI,$J,Dp,Qi,q_,YJ,KJ,Mp=Oe(()=>{Lp=x(Cr()),zI=x(W());An();Bo();$J=100,Dp=new Set,Qi=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,Zl(()=>{this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0)}),Dp.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),Zl(()=>{this.readTxn.use()}),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Dp.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,Lp.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let 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(l){throw this.abort(),l}n||this.doneReadTxn(),t?.prepared?.(),this.open=!1;let s,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,n)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){n>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);s=s||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<$J>>n?u():s=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),s)return s.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=n+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=!1,this.writes=[]}},q_=class extends Qi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Lp.getNextMonotonicTime)())}getReadTxn(){}},YJ=3e4;a(WJ,"startMonitoringTxns");WJ()});function Ke(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 Qi;e.timestamp&&(n.timestamp=e.timestamp),n[Ne]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let u=n.commit(r?.resetTransaction?{prepared(){n.autoCommitMode=!0}}:{});return u.then?u.then(()=>c):c}function o(c){throw n.abort({}),c}}var JI,zi=Oe(()=>{JI=require("../../index");An();Mp();a(Ke,"transaction");(0,JI._assignPackageExport)("transaction",Ke);Ke.commit=function(e){let t=(e[Ne]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ke.abort=function(e){let t=(e[Ne]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var iC={};ke(iC,{ResourceBridge:()=>vp});function Bp({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 jI(e,t){let r=Jn(e),n=Bp(e,r);if(!r)throw new wn.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;Ke(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:s,select:n},i);return l=l&&k_(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function Jn(e){let t=e.database||e.schema||zJ,r=In()[t];if(!r)throw(0,wn.handleHDBError)(new Error,QJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function ZI(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*eC(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:u}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(u)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[u]})}n&&(yield n)}var tC,G_,wn,rC,nC,Cn,Up,Pp,sC,QJ,zJ,JJ,XJ,XI,vp,oC=Oe(()=>{"use strict";tC=x(QI()),G_=x(Jo()),wn=x(ee());be();rC=x(yc()),nC=x(Lc()),Cn=x(U()),Up=x(Ss()),Pp=x(yn()),sC=x(J());zi();V_();({HDB_ERROR_MSGS:QJ}=wn.hdb_errors),zJ="data",JJ=1e4,XJ=10,vp=class extends tC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),XI=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,G_.default)(t,"conditions");if(r)throw(0,wn.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Jn(t);if(!n)throw new wn.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:Bp(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 wn.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}]}ot({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await Jn(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Jn(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,u)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,u),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Jn(t).dropTable()}createSchema(t){return Wc({database:t.schema,table:null}),Up.signalSchemaChange(new Pp.SchemaEventMsg(process.pid,Cn.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Hp(t.schema),Up.signalSchemaChange(new Pp.SchemaEventMsg(process.pid,Cn.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,XI.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,rC.default)(t);(0,nC.default)(t,n,r.primaryKey);let s,i=In()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Ke(o,async c=>{if(!i.schemaDefined){s=[];for(let l of n)i.attributes.find(f=>f.name==l)||s.push(l);s.length>0&&await i.addAttributes(s.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=k_(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=In()[t.schema][t.table],n={user:t.hdb_user};return Ke(n,async s=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,n)?o.push(u):c.push(u);return ZI(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=In()[t.schema][t.table];if(!r.createdTimeProperty)throw new wn.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:Cn.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,sC.async_set_timeout)(XJ),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%JJ===0&&await _();return u.length>0&&await _(),s?ZI(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,G_.default)(t,"hashes");if(r)throw r;return jI(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of jI(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Cn.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,G_.default)(t,"value");if(n)throw n;let s=Jn(t);if(!s)throw new wn.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===Cn.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:Bp(t,s)})}async getDataByValue(t,r){let n=new Map,s=Jn(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){Jn({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Jn(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Jn(t),n={};switch(t.search_type){case Cn.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 Cn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of eC(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return eC(r,t.search_values?.[0],t.search_values?.[1])}}};a(Bp,"getSelect");a(jI,"getRecords");a(Jn,"getTable");a(ZI,"createDeleteResponse");a(eC,"groupRecordsInHistory")});var Nn=T((Dle,aC)=>{"use strict";var{ResourceBridge:jJ}=(oC(),te(iC)),ZJ=Z();ZJ.initSync();var $_;function e2(){return $_||($_=new jJ,$_)}a(e2,"getBridge");aC.exports=e2()});var _C=T((Mle,lC)=>{"use strict";var cC=require("lodash"),Qc=require("mathjs"),t2=require("jsonata"),uC=J();lC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?cC.uniqWith(e,cC.isEqual):e,searchJSON:r2,mad:zc.bind(null,Qc.mad),mean:zc.bind(null,Qc.mean),mode:zc.bind(null,Qc.mode),prod:zc.bind(null,Qc.prod),median:zc.bind(null,Qc.median)};function zc(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(zc,"aggregateFunction");function r2(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(uC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),uC.isEmpty(this.__ala__.res[r])){let n=t2(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(r2,"searchJSON")});var fC=T((Ple,dC)=>{"use strict";var dt=require("moment"),xp="YYYY-MM-DDTHH:mm:ss.SSSZZ";dt.suppressDeprecationWarnings=!0;dC.exports={current_date:()=>dt().utc().format("YYYY-MM-DD"),current_time:()=>dt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return dt(e).utc().format("YYYY");case"month":return dt(e).utc().format("MM");case"day":return dt(e).utc().format("DD");case"hour":return dt(e).utc().format("HH");case"minute":return dt(e).utc().format("mm");case"second":return dt(e).utc().format("ss");case"millisecond":return dt(e).utc().format("SSS");default:break}},date:e=>dt(e).utc().format(xp),date_format:(e,t)=>dt(e).utc().format(t),date_add:(e,t,r)=>dt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>dt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=dt(e).utc(),s=dt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>dt().utc().valueOf(),get_server_time:()=>dt().format(xp),offset_utc:(e,t)=>dt(e).utc().utcOffset(t).format(xp)}});var pC=T((vle,mC)=>{"use strict";var n2=require("@turf/area"),s2=require("@turf/length"),i2=require("@turf/circle"),o2=require("@turf/difference"),a2=require("@turf/distance"),c2=require("@turf/boolean-contains"),u2=require("@turf/boolean-equal"),l2=require("@turf/boolean-disjoint"),_2=require("@turf/helpers"),EC=U(),ge=J(),Rs=W();mC.exports={geoArea:d2,geoLength:f2,geoCircle:E2,geoDifference:h2,geoDistance:hC,geoNear:m2,geoContains:p2,geoEqual:S2,geoCrosses:T2,geoConvert:g2};function d2(e){if(ge.isEmpty(e))return NaN;typeof e=="string"&&(e=ge.autoCastJSON(e));try{return n2.default(e)}catch(t){return Rs.trace(t,e),NaN}}a(d2,"geoArea");function f2(e,t){if(ge.isEmpty(e))return NaN;typeof e=="string"&&(e=ge.autoCastJSON(e));try{return s2.default(e,{units:t||"kilometers"})}catch(r){return Rs.trace(r,e),NaN}}a(f2,"geoLength");function E2(e,t,r){if(ge.isEmpty(e))return NaN;if(ge.isEmpty(t))return NaN;typeof e=="string"&&(e=ge.autoCastJSON(e));try{return i2.default(e,t,{units:r||"kilometers"})}catch(n){return Rs.trace(n,e,t),NaN}}a(E2,"geoCircle");function h2(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 o2(e,t)}catch(r){return Rs.trace(r,e,t),NaN}}a(h2,"geoDifference");function hC(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 a2.default(e,t,{units:r||"kilometers"})}catch(n){return Rs.trace(n,e,t),NaN}}a(hC,"geoDistance");function m2(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 hC(e,t,n)<=r}catch(s){return Rs.trace(s,e,t),!1}}a(m2,"geoNear");function p2(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 c2.default(e,t)}catch(r){return Rs.trace(r,e,t),!1}}a(p2,"geoContains");function S2(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 u2.default(e,t)}catch(r){return Rs.trace(r,e,t),!1}}a(S2,"geoEqual");function T2(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!l2.default(e,t)}catch(r){return Rs.trace(r,e,t),!1}}a(T2,"geoCrosses");function g2(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(EC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(EC.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=ge.autoCastJSON(e)),_2[t](e,r)}a(g2,"geoConvert")});var Y_=T((Hle,SC)=>{var Ji=_C(),vr=fC(),Xn=pC();SC.exports=e=>{e.aggr.mad=e.aggr.MAD=Ji.mad,e.aggr.mean=e.aggr.MEAN=Ji.mean,e.aggr.mode=e.aggr.MODE=Ji.mode,e.aggr.prod=e.aggr.PROD=Ji.prod,e.aggr.median=e.aggr.MEDIAN=Ji.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ji.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ji.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=vr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=vr.current_time,e.fn.extract=e.fn.EXTRACT=vr.extract,e.fn.date=e.fn.DATE=vr.date,e.fn.date_format=e.fn.DATE_FORMAT=vr.date_format,e.fn.date_add=e.fn.DATE_ADD=vr.date_add,e.fn.date_sub=e.fn.DATE_SUB=vr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=vr.date_diff,e.fn.now=e.fn.NOW=vr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=vr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=vr.get_server_time,e.fn.getdate=e.fn.GETDATE=vr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=vr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Xn.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Xn.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Xn.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Xn.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Xn.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Xn.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Xn.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Xn.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Xn.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Xn.geoNear}});var AC=T((xle,RC)=>{"use strict";var Jc=require("lodash"),nr=require("alasql");nr.options.cache=!1;var R2=Y_(),TC=require("clone"),K_=require("recursive-iterator"),Ee=W(),Ce=J(),Zo=Nn(),A2=U(),{hdb_errors:O2}=ee(),{getDatabases:gC}=(be(),te(Fe)),b2="IS NULL",Dn="There was a problem performing this search. Please check the logs and try again.";R2(nr);var Fp=class{static{a(this,"SQLSearch")}constructor(t,r){if(Ce.isEmpty(t))throw Ee.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(),Ce.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Ce.isEmptyOrZeroLength(n))return Ee.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ee.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ee.error(n),new Error(Dn)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ee.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ee.error(n),new Error(Dn)}if(Object.keys(this.data).length===0)return Ee.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ee.error("Error thrown from processJoins in SQLSearch class method search."),Ee.error(n),new Error(Dn)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ee.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ee.error(n),new Error(Dn)}try{return t=await this._finalSQL(),t}catch(n){throw Ee.error("Error thrown from finalSQL in SQLSearch class method search."),Ee.error(n),new Error(Dn)}}_getColumns(){let t=new K_(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(TC(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Jc.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=gC()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Ce.isEmpty(this.statement.where)){Ee.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new K_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Ce.isEmpty(r)&&r.right)if(Ce.isNotEmptyAndHasValue(r.right.value)){let n=Ce.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new nr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Ce.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new nr.yy.LogicValue({value:i}):n instanceof nr.yy.StringValue&&Ce.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new nr.yy.NumValue({value:i}))});if(t){Ee.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new K_(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(!Ce.isEmpty(A2.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Ce.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Ce.isEmptyOrZeroLength(r.left.columnid)||Ce.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(Ce.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"=":!Ce.isEmpty(r.right.value)||!Ce.isEmpty(r.left.value)?n.add(Ce.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)n.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&Ce.isEmptyOrZeroLength(this.statement.from)&&Ce.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&&Jc.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(Ce.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Ce.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(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&!Ce.isEmptyOrZeroLength(this.columns.columns))return t;if(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&Ce.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await nr.promise(r)}catch(r){throw Ee.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ee.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(TC(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(Ce.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(b2)>-1&&this.tables.forEach(s=>{let i={columnid:gC()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Jc.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]},u=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(u=!0),!Ce.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Ce.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await Zo.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(l){throw Ee.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ee.error(l),new Error(Dn)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await Zo.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(l){throw Ee.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ee.error(l),new Error(Dn)}else if(!Ce.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Ce.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await Zo.getDataByValue(c,E.operation);if(u)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(l){throw Ee.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ee.error(l),new Error(Dn)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await Zo.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of l)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(l){throw Ee.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ee.error(l),new Error(Dn)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof nr.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new nr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new nr.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new nr.yy.FuncValue:new nr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"";u=u.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,s);f=await nr.promise(h,t),t=null}catch(E){throw Ee.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ee.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=Jc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,O=p.length;S<O;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 K_(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=Jc.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 Ee.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ee.error(i),new Error(Dn)}}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 l in i)o.push(i[l][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},u=await Zo.getDataByHash(c),_=s.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=s.columns[h],S=E[p]===void 0?null:E[p];this.data[n].__merged_data[f].push(S)}}}}catch(r){throw Ee.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ee.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,u=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===u}).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();Ee.trace(`Final SQL: ${s}`),n=await nr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ee.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ee.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ee.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 Ee.error(O2.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ee.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 u=s[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;n=n.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(u,_)});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 Zo.getDataByValue(i);for(let[c,u]of o)this.data[s].__merged_data[c]||(u[n.attribute]===void 0&&(u[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=u[n.attribute]??null}catch(o){throw Ee.error("There was an error when processing this SQL operation. Check your logs"),Ee.error(o),new Error(Dn)}}return Object.values(Object.values(this.data)[0].__merged_data)}};RC.exports=Fp});var jr=T((qle,OC)=>{"use strict";var N2=Ob();OC.exports={searchByConditions:w2,searchByHash:I2,searchByValue:C2,search:D2};var qp=Nn(),{transformReq:Gp}=J(),y2=AC();async function w2(e){return Gp(e),qp.searchByConditions(e)}a(w2,"searchByConditions");async function I2(e){Gp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of qp.searchByHash(e))r&&t.push(r);return t}a(I2,"searchByHash");async function C2(e){Gp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of qp.searchByValue(e))t.push(r);return t}a(C2,"searchByValue");function D2(e,t){try{let r=new N2(e);r.validate(),new y2(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(D2,"search")});var W_=T((kle,bC)=>{"use strict";var L2=Nn();bC.exports={writeTransaction:M2};function M2(e,t,r){return L2.writeTransaction(e,t,r)}a(M2,"writeTransaction")});var IC=T((Yle,wC)=>{"use strict";var U2=jr(),P2=Js(),NC=W(),v2=Zr(),$le=W_(),B2=require("clone"),Vp=require("alasql"),H2=Y_(),yC=require("util"),x2=yC.promisify(P2.getTableSchema),F2=yC.promisify(U2.search),q2=U(),kp=J();H2(Vp);wC.exports={update:k2};var G2="There was a problem performing this update. Please check the logs and try again.";async function k2({statement:e,hdb_user:t}){let r=await x2(e.table.databaseid,e.table.tableid),n=V2(e.columns);kp.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=B2(s),c=kp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=Vp.parse(u).statements[0],l=await F2(_),d=$2(n,l);return Y2(o,d,t)}a(k2,"update");function V2(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Vp.compile(`SELECT ${r.expression.toString()} AS [${q2.FUNC_VAL}] FROM ?`)}),t}catch(t){throw NC.error(t),new Error(G2)}}a(V2,"createUpdateRecord");function $2(e,t){return kp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a($2,"buildUpdateRecords");async function Y2(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await v2.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){NC.error(`Error delete new_attributes from update response: ${i}`)}return s}a(Y2,"updateRecords")});var DC=T((zle,CC)=>{var K2=require("alasql"),W2=jr(),Q2=W(),z2=Nn(),Yp=require("util"),$p=J(),J2=U(),X2=Js(),Wle=W_(),Qle=Zr(),j2="record",Z2="successfully deleted",e4=Yp.callbackify(s4),t4=Yp.promisify(W2.search),r4=Yp.promisify(X2.getTableSchema);CC.exports={convertDelete:e4};function n4(e){return`${e.deleted_hashes.length} ${j2}${e.deleted_hashes.length===1?"":"s"} ${Z2}`}a(n4,"generateReturnMessage");async function s4({statement:e,hdb_user:t}){let r=await r4(e.table.databaseid,e.table.tableid);$p.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=$p.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=K2.parse(o).statements[0],u={operation:J2.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await t4(c);let _=await z2.deleteRecords(u);return $p.isEmptyOrZeroLength(_.message)&&(_.message=n4(_)),delete _.txn_time,_}catch(_){throw Q2.error(_),_.hdb_code?_.message:_}}a(s4,"convertDelete")});var vC=T((Xle,PC)=>{"use strict";var i4=Hi(),{hdb_errors:LC}=ee(),{getDatabases:MC}=(be(),te(Fe));PC.exports={checkSchemaExists:UC,checkSchemaTableExists:o4,schema_describe:i4};async function UC(e){if(!MC()[e])return LC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(UC,"checkSchemaExists");async function o4(e,t){let r=await UC(e);if(r)return r;if(!MC()[e][t])return LC.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(o4,"checkSchemaTableExists")});var Xc=T((Zle,a4)=>{a4.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 tu={};ke(tu,{addAnalyticsListener:()=>eu,recordAction:()=>Br,recordActionBinary:()=>tn,setAnalyticsEnabled:()=>c4});function c4(e){YC=e}function Br(e,t,r,n,s){if(!YC)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=J_.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},J_.set(i,o)}Q_||u4()}function tn(e,t,r,n,s){Br(!!e,t,r,n,s)}function eu(e){QC.push(e)}function u4(){Q_=performance.now(),setTimeout(async()=>{let e=performance.now()-Q_;Q_=0;let t=[],r={time:Date.now(),period:e,threadId:Xi.threadId,metrics:t};for(let[s,i]of J_){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of zC){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await JC()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Xi.threadId,byThread:!0,...n});for(let s of QC)s(t);J_=new Map,Xi.parentPort?Xi.parentPort.postMessage({type:WC,report:r}):ZC({report:r})},KC).unref()}async function l4(e,t=6e4){let r=Qp(),n=XC(),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,u=[],_;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 g of S||[]){let{path:R,method:B,type:H,metric:v,count:M,total:$,distribution:K,threads:z,...se}=g;M||(M=1);let Te=v+(R?"-"+R:"");B!==void 0&&(Te+="-"+B),H!==void 0&&(Te+="-"+H);let oe=o.get(Te);if(oe){if(oe.threads){let de=oe.threads[O];if(de)oe=de;else{oe.threads[O]=Object.assign({},se);continue}}oe.count||(oe.count=1);let xe=oe.count;for(let de in se){let It=se[de];typeof It=="number"&&(oe[de]=(oe[de]*xe+It*M)/(xe+M))}oe.count+=M,$>=0&&(oe.total+=$,oe.ratio=oe.total/oe.count)}else oe=Object.assign({period:t},g),delete oe.distribution,o.set(Te,oe),oe.byThread&&(oe.threads=[],oe.threads[O]=Object.assign({},se),u.push(oe));if(K){K=K.map(de=>typeof de=="number"?{value:de,count:1}:de);let xe=c.get(Te);xe?xe.push(...K):c.set(Te,K)}}await JC()}for(let h of u){let{path:p,method:S,type:O,metric:g,count:R,total:B,distribution:H,threads:v,...M}=h;v=v.filter($=>$);for(let $ in M){if(typeof h[$]!="number")continue;let K=0;for(let z of v){let se=z[$];typeof se=="number"&&(K+=se)}h[$]=K}h.count=v.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((de,It)=>de.value>It.value?1:-1);let O=S.count-1,g=[],R=0,B=0,H;for(let de of zC){let It=O*de;for(;R<It;)H=p[B++],R+=H.count,B===1&&R--;let bl=p[B>1?B-2:0];H||(H=p[0]),g.push(H.value-(H.value-bl.value)*(R-It)/H.count)}let[v,M,$,K,z,se,Te,oe,xe]=g;Object.assign(S,{p1:v,p10:M,p25:$,median:K,p75:z,p90:se,p95:Te,p99:oe,p999:xe})}let l;for(let[h,p]of o)p.id=(0,z_.getNextMonotonicTime)(),p.time=_,n.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||n.primaryStore.put(p.id,p)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,z_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-BC,active:E-HC,time:d,...process.memoryUsage()};n.primaryStore.put(h,p,{append:!0}).then(S=>{S||n.primaryStore.put(h,p)})}BC=f,HC=E}async function xC(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Qp(){return FC||(FC=ot({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function XC(){return qC||(qC=ot({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function f4(){jC=!0;let e=(0,Zc.get)(Wp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await l4(KC,e),await xC(Qp(),_4),await xC(XC(),d4)},Math.min(e/2,2147483647)).unref()}function ZC(e,t){let r=e.report;r.threadId=t?.threadId||Xi.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(GC+=n.mean*n.count);r.totalBytesProcessed=GC,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(kC.get(t))}),kC.set(t,t.performance.eventLoopUtilization())),r.id=(0,z_.getNextMonotonicTime)(),Qp().primaryStore.put(r.id,r),jC||f4(),E4&&(eD=m4(r))}async function m4(e){if(await eD,!ri){let r=(0,jc.dirname)((0,$C.getLogFilePath)());try{ri=await(0,Kp.open)((0,jc.join)(r,"analytics.log"),"r+")}catch{ri=await(0,Kp.open)((0,jc.join)(r,"analytics.log"),"w+")}}let t=(await ri.stat()).size;if(t>h4){let r=Buffer.alloc(t);await ri.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ri.write(r,{position:0}),await ri.truncate(r.length),t=r.length}await ri.write(JSON.stringify(e)+`
8
- `,t)}var Xi,VC,$C,jc,Kp,z_,Zc,Wp,J_,YC,Q_,KC,WC,QC,zC,BC,HC,JC,_4,d4,FC,qC,jC,GC,kC,E4,eD,ri,h4,As=Oe(()=>{Xi=require("worker_threads"),VC=x(Ze());be();$C=x(W()),jc=require("path"),Kp=require("fs/promises"),z_=x(Cr()),Zc=x(Z()),Wp=x(U());jt();(0,Zc.initSync)();J_=new Map,YC=(0,Zc.get)(Wp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(c4,"setAnalyticsEnabled");a(Br,"recordAction");je.recordAnalytics=Br;a(tn,"recordActionBinary");Q_=0,KC=1e3,WC="analytics-report",QC=[];a(eu,"addAnalyticsListener");zC=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(u4,"sendAnalytics");a(l4,"aggregation");BC=0,HC=0,JC=a(()=>new Promise(setImmediate),"rest");a(xC,"cleanup");_4=36e5,d4=31536e6;a(Qp,"getRawAnalyticsTable");a(XC,"getAnalyticsTable");(0,VC.setChildListenerByType)(WC,ZC);a(f4,"startScheduledTasks");GC=0,kC=new Map,E4=!1;a(ZC,"recordAnalytics");h4=1e6;a(m4,"logAnalytics")});var At=T((f_e,gD)=>{"use strict";var Ht=Z();Ht.initSync();var p4=require("fs-extra"),S4=require("semver"),su=require("path"),{monotonicFactory:T4}=require("ulidx"),rD=T4(),g4=require("util"),nD=require("child_process"),R4=g4.promisify(nD.exec),A4=nD.spawn,ye=tt(),Pe=U(),jp=J(),Hr=W(),X_=ps(),O4=W_(),ru=Ir(),{onMessageByType:b4}=Ze(),{isMainThread:N4}=require("worker_threads"),{Encoder:y4,decode:Zp}=require("msgpackr"),sD=new y4,{isEmpty:to}=jp,iD=en(),w4=48*36e11,I4=5e9;N4&&b4(Pe.ITC_EVENT_TYPES.RESTART,()=>{rn=void 0,eo=void 0});var{connect:C4,StorageType:oD,RetentionPolicy:aD,AckPolicy:j_,DeliverPolicy:Z_,DiscardPolicy:D4,NatsConnection:u_e,JetStreamManager:l_e,JetStreamClient:__e,StringCodec:d_e,JSONCodec:L4,createInbox:eS,headers:M4,ErrorCode:tD}=require("nats"),{PACKAGE_ROOT:U4}=U(),P4=Xc(),{recordAction:v4}=(As(),te(tu)),cD=L4(),B4="clustering",H4=P4.engines[ye.NATS_SERVER_NAME],x4=su.join(U4,"dependencies"),Xp=su.join(x4,`${process.platform}-${process.arch}`,ye.NATS_BINARY_NAME),zp,Jp,nu,ji,Zi;gD.exports={runCommand:uD,checkNATSServerInstalled:F4,createConnection:tS,getConnection:ed,getJetStreamManager:iu,getJetStream:_D,getNATSReferences:sr,getServerList:G4,createLocalStream:rS,listStreams:dD,deleteLocalStream:k4,getServerConfig:ou,listRemoteStreams:V4,viewStream:$4,viewStreamIterator:Y4,publishToStream:K4,createWorkQueueStream:W4,addSourceToWorkStream:ED,request:z4,removeSourceFromWorkStream:mD,reloadNATS:nS,reloadNATSHub:J4,reloadNATSLeaf:X4,extractServerName:hD,requestErrorHandler:j4,updateWorkStream:Z4,createLocalTableStream:SD,createTableStreams:e3,purgeTableStream:TD,purgeSchemaTableStreams:t3,getStreamInfo:r3,updateLocalStreams:s3,closeConnection:q4,getJsmServerName:au,addNatsMsgHeader:fD,updateIngestStreamConsumer:Q4,clearClientCache:lD};async function uD(e,t=void 0){let{stdout:r,stderr:n}=await R4(e,{cwd:t});if(n)throw new Error(n.replace(`
6
+ `)},uk="certificate.pem",lk="privateKey.pem",_k="ca.pem";gO.exports={CERTIFICATE_VALUES:ck,CERTIFICATE_PEM_NAME:uk,PRIVATEKEY_PEM_NAME:lk,CA_PEM_NAME:_k}});var je=T((jie,AO)=>{"use strict";var er=require("validate.js");er.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||er.validators.type.checks[t](e)?null:` must be a '${t}' value`};er.validators.type.checks={Object:function(e){return er.isObject(e)&&!er.isArray(e)},Array:er.isArray,Integer:er.isInteger,Number:er.isNumber,String:er.isString,Date:er.isDate,Boolean:function(e){return typeof e=="boolean"}};er.validators.hasValidFileExt=function(e,t){return er.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};AO.exports={validateObject:dk,validateObjectAsync:fk,validateBySchema:Ek};function dk(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=er(e,t,{format:"flat"});return r?new Error(r):null}a(dk,"validateObject");async function fk(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await er.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(fk,"validateObjectAsync");function Ek(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(Ek,"validateBySchema")});var lh=T((toe,wO)=>{"use strict";var yO=require("fs-extra"),ae=require("joi"),hk=require("os"),{boolean:Ie,string:br,number:Ct,array:uh}=ae.types(),{totalmem:OO}=require("os"),Ci=require("path"),mk=W(),Fl=J(),eoe=RO(),bO=M(),pk=je(),NO="log",Sk="components",Tk="Invalid logging.rotation.maxSize unit. Available units are G, M or K",gk="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Rk="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",Ak="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",Ok="rootPath config parameter is undefined",bk="clustering.enabled config parameter is undefined",Di=Ct.min(0).required(),ql=uh.items({host:br.required(),port:Di}).empty(null),kn;wO.exports={configValidator:Nk,routesValidator:Lk,route_constraints:ql};function Nk(e){if(kn=e.rootPath,Fl.isEmpty(kn))throw Ok;let t=Ie.required(),r=Ct.min(0).max(1e3).empty(null).default(Dk),n=br.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(ic),s=br.optional().empty(null),i=br.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ae.string().empty(null).default(ic),c=ae.custom(wk).empty(null).default(ic),u=e.clustering?.enabled;if(Fl.isEmpty(u))throw bk;let _;return u===!0?_=ae.object({enabled:t,hubServer:ae.object({cluster:ae.object({name:ae.required().empty(null),network:ae.object({port:Di,routes:ql}).required()}).required(),leafNodes:ae.object({network:ae.object({port:Di}).required()}).required(),network:ae.object({port:Di}).required()}).required(),leafServer:ae.object({network:ae.object({port:Di,routes:ql}).required(),streams:ae.object({maxAge:Ct.min(120).allow(null).optional(),maxBytes:Ct.min(1).allow(null).optional(),maxMsgs:Ct.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ae.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Ie.optional(),databaseLevel:Ie.optional(),tls:ae.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Ie.required(),verify:Ie.optional()}),user:br.optional().empty(null)}).required():_=ae.object({enabled:t,tls:ae.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Ie.required()})}).required(),ae.object({authentication:ae.object({authorizeLocal:Ie,cacheTTL:Ct.required(),enableSessions:Ie}),analytics:ae.object({aggregatePeriod:Ct}),componentsRoot:n.optional(),clustering:_,localStudio:ae.object({enabled:t}).required(),logging:ae.object({auditAuthEvents:ae.object({logFailed:Ie,logSuccessful:Ie}),file:Ie.required(),level:ae.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ae.object({enabled:Ie.optional(),compress:Ie.optional(),interval:br.custom(Ck).optional().empty(null),maxSize:br.custom(Ik).optional().empty(null),path:br.optional().empty(null).default(ic)}).required(),root:n,stdStreams:Ie.required(),auditLog:Ie.required()}).required(),operationsApi:ae.object({network:ae.object({cors:Ie.optional(),corsAccessList:uh.optional(),headersTimeout:Ct.min(1).optional(),keepAliveTimeout:Ct.min(1).optional(),port:Ct.optional().empty(null),domainSocket:ae.optional().empty("hdb/operations-server").default(ic),securePort:Ct.optional().empty(null),timeout:Ct.min(1).optional()}).optional(),tls:ae.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:br.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ae.object({network:ae.object({port:Di,securePort:Di,mtls:ae.alternatives([Ie.optional(),ae.object({user:br.optional(),certificateAuthority:s,required:Ie.optional()})])}).required(),webSocket:Ie.optional(),requireAuthentication:Ie.optional()}),http:ae.object({compressionThreshold:Ct.optional(),cors:Ie.optional(),corsAccessList:uh.optional(),headersTimeout:Ct.min(1).optional(),port:Ct.min(0).optional().empty(null),securePort:Ct.min(0).optional().empty(null),mtls:ae.alternatives([Ie.optional(),ae.object({user:br.optional(),certificateAuthority:s,required:Ie.optional()})])}).required(),threads:ae.alternatives(r.optional(),ae.object({count:r.optional(),debug:Ie.optional()})),maxHeapMemory:Ct.min(0).optional(),storage:ae.object({writeAsync:Ie.required(),overlappingSync:Ie.optional(),caching:Ie.optional(),compression:Ie.optional(),noReadAhead:Ie.optional(),path:c,prefetchWrites:Ie.optional()}).required(),ignoreScripts:Ie.optional(),tls:ae.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:br.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(Nk,"configValidator");function yk(e){return yO.existsSync(e)?null:`Specified path ${e} does not exist.`}a(yk,"doesPathExist");function wk(e,t){ae.assert(e,br.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=yk(e);if(r)return t.message(r)}a(wk,"validatePath");function Ik(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Tk);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Rk):e}a(Ik,"validateRotationMaxSize");function Ck(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(gk);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Ak):e}a(Ck,"validateRotationInterval");function Dk(e,t){let r=t.state.path.join("."),n=hk.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||OO();return i=Math.round(Math.min(i,OO())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),mk.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(Dk,"setDefaultThreads");function ic(e,t){let r=t.state.path.join(".");if(!Fl.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Fl.isEmpty(kn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Ci.join(kn,Sk);case"logging.root":return Ci.join(kn,NO);case"clustering.leafServer.streams.path":return Ci.join(kn,"clustering","leaf");case"storage.path":let n=Ci.join(kn,bO.LEGACY_DATABASES_DIR_NAME);return yO.existsSync(n)?n:Ci.join(kn,bO.DATABASES_DIR_NAME);case"logging.rotation.path":return Ci.join(kn,NO);case"operationsApi.network.domainSocket":return r==null?null:Ci.join(kn,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(ic,"setDefaultRoot");function Lk(e){let t=ae.object({routes:ql});return pk.validateBySchema({routes:e},t)}a(Lk,"routesValidator")});var Li={};$e(Li,{server:()=>Ze});var IO,Ze,tr=Re(()=>{IO=require("../../index"),Ze={};(0,IO._assignPackageExport)("server",Ze)});var wr=T((soe,HO)=>{"use strict";var yr=M(),Dt=J(),gt=W(),{configValidator:Uk,routesValidator:CO}=lh(),rr=require("fs-extra"),Mk=require("yaml"),gn=require("path"),Pk=require("is-number"),LO=require("properties-reader"),vk=require("lodash"),{handleHDBError:Bk}=re(),{HTTP_STATUS_CODES:Hk,HDB_ERROR_MSGS:Gl}=Or(),noe=require("minimist"),{server:xk}=(tr(),ne(Li)),{DATABASES_PARAM_CONFIG:oc,CONFIG_PARAMS:Nr,CONFIG_PARAM_MAP:Rn}=yr,Fk="Unable to get config value because config is uninitialized",qk="Config successfully initialized",Gk="Error backing up config file",kk="Empty parameter sent to getConfigValue",UO=gn.join(yr.PACKAGE_ROOT,"config","yaml",yr.HDB_DEFAULT_CONFIG_FILE),Vk="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",DO={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"},kl,Rt,Vl;HO.exports={createConfigFile:$k,getDefaultConfig:Yk,getConfigValue:PO,initConfig:dh,flattenConfig:Bo,updateConfigValue:vO,updateConfigObject:Wk,getConfiguration:Jk,setConfiguration:Xk,readConfigFile:Eh,getClusteringRoutes:jk,initOldConfig:BO,getConfigFromFile:Zk,getConfigFilePath:Ui,addConfig:eV,deleteConfigFromFile:tV,getConfigObj:rV};function $k(e){let t=Ws(UO);kl=Bo(t.toJSON());let r;for(let o in e){let c=Rn[o.toLowerCase()];if(c===Nr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=_h(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){gt.error(l)}}}r&&MO(t,r),fh(t);let n=t.toJSON();Rt=Bo(n);let s=t.getIn(["rootPath"]),i=gn.join(s,yr.HDB_CONFIG_FILE);rr.createFileSync(i),rr.writeFileSync(i,String(t)),gt.trace(`Config file written to ${i}`)}a($k,"createConfigFile");function MO(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Dt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(oc.TABLES))for(let i in n[s][oc.TABLES])for(let o in n[s][oc.TABLES][i]){let c=n[s][oc.TABLES][i][o],u=[Nr.DATABASES,s,oc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in n[s]){let o=n[s][i],c=[Nr.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){gt.error("Error parsing schemas CLI/env config arguments",n)}}a(MO,"setSchemasConfig");function Yk(e){if(kl===void 0){let r=Ws(UO);kl=Bo(r.toJSON())}let t=Rn[e.toLowerCase()];if(t!==void 0)return kl[t.toLowerCase()]}a(Yk,"getDefaultConfig");function PO(e){if(e==null){gt.error(kk);return}if(Rt===void 0){gt.trace(Fk);return}let t=Rn[e.toLowerCase()];if(t!==void 0)return Rt[t.toLowerCase()]}a(PO,"getConfigValue");function Ui(e=Dt.getPropsFilePath()){let t=Dt.getEnvCliRootPath();return t?gn.join(t,yr.HDB_CONFIG_FILE):LO(e).get(yr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Ui,"getConfigFilePath");function dh(e=!1){if(Rt===void 0||e){let t;if(!Dt.noBootFile()){t=Dt.getPropsFilePath();try{rr.accessSync(t,rr.constants.F_OK|rr.constants.R_OK)}catch(i){throw gt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Ui(t),n;if(r.includes("config/settings.js"))try{BO(r);return}catch(i){if(i.code!==yr.NODE_ERROR_CODES.ENOENT)throw i}try{n=Ws(r)}catch(i){if(i.code===yr.NODE_ERROR_CODES.ENOENT){gt.trace(`HarperDB config file not found at ${r}.
7
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw gt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Kk(n,r),fh(n);let s=n.toJSON();if(xk.config=s,Rt=Bo(s),Rt.logging_rotation_rotate)for(let i in DO)Rt[i]&&gt.error(`Config ${DO[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);gt.trace(qk)}}a(dh,"initConfig");function Kk(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],gn.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],gn.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],gn.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(gt.trace("Updating config file with missing config params"),rr.writeFileSync(t,String(e)))}a(Kk,"checkForUpdatedConfig");function fh(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t?.http?.threads&&(t.threads=t?.http?.threads);let r=Uk(t);if(r.error)throw Gl.CONFIG_VALIDATION(r.error.message);typeof r.value.threads=="object"?e.setIn(["threads","count"],r.value.threads.count):e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],r.value?.operationsApi?.network?.domainSocket)}a(fh,"validateConfig");function Wk(e,t){Rt===void 0&&(Rt={});let r=Rn[e.toLowerCase()];if(r===void 0){gt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Rt[r.toLowerCase()]=t}a(Wk,"updateConfigObject");function vO(e,t,r=void 0,n=!1,s=!1,i=!1){Rt===void 0&&dh();let o=PO(Rn.hdb_root),c=gn.join(o,yr.HDB_CONFIG_FILE),u=Ws(c),_;if(r===void 0&&e.toLowerCase()===Nr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=Rn[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=_h(f,t);u.setIn([...E],h)}else for(let f in r){let E=Rn[f.toLowerCase()];if(E===Nr.HTTP_SECUREPORT&&r[f]===Rt[Nr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Nr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===Rt[Nr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Nr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=yr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=_h(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(O){gt.error(O)}}}_&&MO(u,_),fh(u);let l=u.getIn(["rootPath"]),d=gn.join(l,yr.HDB_CONFIG_FILE);n===!0&&Qk(c,l),rr.writeFileSync(d,String(u)),s&&(Rt=Bo(u.toJSON())),gt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(vO,"updateConfigValue");function Qk(e,t){try{let r=gn.join(t,"backup",`${yr.HDB_CONFIG_FILE}.bak`);rr.copySync(e,r),gt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){gt.error(Gk),gt.error(r)}}a(Qk,"backupConfigFile");var zk=["databases"];function Bo(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)),Vl=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])&&!zk.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Nr[u.toUpperCase()]&&Rn[u]&&(s[Rn[u].toLowerCase()]=o[c]),s[u]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Bo,"flattenConfig");function _h(e,t){if(e===Nr.CLUSTERING_NODENAME||e===Nr.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(Pk(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Dt.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 Dt.autoCast(t)}a(_h,"castConfigValue");function Jk(){let e=Dt.getPropsFilePath(),t=Ui(e);return Ws(t).toJSON()}a(Jk,"getConfiguration");async function Xk(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return vO(void 0,void 0,s,!0),Vk}catch(i){throw typeof i=="string"||i instanceof String?Bk(i,i,Hk.BAD_REQUEST,void 0,void 0,!0):i}}a(Xk,"setConfiguration");function Eh(){let e=Dt.getPropsFilePath();try{rr.accessSync(e,rr.constants.F_OK|rr.constants.R_OK)}catch(n){if(!Dt.noBootFile())throw gt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Ui(e);return Ws(t).toJSON()}a(Eh,"readConfigFile");function Ws(e){return Mk.parseDocument(rr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Ws,"parseYamlDoc");function jk(){let e=Eh(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Dt.isEmptyOrZeroLength(t)?[]:t;let r=CO(t);if(r)throw Gl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Dt.isEmptyOrZeroLength(n)?[]:n;let s=CO(n);if(s)throw Gl.CONFIG_VALIDATION(s.message);if(!Dt.isEmptyOrZeroLength(n)&&!Dt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Dt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Gl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(jk,"getClusteringRoutes");function BO(e){let t=LO(e);Rt={};for(let r in Rn){let n=t.get(r.toUpperCase());if(Dt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Rn[r].toLowerCase();s===Nr.LOGGING_ROOT?Rt[s]=gn.dirname(n):Rt[s]=n}return Rt}a(BO,"initOldConfig");function Zk(e){let t=Eh();return vk.get(t,e.replaceAll("_","."))}a(Zk,"getConfigFromFile");async function eV(e,t){let r=Ws(Ui());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await rr.writeFile(Ui(),String(r))}a(eV,"addConfig");function tV(e){let t=Ui(Dt.getPropsFilePath()),r=Ws(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=gn.join(n,yr.HDB_CONFIG_FILE);rr.writeFileSync(s,String(r))}a(tV,"deleteConfigFromFile");function rV(){return Vl||(dh(),Vl)}a(rV,"getConfigObj")});var te=T((ooe,GO)=>{"use strict";var hh=require("fs-extra"),Mi=require("path"),xO=require("os"),nV=require("properties-reader"),cc=W(),ac=J(),ue=M(),$l=wr(),sV="Error initializing environment manager",Yl="BOOT_PROPS_FILE_PATH",FO=!1,iV={[ue.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},hs={};GO.exports={BOOT_PROPS_FILE_PATH:Yl,getHdbBasePath:oV,setHdbBasePath:aV,get:qO,initSync:uV,setProperty:De,initTestEnvironment:lV};function oV(){return hs[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(oV,"getHdbBasePath");function aV(e){hs[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(aV,"setHdbBasePath");function qO(e){let t=$l.getConfigValue(e);return t===void 0?hs[e]:t}a(qO,"get");function De(e,t){iV[e]&&(hs[e]=t),$l.updateConfigObject(e,t)}a(De,"setProperty");function cV(){let e;try{e=ac.getPropsFilePath(),hh.accessSync(e,hh.constants.F_OK|hh.constants.R_OK),FO=!0;let t=nV(e);return hs[ue.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ue.HDB_SETTINGS_NAMES.INSTALL_USER),hs[ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),hs[Yl]=e,!0}catch{return cc.trace(`Environment manager found no properties file at ${e}`),!1}}a(cV,"doesPropFileExist");function uV(e=!1){try{(FO||cV()||ac.noBootFile())&&($l.initConfig(e),hs[ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=$l.getConfigValue(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){cc.error(sV),cc.error(t),console.error(t),process.exit(1)}}a(uV,"initSync");function lV(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,u=Mi.join(__dirname,"../../","unitTests");hs[Yl]=Mi.join(u,"hdb_boot_properties.file"),De(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Mi.join(u,"settings.test")),De(ue.HDB_SETTINGS_NAMES.INSTALL_USER,xO.userInfo()?xO.userInfo().username:void 0),De(ue.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),De(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Mi.join(u,"envDir","log")),De(ue.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),De(ue.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),De(ue.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),De(ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Mi.join(u,"envDir")),De(ue.CONFIG_PARAMS.STORAGE_PATH,Mi.join(u,"envDir")),s&&(De(ue.CONFIG_PARAMS.HTTP_SECUREPORT,qO(ue.CONFIG_PARAMS.HTTP_PORT)),De(ue.CONFIG_PARAMS.HTTP_PORT,null)),De(ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),De(ue.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),De(ue.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,ac.isEmpty(i)?!1:i),De(ue.CONFIG_PARAMS.HTTP_CORS,ac.isEmpty(i)?!1:i),De(ue.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),De(ue.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),De(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),De(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),De(ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Mi.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),De(ue.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,ac.isEmpty(c)?!1:c),o&&(De("CORS_ACCESSLIST",o),De(ue.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(De(ue.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),De(ue.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(De(ue.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),De(ue.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(De(ue.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),De(ue.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Yl}. Please check your boot props and settings files`;cc.fatal(r),cc.error(t)}}a(lV,"initTestEnvironment")});var Qe=T((coe,QO)=>{"use strict";var fc=M(),_V=J(),nr=te(),Ec=require("path"),dV=require("minimist"),kO=require("fs-extra"),VO=require("lodash");nr.initSync();var{CONFIG_PARAMS:Qs,DATABASES_PARAM_CONFIG:uc,SYSTEM_SCHEMA_NAME:Kl}=fc,lc,_c,dc;function $O(){if(lc!==void 0)return lc;if(nr.getHdbBasePath()!==void 0)return lc=nr.get(Qs.STORAGE_PATH)||Ec.join(nr.getHdbBasePath(),fc.DATABASES_DIR_NAME),lc}a($O,"getBaseSchemaPath");function YO(){if(_c!==void 0)return _c;if(nr.getHdbBasePath()!==void 0)return _c=WO(Kl),_c}a(YO,"getSystemSchemaPath");function KO(){if(dc!==void 0)return dc;if(nr.getHdbBasePath()!==void 0)return dc=nr.get(fc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Ec.join(nr.getHdbBasePath(),fc.TRANSACTIONS_DIR_NAME),dc}a(KO,"getTransactionAuditStoreBasePath");function fV(e,t){let r=nr.get(Qs.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Ec.join(KO(),e.toString())}a(fV,"getTransactionAuditStorePath");function WO(e,t){e=e.toString(),t=t&&t.toString();let r=nr.get(fc.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Ec.join($O(),e)}a(WO,"getSchemaPath");function EV(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,dV(process.argv));let n=r[Qs.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!_V.isObject(n))throw o;i=n}for(let o of i){let c=o[Kl];if(!c)continue;let u=nr.get(Qs.DATABASES);u=u??{};let _=c?.tables?.[t]?.[uc.PATH];if(_)return VO.set(u,[Kl,uc.TABLES,t,uc.PATH],_),nr.setProperty(Qs.DATABASES,u),_;let l=c?.[uc.PATH];if(l)return VO.set(u,[Kl,uc.PATH],l),nr.setProperty(Qs.DATABASES,u),l}}let s=r[Qs.STORAGE_PATH.toUpperCase()];if(s){if(!kO.pathExistsSync(s))throw new Error(s+" does not exist");let i=Ec.join(s,e);return kO.mkdirsSync(i),nr.setProperty(Qs.STORAGE_PATH,s),i}return YO()}a(EV,"initSystemSchemaPaths");function hV(){lc=void 0,_c=void 0,dc=void 0}a(hV,"resetPaths");QO.exports={getBaseSchemaPath:$O,getSystemSchemaPath:YO,getTransactionAuditStorePath:fV,getTransactionAuditStoreBasePath:KO,getSchemaPath:WO,initSystemSchemaPaths:EV,resetPaths:hV}});var Ir=T((doe,ZO)=>{"use strict";var mV=Or().LMDB_ERRORS_ENUM,loe=require("lmdb"),pV=_t(),_oe=require("buffer").Buffer,{OVERFLOW_MARKER:zO,MAX_SEARCH_KEY_LENGTH:Wl}=pV,JO=["number","string","symbol","boolean","bigint"];function SV(e){if(e=e?.primaryStore||e,!e)throw new Error(mV.ENV_REQUIRED)}a(SV,"validateEnv");function TV(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(TV,"stringifyData");function gV(e){return e instanceof Date?e.valueOf():e}a(gV,"convertKeyValueToWrite");function RV(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(JO.includes(typeof e))return e.length>Wl?[e.slice(0,Wl)+zO]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(JO.includes(typeof i))i.length>Wl?r.push(i.slice(0,Wl)+zO):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(RV,"getIndexedValues");var Ql=0,XO=0;function jO(){XO=Date.now()-performance.now()}a(jO,"adjustStartTime");jO();var AV=6e4;setInterval(jO,AV).unref();function OV(){let e=performance.now()+XO;return e>Ql?(Ql=e,e):(Ql+=488e-6,Ql)}a(OV,"getNextMonotonicTime");ZO.exports={validateEnv:SV,stringifyData:TV,convertKeyValueToWrite:gV,getNextMonotonicTime:OV,getIndexedValues:RV}});var eb,An,mh,hc=Re(()=>{eb=require("events"),An=class extends eb.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new mh;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)}},mh=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 Th={};$e(Th,{loadGQLSchema:()=>yV,start:()=>Sh,startOnMainThread:()=>NV});function Sh({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=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 u.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 $={type:v.name?.value};return Object.defineProperty($,"location",{value:v.loc.startToken}),$};a(H,"getProperty");let O=S.name.value,R=[],g={table:null,database:null,properties:R};f.set(O,g);for(let v of S.directives){if(v.name.value==="table"){for(let L of v.arguments)g[L.name.value]=L.value.value;g.schema&&(g.database=g.schema),g.table||(g.table=O),g.audit&&(g.audit=g.audit!=="false"),g.attributes=g.properties,E.push(g)}if(v.name.value==="sealed"&&(g.sealed=!0),v.name.value==="export"){g.export=!0;for(let L of v.arguments)L.name.value==="name"&&(g.export={name:L.value.value})}}let P=!1;for(let v of S.fields){let L=H(v.type);L.name=v.name.value,R.push(L);for(let $ of v.directives)if($.name.value==="primaryKey")P?console.warn("Can not define two attributes as a primary key"):(L.isPrimaryKey=!0,P=!0);else if($.name.value==="indexed")L.indexed=!0;else if($.name.value==="relationship"){let Y={};for(let z of $.arguments)Y[z.name.value]=z.value.value;L.relationship=Y}else if($.name.value==="createdTime")L.assignCreatedTime=!0;else if($.name.value==="updatedTime")L.assignUpdatedTime=!0;else if($.name.value==="expiresAt")L.expiresAt=!0;else if($.name.value==="allow"){let Y=L.authorizedRoles=[];for(let z of $.arguments)z.name.value==="role"&&Y.push(z.value.value)}}g.type=O,O==="Query"&&(h=g)}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):bV.includes(S.type)||(0,tb.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,ph.dirname)(n),S.tableClass):i.set((0,ph.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var ph,tb,bV,NV,yV,rb=Re(()=>{ph=require("path");Ae();tb=x(et()),bV=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(Sh,"start");NV=Sh,yV=Sh({ensureTable:at}).handleFile});async function zl(e){return wV?(mc||(mc=IV(DV)),(await(await mc).import(e)).namespace):import(e)}async function IV(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),mc=new Compartment({console,Math,Date,fetch:CV,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,sb.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Ht,tables:Cr,databases:tt})}};let n=await(0,nb.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),mc}function CV(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 DV(){return{Resource:Ht,tables:Cr}}var nb,sb,wV,mc,gh=Re(()=>{On();Ae();nb=require("fs/promises"),sb=require("path"),wV=!1;a(zl,"secureImport");a(IV,"getCompartment");a(CV,"secureOnlyFetch");a(DV,"getGlobalVars")});var Ah={};$e(Ah,{handleFile:()=>LV});async function LV(e,t,r,n){let s=new Map,i=(0,ib.pathToFileURL)(r).toString(),o=await zl(i);u(o.default)&&n.set((0,Rh.dirname)(t),o.default),c(o,(0,Rh.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?n.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),s}var ib,Rh,ob=Re(()=>{ib=require("url");gh();Rh=require("path");a(LV,"handleFile")});var bh={};$e(bh,{start:()=>UV});function UV({resources:e}){e.set("login",Oh),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Oh,ab=Re(()=>{On();a(UV,"start");Oh=class extends Ht{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 Eb={};$e(Eb,{parse:()=>yh,streamAsJSON:()=>pc,stringify:()=>Pi});function pc(e){return new Nh({value:e})}function cb(e){return console.error(e),JSON.stringify(e.toString())}function ub(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Pi(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===db)return fb(e);if(t.resolution)return t.resolution.then(()=>Pi(e));throw t}}function fb(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+=fb(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Pi(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function yh(e){return vV.test(e)?MV.parse(e):JSON.parse(e)}var lb,_b,MV,PV,db,Nh,vV,wh=Re(()=>{lb=require("stream"),_b=x(require("json-bigint-fixes")),MV=(0,_b.default)({useNativeBigInt:!0}),PV=1e4,db={};BigInt.prototype.toJSON=function(){throw db};a(pc,"streamAsJSON");Nh=class extends lb.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),cb)}catch(s){yield cb(s)}else yield Pi(t)}else yield Pi(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);ub(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>PV?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 ub(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(cb,"handleError");a(ub,"when");a(Pi,"stringify");a(fb,"jsStringify");vV=/-?\d{16,}/;a(yh,"parse")});var wb=T((Ioe,yb)=>{"use strict";var Ih=require("recursive-iterator"),BV=require("alasql"),Ch=require("clone"),hb=J(),{handleHDBError:mb,hdb_errors:HV}=re(),{HDB_ERROR_MSGS:pb,HTTP_STATUS_CODES:Sb}=HV,{getDatabases:xV}=(Ae(),ne(qe)),FV=["DISTINCT_ARRAY"],Tb=Symbol("validateTables"),Dh=Symbol("validateTable"),woe=Symbol("getAllColumns"),gb=Symbol("validateAllColumns"),Jl=Symbol("findColumn"),Rb=Symbol("validateOrderBy"),Sc=Symbol("validateSegment"),Lh=Symbol("validateColumn"),Ab=Symbol("setColumnsForTable"),Ob=Symbol("checkColumnsForAsterisk"),bb=Symbol("validateGroupBy"),Nb=Symbol("hasColumns"),Uh=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Tb](),this[Ob](),this[gb]()}[Tb](){if(this[Nb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Dh](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Dh](t.table)})}}[Nb](){let t=!1,r=new Ih(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Dh](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=xV();if(!r[t.databaseid])throw mb(new Error,pb.SCHEMA_NOT_FOUND(t.databaseid),Sb.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw mb(new Error,pb.TABLE_NOT_FOUND(t.databaseid,t.tableid),Sb.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Ch(s);i.table=Ch(t),this.attributes.push(i)})}[Jl](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)}[Ob](){let t=new Ih(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[Ab](r.tableid)}[Ab](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new BV.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[gb](){this[Sc](this.statement.columns,!1),this[Sc](this.statement.joins,!1),this[Sc](this.statement.where,!1),this[bb](this.statement.group,!1),this[Sc](this.statement.order,!0)}[Sc](t,r){if(!t)return;let n=new Ih(t),s=[];for(let{node:i,path:o}of n)!hb.isEmpty(i)&&!hb.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Rb](i):s.push(this[Lh](i)));return s}[bb](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&FV.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Ch(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Jl](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[Jl](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`}[Rb](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[Lh](t)}[Lh](t){let r=this[Jl](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]}};yb.exports=Uh});var Cb=T((Doe,Ib)=>{"use strict";var Mh=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")}};Ib.exports=Mh});var Lb=T((Uoe,Db)=>{"use strict";var Ph=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};Db.exports=Ph});var vb={};$e(vb,{HAS_EXPIRATION:()=>kh,LAST_TIMESTAMP_PLACEHOLDER:()=>Rc,LOCAL_TIMESTAMP:()=>qV,METADATA:()=>Tc,NO_TIMESTAMP:()=>Bh,PENDING_LOCAL_TIME:()=>Vh,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Gh,RecordEncoder:()=>Fh,TIMESTAMP_ASSIGN_LAST:()=>kV,TIMESTAMP_ASSIGN_NEW:()=>Mb,TIMESTAMP_ASSIGN_PREVIOUS:()=>Pb,TIMESTAMP_PLACEHOLDER:()=>Xl,TIMESTAMP_RECORD_PREVIOUS:()=>Hh,fromResource:()=>t_,getUpdateRecord:()=>$h,handleLocalTimeForGets:()=>r_});function $V(){return gc[0]=gc[0]^64,GV.getFloat64(0)}function t_(e){qh=!0;try{return e()}finally{qh=!1}}function r_(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),u=c?.value,_=u?.[Tc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[Tc]>=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 u=c.value,_=u[Tc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.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,vi.push(new WeakRef(this))),!qh)try{throw new Error("Read transaction used outside of resource")}catch(u){this.readStack=u.stack}o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<vi.length;u++){let _=vi[u].deref();(!_||_.isDone||_.isCommitted)&&vi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function $h(e,t,r){return function(n,s,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?Ho=i?.localTime?Hh|Pb:Bh:Ho=u?i?.localTime?Hh|16384:Mb|16384:Bh,l>0&&(c|=kh),Zl=c,xh=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Ho>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(n,s,h);if(u){let O=_?.user?.username;if(E&&(jl=e.encoder.encode(E)),f&&i?.localTime){let R=i?.localTime,g=r.get(R);if(g){let P=Lt(g).previousLocalTime;return r.put(R,e_(o,t,n,P,O,d,jl),{ifVersion:p}),S}}r.put(Rc,e_(o,t,n,i?.localTime?1:0,O,d,jl),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var Ub,vh,Xl,Rc,Gh,qV,Tc,gc,GV,Bh,Mb,kV,Pb,Hh,kh,Vh,VV,jl,Ho,Zl,xh,Fh,voe,qh,vi,xo=Re(()=>{Ub=require("msgpackr");Bi();vh=x(W()),Xl=new Uint8Array([1,1,1,1,4,64,0,0]),Rc=new Uint8Array([1,1,1,1,1,0,0,0]),Gh=new Uint8Array([1,1,1,1,3,64,0,0]),qV=Symbol("local-timestamp"),Tc=Symbol("metadata"),gc=new Uint8Array(8),GV=new DataView(gc.buffer,0,8),Bh=0,Mb=0,kV=1,Pb=3,Hh=4,kh=16,Vh=1,Ho=0,Zl=-1,xh=0,Fh=class extends Ub.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(Ho||Zl>=0){let i=0,o=Ho;o&&(i+=8,Ho=0);let c=Zl,u=xh;c>=0&&(i+=2,Zl=-1,u&&(i+=8,xh=0));let _=VV=r.call(this,n,s|2048|i);jl=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(Xl[4]=o,Xl[5]=o>>8,_.set(Xl,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,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,u;if(i===2){if(t.copy)t.copy(gc,0,c),c+=8;else for(let d=0;d<8;d++)gc[d]=t[c++];u=$V(),i=t[c]}let _;i<32&&(o=i,c+=2,o&kh&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,s),s-c);return{localTime:u,value:l,[Tc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a($V,"getTimestamp");voe=Map.prototype.get;a(t_,"fromResource");a(r_,"handleLocalTimeForGets");vi=[];setInterval(()=>{for(let e=0;e<vi.length;e++){let t=vi[e].deref();!t||t.isDone||t.isCommitted?vi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(vh.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):vh.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($h,"getUpdateRecord")});var n_=T((Hoe,Bb)=>{"use strict";var Kh=te(),Wh=M(),{RecordEncoder:YV}=(xo(),ne(vb));Kh.initSync();var KV=Kh.get(Wh.CONFIG_PARAMS.STORAGE_COMPRESSION),WV=Kh.get(Wh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,QV=Wh.UPDATES_PROPERTY,Yh=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=KV&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=WV&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:YV},this.alwaysLazyProperty=n=>n===QV)}};Bb.exports=Yh});var i_=T((Foe,xb)=>{"use strict";var Fo=te(),Ac=M();Fo.initSync();var zV=Fo.get(Ac.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Fo.get(Ac.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Fo.get(Ac.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Hb=Fo.get(Ac.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),JV=Fo.get(Ac.CONFIG_PARAMS.STORAGE_NOREADAHEAD),s_=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=zV,this.noFSAccess=!0,Hb!==void 0&&(this.overlappingSync=Hb),this.noReadAhead=JV}};xb.exports=s_;s_.MAX_DBS=1e4});var Ye=T((Goe,Qb)=>{"use strict";var zh=require("lmdb"),bn=require("fs-extra"),Dr=require("path"),o_=Ir(),Gb=W(),sr=Or().LMDB_ERRORS_ENUM,a_=Lb(),Jh=n_(),kb=i_(),zs=_t(),Fb=M(),{table:XV,resetDatabases:jV}=(Ae(),ne(qe)),qb=te(),Nn=zs.INTERNAL_DBIS_NAME,Vb=zs.DBI_DEFINITION_NAME,ZV="data.mdb",e$="lock.mdb",Oc=".mdb",t$="-lock",Qh=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=jr(t,r),this.key_type=this.dbi[zs.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[zs.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new zh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function c_(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(c_,"pathEnvNameValidation");async function Xh(e,t,r=!0){try{await bn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(sr.INVALID_BASE_PATH):n}try{let n=Dr.join(e,t+Oc);return await bn.access(n,bn.constants.R_OK|bn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await bn.access(Dr.join(e,t,ZV),bn.constants.R_OK|bn.constants.F_OK),Dr.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(Xh,"validateEnvironmentPath");function u_(e,t){if(o_.validateEnv(e),t===void 0)throw new Error(sr.DBI_NAME_REQUIRED)}a(u_,"validateEnvDBIName");async function r$(e,t,r=!1,n=!1){c_(e,t);let s=Dr.basename(e);t=t.toString();let i=qb.get(Fb.CONFIG_PARAMS.DATABASES);i||qb.setProperty(Fb.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Xh(e,t,n),$b(e,t,r)}catch(o){if(o.message===sr.INVALID_ENVIRONMENT){let c=Dr.join(e,t);await bn.mkdirp(n?c:e);let u=new kb(n?c:c+Oc,!1),_=zh.open(u);_.dbis=Object.create(null);let l=new Jh(!1);_.openDB(Nn,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=jh(e,t,r);return _[zs.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(r$,"createEnvironment");async function n$(e,t,r,n=!0){c_(e,t),t=t.toString();let s=Dr.join(e,t);return XV({table:t,database:Dr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(n$,"copyEnvironment");async function $b(e,t,r=!1){c_(e,t),t=t.toString();let n=jh(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 Xh(e,t),i=Dr.join(e,t+Oc),o=s!=i,c=new kb(s,o),u=zh.open(c);u.dbis=Object.create(null);let _=Kb(u);for(let l=0;l<_.length;l++)jr(u,_[l]);return u[zs.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=u,u}a($b,"openEnvironment");async function s$(e,t,r=!1){c_(e,t),t=t.toString();let n=Dr.join(e,t+Oc),s=await Xh(e,t);if(global.lmdb_map!==void 0){let i=jh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Yb(o),delete global.lmdb_map[i]}}await bn.remove(s),await bn.remove(s===n?s+t$:Dr.join(Dr.dirname(s),e$))}a(s$,"deleteEnvironment");async function Yb(e){o_.validateEnv(e);let t=e[zs.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Yb,"closeEnvironment");function jh(e,t,r=!1){let s=`${Dr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(jh,"getCachedEnvironmentName");function i$(e){o_.validateEnv(e);let t=Object.create(null),r=jr(e,Nn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Nn)try{t[n]=Object.assign(new a_,s)}catch{Gb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(i$,"listDBIDefinitions");function Kb(e){o_.validateEnv(e);let t=[],r=jr(e,Nn);for(let{key:n}of r.getRange({start:!1}))n!==Nn&&t.push(n);return t}a(Kb,"listDBIs");function o$(e,t){let n=jr(e,Nn).getEntry(t),s=new a_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{Gb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(o$,"getDBIDefinition");function Wb(e,t,r,n=!r){if(u_(e,t),t=t.toString(),t===Nn)throw new Error(sr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return jr(e,t)}catch(s){if(s.message===sr.DBI_DOES_NOT_EXIST){let i=new Jh(r,n===!0),o=e.openDB(t,i),c=new a_(r===!0,n);return o[Vb]=c,jr(e,Nn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(Wb,"createDBI");function jr(e,t){if(u_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Nn?r=o$(e,t):r=new a_,r===void 0)throw new Error(sr.DBI_DOES_NOT_EXIST);let n;try{let s=new Jh(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[Vb]=r,e.dbis[t]=n,n}a(jr,"openDBI");function a$(e,t){u_(e,t),t=t.toString();let r=jr(e,t),n=r.getStats();return r[zs.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(a$,"statDBI");async function c$(e,t){try{let r=Dr.join(e,t+Oc);return(await bn.stat(r)).size}catch{throw new Error(sr.INVALID_ENVIRONMENT)}}a(c$,"environmentDataSize");function u$(e,t){if(u_(e,t),t=t.toString(),t===Nn)throw new Error(sr.CANNOT_DROP_INTERNAL_DBIS_NAME);jr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],jr(e,Nn).removeSync(t)}a(u$,"dropDBI");function l$(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{jr(e,i)}catch(o){if(o.message===sr.DBI_DOES_NOT_EXIST)Wb(e,i,i!==t,i===t),n=!0;else throw o}}n&&jV()}a(l$,"initializeDBIs");Qb.exports={openDBI:jr,openEnvironment:$b,createEnvironment:r$,listDBIs:Kb,listDBIDefinitions:i$,createDBI:Wb,dropDBI:u$,statDBI:a$,deleteEnvironment:s$,initializeDBIs:l$,TransactionCursor:Qh,environmentDataSize:c$,copyEnvironment:n$,closeEnvironment:Yb}});var Jb=T((Voe,zb)=>{"use strict";var Zh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};zb.exports=Zh});var jb=T((Yoe,Xb)=>{"use strict";var em=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}};Xb.exports=em});var eN=T((Woe,Zb)=>{"use strict";var tm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};Zb.exports=tm});var qo=T((joe,nN)=>{"use strict";var _$=Ye(),d$=Jb(),f$=jb(),E$=eN(),Vn=Ir(),bc=Or().LMDB_ERRORS_ENUM,h$=_t(),ms=M(),m$=J(),p$=require("uuid"),zoe=require("lmdb"),{handleHDBError:S$,hdb_errors:T$}=re(),{OVERFLOW_MARKER:Joe,MAX_SEARCH_KEY_LENGTH:Xoe}=h$,tN=te();tN.initSync();var l_=tN.get(ms.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),rm=ms.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Hi=ms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function g$(e,t,r,n,s=Vn.getNextMonotonicTime()){om(e,t,r,n),nm(e,t,r);let i=new d$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u];rN(_,!0,s);let l=R$(e,t,r,_),d=_[t];o.push(l),c.push(d)}return sm(o,c,n,i,s)}a(g$,"insertRecords");function R$(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 l=c([[{}]]);Array.isArray(l)&&(c=l[0][ms.FUNC_VAL],n[o]=c)}let u=Vn.getIndexedValues(c),_=e.dbis[o];if(u){l_&&_.prefetch(u.map(l=>({key:l,value:s})),__);for(let l=0,d=u.length;l<d;l++)_.put(u[l],s)}}l_&&e.dbis[t].prefetch([s],__),e.dbis[t].put(s,n,n[Hi])})}a(R$,"insertRecord");function A$(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(A$,"removeSkippedRecords");function rN(e,t,r){let n=r>0;(n||!Number.isInteger(e[Hi]))&&(e[Hi]=r||(r=Vn.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[rm]))&&(e[rm]=r||Vn.getNextMonotonicTime()):delete e[rm]}a(rN,"setTimestamps");function nm(e,t,r){r.indexOf(ms.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ms.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),_$.initializeDBIs(e,t,r)}a(nm,"initializeTransaction");async function O$(e,t,r,n,s=Vn.getNextMonotonicTime()){om(e,t,r,n),nm(e,t,r);let i=new f$,o=[],c=[],u=[];for(let _=0;_<n.length;_++){let l=n[_],d=l[t],f;try{f=im(e,t,l,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return sm(c,u,n,i,s,o)}a(O$,"updateRecords");async function b$(e,t,r,n,s=Vn.getNextMonotonicTime()){try{om(e,t,r,n)}catch(u){throw S$(u,u.message,T$.HTTP_STATUS_CODES.BAD_REQUEST)}nm(e,t,r);let i=new E$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u],l;m$.isEmpty(_[t])?(l=p$.v4(),_[t]=l):l=_[t];let d=im(e,t,_,l,i,!1,s);o.push(d),c.push(l)}return sm(o,c,n,i,s)}a(b$,"upsertRecords");async function sm(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Vn.getNextMonotonicTime(),A$(r,i),n}a(sm,"finalizeWrite");function im(e,t,r,n,s,i=!1,o){let c=e.dbis[t],u=c.getEntry(n),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(rN(r,!l,o),Number.isInteger(r[Hi])&&_[Hi]>r[Hi])return!1;l&&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 g=p([[_]]);Array.isArray(g)&&(p=g[0][ms.FUNC_VAL],r[h]=p)}if(p===O)continue;let R=Vn.getIndexedValues(O);if(R){l_&&S.prefetch(R.map(g=>({key:g,value:n})),__);for(let g=0,P=R.length;g<P;g++)S.remove(R[g],n)}if(R=Vn.getIndexedValues(p),R){l_&&S.prefetch(R.map(g=>({key:g,value:n})),__);for(let g=0,P=R.length;g<P;g++)S.put(R[g],n)}}let E=Object.assign({},_,r);c.put(n,E,E[Hi])},"do_put");return u?d=c.ifVersion(n,u.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:im(e,t,r,n,s,i,o))}a(im,"updateUpsertRecord");function N$(e,t,r){if(Vn.validateEnv(e),t===void 0)throw new Error(bc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(bc.WRITE_ATTRIBUTES_REQUIRED):new Error(bc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(N$,"validateBasic");function om(e,t,r,n){if(N$(e,t,r),!Array.isArray(n))throw n===void 0?new Error(bc.RECORDS_REQUIRED):new Error(bc.RECORDS_MUST_BE_ARRAY)}a(om,"validateWrite");function __(){}a(__,"noop");nN.exports={insertRecords:g$,updateRecords:O$,upsertRecords:b$}});var xi=T((eae,y$)=>{y$.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 Yn=T((tae,oN)=>{"use strict";var iN=J(),sN=M(),Go=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,$n=require("joi"),Js={schema_format:{pattern:Go,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},w$=$n.alternatives($n.string().min(1).max(Js.schema_length.maximum).pattern(Go).messages({"string.pattern.base":"{:#label} "+Js.schema_format.message}),$n.number(),$n.array()).required(),I$=$n.alternatives($n.string().min(1).max(Js.schema_length.maximum).pattern(Go).messages({"string.pattern.base":"{:#label} "+Js.schema_format.message}),$n.number()),C$=$n.alternatives($n.string().min(1).max(Js.schema_length.maximum).pattern(Go).messages({"string.pattern.base":"{:#label} "+Js.schema_format.message}),$n.number()).required();function D$(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Js.schema_length.maximum?`'${e}' maximum of 250 characters`:Go.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(D$,"checkValidTable");function L$(e,t){return iN.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(L$,"validateSchemaExists");function U$(e,t){let r=t.state.ancestors[0].schema;return iN.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(U$,"validateTableExists");function M$(e,t){return e.toLowerCase()===sN.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${sN.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(M$,"validateSchemaName");oN.exports={common_validators:Js,schema_regex:Go,hdb_schema_table:w$,validateSchemaExists:L$,validateTableExists:U$,validateSchemaName:M$,checkValidTable:D$,hdb_database:I$,hdb_table:C$}});var d_=T((nae,aN)=>{var{common_validators:Kn}=Yn(),yc=je(),Nc="is required",dt={database:{presence:!1,format:Kn.schema_format,length:Kn.schema_length},schema:{presence:!1,format:Kn.schema_format,length:Kn.schema_length},table:{presence:!0,format:Kn.schema_format,length:Kn.schema_length},attribute:{presence:!0,format:Kn.schema_format,length:Kn.schema_length},hash_attribute:{presence:!0,format:Kn.schema_format,length:Kn.schema_length}};function wc(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(wc,"makeAttributesStrings");function P$(e){return e=wc(e),dt.table.presence=!1,dt.attribute.presence=!1,dt.hash_attribute.presence=!1,yc.validateObject(e,dt)}a(P$,"schema_object");function v$(e){return e=wc(e),dt.table.presence={message:Nc},dt.attribute.presence=!1,dt.hash_attribute.presence=!1,yc.validateObject(e,dt)}a(v$,"table_object");function B$(e){return e=wc(e),dt.table.presence={message:Nc},dt.attribute.presence=!1,yc.validateObject(e,dt)}a(B$,"create_table_object");function H$(e){return e=wc(e),dt.table.presence={message:Nc},dt.attribute.presence={message:Nc},dt.hash_attribute.presence=!1,yc.validateObject(e,dt)}a(H$,"attribute_object");function x$(e){return e=wc(e),dt.table.presence={message:Nc},dt.attribute.presence=!1,dt.hash_attribute.presence=!1,yc.validateObject(e,dt)}a(x$,"describe_table");function F$(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(F$,"validateTableResidence");aN.exports={schema_object:P$,create_table_object:B$,table_object:v$,attribute_object:H$,describe_table:x$,validateTableResidence:F$}});var uN=T((iae,cN)=>{"use strict";var q$=require("uuid"),am=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||q$.v4(),this.schema_table=`${this.schema}.${this.table}`}};cN.exports=am});var f_=T((aae,lN)=>{"use strict";var G$=uN(),cm=class extends G${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}};lN.exports=cm});var dN=T((uae,_N)=>{"use strict";_N.exports=V$;var k$="inserted";function V$(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===k$?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(V$,"returnObject")});var E_=T((_ae,pN)=>{"use strict";var $$=M(),um=Ye(),Y$=qo(),{getSystemSchemaPath:K$,getSchemaPath:W$}=Qe(),Q$=xi(),z$=d_(),J$=f_(),X$=dN(),{handleHDBError:fN,hdb_errors:hN}=re(),EN=J(),{HTTP_STATUS_CODES:j$}=hN,lm=Q$.hdb_attribute,mN=[];for(let e=0;e<lm.attributes.length;e++)mN.push(lm.attributes[e].attribute);var Z$="inserted";pN.exports=e1;async function e1(e){let t=z$.attribute_object(e);if(t)throw fN(new Error,t.message,hN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&EN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw fN(new Error,r,j$.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=EN.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new J$(e.schema,e.table,e.attribute,e.id);try{let i=await um.openEnvironment(W$(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);um.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await um.openEnvironment(K$(),$$.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Y$.insertRecords(o,lm.hash_attribute,mN,[s]);return X$(Z$,c,{records:[s]},u)}catch(i){throw i}}a(e1,"lmdbCreateAttribute")});var dm=T((fae,TN)=>{var{hdb_table:t1,hdb_database:SN}=Yn(),r1=je(),_m=require("joi"),n1={undefined:"undefined",null:"null"},s1=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||n1[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"),i1=_m.object({database:SN,schema:SN,table:t1,records:_m.array().items(_m.object().custom(s1)).required()});TN.exports=function(e){return r1.validateBySchema(e,i1)}});var Ic=T((mae,RN)=>{"use strict";var ps=J(),gN=W(),hae=dm(),{getDatabases:o1}=(Ae(),ne(qe)),{ClientError:Fi}=re();RN.exports=a1;function a1(e){if(ps.isEmpty(e))throw new Fi("invalid update parameters defined.");if(ps.isEmptyOrZeroLength(e.schema))throw new Fi("invalid schema specified.");if(ps.isEmptyOrZeroLength(e.table))throw new Fi("invalid table specified.");if(!Array.isArray(e.records))throw new Fi("records must be an array");let t=o1()[e.schema]?.[e.table];if(ps.isEmpty(t))throw new Fi(`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&&ps.isEmptyOrZeroLength(o[r]))throw gN.error("a valid hash attribute must be provided with update record:",o),new Fi("a valid hash attribute must be provided with update record, check log for more info");if(!ps.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw gN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Fi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!ps.isEmpty(o[r])&&o[r]!==""&&n.has(ps.autoCast(o[r]))&&(o.skip=!0),n.add(ps.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(a1,"insertUpdateValidate")});var Cc=T((Sae,AN)=>{"use strict";var c1=M().OPERATIONS_ENUM,fm=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=c1.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};AN.exports=fm});var Mc=T((Rae,ON)=>{"use strict";var gae=Cc(),h_=M(),hm=J(),Em=W(),u1=require("uuid"),{handleHDBError:Dc,hdb_errors:l1}=re(),{HDB_ERROR_MSGS:Lc,HTTP_STATUS_CODES:Uc}=l1;ON.exports=_1;function _1(e,t,r){for(let s=0;s<t.length;s++)d1(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];f1(i,r,e.operation)}}a(_1,"processRows");function d1(e){if(Buffer.byteLength(String(e))>h_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Dc(new Error,Lc.ATTR_NAME_LENGTH_ERR(e),Uc.BAD_REQUEST,void 0,void 0,!0);if(hm.isEmptyOrZeroLength(e)||hm.isEmpty(e.trim()))throw Dc(new Error,Lc.ATTR_NAME_NULLISH_ERR,Uc.BAD_REQUEST,void 0,void 0,!0)}a(d1,"validateAttribute");function f1(e,t,r){if(!e.hasOwnProperty(t)||hm.isEmptyOrZeroLength(e[t])){if(r===h_.OPERATIONS_ENUM.INSERT||r===h_.OPERATIONS_ENUM.UPSERT){e[t]=u1.v4();return}throw Em.error("Update transaction aborted due to record with no hash value:",e),Dc(new Error,Lc.RECORD_MISSING_HASH_ERR,Uc.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>h_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Em.error(e),Dc(new Error,Lc.HASH_VAL_LENGTH_ERR,Uc.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Em.error(e),Dc(new Error,Lc.INVALID_FORWARD_SLASH_IN_HASH_ERR,Uc.BAD_REQUEST,void 0,void 0,!0)}a(f1,"validateHash")});var NN=T((Oae,bN)=>{"use strict";var mm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};bN.exports=mm});var IN=T((Nae,wN)=>{"use strict";var pm=Ye(),E1=W(),yN=Or().LMDB_ERRORS_ENUM;wN.exports=h1;async function h1(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await pm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==yN.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await pm.closeEnvironment(global.lmdb_map[n]),await pm.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==yN.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){E1.error(t)}}a(h1,"cleanLMDBMap")});var Ss=T((wae,UN)=>{"use strict";var Pc=require("crypto"),m1=te(),{CONFIG_PARAMS:p1}=M(),DN="aes-256-cbc",S1=32,T1=16,Sm=64,LN=32,g1=Sm+LN,CN=new Map;UN.exports={encrypt:R1,decrypt:A1,createNatsTableStreamName:O1};function R1(e){let t=Pc.randomBytes(S1),r=Pc.randomBytes(T1),n=Pc.createCipheriv(DN,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(R1,"encrypt");function A1(e){let t=e.substr(0,Sm),r=e.substr(Sm,LN),n=e.substr(g1,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Pc.createDecipheriv(DN,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(A1,"decrypt");function O1(e,t){let r=m1.get(p1.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=CN.get(r);return n||(n=Pc.createHash("md5").update(r).digest("hex"),CN.set(r,n)),n}a(O1,"createNatsTableStreamName")});var qi=T((Dae,PN)=>{"use strict";var Cae=Zr(),m_=W(),MN=d_(),b1=Ss(),p_=J(),{handleHDBError:S_,hdb_errors:N1}=re(),{HDB_ERROR_MSGS:T_,HTTP_STATUS_CODES:Tm}=N1,y1=te();y1.initSync();var{getDatabases:gm}=(Ae(),ne(qe));PN.exports={describeAll:w1,describeTable:g_,describeSchema:I1};async function w1(e){try{let t=p_.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=gm(),i={},o={},c=[],u=e?.exact_count;for(let l in s){i[l]=!0,!t&&!n&&(o[l]=e.hdb_user.role.permission[l].describe);let d=s[l];for(let f in d)try{let E;if(t||n)E=await g_({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await g_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){m_.error(E)}}let _={};for(let l in c)t||n?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||n?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return m_.error("Got an error in describeAll"),m_.error(t),S_(new Error,T_.DESCRIBE_ALL_ERR)}}a(w1,"describeAll");async function g_(e,t){p_.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=MN.describe_table(e);if(i)throw i;let c=gm()[r];if(!c)throw S_(new Error,T_.SCHEMA_NOT_FOUND(e.schema),Tm.NOT_FOUND);let u=c[n];if(!u)throw S_(new Error,T_.TABLE_NOT_FOUND(e.schema,e.table),Tm.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(s){let f={};s.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=b1.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){m_.warn(`unable to stat table dbi due to ${f}`)}return d}a(g_,"descTable");async function I1(e){p_.transformReq(e);let t=MN.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=gm()[n];if(!i)throw S_(new Error,T_.SCHEMA_NOT_FOUND(e.schema),Tm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),p_.isEmpty(u)||u.describe){let _=await g_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(I1,"describeSchema")});var Xs=T((Pae,FN)=>{var C1=xi(),{callbackify:BN,promisify:D1}=require("util"),{getDatabases:HN}=(Ae(),ne(qe));FN.exports={setSchemaDataToGlobal:vN,getTableSchema:L1,getSystemSchema:U1,setSchemaDataToGlobalAsync:D1(vN)};var xN=qi(),Uae=BN(xN.describeAll),Mae=BN(xN.describeTable);function vN(e){global.hdb_schema=HN(),e&&e()}a(vN,"setSchemaDataToGlobal");function L1(e,t,r){let n=HN()[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(L1,"getTableSchema");function U1(){return C1}a(U1,"getSystemSchema")});var en=T((Bae,VN)=>{"use strict";var A_=dm(),xt=J(),M1=require("util"),O_=yn(),P1=Xs(),qN=W(),{handleHDBError:Gi,hdb_errors:v1}=re(),{HTTP_STATUS_CODES:ki}=v1,B1=M1.promisify(P1.getTableSchema),H1="updated",GN="inserted",kN="upserted";VN.exports={insert:F1,update:q1,upsert:G1,validation:x1,flush:k1};async function x1(e){if(xt.isEmpty(e))throw new Error("invalid update parameters defined.");if(xt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(xt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await B1(e.schema,e.table),r=A_(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&&xt.isEmptyOrZeroLength(c[n]))throw qN.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!xt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw qN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!xt.isEmpty(c[n])&&c[n]!==""&&s.has(xt.autoCast(c[n]))&&(c.skip=!0),s.add(xt.autoCast(c[n]));for(let u in c)i[u]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(x1,"validation");async function F1(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=A_(e);if(t)throw Gi(new Error,t.message,ki.BAD_REQUEST);xt.transformReq(e);let r=xt.checkSchemaTableExist(e.schema,e.table);if(r)throw Gi(new Error,r,ki.BAD_REQUEST);let n=await O_.createRecords(e);return R_(GN,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(F1,"insertData");async function q1(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=A_(e);if(t)throw Gi(new Error,t.message,ki.BAD_REQUEST);xt.transformReq(e);let r=xt.checkSchemaTableExist(e.schema,e.table);if(r)throw Gi(new Error,r,ki.BAD_REQUEST);let n=await O_.updateRecords(e);return xt.isEmpty(n.existing_rows)?R_(H1,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):R_(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(q1,"updateData");async function G1(e){if(e.operation!=="upsert")throw Gi(new Error,"invalid operation, must be upsert",ki.INTERNAL_SERVER_ERROR);let t=A_(e);if(t)throw Gi(new Error,t.message,ki.BAD_REQUEST);xt.transformReq(e);let r=xt.checkSchemaTableExist(e.schema,e.table);if(r)throw Gi(new Error,r,ki.BAD_REQUEST);let n=await O_.upsertRecords(e);return R_(kN,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(G1,"upsertData");function R_(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===GN?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===kN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(R_,"returnObject");function k1(e){return xt.transformReq(e),O_.flush(e.schema,e.table)}a(k1,"flush")});var Am=T((xae,KN)=>{var V1=je(),Rm=require("joi"),{hdb_table:$1,hdb_database:$N}=Yn(),YN={schema:$N,database:$N,table:$1},Y1={date:Rm.date().iso().required()},K1={timestamp:Rm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};KN.exports=function(e,t){let r=t==="timestamp"?{...YN,...K1}:{...YN,...Y1},n=Rm.object(r);return V1.validateBySchema(e,n)}});var zN=T((Fae,QN)=>{var W1=je(),Om=require("joi"),{hdb_table:Q1,hdb_database:WN}=Yn(),z1=Om.object({schema:WN,database:WN,table:Q1,hash_values:Om.array().required(),ids:Om.array()});QN.exports=function(e){return W1.validateBySchema(e,z1)}});var XN=T((qae,JN)=>{"use strict";var bm=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}},Nm=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}},ym=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};JN.exports={InsertObject:bm,NoSQLSeachObject:Nm,DeleteResponseObject:ym}});var Yi=T((kae,ry)=>{"use strict";var ZN=Am(),J1=zN(),Vi=J(),jN=require("moment"),ey=W(),{promisify:X1,callbackify:j1}=require("util"),$i=M(),Z1=Xs(),wm=X1(Z1.getTableSchema),Im=yn(),{DeleteResponseObject:eY}=XN(),{handleHDBError:js,hdb_errors:tY}=re(),{HDB_ERROR_MSGS:b_,HTTP_STATUS_CODES:Zs}=tY,rY="records successfully deleted",nY=j1(ty);ry.exports={delete:nY,deleteRecord:ty,deleteFilesBefore:sY,deleteAuditLogsBefore:iY};async function sY(e){let t=ZN(e,"date");if(t)throw js(t,t.message,Zs.BAD_REQUEST,void 0,void 0,!0);if(Vi.transformReq(e),!jN(e.date,jN.ISO_8601).isValid())throw js(new Error,b_.INVALID_DATE,Zs.BAD_REQUEST,$i.LOG_LEVELS.ERROR,b_.INVALID_DATE,!0);let n=Vi.checkSchemaTableExist(e.schema,e.table);if(n)throw js(new Error,n,Zs.NOT_FOUND,$i.LOG_LEVELS.ERROR,n,!0);let s=await Im.deleteRecordsBefore(e);if(await wm(e.schema,e.table),ey.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(sY,"deleteFilesBefore");async function iY(e){let t=ZN(e,"timestamp");if(t)throw js(t,t.message,Zs.BAD_REQUEST,void 0,void 0,!0);if(Vi.transformReq(e),isNaN(e.timestamp))throw js(new Error,b_.INVALID_VALUE("Timestamp"),Zs.BAD_REQUEST,$i.LOG_LEVELS.ERROR,b_.INVALID_VALUE("Timestamp"),!0);let r=Vi.checkSchemaTableExist(e.schema,e.table);if(r)throw js(new Error,r,Zs.NOT_FOUND,$i.LOG_LEVELS.ERROR,r,!0);let n=await Im.deleteAuditLogsBefore(e);return await wm(e.schema,e.table),ey.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(iY,"deleteAuditLogsBefore");async function ty(e){e.ids&&(e.hash_values=e.ids);let t=J1(e);if(t)throw js(t,t.message,Zs.BAD_REQUEST,void 0,void 0,!0);Vi.transformReq(e);let r=Vi.checkSchemaTableExist(e.schema,e.table);if(r)throw js(new Error,r,Zs.NOT_FOUND,$i.LOG_LEVELS.ERROR,r,!0);try{await wm(e.schema,e.table);let n=await Im.deleteRecords(e);return Vi.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${rY}`),n}catch(n){if(n.message===$i.SEARCH_NOT_FOUND_MESSAGE){let s=new eY;return s.message=$i.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(ty,"deleteRecord")});var N_=T(($ae,iy)=>{var oY=require("crypto"),ny=9;function aY(e){let t=uY(ny),r=sy(e+t);return t+r}a(aY,"createHash");function cY(e,t){let r=e?.substr(0,ny),n=r+sy(t+r);return e===n}a(cY,"validateHash");function uY(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(uY,"generateSalt");function sy(e){return oY.createHash("md5").update(e).digest("hex")}a(sy,"md5");iy.exports={hash:aY,validate:cY}});var ay=T((Kae,oy)=>{var Cm=je(),Yt={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function lY(e){return Yt.password.presence=!0,Yt.username.presence=!0,Yt.role.presence=!0,Yt.active.presence=!0,Cm.validateObject(e,Yt)}a(lY,"addUserValidation");function _Y(e){return Yt.password.presence=!1,Yt.username.presence=!0,Yt.role.presence=!1,Yt.active.presence=!1,Cm.validateObject(e,Yt)}a(_Y,"alterUserValidation");function dY(e){return Yt.password.presence=!1,Yt.username.presence=!0,Yt.role.presence=!1,Yt.active.presence=!1,Cm.validateObject(e,Yt)}a(dY,"dropUserValidation");oy.exports={addUserValidation:lY,alterUserValidation:_Y,dropUserValidation:dY}});var rt=T((zae,uy)=>{"use strict";var{platform:Qae}=require("os"),fY="nats-server.zip",Dm="nats-server",EY=process.platform==="win32"?`${Dm}.exe`:Dm,Lm="HDB",hY=/^[^\s.,*>]+$/,cy="__request__",mY=a(e=>`${e}.${cy}`,"REQUEST_SUBJECT"),pY={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},SY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},TY={HUB:"hub.pid",LEAF:"leaf.pid"},gY={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},RY={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Lm,deliver_subject:"__HDB__.WORKQUEUE"},AY={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Lm,deliver_subject:"HDB.SCHEMAQUEUE"},OY={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Lm,deliver_subject:"HDB.USERQUEUE"},bY={SUCCESS:"success",ERROR:"error"},NY={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},yY={TXN:"txn",MSGID:"msgid"},ko={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},wY={[ko.ERR]:1,[ko.WRN]:2,[ko.INF]:3,[ko.DBG]:4,[ko.TRC]:5},IY={debug:"-D",trace:"-DVV"};uy.exports={NATS_SERVER_ZIP:fY,NATS_SERVER_NAME:Dm,NATS_BINARY_NAME:EY,PID_FILES:TY,NATS_CONFIG_FILES:SY,SERVER_SUFFIX:gY,WORK_QUEUE_CONSUMER_NAMES:RY,SCHEMA_QUEUE_CONSUMER_NAMES:AY,USER_QUEUE_CONSUMER_NAMES:OY,NATS_TERM_CONSTRAINTS_RX:hY,REQUEST_SUFFIX:cy,UPDATE_REMOTE_RESPONSE_STATUSES:bY,CLUSTER_STATUS_STATUSES:NY,REQUEST_SUBJECT:mY,SUBJECT_PREFIXES:yY,MSG_HEADERS:pY,LOG_LEVELS:ko,LOG_LEVEL_FLAGS:IY,LOG_LEVEL_HIERARCHY:wY}});var _y=T((Xae,ly)=>{"use strict";var y_=M(),w_=class{static{a(this,"BaseLicense")}constructor(t=0,r=y_.RAM_ALLOCATION_ENUM.DEFAULT,n=y_.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},Um=class extends w_{static{a(this,"ExtendedLicense")}constructor(t=0,r=y_.RAM_ALLOCATION_ENUM.DEFAULT,n=y_.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};ly.exports={BaseLicense:w_,ExtendedLicense:Um}});var Ki=T((Zae,py)=>{"use strict";var $o=require("fs-extra"),fy=N_(),Ey=require("crypto"),CY=require("moment"),DY=require("uuid").v4,Kt=W(),Pm=require("path"),LY=J(),ei=M(),{totalmem:dy}=require("os"),UY=_y().ExtendedLicense,Vo="invalid license key format",MY="061183",PY="mofi25",vY="aes-256-cbc",BY=16,HY=32,hy=te();hy.initSync();var Mm;py.exports={validateLicense:my,generateFingerPrint:FY,licenseSearch:Hm,getLicense:kY,checkMemoryLimit:VY};function vm(){return Pm.join(hy.getHdbBasePath(),ei.LICENSE_KEY_DIR_NAME,ei.LICENSE_FILE_NAME)}a(vm,"getLicenseDirPath");function xY(){let e=vm();return Pm.join(e,ei.LICENSE_FILE_NAME)}a(xY,"getLicenseFilePath");function Bm(){let e=vm();return Pm.join(e,ei.REG_KEY_FILE_NAME)}a(Bm,"getFingerPrintFilePath");async function FY(){let e=Bm();try{return await $o.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await qY();throw Kt.error(`Error writing fingerprint file to ${e}`),Kt.error(t),new Error("There was an error generating the fingerprint")}}a(FY,"generateFingerPrint");async function qY(){let e=DY(),t=fy.hash(e),r=Bm();try{await $o.mkdirp(vm()),await $o.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Kt.error(`Error writing fingerprint file to ${r}`),Kt.error(n),new Error("There was an error generating the fingerprint")}return t}a(qY,"writeFingerprint");function my(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ei.RAM_ALLOCATION_ENUM.DEFAULT,version:ei.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Kt.error("empty license key passed to validate."),r;let n=Bm(),s=!1;try{s=$o.statSync(n)}catch(i){Kt.error(i)}if(s){let i;try{i=$o.readFileSync(n,"utf8")}catch{Kt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(PY),c=o[1];c=Buffer.concat([Buffer.from(c)],BY);let u=Buffer.concat([Buffer.from(i)],HY),_=Ey.createDecipheriv(vY,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=GY(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Vo),Kt.error(Vo),new Error(Vo)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Vo),Kt.error(Vo),new Error(Vo)}else r.exp_date=l;r.exp_date<CY().valueOf()&&(r.valid_date=!1),fy.validate(o[1],`${MY}${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||Kt.error("Invalid licence"),r}a(my,"validateLicense");function GY(e,t){try{let r=Ey.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Kt.warn("Check old license failed")}}a(GY,"checkOldLicense");function Hm(){let e=new UY,t=[];try{t=$o.readFileSync(xY(),"utf-8").split(ei.NEW_LINE)}catch(r){r.code==="ENOENT"?Kt.info("no license file found"):Kt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(LY.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=my(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){Kt.error("There was an error parsing the license string."),Kt.error(s),e.ram_allocation=ei.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Mm=e,e}a(Hm,"licenseSearch");async function kY(){return Mm||await Hm(),Mm}a(kY,"getLicense");function VY(){let e=Hm().ram_allocation,t=process.constrainedMemory?.()||dy();if(t=Math.round(Math.min(t,dy())/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(VY,"checkMemoryLimit")});var tn=T((sce,My)=>{"use strict";var Ry="username is required",Ay="nothing to update, must supply active, role or password to update",Oy="password cannot be an empty string",by="If role is specified, it cannot be empty.",Ny="active must be true or false";My.exports={addUser:jY,alterUser:ZY,dropUser:tK,getSuperUser:iK,userInfo:rK,listUsers:C_,listUsersExternal:nK,setUsersToGlobal:Ko,findAndValidateUser:Ly,getClusterUser:oK,USERNAME_REQUIRED:Ry,ALTERUSER_NOTHING_TO_UPDATE:Ay,EMPTY_PASSWORD:Oy,EMPTY_ROLE:by,ACTIVE_BOOLEAN:Ny};var yy=en(),$Y=Yi(),qm=N_(),wy=ay(),Iy=Zr(),Gm=Ts(),Lr=J(),Cy=require("validate.js"),Te=W(),{promisify:YY}=require("util"),km=Ss(),Sy=M(),Ty=rt(),KY=wr(),tce=te(),rce=Ki(),WY=xi(),{table:nce}=(Ae(),ne(qe)),{handleHDBError:Wn,hdb_errors:QY}=re(),{HTTP_STATUS_CODES:Qn,AUTHENTICATION_ERROR_MSGS:xm,HDB_ERROR_MSGS:Yo}=QY,{UserEventMsg:Vm}=wn(),Fm=require("lodash"),{server:$m}=(tr(),ne(Li)),zY=W();$m.getUser=(e,t)=>Ly(e,t,t!=null);var Dy={username:!0,active:!0,role:!0,password:!0},gy=new Map,I_=Iy.searchByValue,JY=Iy.searchByHash,XY=YY($Y.delete);async function jY(e){let t=Cy.cleanAttributes(e,Dy),r=wy.addUserValidation(t);if(r)throw Wn(new Error,r.message,Qn.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 I_(n),s=s&&Array.from(s)}catch(u){throw Te.error("There was an error searching for a role in add user"),Te.error(u),u}if(!s||s.length<1)throw Wn(new Error,Yo.ROLE_NAME_NOT_FOUND(t.role),Qn.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Wn(new Error,Yo.DUP_ROLES_FOUND(t.role),Qn.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=km.encrypt(t.password)),t.password=qm.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await yy.insert(i)}catch(u){throw Te.error("There was an error searching for a user."),Te.error(u),u}Te.debug(o);try{await Ko()}catch(u){throw Te.error("Got an error setting users to global"),Te.error(u),u}if(o.skipped_hashes.length===1)throw Wn(new Error,Yo.USER_ALREADY_EXISTS(t.username),Qn.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],Gm.signalUserChange(new Vm(process.pid)),`${c.username} successfully added`}a(jY,"addUser");async function ZY(e){let t=Cy.cleanAttributes(e,Dy);if(Lr.isEmptyOrZeroLength(t.username))throw new Error(Ry);if(Lr.isEmptyOrZeroLength(t.password)&&Lr.isEmptyOrZeroLength(t.role)&&Lr.isEmptyOrZeroLength(t.active))throw new Error(Ay);if(!Lr.isEmpty(t.password)&&Lr.isEmptyOrZeroLength(t.password.trim()))throw new Error(Oy);if(!Lr.isEmpty(t.active)&&!Lr.isBoolean(t.active))throw new Error(Ny);let r=eK(t.username);if(!Lr.isEmpty(t.password)&&!Lr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=km.encrypt(t.password)),t.password=qm.hash(t.password)),t.role==="")throw new Error(by);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 I_(i)||[])}catch(c){throw Te.error("Got an error searching for a role."),Te.error(c),c}if(!o||o.length===0){let c=Yo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Te.error(c),Wn(new Error,c,Qn.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Yo.ALTER_USER_DUP_ROLES(t.role);throw Te.error(c),Wn(new Error,c,Qn.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 yy.update(n)}catch(i){throw Te.error("Error during update."),Te.error(i),i}try{await Ko()}catch(i){throw Te.error("Got an error setting users to global"),Te.error(i),i}return Gm.signalUserChange(new Vm(process.pid)),s}a(ZY,"alterUser");function eK(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(eK,"isClusterUser");async function tK(e){try{let t=wy.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Lr.isEmpty(global.hdb_users.get(e.username)))throw Wn(new Error,Yo.USER_NOT_EXIST(e.username),Qn.NOT_FOUND,void 0,void 0,!0);let n;try{n=await XY(r)}catch(s){throw Te.error("Got an error deleting a user."),Te.error(s),s}Te.debug(n);try{await Ko()}catch(s){throw Te.error("Got an error setting users to global."),Te.error(s),s}return Gm.signalUserChange(new Vm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(tK,"dropUser");async function rK(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Fm.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await JY(r)}catch(s){throw Te.error("Got an error searching for a role."),Te.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Te.error(r),r}return t}a(rK,"userInfo");async function nK(){let e;try{e=await C_()}catch(t){throw Te.error("Got an error listing users."),Te.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(nK,"listUsersExternal");async function C_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await I_(e)}catch(o){throw Te.error("Got an error searching for roles."),Te.error(o),o}let r={};for(let o of t)r[o.id]=Fm.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 I_(n)}catch(o){throw Te.error("Got an error searching for users."),Te.error(o),o}let i=new Map;for(let o of s)o=Fm.cloneDeep(o),o.role=r[o.role],sK(o.role),i.set(o.username,o);return i}catch(e){throw Te.error("got an error listing users"),Te.error(e),Lr.errorizeMessage(e)}return null}a(C_,"listUsers");function sK(e){try{if(!e){Te.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(WY)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Te.error("Got an error trying to set system permissions."),Te.error(t)}}a(sK,"appendSystemTablesToRole");async function Ko(){try{let e=await C_();global.hdb_users=e}catch(e){throw Te.error(e),e}}a(Ko,"setUsersToGlobal");async function Ly(e,t,r=!0){global.hdb_users||await Ko();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Wn(new Error,xm.GENERIC_AUTH_FAIL,Qn.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Wn(new Error,xm.USER_INACTIVE,Qn.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(gy.get(t)===n.password)return s;if(qm.validate(n.password,t))gy.set(t,n.password);else throw Wn(new Error,xm.GENERIC_AUTH_FAIL,Qn.UNAUTHORIZED,void 0,void 0,!0)}return s}a(Ly,"findAndValidateUser");async function iK(){global.hdb_users||await Ko();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(iK,"getSuperUser");async function oK(){let e=await C_(),t=KY.getConfigFromFile(Sy.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Lr.isEmpty(r)&&r?.role?.role===Sy.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=km.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Ty.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Ty.SERVER_SUFFIX.ADMIN,r}a(oK,"getClusterUser");var Uy=[];$m.invalidateUser=function(e){for(let t of Uy)try{t(e)}catch(r){zY.error("Error invalidating user",r)}};$m.onInvalidatedUser=function(e){Uy.push(e)}});var Bc=T((cce,Hy)=>{"use strict";var Wi=W(),Ur=M(),aK=IN(),oce=Xs(),ace=qi(),cK=tn(),{validateEvent:Py}=wn(),vc=yn(),uK=require("process"),{resetDatabases:lK}=(Ae(),ne(qe)),_K={[Ur.ITC_EVENT_TYPES.SCHEMA]:dK,[Ur.ITC_EVENT_TYPES.USER]:By};async function dK(e){let t=Py(e);if(t){Wi.error(t);return}Wi.trace("ITC schemaHandler received schema event:",e),await aK(e.message),await fK(e.message)}a(dK,"schemaHandler");async function fK(e){try{vc.resetReadTxn(Ur.SYSTEM_SCHEMA_NAME,Ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),vc.resetReadTxn(Ur.SYSTEM_SCHEMA_NAME,Ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),vc.resetReadTxn(Ur.SYSTEM_SCHEMA_NAME,Ur.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=lK();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Wi.error(t)}}a(fK,"syncSchemaMetadata");var vy=[];async function By(e){try{try{vc.resetReadTxn(Ur.SYSTEM_SCHEMA_NAME,Ur.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),vc.resetReadTxn(Ur.SYSTEM_SCHEMA_NAME,Ur.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Wi.warn(r)}let t=Py(e);if(t){Wi.error(t);return}Wi.trace(`ITC userHandler ${Ur.HDB_ITC_CLIENT_PREFIX}${uK.pid} received user event:`,e),await cK.setUsersToGlobal();for(let r of vy)r()}catch(t){Wi.error(t)}}a(By,"userHandler");By.addListener=function(e){vy.push(e)};Hy.exports=_K});var wn=T((Ece,Fy)=>{"use strict";var lce=W(),Ym=J(),EK=M(),{ITC_ERRORS:Hc}=Or(),{parentPort:_ce,threadId:hK,isMainThread:mK,workerData:dce}=require("worker_threads"),{onMessageFromWorkers:pK,broadcast:fce,broadcastWithAcknowledgement:SK}=et();Fy.exports={sendItcEvent:TK,validateEvent:xy,SchemaEventMsg:gK,UserEventMsg:RK};var D_;pK(async(e,t)=>{D_=D_||Bc(),xy(e),D_[e.type]&&await D_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function TK(e){return!mK&&e.message&&(e.message.originator=hK),SK(e)}a(TK,"sendItcEvent");function xy(e){if(typeof e!="object")return Hc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Ym.isEmpty(e.type))return Hc.MISSING_TYPE;if(!e.hasOwnProperty("message")||Ym.isEmpty(e.message))return Hc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Ym.isEmpty(e.message.originator))return Hc.MISSING_ORIGIN;if(EK.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Hc.INVALID_EVENT(e.type)}a(xy,"validateEvent");function gK(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(gK,"SchemaEventMsg");function RK(e){this.originator=e}a(RK,"UserEventMsg")});var Ts=T((pce,Vy)=>{"use strict";var qy=M(),mce=J(),L_=W(),Gy=NN(),Wo,{sendItcEvent:ky}=wn();function AK(e){try{L_.trace("signalSchemaChange called with message:",e),Wo=Wo||Bc();let t=new Gy(qy.ITC_EVENT_TYPES.SCHEMA,e);return Wo.schema(t),ky(t)}catch(t){L_.error(t)}}a(AK,"signalSchemaChange");function OK(e){try{L_.trace("signalUserChange called with message:",e),Wo=Wo||Bc();let t=new Gy(qy.ITC_EVENT_TYPES.USER,e);return Wo.user(t),ky(t)}catch(t){L_.error(t)}}a(OK,"signalUserChange");Vy.exports={signalSchemaChange:AK,signalUserChange:OK}});var U_=T((Tce,Yy)=>{"use strict";var $y=J(),bK=M(),NK=W(),yK=E_(),wK=f_(),IK=Ts(),{SchemaEventMsg:CK}=wn(),DK="already exists in";Yy.exports=LK;async function LK(e,t,r){if($y.isEmptyOrZeroLength(r))return r;let n=[];$y.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 UK(e,t.schema,t.name,i)})),s}a(LK,"lmdbCheckForNewAttributes");async function UK(e,t,r,n){let s=new wK(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await MK(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(DK))NK.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(UK,"createNewAttribute");async function MK(e){let t;return t=await yK(e),IK.signalSchemaChange(new CK(process.pid,bK.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(MK,"createAttribute")});var Qo=T((Rce,Ky)=>{"use strict";var Km=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}};Ky.exports=Km});var Qy=T((Oce,Wy)=>{"use strict";var PK=Qo(),vK=M().OPERATIONS_ENUM,Wm=class extends PK{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(vK.INSERT,r,n,s,i),this.records=t}};Wy.exports=Wm});var Jy=T((Nce,zy)=>{"use strict";var BK=Qo(),HK=M().OPERATIONS_ENUM,Qm=class extends BK{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(HK.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};zy.exports=Qm});var jy=T((wce,Xy)=>{"use strict";var xK=Qo(),FK=M().OPERATIONS_ENUM,zm=class extends xK{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(FK.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};Xy.exports=zm});var ew=T((Cce,Zy)=>{"use strict";var qK=Qo(),GK=M().OPERATIONS_ENUM,Jm=class extends qK{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(GK.DELETE,n,s,t,i),this.original_records=r}};Zy.exports=Jm});var xc=T((Uce,sw)=>{"use strict";var Lce=require("path"),tw=Ye(),kK=Qy(),VK=Jy(),$K=jy(),YK=ew(),zo=_t(),rw=J(),{CONFIG_PARAMS:KK}=M(),nw=te();nw.initSync();var M_=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:WK}=Qe();sw.exports=QK;async function QK(e,t){if(nw.get(KK.LOGGING_AUDITLOG)===!1)return;let r=WK(e.schema,e.table),n=await tw.openEnvironment(r,e.table,!0),s=zK(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){tw.initializeDBIs(n,zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,zo.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),rw.isEmpty(s.user_name)||n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(QK,"writeTransaction");function zK(e,t){let r=rw.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===M_.INSERT)return new kK(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===M_.UPDATE)return new VK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===M_.UPSERT)return new $K(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===M_.DELETE)return new YK(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(zK,"createTransactionObject")});var Xm=T((vce,iw)=>{"use strict";var JK=Ic(),Pce=Cc(),Fc=M(),XK=Mc(),jK=qo().insertRecords,ZK=Ye(),eW=W(),tW=U_(),{getSchemaPath:rW}=Qe(),nW=xc();iw.exports=sW;async function sW(e){try{let{schema_table:t,attributes:r}=JK(e);XK(e,r,t.hash_attribute),e.schema!==Fc.SYSTEM_SCHEMA_NAME&&(r.includes(Fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await tW(e.hdb_auth_header,t,r),s=rW(e.schema,e.table),i=await ZK.openEnvironment(s,e.table),o=await jK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await nW(e,o)}catch(c){eW.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(sW,"lmdbCreateRecords")});var cw=T((Hce,aw)=>{"use strict";var ow=M(),iW=Xm(),oW=Cc(),aW=require("fs-extra"),{getSchemaPath:cW}=Qe();aw.exports=uW;async function uW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new oW(ow.SYSTEM_SCHEMA_NAME,ow.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await iW(r),await aW.mkdirp(cW(e.schema))}a(uW,"lmdbCreateSchema")});var lw=T((Fce,uw)=>{"use strict";var jm=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}};uw.exports=jm});var Ew=T(($ce,fw)=>{"use strict";var _w=Ye(),Zm=Ir(),ep=Or().LMDB_ERRORS_ENUM,lW=_t(),dw=W(),Gce=J(),_W=require("lmdb"),dW=lw(),fW=M(),{OVERFLOW_MARKER:kce,MAX_SEARCH_KEY_LENGTH:Vce}=lW,EW=fW.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function hW(e,t,r,n){if(Zm.validateEnv(e),t===void 0)throw new Error(ep.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ep.IDS_REQUIRED):new Error(ep.IDS_MUST_BE_ITERABLE);try{let s=_w.listDBIs(e);_w.initializeDBIs(e,t,s);let i=new dW,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||n&&h[EW]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,_W.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 R=e.dbis[O],g=h[O];if(g!=null)try{let P=Zm.getIndexedValues(g);if(P)for(let H=0,v=P.length;H<v;H++)R.remove(P[H],o)}catch{dw.warn(`cannot delete from attribute: ${O}, ${g}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){dw.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=Zm.getNextMonotonicTime(),i}catch(s){throw s}}a(hW,"deleteRecords");fw.exports={deleteRecords:hW}});var qc=T((Kce,mw)=>{"use strict";var Jo=J(),mW=Ew(),pW=Ye(),{getSchemaPath:SW}=Qe(),TW=xc(),gW=W();mw.exports=RW;async function RW(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Jo.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Jo.isEmptyOrZeroLength(e.hash_values)&&!Jo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];Jo.isEmpty(u)||e.hash_values.push(u)}}if(Jo.isEmptyOrZeroLength(e.hash_values))return hw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Jo.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=SW(e.schema,e.table),i=await pW.openEnvironment(s,e.table),o=await mW.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await TW(e,o)}catch(c){gW.error(`unable to write transaction due to ${c.message}`)}return hw(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(RW,"lmdbDeleteRecords");function hw(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(hw,"createDeleteResponse")});var rp=T((zce,pw)=>{"use strict";var AW=M(),Qce=Ir();function tp(e,t){let r=Object.create(null);if(t.length===1&&AW.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(tp,"parseRow");function OW(e,t,r,n){let s=tp(r,e);n.push(s)}a(OW,"searchAll");function bW(e,t,r,n){let s=tp(r,e);n[t]=s}a(bW,"searchAllToMap");function NW(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(NW,"iterateDBI");function Qi(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(Qi,"pushResults");function yW(e,t,r,n,s,i){t.toString().endsWith(e)&&Qi(t,r,n,s,i)}a(yW,"endsWith");function wW(e,t,r,n,s,i){t.toString().includes(e)&&Qi(t,r,n,s,i)}a(wW,"contains");function IW(e,t,r,n,s,i){t>e&&Qi(t,r,n,s,i)}a(IW,"greaterThanCompare");function CW(e,t,r,n,s,i){t>=e&&Qi(t,r,n,s,i)}a(CW,"greaterThanEqualCompare");function DW(e,t,r,n,s,i){t<e&&Qi(t,r,n,s,i)}a(DW,"lessThanCompare");function LW(e,t,r,n,s,i){t<=e&&Qi(t,r,n,s,i)}a(LW,"lessThanEqualCompare");pw.exports={parseRow:tp,searchAll:OW,searchAllToMap:bW,iterateDBI:NW,endsWith:yW,contains:wW,greaterThanCompare:IW,greaterThanEqualCompare:CW,lessThanCompare:DW,lessThanEqualCompare:LW,pushResults:Qi}});var Xo=T((eue,bw)=>{"use strict";var ti=Ye(),Xce=W(),Mr=Ir(),P_=_t(),ct=Or().LMDB_ERRORS_ENUM,jce=J(),UW=M(),v_=rp(),{parseRow:MW}=v_,Zce=require("lmdb"),{OVERFLOW_MARKER:Sw,MAX_SEARCH_KEY_LENGTH:PW}=P_;function Tw(e,t,r,n=!1,s=void 0,i=void 0){return zi(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(Tw,"iterateFullIndex");function Gc(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return zi(e,t,r,(l,d,f,E)=>{let R={transaction:l,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(R.values=!1,d.getRange(R).map(g=>({value:g}))):d.getRange(R)})}a(Gc,"iterateRangeBetween");function zi(e,t,r,n){let s=e.database||e,i=ti.openDBI(s,r);i[P_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ti.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(zi,"setupTransaction");function gw(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(Sw)){if(!s)if(r)s=ti.openDBI(e,r);else{let u=ti.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=ti.openDBI(e,u[_]),!s[P_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(gw,"getOverflowCheck");function vW(e,t,r,n=!1,s=void 0,i=void 0){if(Mr.validateEnv(e),t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);return zi(e,t,t,(o,c,u)=>(B_(r),r=kc(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>MW(_.value,r))))}a(vW,"searchAll");function BW(e,t,r,n=!1,s=void 0,i=void 0){if(Mr.validateEnv(e),t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);B_(r),r=kc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of Tw(e,t,t,n,s,i))o.set(c,v_.parseRow(u,r));return o}a(BW,"searchAllToMap");function HW(e,t,r=!1,n=void 0,s=void 0){if(Mr.validateEnv(e),t===void 0)throw new Error(ct.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=Tw(e,void 0,t,r,n,s),c=o.transaction,u=gw(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(HW,"iterateDBI");function xW(e,t){if(Mr.validateEnv(e),t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);return ti.statDBI(e,t).entryCount}a(xW,"countAll");function FW(e,t,r,n,s=!1,i=void 0,o=void 0){return ri(e,r,n),zi(e,t,r,(c,u,_,l)=>(n=Mr.convertKeyValueToWrite(n),l===r?u.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:u.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(FW,"equals");function qW(e,t,r){return ri(e,t,r),ti.openDBI(e,t).getValuesCount(r)}a(qW,"count");function GW(e,t,r,n,s=!1,i=void 0,o=void 0){return ri(e,r,n),zi(e,null,r,(c,u)=>{n=Mr.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let l;if(s===!0){let d;for(let f of u.getKeys({transaction:c,start:n}))if(!f.startsWith(n)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.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 l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(GW,"startsWith");function kW(e,t,r,n,s=!1,i=void 0,o=void 0){return Rw(e,t,r,n,s,i,o,!0)}a(kW,"endsWith");function Rw(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ri(e,r,n),zi(e,null,r,(u,_,l,d)=>{let f=gw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:s?!1:void 0,reverse:s}).flatMap(E=>{let h=E.toString();return h.endsWith(Sw)?_.getValues(E,{transaction:u}).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))?_[P_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(Rw,"contains");function VW(e,t,r,n,s=!1,i=void 0,o=void 0){ri(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Gc(e,t,r,n,u,s,i,o,!0,!1)}a(VW,"greaterThan");function $W(e,t,r,n,s=!1,i=void 0,o=void 0){ri(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Gc(e,t,r,n,u,s,i,o,!1,!1)}a($W,"greaterThanEqual");function YW(e,t,r,n,s=!1,i=void 0,o=void 0){ri(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Gc(e,t,r,u,n,s,i,o,!1,!0)}a(YW,"lessThan");function KW(e,t,r,n,s=!1,i=void 0,o=void 0){ri(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Gc(e,t,r,u,n,s,i,o,!1,!1)}a(KW,"lessThanEqual");function WW(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Mr.validateEnv(e),r===void 0)throw new Error(ct.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ct.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ct.END_VALUE_REQUIRED);if(n=Mr.convertKeyValueToWrite(n),s=Mr.convertKeyValueToWrite(s),n>s)throw new Error(ct.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Gc(e,t,r,n,s,i,o,c)}a(WW,"between");function QW(e,t,r,n){Mr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);if(B_(r),r=kc(s,r),n===void 0)throw new Error(ct.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=v_.parseRow(c,r)),o}a(QW,"searchByHash");function zW(e,t,r){Mr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ct.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(zW,"checkHashExists");function JW(e,t,r,n,s=[]){return Ow(e,t,r,n,s),Aw(e,t,r,n,s).map(i=>i[1])}a(JW,"batchSearchByHash");function XW(e,t,r,n,s=[]){Ow(e,t,r,n,s);let i=new Map;for(let[o,c]of Aw(e,t,r,n,s))i.set(o,c);return i}a(XW,"batchSearchByHashToMap");function Aw(e,t,r,n,s=[]){return zi(e,t,t,(i,o,c)=>{r=kc(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,v_.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(Aw,"batchHashSearch");function Ow(e,t,r,n,s){if(Mr.validateEnv(e),t===void 0)throw new Error(ct.HASH_ATTRIBUTE_REQUIRED);if(B_(r),n==null)throw new Error(ct.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ct.IDS_MUST_BE_ITERABLE)}a(Ow,"initializeBatchSearchByHash");function B_(e){if(!Array.isArray(e))throw e===void 0?new Error(ct.FETCH_ATTRIBUTES_REQUIRED):new Error(ct.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(B_,"validateFetchAttributes");function ri(e,t,r){if(Mr.validateEnv(e),t===void 0)throw new Error(ct.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ct.SEARCH_VALUE_REQUIRED);if(r?.length>PW)throw new Error(ct.SEARCH_VALUE_TOO_LARGE)}a(ri,"validateComparisonFunctions");function kc(e,t){return t.length===1&&UW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ti.listDBIs(e)),t}a(kc,"setGetWholeRowAttributes");bw.exports={searchAll:vW,searchAllToMap:BW,count:qW,countAll:xW,equals:FW,startsWith:GW,endsWith:kW,contains:Rw,searchByHash:QW,setGetWholeRowAttributes:kc,batchSearchByHash:JW,batchSearchByHashToMap:XW,checkHashExists:zW,iterateDBI:HW,greaterThan:VW,greaterThanEqual:$W,lessThan:YW,lessThanEqual:KW,between:WW}});var jo=T((rue,Cw)=>{var Nw=require("lodash"),yw=je(),fe=require("joi"),jW=J(),{hdb_schema_table:Vc,checkValidTable:ww,hdb_table:Iw,hdb_database:H_}=Yn(),{handleHDBError:ZW,hdb_errors:eQ}=re(),{getDatabases:tQ}=(Ae(),ne(qe)),{HTTP_STATUS_CODES:rQ}=eQ,nQ=fe.object({database:H_,schema:H_,table:Iw,search_attribute:Vc,search_value:fe.any().required(),get_attributes:fe.array().min(1).items(fe.alternatives(Vc,fe.object())).optional(),desc:fe.bool(),limit:fe.number().integer().min(1),offset:fe.number().integer().min(0)}),sQ=fe.object({database:H_,schema:H_,table:Iw,operator:fe.string().valid("and","or").default("and").lowercase(),offset:fe.number().integer().min(0),limit:fe.number().integer().min(1),get_attributes:fe.array().min(1).items(fe.alternatives(Vc,fe.object())).optional(),sort:fe.object({attribute:fe.alternatives(Vc,fe.array().min(1)),descending:fe.bool().optional()}).optional(),conditions:fe.array().min(1).items(fe.alternatives(fe.object({operator:fe.string().valid("and","or").default("and").lowercase(),conditions:fe.array()}),fe.object({search_attribute:fe.alternatives(Vc,fe.array().min(1)),search_type:fe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:fe.when("search_type",{switch:[{is:"equals",then:fe.any()},{is:"between",then:fe.array().items(fe.alternatives([fe.string(),fe.number()])).length(2)}],otherwise:fe.alternatives(fe.string(),fe.number())}).required()}))).required()});Cw.exports=function(e,t){let r=null;switch(t){case"value":r=yw.validateBySchema(e,nQ);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(ww("database",e.schema)),i(ww("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=yw.validateBySchema(e,sQ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=jW.checkGlobalSchemaTable(e.schema,e.table);if(s)return ZW(new Error,s,rQ.NOT_FOUND);let o=tQ()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,f=l.conditions.length;d<f;d++){let E=l.conditions[d];E.conditions?u(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=Nw.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!Nw.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var np=T((sue,Dw)=>{"use strict";var iQ=Ye(),oQ=jo(),{getSchemaPath:aQ}=Qe();Dw.exports=cQ;function cQ(e){let t=oQ(e,"hashes");if(t)throw t;let r=aQ(e.schema,e.table);return iQ.openEnvironment(r,e.table)}a(cQ,"initialize")});var sp=T((oue,Lw)=>{"use strict";var uQ=Xo(),lQ=np();Lw.exports=_Q;async function _Q(e){let t=await lQ(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return uQ.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(_Q,"lmdbGetDataByHash")});var Zo=T((cue,Uw)=>{"use strict";var ip=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};Uw.exports=ip});var Pw=T((_ue,Mw)=>{"use strict";var lue=Zo(),dQ=Xo(),fQ=np();Mw.exports=EQ;async function EQ(e){let t=await fQ(e),r=global.hdb_schema[e.schema][e.table];return dQ.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(EQ,"lmdbSearchByHash")});var zn=T((fue,vw)=>{"use strict";var op=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,u=!1,_=void 0,l=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=u,this.limit=_,this.offset=l}};vw.exports=op});var x_=T((hue,Gw)=>{"use strict";var Wt=Xo(),hQ=Ye(),mQ=J(),Ee=_t(),Ji=M(),pQ=xi(),Bw=Or().LMDB_ERRORS_ENUM,{getSchemaPath:SQ}=Qe(),gs=Ji.SEARCH_WILDCARDS;async function TQ(e,t,r){let n;e.schema===Ji.SYSTEM_SCHEMA_NAME?n=pQ[e.table]:n=global.hdb_schema[e.schema][e.table];let s=qw(e,n.hash_attribute,r,t);return xw(e,s,n.hash_attribute,r)}a(TQ,"prepSearch");async function xw(e,t,r,n){let s=SQ(e.schema,e.table),i=await hQ.openEnvironment(s,e.table),o=Fw(i,e,t,r),c=o.transaction||i;if([Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ee.SEARCH_TYPES.SEARCH_ALL,Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(gQ(e,r)===!1){let l=e.search_attribute;if(l===r)return n?Hw(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return n?Hw(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return n===!0?Wt.batchSearchByHashToMap(c,r,e.get_attributes,_):Wt.batchSearchByHash(c,r,e.get_attributes,_)}a(xw,"executeSearch");function Fw(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case Ee.SEARCH_TYPES.EQUALS:s=Wt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.CONTAINS:s=Wt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.ENDS_WITH:case Ee.SEARCH_TYPES._ENDS_WITH:s=Wt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.STARTS_WITH:case Ee.SEARCH_TYPES._STARTS_WITH:s=Wt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Wt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Wt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.SEARCH_ALL:return Wt.searchAll(e,n,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Wt.searchAllToMap(e,n,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.BETWEEN:s=Wt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN:case Ee.SEARCH_TYPES._GREATER_THAN:s=Wt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ee.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Wt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN:case Ee.SEARCH_TYPES._LESS_THAN:s=Wt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN_EQUAL:case Ee.SEARCH_TYPES._LESS_THAN_EQUAL:s=Wt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return s}a(Fw,"searchByType");function Hw(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(Hw,"createMapFromIterable");function gQ(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(gQ,"checkToFetchMore");function qw(e,t,r,n){if(mQ.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),gs.indexOf(s)>-1)return r===!0?Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ee.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(gs[0])<0&&s.indexOf(gs[1])<0)return c===!0?r===!0?Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ee.SEARCH_TYPES.EQUALS;if(gs.indexOf(i)>=0&&gs.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Ee.SEARCH_TYPES.CONTAINS;if(gs.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ee.SEARCH_TYPES.ENDS_WITH;if(gs.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Ee.SEARCH_TYPES.STARTS_WITH;if(s.includes(gs[0])||s.includes(gs[1]))return Ee.SEARCH_TYPES.EQUALS;throw new Error(Bw.UNKNOWN_SEARCH_TYPE)}else switch(n){case Ji.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ee.SEARCH_TYPES.BETWEEN;case Ji.VALUE_SEARCH_COMPARATORS.GREATER:return Ee.SEARCH_TYPES.GREATER_THAN;case Ji.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ee.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ji.VALUE_SEARCH_COMPARATORS.LESS:return Ee.SEARCH_TYPES.LESS_THAN;case Ji.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ee.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Bw.UNKNOWN_SEARCH_TYPE)}}a(qw,"createSearchTypeFromSearchObject");Gw.exports={executeSearch:xw,createSearchTypeFromSearchObject:qw,prepSearch:TQ,searchByType:Fw}});var Vw=T((Sue,kw)=>{"use strict";var pue=zn(),RQ=jo(),AQ=J(),OQ=M(),bQ=x_();kw.exports=NQ;function NQ(e,t){if(!AQ.isEmpty(t)&&OQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=RQ(e,"value");if(n)throw n;return bQ.prepSearch(e,t,!0)}a(NQ,"lmdbGetDataByValue")});var $c=T((Rue,$w)=>{"use strict";var gue=zn(),yQ=jo(),wQ=J(),IQ=M(),CQ=x_();$w.exports=DQ;async function DQ(e,t){if(!wQ.isEmpty(t)&&IQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=yQ(e,"value");if(n)throw n;return CQ.prepSearch(e,t,!1)}a(DQ,"lmdbSearchByValue")});var Kw=T((bue,Yw)=>{"use strict";var Oue=_t(),ap=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}},cp=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},up=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Yw.exports={SearchByConditionsObject:ap,SearchCondition:cp,SortAttribute:up}});var Xw=T((Iue,Jw)=>{"use strict";var yue=Kw().SearchByConditionsObject,LQ=zn(),UQ=jo(),lp=Xo(),F_=_t(),{Resource:wue}=(On(),ne(_p)),zw=x_(),MQ=rp(),PQ=require("lodash"),{getSchemaPath:vQ}=Qe(),Ww=Ye(),{handleHDBError:BQ,hdb_errors:HQ}=re(),{HTTP_STATUS_CODES:xQ}=HQ,FQ=1e8;Jw.exports=qQ;async function qQ(e){let t=UQ(e,"conditions");if(t)throw BQ(t,t.message,xQ.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=vQ(e.schema,e.table),n=await Ww.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Ww.openDBI(n,_.search_attribute);let i=PQ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===F_.SEARCH_TYPES.EQUALS?_.estimated_count=lp.count(n,_.search_attribute,_.search_value):l===F_.SEARCH_TYPES.CONTAINS||l===F_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=FQ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await Qw(o,e,i[0],s.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],l=i.slice(1).map(zw.filterByType),d=l.length,f=lp.setGetWholeRowAttributes(n,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>MQ.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await Qw(o,e,f,s.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=lp.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(qQ,"lmdbSearchByConditions");async function Qw(e,t,r,n){let s=new LQ(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===F_.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,zw.searchByType(e,s,i,n).map(o=>o.value)}a(Qw,"executeConditionSearch")});var Yc=T((Due,jw)=>{"use strict";var GQ=M().OPERATIONS_ENUM,dp=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=GQ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};jw.exports=dp});var fp=T((Uue,oI)=>{"use strict";var rI=zn(),nI=Yc(),sI=$c(),iI=qc(),ir=M(),Zw=J(),eI=Ye(),{getTransactionAuditStorePath:kQ,getSchemaPath:VQ}=Qe(),tI=W();oI.exports=$Q;async function $Q(e){try{if(Zw.isEmpty(global.hdb_schema[e.schema])||Zw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await YQ(e),await KQ(e);let t=VQ(e.schema,e.table);try{await eI.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")tI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=kQ(e.schema,e.table);await eI.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")tI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a($Q,"lmdbDropTable");async function YQ(e){let t=new rI(ir.SYSTEM_SCHEMA_NAME,ir.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ir.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ir.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await sI(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 nI(ir.SYSTEM_SCHEMA_NAME,ir.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await iI(s)}a(YQ,"deleteAttributesFromSystem");async function KQ(e){let t=new rI(ir.SYSTEM_SCHEMA_NAME,ir.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ir.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ir.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ir.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ir.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await sI(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 nI(ir.SYSTEM_SCHEMA_NAME,ir.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await iI(s)}catch(i){throw i}}a(KQ,"dropTableFromSystem")});var cI=T((Pue,aI)=>{"use strict";var WQ=require("fs-extra"),QQ=zn(),zQ=Zo(),JQ=Yc(),XQ=fp(),jQ=qc(),ZQ=sp(),ez=$c(),Rs=M(),{getSchemaPath:tz}=Qe(),{handleHDBError:rz,hdb_errors:nz}=re(),{HDB_ERROR_MSGS:sz,HTTP_STATUS_CODES:iz}=nz;aI.exports=oz;async function oz(e){let t;try{t=await az(e.schema);let r=new QQ(Rs.SYSTEM_SCHEMA_NAME,Rs.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Rs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Rs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await ez(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await XQ(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new JQ(Rs.SYSTEM_SCHEMA_NAME,Rs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await jQ(s);let i=tz(t);await WQ.remove(i)}catch(r){throw r}}a(oz,"lmdbDropSchema");async function az(e){let t=new zQ(Rs.SYSTEM_SCHEMA_NAME,Rs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Rs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await ZQ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw rz(new Error,sz.SCHEMA_NOT_FOUND(e),iz.NOT_FOUND,void 0,void 0,!0);return n}a(az,"validateDropSchema")});var hp=T((Bue,uI)=>{"use strict";var Ep=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};uI.exports=Ep});var _I=T((Fue,lI)=>{"use strict";var cz=require("fs-extra"),q_=Ye(),{getTransactionAuditStorePath:uz}=Qe(),mp=_t(),xue=hp();lI.exports=lz;async function lz(e){let t;try{let r=uz(e.schema,e.table);await cz.mkdirp(r),t=await q_.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{q_.createDBI(t,mp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),q_.createDBI(t,mp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),q_.createDBI(t,mp.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(lz,"createTransactionsAuditEnvironment")});var hI=T((Gue,EI)=>{"use strict";var pp=M(),dI=Ye(),_z=qo(),{getSystemSchemaPath:dz,getSchemaPath:fz}=Qe(),Ez=xi(),hz=E_(),Sp=f_(),mz=W(),pz=_I(),gp=Ez.hdb_table,fI=[];for(let e=0;e<gp.attributes.length;e++)fI.push(gp.attributes[e].attribute);EI.exports=Sz;async function Sz(e,t){let r=fz(t.schema,t.table),n=new Sp(t.schema,t.table,pp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Sp(t.schema,t.table,pp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Sp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await dI.createEnvironment(r,t.table),e!==void 0){let o=await dI.openEnvironment(dz(),pp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await _z.insertRecords(o,gp.hash_attribute,fI,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Tp(n),await Tp(s),await Tp(i)}await pz(t)}catch(o){throw o}}a(Sz,"lmdbCreateTable");async function Tp(e){try{await hz(e)}catch(t){mz.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Tp,"createAttribute")});var pI=T((Vue,mI)=>{"use strict";var Tz=Ic(),gz=Mc(),Rz=U_(),Kc=M(),Az=qo().updateRecords,Oz=Ye(),{getSchemaPath:bz}=Qe(),Nz=xc(),yz=W();mI.exports=wz;async function wz(e){try{let{schema_table:t,attributes:r}=Tz(e);gz(e,r,t.hash_attribute),e.schema!==Kc.SYSTEM_SCHEMA_NAME&&(r.includes(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Rz(e.hdb_auth_header,t,r),s=bz(e.schema,e.table),i=await Oz.openEnvironment(s,e.table),o=await Az(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Nz(e,o)}catch(c){yz.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(wz,"lmdbUpdateRecords")});var TI=T((Yue,SI)=>{"use strict";var Iz=M().OPERATIONS_ENUM,Rp=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Iz.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};SI.exports=Rp});var RI=T((Que,gI)=>{"use strict";var Wue=TI(),Cz=Ic(),Dz=Mc(),Lz=U_(),Wc=M(),Uz=qo().upsertRecords,Mz=Ye(),{getSchemaPath:Pz}=Qe(),vz=xc(),Bz=W(),{handleHDBError:Hz,hdb_errors:xz}=re();gI.exports=Fz;async function Fz(e){let t;try{t=Cz(e)}catch(u){throw Hz(u,u.message,xz.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;Dz(e,n,r.hash_attribute),e.schema!==Wc.SYSTEM_SCHEMA_NAME&&(n.includes(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Lz(e.hdb_auth_header,r,n),i=Pz(e.schema,e.table),o=await Mz.openEnvironment(i,e.table),c=await Uz(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await vz(e,c)}catch(u){Bz.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(Fz,"lmdbUpsertRecords")});var OI=T((Jue,AI)=>{"use strict";var Ap=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};AI.exports=Ap});var NI=T((jue,bI)=>{"use strict";var Op=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}};bI.exports=Op});var II=T((tle,wI)=>{"use strict";var bp=Ye(),{getTransactionAuditStorePath:qz}=Qe(),ele=OI(),Qc=_t(),Gz=J(),yI=NI(),kz=require("util").promisify,Vz=kz(setTimeout),$z=1e4,Yz=100;wI.exports=Kz;async function Kz(e){let t=qz(e.schema,e.table),r=await bp.openEnvironment(t,e.table,!0),n=bp.listDBIs(r);bp.initializeDBIs(r,Qc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new yI;do s=await Wz(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 Vz(Yz);while(s.transactions_deleted>0);return i}a(Kz,"deleteAuditLogsBefore");async function Wz(e,t){let r=new yI;try{let n=e.dbis[Qc.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[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Gz.isEmpty(c)||(s=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>$z)break}return await s,r}catch(n){throw n}}a(Wz,"deleteTransactions")});var DI=T((nle,CI)=>{"use strict";var Np=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};CI.exports=Np});var UI=T((ole,LI)=>{"use strict";var Qz=zn(),zz=Yc(),ile=DI(),Jn=M(),Jz=J(),yp=Ye(),Xz=xi(),jz=$c(),Zz=qc(),{getSchemaPath:e2}=Qe();LI.exports=t2;async function t2(e,t=!0){let r;e.schema===Jn.SYSTEM_SCHEMA_NAME?r=Xz[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await n2(e),s=e2(e.schema,e.table),i=await yp.openEnvironment(s,e.table);return t===!0&&await r2(e,i,r.hash_attribute),yp.dropDBI(i,e.attribute),n}a(t2,"lmdbDropAttribute");async function r2(e,t,r){let n=yp.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:u}of n.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);s=t.dbis[r].put(o,_,u)}await s}a(r2,"removeAttributeFromAllObjects");async function n2(e){let t=new Qz(Jn.SYSTEM_SCHEMA_NAME,Jn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Jn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Jn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Jn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await jz(t)).filter(o=>o[Jn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Jz.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Jn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new zz(Jn.SYSTEM_SCHEMA_NAME,Jn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Zz(i)}a(n2,"dropAttributeFromSystem")});var xI=T((ule,HI)=>{"use strict";var wp=Ye(),ea=_t(),cle=Ir(),Ip=M(),MI=J(),{getTransactionAuditStorePath:s2}=Qe(),i2=Xo(),G_=Qo(),o2=W();HI.exports=a2;async function a2(e){let t=s2(e.schema,e.table),r=await wp.openEnvironment(t,e.table,!0),n=wp.listDBIs(r);wp.initializeDBIs(r,ea.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Ip.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return PI(r,e.search_values);case Ip.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,u2(r,e.search_values,s);case Ip.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return c2(r,e.search_values);default:return PI(r)}}a(a2,"readAuditLog");function PI(e,t=[0,Date.now()]){MI.isEmpty(t[0])&&(t[0]=0),MI.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ea.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 G_,s))}a(PI,"searchTransactionsByTimestamp");function c2(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[ea.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,BI(e,i))}return Object.fromEntries(r)}a(c2,"searchTransactionsByUsername");function u2(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=i2.equals(e,ea.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ea.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);n.has(f)?n.get(f).push(_.toString()):n.set(f,[_.toString()])}}let s=Array.from(n.keys()),i=BI(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);vI(u,"records",r,l,o),vI(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(u2,"searchTransactionsByHashValues");function vI(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],u=c[r].toString();if(n.indexOf(u)>=0)if(s.has(u)){let _=s.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new G_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new G_(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(vI,"loopRecords");function BI(e,t){let r=[];try{let n=e.dbis[ea.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 G_,i);r.push(o)}}catch(i){o2.warn(i)}return r}catch(n){throw n}}a(BI,"batchSearchTransactions")});var qI=T((fle,FI)=>{"use strict";var{getSchemaPath:_le}=Qe(),dle=Ye(),{database:l2}=(Ae(),ne(qe));FI.exports={writeTransaction:_2};async function _2(e,t,r){return l2({database:e,table:t}).transaction(r)}a(_2,"writeTransaction")});var $I=T((hle,VI)=>{"use strict";var{getSchemaPath:GI}=Qe(),kI=Ye();VI.exports={flush:d2,resetReadTxn:f2};async function d2(e,t){return(await kI.openEnvironment(GI(e,t),t.toString())).flushed}a(d2,"flush");async function f2(e,t){try{(await kI.openEnvironment(GI(e,t),t.toString())).resetReadTxn()}catch{}}a(f2,"resetReadTxn")});var QI=T((ple,WI)=>{"use strict";var{Readable:E2}=require("stream"),{getDatabases:h2}=(Ae(),ne(qe)),{readSync:m2,openSync:p2,createReadStream:YI}=require("fs"),{open:S2}=require("lmdb"),KI=n_(),T2=i_(),{AUDIT_STORE_OPTIONS:g2}=(Bi(),ne(zI)),{INTERNAL_DBIS_NAME:R2,AUDIT_STORE_NAME:A2}=_t();WI.exports=b2;var Cp=32768,O2=100;async function b2(e){let t=e.database||e.schema||"data",r=h2()[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 l=_.dbisDB,d=S2({noSync:!0,maxDbs:T2.MAX_DBS}),f,E=d.openDB(R2,new KI(!1)),h=l.useReadTransaction(),p=0,S=a(async function(R,g){g.encoding="binary",g.encoder=void 0;let P=d.openDB(R,g),H=l.openDB(R,g);for(let{key:v,version:L,value:$}of H.getRange({transaction:h,versions:H.useVersions}))f=P.put(v,$,L),p++%O2===0&&(await new Promise(Y=>setTimeout(Y,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:R,value:g}of l.getRange({transaction:h,start:!1}))if(s.some(P=>R.startsWith?.(P+"/"))){E.put(R,g);let[,P]=R.split("/"),H=!P,v=new KI(!H,H);await S(R,v)}e.include_audit&&await S(A2,Object.assign({},g2)),await f;let O=YI(d.path);return O.headers=u(),O.on("close",()=>{h.done(),d.close()}),O}let o=r[Object.keys(r)[0]].primaryStore,c=p2(o.path);return o.transaction(()=>{let _=Buffer.alloc(Cp);m2(c,_,0,Cp),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=YI(null,{fd:c,start:Cp}),f=new E2.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(b2,"getBackup")});var jI=T((Tle,XI)=>{"use strict";var N2=W(),{handleHDBError:y2}=re(),w2=Cb(),I2=E_(),C2=Xm(),D2=cw(),L2=qc(),U2=sp(),M2=Pw(),P2=Vw(),v2=$c(),B2=Xw(),H2=cI(),x2=hI(),F2=pI(),q2=RI(),G2=II(),k2=fp(),V2=UI(),$2=xI(),Y2=qI(),JI=$I(),K2=QI(),Dp=class extends w2{static{a(this,"LMDBBridge")}async searchByConditions(t){return B2(t)}async getDataByHash(t){return await U2(t)}async searchByHash(t){return await M2(t)}async getDataByValue(t,r){return await P2(t,r)}async searchByValue(t){return await v2(t)}async createSchema(t){return await D2(t)}async dropSchema(t){return await H2(t)}async createTable(t,r){return await x2(t,r)}async dropTable(t){return await k2(t)}async createAttribute(t){return await I2(t)}async createRecords(t){return await C2(t)}async updateRecords(t){return await F2(t)}async upsertRecords(t){try{return await q2(t)}catch(r){throw y2(r,null,null,N2.ERR,r)}}async deleteRecords(t){return await L2(t)}async dropAttribute(t){return await V2(t)}async deleteAuditLogsBefore(t){return await G2(t)}async readAuditLog(t){return await $2(t)}writeTransaction(t,r,n){return Y2.writeTransaction(t,r,n)}flush(t,r){return JI.flush(t,r)}resetReadTxn(t,r){return JI.resetReadTxn(t,r)}getBackup(t){return K2(t)}};XI.exports=Dp});function J2(){z2=setInterval(function(){for(let e of Lp)if(e.stale){let t=e[Oe]?.url;ZI.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},Q2).unref()}var Up,ZI,W2,Lp,Xi,k_,Q2,z2,Mp=Re(()=>{Up=x(Ir()),ZI=x(W());On();xo();W2=100,Lp=new Set,Xi=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===0)return this.readTxnsUsed=1,t_(()=>{this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0)}),Lp.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),t_(()=>{this.readTxn.use()}),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Lp.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}addWrite(t){if(this.open===2)throw new Error("Can not use a transaction that is no longer open");this.writes.push(t),this.open===1&&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,Up.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let 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(l){throw this.abort(),l}n||this.doneReadTxn(),this.open=t?.letItLinger?1:2;let s,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,n)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){n>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);s=s||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<W2>>n?u():s=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),s)return s.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=n+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=2,this.writes=[]}},k_=class extends Xi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Up.getNextMonotonicTime)())}getReadTxn(){}},Q2=3e4;a(J2,"startMonitoringTxns");J2()});function ze(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===0&&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 Xi;e.timestamp&&(n.timestamp=e.timestamp),n[Oe]=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 u=n.commit({letItLinger:r?.letItLinger});return u.then?u.then(()=>c):c}function o(c){throw n.abort({}),c}}var eC,ji=Re(()=>{eC=require("../../index");On();Mp();a(ze,"transaction");(0,eC._assignPackageExport)("transaction",ze);ze.commit=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};ze.abort=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var uC={};$e(uC,{ResourceBridge:()=>Bp});function Hp({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 rC(e,t){let r=Xn(e),n=Hp(e,r);if(!r)throw new In.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,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:s,select:n},i);return l=l&&$_(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function Xn(e){let t=e.database||e.schema||j2,r=Cn()[t];if(!r)throw(0,In.handleHDBError)(new Error,X2.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function nC(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*sC(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:u}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(u)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[u]})}n&&(yield n)}var iC,V_,In,oC,aC,Dn,Pp,vp,cC,X2,j2,Z2,eJ,tC,Bp,lC=Re(()=>{"use strict";iC=x(jI()),V_=x(jo()),In=x(re());Ae();oC=x(Ic()),aC=x(Mc()),Dn=x(M()),Pp=x(Ts()),vp=x(wn()),cC=x(J());ji();Y_();({HDB_ERROR_MSGS:X2}=In.hdb_errors),j2="data",Z2=1e4,eJ=10,Bp=class extends iC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),tC=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,V_.default)(t,"conditions");if(r)throw(0,In.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Xn(t);if(!n)throw new In.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:Hp(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 In.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}]}at({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await Xn(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Xn(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,u)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,u),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Xn(t).dropTable()}createSchema(t){return zc({database:t.schema,table:null}),Pp.signalSchemaChange(new vp.SchemaEventMsg(process.pid,Dn.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await xp(t.schema),Pp.signalSchemaChange(new vp.SchemaEventMsg(process.pid,Dn.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,tC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,oC.default)(t);(0,aC.default)(t,n,r.primaryKey);let s,i=Cn()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return ze(o,async c=>{if(!i.schemaDefined){s=[];for(let l of n)i.attributes.find(f=>f.name==l)||s.push(l);s.length>0&&await i.addAttributes(s.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=$_(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=Cn()[t.schema][t.table],n={user:t.hdb_user};return ze(n,async s=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,n)?o.push(u):c.push(u);return nC(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Cn()[t.schema][t.table];if(!r.createdTimeProperty)throw new In.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:Dn.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,cC.async_set_timeout)(eJ),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%Z2===0&&await _();return u.length>0&&await _(),s?nC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,V_.default)(t,"hashes");if(r)throw r;return rC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of rC(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Dn.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,V_.default)(t,"value");if(n)throw n;let s=Xn(t);if(!s)throw new In.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===Dn.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:Hp(t,s)})}async getDataByValue(t,r){let n=new Map,s=Xn(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){Xn({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Xn(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Xn(t),n={};switch(t.search_type){case Dn.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 Dn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of sC(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return sC(r,t.search_values?.[0],t.search_values?.[1])}}};a(Hp,"getSelect");a(rC,"getRecords");a(Xn,"getTable");a(nC,"createDeleteResponse");a(sC,"groupRecordsInHistory")});var yn=T((vle,_C)=>{"use strict";var{ResourceBridge:tJ}=(lC(),ne(uC)),rJ=te();rJ.initSync();var K_;function nJ(){return K_||(K_=new tJ,K_)}a(nJ,"getBridge");_C.exports=nJ()});var hC=T((Hle,EC)=>{"use strict";var dC=require("lodash"),Jc=require("mathjs"),sJ=require("jsonata"),fC=J();EC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?dC.uniqWith(e,dC.isEqual):e,searchJSON:iJ,mad:Xc.bind(null,Jc.mad),mean:Xc.bind(null,Jc.mean),mode:Xc.bind(null,Jc.mode),prod:Xc.bind(null,Jc.prod),median:Xc.bind(null,Jc.median)};function Xc(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Xc,"aggregateFunction");function iJ(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(fC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),fC.isEmpty(this.__ala__.res[r])){let n=sJ(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(iJ,"searchJSON")});var pC=T((Fle,mC)=>{"use strict";var ft=require("moment"),Fp="YYYY-MM-DDTHH:mm:ss.SSSZZ";ft.suppressDeprecationWarnings=!0;mC.exports={current_date:()=>ft().utc().format("YYYY-MM-DD"),current_time:()=>ft().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return ft(e).utc().format("YYYY");case"month":return ft(e).utc().format("MM");case"day":return ft(e).utc().format("DD");case"hour":return ft(e).utc().format("HH");case"minute":return ft(e).utc().format("mm");case"second":return ft(e).utc().format("ss");case"millisecond":return ft(e).utc().format("SSS");default:break}},date:e=>ft(e).utc().format(Fp),date_format:(e,t)=>ft(e).utc().format(t),date_add:(e,t,r)=>ft(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>ft(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=ft(e).utc(),s=ft(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>ft().utc().valueOf(),get_server_time:()=>ft().format(Fp),offset_utc:(e,t)=>ft(e).utc().utcOffset(t).format(Fp)}});var RC=T((qle,gC)=>{"use strict";var oJ=require("@turf/area"),aJ=require("@turf/length"),cJ=require("@turf/circle"),uJ=require("@turf/difference"),lJ=require("@turf/distance"),_J=require("@turf/boolean-contains"),dJ=require("@turf/boolean-equal"),fJ=require("@turf/boolean-disjoint"),EJ=require("@turf/helpers"),SC=M(),pe=J(),As=W();gC.exports={geoArea:hJ,geoLength:mJ,geoCircle:pJ,geoDifference:SJ,geoDistance:TC,geoNear:TJ,geoContains:gJ,geoEqual:RJ,geoCrosses:AJ,geoConvert:OJ};function hJ(e){if(pe.isEmpty(e))return NaN;typeof e=="string"&&(e=pe.autoCastJSON(e));try{return oJ.default(e)}catch(t){return As.trace(t,e),NaN}}a(hJ,"geoArea");function mJ(e,t){if(pe.isEmpty(e))return NaN;typeof e=="string"&&(e=pe.autoCastJSON(e));try{return aJ.default(e,{units:t||"kilometers"})}catch(r){return As.trace(r,e),NaN}}a(mJ,"geoLength");function pJ(e,t,r){if(pe.isEmpty(e))return NaN;if(pe.isEmpty(t))return NaN;typeof e=="string"&&(e=pe.autoCastJSON(e));try{return cJ.default(e,t,{units:r||"kilometers"})}catch(n){return As.trace(n,e,t),NaN}}a(pJ,"geoCircle");function SJ(e,t){if(pe.isEmpty(e))return NaN;if(pe.isEmpty(t))return NaN;typeof e=="string"&&(e=pe.autoCastJSON(e)),typeof t=="string"&&(t=pe.autoCastJSON(t));try{return uJ(e,t)}catch(r){return As.trace(r,e,t),NaN}}a(SJ,"geoDifference");function TC(e,t,r){if(pe.isEmpty(e))return NaN;if(pe.isEmpty(t))return NaN;typeof e=="string"&&(e=pe.autoCastJSON(e)),typeof t=="string"&&(t=pe.autoCastJSON(t));try{return lJ.default(e,t,{units:r||"kilometers"})}catch(n){return As.trace(n,e,t),NaN}}a(TC,"geoDistance");function TJ(e,t,r,n){if(pe.isEmpty(e)||pe.isEmpty(t))return!1;if(pe.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=pe.autoCastJSON(e)),typeof t=="string"&&(t=pe.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return TC(e,t,n)<=r}catch(s){return As.trace(s,e,t),!1}}a(TJ,"geoNear");function gJ(e,t){if(pe.isEmpty(e)||pe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=pe.autoCastJSON(e)),typeof t=="string"&&(t=pe.autoCastJSON(t));try{return _J.default(e,t)}catch(r){return As.trace(r,e,t),!1}}a(gJ,"geoContains");function RJ(e,t){if(pe.isEmpty(e)||pe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=pe.autoCastJSON(e)),typeof t=="string"&&(t=pe.autoCastJSON(t));try{return dJ.default(e,t)}catch(r){return As.trace(r,e,t),!1}}a(RJ,"geoEqual");function AJ(e,t){if(pe.isEmpty(e)||pe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=pe.autoCastJSON(e)),typeof t=="string"&&(t=pe.autoCastJSON(t));try{return!fJ.default(e,t)}catch(r){return As.trace(r,e,t),!1}}a(AJ,"geoCrosses");function OJ(e,t,r){if(pe.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(pe.isEmpty(t))throw new Error("geo_type is required");if(pe.isEmpty(SC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(SC.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=pe.autoCastJSON(e)),EJ[t](e,r)}a(OJ,"geoConvert")});var W_=T((kle,AC)=>{var Zi=hC(),Pr=pC(),jn=RC();AC.exports=e=>{e.aggr.mad=e.aggr.MAD=Zi.mad,e.aggr.mean=e.aggr.MEAN=Zi.mean,e.aggr.mode=e.aggr.MODE=Zi.mode,e.aggr.prod=e.aggr.PROD=Zi.prod,e.aggr.median=e.aggr.MEDIAN=Zi.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Zi.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Zi.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Pr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Pr.current_time,e.fn.extract=e.fn.EXTRACT=Pr.extract,e.fn.date=e.fn.DATE=Pr.date,e.fn.date_format=e.fn.DATE_FORMAT=Pr.date_format,e.fn.date_add=e.fn.DATE_ADD=Pr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Pr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Pr.date_diff,e.fn.now=e.fn.NOW=Pr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Pr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Pr.get_server_time,e.fn.getdate=e.fn.GETDATE=Pr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Pr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=jn.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=jn.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=jn.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=jn.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=jn.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=jn.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=jn.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=jn.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=jn.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=jn.geoNear}});var yC=T((Vle,NC)=>{"use strict";var jc=require("lodash"),or=require("alasql");or.options.cache=!1;var bJ=W_(),OC=require("clone"),Q_=require("recursive-iterator"),_e=W(),Ce=J(),ta=yn(),NJ=M(),{hdb_errors:yJ}=re(),{getDatabases:bC}=(Ae(),ne(qe)),wJ="IS NULL",Ln="There was a problem performing this search. Please check the logs and try again.";bJ(or);var qp=class{static{a(this,"SQLSearch")}constructor(t,r){if(Ce.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(),Ce.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Ce.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(Ln)}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(Ln)}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(Ln)}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(Ln)}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(Ln)}}_getColumns(){let t=new Q_(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(OC(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=jc.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=bC()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Ce.isEmpty(this.statement.where)){_e.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Q_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Ce.isEmpty(r)&&r.right)if(Ce.isNotEmptyAndHasValue(r.right.value)){let n=Ce.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new or.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Ce.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new or.yy.LogicValue({value:i}):n instanceof or.yy.StringValue&&Ce.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new or.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 Q_(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(!Ce.isEmpty(NJ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Ce.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Ce.isEmptyOrZeroLength(r.left.columnid)||Ce.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(Ce.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"=":!Ce.isEmpty(r.right.value)||!Ce.isEmpty(r.left.value)?n.add(Ce.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)n.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&Ce.isEmptyOrZeroLength(this.statement.from)&&Ce.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&&jc.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(Ce.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Ce.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(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&!Ce.isEmptyOrZeroLength(this.columns.columns))return t;if(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&Ce.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await or.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(OC(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(Ce.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(wJ)>-1&&this.tables.forEach(s=>{let i={columnid:bC()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=jc.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]},u=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(u=!0),!Ce.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Ce.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await ta.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(l){throw _e.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),_e.error(l),new Error(Ln)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await ta.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(l){throw _e.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),_e.error(l),new Error(Ln)}else if(!Ce.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Ce.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await ta.getDataByValue(c,E.operation);if(u)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(l){throw _e.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),_e.error(l),new Error(Ln)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await ta.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of l)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(l){throw _e.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),_e.error(l),new Error(Ln)}}}_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 or.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 or.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new or.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 or.yy.FuncValue:new or.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 u=this.statement.where?"WHERE "+this.statement.where:"";u=u.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,s);f=await or.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=jc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,O=p.length;S<O;S++){let R=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[R]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Q_(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=jc.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(Ln)}}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 l in i)o.push(i[l][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},u=await ta.getDataByHash(c),_=s.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=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,u=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===u}).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 or.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(yJ.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 u=s[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;n=n.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(u,_)});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 ta.getDataByValue(i);for(let[c,u]of o)this.data[s].__merged_data[c]||(u[n.attribute]===void 0&&(u[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=u[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(Ln)}}return Object.values(Object.values(this.data)[0].__merged_data)}};NC.exports=qp});var Zr=T((Yle,wC)=>{"use strict";var IJ=wb();wC.exports={searchByConditions:DJ,searchByHash:LJ,searchByValue:UJ,search:MJ};var Gp=yn(),{transformReq:kp}=J(),CJ=yC();async function DJ(e){return kp(e),Gp.searchByConditions(e)}a(DJ,"searchByConditions");async function LJ(e){kp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Gp.searchByHash(e))r&&t.push(r);return t}a(LJ,"searchByHash");async function UJ(e){kp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Gp.searchByValue(e))t.push(r);return t}a(UJ,"searchByValue");function MJ(e,t){try{let r=new IJ(e);r.validate(),new CJ(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(MJ,"search")});var z_=T((Wle,IC)=>{"use strict";var PJ=yn();IC.exports={writeTransaction:vJ};function vJ(e,t,r){return PJ.writeTransaction(e,t,r)}a(vJ,"writeTransaction")});var UC=T((Jle,LC)=>{"use strict";var BJ=Zr(),HJ=Xs(),CC=W(),xJ=en(),zle=z_(),FJ=require("clone"),$p=require("alasql"),qJ=W_(),DC=require("util"),GJ=DC.promisify(HJ.getTableSchema),kJ=DC.promisify(BJ.search),VJ=M(),Vp=J();qJ($p);LC.exports={update:YJ};var $J="There was a problem performing this update. Please check the logs and try again.";async function YJ({statement:e,hdb_user:t}){let r=await GJ(e.table.databaseid,e.table.tableid),n=KJ(e.columns);Vp.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=FJ(s),c=Vp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=$p.parse(u).statements[0],l=await kJ(_),d=WJ(n,l);return QJ(o,d,t)}a(YJ,"update");function KJ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=$p.compile(`SELECT ${r.expression.toString()} AS [${VJ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw CC.error(t),new Error($J)}}a(KJ,"createUpdateRecord");function WJ(e,t){return Vp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(WJ,"buildUpdateRecords");async function QJ(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await xJ.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){CC.error(`Error delete new_attributes from update response: ${i}`)}return s}a(QJ,"updateRecords")});var PC=T((e_e,MC)=>{var zJ=require("alasql"),JJ=Zr(),XJ=W(),jJ=yn(),Kp=require("util"),Yp=J(),ZJ=M(),e4=Xs(),jle=z_(),Zle=en(),t4="record",r4="successfully deleted",n4=Kp.callbackify(a4),s4=Kp.promisify(JJ.search),i4=Kp.promisify(e4.getTableSchema);MC.exports={convertDelete:n4};function o4(e){return`${e.deleted_hashes.length} ${t4}${e.deleted_hashes.length===1?"":"s"} ${r4}`}a(o4,"generateReturnMessage");async function a4({statement:e,hdb_user:t}){let r=await i4(e.table.databaseid,e.table.tableid);Yp.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Yp.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=zJ.parse(o).statements[0],u={operation:ZJ.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await s4(c);let _=await jJ.deleteRecords(u);return Yp.isEmptyOrZeroLength(_.message)&&(_.message=o4(_)),delete _.txn_time,_}catch(_){throw XJ.error(_),_.hdb_code?_.message:_}}a(a4,"convertDelete")});var FC=T((r_e,xC)=>{"use strict";var c4=qi(),{hdb_errors:vC}=re(),{getDatabases:BC}=(Ae(),ne(qe));xC.exports={checkSchemaExists:HC,checkSchemaTableExists:u4,schema_describe:c4};async function HC(e){if(!BC()[e])return vC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(HC,"checkSchemaExists");async function u4(e,t){let r=await HC(e);if(r)return r;if(!BC()[e][t])return vC.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(u4,"checkSchemaTableExists")});var Zc=T((s_e,l4)=>{l4.exports={name:"harperdb",version:"4.3.0-beta.5",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.2",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 nu={};$e(nu,{addAnalyticsListener:()=>ru,recordAction:()=>vr,recordActionBinary:()=>rn,setAnalyticsEnabled:()=>_4});function _4(e){zC=e}function vr(e,t,r,n,s){if(!zC)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=j_.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},j_.set(i,o)}J_||d4()}function rn(e,t,r,n,s){vr(!!e,t,r,n,s)}function ru(e){jC.push(e)}function d4(){J_=performance.now(),setTimeout(async()=>{let e=performance.now()-J_;J_=0;let t=[],r={time:Date.now(),period:e,threadId:eo.threadId,metrics:t};for(let[s,i]of j_){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of ZC){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await eD()}let n=process.memoryUsage();t.push({metric:"memory",threadId:eo.threadId,byThread:!0,...n});for(let s of jC)s(t);j_=new Map,eo.parentPort?eo.parentPort.postMessage({type:XC,report:r}):nD({report:r})},JC).unref()}async function f4(e,t=6e4){let r=zp(),n=tD(),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,u=[],_;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 R of S||[]){let{path:g,method:P,type:H,metric:v,count:L,total:$,distribution:Y,threads:z,...se}=R;L||(L=1);let me=v+(g?"-"+g:"");P!==void 0&&(me+="-"+P),H!==void 0&&(me+="-"+H);let ce=o.get(me);if(ce){if(ce.threads){let le=ce.threads[O];if(le)ce=le;else{ce.threads[O]=Object.assign({},se);continue}}ce.count||(ce.count=1);let xe=ce.count;for(let le in se){let It=se[le];typeof It=="number"&&(ce[le]=(ce[le]*xe+It*L)/(xe+L))}ce.count+=L,$>=0&&(ce.total+=$,ce.ratio=ce.total/ce.count)}else ce=Object.assign({period:t},R),delete ce.distribution,o.set(me,ce),ce.byThread&&(ce.threads=[],ce.threads[O]=Object.assign({},se),u.push(ce));if(Y){Y=Y.map(le=>typeof le=="number"?{value:le,count:1}:le);let xe=c.get(me);xe?xe.push(...Y):c.set(me,Y)}}await eD()}for(let h of u){let{path:p,method:S,type:O,metric:R,count:g,total:P,distribution:H,threads:v,...L}=h;v=v.filter($=>$);for(let $ in L){if(typeof h[$]!="number")continue;let Y=0;for(let z of v){let se=z[$];typeof se=="number"&&(Y+=se)}h[$]=Y}h.count=v.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((le,It)=>le.value>It.value?1:-1);let O=S.count-1,R=[],g=0,P=0,H;for(let le of ZC){let It=O*le;for(;g<It;)H=p[P++],g+=H.count,P===1&&g--;let yl=p[P>1?P-2:0];H||(H=p[0]),R.push(H.value-(H.value-yl.value)*(g-It)/H.count)}let[v,L,$,Y,z,se,me,ce,xe]=R;Object.assign(S,{p1:v,p10:L,p25:$,median:Y,p75:z,p90:se,p95:me,p99:ce,p999:xe})}let l;for(let[h,p]of o)p.id=(0,X_.getNextMonotonicTime)(),p.time=_,n.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||n.primaryStore.put(p.id,p)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,X_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-qC,active:E-GC,time:d,...process.memoryUsage()};n.primaryStore.put(h,p,{append:!0}).then(S=>{S||n.primaryStore.put(h,p)})}qC=f,GC=E}async function kC(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function zp(){return VC||(VC=at({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function tD(){return $C||($C=at({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function m4(){rD=!0;let e=(0,tu.get)(Qp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await f4(JC,e),await kC(zp(),E4),await kC(tD(),h4)},Math.min(e/2,2147483647)).unref()}function nD(e,t){let r=e.report;r.threadId=t?.threadId||eo.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(YC+=n.mean*n.count);r.totalBytesProcessed=YC,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(KC.get(t))}),KC.set(t,t.performance.eventLoopUtilization())),r.id=(0,X_.getNextMonotonicTime)(),zp().primaryStore.put(r.id,r),rD||m4(),p4&&(sD=T4(r))}async function T4(e){if(await sD,!ni){let r=(0,eu.dirname)((0,QC.getLogFilePath)());try{ni=await(0,Wp.open)((0,eu.join)(r,"analytics.log"),"r+")}catch{ni=await(0,Wp.open)((0,eu.join)(r,"analytics.log"),"w+")}}let t=(await ni.stat()).size;if(t>S4){let r=Buffer.alloc(t);await ni.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ni.write(r,{position:0}),await ni.truncate(r.length),t=r.length}await ni.write(JSON.stringify(e)+`
8
+ `,t)}var eo,WC,QC,eu,Wp,X_,tu,Qp,j_,zC,J_,JC,XC,jC,ZC,qC,GC,eD,E4,h4,VC,$C,rD,YC,KC,p4,sD,ni,S4,Os=Re(()=>{eo=require("worker_threads"),WC=x(et());Ae();QC=x(W()),eu=require("path"),Wp=require("fs/promises"),X_=x(Ir()),tu=x(te()),Qp=x(M());tr();(0,tu.initSync)();j_=new Map,zC=(0,tu.get)(Qp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(_4,"setAnalyticsEnabled");a(vr,"recordAction");Ze.recordAnalytics=vr;a(rn,"recordActionBinary");J_=0,JC=1e3,XC="analytics-report",jC=[];a(ru,"addAnalyticsListener");ZC=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(d4,"sendAnalytics");a(f4,"aggregation");qC=0,GC=0,eD=a(()=>new Promise(setImmediate),"rest");a(kC,"cleanup");E4=36e5,h4=31536e6;a(zp,"getRawAnalyticsTable");a(tD,"getAnalyticsTable");(0,WC.setChildListenerByType)(XC,nD);a(m4,"startScheduledTasks");YC=0,KC=new Map,p4=!1;a(nD,"recordAnalytics");S4=1e6;a(T4,"logAnalytics")});var At=T((S_e,bD)=>{"use strict";var Ft=te();Ft.initSync();var g4=require("fs-extra"),R4=require("semver"),ou=require("path"),{monotonicFactory:A4}=require("ulidx"),oD=A4(),O4=require("util"),aD=require("child_process"),b4=O4.promisify(aD.exec),N4=aD.spawn,Ne=rt(),Me=M(),Zp=J(),Br=W(),Z_=Ss(),y4=z_(),su=wr(),{onMessageByType:w4}=et(),{isMainThread:I4}=require("worker_threads"),{Encoder:C4,decode:eS}=require("msgpackr"),cD=new C4,{isEmpty:so}=Zp,uD=tn(),D4=48*36e11,L4=5e9;I4&&w4(Me.ITC_EVENT_TYPES.RESTART,()=>{nn=void 0,no=void 0});var{connect:U4,StorageType:lD,RetentionPolicy:_D,AckPolicy:ed,DeliverPolicy:td,DiscardPolicy:M4,NatsConnection:E_e,JetStreamManager:h_e,JetStreamClient:m_e,StringCodec:p_e,JSONCodec:P4,createInbox:tS,headers:v4,ErrorCode:iD}=require("nats"),{PACKAGE_ROOT:B4}=M(),H4=Zc(),{recordAction:x4}=(Os(),ne(nu)),dD=P4(),F4="clustering",q4=H4.engines[Ne.NATS_SERVER_NAME],G4=ou.join(B4,"dependencies"),jp=ou.join(G4,`${process.platform}-${process.arch}`,Ne.NATS_BINARY_NAME),Jp,Xp,iu,to,ro;bD.exports={runCommand:fD,checkNATSServerInstalled:k4,createConnection:rS,getConnection:rd,getJetStreamManager:au,getJetStream:hD,getNATSReferences:ar,getServerList:$4,createLocalStream:nS,listStreams:mD,deleteLocalStream:Y4,getServerConfig:cu,listRemoteStreams:K4,viewStream:W4,viewStreamIterator:Q4,publishToStream:z4,createWorkQueueStream:J4,addSourceToWorkStream:SD,request:j4,removeSourceFromWorkStream:gD,reloadNATS:sS,reloadNATSHub:Z4,reloadNATSLeaf:e3,extractServerName:TD,requestErrorHandler:t3,updateWorkStream:r3,createLocalTableStream:AD,createTableStreams:n3,purgeTableStream:OD,purgeSchemaTableStreams:s3,getStreamInfo:i3,updateLocalStreams:a3,closeConnection:V4,getJsmServerName:uu,addNatsMsgHeader:pD,updateIngestStreamConsumer:X4,clearClientCache:ED};async function fD(e,t=void 0){let{stdout:r,stderr:n}=await b4(e,{cwd:t});if(n)throw new Error(n.replace(`
9
9
  `,""));return r.replace(`
10
- `,"")}a(uD,"runCommand");async function F4(){try{await p4.access(Xp)}catch{return!1}let e=await uD(`${Xp} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return S4.eq(t,H4)}a(F4,"checkNATSServerInstalled");async function tS(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await iD.getClusterUser();if(to(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Hr.trace("create nats connection called");let i=await C4({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Hr.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Hr.error("Error with Nats client connection, connection closed",o),lD()}),i}a(tS,"createConnection");function lD(){rn=void 0,ji=void 0,Zi=void 0,eo=void 0}a(lD,"clearClientCache");async function q4(){rn&&(await rn.drain(),rn=void 0,ji=void 0,Zi=void 0,eo=void 0)}a(q4,"closeConnection");var rn,eo;async function ed(){return eo||(eo=tS(Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),rn=await eo),rn||eo}a(ed,"getConnection");async function iu(){if(ji)return ji;to(rn)&&await ed();let{domain:e}=ou(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(to(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ji=await rn.jetstreamManager({domain:e,timeout:6e4}),ji}a(iu,"getJetStreamManager");async function _D(){if(Zi)return Zi;to(rn)&&await ed();let{domain:e}=ou(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(to(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Zi=rn.jetstream({domain:e,timeout:6e4}),Zi}a(_D,"getJetStream");async function sr(){let e=rn||await ed(),t=ji||await iu(),r=Zi||await _D();return{connection:e,jsm:t,js:r}}a(sr,"getNATSReferences");async function G4(e){let t=Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await iD.getClusterUser(),s=await tS(t,r,n),i=eS(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=cD.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=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 jp.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(G4,"getServerList");async function rS(e,t){let{jsm:r}=await sr(),n=Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:oD.File,retention:aD.Limits,subjects:t,discard:D4.Old,max_msgs:s,max_bytes:i,max_age:n})}a(rS,"createLocalStream");async function dD(){let{jsm:e}=await sr(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(dD,"listStreams");async function k4(e){let{jsm:t}=await sr();await t.streams.delete(e)}a(k4,"deleteLocalStream");async function V4(e){let{connection:t}=await sr(),r=[],n=eS(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(cD.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(V4,"listRemoteStreams");async function $4(e,t=void 0,r=void 0){let{jsm:n,js:s}=await sr(),i=rD(),o={durable_name:i,ack_policy:j_.Explicit};t&&(o.deliver_policy=Z_.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=Zp(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(ye.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a($4,"viewStream");async function*Y4(e,t=void 0,r=void 0){let{jsm:n,js:s}=await sr(),i=rD(),o={durable_name:i,ack_policy:j_.Explicit};t&&(o.deliver_policy=Z_.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=Zp(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(ye.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(Y4,"viewStreamIterator");async function K4(e,t,r,n){Hr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=fD(n,r);let{js:s}=await sr(),i=await au(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:sD.encode(n);try{Hr.trace(`publishToStream publishing to subject: ${o}`),v4(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return pD(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Hr.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await rS(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(K4,"publishToStream");function fD(e,t){t===void 0&&(t=M4());let r=Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(ye.MSG_HEADERS.ORIGIN)&&r&&t.append(ye.MSG_HEADERS.ORIGIN,r),t}a(fD,"addNatsMsgHeader");function ou(e){e=e.toLowerCase();let t=su.join(Ht.get(Pe.CONFIG_PARAMS.ROOTPATH),B4);if(e===Pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return to(Jp)&&(Jp={port:ru.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:ru.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ye.SERVER_SUFFIX.HUB,config_file:ye.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:su.join(t,ye.PID_FILES.HUB),hdb_nats_path:t}),Jp;if(e===Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return to(zp)&&(zp={port:ru.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:ru.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ye.SERVER_SUFFIX.LEAF,config_file:ye.NATS_CONFIG_FILES.LEAF_SERVER,domain:ru.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ye.SERVER_SUFFIX.LEAF,pid_file_path:su.join(t,ye.PID_FILES.LEAF),hdb_nats_path:t}),zp;Hr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(ou,"getServerConfig");async function W4(e){let{jsm:t}=await sr(),r=await au();try{await t.streams.add({name:e.stream_name,storage:oD.File,retention:aD.Limits,max_age:w4,max_bytes:I4,subjects:[`${ye.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:j_.Explicit,durable_name:e.durable_name,deliver_policy:Z_.All,max_ack_pending:1e4});else throw n}}a(W4,"createWorkQueueStream");async function Q4(){let{jsm:e}=await sr();(await e.consumers.info(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,ye.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Hr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,ye.WORK_QUEUE_CONSUMER_NAMES.durable_name),Hr.info("Adding pull consumer to ingest stream"),await e.consumers.add(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:j_.Explicit,durable_name:ye.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:Z_.All,max_ack_pending:1e4}))}a(Q4,"updateIngestStreamConsumer");async function ED(e,t,r){let{jsm:n}=await sr(),s=await n.streams.info(t),i=hD(n.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=X_.createNatsTableStreamName(c,u),l=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,l&&d.name===_||!l&&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}.${u}.${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:`${ye.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),s.config.sources.push(h),await n.streams.update(t,s.config)}a(ED,"addSourceToWorkStream");function hD(e){return e.split(".")[1]}a(hD,"extractServerName");async function mD(e,t,r){let{jsm:n}=await sr(),{schema:s,table:i}=r,o=`txn.${s}.${i}.${e}`;await n.streams.purge(t,{filter:o});let c=X_.createNatsTableStreamName(s,i),u=await n.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let _=u.config.sources.length,l;for(;_--;)if(l=u.config.sources[_],l.name===c&&l.external.api===`$JS.${e}.API`){u.config.sources.splice(_,1);break}await n.streams.update(t,u.config)}a(mD,"removeSourceFromWorkStream");async function z4(e,t,r=6e4,n=eS()){if(!jp.isObject(t))throw new Error("data param must be an object");let s=sD.encode(t),{connection:i}=await sr(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return Zp(c.data)}a(z4,"request");function nS(e){return new Promise(async(t,r)=>{let n=A4(Xp,["--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(nS,"reloadNATS");async function J4(){let{pid_file_path:e}=ou(Pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await nS(e)}a(J4,"reloadNATSHub");async function X4(){let{pid_file_path:e}=ou(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await nS(e)}a(X4,"reloadNATSLeaf");function j4(e,t,r){let n;switch(e.code){case tD.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case tD.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(j4,"requestErrorHandler");async function Z4(e,t){let r=t+ye.SERVER_SUFFIX.LEAF;await pD(async()=>{e.subscribe===!0?await ED(r,ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await mD(r,ye.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(Z4,"updateWorkStream");function pD(e){return O4.writeTransaction(Pe.SYSTEM_SCHEMA_NAME,Pe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(pD,"exclusiveLock");async function SD(e,t){let r=X_.createNatsTableStreamName(e,t),n=await au(),s=n3(e,t,n);await rS(r,[s])}a(SD,"createLocalTableStream");async function e3(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await SD(n,s)}}a(e3,"createTableStreams");async function TD(e,t,r=!1){if(Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=X_.createNatsTableStreamName(e,t),{jsm:s}=await sr();r?await s.streams.purge(ye.WORK_QUEUE_CONSUMER_NAMES.stream_name):await s.streams.purge(n)}catch(n){if(n.message==="stream not found")Hr.warn(n);else throw n}}a(TD,"purgeTableStream");async function t3(e,t){if(Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await TD(e,t[r])}a(t3,"purgeSchemaTableStreams");async function r3(e){return(await iu()).streams.info(e)}a(r3,"getStreamInfo");function n3(e,t,r){return`${ye.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(n3,"createSubjectName");async function au(){if(nu)return nu;if(nu=(await iu())?.nc?.info?.server_name,nu===void 0)throw new Error("Unable to get jetstream manager server name");return nu}a(au,"getJsmServerName");async function s3(){let e=await iu(),t=await au(),r=await dD();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=i3(n),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(s.name===ye.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ye.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Hr.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else if(s.name===ye.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ye.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Hr.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Hr.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l}await e.streams.update(s.name,s)}}}a(s3,"updateLocalStreams");function i3(e){let{config:t}=e,r=!1;if(t.name===ye.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===ye.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let n=Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Ht.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Ht.get(Pe.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(i3,"updateStreamLimits")});var sd=T((m_e,bD)=>{"use strict";var ea=l_(),ta=vC(),o3=W(),a3=require("uuid").v4,h_e=require("clone"),rd=Ss(),ra=U(),c3=require("util"),ni=Nn(),{handleHDBError:ir,hdb_errors:u3}=ee(),{HDB_ERROR_MSGS:td,HTTP_STATUS_CODES:or}=u3,{SchemaEventMsg:nd}=yn(),RD=At(),{getDatabases:l3}=(be(),te(Fe)),{transformReq:na}=J();bD.exports={createSchema:_3,createSchemaStructure:AD,createTable:d3,createTableStructure:OD,createAttribute:p3,dropSchema:f3,dropTable:E3,dropAttribute:h3,getBackup:S3};async function _3(e){let t=await AD(e);return rd.signalSchemaChange(new nd(process.pid,e.operation,e.schema)),t}a(_3,"createSchema");async function AD(e){let t=ea.schema_object(e);if(t)throw ir(t,t.message,or.BAD_REQUEST,void 0,void 0,!0);if(na(e),!await ta.checkSchemaExists(e.schema))throw ir(new Error,td.SCHEMA_EXISTS_ERR(e.schema),or.BAD_REQUEST,ra.LOG_LEVELS.ERROR,td.SCHEMA_EXISTS_ERR(e.schema),!0);return await ni.createSchema(e),`database '${e.schema}' successfully created`}a(AD,"createSchemaStructure");async function d3(e){return na(e),e.hash_attribute=e.primary_key??e.hash_attribute,await OD(e)}a(d3,"createTable");async function OD(e){let t=ea.create_table_object(e);if(t)throw ir(t,t.message,or.BAD_REQUEST,void 0,void 0,!0);if(ea.validateTableResidence(e.residence),!await ta.checkSchemaTableExists(e.schema,e.table))throw ir(new Error,td.TABLE_EXISTS_ERR(e.schema,e.table),or.BAD_REQUEST,ra.LOG_LEVELS.ERROR,td.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:a3(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ni.createTable(n,e);else throw ir(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",or.BAD_REQUEST);else await ni.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(OD,"createTableStructure");async function f3(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=ea.schema_object(e),n=t??r;if(n)throw ir(n,n.message,or.BAD_REQUEST,void 0,void 0,!0);na(e);let s=await ta.checkSchemaExists(e.schema);if(s)throw ir(new Error,s,or.NOT_FOUND,ra.LOG_LEVELS.ERROR,s,!0);let i=await ta.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ni.dropSchema(e),rd.signalSchemaChange(new nd(process.pid,e.operation,e.schema)),await RD.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(f3,"dropSchema");async function E3(e){let t=ea.table_object(e);if(t)throw ir(t,t.message,or.BAD_REQUEST,void 0,void 0,!0);na(e);let r=await ta.checkSchemaTableExists(e.schema,e.table);if(r)throw ir(new Error,r,or.NOT_FOUND,ra.LOG_LEVELS.ERROR,r,!0);return await ni.dropTable(e),await RD.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(E3,"dropTable");async function h3(e){let t=ea.attribute_object(e);if(t)throw ir(t,t.message,or.BAD_REQUEST,void 0,void 0,!0);na(e);let r=await ta.checkSchemaTableExists(e.schema,e.table);if(r)throw ir(new Error,r,or.NOT_FOUND,ra.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw ir(new Error,"You cannot drop a hash attribute",or.BAD_REQUEST,void 0,void 0,!0);if(ra.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw ir(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,or.BAD_REQUEST,void 0,void 0,!0);try{return await ni.dropAttribute(e),m3(e),rd.signalSchemaChange(new nd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw o3.error(`Got an error deleting attribute ${c3.inspect(e)}.`),n}}a(h3,"dropAttribute");function m3(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(m3,"dropAttributeFromGlobal");async function p3(e){na(e);let t=l3()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw ir(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,or.BAD_REQUEST,void 0,void 0,!0);return await ni.createAttribute(e),rd.signalSchemaChange(new nd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(p3,"createAttribute");function S3(e){return ni.getBackup(e)}a(S3,"getBackup")});var yD=T((S_e,ND)=>{"use strict";var{OPERATIONS_ENUM:T3}=U(),sS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=T3.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};ND.exports=sS});var iS=T((R_e,LD)=>{"use strict";var g3=Nn(),g_e=yD(),id=J(),od=U(),R3=Z(),{handleHDBError:wD,hdb_errors:A3}=ee(),{HDB_ERROR_MSGS:ID,HTTP_STATUS_CODES:CD}=A3,O3=Object.values(od.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),DD="To use this operation audit log must be enabled in harperdb-config.yaml";LD.exports=b3;async function b3(e){if(id.isEmpty(e.schema))throw new Error(ID.SCHEMA_REQUIRED_ERR);if(id.isEmpty(e.table))throw new Error(ID.TABLE_REQUIRED_ERR);if(!R3.get(od.CONFIG_PARAMS.LOGGING_AUDITLOG))throw wD(new Error,DD,CD.BAD_REQUEST,od.LOG_LEVELS.ERROR,DD,!0);let t=id.checkSchemaTableExist(e.schema,e.table);if(t)throw wD(new Error,t,CD.NOT_FOUND,od.LOG_LEVELS.ERROR,t,!0);if(!id.isEmpty(e.search_type)&&O3.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await g3.readAuditLog(e)}a(b3,"readAuditLog")});var UD=T((O_e,MD)=>{"use strict";var{OPERATIONS_ENUM:N3}=U(),oS=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=N3.GET_BACKUP,this.schema=t,this.table=r}};MD.exports=oS});var BD=T((w_e,vD)=>{"use strict";var y3=Nn(),N_e=UD(),aS=J(),w3=U(),y_e=Z(),{handleHDBError:I3,hdb_errors:C3}=ee(),{HDB_ERROR_MSGS:PD,HTTP_STATUS_CODES:D3}=C3;vD.exports=L3;async function L3(e){if(aS.isEmpty(e.schema))throw new Error(PD.SCHEMA_REQUIRED_ERR);if(aS.isEmpty(e.table))throw new Error(PD.TABLE_REQUIRED_ERR);let t=aS.checkSchemaTableExist(e.schema,e.table);if(t)throw I3(new Error,t,D3.NOT_FOUND,w3.LOG_LEVELS.ERROR,t,!0);return await y3.getBackup(read_audit_log_object)}a(L3,"getBackup")});var kD=T((C_e,GD)=>{var si=require("validate.js"),xD=Xe(),sa=U(),{handleHDBError:M3,hdb_errors:U3}=ee(),{HDB_ERROR_MSGS:ct,HTTP_STATUS_CODES:P3}=U3,cS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),v3={STRUCTURE_USER:"structure_user"},HD=Object.values(sa.ROLE_TYPES_ENUM),B3="attribute_permissions",H3="attribute_name",{PERMS_CRUD_ENUM:ia}=sa,x3=[B3,...Object.values(ia)],FD=[ia.READ,ia.INSERT,ia.UPDATE],F3=[H3,...FD];function q3(e){let t=cS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,qD(e,t)}a(q3,"addRoleValidation");function G3(e){let t=cS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,qD(e,t)}a(G3,"alterRoleValidation");function k3(e){let t=cS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,xD.validateObject(e,t)}a(k3,"dropRoleValidation");var V3=["operation","role","id","permission","hdb_user","hdb_auth_header"];function qD(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)V3.includes(n[o])||s.push(n[o]);s.length>0&&ft(ct.INVALID_ROLE_JSON_KEYS(s),r);let i=xD.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{ft(o,r)}),e.permission){let o=$3(e);o&&ft(o,r),HD.forEach(c=>{e.permission[c]&&!si.isBoolean(e.permission[c])&&ft(ct.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(HD.indexOf(o)<0){if(o===v3.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||ft(ct.SCHEMA_NOT_FOUND(d),r)}continue}ft(ct.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){ft(ct.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){ft(ct.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{x3.includes(l)||ft(ct.INVALID_PERM_KEY(l),r,o,u)}),Object.values(ia).forEach(l=>{si.isDefined(_[l])?si.isBoolean(_[l])||ft(ct.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):ft(ct.TABLE_PERM_MISSING(l),r,o,u)}),si.isDefined(_.attribute_permissions)){if(!si.isArray(_.attribute_permissions)){ft(ct.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{ft(ct.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!F3.includes(p)&&p!==ia.DELETE&&ft(ct.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!si.isDefined(E.attribute_name)){ft(ct.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){ft(ct.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}FD.forEach(p=>{si.isDefined(E[p])?si.isBoolean(E[p])||ft(ct.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):ft(ct.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;ft(ct.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return Y3(r)}a(qD,"customValidate");GD.exports={addRoleValidation:q3,alterRoleValidation:G3,dropRoleValidation:k3};function $3(e){let{operation:t,permission:r}=e;if(t===sa.OPERATIONS_ENUM.ADD_ROLE||t===sa.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 ct.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?sa.ROLE_TYPES_ENUM.SUPER_USER:sa.ROLE_TYPES_ENUM.CLUSTER_USER;return ct.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a($3,"validateNoSUPerms");function Y3(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:ct.ROLE_PERMS_ERROR,...e};return M3(new Error,n,P3.BAD_REQUEST)}else return null}a(Y3,"generateRolePermResponse");function ft(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(ft,"addPermError")});var ES=T((L_e,KD)=>{"use strict";var VD=Zr(),$D=jr(),K3=ki(),lS=kD(),_S=Ss(),W3=require("uuid").v4,Q3=require("util"),ad=U(),z3=J(),dS=$D.searchByValue,J3=$D.searchByHash,X3=Q3.promisify(K3.delete),j3=Qn(),Z3=Xo(),{hdb_errors:eX,handleHDBError:ro}=ee(),{HDB_ERROR_MSGS:YD,HTTP_STATUS_CODES:cu}=eX,{UserEventMsg:fS}=yn();KD.exports={addRole:tX,alterRole:rX,dropRole:nX,listRoles:sX};function uS(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(uS,"scrubRoleDetails");async function tX(e){let t=lS.addRoleValidation(e);if(t)throw t;e=uS(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 dS(r)||[])}catch(i){throw ro(i)}if(n&&n.length>0)throw ro(new Error,YD.ROLE_ALREADY_EXISTS(e.role),cu.CONFLICT,void 0,void 0,!0);e.id||(e.id=W3());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await VD.insert(s),_S.signalUserChange(new fS(process.pid)),e=uS(e),e}a(tX,"addRole");async function rX(e){let t=lS.alterRoleValidation(e);if(t)throw t;e=uS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await VD.update(r)}catch(s){throw ro(s)}if(n&&n?.message==="updated 0 of 1 records")throw ro(new Error,"Invalid role id",cu.BAD_REQUEST,void 0,void 0,!0);return await _S.signalUserChange(new fS(process.pid)),e}a(rX,"alterRole");async function nX(e){let t=lS.dropRoleValidation(e);if(t)throw ro(new Error,t,cu.BAD_REQUEST,void 0,void 0,!0);let r=new Z3(ad.SYSTEM_SCHEMA_NAME,ad.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await J3(r));if(n.length===0)throw ro(new Error,YD.ROLE_NOT_FOUND,cu.NOT_FOUND,void 0,void 0,!0);let s=new j3(ad.SYSTEM_SCHEMA_NAME,ad.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await dS(s)),o=!1;if(z3.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw ro(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,cu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await X3(c),_S.signalUserChange(new fS(process.pid)),`${n[0].role} successfully deleted`}a(nX,"dropRole");async function sX(){return dS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(sX,"listRoles")});var JD=T((U_e,zD)=>{"use strict";var iX=Z(),ii=require("joi"),oX=Xe(),WD=require("moment"),aX=require("fs-extra"),hS=require("path"),cX=require("lodash"),uu=U(),{LOG_LEVELS:no}=U(),uX="YYYY-MM-DD hh:mm:ss",lX=hS.resolve(__dirname,"../logs");zD.exports=function(e){return oX.validateBySchema(e,_X)};var _X=ii.object({from:ii.custom(QD),until:ii.custom(QD),level:ii.valid(no.NOTIFY,no.FATAL,no.ERROR,no.WARN,no.INFO,no.DEBUG,no.TRACE),order:ii.valid("asc","desc"),limit:ii.number().min(1),start:ii.number().min(0),log_name:ii.custom(dX)});function QD(e,t){if(WD(e,WD.ISO_8601).format(uX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(QD,"validateDatetime");function dX(e,t){if(cX.invert(uu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=iX.get(uu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?uu.LOG_NAMES.HDB:e,i=s===uu.LOG_NAMES.INSTALL?hS.join(lX,uu.LOG_NAMES.INSTALL):hS.join(n,s);return aX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(dX,"validateReadLogPath")});var pS=T((v_e,jD)=>{"use strict";var cd=U(),fX=W(),EX=Z(),hX=JD(),mS=require("path"),XD=require("fs-extra"),{once:mX}=require("events"),{handleHDBError:pX,hdb_errors:SX}=ee(),{PACKAGE_ROOT:TX}=U(),gX=mS.join(TX,"logs"),RX=1e3,AX=200;jD.exports=OX;async function OX(e){let t=hX(e);if(t)throw pX(t,t.message,SX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=EX.get(cd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?cd.LOG_NAMES.HDB:e.log_name,s=n===cd.LOG_NAMES.INSTALL?mS.join(gX,cd.LOG_NAMES.INSTALL):mS.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?RX:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max(XD.statSync(s).size-(h+5)*AX,0));let S=XD.createReadStream(s,{start:p});S.on("error",v=>{fX.error(v)});let O=0,g=[],R="",B;S.on("data",v=>{let M=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;v=R+v;let $=0,K;for(;(K=M.exec(v))&&!S.destroyed;){B&&(B.message=v.slice($,K.index),H(B));let[z,se,Te]=K,oe=Te.split("] ["),xe=oe[0],de=oe[1];oe.splice(0,2),B={timestamp:se,thread:xe,level:de,tags:oe,message:""},$=K.index+z.length}R=v.slice($)}),S.on("end",v=>{S.destroyed||B&&(B.message=R.trim(),H(B))}),S.resume();function H(v){let M,$,K;switch(!0){case(i&&c&&_):M=new Date(v.timestamp),$=new Date(u),K=new Date(l),v.level===o&&M>=$&&M<=K&&O<E?O++:v.level===o&&M>=$&&M<=K&&(oi(v,f,g),O++,O===h&&S.destroy());break;case(i&&c):M=new Date(v.timestamp),$=new Date(u),v.level===o&&M>=$&&O<E?O++:v.level===o&&M>=$&&(oi(v,f,g),O++,O===h&&S.destroy());break;case(i&&_):M=new Date(v.timestamp),K=new Date(l),v.level===o&&M<=K&&O<E?O++:v.level===o&&M<=K&&(oi(v,f,g),O++,O===h&&S.destroy());break;case(c&&_):M=new Date(v.timestamp),$=new Date(u),K=new Date(l),M>=$&&M<=K&&O<E?O++:M>=$&&M<=K&&(oi(v,f,g),O++,O===h&&S.destroy());break;case i:v.level===o&&O<E?O++:v.level===o&&(oi(v,f,g),O++,O===h&&S.destroy());break;case c:M=new Date(v.timestamp),$=new Date(u),M>=$&&O<E?O++:M>=$&&O>=E&&(oi(v,f,g),O++,O===h&&S.destroy());break;case _:M=new Date(v.timestamp),K=new Date(l),M<=K&&O<E?O++:M<=K&&O>=E&&(oi(v,f,g),O++,O===h&&S.destroy());break;default:O<E?O++:(oi(v,f,g),O++,O===h&&S.destroy())}}return a(H,"onLogMessage"),await mX(S,"close"),g}a(OX,"readLog");function oi(e,t,r){t==="desc"?bX(e,r):t==="asc"?NX(e,r):r.push(e)}a(oi,"pushLineToResult");function bX(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(bX,"insertDescending");function NX(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(NX,"insertAscending")});var ud=T((q_e,rL)=>{"use strict";var SS=require("joi"),{string:lu,boolean:ZD,date:yX}=SS.types(),wX=Xe(),{validateSchemaExists:H_e,validateTableExists:x_e,validateSchemaName:F_e}=$n(),IX=U(),CX=tt(),eL=Z();eL.initSync();var DX=lu.invalid(eL.get(IX.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(CX.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(),tL={operation:lu.valid("add_node","update_node","set_node_replication"),node_name:DX,subscriptions:SS.array().items({table:lu.optional(),schema:lu.optional(),database:lu.optional(),subscribe:ZD.required(),publish:ZD.required().custom(MX),start_time:yX.iso()}).min(1).required()};function LX(e){return wX.validateBySchema(e,SS.object(tL))}a(LX,"addUpdateNodeValidator");function MX(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(MX,"checkForFalsy");rL.exports={addUpdateNodeValidator:LX,validation_schema:tL}});var sL=T((k_e,nL)=>{var UX=Xe(),PX={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};nL.exports=function(e){return UX.validateObject(e,PX)}});var gS=T((V_e,iL)=>{"use strict";var vX=U().OPERATIONS_ENUM,TS=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=vX.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};iL.exports=TS});var aL=T((Y_e,oL)=>{"use strict";var BX={OPERATION:"operation",REFRESH:"refresh"},RS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},AS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};oL.exports={JWTTokens:RS,TOKEN_TYPE_ENUM:BX,JWTRSAKeys:AS}});var fu=T((W_e,_L)=>{"use strict";var du=require("jsonwebtoken"),OS=require("fs-extra"),bS=J(),nn=U(),{handleHDBError:ar,hdb_errors:HX}=ee(),{HTTP_STATUS_CODES:cr,AUTHENTICATION_ERROR_MSGS:ur}=HX,_u=W(),cL=O_(),wS=en(),xX=Zr().update,FX=gS(),qX=Ss(),{UserEventMsg:GX}=yn(),ai=Z();ai.initSync();var NS=require("path"),{JWTTokens:kX,JWTRSAKeys:VX,TOKEN_TYPE_ENUM:ld}=aL(),$X=ai.get(nn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ai.get(nn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",YX=ai.get(nn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ai.get(nn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",_d="RS256",yS;_L.exports={createTokens:KX,validateOperationToken:QX,refreshOperationToken:WX,validateRefreshToken:lL};async function KX(e){if(bS.isEmpty(e)||typeof e!="object")throw ar(new Error,ur.INVALID_AUTH_OBJECT,cr.BAD_REQUEST,void 0,void 0,!0);if(bS.isEmpty(e.username))throw ar(new Error,ur.USERNAME_REQUIRED,cr.BAD_REQUEST,void 0,void 0,!0);if(bS.isEmpty(e.password))throw ar(new Error,ur.PASSWORD_REQUIRED,cr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await wS.findAndValidateUser(e.username,e.password),!t)throw ar(new Error,ur.INVALID_CREDENTIALS,cr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw _u.error(f),ar(new Error,ur.INVALID_CREDENTIALS,cr.UNAUTHORIZED,void 0,void 0,!0)}let r=await dd(),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 uL(i,r.private_key,r.passphrase),c=await du.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:YX,algorithm:_d,subject:ld.REFRESH}),u=cL.hash(c),_=new FX(nn.SYSTEM_SCHEMA_NAME,nn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await xX(_)}catch(f){_u.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw ar(new Error,ur.REFRESH_TOKEN_SAVE_FAILED,cr.INTERNAL_SERVER_ERROR);return qX.signalUserChange(new GX(process.pid)),new kX(o,c)}a(KX,"createTokens");async function uL(e,t,r){return await du.sign(e,{key:t,passphrase:r},{expiresIn:$X,algorithm:_d,subject:ld.OPERATION})}a(uL,"signOperationToken");async function dd(){if(yS===void 0)try{let e=NS.join(ai.getHdbBasePath(),nn.LICENSE_KEY_DIR_NAME,nn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=NS.join(ai.getHdbBasePath(),nn.LICENSE_KEY_DIR_NAME,nn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=NS.join(ai.getHdbBasePath(),nn.LICENSE_KEY_DIR_NAME,nn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await OS.readFile(e)).toString(),s=(await OS.readFile(t)).toString(),i=(await OS.readFile(r)).toString();yS=new VX(i,s,n)}catch(e){throw _u.error(e),ar(new Error,ur.NO_ENCRYPTION_KEYS,cr.INTERNAL_SERVER_ERROR)}return yS}a(dd,"getJWTRSAKeys");async function WX(e){if(!e)throw ar(new Error,ur.INVALID_BODY,cr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw ar(new Error,ur.REFRESH_TOKEN_REQUIRED,cr.BAD_REQUEST,void 0,void 0,!0);await lL(e.refresh_token);let t=await dd(),r=await du.decode(e.refresh_token);return{operation_token:await uL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(WX,"refreshOperationToken");async function QX(e){try{let t=await dd(),r=await du.verify(e,t.public_key,{algorithms:_d,subject:ld.OPERATION});return await wS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw _u.warn(t),t.name&&t.name==="TokenExpiredError"?ar(new Error,ur.TOKEN_EXPIRED,cr.FORBIDDEN):ar(new Error,ur.INVALID_TOKEN,cr.UNAUTHORIZED)}}a(QX,"validateOperationToken");async function lL(e){let t;try{let r=await dd(),n=await du.verify(e,r.public_key,{algorithms:_d,subject:ld.REFRESH});t=await wS.findAndValidateUser(n.username,void 0,!1)}catch(r){throw _u.warn(r),r.name&&r.name==="TokenExpiredError"?ar(new Error,ur.TOKEN_EXPIRED,cr.FORBIDDEN):ar(new Error,ur.INVALID_TOKEN,cr.UNAUTHORIZED)}if(!cL.validate(t.refresh_token,e))throw ar(new Error,ur.INVALID_TOKEN,cr.UNAUTHORIZED);return t}a(lL,"validateRefreshToken")});var IS=T((J_e,EL)=>{"use strict";var zX=sL(),oa=require("passport"),JX=require("passport-local").Strategy,XX=require("passport-http").BasicStrategy,jX=require("util"),ZX=en(),fL=jX.callbackify(ZX.findAndValidateUser),z_e=br(),ej=U(),dL=fu();oa.use(new JX(function(e,t,r){fL(e,t,r)}));oa.use(new XX(function(e,t,r){fL(e,t,r)}));oa.serializeUser(function(e,t){t(null,e)});oa.deserializeUser(function(e,t){t(null,e)});function tj(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":oa.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===ej.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?dL.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):dL.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:oa.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(tj,"authorize");function rj(e,t){let r=zX(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(rj,"checkPermissions");EL.exports={authorize:tj,checkPermissions:rj}});var aa=T((j_e,hL)=>{"use strict";var CS=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},DS=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};hL.exports={Node:CS,NodeSubscription:DS}});var pL=T((ede,mL)=>{"use strict";var nj=U().OPERATIONS_ENUM,LS=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=nj.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};mL.exports=LS});var Eu=T((rde,SL)=>{"use strict";var MS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},US=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)}};SL.exports={RemotePayloadObject:MS,RemotePayloadSubscription:US}});var gL=T((sde,TL)=>{"use strict";var PS=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}};TL.exports=PS});var OL=T((ude,AL)=>{"use strict";var sj=gL(),ode=lt(),RL=Ve(),ij=W(),{getSchemaPath:ade,getTransactionAuditStorePath:cde}=Ye(),{getDatabases:oj}=(be(),te(Fe));AL.exports=aj;async function aj(e){let t=new sj;try{let r=oj()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await RL.environmentDataSize(schema_path,e.name),o=await RL.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){ij.warn(`unable to stat table dbi due to ${r}`)}return t}a(aj,"lmdbGetTableSize")});var NL=T((_de,bL)=>{"use strict";var vS=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}};bL.exports=vS});var ca=T((hde,CL)=>{"use strict";var cj=require("fs-extra"),uj=require("path"),Kt=require("systeminformation"),ci=W(),lj=At(),BS=tt(),Ed=U(),_j=OL(),IL=Hi(),{getThreadInfo:yL}=Ze(),KS=Z();KS.initSync();var dj=NL(),{openEnvironment:fde}=Ve(),{getSchemaPath:Ede}=Ye(),{database:fj}=(be(),te(Fe)),fd;CL.exports={getHDBProcessInfo:qS,getNetworkInfo:kS,getDiskInfo:GS,getMemoryInfo:FS,getCPUInfo:xS,getTimeInfo:HS,getSystemInformation:VS,systemInformation:Ej,getTableSize:$S,getMetrics:YS};function HS(){return Kt.time()}a(HS,"getTimeInfo");async function xS(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Kt.cpu();l.cpu_speed=await Kt.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,...g}=await Kt.currentLoad();return g.cpus=[],O.forEach(R=>{let{raw_load:B,raw_load_idle:H,raw_load_irq:v,raw_load_nice:M,raw_load_system:$,raw_load_user:K,...z}=R;g.cpus.push(z)}),l.current_load=g,l}catch(e){return ci.error(`error in getCPUInfo: ${e}`),{}}}a(xS,"getCPUInfo");async function FS(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Kt.mem();return Object.assign(s,process.memoryUsage())}catch(e){return ci.error(`error in getMemoryInfo: ${e}`),{}}}a(FS,"getMemoryInfo");async function qS(){let e={core:[],clustering:[]};try{let t=await Kt.processes(),r;try{r=Number.parseInt(await cj.readFile(uj.join(KS.get(Ed.CONFIG_PARAMS.ROOTPATH),Ed.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Ed.NODE_ERROR_CODES.ENOENT)ci.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 ci.error(`error in getHDBProcessInfo: ${t}`),e}}a(qS,"getHDBProcessInfo");async function GS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Kt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Kt.fsStats();return e.read_write=_,e.size=await Kt.fsSize(),e}catch(t){return ci.error(`error in getDiskInfo: ${t}`),e}}a(GS,"getDiskInfo");async function kS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Kt.networkInterfaceDefault(),e.latency=await Kt.inetChecksite("google.com"),(await Kt.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=n;e.interfaces.push(f)}),(await Kt.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return ci.error(`error in getNetworkInfo: ${t}`),e}}a(kS,"getNetworkInfo");async function VS(){if(fd!==void 0)return fd;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Kt.osInfo();e=c;let u=await Kt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,fd=e,fd}catch(t){return ci.error(`error in getSystemInformation: ${t}`),e}}a(VS,"getSystemInformation");async function $S(){let e=[],t=await IL.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await _j(n));return e}a($S,"getTableSize");async function YS(){let e=await IL.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=fj({database:r,table:s}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),n[s]=o}catch(i){ci.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(YS,"getMetrics");async function wL(){if(KS.get(Ed.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await lj.getNATSReferences(),r=await t.streams.info(BS.WORK_QUEUE_CONSUMER_NAMES.stream_name),n=await e.consumers.get(BS.WORK_QUEUE_CONSUMER_NAMES.stream_name,BS.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(wL,"getNatsStreamInfo");async function Ej(e){let t=new dj;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await VS(),t.time=HS(),t.cpu=await xS(),t.memory=await FS(),t.disk=await GS(),t.network=await kS(),t.harperdb_processes=await qS(),t.table_size=await $S(),t.metrics=await YS(),t.threads=await yL(),t.replication=await wL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await VS();break;case"time":t.time=HS();break;case"cpu":t.cpu=await xS();break;case"memory":t.memory=await FS();break;case"disk":t.disk=await GS();break;case"network":t.network=await kS();break;case"harperdb_processes":t.harperdb_processes=await qS();break;case"table_size":t.table_size=await $S();break;case"database_metrics":case"metrics":t.metrics=await YS();break;case"threads":t.threads=await yL();break;case"replication":t.replication=await wL();break;default:break}return t}a(Ej,"systemInformation")});var md=T((pde,DL)=>{"use strict";DL.exports={version:hj,printVersion:mj};var hd=Xc();function hj(){if(hd)return hd.version}a(hj,"version");function mj(){hd&&console.log(`HarperDB Version ${hd.version}`)}a(mj,"printVersion")});var Os=T((Rde,PL)=>{"use strict";var pj=Zr(),WS=J(),Sj=require("util"),so=U(),LL=Z();LL.initSync();var Tj=IS(),ML=jr(),{Node:Tde,NodeSubscription:gde}=aa(),gj=Xo(),Rj=pL(),{RemotePayloadObject:Aj,RemotePayloadSubscription:Oj}=Eu(),{handleHDBError:bj,hdb_errors:Nj}=ee(),{HTTP_STATUS_CODES:yj,HDB_ERROR_MSGS:wj}=Nj,Ij=Qn(),Cj=ca(),Dj=md(),{getDatabases:Lj}=(be(),te(Fe)),Mj=Sj.promisify(Tj.authorize),Uj=ML.searchByHash,Pj=ML.searchByValue;PL.exports={authHeaderToUser:vj,isEmpty:Bj,getNodeRecord:Hj,upsertNodeRecord:xj,buildNodePayloads:Fj,checkClusteringEnabled:qj,getAllNodeRecords:Gj,getSystemInfo:kj,reverseSubscription:UL};async function vj(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Mj(t,null),e}a(vj,"authHeaderToUser");function Bj(e){return e==null}a(Bj,"isEmpty");async function Hj(e){let t=new gj(so.SYSTEM_SCHEMA_NAME,so.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Uj(t)}a(Hj,"getNodeRecord");async function xj(e){let t=new Rj(so.SYSTEM_SCHEMA_NAME,so.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return pj.upsert(t)}a(xj,"upsertNodeRecord");function UL(e){if(WS.isEmpty(e.subscribe)||WS.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(UL,"reverseSubscription");function Fj(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=WS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=UL(c),E=Lj()[u]?.[_],h=new Oj(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new Aj(r,t,s,n)}a(Fj,"buildNodePayloads");function qj(){if(!LL.get(so.CONFIG_PARAMS.CLUSTERING_ENABLED))throw bj(new Error,wj.CLUSTERING_NOT_ENABLED,yj.BAD_REQUEST,void 0,void 0,!0)}a(qj,"checkClusteringEnabled");async function Gj(){let e=new Ij(so.SYSTEM_SCHEMA_NAME,so.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Pj(e))}a(Gj,"getAllNodeRecords");async function kj(){let e=await Cj.getSystemInformation();return{hdb_version:Dj.version(),node_version:e.node_version,platform:e.platform}}a(kj,"getSystemInfo")});var QS=T((Ode,kL)=>{"use strict";var pd=At(),vL=J(),BL=tt(),HL=U(),Sd=W(),xL=sd(),Vj=Ep(),{RemotePayloadObject:$j}=Eu(),{handleHDBError:FL,hdb_errors:Yj}=ee(),{HTTP_STATUS_CODES:qL}=Yj,{NodeSubscription:GL}=aa();kL.exports=Kj;async function Kj(e,t){let r;try{r=await pd.request(`${t}.${BL.REQUEST_SUFFIX}`,new $j(HL.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Sd.trace("Response from remote describe all request:",r)}catch(o){Sd.error(`addNode received error from describe all request to remote node: ${o}`);let c=pd.requestErrorHandler(o,"add_node",t);throw FL(new Error,c,qL.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===BL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw FL(new Error,o,qL.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===HL.SYSTEM_SCHEMA_NAME){await pd.createLocalTableStream(u,c);let h=new GL(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=vL.doesSchemaExist(u),l=n[u]!==void 0,d=c?vL.doesTableExist(u,c):!0,f=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){s.push(o);continue}if(!_&&l&&(Sd.trace(`addNode creating schema: ${u}`),await xL.createSchema({operation:"create_schema",schema:u})),!d&&f){Sd.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new Vj(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await xL.createTable(h)}await pd.createLocalTableStream(u,c);let E=new GL(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(Kj,"reviewSubscriptions")});var Rd=T((Nde,YL)=>{"use strict";var{handleHDBError:Td,hdb_errors:Wj}=ee(),{HTTP_STATUS_CODES:gd}=Wj,{addUpdateNodeValidator:Qj}=ud(),hu=W(),$L=U(),VL=tt(),zj=J(),zS=At(),mu=Os(),Jj=Z(),Xj=QS(),{Node:jj,NodeSubscription:Zj}=aa(),{broadcast:eZ}=Ze(),tZ="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",rZ="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",nZ=Jj.get($L.CONFIG_PARAMS.CLUSTERING_NODENAME);YL.exports=sZ;async function sZ(e,t=!1){hu.trace("addNode called with:",e),mu.checkClusteringEnabled();let r=Qj(e);if(r)throw Td(r,r.message,gd.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await mu.getNodeRecord(n);if(!zj.isEmptyOrZeroLength(d))throw Td(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,gd.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Xj(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=tZ,o;let c=mu.buildNodePayloads(s,nZ,$L.OPERATIONS_ENUM.ADD_NODE,await mu.getSystemInfo());hu.trace("addNode sending remote payload:",c);let u;try{u=await zS.request(`${n}.${VL.REQUEST_SUFFIX}`,c)}catch(d){hu.error(`addNode received error from request: ${d}`);let f=zS.requestErrorHandler(d,"add_node",n);throw Td(new Error,f,gd.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===VL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw Td(new Error,d,gd.INTERNAL_SERVER_ERROR,"error",d)}hu.trace(u);let _=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];hu.trace("Add node updating work stream for node:",n,"subscriptions:",E),await zS.updateWorkStream(E,n),s[d].start_time===void 0&&delete s[d].start_time,_.push(new Zj(E.schema,E.table,E.publish,E.subscribe))}let l=new jj(n,_,u.system_info);return await mu.upsertNodeRecord(l),eZ({type:"nats_update"}),i.length>0?o.message=rZ:o.message=`Successfully added '${n}' to manifest`,o}a(sZ,"addNode")});var ZS=T((Ide,QL)=>{"use strict";var{handleHDBError:JS,hdb_errors:iZ}=ee(),{HTTP_STATUS_CODES:XS}=iZ,{addUpdateNodeValidator:oZ}=ud(),pu=W(),WL=U(),KL=tt(),wde=J(),jS=At(),Su=Os(),aZ=Z(),{cloneDeep:cZ}=require("lodash"),uZ=QS(),{Node:lZ,NodeSubscription:_Z}=aa(),{broadcast:dZ}=Ze(),fZ="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",EZ="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",hZ=aZ.get(WL.CONFIG_PARAMS.CLUSTERING_NODENAME);QL.exports=mZ;async function mZ(e){pu.trace("updateNode called with:",e),Su.checkClusteringEnabled();let t=oZ(e);if(t)throw JS(t,t.message,XS.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Su.getNodeRecord(r);s.length>0&&(n=cZ(s));let{added:i,skipped:o}=await uZ(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=fZ,c;let u=Su.buildNodePayloads(i,hZ,WL.OPERATIONS_ENUM.UPDATE_NODE,await Su.getSystemInfo());pu.trace("updateNode sending remote payload:",u);let _;try{_=await jS.request(`${r}.${KL.REQUEST_SUFFIX}`,u)}catch(l){pu.error(`updateNode received error from request: ${l}`);let d=jS.requestErrorHandler(l,"update_node",r);throw JS(new Error,d,XS.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===KL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw JS(new Error,l,XS.INTERNAL_SERVER_ERROR,"error",l)}pu.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];pu.trace(`updateNode updating work stream for node: ${r} subscription:`,f),await jS.updateWorkStream(f,r),i[l].start_time===void 0&&delete i[l].start_time}return n||(n=[new lZ(r,[],_.system_info)]),await pZ(n[0],i,_.system_info),o.length>0?c.message=EZ:c.message=`Successfully updated '${r}'`,c}a(mZ,"updateNode");async function pZ(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=n.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new _Z(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Su.upsertNodeRecord(n),dZ({type:"nats_update"})}a(pZ,"updateNodeTable")});var ZL=T((Dde,jL)=>{"use strict";var XL=require("joi"),{string:zL}=XL.types(),SZ=Xe(),JL=U(),TZ=Z(),gZ=tt();jL.exports=RZ;function RZ(e){let t=zL.invalid(TZ.get(JL.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(gZ.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=XL.object({operation:zL.valid(JL.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return SZ.validateBySchema(e,r)}a(RZ,"removeNodeValidator")});var Od=T((Mde,iM)=>{"use strict";var{handleHDBError:eM,hdb_errors:AZ}=ee(),{HTTP_STATUS_CODES:tM}=AZ,OZ=ZL(),Tu=W(),rM=Os(),bZ=J(),Ad=U(),nM=tt(),sM=At(),NZ=Z(),{RemotePayloadObject:yZ}=Eu(),{NodeSubscription:wZ}=aa(),IZ=Vc(),CZ=ki(),{broadcast:DZ}=Ze(),LZ=NZ.get(Ad.CONFIG_PARAMS.CLUSTERING_NODENAME);iM.exports=MZ;async function MZ(e){Tu.trace("removeNode called with:",e),rM.checkClusteringEnabled();let t=OZ(e);if(t)throw eM(t,t.message,tM.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await rM.getNodeRecord(r);if(bZ.isEmptyOrZeroLength(n))throw eM(new Error,`Node '${r}' was not found.`,tM.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new yZ(Ad.OPERATIONS_ENUM.REMOVE_NODE,LZ,[]),i,o=!1;try{i=await sM.request(`${r}.${nM.REQUEST_SUFFIX}`,s),Tu.trace("Remove node reply from remote node:",r,i)}catch(u){Tu.error("removeNode received error from request:",u),o=!0}for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];Tu.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new wZ(l.schema,l.table,!1,!1);await sM.updateWorkStream(d,r)}let c=new IZ(Ad.SYSTEM_SCHEMA_NAME,Ad.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await CZ.deleteRecord(c),DZ({type:"nats_update"}),i?.status===nM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Tu.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(MZ,"removeNode")});var cM=T((Pde,aM)=>{"use strict";var oM=require("joi"),{string:UZ,array:PZ}=oM.types(),vZ=Xe(),BZ=ud();aM.exports=HZ;function HZ(e){let t=oM.object({operation:UZ.valid("configure_cluster").required(),connections:PZ.items(BZ.validation_schema).required()});return vZ.validateBySchema(e,t)}a(HZ,"configureClusterValidator")});var eT=T((Bde,fM)=>{"use strict";var xZ=U(),bd=W(),FZ=J(),qZ=Od(),GZ=Rd(),uM=Os(),kZ=cM(),{handleHDBError:lM,hdb_errors:VZ}=ee(),{HTTP_STATUS_CODES:_M}=VZ,$Z="Configure cluster complete.",YZ="Failed to configure the cluster. Check the logs for more details.",KZ="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";fM.exports=WZ;async function WZ(e){bd.trace("configure cluster called with:",e),uM.checkClusteringEnabled();let t=kZ(e);if(t)throw lM(t,t.message,_M.BAD_REQUEST,void 0,void 0,!0);let r=await uM.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(dM(qZ,{operation:xZ.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);bd.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(dM(GZ,E,E.node_name))}let c=await Promise.allSettled(i);bd.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=s.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(bd.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(FZ.isEmptyOrZeroLength(u))return{message:$Z,connections:_};if(l)return{message:KZ,failed_nodes:u,connections:_};throw lM(new Error,YZ,_M.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(WZ,"configureCluster");async function dM(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(dM,"functionWrapper")});var hM=T((xde,EM)=>{"use strict";var Nd=require("joi"),QZ=Xe(),{validateSchemaExists:zZ,validateTableExists:JZ,validateSchemaName:XZ}=$n(),jZ=Nd.object({operation:Nd.string().valid("purge_stream"),schema:Nd.string().custom(zZ).custom(XZ).required(),table:Nd.string().custom(JZ).required()});function ZZ(e){return QZ.validateBySchema(e,jZ)}a(ZZ,"purgeStreamValidator");EM.exports=ZZ});var tT=T((qde,mM)=>{"use strict";var{handleHDBError:e5,hdb_errors:t5}=ee(),{HTTP_STATUS_CODES:r5}=t5,n5=hM(),s5=At(),i5=Os();mM.exports=o5;async function o5(e){if(e.purge_ingest!==!0){let s=n5(e);if(s)throw e5(s,s.message,r5.BAD_REQUEST,void 0,void 0,!0)}i5.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await s5.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(o5,"purgeStream")});var sT=T((kde,AM)=>{"use strict";var nT=Os(),a5=At(),TM=Z(),yd=U(),io=tt(),c5=J(),rT=W(),{RemotePayloadObject:u5}=Eu(),{ErrorCode:pM}=require("nats"),SM=TM.get(yd.CONFIG_PARAMS.CLUSTERING_ENABLED),gM=TM.get(yd.CONFIG_PARAMS.CLUSTERING_NODENAME);AM.exports={clusterStatus:l5,buildNodeStatus:RM};async function l5(){let e={node_name:gM,is_enabled:SM,connections:[]};if(!SM)return e;let t=await nT.getAllNodeRecords();if(c5.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(RM(t[n],e.connections));return await Promise.allSettled(r),e}a(l5,"clusterStatus");async function RM(e,t){let r=e.name,n=new u5(yd.OPERATIONS_ENUM.CLUSTER_STATUS,gM,void 0,await nT.getSystemInfo()),s,i,o=io.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await a5.request(io.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===io.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=io.CLUSTER_STATUS_STATUSES.CLOSED,rT.error(`Error getting node status from ${r} `,s))}catch(u){rT.warn(`Error getting node status from ${r}`,u),u.code===pM.NoResponders?o=io.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===pM.Timeout?o=io.CLUSTER_STATUS_STATUSES.TIMEOUT:o=io.CLUSTER_STATUS_STATUSES.CLOSED}let c=new _5(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let u={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==yd.PRE_4_0_0_VERSION&&await nT.upsertNodeRecord(u)}catch(u){rT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(RM,"buildNodeStatus");function _5(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(_5,"NodeStatusObject")});var oT=T(($de,OM)=>{"use strict";var{handleHDBError:d5,hdb_errors:f5}=ee(),{HTTP_STATUS_CODES:E5}=f5,h5=At(),m5=Os(),iT=J(),wd=require("joi"),p5=Xe(),S5=2e3,T5=wd.object({timeout:wd.number().min(1),connected_nodes:wd.boolean(),routes:wd.boolean()});OM.exports=g5;async function g5(e){m5.checkClusteringEnabled();let t=p5.validateBySchema(e,T5);if(t)throw d5(t,t.message,E5.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||iT.autoCastBoolean(n),o=s===void 0||iT.autoCastBoolean(s),c={nodes:[]},u=await h5.getServerList(r??S5),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:iT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(g5,"clusterNetwork")});var wM=T((Kde,yM)=>{"use strict";var aT=require("joi"),bM=Xe(),{route_constraints:NM}=uh();yM.exports={setRoutesValidator:R5,deleteRoutesValidator:A5};function R5(e){let t=aT.object({server:aT.valid("hub","leaf").required(),routes:NM.required()});return bM.validateBySchema(e,t)}a(R5,"setRoutesValidator");function A5(e){let t=aT.object({routes:NM.required()});return bM.validateBySchema(e,t)}a(A5,"deleteRoutesValidator")});var uT=T((Qde,LM)=>{"use strict";var oo=Ir(),cT=J(),Id=U(),IM=wM(),{handleHDBError:CM,hdb_errors:O5}=ee(),{HTTP_STATUS_CODES:DM}=O5,b5="cluster routes successfully set",N5="cluster routes successfully deleted";LM.exports={setRoutes:y5,getRoutes:w5,deleteRoutes:I5};function y5(e){let t=IM.setRoutesValidator(e);if(t)throw CM(t,t.message,DM.BAD_REQUEST,void 0,void 0,!0);let r=oo.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,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=cT.autoCast(_.port);let l=n.some(f=>f.host===_.host&&f.port===_.port),d=s.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?oo.updateConfigValue(Id.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):oo.updateConfigValue(Id.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:b5,set:o,skipped:i}}a(y5,"setRoutes");function w5(){let e=oo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(w5,"getRoutes");function I5(e){let t=IM.deleteRoutesValidator(e);if(t)throw CM(t,t.message,DM.BAD_REQUEST,void 0,void 0,!0);let r=oo.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=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),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(n=cT.isEmptyOrZeroLength(n)?null:n,oo.updateConfigValue(Id.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=cT.isEmptyOrZeroLength(s)?null:s,oo.updateConfigValue(Id.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:N5,deleted:i,skipped:o}}a(I5,"deleteRoutes")});var UM=T((Jde,MM)=>{"use strict";var gu=require("alasql"),ao=require("recursive-iterator"),Ln=W(),C5=J(),Ru=U(),lT=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,L5(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=>Ru.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=>!Ru.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][Ru.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=D5(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!Ru.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new gu.yy.Column({columnid:_});s.tableid&&(l.tableid=s.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function D5(e){return e.filter(t=>t[Ru.PERMS_CRUD_ENUM.READ])}a(D5,"filterReadRestrictedAttrs");function L5(e,t,r,n,s){M5(e,t,r,n,s)}a(L5,"interpretAST");function Au(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(Au,"addSchemaTableToMap");function M5(e,t,r,n,s){if(!e){Ln.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof gu.yy.Insert?B5(e,t,r):e instanceof gu.yy.Select?U5(e,t,r,n,s):e instanceof gu.yy.Update?P5(e,t,r):e instanceof gu.yy.Delete?v5(e,t,r):Ln.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(M5,"getRecordAttributesAST");function U5(e,t,r,n,s){if(!e){Ln.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(C5.isEmptyOrZeroLength(i)){Ln.error("No schema specified");return}e.from.forEach(c=>{Au(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Au(c.table,t,r,n,s)});let o=new ao(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Ln.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new ao(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Ln.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new ao(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=s.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Ln.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new ao(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Ln.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(U5,"getSelectAttributes");function P5(e,t,r){if(!e){Ln.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new ao(e.columns),s=e.table.databaseid;Au(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&_T(e.table.tableid,s,i.columnid,t,r)}a(P5,"getUpdateAttributes");function v5(e,t,r){if(!e){Ln.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new ao(e.where),s=e.table.databaseid;Au(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&_T(e.table.tableid,s,i.columnid,t,r)}a(v5,"getDeleteAttributes");function B5(e,t,r){if(!e){Ln.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new ao(e.columns),s=e.into.databaseid;Au(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&_T(e.into.tableid,s,i.columnid,t,r)}a(B5,"getInsertAttributes");function _T(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(_T,"pushAttribute");MM.exports=lT});var ET=T((jde,HM)=>{var Cd=Vi(),PM=require("chalk"),xr=W(),vM=require("prompt"),{promisify:H5}=require("util"),dT=U(),x5=require("fs-extra"),F5=require("path"),q5=J(),G5=md(),BM=Z();BM.initSync();var k5=require("moment"),V5=H5(vM.get),$5=F5.join(BM.getHdbBasePath(),dT.LICENSE_KEY_DIR_NAME,dT.LICENSE_FILE_NAME,dT.LICENSE_FILE_NAME);HM.exports={getFingerprint:K5,setLicense:Y5,parseLicense:fT,register:W5,getRegistrationInfo:z5};async function Y5(e){if(e&&e.key&&e.company){try{xr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await fT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw xr.error(r),xr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Y5,"setLicense");async function K5(){let e={};try{e=await Cd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw xr.error(r),xr.error(t),new Error(r)}return e}a(K5,"getFingerprint");async function fT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");xr.info("Validating license input...");let r=Cd.validateLicense(e,t);if(xr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(xr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(xr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{xr.info("writing license to disk"),await x5.writeFile($5,JSON.stringify({license_key:e,company:t}))}catch(n){throw xr.error("Failed to write License"),n}return"Registration successful."}a(fT,"parseLicense");async function W5(){let e=await Q5();return fT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(W5,"register");async function Q5(){let e=await Cd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:PM.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:PM.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{vM.start()}catch(n){xr.error(n)}let r;try{r=await V5(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(Q5,"promptForRegistration");async function z5(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Cd.getLicense()}catch(r){throw xr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(q5.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=G5.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=k5.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(z5,"getRegistrationInfo")});var FM=T((efe,xM)=>{"use strict";var J5=tt(),hT=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+J5.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:u},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};xM.exports=hT});var kM=T((rfe,GM)=>{"use strict";var qM=tt(),mT=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+qM.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+qM.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};GM.exports=mT});var $M=T((sfe,VM)=>{"use strict";var pT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};VM.exports=pT});var KM=T((ofe,YM)=>{"use strict";var X5=tt(),ST=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+X5.SERVER_SUFFIX.ADMIN,this.password=r}};YM.exports=ST});var RT=T((cfe,zM)=>{"use strict";var ua=require("path"),Md=require("fs-extra"),j5=FM(),Z5=kM(),e8=$M(),t8=KM(),TT=en(),_a=J(),lr=Ir(),Ld=U(),Ou=tt(),{CONFIG_PARAMS:ut}=Ld,bu=W(),Nu=Z(),WM=ps(),gT=At(),la="clustering",r8=1e4,QM=5;zM.exports={generateNatsConfig:s8,removeNatsConfig:i8,getHubConfigPath:n8};function n8(){let e=Nu.get(ut.ROOTPATH);return ua.join(e,la,Ou.NATS_CONFIG_FILES.HUB_SERVER)}a(n8,"getHubConfigPath");async function s8(e=!1,t=void 0){Nu.initSync();let r=Nu.get(ut.ROOTPATH),n=ua.join(r,la,Ou.PID_FILES.HUB),s=ua.join(r,la,Ou.PID_FILES.LEAF),i=lr.getConfigFromFile(ut.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=ua.join(r,la,Ou.NATS_CONFIG_FILES.HUB_SERVER),c=ua.join(r,la,Ou.NATS_CONFIG_FILES.LEAF_SERVER),u=lr.getConfigFromFile(ut.CLUSTERING_TLS_CERTIFICATE),_=lr.getConfigFromFile(ut.CLUSTERING_TLS_PRIVATEKEY),l=lr.getConfigFromFile(ut.CLUSTERING_TLS_CERT_AUTH),d=lr.getConfigFromFile(ut.CLUSTERING_TLS_INSECURE),f=lr.getConfigFromFile(ut.CLUSTERING_TLS_VERIFY),E=lr.getConfigFromFile(ut.CLUSTERING_NODENAME),h=lr.getConfigFromFile(ut.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await gT.checkNATSServerInstalled()||Ud("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await TT.listUsers(),S=lr.getConfigFromFile(ut.CLUSTERING_USER),O=await TT.getClusterUser();(_a.isEmpty(O)||O.active!==!0)&&Ud(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Dd(ut.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Dd(ut.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Dd(ut.CLUSTERING_HUBSERVER_NETWORK_PORT),await Dd(ut.CLUSTERING_LEAFSERVER_NETWORK_PORT));let g=[],R=[];for(let[z,se]of p.entries())se.role.role===Ld.ROLE_TYPES_ENUM.CLUSTER_USER&&se.active&&(g.push(new t8(se.username,WM.decrypt(se.hash))),R.push(new e8(se.username,WM.decrypt(se.hash))));let B=[],{hub_routes:H}=lr.getClusteringRoutes();if(!_a.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 j5(lr.getConfigFromFile(ut.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,u,_,l,d,f,h,lr.getConfigFromFile(ut.CLUSTERING_HUBSERVER_CLUSTER_NAME),lr.getConfigFromFile(ut.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),B,g,R);l==null&&(delete v.tls.ca_file,delete v.leafnodes.tls.ca_file),t=_a.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Ld.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Md.writeJson(o,v),bu.trace(`Hub server config written to ${o}`));let M=`tls://${O.sys_name_encoded}:${O.uri_encoded_d_hash}@0.0.0.0:${h}`,$=`tls://${O.uri_encoded_name}:${O.uri_encoded_d_hash}@0.0.0.0:${h}`,K=new Z5(lr.getConfigFromFile(ut.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[M],[$],g,R,u,_,l,d);l==null&&delete K.tls.ca_file,(t===void 0||t===Ld.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Md.writeJson(c,K),bu.trace(`Leaf server config written to ${c}`))}a(s8,"generateNatsConfig");async function Dd(e){let t=Nu.get(e);return _a.isEmpty(t)&&Ud(`port undefined for '${e}'`),await _a.isPortTaken(t)&&Ud(`'${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(Dd,"isPortAvailable");function Ud(e){let t=`Error generating clustering config: ${e}`;bu.error(t),console.error(t),process.exit(1)}a(Ud,"generateNatsConfigError");async function i8(e){let{port:t,config_file:r}=gT.getServerConfig(e),{username:n,decrypt_hash:s}=await TT.getClusterUser(),i=0,o=2e3;for(;i<QM;){try{let _=await gT.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){bu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=QM)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 _a.async_set_timeout(o*(i*2))}let c="0".repeat(r8),u=ua.join(Nu.get(ut.ROOTPATH),la,r);await Md.writeFile(u,c),await Md.remove(u),bu.notify(e,"started.")}a(i8,"removeNatsConfig")});var Hd=T((lfe,rU)=>{"use strict";var o8=require("minimist"),{isMainThread:bT,parentPort:jM}=require("worker_threads"),rt=U(),{PROCESS_DESCRIPTORS_VALIDATE:yu}=rt,jn=W(),NT=J(),Pd=RT(),da=At(),AT=tt(),ZM=Ir(),Zn=wT(),JM=ca(),a8=jE(),{restartWorkers:vd,onMessageByType:c8}=Ze(),{handleHDBError:u8,hdb_errors:l8}=ee(),{HTTP_STATUS_CODES:_8}=l8,Bd=Z();Bd.initSync();var wu=`Restarting HarperDB. This may take up to ${rt.RESTART_TIMEOUT_MS/1e3} seconds.`,d8="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",XM="Clustering is not enabled so cannot be restarted",f8="Invalid service",fa,sn;rU.exports={restart:eU,restartService:yT};bT&&c8(rt.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?yT({service:e.workerType}):eU({operation:"restart"})});async function eU(e){sn=Object.keys(e).length===0,fa=await Zn.isServiceRegistered(rt.HDB_PROC_DESCRIPTOR);let t=o8(process.argv);if(t.service){await yT(t);return}if(sn&&!fa){console.error(d8);return}if(sn&&console.log(wu),fa){Zn.enterPM2Mode(),jn.notify(wu);let r=a8(Object.keys(rt.CONFIG_PARAM_MAP),!0);return NT.isEmptyOrZeroLength(Object.keys(r))||ZM.updateConfigValue(void 0,void 0,r,!0,!0),h8(),wu}return bT?(jn.notify(wu),setTimeout(()=>{vd()},50)):jM.postMessage({type:rt.ITC_EVENT_TYPES.RESTART}),wu}a(eU,"restart");async function yT(e){let{service:t}=e;if(rt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw u8(new Error,f8,_8.BAD_REQUEST,void 0,void 0,!0);if(fa=await Zn.isServiceRegistered(rt.HDB_PROC_DESCRIPTOR),!bT)return jM.postMessage({type:rt.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case yu.clustering:if(!Bd.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=XM;break}sn&&console.log("Restarting clustering"),jn.notify("Restarting clustering"),await tU();break;case yu.clustering_config:case yu["clustering config"]:if(!Bd.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=XM;break}sn&&console.log("Restarting clustering_config"),jn.notify("Restarting clustering_config"),await Zn.reloadClustering();break;case"custom_functions":case"custom functions":case yu.harperdb:case yu.http_workers:if(sn&&!fa){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}sn&&console.log("Restarting http_workers"),jn.notify("Restarting http_workers"),sn?await Zn.restart(rt.HDB_PROC_DESCRIPTOR):setTimeout(()=>{vd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(jn.error(r),sn&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(yT,"restartService");async function E8(){await da.publishToStream(`${AT.SUBJECT_PREFIXES.TXN}.${AT.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,AT.WORK_QUEUE_CONSUMER_NAMES.stream_name,da.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(E8,"postDummyNatsMsg");async function h8(){await tU(),await Zn.restart(rt.HDB_PROC_DESCRIPTOR),await NT.async_set_timeout(2e3),Bd.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await OT(),sn&&(await da.closeConnection(),process.exit(0))}a(h8,"restartPM2Mode");async function tU(){if(!ZM.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await JM.getHDBProcessInfo()).clustering.length===0)jn.trace("Clustering not running, restart will start clustering services"),await Pd.generateNatsConfig(!0),await Zn.startClusteringProcesses(),await Zn.startClusteringThreads(),await OT(),sn&&await da.closeConnection();else{await E8(),await Pd.generateNatsConfig(!0),fa?(jn.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Zn.restart(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Zn.restart(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await JM.getHDBProcessInfo()).clustering.forEach(s=>{jn.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await NT.async_set_timeout(3e3),await OT(),await da.updateLocalStreams(),sn&&await da.closeConnection(),jn.trace("Restart clustering restarting ingest and reply service threads");let t=vd(rt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=vd(rt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(tU,"restartClustering");async function OT(){await Pd.removeNatsConfig(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Pd.removeNatsConfig(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(OT,"removeNatsConfig")});var fU=T((ffe,dU)=>{"use strict";var dfe=require("lodash"),_r=U(),{handleHDBError:nU,hdb_errors:m8}=ee(),{HDB_ERROR_MSGS:p8,HTTP_STATUS_CODES:S8}=m8,IT=W();dU.exports={getRolePermissions:g8};var co=Object.create(null),T8=a(e=>({key:e,perms:{}}),"perms_template_obj"),aU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),cU=a((e=!1,t=!1,r=!1,n=!1)=>({[_r.PERMS_CRUD_ENUM.READ]:e,[_r.PERMS_CRUD_ENUM.INSERT]:t,[_r.PERMS_CRUD_ENUM.UPDATE]:r,[_r.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),CT=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...cU(t,r,n,s)}),"table_perms_template"),sU=a((e,t=cU())=>({attribute_name:e,describe:_U(t),[Iu]:t[Iu],[DT]:t[DT],[LT]:t[LT]}),"attr_perms_template"),iU=a((e,t=!1)=>({attribute_name:e,describe:t,[Iu]:t}),"timestamp_attr_perms_template"),{READ:Iu,INSERT:DT,UPDATE:LT}=_r.PERMS_CRUD_ENUM,uU=Object.values(_r.PERMS_CRUD_ENUM),lU=[Iu,DT,LT];function g8(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[_r.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(co[t]&&co[t].key===n)return co[t].perms;let s=R8(e,r);return co[t]?co[t].key=n:co[t]=T8(n),co[t].perms=s,s}catch(r){if(!e[_r.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[_r.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<_r.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw IT.error(n),IT.debug(r),nU(new Error,p8.OUTDATED_PERMS_TRANSLATION_ERROR,S8.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
11
- ${r.stack}`;throw IT.error(n),nU(new Error)}}}a(g8,"getRolePermissions");function R8(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[_r.SYSTEM_SCHEMA_NAME]=n[_r.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=A8(t[i]);return}r[i]=aU(),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],u=t[i][o],_=O8(c,u);r[i].describe||uU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=CT()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=CT()})}),r}a(R8,"translateRolePermissions");function A8(e){let t=aU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=CT(!0,!0,!0,!0,!0)}),t}a(A8,"createStructureUserPermissions");function O8(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return _r.TIME_STAMP_NAMES.includes(d)&&(f=iU(d,l[Iu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=sU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=_U(l),s.attribute_permissions.push(l),c||b8(l,u)}else if(_!==o){let l;_r.TIME_STAMP_NAMES.includes(_)?l=iU(_):l=sU(_),s.attribute_permissions.push(l)}}),c||s.attribute_permissions.push(u),s.describe=oU(s),s}else return e.describe=oU(e),e}a(O8,"getTableAttrPerms");function oU(e){return uU.filter(t=>e[t]).length>0}a(oU,"getSchemaTableDescribePerm");function _U(e){return lU.filter(t=>e[t]).length>0}a(_U,"getAttributeDescribePerm");function b8(e,t){lU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(b8,"checkForHashPerms")});var EU={};ke(EU,{Resources:()=>xd,keyArrayToString:()=>Ea,resetResources:()=>N8,resources:()=>ui});function N8(){return ui=new xd}function Ea(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var xd,ui,Cu=Oe(()=>{zi();xd=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,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),u=this.get(c);if(u){if(u.relativeURL=t.slice(n),!u.hasSubPaths)return u;s=u}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 Ke(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(N8,"resetResources");a(Ea,"keyArrayToString")});var hU={};ke(hU,{Headers:()=>li});var li,Fd=Oe(()=>{li=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 Du={};ke(Du,{authentication:()=>OU,bypassAuth:()=>M8,login:()=>P8,logout:()=>v8,start:()=>U8});function M8(){AU=!0}async function OU(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?C8?I8:[]:w8?y8:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new li([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return qd&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),qd&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(qd){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);u=s.slice(S+1,p===-1?s.length:p),_=await pU.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new kd.AuthAuditLog(E,h,xt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===xt.AUTH_AUDIT_STATUS.SUCCESS?mU.notify(S):mU.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 je.getUser(E,null,null))}let d;if(!e.user)if(n){if(d=uo.get(n),!d){let[E,h]=n.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await je.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,Gd.validateOperationToken)(h)}catch(O){if(O.message==="invalid token")try{return await(0,Gd.validateRefreshToken)(h),c({status:-1})}catch{throw O}}break}}catch(O){return L8&&(uo.get(h)||(uo.set(h,h),l(p,xt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:_i({error:O.message},e)})}uo.set(n,d),D8&&l(d.username,xt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await je.getUser(_.user,null,e):(AU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,TU.getSuperUser)());qd&&(e.session.update=function(E){if(!u){u=(0,gU.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=u,pU.put(E)},e.login=async function(E,h){e.user=await je.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")&&ui.loginPath?(f.status=302,f.headers.set("Location",ui.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new li);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function U8({server:e,port:t}){e.request(OU,{port:t||"all"}),SU||(SU=!0,setInterval(()=>{uo=new Map},on.get(xt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),RU.user.addListener(()=>{uo=new Map}))}async function P8(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 v8(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var TU,Gd,gU,on,xt,kd,RU,mU,y8,w8,I8,C8,pU,qd,AU,D8,L8,uo,SU,Vd=Oe(()=>{TU=x(en());jt();Cu();Gd=x(fu());be();gU=require("uuid"),on=x(Z()),xt=x(U()),kd=x(W()),RU=x(Pc());Fd();ha();mU=(0,kd.loggerWithTag)("auth-event");on.initSync();y8=on.get(xt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),w8=on.get(xt.CONFIG_PARAMS.HTTP_CORS),I8=on.get(xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),C8=on.get(xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),pU=ot({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),qd=on.get(xt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,AU=on.get(xt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,D8=on.get(xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,L8=on.get(xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,uo=new Map;je.onInvalidatedUser(()=>{uo=new Map});a(M8,"bypassAuth");a(OU,"authentication");a(U8,"start");a(P8,"login");a(v8,"logout")});var DU=T((bfe,CU)=>{"use strict";var we=require("joi"),bU=require("fs-extra"),NU=require("path"),Ns=Xe(),yU=Z(),wU=U(),IU=W(),{hdb_errors:B8}=ee(),{HDB_ERROR_MSGS:Wt}=B8,bs=/^[a-zA-Z0-9-_]+$/;CU.exports={getDropCustomFunctionValidator:x8,setCustomFunctionValidator:F8,addComponentValidator:V8,dropCustomFunctionProjectValidator:$8,packageComponentValidator:Y8,deployComponentValidator:K8,setComponentFileValidator:q8,getComponentFileValidator:k8,dropComponentFileValidator:G8};function $d(e,t,r){try{let n=yU.get(wU.CONFIG_PARAMS.COMPONENTSROOT),s=NU.join(n,t);return bU.existsSync(s)?e?t:r.message(Wt.PROJECT_EXISTS):e?r.message(Wt.NO_PROJECT):t}catch(n){return IU.error(n),r.message(Wt.VALIDATION_ERR)}}a($d,"checkProjectExists");function Lu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Lu,"checkFilePath");function H8(e,t,r,n){try{let s=yU.get(wU.CONFIG_PARAMS.COMPONENTSROOT),i=NU.join(s,e,t,r+".js");return bU.existsSync(i)?r:n.message(Wt.NO_FILE)}catch(s){return IU.error(s),n.message(Wt.VALIDATION_ERR)}}a(H8,"checkFileExists");function x8(e){let t=we.object({project:we.string().pattern(bs).custom($d.bind(null,!0)).required().messages({"string.pattern.base":Wt.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().pattern(bs).custom(H8.bind(null,e.project,e.type)).custom(Lu).required().messages({"string.pattern.base":Wt.BAD_FILE_NAME})});return Ns.validateBySchema(e,t)}a(x8,"getDropCustomFunctionValidator");function F8(e){let t=we.object({project:we.string().pattern(bs).custom($d.bind(null,!0)).required().messages({"string.pattern.base":Wt.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().custom(Lu).required(),function_content:we.string().required()});return Ns.validateBySchema(e,t)}a(F8,"setCustomFunctionValidator");function q8(e){let t=we.object({project:we.string().pattern(bs).required().messages({"string.pattern.base":Wt.BAD_PROJECT_NAME}),file:we.string().custom(Lu).required(),payload:we.string().allow("").optional(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ns.validateBySchema(e,t)}a(q8,"setComponentFileValidator");function G8(e){let t=we.object({project:we.string().pattern(bs).required().messages({"string.pattern.base":Wt.BAD_PROJECT_NAME}),file:we.string().custom(Lu).optional()});return Ns.validateBySchema(e,t)}a(G8,"dropComponentFileValidator");function k8(e){let t=we.object({project:we.string().required(),file:we.string().custom(Lu).required(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ns.validateBySchema(e,t)}a(k8,"getComponentFileValidator");function V8(e){let t=we.object({project:we.string().pattern(bs).custom($d.bind(null,!1)).required().messages({"string.pattern.base":Wt.BAD_PROJECT_NAME})});return Ns.validateBySchema(e,t)}a(V8,"addComponentValidator");function $8(e){let t=we.object({project:we.string().pattern(bs).custom($d.bind(null,!0)).required().messages({"string.pattern.base":Wt.BAD_PROJECT_NAME})});return Ns.validateBySchema(e,t)}a($8,"dropCustomFunctionProjectValidator");function Y8(e){let t=we.object({project:we.string().pattern(bs).required().messages({"string.pattern.base":Wt.BAD_PROJECT_NAME}),skip_node_modules:we.boolean()});return Ns.validateBySchema(e,t)}a(Y8,"packageComponentValidator");function K8(e){let t=we.object({project:we.string().pattern(bs).required().messages({"string.pattern.base":Wt.BAD_PROJECT_NAME}),payload:we.string().optional().messages({"string.pattern.base":Wt.BAD_PACKAGE}),package:we.string().optional()});return Ns.validateBySchema(e,t)}a(K8,"deployComponentValidator")});var Qd=T((yfe,HU)=>{"use strict";var Yd=require("joi"),Kd=require("path"),LU=require("fs-extra"),{exec:W8}=require("child_process"),Q8=require("util"),MU=Q8.promisify(W8),Mu=U(),{handleHDBError:ma,hdb_errors:z8}=ee(),{HTTP_STATUS_CODES:pa}=z8,Uu=Z(),J8=Xe(),Sa=W();Uu.initSync();var MT=Uu.get(Mu.CONFIG_PARAMS.COMPONENTSROOT),UU="npm install --omit=dev --json",X8=`${UU} --dry-run`;HU.exports={installModules:t6,auditModules:r6,installAllRootModules:j8,uninstallRootModule:Z8,linkHarperdb:e6};async function j8(e=!1){await Wd(),await Pu(e?"npm install --ignore-scripts":"npm install",Uu.get(Mu.CONFIG_PARAMS.ROOTPATH))}a(j8,"installAllRootModules");async function Z8(e){await Pu(`npm uninstall ${e}`,Uu.get(Mu.CONFIG_PARAMS.ROOTPATH))}a(Z8,"uninstallRootModule");async function e6(){await Wd(),await Pu(`npm link ${Mu.PACKAGE_ROOT}`,Uu.get(Mu.CONFIG_PARAMS.ROOTPATH))}a(e6,"linkHarperdb");async function Pu(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await MU(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
12
- `,""))}return n&&!n.includes("Debugger listening")&&Sa.error("Error running NPM command:",e,n),Sa.trace(r,n),r?.replace(`
13
- `,"")}a(Pu,"runCommand");async function t6(e){Sa.info(`starting installModules for request: ${e}`);let t=BU(e);if(t)throw ma(t,t.message,pa.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?X8:UU;await Wd(),await vU(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let _=Kd.join(MT,u),l,d=null;try{let{stdout:f,stderr:E}=await MU(s,{cwd:_});l=f?f.replace(`
10
+ `,"")}a(fD,"runCommand");async function k4(){try{await g4.access(jp)}catch{return!1}let e=await fD(`${jp} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return R4.eq(t,q4)}a(k4,"checkNATSServerInstalled");async function rS(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await uD.getClusterUser();if(so(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Br.trace("create nats connection called");let i=await U4({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Ft.get(Me.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Ft.get(Me.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Ft.get(Me.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Br.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Br.error("Error with Nats client connection, connection closed",o),ED()}),i}a(rS,"createConnection");function ED(){nn=void 0,to=void 0,ro=void 0,no=void 0}a(ED,"clearClientCache");async function V4(){nn&&(await nn.drain(),nn=void 0,to=void 0,ro=void 0,no=void 0)}a(V4,"closeConnection");var nn,no;async function rd(){return no||(no=rS(Ft.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),nn=await no),nn||no}a(rd,"getConnection");async function au(){if(to)return to;so(nn)&&await rd();let{domain:e}=cu(Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(so(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return to=await nn.jetstreamManager({domain:e,timeout:6e4}),to}a(au,"getJetStreamManager");async function hD(){if(ro)return ro;so(nn)&&await rd();let{domain:e}=cu(Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(so(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ro=nn.jetstream({domain:e,timeout:6e4}),ro}a(hD,"getJetStream");async function ar(){let e=nn||await rd(),t=to||await au(),r=ro||await hD();return{connection:e,jsm:t,js:r}}a(ar,"getNATSReferences");async function $4(e){let t=Ft.get(Me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await uD.getClusterUser(),s=await rS(t,r,n),i=tS(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=dD.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=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 Zp.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a($4,"getServerList");async function nS(e,t){let{jsm:r}=await ar(),n=Ft.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Ft.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Ft.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:lD.File,retention:_D.Limits,subjects:t,discard:M4.Old,max_msgs:s,max_bytes:i,max_age:n})}a(nS,"createLocalStream");async function mD(){let{jsm:e}=await ar(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(mD,"listStreams");async function Y4(e){let{jsm:t}=await ar();await t.streams.delete(e)}a(Y4,"deleteLocalStream");async function K4(e){let{connection:t}=await ar(),r=[],n=tS(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(dD.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(K4,"listRemoteStreams");async function W4(e,t=void 0,r=void 0){let{jsm:n,js:s}=await ar(),i=oD(),o={durable_name:i,ack_policy:ed.Explicit};t&&(o.deliver_policy=td.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=eS(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Ne.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(W4,"viewStream");async function*Q4(e,t=void 0,r=void 0){let{jsm:n,js:s}=await ar(),i=oD(),o={durable_name:i,ack_policy:ed.Explicit};t&&(o.deliver_policy=td.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=eS(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(Ne.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(Q4,"viewStreamIterator");async function z4(e,t,r,n){Br.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=pD(n,r);let{js:s}=await ar(),i=await uu(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:cD.encode(n);try{Br.trace(`publishToStream publishing to subject: ${o}`),x4(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return RD(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Br.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await nS(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(z4,"publishToStream");function pD(e,t){t===void 0&&(t=v4());let r=Ft.get(Me.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Ne.MSG_HEADERS.ORIGIN)&&r&&t.append(Ne.MSG_HEADERS.ORIGIN,r),t}a(pD,"addNatsMsgHeader");function cu(e){e=e.toLowerCase();let t=ou.join(Ft.get(Me.CONFIG_PARAMS.ROOTPATH),F4);if(e===Me.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return so(Xp)&&(Xp={port:su.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:su.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ne.SERVER_SUFFIX.HUB,config_file:Ne.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:ou.join(t,Ne.PID_FILES.HUB),hdb_nats_path:t}),Xp;if(e===Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return so(Jp)&&(Jp={port:su.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:su.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ne.SERVER_SUFFIX.LEAF,config_file:Ne.NATS_CONFIG_FILES.LEAF_SERVER,domain:su.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ne.SERVER_SUFFIX.LEAF,pid_file_path:ou.join(t,Ne.PID_FILES.LEAF),hdb_nats_path:t}),Jp;Br.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(cu,"getServerConfig");async function J4(e){let{jsm:t}=await ar(),r=await uu();try{await t.streams.add({name:e.stream_name,storage:lD.File,retention:_D.Limits,max_age:D4,max_bytes:L4,subjects:[`${Ne.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:ed.Explicit,durable_name:e.durable_name,deliver_policy:td.All,max_ack_pending:1e4});else throw n}}a(J4,"createWorkQueueStream");async function X4(){let{jsm:e}=await ar();(await e.consumers.info(Ne.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ne.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Br.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(Ne.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ne.WORK_QUEUE_CONSUMER_NAMES.durable_name),Br.info("Adding pull consumer to ingest stream"),await e.consumers.add(Ne.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:ed.Explicit,durable_name:Ne.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:td.All,max_ack_pending:1e4}))}a(X4,"updateIngestStreamConsumer");async function SD(e,t,r){let{jsm:n}=await ar(),s=await n.streams.info(t),i=TD(n.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=Z_.createNatsTableStreamName(c,u),l=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,l&&d.name===_||!l&&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}.${u}.${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:`${Ne.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),s.config.sources.push(h),await n.streams.update(t,s.config)}a(SD,"addSourceToWorkStream");function TD(e){return e.split(".")[1]}a(TD,"extractServerName");async function gD(e,t,r){let{jsm:n}=await ar(),{schema:s,table:i}=r,o=`txn.${s}.${i}.${e}`;await n.streams.purge(t,{filter:o});let c=Z_.createNatsTableStreamName(s,i),u=await n.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let _=u.config.sources.length,l;for(;_--;)if(l=u.config.sources[_],l.name===c&&l.external.api===`$JS.${e}.API`){u.config.sources.splice(_,1);break}await n.streams.update(t,u.config)}a(gD,"removeSourceFromWorkStream");async function j4(e,t,r=6e4,n=tS()){if(!Zp.isObject(t))throw new Error("data param must be an object");let s=cD.encode(t),{connection:i}=await ar(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return eS(c.data)}a(j4,"request");function sS(e){return new Promise(async(t,r)=>{let n=N4(jp,["--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(sS,"reloadNATS");async function Z4(){let{pid_file_path:e}=cu(Me.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await sS(e)}a(Z4,"reloadNATSHub");async function e3(){let{pid_file_path:e}=cu(Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await sS(e)}a(e3,"reloadNATSLeaf");function t3(e,t,r){let n;switch(e.code){case iD.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case iD.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(t3,"requestErrorHandler");async function r3(e,t){let r=t+Ne.SERVER_SUFFIX.LEAF;await RD(async()=>{e.subscribe===!0?await SD(r,Ne.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await gD(r,Ne.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(r3,"updateWorkStream");function RD(e){return y4.writeTransaction(Me.SYSTEM_SCHEMA_NAME,Me.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(RD,"exclusiveLock");async function AD(e,t){let r=Z_.createNatsTableStreamName(e,t),n=await uu(),s=o3(e,t,n);await nS(r,[s])}a(AD,"createLocalTableStream");async function n3(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await AD(n,s)}}a(n3,"createTableStreams");async function OD(e,t,r=!1){if(Ft.get(Me.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=Z_.createNatsTableStreamName(e,t),{jsm:s}=await ar();r?await s.streams.purge(Ne.WORK_QUEUE_CONSUMER_NAMES.stream_name):await s.streams.purge(n)}catch(n){if(n.message==="stream not found")Br.warn(n);else throw n}}a(OD,"purgeTableStream");async function s3(e,t){if(Ft.get(Me.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await OD(e,t[r])}a(s3,"purgeSchemaTableStreams");async function i3(e){return(await au()).streams.info(e)}a(i3,"getStreamInfo");function o3(e,t,r){return`${Ne.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(o3,"createSubjectName");async function uu(){if(iu)return iu;if(iu=(await au())?.nc?.info?.server_name,iu===void 0)throw new Error("Unable to get jetstream manager server name");return iu}a(uu,"getJsmServerName");async function a3(){let e=await au(),t=await uu(),r=await mD();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=c3(n),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(s.name===Ne.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Ne.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Br.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else if(s.name===Ne.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Ne.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Br.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Br.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l}await e.streams.update(s.name,s)}}}a(a3,"updateLocalStreams");function c3(e){let{config:t}=e,r=!1;if(t.name===Ne.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===Ne.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let n=Ft.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Ft.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Ft.get(Me.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(c3,"updateStreamLimits")});var od=T((R_e,ID)=>{"use strict";var ra=d_(),na=FC(),u3=W(),l3=require("uuid").v4,g_e=require("clone"),sd=Ts(),sa=M(),_3=require("util"),si=yn(),{handleHDBError:cr,hdb_errors:d3}=re(),{HDB_ERROR_MSGS:nd,HTTP_STATUS_CODES:ur}=d3,{SchemaEventMsg:id}=wn(),ND=At(),{getDatabases:f3}=(Ae(),ne(qe)),{transformReq:ia}=J();ID.exports={createSchema:E3,createSchemaStructure:yD,createTable:h3,createTableStructure:wD,createAttribute:g3,dropSchema:m3,dropTable:p3,dropAttribute:S3,getBackup:R3};async function E3(e){let t=await yD(e);return sd.signalSchemaChange(new id(process.pid,e.operation,e.schema)),t}a(E3,"createSchema");async function yD(e){let t=ra.schema_object(e);if(t)throw cr(t,t.message,ur.BAD_REQUEST,void 0,void 0,!0);if(ia(e),!await na.checkSchemaExists(e.schema))throw cr(new Error,nd.SCHEMA_EXISTS_ERR(e.schema),ur.BAD_REQUEST,sa.LOG_LEVELS.ERROR,nd.SCHEMA_EXISTS_ERR(e.schema),!0);return await si.createSchema(e),`database '${e.schema}' successfully created`}a(yD,"createSchemaStructure");async function h3(e){return ia(e),e.hash_attribute=e.primary_key??e.hash_attribute,await wD(e)}a(h3,"createTable");async function wD(e){let t=ra.create_table_object(e);if(t)throw cr(t,t.message,ur.BAD_REQUEST,void 0,void 0,!0);if(ra.validateTableResidence(e.residence),!await na.checkSchemaTableExists(e.schema,e.table))throw cr(new Error,nd.TABLE_EXISTS_ERR(e.schema,e.table),ur.BAD_REQUEST,sa.LOG_LEVELS.ERROR,nd.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:l3(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await si.createTable(n,e);else throw cr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",ur.BAD_REQUEST);else await si.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(wD,"createTableStructure");async function m3(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=ra.schema_object(e),n=t??r;if(n)throw cr(n,n.message,ur.BAD_REQUEST,void 0,void 0,!0);ia(e);let s=await na.checkSchemaExists(e.schema);if(s)throw cr(new Error,s,ur.NOT_FOUND,sa.LOG_LEVELS.ERROR,s,!0);let i=await na.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await si.dropSchema(e),sd.signalSchemaChange(new id(process.pid,e.operation,e.schema)),await ND.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(m3,"dropSchema");async function p3(e){let t=ra.table_object(e);if(t)throw cr(t,t.message,ur.BAD_REQUEST,void 0,void 0,!0);ia(e);let r=await na.checkSchemaTableExists(e.schema,e.table);if(r)throw cr(new Error,r,ur.NOT_FOUND,sa.LOG_LEVELS.ERROR,r,!0);return await si.dropTable(e),await ND.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(p3,"dropTable");async function S3(e){let t=ra.attribute_object(e);if(t)throw cr(t,t.message,ur.BAD_REQUEST,void 0,void 0,!0);ia(e);let r=await na.checkSchemaTableExists(e.schema,e.table);if(r)throw cr(new Error,r,ur.NOT_FOUND,sa.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw cr(new Error,"You cannot drop a hash attribute",ur.BAD_REQUEST,void 0,void 0,!0);if(sa.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw cr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,ur.BAD_REQUEST,void 0,void 0,!0);try{return await si.dropAttribute(e),T3(e),sd.signalSchemaChange(new id(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw u3.error(`Got an error deleting attribute ${_3.inspect(e)}.`),n}}a(S3,"dropAttribute");function T3(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(T3,"dropAttributeFromGlobal");async function g3(e){ia(e);let t=f3()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw cr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,ur.BAD_REQUEST,void 0,void 0,!0);return await si.createAttribute(e),sd.signalSchemaChange(new id(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(g3,"createAttribute");function R3(e){return si.getBackup(e)}a(R3,"getBackup")});var DD=T((O_e,CD)=>{"use strict";var{OPERATIONS_ENUM:A3}=M(),iS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=A3.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};CD.exports=iS});var oS=T((y_e,vD)=>{"use strict";var O3=yn(),N_e=DD(),ad=J(),cd=M(),b3=te(),{handleHDBError:LD,hdb_errors:N3}=re(),{HDB_ERROR_MSGS:UD,HTTP_STATUS_CODES:MD}=N3,y3=Object.values(cd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),PD="To use this operation audit log must be enabled in harperdb-config.yaml";vD.exports=w3;async function w3(e){if(ad.isEmpty(e.schema))throw new Error(UD.SCHEMA_REQUIRED_ERR);if(ad.isEmpty(e.table))throw new Error(UD.TABLE_REQUIRED_ERR);if(!b3.get(cd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw LD(new Error,PD,MD.BAD_REQUEST,cd.LOG_LEVELS.ERROR,PD,!0);let t=ad.checkSchemaTableExist(e.schema,e.table);if(t)throw LD(new Error,t,MD.NOT_FOUND,cd.LOG_LEVELS.ERROR,t,!0);if(!ad.isEmpty(e.search_type)&&y3.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await O3.readAuditLog(e)}a(w3,"readAuditLog")});var HD=T((I_e,BD)=>{"use strict";var{OPERATIONS_ENUM:I3}=M(),aS=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=I3.GET_BACKUP,this.schema=t,this.table=r}};BD.exports=aS});var qD=T((U_e,FD)=>{"use strict";var C3=yn(),D_e=HD(),cS=J(),D3=M(),L_e=te(),{handleHDBError:L3,hdb_errors:U3}=re(),{HDB_ERROR_MSGS:xD,HTTP_STATUS_CODES:M3}=U3;FD.exports=P3;async function P3(e){if(cS.isEmpty(e.schema))throw new Error(xD.SCHEMA_REQUIRED_ERR);if(cS.isEmpty(e.table))throw new Error(xD.TABLE_REQUIRED_ERR);let t=cS.checkSchemaTableExist(e.schema,e.table);if(t)throw L3(new Error,t,M3.NOT_FOUND,D3.LOG_LEVELS.ERROR,t,!0);return await C3.getBackup(read_audit_log_object)}a(P3,"getBackup")});var KD=T((P_e,YD)=>{var ii=require("validate.js"),kD=je(),oa=M(),{handleHDBError:v3,hdb_errors:B3}=re(),{HDB_ERROR_MSGS:ut,HTTP_STATUS_CODES:H3}=B3,uS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),x3={STRUCTURE_USER:"structure_user"},GD=Object.values(oa.ROLE_TYPES_ENUM),F3="attribute_permissions",q3="attribute_name",{PERMS_CRUD_ENUM:aa}=oa,G3=[F3,...Object.values(aa)],VD=[aa.READ,aa.INSERT,aa.UPDATE],k3=[q3,...VD];function V3(e){let t=uS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,$D(e,t)}a(V3,"addRoleValidation");function $3(e){let t=uS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,$D(e,t)}a($3,"alterRoleValidation");function Y3(e){let t=uS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,kD.validateObject(e,t)}a(Y3,"dropRoleValidation");var K3=["operation","role","id","permission","hdb_user","hdb_auth_header"];function $D(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)K3.includes(n[o])||s.push(n[o]);s.length>0&&Et(ut.INVALID_ROLE_JSON_KEYS(s),r);let i=kD.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Et(o,r)}),e.permission){let o=W3(e);o&&Et(o,r),GD.forEach(c=>{e.permission[c]&&!ii.isBoolean(e.permission[c])&&Et(ut.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(GD.indexOf(o)<0){if(o===x3.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||Et(ut.SCHEMA_NOT_FOUND(d),r)}continue}Et(ut.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Et(ut.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){Et(ut.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{G3.includes(l)||Et(ut.INVALID_PERM_KEY(l),r,o,u)}),Object.values(aa).forEach(l=>{ii.isDefined(_[l])?ii.isBoolean(_[l])||Et(ut.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):Et(ut.TABLE_PERM_MISSING(l),r,o,u)}),ii.isDefined(_.attribute_permissions)){if(!ii.isArray(_.attribute_permissions)){Et(ut.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{Et(ut.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!k3.includes(p)&&p!==aa.DELETE&&Et(ut.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!ii.isDefined(E.attribute_name)){Et(ut.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){Et(ut.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}VD.forEach(p=>{ii.isDefined(E[p])?ii.isBoolean(E[p])||Et(ut.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):Et(ut.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;Et(ut.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return Q3(r)}a($D,"customValidate");YD.exports={addRoleValidation:V3,alterRoleValidation:$3,dropRoleValidation:Y3};function W3(e){let{operation:t,permission:r}=e;if(t===oa.OPERATIONS_ENUM.ADD_ROLE||t===oa.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 ut.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?oa.ROLE_TYPES_ENUM.SUPER_USER:oa.ROLE_TYPES_ENUM.CLUSTER_USER;return ut.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(W3,"validateNoSUPerms");function Q3(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:ut.ROLE_PERMS_ERROR,...e};return v3(new Error,n,H3.BAD_REQUEST)}else return null}a(Q3,"generateRolePermResponse");function Et(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(Et,"addPermError")});var hS=T((B_e,JD)=>{"use strict";var WD=en(),QD=Zr(),z3=Yi(),_S=KD(),dS=Ts(),J3=require("uuid").v4,X3=require("util"),ud=M(),j3=J(),fS=QD.searchByValue,Z3=QD.searchByHash,eX=X3.promisify(z3.delete),tX=zn(),rX=Zo(),{hdb_errors:nX,handleHDBError:io}=re(),{HDB_ERROR_MSGS:zD,HTTP_STATUS_CODES:lu}=nX,{UserEventMsg:ES}=wn();JD.exports={addRole:sX,alterRole:iX,dropRole:oX,listRoles:aX};function lS(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(lS,"scrubRoleDetails");async function sX(e){let t=_S.addRoleValidation(e);if(t)throw t;e=lS(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 fS(r)||[])}catch(i){throw io(i)}if(n&&n.length>0)throw io(new Error,zD.ROLE_ALREADY_EXISTS(e.role),lu.CONFLICT,void 0,void 0,!0);e.id||(e.id=J3());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await WD.insert(s),dS.signalUserChange(new ES(process.pid)),e=lS(e),e}a(sX,"addRole");async function iX(e){let t=_S.alterRoleValidation(e);if(t)throw t;e=lS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await WD.update(r)}catch(s){throw io(s)}if(n&&n?.message==="updated 0 of 1 records")throw io(new Error,"Invalid role id",lu.BAD_REQUEST,void 0,void 0,!0);return await dS.signalUserChange(new ES(process.pid)),e}a(iX,"alterRole");async function oX(e){let t=_S.dropRoleValidation(e);if(t)throw io(new Error,t,lu.BAD_REQUEST,void 0,void 0,!0);let r=new rX(ud.SYSTEM_SCHEMA_NAME,ud.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Z3(r));if(n.length===0)throw io(new Error,zD.ROLE_NOT_FOUND,lu.NOT_FOUND,void 0,void 0,!0);let s=new tX(ud.SYSTEM_SCHEMA_NAME,ud.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await fS(s)),o=!1;if(j3.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw io(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,lu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await eX(c),dS.signalUserChange(new ES(process.pid)),`${n[0].role} successfully deleted`}a(oX,"dropRole");async function aX(){return fS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(aX,"listRoles")});var eL=T((x_e,ZD)=>{"use strict";var cX=te(),oi=require("joi"),uX=je(),XD=require("moment"),lX=require("fs-extra"),mS=require("path"),_X=require("lodash"),_u=M(),{LOG_LEVELS:oo}=M(),dX="YYYY-MM-DD hh:mm:ss",fX=mS.resolve(__dirname,"../logs");ZD.exports=function(e){return uX.validateBySchema(e,EX)};var EX=oi.object({from:oi.custom(jD),until:oi.custom(jD),level:oi.valid(oo.NOTIFY,oo.FATAL,oo.ERROR,oo.WARN,oo.INFO,oo.DEBUG,oo.TRACE),order:oi.valid("asc","desc"),limit:oi.number().min(1),start:oi.number().min(0),log_name:oi.custom(hX)});function jD(e,t){if(XD(e,XD.ISO_8601).format(dX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(jD,"validateDatetime");function hX(e,t){if(_X.invert(_u.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=cX.get(_u.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?_u.LOG_NAMES.HDB:e,i=s===_u.LOG_NAMES.INSTALL?mS.join(fX,_u.LOG_NAMES.INSTALL):mS.join(n,s);return lX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(hX,"validateReadLogPath")});var SS=T((q_e,rL)=>{"use strict";var ld=M(),mX=W(),pX=te(),SX=eL(),pS=require("path"),tL=require("fs-extra"),{once:TX}=require("events"),{handleHDBError:gX,hdb_errors:RX}=re(),{PACKAGE_ROOT:AX}=M(),OX=pS.join(AX,"logs"),bX=1e3,NX=200;rL.exports=yX;async function yX(e){let t=SX(e);if(t)throw gX(t,t.message,RX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=pX.get(ld.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?ld.LOG_NAMES.HDB:e.log_name,s=n===ld.LOG_NAMES.INSTALL?pS.join(OX,ld.LOG_NAMES.INSTALL):pS.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?bX:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max(tL.statSync(s).size-(h+5)*NX,0));let S=tL.createReadStream(s,{start:p});S.on("error",v=>{mX.error(v)});let O=0,R=[],g="",P;S.on("data",v=>{let L=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;v=g+v;let $=0,Y;for(;(Y=L.exec(v))&&!S.destroyed;){P&&(P.message=v.slice($,Y.index),H(P));let[z,se,me]=Y,ce=me.split("] ["),xe=ce[0],le=ce[1];ce.splice(0,2),P={timestamp:se,thread:xe,level:le,tags:ce,message:""},$=Y.index+z.length}g=v.slice($)}),S.on("end",v=>{S.destroyed||P&&(P.message=g.trim(),H(P))}),S.resume();function H(v){let L,$,Y;switch(!0){case(i&&c&&_):L=new Date(v.timestamp),$=new Date(u),Y=new Date(l),v.level===o&&L>=$&&L<=Y&&O<E?O++:v.level===o&&L>=$&&L<=Y&&(ai(v,f,R),O++,O===h&&S.destroy());break;case(i&&c):L=new Date(v.timestamp),$=new Date(u),v.level===o&&L>=$&&O<E?O++:v.level===o&&L>=$&&(ai(v,f,R),O++,O===h&&S.destroy());break;case(i&&_):L=new Date(v.timestamp),Y=new Date(l),v.level===o&&L<=Y&&O<E?O++:v.level===o&&L<=Y&&(ai(v,f,R),O++,O===h&&S.destroy());break;case(c&&_):L=new Date(v.timestamp),$=new Date(u),Y=new Date(l),L>=$&&L<=Y&&O<E?O++:L>=$&&L<=Y&&(ai(v,f,R),O++,O===h&&S.destroy());break;case i:v.level===o&&O<E?O++:v.level===o&&(ai(v,f,R),O++,O===h&&S.destroy());break;case c:L=new Date(v.timestamp),$=new Date(u),L>=$&&O<E?O++:L>=$&&O>=E&&(ai(v,f,R),O++,O===h&&S.destroy());break;case _:L=new Date(v.timestamp),Y=new Date(l),L<=Y&&O<E?O++:L<=Y&&O>=E&&(ai(v,f,R),O++,O===h&&S.destroy());break;default:O<E?O++:(ai(v,f,R),O++,O===h&&S.destroy())}}return a(H,"onLogMessage"),await TX(S,"close"),R}a(yX,"readLog");function ai(e,t,r){t==="desc"?wX(e,r):t==="asc"?IX(e,r):r.push(e)}a(ai,"pushLineToResult");function wX(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(wX,"insertDescending");function IX(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(IX,"insertAscending")});var _d=T((Y_e,oL)=>{"use strict";var TS=require("joi"),{string:du,boolean:nL,date:CX}=TS.types(),DX=je(),{validateSchemaExists:k_e,validateTableExists:V_e,validateSchemaName:$_e}=Yn(),LX=M(),UX=rt(),sL=te();sL.initSync();var MX=du.invalid(sL.get(LX.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(UX.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(),iL={operation:du.valid("add_node","update_node","set_node_replication"),node_name:MX,subscriptions:TS.array().items({table:du.optional(),schema:du.optional(),database:du.optional(),subscribe:nL.required(),publish:nL.required().custom(vX),start_time:CX.iso()}).min(1).required()};function PX(e){return DX.validateBySchema(e,TS.object(iL))}a(PX,"addUpdateNodeValidator");function vX(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(vX,"checkForFalsy");oL.exports={addUpdateNodeValidator:PX,validation_schema:iL}});var cL=T((W_e,aL)=>{var BX=je(),HX={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};aL.exports=function(e){return BX.validateObject(e,HX)}});var RS=T((Q_e,uL)=>{"use strict";var xX=M().OPERATIONS_ENUM,gS=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=xX.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};uL.exports=gS});var _L=T((J_e,lL)=>{"use strict";var FX={OPERATION:"operation",REFRESH:"refresh"},AS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},OS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};lL.exports={JWTTokens:AS,TOKEN_TYPE_ENUM:FX,JWTRSAKeys:OS}});var hu=T((j_e,hL)=>{"use strict";var Eu=require("jsonwebtoken"),bS=require("fs-extra"),NS=J(),sn=M(),{handleHDBError:lr,hdb_errors:qX}=re(),{HTTP_STATUS_CODES:_r,AUTHENTICATION_ERROR_MSGS:dr}=qX,fu=W(),dL=N_(),IS=tn(),GX=en().update,kX=RS(),VX=Ts(),{UserEventMsg:$X}=wn(),ci=te();ci.initSync();var yS=require("path"),{JWTTokens:YX,JWTRSAKeys:KX,TOKEN_TYPE_ENUM:dd}=_L(),WX=ci.get(sn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ci.get(sn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",QX=ci.get(sn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ci.get(sn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",fd="RS256",wS;hL.exports={createTokens:zX,validateOperationToken:XX,refreshOperationToken:JX,validateRefreshToken:EL};async function zX(e){if(NS.isEmpty(e)||typeof e!="object")throw lr(new Error,dr.INVALID_AUTH_OBJECT,_r.BAD_REQUEST,void 0,void 0,!0);if(NS.isEmpty(e.username))throw lr(new Error,dr.USERNAME_REQUIRED,_r.BAD_REQUEST,void 0,void 0,!0);if(NS.isEmpty(e.password))throw lr(new Error,dr.PASSWORD_REQUIRED,_r.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await IS.findAndValidateUser(e.username,e.password),!t)throw lr(new Error,dr.INVALID_CREDENTIALS,_r.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw fu.error(f),lr(new Error,dr.INVALID_CREDENTIALS,_r.UNAUTHORIZED,void 0,void 0,!0)}let r=await Ed(),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 fL(i,r.private_key,r.passphrase),c=await Eu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:QX,algorithm:fd,subject:dd.REFRESH}),u=dL.hash(c),_=new kX(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await GX(_)}catch(f){fu.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw lr(new Error,dr.REFRESH_TOKEN_SAVE_FAILED,_r.INTERNAL_SERVER_ERROR);return VX.signalUserChange(new $X(process.pid)),new YX(o,c)}a(zX,"createTokens");async function fL(e,t,r){return await Eu.sign(e,{key:t,passphrase:r},{expiresIn:WX,algorithm:fd,subject:dd.OPERATION})}a(fL,"signOperationToken");async function Ed(){if(wS===void 0)try{let e=yS.join(ci.getHdbBasePath(),sn.LICENSE_KEY_DIR_NAME,sn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=yS.join(ci.getHdbBasePath(),sn.LICENSE_KEY_DIR_NAME,sn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=yS.join(ci.getHdbBasePath(),sn.LICENSE_KEY_DIR_NAME,sn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await bS.readFile(e)).toString(),s=(await bS.readFile(t)).toString(),i=(await bS.readFile(r)).toString();wS=new KX(i,s,n)}catch(e){throw fu.error(e),lr(new Error,dr.NO_ENCRYPTION_KEYS,_r.INTERNAL_SERVER_ERROR)}return wS}a(Ed,"getJWTRSAKeys");async function JX(e){if(!e)throw lr(new Error,dr.INVALID_BODY,_r.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw lr(new Error,dr.REFRESH_TOKEN_REQUIRED,_r.BAD_REQUEST,void 0,void 0,!0);await EL(e.refresh_token);let t=await Ed(),r=await Eu.decode(e.refresh_token);return{operation_token:await fL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(JX,"refreshOperationToken");async function XX(e){try{let t=await Ed(),r=await Eu.verify(e,t.public_key,{algorithms:fd,subject:dd.OPERATION});return await IS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw fu.warn(t),t.name&&t.name==="TokenExpiredError"?lr(new Error,dr.TOKEN_EXPIRED,_r.FORBIDDEN):lr(new Error,dr.INVALID_TOKEN,_r.UNAUTHORIZED)}}a(XX,"validateOperationToken");async function EL(e){let t;try{let r=await Ed(),n=await Eu.verify(e,r.public_key,{algorithms:fd,subject:dd.REFRESH});t=await IS.findAndValidateUser(n.username,void 0,!1)}catch(r){throw fu.warn(r),r.name&&r.name==="TokenExpiredError"?lr(new Error,dr.TOKEN_EXPIRED,_r.FORBIDDEN):lr(new Error,dr.INVALID_TOKEN,_r.UNAUTHORIZED)}if(!dL.validate(t.refresh_token,e))throw lr(new Error,dr.INVALID_TOKEN,_r.UNAUTHORIZED);return t}a(EL,"validateRefreshToken")});var CS=T((tde,SL)=>{"use strict";var jX=cL(),ca=require("passport"),ZX=require("passport-local").Strategy,ej=require("passport-http").BasicStrategy,tj=require("util"),rj=tn(),pL=tj.callbackify(rj.findAndValidateUser),ede=Or(),nj=M(),mL=hu();ca.use(new ZX(function(e,t,r){pL(e,t,r)}));ca.use(new ej(function(e,t,r){pL(e,t,r)}));ca.serializeUser(function(e,t){t(null,e)});ca.deserializeUser(function(e,t){t(null,e)});function sj(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":ca.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===nj.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?mL.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):mL.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:ca.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(sj,"authorize");function ij(e,t){let r=jX(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(ij,"checkPermissions");SL.exports={authorize:sj,checkPermissions:ij}});var ua=T((nde,TL)=>{"use strict";var DS=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},LS=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};TL.exports={Node:DS,NodeSubscription:LS}});var RL=T((ide,gL)=>{"use strict";var oj=M().OPERATIONS_ENUM,US=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=oj.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};gL.exports=US});var mu=T((ade,AL)=>{"use strict";var MS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},PS=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)}};AL.exports={RemotePayloadObject:MS,RemotePayloadSubscription:PS}});var bL=T((ude,OL)=>{"use strict";var vS=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}};OL.exports=vS});var wL=T((Ede,yL)=>{"use strict";var aj=bL(),_de=_t(),NL=Ye(),cj=W(),{getSchemaPath:dde,getTransactionAuditStorePath:fde}=Qe(),{getDatabases:uj}=(Ae(),ne(qe));yL.exports=lj;async function lj(e){let t=new aj;try{let r=uj()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await NL.environmentDataSize(schema_path,e.name),o=await NL.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){cj.warn(`unable to stat table dbi due to ${r}`)}return t}a(lj,"lmdbGetTableSize")});var CL=T((mde,IL)=>{"use strict";var BS=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}};IL.exports=BS});var la=T((gde,ML)=>{"use strict";var _j=require("fs-extra"),dj=require("path"),Qt=require("systeminformation"),ui=W(),fj=At(),HS=rt(),md=M(),Ej=wL(),UL=qi(),{getThreadInfo:DL}=et(),WS=te();WS.initSync();var hj=CL(),{openEnvironment:Sde}=Ye(),{getSchemaPath:Tde}=Qe(),{database:mj}=(Ae(),ne(qe)),hd;ML.exports={getHDBProcessInfo:GS,getNetworkInfo:VS,getDiskInfo:kS,getMemoryInfo:qS,getCPUInfo:FS,getTimeInfo:xS,getSystemInformation:$S,systemInformation:pj,getTableSize:YS,getMetrics:KS};function xS(){return Qt.time()}a(xS,"getTimeInfo");async function FS(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Qt.cpu();l.cpu_speed=await Qt.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,...R}=await Qt.currentLoad();return R.cpus=[],O.forEach(g=>{let{raw_load:P,raw_load_idle:H,raw_load_irq:v,raw_load_nice:L,raw_load_system:$,raw_load_user:Y,...z}=g;R.cpus.push(z)}),l.current_load=R,l}catch(e){return ui.error(`error in getCPUInfo: ${e}`),{}}}a(FS,"getCPUInfo");async function qS(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Qt.mem();return Object.assign(s,process.memoryUsage())}catch(e){return ui.error(`error in getMemoryInfo: ${e}`),{}}}a(qS,"getMemoryInfo");async function GS(){let e={core:[],clustering:[]};try{let t=await Qt.processes(),r;try{r=Number.parseInt(await _j.readFile(dj.join(WS.get(md.CONFIG_PARAMS.ROOTPATH),md.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===md.NODE_ERROR_CODES.ENOENT)ui.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 ui.error(`error in getHDBProcessInfo: ${t}`),e}}a(GS,"getHDBProcessInfo");async function kS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Qt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Qt.fsStats();return e.read_write=_,e.size=await Qt.fsSize(),e}catch(t){return ui.error(`error in getDiskInfo: ${t}`),e}}a(kS,"getDiskInfo");async function VS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Qt.networkInterfaceDefault(),e.latency=await Qt.inetChecksite("google.com"),(await Qt.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=n;e.interfaces.push(f)}),(await Qt.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return ui.error(`error in getNetworkInfo: ${t}`),e}}a(VS,"getNetworkInfo");async function $S(){if(hd!==void 0)return hd;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Qt.osInfo();e=c;let u=await Qt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,hd=e,hd}catch(t){return ui.error(`error in getSystemInformation: ${t}`),e}}a($S,"getSystemInformation");async function YS(){let e=[],t=await UL.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Ej(n));return e}a(YS,"getTableSize");async function KS(){let e=await UL.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=mj({database:r,table:s}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),n[s]=o}catch(i){ui.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(KS,"getMetrics");async function LL(){if(WS.get(md.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await fj.getNATSReferences(),r=await t.streams.info(HS.WORK_QUEUE_CONSUMER_NAMES.stream_name),n=await e.consumers.get(HS.WORK_QUEUE_CONSUMER_NAMES.stream_name,HS.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(LL,"getNatsStreamInfo");async function pj(e){let t=new hj;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await $S(),t.time=xS(),t.cpu=await FS(),t.memory=await qS(),t.disk=await kS(),t.network=await VS(),t.harperdb_processes=await GS(),t.table_size=await YS(),t.metrics=await KS(),t.threads=await DL(),t.replication=await LL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await $S();break;case"time":t.time=xS();break;case"cpu":t.cpu=await FS();break;case"memory":t.memory=await qS();break;case"disk":t.disk=await kS();break;case"network":t.network=await VS();break;case"harperdb_processes":t.harperdb_processes=await GS();break;case"table_size":t.table_size=await YS();break;case"database_metrics":case"metrics":t.metrics=await KS();break;case"threads":t.threads=await DL();break;case"replication":t.replication=await LL();break;default:break}return t}a(pj,"systemInformation")});var Sd=T((Ade,PL)=>{"use strict";PL.exports={version:Sj,printVersion:Tj};var pd=Zc();function Sj(){if(pd)return pd.version}a(Sj,"version");function Tj(){pd&&console.log(`HarperDB Version ${pd.version}`)}a(Tj,"printVersion")});var bs=T((yde,xL)=>{"use strict";var gj=en(),QS=J(),Rj=require("util"),ao=M(),vL=te();vL.initSync();var Aj=CS(),BL=Zr(),{Node:bde,NodeSubscription:Nde}=ua(),Oj=Zo(),bj=RL(),{RemotePayloadObject:Nj,RemotePayloadSubscription:yj}=mu(),{handleHDBError:wj,hdb_errors:Ij}=re(),{HTTP_STATUS_CODES:Cj,HDB_ERROR_MSGS:Dj}=Ij,Lj=zn(),Uj=la(),Mj=Sd(),{getDatabases:Pj}=(Ae(),ne(qe)),vj=Rj.promisify(Aj.authorize),Bj=BL.searchByHash,Hj=BL.searchByValue;xL.exports={authHeaderToUser:xj,isEmpty:Fj,getNodeRecord:qj,upsertNodeRecord:Gj,buildNodePayloads:kj,checkClusteringEnabled:Vj,getAllNodeRecords:$j,getSystemInfo:Yj,reverseSubscription:HL};async function xj(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await vj(t,null),e}a(xj,"authHeaderToUser");function Fj(e){return e==null}a(Fj,"isEmpty");async function qj(e){let t=new Oj(ao.SYSTEM_SCHEMA_NAME,ao.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Bj(t)}a(qj,"getNodeRecord");async function Gj(e){let t=new bj(ao.SYSTEM_SCHEMA_NAME,ao.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return gj.upsert(t)}a(Gj,"upsertNodeRecord");function HL(e){if(QS.isEmpty(e.subscribe)||QS.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(HL,"reverseSubscription");function kj(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=QS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=HL(c),E=Pj()[u]?.[_],h=new yj(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new Nj(r,t,s,n)}a(kj,"buildNodePayloads");function Vj(){if(!vL.get(ao.CONFIG_PARAMS.CLUSTERING_ENABLED))throw wj(new Error,Dj.CLUSTERING_NOT_ENABLED,Cj.BAD_REQUEST,void 0,void 0,!0)}a(Vj,"checkClusteringEnabled");async function $j(){let e=new Lj(ao.SYSTEM_SCHEMA_NAME,ao.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Hj(e))}a($j,"getAllNodeRecords");async function Yj(){let e=await Uj.getSystemInformation();return{hdb_version:Mj.version(),node_version:e.node_version,platform:e.platform}}a(Yj,"getSystemInfo")});var zS=T((Ide,KL)=>{"use strict";var Td=At(),FL=J(),qL=rt(),GL=M(),gd=W(),kL=od(),Kj=hp(),{RemotePayloadObject:Wj}=mu(),{handleHDBError:VL,hdb_errors:Qj}=re(),{HTTP_STATUS_CODES:$L}=Qj,{NodeSubscription:YL}=ua();KL.exports=zj;async function zj(e,t){let r;try{r=await Td.request(`${t}.${qL.REQUEST_SUFFIX}`,new Wj(GL.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),gd.trace("Response from remote describe all request:",r)}catch(o){gd.error(`addNode received error from describe all request to remote node: ${o}`);let c=Td.requestErrorHandler(o,"add_node",t);throw VL(new Error,c,$L.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===qL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw VL(new Error,o,$L.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===GL.SYSTEM_SCHEMA_NAME){await Td.createLocalTableStream(u,c);let h=new YL(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=FL.doesSchemaExist(u),l=n[u]!==void 0,d=c?FL.doesTableExist(u,c):!0,f=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){s.push(o);continue}if(!_&&l&&(gd.trace(`addNode creating schema: ${u}`),await kL.createSchema({operation:"create_schema",schema:u})),!d&&f){gd.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new Kj(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await kL.createTable(h)}await Td.createLocalTableStream(u,c);let E=new YL(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(zj,"reviewSubscriptions")});var Od=T((Dde,zL)=>{"use strict";var{handleHDBError:Rd,hdb_errors:Jj}=re(),{HTTP_STATUS_CODES:Ad}=Jj,{addUpdateNodeValidator:Xj}=_d(),pu=W(),QL=M(),WL=rt(),jj=J(),JS=At(),Su=bs(),Zj=te(),eZ=zS(),{Node:tZ,NodeSubscription:rZ}=ua(),{broadcast:nZ}=et(),sZ="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",iZ="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",oZ=Zj.get(QL.CONFIG_PARAMS.CLUSTERING_NODENAME);zL.exports=aZ;async function aZ(e,t=!1){pu.trace("addNode called with:",e),Su.checkClusteringEnabled();let r=Xj(e);if(r)throw Rd(r,r.message,Ad.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await Su.getNodeRecord(n);if(!jj.isEmptyOrZeroLength(d))throw Rd(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,Ad.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await eZ(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=sZ,o;let c=Su.buildNodePayloads(s,oZ,QL.OPERATIONS_ENUM.ADD_NODE,await Su.getSystemInfo());pu.trace("addNode sending remote payload:",c);let u;try{u=await JS.request(`${n}.${WL.REQUEST_SUFFIX}`,c)}catch(d){pu.error(`addNode received error from request: ${d}`);let f=JS.requestErrorHandler(d,"add_node",n);throw Rd(new Error,f,Ad.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===WL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw Rd(new Error,d,Ad.INTERNAL_SERVER_ERROR,"error",d)}pu.trace(u);let _=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];pu.trace("Add node updating work stream for node:",n,"subscriptions:",E),await JS.updateWorkStream(E,n),s[d].start_time===void 0&&delete s[d].start_time,_.push(new rZ(E.schema,E.table,E.publish,E.subscribe))}let l=new tZ(n,_,u.system_info);return await Su.upsertNodeRecord(l),nZ({type:"nats_update"}),i.length>0?o.message=iZ:o.message=`Successfully added '${n}' to manifest`,o}a(aZ,"addNode")});var eT=T((Mde,jL)=>{"use strict";var{handleHDBError:XS,hdb_errors:cZ}=re(),{HTTP_STATUS_CODES:jS}=cZ,{addUpdateNodeValidator:uZ}=_d(),Tu=W(),XL=M(),JL=rt(),Ude=J(),ZS=At(),gu=bs(),lZ=te(),{cloneDeep:_Z}=require("lodash"),dZ=zS(),{Node:fZ,NodeSubscription:EZ}=ua(),{broadcast:hZ}=et(),mZ="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",pZ="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",SZ=lZ.get(XL.CONFIG_PARAMS.CLUSTERING_NODENAME);jL.exports=TZ;async function TZ(e){Tu.trace("updateNode called with:",e),gu.checkClusteringEnabled();let t=uZ(e);if(t)throw XS(t,t.message,jS.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await gu.getNodeRecord(r);s.length>0&&(n=_Z(s));let{added:i,skipped:o}=await dZ(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=mZ,c;let u=gu.buildNodePayloads(i,SZ,XL.OPERATIONS_ENUM.UPDATE_NODE,await gu.getSystemInfo());Tu.trace("updateNode sending remote payload:",u);let _;try{_=await ZS.request(`${r}.${JL.REQUEST_SUFFIX}`,u)}catch(l){Tu.error(`updateNode received error from request: ${l}`);let d=ZS.requestErrorHandler(l,"update_node",r);throw XS(new Error,d,jS.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===JL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw XS(new Error,l,jS.INTERNAL_SERVER_ERROR,"error",l)}Tu.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];Tu.trace(`updateNode updating work stream for node: ${r} subscription:`,f),await ZS.updateWorkStream(f,r),i[l].start_time===void 0&&delete i[l].start_time}return n||(n=[new fZ(r,[],_.system_info)]),await gZ(n[0],i,_.system_info),o.length>0?c.message=pZ:c.message=`Successfully updated '${r}'`,c}a(TZ,"updateNode");async function gZ(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=n.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new EZ(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await gu.upsertNodeRecord(n),hZ({type:"nats_update"})}a(gZ,"updateNodeTable")});var nU=T((vde,rU)=>{"use strict";var tU=require("joi"),{string:ZL}=tU.types(),RZ=je(),eU=M(),AZ=te(),OZ=rt();rU.exports=bZ;function bZ(e){let t=ZL.invalid(AZ.get(eU.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(OZ.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=tU.object({operation:ZL.valid(eU.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return RZ.validateBySchema(e,r)}a(bZ,"removeNodeValidator")});var Nd=T((Hde,uU)=>{"use strict";var{handleHDBError:sU,hdb_errors:NZ}=re(),{HTTP_STATUS_CODES:iU}=NZ,yZ=nU(),Ru=W(),oU=bs(),wZ=J(),bd=M(),aU=rt(),cU=At(),IZ=te(),{RemotePayloadObject:CZ}=mu(),{NodeSubscription:DZ}=ua(),LZ=Yc(),UZ=Yi(),{broadcast:MZ}=et(),PZ=IZ.get(bd.CONFIG_PARAMS.CLUSTERING_NODENAME);uU.exports=vZ;async function vZ(e){Ru.trace("removeNode called with:",e),oU.checkClusteringEnabled();let t=yZ(e);if(t)throw sU(t,t.message,iU.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await oU.getNodeRecord(r);if(wZ.isEmptyOrZeroLength(n))throw sU(new Error,`Node '${r}' was not found.`,iU.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new CZ(bd.OPERATIONS_ENUM.REMOVE_NODE,PZ,[]),i,o=!1;try{i=await cU.request(`${r}.${aU.REQUEST_SUFFIX}`,s),Ru.trace("Remove node reply from remote node:",r,i)}catch(u){Ru.error("removeNode received error from request:",u),o=!0}for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];Ru.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new DZ(l.schema,l.table,!1,!1);await cU.updateWorkStream(d,r)}let c=new LZ(bd.SYSTEM_SCHEMA_NAME,bd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await UZ.deleteRecord(c),MZ({type:"nats_update"}),i?.status===aU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Ru.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(vZ,"removeNode")});var dU=T((Fde,_U)=>{"use strict";var lU=require("joi"),{string:BZ,array:HZ}=lU.types(),xZ=je(),FZ=_d();_U.exports=qZ;function qZ(e){let t=lU.object({operation:BZ.valid("configure_cluster").required(),connections:HZ.items(FZ.validation_schema).required()});return xZ.validateBySchema(e,t)}a(qZ,"configureClusterValidator")});var tT=T((Gde,pU)=>{"use strict";var GZ=M(),yd=W(),kZ=J(),VZ=Nd(),$Z=Od(),fU=bs(),YZ=dU(),{handleHDBError:EU,hdb_errors:KZ}=re(),{HTTP_STATUS_CODES:hU}=KZ,WZ="Configure cluster complete.",QZ="Failed to configure the cluster. Check the logs for more details.",zZ="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";pU.exports=JZ;async function JZ(e){yd.trace("configure cluster called with:",e),fU.checkClusteringEnabled();let t=YZ(e);if(t)throw EU(t,t.message,hU.BAD_REQUEST,void 0,void 0,!0);let r=await fU.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(mU(VZ,{operation:GZ.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);yd.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(mU($Z,E,E.node_name))}let c=await Promise.allSettled(i);yd.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=s.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(yd.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(kZ.isEmptyOrZeroLength(u))return{message:WZ,connections:_};if(l)return{message:zZ,failed_nodes:u,connections:_};throw EU(new Error,QZ,hU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(JZ,"configureCluster");async function mU(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(mU,"functionWrapper")});var TU=T((Vde,SU)=>{"use strict";var wd=require("joi"),XZ=je(),{validateSchemaExists:jZ,validateTableExists:ZZ,validateSchemaName:e5}=Yn(),t5=wd.object({operation:wd.string().valid("purge_stream"),schema:wd.string().custom(jZ).custom(e5).required(),table:wd.string().custom(ZZ).required()});function r5(e){return XZ.validateBySchema(e,t5)}a(r5,"purgeStreamValidator");SU.exports=r5});var rT=T((Yde,gU)=>{"use strict";var{handleHDBError:n5,hdb_errors:s5}=re(),{HTTP_STATUS_CODES:i5}=s5,o5=TU(),a5=At(),c5=bs();gU.exports=u5;async function u5(e){if(e.purge_ingest!==!0){let s=o5(e);if(s)throw n5(s,s.message,i5.BAD_REQUEST,void 0,void 0,!0)}c5.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await a5.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(u5,"purgeStream")});var iT=T((Wde,yU)=>{"use strict";var sT=bs(),l5=At(),OU=te(),Id=M(),co=rt(),_5=J(),nT=W(),{RemotePayloadObject:d5}=mu(),{ErrorCode:RU}=require("nats"),AU=OU.get(Id.CONFIG_PARAMS.CLUSTERING_ENABLED),bU=OU.get(Id.CONFIG_PARAMS.CLUSTERING_NODENAME);yU.exports={clusterStatus:f5,buildNodeStatus:NU};async function f5(){let e={node_name:bU,is_enabled:AU,connections:[]};if(!AU)return e;let t=await sT.getAllNodeRecords();if(_5.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(NU(t[n],e.connections));return await Promise.allSettled(r),e}a(f5,"clusterStatus");async function NU(e,t){let r=e.name,n=new d5(Id.OPERATIONS_ENUM.CLUSTER_STATUS,bU,void 0,await sT.getSystemInfo()),s,i,o=co.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await l5.request(co.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===co.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=co.CLUSTER_STATUS_STATUSES.CLOSED,nT.error(`Error getting node status from ${r} `,s))}catch(u){nT.warn(`Error getting node status from ${r}`,u),u.code===RU.NoResponders?o=co.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===RU.Timeout?o=co.CLUSTER_STATUS_STATUSES.TIMEOUT:o=co.CLUSTER_STATUS_STATUSES.CLOSED}let c=new E5(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let u={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Id.PRE_4_0_0_VERSION&&await sT.upsertNodeRecord(u)}catch(u){nT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(NU,"buildNodeStatus");function E5(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(E5,"NodeStatusObject")});var aT=T((zde,wU)=>{"use strict";var{handleHDBError:h5,hdb_errors:m5}=re(),{HTTP_STATUS_CODES:p5}=m5,S5=At(),T5=bs(),oT=J(),Cd=require("joi"),g5=je(),R5=2e3,A5=Cd.object({timeout:Cd.number().min(1),connected_nodes:Cd.boolean(),routes:Cd.boolean()});wU.exports=O5;async function O5(e){T5.checkClusteringEnabled();let t=g5.validateBySchema(e,A5);if(t)throw h5(t,t.message,p5.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||oT.autoCastBoolean(n),o=s===void 0||oT.autoCastBoolean(s),c={nodes:[]},u=await S5.getServerList(r??R5),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:oT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(O5,"clusterNetwork")});var LU=T((Xde,DU)=>{"use strict";var cT=require("joi"),IU=je(),{route_constraints:CU}=lh();DU.exports={setRoutesValidator:b5,deleteRoutesValidator:N5};function b5(e){let t=cT.object({server:cT.valid("hub","leaf").required(),routes:CU.required()});return IU.validateBySchema(e,t)}a(b5,"setRoutesValidator");function N5(e){let t=cT.object({routes:CU.required()});return IU.validateBySchema(e,t)}a(N5,"deleteRoutesValidator")});var lT=T((Zde,vU)=>{"use strict";var uo=wr(),uT=J(),Dd=M(),UU=LU(),{handleHDBError:MU,hdb_errors:y5}=re(),{HTTP_STATUS_CODES:PU}=y5,w5="cluster routes successfully set",I5="cluster routes successfully deleted";vU.exports={setRoutes:C5,getRoutes:D5,deleteRoutes:L5};function C5(e){let t=UU.setRoutesValidator(e);if(t)throw MU(t,t.message,PU.BAD_REQUEST,void 0,void 0,!0);let r=uo.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,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=uT.autoCast(_.port);let l=n.some(f=>f.host===_.host&&f.port===_.port),d=s.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?uo.updateConfigValue(Dd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):uo.updateConfigValue(Dd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:w5,set:o,skipped:i}}a(C5,"setRoutes");function D5(){let e=uo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(D5,"getRoutes");function L5(e){let t=UU.deleteRoutesValidator(e);if(t)throw MU(t,t.message,PU.BAD_REQUEST,void 0,void 0,!0);let r=uo.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=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),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(n=uT.isEmptyOrZeroLength(n)?null:n,uo.updateConfigValue(Dd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=uT.isEmptyOrZeroLength(s)?null:s,uo.updateConfigValue(Dd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:I5,deleted:i,skipped:o}}a(L5,"deleteRoutes")});var HU=T((tfe,BU)=>{"use strict";var Au=require("alasql"),lo=require("recursive-iterator"),Un=W(),U5=J(),Ou=M(),_T=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,P5(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=>Ou.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=>!Ou.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][Ou.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=M5(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!Ou.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Au.yy.Column({columnid:_});s.tableid&&(l.tableid=s.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function M5(e){return e.filter(t=>t[Ou.PERMS_CRUD_ENUM.READ])}a(M5,"filterReadRestrictedAttrs");function P5(e,t,r,n,s){v5(e,t,r,n,s)}a(P5,"interpretAST");function bu(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(bu,"addSchemaTableToMap");function v5(e,t,r,n,s){if(!e){Un.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Au.yy.Insert?F5(e,t,r):e instanceof Au.yy.Select?B5(e,t,r,n,s):e instanceof Au.yy.Update?H5(e,t,r):e instanceof Au.yy.Delete?x5(e,t,r):Un.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(v5,"getRecordAttributesAST");function B5(e,t,r,n,s){if(!e){Un.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(U5.isEmptyOrZeroLength(i)){Un.error("No schema specified");return}e.from.forEach(c=>{bu(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),bu(c.table,t,r,n,s)});let o=new lo(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Un.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new lo(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Un.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new lo(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=s.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Un.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new lo(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Un.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(B5,"getSelectAttributes");function H5(e,t,r){if(!e){Un.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new lo(e.columns),s=e.table.databaseid;bu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&dT(e.table.tableid,s,i.columnid,t,r)}a(H5,"getUpdateAttributes");function x5(e,t,r){if(!e){Un.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new lo(e.where),s=e.table.databaseid;bu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&dT(e.table.tableid,s,i.columnid,t,r)}a(x5,"getDeleteAttributes");function F5(e,t,r){if(!e){Un.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new lo(e.columns),s=e.into.databaseid;bu(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&dT(e.into.tableid,s,i.columnid,t,r)}a(F5,"getInsertAttributes");function dT(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(dT,"pushAttribute");BU.exports=_T});var hT=T((nfe,GU)=>{var Ld=Ki(),xU=require("chalk"),Hr=W(),FU=require("prompt"),{promisify:q5}=require("util"),fT=M(),G5=require("fs-extra"),k5=require("path"),V5=J(),$5=Sd(),qU=te();qU.initSync();var Y5=require("moment"),K5=q5(FU.get),W5=k5.join(qU.getHdbBasePath(),fT.LICENSE_KEY_DIR_NAME,fT.LICENSE_FILE_NAME,fT.LICENSE_FILE_NAME);GU.exports={getFingerprint:z5,setLicense:Q5,parseLicense:ET,register:J5,getRegistrationInfo:j5};async function Q5(e){if(e&&e.key&&e.company){try{Hr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await ET(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Hr.error(r),Hr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Q5,"setLicense");async function z5(){let e={};try{e=await Ld.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Hr.error(r),Hr.error(t),new Error(r)}return e}a(z5,"getFingerprint");async function ET(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Hr.info("Validating license input...");let r=Ld.validateLicense(e,t);if(Hr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Hr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Hr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Hr.info("writing license to disk"),await G5.writeFile(W5,JSON.stringify({license_key:e,company:t}))}catch(n){throw Hr.error("Failed to write License"),n}return"Registration successful."}a(ET,"parseLicense");async function J5(){let e=await X5();return ET(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(J5,"register");async function X5(){let e=await Ld.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:xU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:xU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{FU.start()}catch(n){Hr.error(n)}let r;try{r=await K5(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(X5,"promptForRegistration");async function j5(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Ld.getLicense()}catch(r){throw Hr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(V5.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=$5.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Y5.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(j5,"getRegistrationInfo")});var VU=T((ife,kU)=>{"use strict";var Z5=rt(),mT=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+Z5.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:u},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};kU.exports=mT});var KU=T((afe,YU)=>{"use strict";var $U=rt(),pT=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+$U.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+$U.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};YU.exports=pT});var QU=T((ufe,WU)=>{"use strict";var ST=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};WU.exports=ST});var JU=T((_fe,zU)=>{"use strict";var e8=rt(),TT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+e8.SERVER_SUFFIX.ADMIN,this.password=r}};zU.exports=TT});var AT=T((ffe,ZU)=>{"use strict";var _a=require("path"),Pd=require("fs-extra"),t8=VU(),r8=KU(),n8=QU(),s8=JU(),gT=tn(),fa=J(),fr=wr(),Md=M(),Nu=rt(),{CONFIG_PARAMS:lt}=Md,yu=W(),wu=te(),XU=Ss(),RT=At(),da="clustering",i8=1e4,jU=5;ZU.exports={generateNatsConfig:a8,removeNatsConfig:c8,getHubConfigPath:o8};function o8(){let e=wu.get(lt.ROOTPATH);return _a.join(e,da,Nu.NATS_CONFIG_FILES.HUB_SERVER)}a(o8,"getHubConfigPath");async function a8(e=!1,t=void 0){wu.initSync();let r=wu.get(lt.ROOTPATH),n=_a.join(r,da,Nu.PID_FILES.HUB),s=_a.join(r,da,Nu.PID_FILES.LEAF),i=fr.getConfigFromFile(lt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=_a.join(r,da,Nu.NATS_CONFIG_FILES.HUB_SERVER),c=_a.join(r,da,Nu.NATS_CONFIG_FILES.LEAF_SERVER),u=fr.getConfigFromFile(lt.CLUSTERING_TLS_CERTIFICATE),_=fr.getConfigFromFile(lt.CLUSTERING_TLS_PRIVATEKEY),l=fr.getConfigFromFile(lt.CLUSTERING_TLS_CERT_AUTH),d=fr.getConfigFromFile(lt.CLUSTERING_TLS_INSECURE),f=fr.getConfigFromFile(lt.CLUSTERING_TLS_VERIFY),E=fr.getConfigFromFile(lt.CLUSTERING_NODENAME),h=fr.getConfigFromFile(lt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await RT.checkNATSServerInstalled()||vd("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await gT.listUsers(),S=fr.getConfigFromFile(lt.CLUSTERING_USER),O=await gT.getClusterUser();(fa.isEmpty(O)||O.active!==!0)&&vd(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Ud(lt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Ud(lt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Ud(lt.CLUSTERING_HUBSERVER_NETWORK_PORT),await Ud(lt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let R=[],g=[];for(let[z,se]of p.entries())se.role.role===Md.ROLE_TYPES_ENUM.CLUSTER_USER&&se.active&&(R.push(new s8(se.username,XU.decrypt(se.hash))),g.push(new n8(se.username,XU.decrypt(se.hash))));let P=[],{hub_routes:H}=fr.getClusteringRoutes();if(!fa.isEmptyOrZeroLength(H))for(let z of H)P.push(`tls://${O.sys_name_encoded}:${O.uri_encoded_d_hash}@${z.host}:${z.port}`);let v=new t8(fr.getConfigFromFile(lt.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,u,_,l,d,f,h,fr.getConfigFromFile(lt.CLUSTERING_HUBSERVER_CLUSTER_NAME),fr.getConfigFromFile(lt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),P,R,g);l==null&&(delete v.tls.ca_file,delete v.leafnodes.tls.ca_file),t=fa.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Md.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Pd.writeJson(o,v),yu.trace(`Hub server config written to ${o}`));let L=`tls://${O.sys_name_encoded}:${O.uri_encoded_d_hash}@0.0.0.0:${h}`,$=`tls://${O.uri_encoded_name}:${O.uri_encoded_d_hash}@0.0.0.0:${h}`,Y=new r8(fr.getConfigFromFile(lt.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[L],[$],R,g,u,_,l,d);l==null&&delete Y.tls.ca_file,(t===void 0||t===Md.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Pd.writeJson(c,Y),yu.trace(`Leaf server config written to ${c}`))}a(a8,"generateNatsConfig");async function Ud(e){let t=wu.get(e);return fa.isEmpty(t)&&vd(`port undefined for '${e}'`),await fa.isPortTaken(t)&&vd(`'${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(Ud,"isPortAvailable");function vd(e){let t=`Error generating clustering config: ${e}`;yu.error(t),console.error(t),process.exit(1)}a(vd,"generateNatsConfigError");async function c8(e){let{port:t,config_file:r}=RT.getServerConfig(e),{username:n,decrypt_hash:s}=await gT.getClusterUser(),i=0,o=2e3;for(;i<jU;){try{let _=await RT.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){yu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=jU)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 fa.async_set_timeout(o*(i*2))}let c="0".repeat(i8),u=_a.join(wu.get(lt.ROOTPATH),da,r);await Pd.writeFile(u,c),await Pd.remove(u),yu.notify(e,"started.")}a(c8,"removeNatsConfig")});var Fd=T((hfe,oM)=>{"use strict";var u8=require("minimist"),{isMainThread:NT,parentPort:rM}=require("worker_threads"),nt=M(),{PROCESS_DESCRIPTORS_VALIDATE:Iu}=nt,Zn=W(),yT=J(),Bd=AT(),Ea=At(),OT=rt(),nM=wr(),es=IT(),eM=la(),l8=ZE(),{restartWorkers:Hd,onMessageByType:_8}=et(),{handleHDBError:d8,hdb_errors:f8}=re(),{HTTP_STATUS_CODES:E8}=f8,xd=te();xd.initSync();var Cu=`Restarting HarperDB. This may take up to ${nt.RESTART_TIMEOUT_MS/1e3} seconds.`,h8="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",tM="Clustering is not enabled so cannot be restarted",m8="Invalid service",ha,on;oM.exports={restart:sM,restartService:wT};NT&&_8(nt.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?wT({service:e.workerType}):sM({operation:"restart"})});async function sM(e){on=Object.keys(e).length===0,ha=await es.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR);let t=u8(process.argv);if(t.service){await wT(t);return}if(on&&!ha){console.error(h8);return}if(on&&console.log(Cu),ha){es.enterPM2Mode(),Zn.notify(Cu);let r=l8(Object.keys(nt.CONFIG_PARAM_MAP),!0);return yT.isEmptyOrZeroLength(Object.keys(r))||nM.updateConfigValue(void 0,void 0,r,!0,!0),S8(),Cu}return NT?(Zn.notify(Cu),setTimeout(()=>{Hd()},50)):rM.postMessage({type:nt.ITC_EVENT_TYPES.RESTART}),Cu}a(sM,"restart");async function wT(e){let{service:t}=e;if(nt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw d8(new Error,m8,E8.BAD_REQUEST,void 0,void 0,!0);if(ha=await es.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR),!NT)return rM.postMessage({type:nt.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Iu.clustering:if(!xd.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=tM;break}on&&console.log("Restarting clustering"),Zn.notify("Restarting clustering"),await iM();break;case Iu.clustering_config:case Iu["clustering config"]:if(!xd.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=tM;break}on&&console.log("Restarting clustering_config"),Zn.notify("Restarting clustering_config"),await es.reloadClustering();break;case"custom_functions":case"custom functions":case Iu.harperdb:case Iu.http_workers:if(on&&!ha){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}on&&console.log("Restarting http_workers"),Zn.notify("Restarting http_workers"),on?await es.restart(nt.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Hd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Zn.error(r),on&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(wT,"restartService");async function p8(){await Ea.publishToStream(`${OT.SUBJECT_PREFIXES.TXN}.${OT.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,OT.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ea.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(p8,"postDummyNatsMsg");async function S8(){await iM(),await es.restart(nt.HDB_PROC_DESCRIPTOR),await yT.async_set_timeout(2e3),xd.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await bT(),on&&(await Ea.closeConnection(),process.exit(0))}a(S8,"restartPM2Mode");async function iM(){if(!nM.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await eM.getHDBProcessInfo()).clustering.length===0)Zn.trace("Clustering not running, restart will start clustering services"),await Bd.generateNatsConfig(!0),await es.startClusteringProcesses(),await es.startClusteringThreads(),await bT(),on&&await Ea.closeConnection();else{await p8(),await Bd.generateNatsConfig(!0),ha?(Zn.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await es.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await es.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await eM.getHDBProcessInfo()).clustering.forEach(s=>{Zn.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await yT.async_set_timeout(3e3),await bT(),await Ea.updateLocalStreams(),on&&await Ea.closeConnection(),Zn.trace("Restart clustering restarting ingest and reply service threads");let t=Hd(nt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Hd(nt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(iM,"restartClustering");async function bT(){await Bd.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Bd.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(bT,"removeNatsConfig")});var pM=T((Sfe,mM)=>{"use strict";var pfe=require("lodash"),Er=M(),{handleHDBError:aM,hdb_errors:T8}=re(),{HDB_ERROR_MSGS:g8,HTTP_STATUS_CODES:R8}=T8,CT=W();mM.exports={getRolePermissions:O8};var _o=Object.create(null),A8=a(e=>({key:e,perms:{}}),"perms_template_obj"),_M=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),dM=a((e=!1,t=!1,r=!1,n=!1)=>({[Er.PERMS_CRUD_ENUM.READ]:e,[Er.PERMS_CRUD_ENUM.INSERT]:t,[Er.PERMS_CRUD_ENUM.UPDATE]:r,[Er.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),DT=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...dM(t,r,n,s)}),"table_perms_template"),cM=a((e,t=dM())=>({attribute_name:e,describe:hM(t),[Du]:t[Du],[LT]:t[LT],[UT]:t[UT]}),"attr_perms_template"),uM=a((e,t=!1)=>({attribute_name:e,describe:t,[Du]:t}),"timestamp_attr_perms_template"),{READ:Du,INSERT:LT,UPDATE:UT}=Er.PERMS_CRUD_ENUM,fM=Object.values(Er.PERMS_CRUD_ENUM),EM=[Du,LT,UT];function O8(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[Er.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(_o[t]&&_o[t].key===n)return _o[t].perms;let s=b8(e,r);return _o[t]?_o[t].key=n:_o[t]=A8(n),_o[t].perms=s,s}catch(r){if(!e[Er.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Er.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Er.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 CT.error(n),CT.debug(r),aM(new Error,g8.OUTDATED_PERMS_TRANSLATION_ERROR,R8.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
11
+ ${r.stack}`;throw CT.error(n),aM(new Error)}}}a(O8,"getRolePermissions");function b8(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Er.SYSTEM_SCHEMA_NAME]=n[Er.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]=N8(t[i]);return}r[i]=_M(),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],u=t[i][o],_=y8(c,u);r[i].describe||fM.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=DT()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=DT()})}),r}a(b8,"translateRolePermissions");function N8(e){let t=_M(!0);return Object.keys(e).forEach(r=>{t.tables[r]=DT(!0,!0,!0,!0,!0)}),t}a(N8,"createStructureUserPermissions");function y8(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return Er.TIME_STAMP_NAMES.includes(d)&&(f=uM(d,l[Du])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=cM(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=hM(l),s.attribute_permissions.push(l),c||w8(l,u)}else if(_!==o){let l;Er.TIME_STAMP_NAMES.includes(_)?l=uM(_):l=cM(_),s.attribute_permissions.push(l)}}),c||s.attribute_permissions.push(u),s.describe=lM(s),s}else return e.describe=lM(e),e}a(y8,"getTableAttrPerms");function lM(e){return fM.filter(t=>e[t]).length>0}a(lM,"getSchemaTableDescribePerm");function hM(e){return EM.filter(t=>e[t]).length>0}a(hM,"getAttributeDescribePerm");function w8(e,t){EM.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(w8,"checkForHashPerms")});var SM={};$e(SM,{Resources:()=>qd,keyArrayToString:()=>ma,resetResources:()=>I8,resources:()=>li});function I8(){return li=new qd}function ma(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var qd,li,Lu=Re(()=>{ji();qd=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,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),u=this.get(c);if(u){if(u.relativeURL=t.slice(n),!u.hasSubPaths)return u;s=u}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(I8,"resetResources");a(ma,"keyArrayToString")});var TM={};$e(TM,{Headers:()=>_i,appendHeader:()=>MT});function MT(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var _i,Uu=Re(()=>{_i=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(MT,"appendHeader")});var Mu={};$e(Mu,{authentication:()=>wM,bypassAuth:()=>v8,login:()=>H8,logout:()=>x8,start:()=>B8});function v8(){yM=!0}async function wM(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?U8?L8:[]:D8?C8:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new _i([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Gd&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Gd&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Gd){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);u=s.slice(S+1,p===-1?s.length:p),_=await RM.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new Vd.AuthAuditLog(E,h,qt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===qt.AUTH_AUDIT_STATUS.SUCCESS?gM.notify(S):gM.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 Ze.getUser(E,null,null))}let d;if(!e.user)if(n){if(d=fo.get(n),!d){let[E,h]=n.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await Ze.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,kd.validateOperationToken)(h)}catch(O){if(O.message==="invalid token")try{return await(0,kd.validateRefreshToken)(h),c({status:-1})}catch{throw O}}break}}catch(O){return P8&&(fo.get(h)||(fo.set(h,h),l(p,qt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:di({error:O.message},e)})}fo.set(n,d),M8&&l(d.username,qt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await Ze.getUser(_.user,null,e):(yM&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,OM.getSuperUser)());Gd&&(e.session.update=function(E){if(!u){u=(0,bM.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=u,RM.put(E)},e.login=async function(E,h){e.user=await Ze.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")&&li.loginPath?(f.status=302,f.headers.set("Location",li.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new _i);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function B8({server:e,port:t}){e.request(wM,{port:t||"all"}),AM||(AM=!0,setInterval(()=>{fo=new Map},an.get(qt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),NM.user.addListener(()=>{fo=new Map}))}async function H8(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 x8(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var OM,kd,bM,an,qt,Vd,NM,gM,C8,D8,L8,U8,RM,Gd,yM,M8,P8,fo,AM,$d=Re(()=>{OM=x(tn());tr();Lu();kd=x(hu());Ae();bM=require("uuid"),an=x(te()),qt=x(M()),Vd=x(W()),NM=x(Bc());Uu();pa();gM=(0,Vd.loggerWithTag)("auth-event");an.initSync();C8=an.get(qt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),D8=an.get(qt.CONFIG_PARAMS.HTTP_CORS),L8=an.get(qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),U8=an.get(qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),RM=at({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Gd=an.get(qt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,yM=an.get(qt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,M8=an.get(qt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,P8=an.get(qt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,fo=new Map;Ze.onInvalidatedUser(()=>{fo=new Map});a(v8,"bypassAuth");a(wM,"authentication");a(B8,"start");a(H8,"login");a(x8,"logout")});var PM=T((Cfe,MM)=>{"use strict";var ye=require("joi"),IM=require("fs-extra"),CM=require("path"),ys=je(),DM=te(),LM=M(),UM=W(),{hdb_errors:F8}=re(),{HDB_ERROR_MSGS:zt}=F8,Ns=/^[a-zA-Z0-9-_]+$/;MM.exports={getDropCustomFunctionValidator:G8,setCustomFunctionValidator:k8,addComponentValidator:K8,dropCustomFunctionProjectValidator:W8,packageComponentValidator:Q8,deployComponentValidator:z8,setComponentFileValidator:V8,getComponentFileValidator:Y8,dropComponentFileValidator:$8};function Yd(e,t,r){try{let n=DM.get(LM.CONFIG_PARAMS.COMPONENTSROOT),s=CM.join(n,t);return IM.existsSync(s)?e?t:r.message(zt.PROJECT_EXISTS):e?r.message(zt.NO_PROJECT):t}catch(n){return UM.error(n),r.message(zt.VALIDATION_ERR)}}a(Yd,"checkProjectExists");function Pu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Pu,"checkFilePath");function q8(e,t,r,n){try{let s=DM.get(LM.CONFIG_PARAMS.COMPONENTSROOT),i=CM.join(s,e,t,r+".js");return IM.existsSync(i)?r:n.message(zt.NO_FILE)}catch(s){return UM.error(s),n.message(zt.VALIDATION_ERR)}}a(q8,"checkFileExists");function G8(e){let t=ye.object({project:ye.string().pattern(Ns).custom(Yd.bind(null,!0)).required().messages({"string.pattern.base":zt.BAD_PROJECT_NAME}),type:ye.string().valid("helpers","routes").required(),file:ye.string().pattern(Ns).custom(q8.bind(null,e.project,e.type)).custom(Pu).required().messages({"string.pattern.base":zt.BAD_FILE_NAME})});return ys.validateBySchema(e,t)}a(G8,"getDropCustomFunctionValidator");function k8(e){let t=ye.object({project:ye.string().pattern(Ns).custom(Yd.bind(null,!0)).required().messages({"string.pattern.base":zt.BAD_PROJECT_NAME}),type:ye.string().valid("helpers","routes").required(),file:ye.string().custom(Pu).required(),function_content:ye.string().required()});return ys.validateBySchema(e,t)}a(k8,"setCustomFunctionValidator");function V8(e){let t=ye.object({project:ye.string().pattern(Ns).required().messages({"string.pattern.base":zt.BAD_PROJECT_NAME}),file:ye.string().custom(Pu).required(),payload:ye.string().allow("").optional(),encoding:ye.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ys.validateBySchema(e,t)}a(V8,"setComponentFileValidator");function $8(e){let t=ye.object({project:ye.string().pattern(Ns).required().messages({"string.pattern.base":zt.BAD_PROJECT_NAME}),file:ye.string().custom(Pu).optional()});return ys.validateBySchema(e,t)}a($8,"dropComponentFileValidator");function Y8(e){let t=ye.object({project:ye.string().required(),file:ye.string().custom(Pu).required(),encoding:ye.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ys.validateBySchema(e,t)}a(Y8,"getComponentFileValidator");function K8(e){let t=ye.object({project:ye.string().pattern(Ns).custom(Yd.bind(null,!1)).required().messages({"string.pattern.base":zt.BAD_PROJECT_NAME})});return ys.validateBySchema(e,t)}a(K8,"addComponentValidator");function W8(e){let t=ye.object({project:ye.string().pattern(Ns).custom(Yd.bind(null,!0)).required().messages({"string.pattern.base":zt.BAD_PROJECT_NAME})});return ys.validateBySchema(e,t)}a(W8,"dropCustomFunctionProjectValidator");function Q8(e){let t=ye.object({project:ye.string().pattern(Ns).required().messages({"string.pattern.base":zt.BAD_PROJECT_NAME}),skip_node_modules:ye.boolean()});return ys.validateBySchema(e,t)}a(Q8,"packageComponentValidator");function z8(e){let t=ye.object({project:ye.string().pattern(Ns).required().messages({"string.pattern.base":zt.BAD_PROJECT_NAME}),payload:ye.string().optional().messages({"string.pattern.base":zt.BAD_PACKAGE}),package:ye.string().optional()});return ys.validateBySchema(e,t)}a(z8,"deployComponentValidator")});var zd=T((Lfe,GM)=>{"use strict";var Kd=require("joi"),Wd=require("path"),vM=require("fs-extra"),{exec:J8}=require("child_process"),X8=require("util"),BM=X8.promisify(J8),vu=M(),{handleHDBError:Sa,hdb_errors:j8}=re(),{HTTP_STATUS_CODES:Ta}=j8,Bu=te(),Z8=je(),ga=W();Bu.initSync();var PT=Bu.get(vu.CONFIG_PARAMS.COMPONENTSROOT),HM="npm install --omit=dev --json",e6=`${HM} --dry-run`;GM.exports={installModules:s6,auditModules:i6,installAllRootModules:t6,uninstallRootModule:r6,linkHarperdb:n6};async function t6(e=!1){await Qd(),await Hu(e?"npm install --ignore-scripts":"npm install",Bu.get(vu.CONFIG_PARAMS.ROOTPATH))}a(t6,"installAllRootModules");async function r6(e){await Hu(`npm uninstall ${e}`,Bu.get(vu.CONFIG_PARAMS.ROOTPATH))}a(r6,"uninstallRootModule");async function n6(){await Qd(),await Hu(`npm link ${vu.PACKAGE_ROOT}`,Bu.get(vu.CONFIG_PARAMS.ROOTPATH))}a(n6,"linkHarperdb");async function Hu(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await BM(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
12
+ `,""))}return n&&!n.includes("Debugger listening")&&ga.error("Error running NPM command:",e,n),ga.trace(r,n),r?.replace(`
13
+ `,"")}a(Hu,"runCommand");async function s6(e){ga.info(`starting installModules for request: ${e}`);let t=qM(e);if(t)throw Sa(t,t.message,Ta.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?e6:HM;await Qd(),await FM(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let _=Wd.join(PT,u),l,d=null;try{let{stdout:f,stderr:E}=await BM(s,{cwd:_});l=f?f.replace(`
14
14
  `,""):null,d=E?E.replace(`
15
- `,""):null}catch(f){f.stderr?i[u].npm_error=PU(f.stderr):i[u].npm_error=f.message;continue}try{i[u].npm_output=JSON.parse(l)}catch{i[u].npm_output=l}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return Sa.info(`finished installModules with response ${i}`),i}a(t6,"installModules");function PU(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
16
- `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(PU,"parseNPMStdErr");async function r6(e){Sa.info(`starting auditModules for request: ${e}`);let t=BU(e);if(t)throw ma(t,t.message,pa.BAD_REQUEST);let{projects:r}=e;await Wd(),await vU(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Kd.join(MT,o);n[o]={npm_output:null,npm_error:null};try{let u=await Pu("npm audit --json",c);n[o].npm_output=JSON.parse(u)}catch(u){n[o].npm_error=PU(u.stderr)}}return Sa.info(`finished auditModules with response ${n}`),n}a(r6,"auditModules");async function Wd(){try{return await Pu("npm -v"),!0}catch{throw ma(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",pa.BAD_REQUEST,void 0,void 0,!0)}}a(Wd,"checkNPMInstalled");async function vU(e){if(!Array.isArray(e)||e.length===0)throw ma(new Error,"projects argument must be an array with at least 1 element",pa.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=Kd.join(MT,i.toString());if(!await LU.pathExists(o)){t.push(i);continue}let u=Kd.join(o,"package.json");await LU.pathExists(u)||r.push(i)}if(t.length>0)throw ma(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,pa.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw ma(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,pa.BAD_REQUEST,void 0,void 0,!0)}a(vU,"checkProjectPaths");function BU(e){let t=Yd.object({projects:Yd.array().min(1).items(Yd.string()).required(),dry_run:Yd.boolean().default(!1)});return J8.validateBySchema(e,t)}a(BU,"modulesValidator")});var PT=T((Ife,kU)=>{"use strict";var Ta=require("fs-extra"),UT=require("path"),zd=W(),xU=J(),Jd=U(),GU=Z(),n6=Ir();kU.exports=s6;async function s6(){let e=i6(),t=GU.get(Jd.CONFIG_PARAMS.ROOTPATH),r=UT.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Jd.PACKAGE_ROOT}},s=UT.join(t,"node_modules");await Ta.ensureDir(s);let i,o=!0,c=!1;try{i=await Ta.readJson(r)}catch(u){if(xU.isEmptyOrZeroLength(e))return;if(u.code!==Jd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!xU.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await FU(_);n.dependencies[u]=l+_}if(!o){zd.notify("Installing components"),await qU(r,n,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await FU(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)n.dependencies[u]===void 0&&(zd.notify("Removing component",u),c=!0);c&&(zd.notify("Updating components."),await qU(r,n,i))}a(s6,"installComponents");function i6(){let e=n6.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(i6,"getComponentsConfig");async function FU(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":UT.extname(e)||await Ta.pathExists(e)?"file:":"github:"}a(FU,"getPkgPrefix");async function qU(e,t,r){zd.trace("npm installing components package.json",t),await Ta.writeFile(e,JSON.stringify(t,null," "));try{await Qd().installAllRootModules(GU.get(Jd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await Ta.writeFile(e,JSON.stringify(r,null," ")):await Ta.unlink(e),n}}a(qU,"installPackages")});var HT=T((Lfe,KU)=>{"use strict";var qe=require("fs-extra"),vT=require("fast-glob"),Re=require("path"),$U=require("tar-fs"),Dfe=require("uuid").v4,BT=require("normalize-path"),es=DU(),Ot=W(),$e=U(),Et=Z(),vu=Ir(),o6=J(),{PACKAGE_ROOT:a6}=U(),{handleHDBError:Mt,hdb_errors:c6}=ee(),{basename:u6}=require("path"),l6=PT(),YU=Z(),_6=U(),{Readable:d6}=require("stream"),{isMainThread:f6}=require("worker_threads"),{HDB_ERROR_MSGS:lo,HTTP_STATUS_CODES:Ut}=c6,E6=Re.join(a6,"application-template"),VU=Re.join(Et.get($e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function h6(){Ot.trace("getting custom api status");let e={};try{e={port:Et.get($e.CONFIG_PARAMS.HTTP_PORT),directory:Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Mt(new Error,lo.FUNCTION_STATUS,Ut.INTERNAL_SERVER_ERROR,Ot.ERR,t)}return e}a(h6,"customFunctionsStatus");function m6(){Ot.trace("getting custom api endpoints");let e={},t=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT);try{vT.sync(BT(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:vT.sync(BT(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:vT.sync(BT(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Mt(new Error,lo.GET_FUNCTIONS,Ut.INTERNAL_SERVER_ERROR,Ot.ERR,r)}return e}a(m6,"getCustomFunctions");function p6(e){e.project&&(e.project=Re.parse(e.project).name),e.file&&(e.file=Re.parse(e.file).name);let t=es.getDropCustomFunctionValidator(e);if(t)throw Mt(t,t.message,Ut.BAD_REQUEST);Ot.trace("getting custom api endpoint file content");let r=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=Re.join(r,n,s,i+".js");try{return qe.readFileSync(o,{encoding:"utf8"})}catch(c){throw Mt(new Error,lo.GET_FUNCTION,Ut.INTERNAL_SERVER_ERROR,Ot.ERR,c)}}a(p6,"getCustomFunction");function S6(e){e.project&&(e.project=Re.parse(e.project).name),e.file&&(e.file=Re.parse(e.file).name);let t=es.setCustomFunctionValidator(e);if(t)throw Mt(t,t.message,Ut.BAD_REQUEST);Ot.trace("setting custom function file content");let r=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return qe.outputFileSync(Re.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Mt(new Error,lo.SET_FUNCTION,Ut.INTERNAL_SERVER_ERROR,Ot.ERR,c)}}a(S6,"setCustomFunction");function T6(e){e.project&&(e.project=Re.parse(e.project).name),e.file&&(e.file=Re.parse(e.file).name);let t=es.getDropCustomFunctionValidator(e);if(t)throw Mt(t,t.message,Ut.BAD_REQUEST);Ot.trace("dropping custom function file");let r=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return qe.unlinkSync(Re.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Mt(new Error,lo.DROP_FUNCTION,Ut.INTERNAL_SERVER_ERROR,Ot.ERR,o)}}a(T6,"dropCustomFunction");function g6(e){e.project&&(e.project=Re.parse(e.project).name);let t=es.addComponentValidator(e);if(t)throw Mt(t,t.message,Ut.BAD_REQUEST);Ot.trace("adding component");let r=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Re.join(r,n);return qe.mkdirSync(s,{recursive:!0}),qe.copySync(E6,s),`Successfully added project: ${n}`}catch(s){throw Mt(new Error,lo.ADD_FUNCTION,Ut.INTERNAL_SERVER_ERROR,Ot.ERR,s)}}a(g6,"addComponent");function R6(e){e.project&&(e.project=Re.parse(e.project).name);let t=es.dropCustomFunctionProjectValidator(e);if(t)throw Mt(t,t.message,Ut.BAD_REQUEST);Ot.trace("dropping custom function project");let r=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Et.get($e.CONFIG_PARAMS.APPS);if(!o6.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 vu.updateConfigValue($e.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Re.join(r,n);return qe.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Mt(new Error,lo.DROP_FUNCTION_PROJECT,Ut.INTERNAL_SERVER_ERROR,Ot.ERR,i)}}a(R6,"dropCustomFunctionProject");async function A6(e){e.project&&(e.project=Re.parse(e.project).name);let t=es.packageComponentValidator(e);if(t)throw Mt(t,t.message,Ut.BAD_REQUEST);let r=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Ot.trace("packaging component",n);let s;try{s=await qe.realpath(Re.join(r,n))}catch(u){if(u.code!==$e.NODE_ERROR_CODES.ENOENT)throw u;try{s=await qe.realpath(Re.join(Et.get($e.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===$e.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await qe.ensureDir(VU);let i=Re.join(VU,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(Re.join(s,"node_modules"))}),$U.pack(s,o).pipe(qe.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=qe.readFileSync(i,{encoding:"base64"});return await qe.remove(i),{project:n,payload:c}}a(A6,"packageComponent");async function O6(e){e.project&&(e.project=Re.parse(e.project).name);let t=es.deployComponentValidator(e);if(t)throw Mt(t,t.message,Ut.BAD_REQUEST);let r=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(Ot.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 qe.ensureDir(o);let f=d6.from(Buffer.from(s,"base64"));await new Promise((h,p)=>{f.pipe($U.extract(o,{finish:h})).on("error",p)});let E=await qe.readdir(o);E.length===1&&E[0]==="package"&&(await qe.copy(Re.join(o,"package"),o),await qe.remove(Re.join(o,"package")))}if(await vu.addConfig(n,{package:i}),!s){await l6();let f=YU.get(_6.CONFIG_PARAMS.ROOTPATH);o=Re.join(f,"node_modules",n)}if(f6)return;let c=new Map;c.isWorker=!0;let u=(jd(),te(Xd)),_;u.setErrorReporter(f=>_=f);let l=u6(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return Ot.info("Installed component"),`Successfully deployed: ${n}`}a(O6,"deployComponent");async function b6(){let e=vu.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let u=await qe.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=Re.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await qe.stat(d),E={name:Re.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(u){return Ot.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),n=await r(Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{name:Et.get($e.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(Et.get($e.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(jd(),te(Xd)).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(b6,"getComponents");async function N6(e){let t=es.getComponentFileValidator(e);if(t)throw Mt(t,t.message,Ut.BAD_REQUEST);let n=vu.getConfigObj()[e.project]||e.project==="harperdb"?Re.join(YU.get($e.CONFIG_PARAMS.ROOTPATH),"node_modules"):Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await qe.stat(Re.join(n,e.project,e.file));return{message:await qe.readFile(Re.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===$e.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Re.join(e.project,e.file)}'`):i}}a(N6,"getComponentFile");async function y6(e){let t=es.setComponentFileValidator(e);if(t)throw Mt(t,t.message,Ut.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Re.join(Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await qe.ensureFile(n),await qe.outputFile(n,e.payload,r)):await qe.ensureDir(n),"Successfully set component: "+e.file}a(y6,"setComponentFile");async function w6(e){let t=es.dropComponentFileValidator(e);if(t)throw Mt(t,t.message,Ut.BAD_REQUEST);let r=e.file?Re.join(e.project,e.file):e.project,n=Re.join(Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),r);return await qe.pathExists(n)&&await qe.remove(n),vu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(w6,"dropComponent");KU.exports={customFunctionsStatus:h6,getCustomFunctions:m6,getCustomFunction:p6,setCustomFunction:S6,dropCustomFunction:T6,addComponent:g6,dropCustomFunctionProject:R6,packageComponent:A6,deployComponent:O6,getComponents:b6,getComponentFile:N6,setComponentFile:y6,dropComponent:w6}});var xT=T((Ufe,QU)=>{"use strict";var ts=require("joi"),WU=Xe();QU.exports={readTransactionLogValidator:I6,deleteTransactionLogsBeforeValidator:C6};function I6(e){let t=ts.object({schema:ts.string().required(),table:ts.string().required(),from:ts.date().timestamp(),to:ts.date().timestamp(),limit:ts.number().min(1)});return WU.validateBySchema(e,t)}a(I6,"readTransactionLogValidator");function C6(e){let t=ts.object({schema:ts.string().required(),table:ts.string().required(),timestamp:ts.date().timestamp().required()});return WU.validateBySchema(e,t)}a(C6,"deleteTransactionLogsBeforeValidator")});var ef=T((vfe,ZU)=>{"use strict";var FT=U(),Zd=At(),zU=J(),JU=Z(),XU=ps(),{handleHDBError:ga,hdb_errors:D6}=ee(),{HTTP_STATUS_CODES:Ra}=D6,{readTransactionLogValidator:L6,deleteTransactionLogsBeforeValidator:M6}=xT(),jU="This operation relies on clustering and cannot run with it disable.",U6="Logs successfully deleted from transaction log.",P6="All logs successfully deleted from transaction log.";ZU.exports={readTransactionLog:v6,deleteTransactionLogsBefore:B6};async function*v6(e){let t=L6(e);if(t)throw ga(t,t.message,Ra.BAD_REQUEST,void 0,void 0,!0);if(!JU.get(FT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ga(new Error,jU,Ra.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=zU.checkSchemaTableExist(r,n);if(s)throw ga(new Error,s,Ra.NOT_FOUND,void 0,void 0,!0);let i=XU.createNatsTableStreamName(r,n),o=await Zd.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===FT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(v6,"readTransactionLog");async function B6(e){let t=M6(e);if(t)throw ga(t,t.message,Ra.BAD_REQUEST,void 0,void 0,!0);if(!JU.get(FT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ga(new Error,jU,Ra.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=zU.checkSchemaTableExist(r,n);if(i)throw ga(new Error,i,Ra.NOT_FOUND,void 0,void 0,!0);let o=XU.createNatsTableStreamName(r,n),{jsm:c}=await Zd.getNATSReferences(),u=await Zd.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let l=U6,d,f=new Date(u.state.last_ts).getTime();return s>f?(d=u.state.last_seq+1,l=P6):d=(await Zd.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(B6,"deleteTransactionLogsBefore")});var tP=T((Hfe,eP)=>{"use strict";var qT=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}};eP.exports=qT});var nP=T((Ffe,rP)=>{"use strict";var GT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};rP.exports=GT});var VT=T((Gfe,iP)=>{"use strict";var sP=tP(),H6=nP(),{HDB_ERROR_MSGS:x6}=br(),kT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=x6.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 sP(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let u=new H6(c,s[c]);i.push(u)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new sP(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}};iP.exports=kT});var sf=T((Vfe,RP)=>{"use strict";var $T=Zr(),tf=jr(),cn=sd(),xu=Hi(),YT=ki(),F6=iS(),q6=BD(),Fu=en(),rf=ES(),bt=W(),G6=pS(),k6=Rd(),V6=ZS(),$6=Od(),Y6=eT(),K6=tT(),W6=sT(),Q6=oT(),KT=uT(),ys=J(),z6=UM(),WT=ET(),cP=Hd(),an=U(),uP=fU(),J6=ca(),lP=fu(),_P=(Vd(),te(Du)),dP=Ir(),Fr=HT(),X6=require("alasql"),fP=ef(),EP=Qd(),hP=VT(),{handleHDBError:dr,hdb_errors:mP}=ee(),{HDB_ERROR_MSGS:Ft,HTTP_STATUS_CODES:Bu}=mP,k=new Map,pP="delete",di="insert",ws="read",_o="update",Hu="describe",oP=xu.describeSchema.name,aP=xu.describeTable.name,SP={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},j6="catchup",Z6="handleGetJob",e9="handleGetJobsByStartDate",nf={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},t9=[cn.createTable.name,cn.createAttribute.name,cn.dropTable.name,cn.dropAttribute.name],TP={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($T.insert.name,new Q(!1,[di]));k.set($T.update.name,new Q(!1,[_o]));k.set($T.upsert.name,new Q(!1,[di,_o]));k.set(tf.searchByConditions.name,new Q(!1,[ws]));k.set(tf.searchByHash.name,new Q(!1,[ws]));k.set(tf.searchByValue.name,new Q(!1,[ws]));k.set(tf.search.name,new Q(!1,[ws]));k.set(cn.createSchema.name,new Q(!0,[]));k.set(cn.createTable.name,new Q(!0,[]));k.set(cn.createAttribute.name,new Q(!1,[di]));k.set(cn.dropSchema.name,new Q(!0,[]));k.set(cn.dropTable.name,new Q(!0,[]));k.set(cn.dropAttribute.name,new Q(!0,[]));k.set(xu.describeSchema.name,new Q(!1,[ws]));k.set(xu.describeTable.name,new Q(!1,[ws]));k.set(YT.deleteRecord.name,new Q(!1,[pP]));k.set(Fu.addUser.name,new Q(!0,[]));k.set(Fu.alterUser.name,new Q(!0,[]));k.set(Fu.dropUser.name,new Q(!0,[]));k.set(Fu.listUsersExternal.name,new Q(!0,[]));k.set(rf.listRoles.name,new Q(!0,[]));k.set(rf.addRole.name,new Q(!0,[]));k.set(rf.alterRole.name,new Q(!0,[]));k.set(rf.dropRole.name,new Q(!0,[]));k.set(G6.name,new Q(!0,[]));k.set(k6.name,new Q(!0,[]));k.set(V6.name,new Q(!0,[]));k.set($6.name,new Q(!0,[]));k.set(Y6.name,new Q(!0,[]));k.set(K6.name,new Q(!0,[]));k.set(KT.setRoutes.name,new Q(!0,[]));k.set(KT.getRoutes.name,new Q(!0,[]));k.set(KT.deleteRoutes.name,new Q(!0,[]));k.set(dP.setConfiguration.name,new Q(!0,[]));k.set(W6.clusterStatus.name,new Q(!0,[]));k.set(Q6.name,new Q(!0,[]));k.set(WT.getFingerprint.name,new Q(!0,[]));k.set(WT.setLicense.name,new Q(!0,[]));k.set(YT.deleteFilesBefore.name,new Q(!0,[]));k.set(YT.deleteAuditLogsBefore.name,new Q(!0,[]));k.set(cP.restart.name,new Q(!0,[]));k.set(cP.restartService.name,new Q(!0,[]));k.set(F6.name,new Q(!0,[]));k.set(q6.name,new Q(!0,[ws]));k.set(J6.systemInformation.name,new Q(!0,[]));k.set(dP.getConfiguration.name,new Q(!0,[]));k.set(fP.readTransactionLog.name,new Q(!0,[]));k.set(fP.deleteTransactionLogsBefore.name,new Q(!0,[]));k.set(EP.installModules.name,new Q(!0,[]));k.set(EP.auditModules.name,new Q(!0,[]));k.set(lP.createTokens.name,new Q(!1,[]));k.set(lP.refreshOperationToken.name,new Q(!1,[]));k.set(_P.login.name,new Q(!1,[]));k.set(_P.logout.name,new Q(!1,[]));k.set(Fr.customFunctionsStatus.name,new Q(!0,[]));k.set(Fr.getCustomFunctions.name,new Q(!0,[]));k.set(Fr.getComponents.name,new Q(!0,[]));k.set(Fr.getComponentFile.name,new Q(!0,[]));k.set(Fr.setComponentFile.name,new Q(!0,[]));k.set(Fr.dropComponent.name,new Q(!0,[]));k.set(Fr.getCustomFunction.name,new Q(!0,[]));k.set(Fr.setCustomFunction.name,new Q(!0,[]));k.set(Fr.dropCustomFunction.name,new Q(!0,[]));k.set(Fr.addComponent.name,new Q(!0,[]));k.set(Fr.dropCustomFunctionProject.name,new Q(!0,[]));k.set(Fr.packageComponent.name,new Q(!0,[]));k.set(Fr.deployComponent.name,new Q(!0,[]));k.set(WT.getRegistrationInfo.name,new Q(!1,[]));k.set(Fu.userInfo.name,new Q(!1,[]));k.set(xu.describeAll.name,new Q(!1,[]));k.set(Z6,new Q(!1,[]));k.set(e9,new Q(!0,[]));k.set(j6,new Q(!0,[]));k.set(nf.CSV_DATA_LOAD,new Q(!1,[di,_o]));k.set(nf.CSV_URL_LOAD,new Q(!1,[di,_o]));k.set(nf.CSV_FILE_LOAD,new Q(!1,[di,_o]));k.set(nf.IMPORT_FROM_S3,new Q(!1,[di,_o]));k.set(TP.EXPORT_TO_S3,new Q(!0,[]));k.set(TP.EXPORT_LOCAL,new Q(!0,[]));k.set(an.VALID_SQL_OPS_ENUM.DELETE,new Q(!1,[pP]));k.set(an.VALID_SQL_OPS_ENUM.SELECT,new Q(!1,[ws]));k.set(an.VALID_SQL_OPS_ENUM.INSERT,new Q(!1,[di]));k.set(an.VALID_SQL_OPS_ENUM.UPDATE,new Q(!1,[_o]));RP.exports={verifyPerms:n9,verifyPermsAst:r9,verifyBulkLoadAttributePerms:i9};function r9(e,t,r){if(ys.isEmptyOrZeroLength(e))throw bt.info("verify_perms_ast has an empty user parameter"),dr(new Error);if(ys.isEmptyOrZeroLength(t))throw bt.info("verify_perms_ast has an empty user parameter"),dr(new Error);if(ys.isEmptyOrZeroLength(r))throw bt.info("verify_perms_ast has a null operation parameter"),dr(new Error);try{let n=new hP,s=new z6(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw bt.info("No schemas defined in verifyPermsAst(), will not continue."),dr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&SP[r])throw dr(new Error,Ft.DROP_SYSTEM,Bu.FORBIDDEN);if(c&&!u)return null;let _=uP.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof X6.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 l=gP(t,r,o,n);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=s.getAttributesBySchemaTableName(f,d[E]),p=zT(t.role.permission,f,d[E]);QT(h,p,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw dr(n)}}a(r9,"verifyPermsAst");function n9(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw bt.info("null required parameter in verifyPerms"),dr(new Error,Ft.DEFAULT_INVALID_REQUEST,Bu.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 hP;if(ys.isEmptyOrZeroLength(e.hdb_user.role)||ys.isEmptyOrZeroLength(e.hdb_user.role.permission))return bt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ft.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(an.SYSTEM_SCHEMA_NAME)||s===an.SYSTEM_SCHEMA_NAME;if(l&&SP[r])throw dr(new Error,Ft.DROP_SYSTEM,Bu.FORBIDDEN);if(u&&!l||_===!0&&(r===cn.createSchema.name||r===cn.dropSchema.name))return null;if(t9.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=uP.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===oP||r===aP){if(s===an.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ft.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===oP&&(!d[s]||!d[s][Hu]))return c.handleInvalidItem(Ft.SCHEMA_NOT_FOUND(s));if(r===aP&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][Hu]))return c.handleInvalidItem(Ft.TABLE_NOT_FOUND(s,i))}}let f=gP(e.hdb_user,r,o,c,n);if(f)return f;if(k.get(r)&&k.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&an.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[s].tables[i];S[an.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(g=>g[an.PERMS_CRUD_ENUM.READ]).forEach(g=>{p.push(g.attribute_name)}):p=global.hdb_schema[s][i].attributes.map(O=>O.attribute),e.get_attributes=p)}let E=s9(e),h=zT(e.hdb_user.role.permission,s,i);return QT(E,h,r,i,s,c,n),c.getPermsResponse()}a(n9,"verifyPerms");function gP(e,t,r,n,s){if(ys.arrayHasEmptyValues([e,t,r]))throw bt.info("hasPermissions has an invalid parameter"),dr(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 bt.info(`operation ${t} not found.`),dr(new Error,Ft.OP_NOT_FOUND(t),Bu.BAD_REQUEST);if(k.get(t)&&k.get(t).requires_su)return bt.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Ft.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Hu]===!1){n.addInvalidItem(Ft.SCHEMA_NOT_FOUND(u));continue}}catch{n.addInvalidItem(Ft.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[Hu]===!1)n.addInvalidItem(Ft.TABLE_NOT_FOUND(u,l));else try{let f=[],E=k.get(t).perms;!ys.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)&&(bt.info(`Required ${p} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&n.addUnauthorizedTable(u,l,f)}catch(f){let E=Ft.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw bt.error(E),bt.error(f),dr(mP.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(gP,"hasPermissions");function QT(e,t,r,n,s,i,o){if(!e||!t)throw bt.info("no attributes specified in checkAttributePerms."),dr(new Error);let c=k.get(r).perms;if(!c||c==="")throw bt.info(`no permissions found for ${r} in checkAttributePerms().`),dr(new Error);if(ys.isEmptyOrZeroLength(t))return bt.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[Hu]===!1){i.addInvalidItem(Ft.ATTR_NOT_FOUND(s,n,l),s,n);continue}if(c)for(let f of c){if(an.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==ws)throw dr(new Error,Ft.SYSTEM_TIMESTAMP_PERMS_ERR,Bu.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Ft.ATTR_NOT_FOUND(s,n,l),s,n)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,s,n,u)}a(QT,"checkAttributePerms");function s9(e){let t=new Set;try{if(e.action)return t;if(e.operation===an.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){bt.info(r)}return t}a(s9,"getRecordAttributes");function zT(e,t,r){let n=new Map;if(ys.isEmpty(e))return bt.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{bt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(zT,"getAttributePermissions");function i9(e,t,r,n,s,i,o){let c=new Set(i),u=zT(e,n,s);QT(c,u,t,s,n,o,r)}a(i9,"verifyBulkLoadAttributePerms")});var af=T((Yfe,yP)=>{"use strict";yP.exports={evaluateSQL:S9,processAST:NP,convertSQLToAST:bP,checkASTPermissions:OP};var o9=Zr(),AP=require("util"),a9=AP.callbackify(o9.insert),c9=jr().search,u9=IC().update,l9=AP.callbackify(u9),_9=DC().convertDelete,fi=require("alasql"),d9=sf(),of=W(),f9=Y_(),E9=J(),qu=U(),{hdb_errors:h9,handleHDBError:JT}=ee(),{HTTP_STATUS_CODES:XT}=h9;f9(fi);var m9=403,p9="There was a problem performing this insert. Please check the logs and try again.",jT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function S9(e,t){let r=e.parsed_sql_object;if(!r){r=bP(e.sql);let n,s=r.ast.statements[0];if(s instanceof fi.yy.Insert?n=s.into.databaseid:s instanceof fi.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof fi.yy.Update||s instanceof fi.yy.Delete?n=s.table.databaseid:of.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof fi.yy.Select)&&E9.isEmptyOrZeroLength(n))return t("No schema specified",null)}NP(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(S9,"evaluateSQL");function OP(e,t){let r;try{r=d9.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(OP,"checkASTPermissions");function bP(e){let t=new jT;if(!e)throw JT(new Error,"The 'sql' parameter is missing from the request body",XT.BAD_REQUEST);try{let r=e.trim(),n=fi.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
17
- `);throw n[1]?JT(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,XT.BAD_REQUEST):JT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",XT.BAD_REQUEST)}return t}a(bP,"convertSQLToAST");function NP(e,t,r){try{let n=T9;if(!e.bypass_auth&&!t.permissions_checked){let i=OP(e,t);if(i&&i.length>0)return r(m9,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case qu.VALID_SQL_OPS_ENUM.SELECT:n=c9,s=t.ast.statements[0];break;case qu.VALID_SQL_OPS_ENUM.INSERT:n=g9;break;case qu.VALID_SQL_OPS_ENUM.UPDATE:n=l9;break;case qu.VALID_SQL_OPS_ENUM.DELETE:n=_9;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(NP,"processAST");function T9(e,t){of.info(e),t("unknown sql statement")}a(T9,"nullFunction");function g9({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=R9(i,e.values)}catch(o){return r(o)}a9(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){of.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(g9,"convertInsert");function R9(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]]=fi.compile(`SELECT ${s.toString()} AS [${qu.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw of.error(r),new Error(p9)}}a(R9,"createDataObjects")});var ZT=T((Wfe,IP)=>{"use strict";var{S3:A9,GetObjectCommand:O9}=require("@aws-sdk/client-s3");IP.exports={getFileStreamFromS3:b9,getS3AuthObj:wP};async function b9(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await wP(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new O9(r))).Body}a(b9,"getFileStreamFromS3");function wP(e,t,r){return new A9({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(wP,"getS3AuthObj")});var cf=T((zfe,HP)=>{"use strict";var tg=jr(),N9=af(),y9=ZT(),{AsyncParser:w9,Transform:I9}=require("json2csv"),ku=require("stream"),qr=J(),eg=require("fs-extra"),C9=require("path"),un=W(),{promisify:LP}=require("util"),Gu=J(),{handleHDBError:ht,hdb_errors:D9}=ee(),{HDB_ERROR_MSGS:fr,HTTP_STATUS_CODES:mt}=D9,{streamAsJSON:L9}=(yh(),te(lb)),{Upload:M9}=require("@aws-sdk/lib-storage"),CP=["search_by_value","search_by_hash","sql","search_by_conditions"],DP=["json","csv"],MP="json",UP="csv",U9="Successfully exported JSON locally.",P9="Successfully exported CSV locally.",v9=1e3,B9=tg.searchByHash,H9=tg.searchByValue,x9=LP(N9.evaluateSQL),F9=LP(ku.finished);HP.exports={export_to_s3:V9,export_local:q9,toCsvStream:PP};async function q9(e){un.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=vP(e);if(!qr.isEmpty(t))throw un.error(t),ht(new Error,t,mt.BAD_REQUEST,void 0,void 0,!0);if(qr.isEmpty(e.path))throw un.error(fr.MISSING_VALUE("path")),ht(new Error,fr.MISSING_VALUE("path"),mt.BAD_REQUEST,void 0,void 0,!0);let r=(qr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(C9.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=qr.buildFolderPath(e.path,r);await G9(e.path);let s=await BP(e);return await k9(n,e.format,s)}a(q9,"export_local");async function G9(e){if(un.trace("in confirmPath"),qr.isEmptyOrZeroLength(e))throw ht(new Error,`Invalid path: ${e}`,mt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await eg.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,un.error(n),ht(new Error,n,mt.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 un.error(r),ht(new Error,r,mt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(G9,"confirmPath");async function k9(e,t,r){if(un.trace("in saveToLocal"),Gu.isEmptyOrZeroLength(e))throw ht(new Error,fr.INVALID_VALUE("file_path"),mt.BAD_REQUEST,void 0,void 0,!0);if(Gu.isEmptyOrZeroLength(t))throw ht(new Error,fr.INVALID_VALUE("Source format"),mt.BAD_REQUEST,void 0,void 0,!0);if(Gu.isEmpty(r))throw ht(new Error,fr.NOT_FOUND("Data"),mt.BAD_REQUEST,void 0,void 0,!0);if(t===MP){let n=eg.createWriteStream(e);return L9(r).pipe(n),await F9(n),{message:U9,path:e}}else if(t===UP){let n=eg.createWriteStream(e),s=ku.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(l=>({label:l,value:l})));let c={objectMode:!0};return await new w9(i,c).fromInput(s).toOutput(n).promise(!1),{message:P9,path:e}}throw ht(new Error,fr.INVALID_VALUE("format"),mt.BAD_REQUEST)}a(k9,"saveToLocal");async function V9(e){if(!e.s3||Object.keys(e.s3).length===0)throw ht(new Error,fr.MISSING_VALUE("S3 object"),mt.BAD_REQUEST);if(qr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw ht(new Error,fr.MISSING_VALUE("aws_access_key_id"),mt.BAD_REQUEST);if(qr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw ht(new Error,fr.MISSING_VALUE("aws_secret_access_key"),mt.BAD_REQUEST);if(qr.isEmptyOrZeroLength(e.s3.bucket))throw ht(new Error,fr.MISSING_VALUE("bucket"),mt.BAD_REQUEST);if(qr.isEmptyOrZeroLength(e.s3.key))throw ht(new Error,fr.MISSING_VALUE("key"),mt.BAD_REQUEST);if(qr.isEmptyOrZeroLength(e.s3.region))throw ht(new Error,fr.MISSING_VALUE("region"),mt.BAD_REQUEST);let t=vP(e);if(!qr.isEmpty(t))throw ht(new Error,t,mt.BAD_REQUEST);un.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await BP(e)}catch(u){throw un.error(u),u}let n,s=await y9.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new ku.PassThrough;if(e.format===UP){i=e.s3.key+".csv";let u=PP(r,r.getColumns?.());u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===MP){i=e.s3.key+".json";let u=new ku.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%v9===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw ht(new Error,fr.INVALID_VALUE("format"),mt.BAD_REQUEST);return new M9({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(V9,"export_to_s3");function PP(e,t){let r=ku.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 I9(n,s);return r.pipe(i)}a(PP,"toCsvStream");function vP(e){if(un.trace("in exportCoreValidation"),qr.isEmpty(e.format))return"format missing";if(DP.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${DP.join(", ")}`;let t=e.search_operation.operation;if(qr.isEmpty(t))return"search_operation.operation missing";if(CP.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${CP.join(", ")}`}a(vP,"exportCoreValidation");async function BP(e){un.trace("in getRecords");let t,r;if(Gu.isEmpty(e.search_operation)||Gu.isEmptyOrZeroLength(e.search_operation.operation))throw ht(new Error,fr.INVALID_VALUE("Search operation"),mt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=H9;break;case"search_by_hash":t=B9;break;case"search_by_conditions":t=tg.searchByConditions;break;case"sql":t=x9;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,un.error(r),ht(new Error,r,mt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(BP,"getRecords")});var YP={};ke(YP,{contentTypes:()=>og,findBestSerializer:()=>lf,getDeserializer:()=>Eo,registerContentHandlers:()=>ag,serialize:()=>_f,serializeMessage:()=>_i});function $9(e){try{return e?.[0]===123?ig(e):e}catch{return e}}function ag(e){e.register(K9,{serializers:[{regex:/^application\/json$/,serializer:hc},{regex:/^application\/cbor$/,serializer:function(t){return new fo.EncoderStream($u).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?uf.Readable.from((0,rs.encodeIter)(t,$u)):(0,rs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,rg.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,rs.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,fo.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function lf(e){let r=(e.headers.asObject||e.headers).accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=Pt.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(Pt.keys()).join(", "))}};n=Pt.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function _f(e,t,r){let n=FP&&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=lf(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,Is.createBrotliCompress)({params:{[Is.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Is.constants.BROTLI_MODE_TEXT:Is.constants.BROTLI_MODE_GENERIC,[Is.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>FP?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Is.brotliCompress)(s,(c,u)=>{c?o(c):i(u)}))):s}function _i(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return Vu(e);let r=t.serialize;if(r)return r(e);let n=lf(t);return r=t.serialize=n.serializer.serialize,r(e)}function W9(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 Eo(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Pt.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Pt.get(e)?.deserialize||qP(e,n);return o=>W9(o).then(i)}return e&&Pt.get(e)?.deserialize||qP(e,n)}function qP(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 ig(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function Q9(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 rg,rs,fo,Is,uf,GP,ng,sg,kP,VP,Vu,ig,$u,Pt,og,xP,$P,Y9,K9,FP,ha=Oe(()=>{yh();rg=x(cf()),rs=require("msgpackr"),fo=require("cbor-x"),Is=require("zlib"),uf=require("stream");jt();GP=require("../../index"),ng=x(Z()),sg=x(U()),kP=x(require("yaml")),VP=ng.default.get(sg.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,Vu=VP?Li:JSON.stringify,ig=VP?Nh:JSON.parse,$u={useRecords:!1,useToJSON:!0},Pt=new Map,og=Pt;je.contentTypes=og;(0,GP._assignPackageExport)("contentTypes",og);Pt.set("application/json",{serializeStream:hc,serialize:Vu,deserialize:ig,q:.8});xP=new fo.Encoder($u);Pt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new fo.EncoderStream($u).end(e)},serialize:xP.encode,deserialize:xP.decode,q:1});Pt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?uf.Readable.from((0,rs.encodeIter)(e,$u)):(0,rs.pack)(e)},serialize:rs.pack,deserialize:rs.unpack,q:.9});Pt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,rg.toCsvStream)(e,e?.getColumns?.())},q:.1});Pt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Pt.set("text/yaml",{serialize(e){return kP.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Pt.set("text/event-stream",{serializeStream:function(e){return uf.Readable.from(Q9(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
18
- `),e.data){let r=e.data;typeof r=="object"&&(r=Vu(r)),t+="data: "+r+`
15
+ `,""):null}catch(f){f.stderr?i[u].npm_error=xM(f.stderr):i[u].npm_error=f.message;continue}try{i[u].npm_output=JSON.parse(l)}catch{i[u].npm_output=l}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return ga.info(`finished installModules with response ${i}`),i}a(s6,"installModules");function xM(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
16
+ `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(xM,"parseNPMStdErr");async function i6(e){ga.info(`starting auditModules for request: ${e}`);let t=qM(e);if(t)throw Sa(t,t.message,Ta.BAD_REQUEST);let{projects:r}=e;await Qd(),await FM(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Wd.join(PT,o);n[o]={npm_output:null,npm_error:null};try{let u=await Hu("npm audit --json",c);n[o].npm_output=JSON.parse(u)}catch(u){n[o].npm_error=xM(u.stderr)}}return ga.info(`finished auditModules with response ${n}`),n}a(i6,"auditModules");async function Qd(){try{return await Hu("npm -v"),!0}catch{throw Sa(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Ta.BAD_REQUEST,void 0,void 0,!0)}}a(Qd,"checkNPMInstalled");async function FM(e){if(!Array.isArray(e)||e.length===0)throw Sa(new Error,"projects argument must be an array with at least 1 element",Ta.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=Wd.join(PT,i.toString());if(!await vM.pathExists(o)){t.push(i);continue}let u=Wd.join(o,"package.json");await vM.pathExists(u)||r.push(i)}if(t.length>0)throw Sa(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Ta.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Sa(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Ta.BAD_REQUEST,void 0,void 0,!0)}a(FM,"checkProjectPaths");function qM(e){let t=Kd.object({projects:Kd.array().min(1).items(Kd.string()).required(),dry_run:Kd.boolean().default(!1)});return Z8.validateBySchema(e,t)}a(qM,"modulesValidator")});var BT=T((Mfe,KM)=>{"use strict";var Ra=require("fs-extra"),vT=require("path"),Jd=W(),kM=J(),Xd=M(),YM=te(),o6=wr();KM.exports=a6;async function a6(){let e=c6(),t=YM.get(Xd.CONFIG_PARAMS.ROOTPATH),r=vT.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Xd.PACKAGE_ROOT}},s=vT.join(t,"node_modules");await Ra.ensureDir(s);let i,o=!0,c=!1;try{i=await Ra.readJson(r)}catch(u){if(kM.isEmptyOrZeroLength(e))return;if(u.code!==Xd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!kM.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await VM(_);n.dependencies[u]=l+_}if(!o){Jd.notify("Installing components"),await $M(r,n,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await VM(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)n.dependencies[u]===void 0&&(Jd.notify("Removing component",u),c=!0);c&&(Jd.notify("Updating components."),await $M(r,n,i))}a(a6,"installComponents");function c6(){let e=o6.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(c6,"getComponentsConfig");async function VM(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":vT.extname(e)||await Ra.pathExists(e)?"file:":"github:"}a(VM,"getPkgPrefix");async function $M(e,t,r){Jd.trace("npm installing components package.json",t),await Ra.writeFile(e,JSON.stringify(t,null," "));try{await zd().installAllRootModules(YM.get(Xd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await Ra.writeFile(e,JSON.stringify(r,null," ")):await Ra.unlink(e),n}}a($M,"installPackages")});var FT=T((Bfe,JM)=>{"use strict";var Ge=require("fs-extra"),HT=require("fast-glob"),Se=require("path"),QM=require("tar-fs"),vfe=require("uuid").v4,xT=require("normalize-path"),ts=PM(),Ot=W(),Ke=M(),ht=te(),xu=wr(),u6=J(),{PACKAGE_ROOT:l6}=M(),{handleHDBError:Ut,hdb_errors:_6}=re(),{basename:d6}=require("path"),f6=BT(),zM=te(),E6=M(),{Readable:h6}=require("stream"),{isMainThread:m6}=require("worker_threads"),{HDB_ERROR_MSGS:Eo,HTTP_STATUS_CODES:Mt}=_6,p6=Se.join(l6,"application-template"),WM=Se.join(ht.get(Ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function S6(){Ot.trace("getting custom api status");let e={};try{e={port:ht.get(Ke.CONFIG_PARAMS.HTTP_PORT),directory:ht.get(Ke.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Ut(new Error,Eo.FUNCTION_STATUS,Mt.INTERNAL_SERVER_ERROR,Ot.ERR,t)}return e}a(S6,"customFunctionsStatus");function T6(){Ot.trace("getting custom api endpoints");let e={},t=ht.get(Ke.CONFIG_PARAMS.COMPONENTSROOT);try{HT.sync(xT(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:HT.sync(xT(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:HT.sync(xT(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Ut(new Error,Eo.GET_FUNCTIONS,Mt.INTERNAL_SERVER_ERROR,Ot.ERR,r)}return e}a(T6,"getCustomFunctions");function g6(e){e.project&&(e.project=Se.parse(e.project).name),e.file&&(e.file=Se.parse(e.file).name);let t=ts.getDropCustomFunctionValidator(e);if(t)throw Ut(t,t.message,Mt.BAD_REQUEST);Ot.trace("getting custom api endpoint file content");let r=ht.get(Ke.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=Se.join(r,n,s,i+".js");try{return Ge.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ut(new Error,Eo.GET_FUNCTION,Mt.INTERNAL_SERVER_ERROR,Ot.ERR,c)}}a(g6,"getCustomFunction");function R6(e){e.project&&(e.project=Se.parse(e.project).name),e.file&&(e.file=Se.parse(e.file).name);let t=ts.setCustomFunctionValidator(e);if(t)throw Ut(t,t.message,Mt.BAD_REQUEST);Ot.trace("setting custom function file content");let r=ht.get(Ke.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return Ge.outputFileSync(Se.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Ut(new Error,Eo.SET_FUNCTION,Mt.INTERNAL_SERVER_ERROR,Ot.ERR,c)}}a(R6,"setCustomFunction");function A6(e){e.project&&(e.project=Se.parse(e.project).name),e.file&&(e.file=Se.parse(e.file).name);let t=ts.getDropCustomFunctionValidator(e);if(t)throw Ut(t,t.message,Mt.BAD_REQUEST);Ot.trace("dropping custom function file");let r=ht.get(Ke.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return Ge.unlinkSync(Se.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Ut(new Error,Eo.DROP_FUNCTION,Mt.INTERNAL_SERVER_ERROR,Ot.ERR,o)}}a(A6,"dropCustomFunction");function O6(e){e.project&&(e.project=Se.parse(e.project).name);let t=ts.addComponentValidator(e);if(t)throw Ut(t,t.message,Mt.BAD_REQUEST);Ot.trace("adding component");let r=ht.get(Ke.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Se.join(r,n);return Ge.mkdirSync(s,{recursive:!0}),Ge.copySync(p6,s),`Successfully added project: ${n}`}catch(s){throw Ut(new Error,Eo.ADD_FUNCTION,Mt.INTERNAL_SERVER_ERROR,Ot.ERR,s)}}a(O6,"addComponent");function b6(e){e.project&&(e.project=Se.parse(e.project).name);let t=ts.dropCustomFunctionProjectValidator(e);if(t)throw Ut(t,t.message,Mt.BAD_REQUEST);Ot.trace("dropping custom function project");let r=ht.get(Ke.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=ht.get(Ke.CONFIG_PARAMS.APPS);if(!u6.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 xu.updateConfigValue(Ke.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Se.join(r,n);return Ge.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Ut(new Error,Eo.DROP_FUNCTION_PROJECT,Mt.INTERNAL_SERVER_ERROR,Ot.ERR,i)}}a(b6,"dropCustomFunctionProject");async function N6(e){e.project&&(e.project=Se.parse(e.project).name);let t=ts.packageComponentValidator(e);if(t)throw Ut(t,t.message,Mt.BAD_REQUEST);let r=ht.get(Ke.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Ot.trace("packaging component",n);let s;try{s=await Ge.realpath(Se.join(r,n))}catch(u){if(u.code!==Ke.NODE_ERROR_CODES.ENOENT)throw u;try{s=await Ge.realpath(Se.join(ht.get(Ke.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===Ke.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await Ge.ensureDir(WM);let i=Se.join(WM,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(Se.join(s,"node_modules"))}),QM.pack(s,o).pipe(Ge.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Ge.readFileSync(i,{encoding:"base64"});return await Ge.remove(i),{project:n,payload:c}}a(N6,"packageComponent");async function y6(e){e.project&&(e.project=Se.parse(e.project).name);let t=ts.deployComponentValidator(e);if(t)throw Ut(t,t.message,Mt.BAD_REQUEST);let r=ht.get(Ke.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(Ot.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=Se.join(r,n),i="file:"+o,await Ge.ensureDir(o);let f=h6.from(Buffer.from(s,"base64"));await new Promise((h,p)=>{f.pipe(QM.extract(o,{finish:h})).on("error",p)});let E=await Ge.readdir(o);E.length===1&&E[0]==="package"&&(await Ge.copy(Se.join(o,"package"),o),await Ge.remove(Se.join(o,"package")))}if(await xu.addConfig(n,{package:i}),!s){await f6();let f=zM.get(E6.CONFIG_PARAMS.ROOTPATH);o=Se.join(f,"node_modules",n)}if(m6)return;let c=new Map;c.isWorker=!0;let u=(Zd(),ne(jd)),_;u.setErrorReporter(f=>_=f);let l=d6(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return Ot.info("Installed component"),`Successfully deployed: ${n}`}a(y6,"deployComponent");async function w6(){let e=xu.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let u=await Ge.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=Se.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Ge.stat(d),E={name:Se.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(u){return Ot.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),n=await r(ht.get(Ke.CONFIG_PARAMS.COMPONENTSROOT),{name:ht.get(Ke.CONFIG_PARAMS.COMPONENTSROOT).split(Se.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(Se.join(ht.get(Ke.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(Zd(),ne(jd)).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(w6,"getComponents");async function I6(e){let t=ts.getComponentFileValidator(e);if(t)throw Ut(t,t.message,Mt.BAD_REQUEST);let n=xu.getConfigObj()[e.project]||e.project==="harperdb"?Se.join(zM.get(Ke.CONFIG_PARAMS.ROOTPATH),"node_modules"):ht.get(Ke.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ge.stat(Se.join(n,e.project,e.file));return{message:await Ge.readFile(Se.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Ke.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Se.join(e.project,e.file)}'`):i}}a(I6,"getComponentFile");async function C6(e){let t=ts.setComponentFileValidator(e);if(t)throw Ut(t,t.message,Mt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Se.join(ht.get(Ke.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Ge.ensureFile(n),await Ge.outputFile(n,e.payload,r)):await Ge.ensureDir(n),"Successfully set component: "+e.file}a(C6,"setComponentFile");async function D6(e){let t=ts.dropComponentFileValidator(e);if(t)throw Ut(t,t.message,Mt.BAD_REQUEST);let r=e.file?Se.join(e.project,e.file):e.project,n=Se.join(ht.get(Ke.CONFIG_PARAMS.COMPONENTSROOT),r);return await Ge.pathExists(n)&&await Ge.remove(n),xu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(D6,"dropComponent");JM.exports={customFunctionsStatus:S6,getCustomFunctions:T6,getCustomFunction:g6,setCustomFunction:R6,dropCustomFunction:A6,addComponent:O6,dropCustomFunctionProject:b6,packageComponent:N6,deployComponent:y6,getComponents:w6,getComponentFile:I6,setComponentFile:C6,dropComponent:D6}});var qT=T((xfe,jM)=>{"use strict";var rs=require("joi"),XM=je();jM.exports={readTransactionLogValidator:L6,deleteTransactionLogsBeforeValidator:U6};function L6(e){let t=rs.object({schema:rs.string().required(),table:rs.string().required(),from:rs.date().timestamp(),to:rs.date().timestamp(),limit:rs.number().min(1)});return XM.validateBySchema(e,t)}a(L6,"readTransactionLogValidator");function U6(e){let t=rs.object({schema:rs.string().required(),table:rs.string().required(),timestamp:rs.date().timestamp().required()});return XM.validateBySchema(e,t)}a(U6,"deleteTransactionLogsBeforeValidator")});var tf=T((qfe,nP)=>{"use strict";var GT=M(),ef=At(),ZM=J(),eP=te(),tP=Ss(),{handleHDBError:Aa,hdb_errors:M6}=re(),{HTTP_STATUS_CODES:Oa}=M6,{readTransactionLogValidator:P6,deleteTransactionLogsBeforeValidator:v6}=qT(),rP="This operation relies on clustering and cannot run with it disable.",B6="Logs successfully deleted from transaction log.",H6="All logs successfully deleted from transaction log.";nP.exports={readTransactionLog:x6,deleteTransactionLogsBefore:F6};async function*x6(e){let t=P6(e);if(t)throw Aa(t,t.message,Oa.BAD_REQUEST,void 0,void 0,!0);if(!eP.get(GT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Aa(new Error,rP,Oa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=ZM.checkSchemaTableExist(r,n);if(s)throw Aa(new Error,s,Oa.NOT_FOUND,void 0,void 0,!0);let i=tP.createNatsTableStreamName(r,n),o=await ef.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===GT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(x6,"readTransactionLog");async function F6(e){let t=v6(e);if(t)throw Aa(t,t.message,Oa.BAD_REQUEST,void 0,void 0,!0);if(!eP.get(GT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Aa(new Error,rP,Oa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=ZM.checkSchemaTableExist(r,n);if(i)throw Aa(new Error,i,Oa.NOT_FOUND,void 0,void 0,!0);let o=tP.createNatsTableStreamName(r,n),{jsm:c}=await ef.getNATSReferences(),u=await ef.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let l=B6,d,f=new Date(u.state.last_ts).getTime();return s>f?(d=u.state.last_seq+1,l=H6):d=(await ef.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(F6,"deleteTransactionLogsBefore")});var iP=T((kfe,sP)=>{"use strict";var kT=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}};sP.exports=kT});var aP=T(($fe,oP)=>{"use strict";var VT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};oP.exports=VT});var YT=T((Kfe,uP)=>{"use strict";var cP=iP(),q6=aP(),{HDB_ERROR_MSGS:G6}=Or(),$T=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=G6.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 cP(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let u=new q6(c,s[c]);i.push(u)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new cP(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}};uP.exports=$T});var of=T((Qfe,NP)=>{"use strict";var KT=en(),rf=Zr(),un=od(),Gu=qi(),WT=Yi(),k6=oS(),V6=qD(),ku=tn(),nf=hS(),bt=W(),$6=SS(),Y6=Od(),K6=eT(),W6=Nd(),Q6=tT(),z6=rT(),J6=iT(),X6=aT(),QT=lT(),ws=J(),j6=HU(),zT=hT(),dP=Fd(),cn=M(),fP=pM(),Z6=la(),EP=hu(),hP=($d(),ne(Mu)),mP=wr(),xr=FT(),e9=require("alasql"),pP=tf(),SP=zd(),TP=YT(),{handleHDBError:hr,hdb_errors:gP}=re(),{HDB_ERROR_MSGS:Gt,HTTP_STATUS_CODES:Fu}=gP,k=new Map,RP="delete",fi="insert",Is="read",ho="update",qu="describe",lP=Gu.describeSchema.name,_P=Gu.describeTable.name,AP={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},t9="catchup",r9="handleGetJob",n9="handleGetJobsByStartDate",sf={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},s9=[un.createTable.name,un.createAttribute.name,un.dropTable.name,un.dropAttribute.name],OP={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(KT.insert.name,new Q(!1,[fi]));k.set(KT.update.name,new Q(!1,[ho]));k.set(KT.upsert.name,new Q(!1,[fi,ho]));k.set(rf.searchByConditions.name,new Q(!1,[Is]));k.set(rf.searchByHash.name,new Q(!1,[Is]));k.set(rf.searchByValue.name,new Q(!1,[Is]));k.set(rf.search.name,new Q(!1,[Is]));k.set(un.createSchema.name,new Q(!0,[]));k.set(un.createTable.name,new Q(!0,[]));k.set(un.createAttribute.name,new Q(!1,[fi]));k.set(un.dropSchema.name,new Q(!0,[]));k.set(un.dropTable.name,new Q(!0,[]));k.set(un.dropAttribute.name,new Q(!0,[]));k.set(Gu.describeSchema.name,new Q(!1,[Is]));k.set(Gu.describeTable.name,new Q(!1,[Is]));k.set(WT.deleteRecord.name,new Q(!1,[RP]));k.set(ku.addUser.name,new Q(!0,[]));k.set(ku.alterUser.name,new Q(!0,[]));k.set(ku.dropUser.name,new Q(!0,[]));k.set(ku.listUsersExternal.name,new Q(!0,[]));k.set(nf.listRoles.name,new Q(!0,[]));k.set(nf.addRole.name,new Q(!0,[]));k.set(nf.alterRole.name,new Q(!0,[]));k.set(nf.dropRole.name,new Q(!0,[]));k.set($6.name,new Q(!0,[]));k.set(Y6.name,new Q(!0,[]));k.set(K6.name,new Q(!0,[]));k.set(W6.name,new Q(!0,[]));k.set(Q6.name,new Q(!0,[]));k.set(z6.name,new Q(!0,[]));k.set(QT.setRoutes.name,new Q(!0,[]));k.set(QT.getRoutes.name,new Q(!0,[]));k.set(QT.deleteRoutes.name,new Q(!0,[]));k.set(mP.setConfiguration.name,new Q(!0,[]));k.set(J6.clusterStatus.name,new Q(!0,[]));k.set(X6.name,new Q(!0,[]));k.set(zT.getFingerprint.name,new Q(!0,[]));k.set(zT.setLicense.name,new Q(!0,[]));k.set(WT.deleteFilesBefore.name,new Q(!0,[]));k.set(WT.deleteAuditLogsBefore.name,new Q(!0,[]));k.set(dP.restart.name,new Q(!0,[]));k.set(dP.restartService.name,new Q(!0,[]));k.set(k6.name,new Q(!0,[]));k.set(V6.name,new Q(!0,[Is]));k.set(Z6.systemInformation.name,new Q(!0,[]));k.set(mP.getConfiguration.name,new Q(!0,[]));k.set(pP.readTransactionLog.name,new Q(!0,[]));k.set(pP.deleteTransactionLogsBefore.name,new Q(!0,[]));k.set(SP.installModules.name,new Q(!0,[]));k.set(SP.auditModules.name,new Q(!0,[]));k.set(EP.createTokens.name,new Q(!1,[]));k.set(EP.refreshOperationToken.name,new Q(!1,[]));k.set(hP.login.name,new Q(!1,[]));k.set(hP.logout.name,new Q(!1,[]));k.set(xr.customFunctionsStatus.name,new Q(!0,[]));k.set(xr.getCustomFunctions.name,new Q(!0,[]));k.set(xr.getComponents.name,new Q(!0,[]));k.set(xr.getComponentFile.name,new Q(!0,[]));k.set(xr.setComponentFile.name,new Q(!0,[]));k.set(xr.dropComponent.name,new Q(!0,[]));k.set(xr.getCustomFunction.name,new Q(!0,[]));k.set(xr.setCustomFunction.name,new Q(!0,[]));k.set(xr.dropCustomFunction.name,new Q(!0,[]));k.set(xr.addComponent.name,new Q(!0,[]));k.set(xr.dropCustomFunctionProject.name,new Q(!0,[]));k.set(xr.packageComponent.name,new Q(!0,[]));k.set(xr.deployComponent.name,new Q(!0,[]));k.set(zT.getRegistrationInfo.name,new Q(!1,[]));k.set(ku.userInfo.name,new Q(!1,[]));k.set(Gu.describeAll.name,new Q(!1,[]));k.set(r9,new Q(!1,[]));k.set(n9,new Q(!0,[]));k.set(t9,new Q(!0,[]));k.set(sf.CSV_DATA_LOAD,new Q(!1,[fi,ho]));k.set(sf.CSV_URL_LOAD,new Q(!1,[fi,ho]));k.set(sf.CSV_FILE_LOAD,new Q(!1,[fi,ho]));k.set(sf.IMPORT_FROM_S3,new Q(!1,[fi,ho]));k.set(OP.EXPORT_TO_S3,new Q(!0,[]));k.set(OP.EXPORT_LOCAL,new Q(!0,[]));k.set(cn.VALID_SQL_OPS_ENUM.DELETE,new Q(!1,[RP]));k.set(cn.VALID_SQL_OPS_ENUM.SELECT,new Q(!1,[Is]));k.set(cn.VALID_SQL_OPS_ENUM.INSERT,new Q(!1,[fi]));k.set(cn.VALID_SQL_OPS_ENUM.UPDATE,new Q(!1,[ho]));NP.exports={verifyPerms:o9,verifyPermsAst:i9,verifyBulkLoadAttributePerms:c9};function i9(e,t,r){if(ws.isEmptyOrZeroLength(e))throw bt.info("verify_perms_ast has an empty user parameter"),hr(new Error);if(ws.isEmptyOrZeroLength(t))throw bt.info("verify_perms_ast has an empty user parameter"),hr(new Error);if(ws.isEmptyOrZeroLength(r))throw bt.info("verify_perms_ast has a null operation parameter"),hr(new Error);try{let n=new TP,s=new j6(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw bt.info("No schemas defined in verifyPermsAst(), will not continue."),hr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&AP[r])throw hr(new Error,Gt.DROP_SYSTEM,Fu.FORBIDDEN);if(c&&!u)return null;let _=fP.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof e9.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 l=bP(t,r,o,n);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=s.getAttributesBySchemaTableName(f,d[E]),p=XT(t.role.permission,f,d[E]);JT(h,p,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw hr(n)}}a(i9,"verifyPermsAst");function o9(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw bt.info("null required parameter in verifyPerms"),hr(new Error,Gt.DEFAULT_INVALID_REQUEST,Fu.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 TP;if(ws.isEmptyOrZeroLength(e.hdb_user.role)||ws.isEmptyOrZeroLength(e.hdb_user.role.permission))return bt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Gt.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(cn.SYSTEM_SCHEMA_NAME)||s===cn.SYSTEM_SCHEMA_NAME;if(l&&AP[r])throw hr(new Error,Gt.DROP_SYSTEM,Fu.FORBIDDEN);if(u&&!l||_===!0&&(r===un.createSchema.name||r===un.dropSchema.name))return null;if(s9.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=fP.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===lP||r===_P){if(s===cn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Gt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===lP&&(!d[s]||!d[s][qu]))return c.handleInvalidItem(Gt.SCHEMA_NOT_FOUND(s));if(r===_P&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][qu]))return c.handleInvalidItem(Gt.TABLE_NOT_FOUND(s,i))}}let f=bP(e.hdb_user,r,o,c,n);if(f)return f;if(k.get(r)&&k.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&cn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[s].tables[i];S[cn.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(R=>R[cn.PERMS_CRUD_ENUM.READ]).forEach(R=>{p.push(R.attribute_name)}):p=global.hdb_schema[s][i].attributes.map(O=>O.attribute),e.get_attributes=p)}let E=a9(e),h=XT(e.hdb_user.role.permission,s,i);return JT(E,h,r,i,s,c,n),c.getPermsResponse()}a(o9,"verifyPerms");function bP(e,t,r,n,s){if(ws.arrayHasEmptyValues([e,t,r]))throw bt.info("hasPermissions has an invalid parameter"),hr(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 bt.info(`operation ${t} not found.`),hr(new Error,Gt.OP_NOT_FOUND(t),Fu.BAD_REQUEST);if(k.get(t)&&k.get(t).requires_su)return bt.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Gt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][qu]===!1){n.addInvalidItem(Gt.SCHEMA_NOT_FOUND(u));continue}}catch{n.addInvalidItem(Gt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[qu]===!1)n.addInvalidItem(Gt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=k.get(t).perms;!ws.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)&&(bt.info(`Required ${p} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&n.addUnauthorizedTable(u,l,f)}catch(f){let E=Gt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw bt.error(E),bt.error(f),hr(gP.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(bP,"hasPermissions");function JT(e,t,r,n,s,i,o){if(!e||!t)throw bt.info("no attributes specified in checkAttributePerms."),hr(new Error);let c=k.get(r).perms;if(!c||c==="")throw bt.info(`no permissions found for ${r} in checkAttributePerms().`),hr(new Error);if(ws.isEmptyOrZeroLength(t))return bt.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[qu]===!1){i.addInvalidItem(Gt.ATTR_NOT_FOUND(s,n,l),s,n);continue}if(c)for(let f of c){if(cn.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Is)throw hr(new Error,Gt.SYSTEM_TIMESTAMP_PERMS_ERR,Fu.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Gt.ATTR_NOT_FOUND(s,n,l),s,n)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,s,n,u)}a(JT,"checkAttributePerms");function a9(e){let t=new Set;try{if(e.action)return t;if(e.operation===cn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){bt.info(r)}return t}a(a9,"getRecordAttributes");function XT(e,t,r){let n=new Map;if(ws.isEmpty(e))return bt.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{bt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(XT,"getAttributePermissions");function c9(e,t,r,n,s,i,o){let c=new Set(i),u=XT(e,n,s);JT(c,u,t,s,n,o,r)}a(c9,"verifyBulkLoadAttributePerms")});var cf=T((Jfe,DP)=>{"use strict";DP.exports={evaluateSQL:R9,processAST:CP,convertSQLToAST:IP,checkASTPermissions:wP};var u9=en(),yP=require("util"),l9=yP.callbackify(u9.insert),_9=Zr().search,d9=UC().update,f9=yP.callbackify(d9),E9=PC().convertDelete,Ei=require("alasql"),h9=of(),af=W(),m9=W_(),p9=J(),Vu=M(),{hdb_errors:S9,handleHDBError:jT}=re(),{HTTP_STATUS_CODES:ZT}=S9;m9(Ei);var T9=403,g9="There was a problem performing this insert. Please check the logs and try again.",eg=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function R9(e,t){let r=e.parsed_sql_object;if(!r){r=IP(e.sql);let n,s=r.ast.statements[0];if(s instanceof Ei.yy.Insert?n=s.into.databaseid:s instanceof Ei.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Ei.yy.Update||s instanceof Ei.yy.Delete?n=s.table.databaseid:af.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Ei.yy.Select)&&p9.isEmptyOrZeroLength(n))return t("No schema specified",null)}CP(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(R9,"evaluateSQL");function wP(e,t){let r;try{r=h9.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(wP,"checkASTPermissions");function IP(e){let t=new eg;if(!e)throw jT(new Error,"The 'sql' parameter is missing from the request body",ZT.BAD_REQUEST);try{let r=e.trim(),n=Ei.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
17
+ `);throw n[1]?jT(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,ZT.BAD_REQUEST):jT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",ZT.BAD_REQUEST)}return t}a(IP,"convertSQLToAST");function CP(e,t,r){try{let n=A9;if(!e.bypass_auth&&!t.permissions_checked){let i=wP(e,t);if(i&&i.length>0)return r(T9,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Vu.VALID_SQL_OPS_ENUM.SELECT:n=_9,s=t.ast.statements[0];break;case Vu.VALID_SQL_OPS_ENUM.INSERT:n=O9;break;case Vu.VALID_SQL_OPS_ENUM.UPDATE:n=f9;break;case Vu.VALID_SQL_OPS_ENUM.DELETE:n=E9;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(CP,"processAST");function A9(e,t){af.info(e),t("unknown sql statement")}a(A9,"nullFunction");function O9({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=b9(i,e.values)}catch(o){return r(o)}l9(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){af.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(O9,"convertInsert");function b9(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]]=Ei.compile(`SELECT ${s.toString()} AS [${Vu.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw af.error(r),new Error(g9)}}a(b9,"createDataObjects")});var tg=T((jfe,UP)=>{"use strict";var{S3:N9,GetObjectCommand:y9}=require("@aws-sdk/client-s3");UP.exports={getFileStreamFromS3:w9,getS3AuthObj:LP};async function w9(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await LP(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new y9(r))).Body}a(w9,"getFileStreamFromS3");function LP(e,t,r){return new N9({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(LP,"getS3AuthObj")});var uf=T((eEe,GP)=>{"use strict";var ng=Zr(),I9=cf(),C9=tg(),{AsyncParser:D9,Transform:L9}=require("json2csv"),Yu=require("stream"),Fr=J(),rg=require("fs-extra"),U9=require("path"),ln=W(),{promisify:vP}=require("util"),$u=J(),{handleHDBError:mt,hdb_errors:M9}=re(),{HDB_ERROR_MSGS:mr,HTTP_STATUS_CODES:pt}=M9,{streamAsJSON:P9}=(wh(),ne(Eb)),{Upload:v9}=require("@aws-sdk/lib-storage"),MP=["search_by_value","search_by_hash","sql","search_by_conditions"],PP=["json","csv"],BP="json",HP="csv",B9="Successfully exported JSON locally.",H9="Successfully exported CSV locally.",x9=1e3,F9=ng.searchByHash,q9=ng.searchByValue,G9=vP(I9.evaluateSQL),k9=vP(Yu.finished);GP.exports={export_to_s3:K9,export_local:V9,toCsvStream:xP};async function V9(e){ln.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=FP(e);if(!Fr.isEmpty(t))throw ln.error(t),mt(new Error,t,pt.BAD_REQUEST,void 0,void 0,!0);if(Fr.isEmpty(e.path))throw ln.error(mr.MISSING_VALUE("path")),mt(new Error,mr.MISSING_VALUE("path"),pt.BAD_REQUEST,void 0,void 0,!0);let r=(Fr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(U9.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Fr.buildFolderPath(e.path,r);await $9(e.path);let s=await qP(e);return await Y9(n,e.format,s)}a(V9,"export_local");async function $9(e){if(ln.trace("in confirmPath"),Fr.isEmptyOrZeroLength(e))throw mt(new Error,`Invalid path: ${e}`,pt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await rg.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,ln.error(n),mt(new Error,n,pt.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 ln.error(r),mt(new Error,r,pt.BAD_REQUEST,void 0,void 0,!0)}return!0}a($9,"confirmPath");async function Y9(e,t,r){if(ln.trace("in saveToLocal"),$u.isEmptyOrZeroLength(e))throw mt(new Error,mr.INVALID_VALUE("file_path"),pt.BAD_REQUEST,void 0,void 0,!0);if($u.isEmptyOrZeroLength(t))throw mt(new Error,mr.INVALID_VALUE("Source format"),pt.BAD_REQUEST,void 0,void 0,!0);if($u.isEmpty(r))throw mt(new Error,mr.NOT_FOUND("Data"),pt.BAD_REQUEST,void 0,void 0,!0);if(t===BP){let n=rg.createWriteStream(e);return P9(r).pipe(n),await k9(n),{message:B9,path:e}}else if(t===HP){let n=rg.createWriteStream(e),s=Yu.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(l=>({label:l,value:l})));let c={objectMode:!0};return await new D9(i,c).fromInput(s).toOutput(n).promise(!1),{message:H9,path:e}}throw mt(new Error,mr.INVALID_VALUE("format"),pt.BAD_REQUEST)}a(Y9,"saveToLocal");async function K9(e){if(!e.s3||Object.keys(e.s3).length===0)throw mt(new Error,mr.MISSING_VALUE("S3 object"),pt.BAD_REQUEST);if(Fr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw mt(new Error,mr.MISSING_VALUE("aws_access_key_id"),pt.BAD_REQUEST);if(Fr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw mt(new Error,mr.MISSING_VALUE("aws_secret_access_key"),pt.BAD_REQUEST);if(Fr.isEmptyOrZeroLength(e.s3.bucket))throw mt(new Error,mr.MISSING_VALUE("bucket"),pt.BAD_REQUEST);if(Fr.isEmptyOrZeroLength(e.s3.key))throw mt(new Error,mr.MISSING_VALUE("key"),pt.BAD_REQUEST);if(Fr.isEmptyOrZeroLength(e.s3.region))throw mt(new Error,mr.MISSING_VALUE("region"),pt.BAD_REQUEST);let t=FP(e);if(!Fr.isEmpty(t))throw mt(new Error,t,pt.BAD_REQUEST);ln.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await qP(e)}catch(u){throw ln.error(u),u}let n,s=await C9.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Yu.PassThrough;if(e.format===HP){i=e.s3.key+".csv";let u=xP(r,r.getColumns?.());u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===BP){i=e.s3.key+".json";let u=new Yu.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%x9===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw mt(new Error,mr.INVALID_VALUE("format"),pt.BAD_REQUEST);return new v9({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(K9,"export_to_s3");function xP(e,t){let r=Yu.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 L9(n,s);return r.pipe(i)}a(xP,"toCsvStream");function FP(e){if(ln.trace("in exportCoreValidation"),Fr.isEmpty(e.format))return"format missing";if(PP.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${PP.join(", ")}`;let t=e.search_operation.operation;if(Fr.isEmpty(t))return"search_operation.operation missing";if(MP.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${MP.join(", ")}`}a(FP,"exportCoreValidation");async function qP(e){ln.trace("in getRecords");let t,r;if($u.isEmpty(e.search_operation)||$u.isEmptyOrZeroLength(e.search_operation.operation))throw mt(new Error,mr.INVALID_VALUE("Search operation"),pt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=q9;break;case"search_by_hash":t=F9;break;case"search_by_conditions":t=ng.searchByConditions;break;case"sql":t=G9;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,ln.error(r),mt(new Error,r,pt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(qP,"getRecords")});var zP={};$e(zP,{contentTypes:()=>cg,findBestSerializer:()=>_f,getDeserializer:()=>po,registerContentHandlers:()=>ug,serialize:()=>df,serializeMessage:()=>di});function W9(e){try{return e?.[0]===123?ag(e):e}catch{return e}}function ug(e){e.register(z9,{serializers:[{regex:/^application\/json$/,serializer:pc},{regex:/^application\/cbor$/,serializer:function(t){return new mo.EncoderStream(Wu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?lf.Readable.from((0,ns.encodeIter)(t,Wu)):(0,ns.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,sg.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,ns.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,mo.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function _f(e){let r=(e.headers.asObject||e.headers).accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=Pt.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(Pt.keys()).join(", "))}};n=Pt.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function df(e,t,r){let n=VP&&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=_f(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,Cs.createBrotliCompress)({params:{[Cs.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Cs.constants.BROTLI_MODE_TEXT:Cs.constants.BROTLI_MODE_GENERIC,[Cs.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>VP?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Cs.brotliCompress)(s,(c,u)=>{c?o(c):i(u)}))):s}function di(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return Ku(e);let r=t.serialize;if(r)return r(e);let n=_f(t);return r=t.serialize=n.serializer.serialize,r(e)}function J9(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 po(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Pt.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Pt.get(e)?.deserialize||$P(e,n);return o=>J9(o).then(i)}return e&&Pt.get(e)?.deserialize||$P(e,n)}function $P(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 ag(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function X9(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 sg,ns,mo,Cs,lf,YP,ig,og,KP,WP,Ku,ag,Wu,Pt,cg,kP,QP,Q9,z9,VP,pa=Re(()=>{wh();sg=x(uf()),ns=require("msgpackr"),mo=require("cbor-x"),Cs=require("zlib"),lf=require("stream");tr();YP=require("../../index"),ig=x(te()),og=x(M()),KP=x(require("yaml")),WP=ig.default.get(og.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,Ku=WP?Pi:JSON.stringify,ag=WP?yh:JSON.parse,Wu={useRecords:!1,useToJSON:!0},Pt=new Map,cg=Pt;Ze.contentTypes=cg;(0,YP._assignPackageExport)("contentTypes",cg);Pt.set("application/json",{serializeStream:pc,serialize:Ku,deserialize:ag,q:.8});kP=new mo.Encoder(Wu);Pt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new mo.EncoderStream(Wu).end(e)},serialize:kP.encode,deserialize:kP.decode,q:1});Pt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?lf.Readable.from((0,ns.encodeIter)(e,Wu)):(0,ns.pack)(e)},serialize:ns.pack,deserialize:ns.unpack,q:.9});Pt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,sg.toCsvStream)(e,e?.getColumns?.())},q:.1});Pt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Pt.set("text/yaml",{serialize(e){return KP.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Pt.set("text/event-stream",{serializeStream:function(e){return lf.Readable.from(X9(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
18
+ `),e.data){let r=e.data;typeof r=="object"&&(r=Ku(r)),t+="data: "+r+`
19
19
  `}return e.id&&(t+="id: "+e.id+`
20
20
  `),e.retry&&(t+="retry: "+e.retry+`
21
21
  `),t+`
22
- `}else return typeof e=="object"?`data: ${Vu(e)}
22
+ `}else return typeof e=="object"?`data: ${Ku(e)}
23
23
 
24
24
  `:`data: ${e}
25
25
 
26
- `},compressible:!1,q:.8});Pt.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()}});$P={type:"application/json",serializeStream:hc,serialize:Vu,deserialize:$9,q:.8};Pt.set("*/*",$P);Pt.set("",$P);a($9,"tryJSONParse");a(ag,"registerContentHandlers");Y9=require("fastify-plugin"),K9=Y9(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=lf(n.raw);s.type(c),s.serializer(function(u){return(o.serializeStream||o.serialize)(u,{headers:{set:(_,l)=>{s.header(_,l)}}})})}),r()},{name:"content-type-negotiation"});a(lf,"findBestSerializer");FP=ng.default.get(sg.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(_f,"serialize");a(_i,"serializeMessage");a(W9,"streamToBuffer");a(Eo,"getDeserializer");a(qP,"deserializerUnknownType");a(Q9,"transformIterable")});function lg(e,t,r,n,s,i,o,c){let u=e[0];if(t==="or"){let d=_(u);for(let E=1;E<e.length;E++){let h=e[E],p=_(h);d=d.concat(p)}let f=new Set;return d.filter(E=>{let h=E.key??E;return f.has(h)?!1:(f.add(h),!0)})}else{let d=_(u),f=l(e.slice(1),!0,u.estimated_count);return f.length>0?o(d,f):d}function _(d){return d.conditions?lg(d.conditions,d.operator,r,n,s,i,o,c):ba(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(_,"executeCondition");function l(d,f,E){return d.map((h,p)=>{if(h.conditions){let g=h.operator==="or",R=l(h.conditions,!g,E);return g?(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=dg(h,r,i,c,S,E);return f&&p<d.length-1&&E&&(E=n7(r.primaryStore,h.estimated_count,E)),O}).filter(Boolean)}a(l,"mapConditionsToFilters")}function ba(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,u=e.comparator;if(Array.isArray(o)){let g=o[0],R=Ls(n.attributes,g);if(R.relationship){if(o.length<2)throw new Ds.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=ba({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,B,s,H);if(R.relationship.to){i[o[0]]=H;let M=!!Ls(B.attributes,R.relationship.to)?.elements;v=Z9(v,R,B.primaryStore,M,H)}if(R.relationship.from){let M=a($=>ba({attribute:R.relationship.from,value:$},t,r,n,s,H),"searchEntry");R.elements?(i[o[0]]=H,v=e7(v,R,B.primaryStore,H,M)):v=v.flatMap(M)}return v}else if(o.length===1)o=o[0];else throw new Ds.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,f;c instanceof Date&&(c=c.getTime());let E;switch(_g[u]||u){case"lt":_=!0,l=c;break;case"le":_=!0,l=c,d=!0;break;case"gt":_=c,f=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,l=c.slice(0),l[l.length-1]=ns.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),l=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),l=c[1],l instanceof Date&&(l=l.getTime()),d=!0;break;case"equals":case void 0:_=c,l=c,d=!0;break;case"ne":if(c===null){_=c,f=!0;break}case"sort":case"contains":case"ends_with":_=!0,E=!0;break;default:throw new Ds.ClientError(`Unknown query comparator "${u}"`)}if(r){let g=_;_=l,l=g,g=!f,f=!d,d=g}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 Ds.ClientError(E?`Can not use ${u} 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=dg(e),!S)throw new Ds.ClientError(`Unknown search operator ${e.comparator}`)}let O={start:_,end:l,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let g=p.getRange(O).map(S?({key:R,value:B})=>new Promise((H,v)=>setImmediate(()=>{try{H(B&&S(B)?R:Yu.SKIP)}catch(M){v(M)}})):R=>R.value==null?Yu.SKIP:R);return g.hasEntries=!0,g}else return p?p.getRange(O).map(S?({key:g,value:R})=>new Promise((B,H)=>setImmediate(()=>{try{B(S({[o]:g})?R:Yu.SKIP)}catch(v){H(v)}})):({value:g})=>g):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(({key:g,value:R})=>new Promise((B,H)=>setImmediate(()=>{try{B(R&&S(R)?g:Yu.SKIP)}catch(v){H(v)}})))}function Ls(e,t){if(Array.isArray(t))if(t.length>1){let r=Ls(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?Ls(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 Z9(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;s.hasMappings=!0;let o;return{next(){if(!i){let u=t.relationship.to;return(async()=>{let _=a((d,f)=>{let E=d;Array.isArray(d)&&(E=Mn(d),o=!0);let h=s.get(E);h?h.push(f):s.set(E,h=[f]),d!==E&&(h.key=d)},"add_entry"),l=0;for await(let d of e){let f=d.value??r.get(d.key??d),E=f?.[u];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);l++>100&&(await new Promise(setImmediate),l=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 e7(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let u;if(o)for(;u=o.next(),!u.done;){let _=Mn(u.value);if(!c.has(_))return c.add(_),u}if(!i)return(async()=>{let _=new Map;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>_.has(Mn(f)));let l=0;for await(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(E=>!E(f)))continue}_.set(Mn(d),d),l++>100&&(await new Promise(setImmediate),l=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 dg(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,u=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let l=c[0],d=Ls(t.attributes,l),f=d.definition?.tableClass||d.elements.definition?.tableClass,E=n?.[l],h=dg({attribute:c.length>2?c.slice(1):c[1],value:u,comparator:o},f,r,E?.[l]?.joined,c[1]===f.primaryKey,i);if(!h)return;if(E){E.filters||(E.filters=[]),E.filters.push(h);return}let p=t.propertyResolvers?.[l],S,O=a((g,R)=>{let B,H;if(p){if(p.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let M of h.idFilter.idSet)e={attribute:p.from,value:M};S=_(p.from,h.idFilter,!0)}else S=_(p.from,h.idFilter,!1);let v=S(g);return S.idFilter&&(O.idFilter=S.idFilter),v}H=p(g,r,R),B=H?.value}else B=g[l];return B?Array.isArray(B)?B.some(h):h(B,H):!1},"recordFilter");return O}}switch(u instanceof Date&&(u=u.getTime()),_g[o]||o){case cg.SEARCH_TYPES.EQUALS:case void 0:return _(c,l=>l===u,!0);case"contains":return _(c,l=>l?.toString().includes(u));case"ends_with":return _(c,l=>l?.toString().endsWith(u));case"starts_with":return _(c,l=>typeof l=="string"&&l.startsWith(u),!0);case"prefix":return Array.isArray(u)?u[u.length-1]==null&&(u=u.slice(0,-1)):u=[u],_(c,l=>{if(!Array.isArray(l))return!1;for(let d=0,f=u.length;d<f;d++)if(l[d]!==u[d])return!1;return!0},!0);case"between":return u[0]instanceof Date&&(u[0]=u[0].getTime()),u[1]instanceof Date&&(u[1]=u[1].getTime()),_(c,l=>(0,ns.compareKeys)(l,u[0])>=0&&(0,ns.compareKeys)(l,u[1])<=0,!0);case"gt":return _(c,l=>(0,ns.compareKeys)(l,u)>0);case"ge":return _(c,l=>(0,ns.compareKeys)(l,u)>=0);case"lt":return _(c,l=>(0,ns.compareKeys)(l,u)<0);case"le":return _(c,l=>(0,ns.compareKeys)(l,u)<=0);case"ne":return _(c,l=>(0,ns.compareKeys)(l,u)!==0);case"sort":return()=>!0;default:throw new Ds.ClientError(`Unknown query comparator "${o}"`)}function _(l,d,f){let E;f=f&&!s&&t?.indices[l]&&i>3,f&&(e.estimated_count==null&&ff(t)(e),E=e.estimated_count>>4,(isNaN(E)||E>=i)&&(f=!1));let h=0,p=3;function S(O){let g=O[l],R;if(typeof g!="object"||!g?R=d(g):Array.isArray(g)?R=g.some(d):g instanceof Date&&(R=d(g.getTime())),f&&(p++,!R&&!S.idFilter&&++h/p*(i-p)>E)){let B=ba(e,r.transaction.getReadTxn(),!1,t).map(Mn),H=new Set(B);S.idFilter=v=>H.has(Mn(v)),S.idFilter.idSet=H}return R}return a(S,"recordFilter"),s&&(S.idFilter=d),S}a(_,"attributeComparator")}function ff(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/Cs(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=_g[n]||n,n===cg.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=Ls(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=ff(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"});r.estimated_count=c*Cs(e.indices[i.relationship.from]||e.primaryStore)/(Cs(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=Cs(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=X9*Cs(e.primaryStore)+1:n==="between"?r.estimated_count=J9*Cs(e.primaryStore)+1:n==="sort"?r.estimated_count=Cs(e.primaryStore)+1:r.estimated_count=z9*Cs(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function Ef(e){if(e)if(Ei=e,Aa.lastIndex=0,t7.test(e))try{let t=Ku(new Oa,"");if(Er!==Ei.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 ${Er} in '${Ei}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Ku(e,t){let r=Aa,n,s,i,o,c,u=decodeURIComponent,_;for(;n=r.exec(Ei);){Er=r.lastIndex;let[,l,d]=n;if(o){if(l)throw new SyntaxError(`expected operator, but encountered '${l}'`);o=!1,c=!1}else c=!0;let f;switch(d){case"=":if(s){if(l.length<=2)i=l;else throw new SyntaxError(`invalid FIQL operator ${l}`);u=KP}else{if(u=decodeURIComponent,i="equals",!l)throw new SyntaxError("attribute must be specified before equality comparator");s=Wu(l)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=j9[d],u=ug[i]?KP:decodeURIComponent,!l)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=Wu(l);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:u(l)};i==="eq"&&WP(h,l),df(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(Wu(l)),s=void 0;break;case"(":Aa.lastIndex=Er;let E=Ku(l?[]:new Oa,")");switch(l){case"":df(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=QP(E);break;default:throw new SyntaxError(`unknown query function call ${l}`)}Ei[Er]===","?r.lastIndex=++Er:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!l)throw new SyntaxError("property sets must have a defined parent property name");Aa.lastIndex=Er,f=Ku([],"}"),f.name=l,e.push(f),Ei[Er]===","?r.lastIndex=++Er:o=!0;break;case"[":Aa.lastIndex=Er,l?(f=Ku(new Oa,"]"),f.name=l):f=Ku(e.conditions?new Oa:[],"]"),e.conditions?(df(e,_),e.conditions.push(f),s=null):e.push(f),Ei[Er]===","?r.lastIndex=++Er:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let h={comparator:i||"equals",attribute:s,value:u(l)};i==="eq"&&WP(h,l),df(e,_),e.conditions.push(h)}else if(l)throw new SyntaxError("no attribute or comparison specified")}else(l||e.length>0&&c)&&e.push(Wu(l));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?r7:Aa,r.lastIndex=Er),Er===Ei.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function df(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 Wu(e){return e.indexOf(".")>-1?e.split(".").map(Wu):decodeURIComponent(e)}function KP(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 Ds.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function WP(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Ds.ClientError("wildcard can only be used at the end of a string")}function QP(e){let t=zP(e[0]);return e.length>1&&(t.next=QP(e.slice(1))),t}function zP(e){if(Array.isArray(e)){let t=zP(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 Mn(e){return Array.isArray(e)?e.join("\0"):e}function Cs(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function n7(e,t,r){return t*r/Cs(e)}var Ds,cg,ns,Yu,z9,J9,X9,j9,ug,_g,t7,Aa,r7,Er,Ei,Oa,hf=Oe(()=>{Ds=x(ee()),cg=x(lt()),ns=require("ordered-binary"),Yu=require("lmdb"),z9=.3,J9=.1,X9=.05,j9={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},ug={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(lg,"executeConditions");a(ba,"searchByIndex");a(Ls,"findAttribute");a(Z9,"joinTo");a(e7,"joinFrom");_g={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(dg,"filterByType");a(ff,"estimateCondition");t7=/[()[\]|!<>.]|(=\w*=)/,Aa=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,r7=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(Ef,"parseQuery");a(Ku,"parseBlock");a(df,"assignOperator");a(Wu,"decodeProperty");a(KP,"typedDecoding");a(WP,"wildcardDecoding");a(QP,"toSortObject");a(zP,"toSortEntry");Oa=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(Mn,"flattenKey");a(Cs,"estimatedEntryCount");a(n7,"intersectionEstimate")});function ev(e){let t={openapi:s7,info:{title:"HarperDB HTTP REST interface",version:(0,ZP.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:u}=n.Resource;if(c=c??"id",!c)continue;let _={},l=[];if(o)for(let{type:R,name:B,elements:H,relationship:v,definition:M}of o){if(v)R==="array"?_[B]={type:"array",items:{$ref:hi+H.type}}:_[B]={$ref:hi+R};else{let $=M??H?.definition;if($){if(!t.components.schemas[$.type]){let K={};$.properties.forEach(z=>{K[z.name]=new mg(fg[z.type],z.type)}),t.components.schemas[$.type]=new jP(K)}R==="array"?_[B]={type:"array",items:{$ref:hi+$.type}}:_[B]={$ref:hi+$.type}}else R==="array"?H.type==="Any"||H.type=="ID"?_[B]={type:"array",items:{format:H.type}}:_[B]={type:"array",items:new mg(fg[H.type],H.type)}:R==="Any"||R=="ID"?_[B]={format:R}:_[B]=new mg(fg[R],R)}l.push(new pg(B,"query",_[B]))}let d=Object.keys(_),f=new pg(c,"path",{format:"ID"});f.required=!0,f.description="primary key of record";let E=new pg("property","path",{enum:d});E.required=!0,t.components.schemas[i]=new jP(_);let h=u.post!==Resource.prototype.post||u.update,p=typeof u.put=="function",S=typeof u.get=="function",O=typeof u.delete=="function",g="/"+s+"/";h&&(t.paths[g]={},t.paths[g].post=new i7(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[g]||(t.paths[g]={}),t.paths[g].get=new Eg(l,r,{200:new hg({$ref:hi+i})},"search for records by the specified property name and value pairs")),O&&(t.paths[g]||(t.paths[g]={}),t.paths[g].delete=new XP(l,r,"delete all the records that match the provided query",{204:new JP})),g="/"+s+"/{"+c+"}",S&&(t.paths[g]={},t.paths[g].get=new Eg([f],r,{200:new hg({$ref:hi+i})},"retrieve a record by its primary key")),p&&(t.paths[g]||(t.paths[g]={}),t.paths[g].put=new o7([f],r,i,"create or update the record with the URL path that maps to the record's primary key")),O&&(t.paths[g]||(t.paths[g]={}),t.paths[g].delete=new XP([f],r,"delete a record with the given primary key",{204:new JP})),S&&E.schema.enum.length>0&&(g="/"+s+"/{"+c+"}.{property}",t.paths[g]={},t.paths[g].get=new Eg([f,E],r,{200:new hg({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function i7(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:hi+e}}}},this.security=t,this.responses={200:{description:Sg,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function Eg(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function hg(e){this.description=Sg,this.content={"application/json":{schema:e}}}function JP(){this.description="successfully processed request, no content returned to client"}function o7(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:hi+r}}}},this.responses={200:{description:Sg}}}function XP(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function jP(e){this.type="object",this.properties=e}function mg(e,t){this.type=e,this.format=t}function pg(e,t,r){this.name=e,this.in=t,this.schema=r}var ZP,s7,fg,hi,Sg,tv=Oe(()=>{ZP=x(md()),s7="3.0.3",fg={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},hi="#/components/schemas/",Sg="successful operation";a(ev,"generateJsonApi");a(i7,"Post");a(Eg,"Get");a(hg,"Response200");a(JP,"Response204");a(o7,"Put");a(XP,"Delete");a(jP,"ResourceSchema");a(mg,"Type");a(pg,"Parameter")});var pf={};ke(pf,{start:()=>u7});async function c7(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Ef(e);let s=new li;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==rv){let h=mf.getMatch(i);if(!h)return t(e);e.handlerPath=h.path,o={url:h.relativeURL,async:!0},c=h.Resource}let u=r["cache-control"];if(u){u=u.toLowerCase();let h=u.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),u.includes("only-if-cached")&&(e.onlyIfCached=!0),u.includes("no-cache")&&(e.noCache=!0),u.includes("no-store")&&(e.noCacheStore=!0),u.includes("stale-if-error")&&(e.staleIfError=!0),u.includes("must-revalidate")&&(e.mustRevalidate=!0)}let _=await Ke(e,()=>{if(n==="POST"||n==="PUT"||n==="PATCH"||n==="QUERY")try{e.data=Eo(r["content-type"],!0)(e.body)}catch(h){throw new Na.ClientError(h,400)}if(e.authorize=!0,i===rv&&n==="GET"){if(e?.user?.role?.permission?.super_user)return ev(mf);throw new Na.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 Na.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Na.ServerError(`Method ${n} is not recognized`,501)}}),l=200,d;if(_==null)l=n==="GET"||n==="HEAD"?404:204,Tg.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){a7[0]=d;let h=String.fromCharCode(34,(qt[0]&63)+62,(qt[0]>>6)+(qt[1]<<2&63)+62,(qt[1]>>4)+(qt[2]<<4&63)+62,(qt[2]>>2)+62,(qt[3]&63)+62,(qt[3]>>6)+(qt[4]<<2&63)+62,(qt[4]>>4)+(qt[5]<<4&63)+62,(qt[5]>>2)+62,(qt[6]&63)+62,(qt[6]>>6)+(qt[7]<<2&63)+62,34),p=r["if-none-match"];p&&h==p?(_?.onDone&&_.onDone(),l=304,_=void 0):s.setIfNone("ETag",h),Tg.lastModified&&s.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(l=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let f={status:l,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=_f(_,e,f),n==="HEAD"&&(f.body=void 0)),f}catch(i){i.statusCode?i.statusCode===500?ho.warn(i):ho.info(i):ho.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=_f(i.contentType?i:i.toString(),e,o),o}}function u7(e){Tg=e,!nv&&(nv=!0,mf=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return c7(t,r)}),e.server.ws(async(t,r,n)=>{Qu++;let s=new Rn;sv||(sv=!0,eu(l=>{Qu>0&&l.push({metric:"ws-connections",connections:Qu,byThread:!0})}));let i;t.on("error",l=>{i=!0,ho.warn(l)});let o;t.on("message",a(function(d){o||(o=Eo(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{Qu--,tn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let u=r.url.slice(1),_=mf.getMatch(u);if(tn(!!_,"connection","ws","connect"),!_)t.send(_i(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,Br(h=>({count:h.count,total:Qu}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await Ke(r,()=>d.connect(l,s,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=_i(E.value,r);t.send(h),Br(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var ho,Na,qt,a7,Tg,rv,nv,mf,sv,Qu,iv=Oe(()=>{ha();As();ho=x(W()),Na=x(ee());hf();fc();zi();Fd();tv();qt=new Uint8Array(8),a7=new Float64Array(qt.buffer,0,1),Tg={},rv="openapi";a(c7,"http");Qu=0;a(u7,"start")});var gg=T((fEe,ov)=>{var{recordAction:Sf,recordActionBinary:l7}=(As(),te(tu)),_7=require("fastify-plugin"),d7=200;ov.exports=_7(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(),u=s.request.routeOptions,_,l,d;u.config?.isOperation?(_=n.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),Sf(o,"duration",_,d,l),l7(s.raw.statusCode<400,"success",_,d,l);let f=d7;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Sf(performance.now()-c,"transfer",_,d,l),Sf(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Sf(f,"bytes-sent",_,d,l));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var yg=T((mEe,lv)=>{var Af=require("clone"),Of=Xe(),f7=J(),gf=U(),EEe=W(),Rg=require("fs"),Og=require("joi"),{string:Rf}=Og.types(),{hdb_errors:E7,handleHDBError:Tf}=ee(),{HDB_ERROR_MSGS:hEe,HTTP_STATUS_CODES:Ag}=E7,{common_validators:ya}=$n(),av=" is required",h7=["insert","update","upsert"],bg={database:{presence:!1,format:ya.schema_format,length:ya.schema_length},schema:{presence:!1,format:ya.schema_format,length:ya.schema_length},table:{presence:!0,format:ya.schema_format,length:ya.schema_length},action:{inclusion:{within:h7,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},m7={schema:Rf.required(),table:Rf.required(),action:Rf.valid("insert","update","upsert")},{AWS_ACCESS_KEY:p7,AWS_SECRET:S7,AWS_BUCKET:T7,AWS_FILE_KEY:g7,REGION:R7}=gf.S3_BUCKET_AUTH_KEYS,A7={s3:{presence:!0},[`s3.${p7}`]:{presence:!0,type:"String"},[`s3.${S7}`]:{presence:!0,type:"String"},[`s3.${T7}`]:{presence:!0,type:"String"},[`s3.${g7}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${R7}`]:{presence:!0,type:"String"}},cv=Af(bg);cv.data.presence={message:av};var uv=Af(bg);uv.file_path.presence={message:av};var O7=Object.assign(Af(bg),A7),Ng=Af(m7);Ng.csv_url=Rf.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Ng.passthrough_headers=Og.object();function b7(e){let t=Of.validateObject(e,cv);return bf(e,t)}a(b7,"dataObject");function N7(e){let t=Of.validateBySchema(e,Og.object(Ng));return bf(e,t)}a(N7,"urlObject");function y7(e){let t=Of.validateObject(e,uv);return bf(e,t)}a(y7,"fileObject");function w7(e){let t=Of.validateObject(e,O7);return bf(e,t)}a(w7,"s3FileObject");function bf(e,t){if(!t){let r=f7.checkGlobalSchemaTable(e.schema,e.table);if(r)return Tf(new Error,r,Ag.BAD_REQUEST);if(e.operation===gf.OPERATIONS_ENUM.CSV_FILE_LOAD)try{Rg.accessSync(e.file_path,Rg.constants.R_OK|Rg.constants.F_OK)}catch(n){return n.code===gf.NODE_ERROR_CODES.ENOENT?Tf(n,`No such file or directory ${n.path}`,Ag.BAD_REQUEST):n.code===gf.NODE_ERROR_CODES.EACCES?Tf(n,`Permission denied ${n.path}`,Ag.BAD_REQUEST):Tf(n)}}return t}a(bf,"postValidateChecks");lv.exports={dataObject:b7,urlObject:N7,fileObject:y7,s3FileObject:w7}});var wg=T((SEe,_v)=>{"use strict";var zu=W(),Nf=U();async function I7(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===Nf.OPERATIONS_ENUM.INSERT||t.operation===Nf.OPERATIONS_ENUM.UPDATE||t.operation===Nf.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===Nf.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(zu.info(i.message),i):i.http_resp_msg?(zu.error(`Error calling operation: ${e.name}`),zu.error(i.http_resp_msg),i):(zu.error(`Error calling operation: ${e.name}`),zu.error(i),i)}}a(I7,"callOperationFunctionAsAwait");_v.exports={callOperationFunctionAsAwait:I7}});var fv=T((gEe,dv)=>{"use strict";var Ig=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}},Cg=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};dv.exports={BulkLoadFileObject:Ig,BulkLoadDataObject:Cg}});var hv=T((AEe,Ev)=>{"use strict";var Dg=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};Ev.exports=Dg});var Bg=T((IEe,Mv)=>{"use strict";var yf=Zr(),If=yg(),C7=require("needle"),Un=U(),bEe=tt(),wa=J(),{handleHDBError:nt,hdb_errors:bv}=ee(),{HTTP_STATUS_CODES:Gt,HDB_ERROR_MSGS:Nt,CHECK_LOGS_WRAPPER:po}=bv,Ia=W(),Lg=require("papaparse");wa.promisifyPapaParse();var Pn=require("fs-extra"),D7=require("path"),{chain:mv}=require("stream-chain"),pv=require("stream-json/streamers/StreamArray"),Sv=require("stream-json/utils/Batch"),Tv=require("stream-chain/utils/comp"),{finished:gv}=require("stream"),L7=Z(),Nv=wg(),M7=ZT(),{BulkLoadFileObject:Ug,BulkLoadDataObject:U7}=fv(),Pg=VT(),{verifyBulkLoadAttributePerms:yv}=sf(),NEe=hv(),yEe=At(),wEe=ps(),{databases:P7}=(be(),te(Fe)),{coerceType:v7}=(Cf(),te(Hg)),Rv="No records parsed from csv file.",mo=`${L7.get("HDB_ROOT")}/tmp`,{schema_regex:B7}=$n(),Av=1024*1024*2,Ov=5e3,H7={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};Mv.exports={csvDataLoad:x7,csvURLLoad:F7,csvFileLoad:q7,importFromS3:G7};async function x7(e,t){let r=If.dataObject(e);if(r)throw nt(r,r.message,Gt.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=Cv(e.schema,e.table),i=Lg.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Mg.bind(null,s),dynamicTyping:!1}),o=new Pg;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&yv(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 nt(new Error,c,Gt.BAD_REQUEST,void 0,void 0,!0);let u=new U7(e.action,e.schema,e.table,i.data);return n=await Nv.callOperationFunctionAsAwait(Dv,u,null),n.message===Rv?Rv:Lv(n.records,n.number_written)}catch(s){throw So(s)}}a(x7,"csvDataLoad");async function F7(e){let t=If.urlObject(e);if(t)throw nt(t,t.message,Gt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${mo}/${r}`;try{await k7(e,r)}catch(s){throw Ia.error(Nt.DOWNLOAD_FILE_ERR(r)+" - "+s),nt(s,po(Nt.DOWNLOAD_FILE_ERR(r)))}try{let s=new Ug(this.job_operation_function.name,e.action,e.schema,e.table,n,Un.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await vg(s);return await wf(n),i}catch(s){throw await wf(n),So(s)}}a(F7,"csvURLLoad");async function q7(e){let t=If.fileObject(e);if(t)throw nt(t,t.message,Gt.BAD_REQUEST,void 0,void 0,!0);let r=new Ug(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Un.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await vg(r)}catch(n){throw So(n)}}a(q7,"csvFileLoad");async function G7(e){let t=If.s3FileObject(e);if(t)throw nt(t,t.message,Gt.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=D7.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${mo}/${s}`;let i=new Ug(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await V7(s,e);let o=await vg(i);return await wf(r),o}catch(n){throw await wf(r),So(n)}}a(G7,"importFromS3");async function k7(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await C7("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 nt(n,s,n.statusCode,Un.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Y7(r,e.csv_url),await $7(t,r.raw)}a(k7,"downloadCSVFile");async function V7(e,t){try{let r=`${mo}/${e}`;await Pn.mkdirp(mo),await Pn.writeFile(`${mo}/${e}`,"",{flag:"a+"});let n=await Pn.createWriteStream(r),s=await M7.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(){Ia.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Ia.error(Nt.S3_DOWNLOAD_ERR+" - "+r),nt(r,po(Nt.S3_DOWNLOAD_ERR))}}a(V7,"downloadFileFromS3");async function $7(e,t){try{await Pn.mkdirp(mo),await Pn.writeFile(`${mo}/${e}`,t)}catch(r){throw Ia.error(Nt.WRITE_TEMP_FILE_ERR),nt(r,po(Nt.DEFAULT_BULK_LOAD_ERR))}}a($7,"writeFileToTempFolder");async function wf(e){if(e)try{await Pn.access(e),await Pn.unlink(e)}catch{Ia.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(wf,"deleteTempFile");function Y7(e,t){if(e.statusCode!==bv.HTTP_STATUS_CODES.OK)throw nt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Gt.BAD_REQUEST);if(!H7[e.headers["content-type"]])throw nt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Gt.BAD_REQUEST);if(!e.raw)throw nt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Gt.BAD_REQUEST)}a(Y7,"validateURLResponse");async function vg(e){try{let t;switch(e.file_type){case Un.VALID_S3_FILE_TYPES.CSV:t=await K7(e);break;case Un.VALID_S3_FILE_TYPES.JSON:t=await W7(e);break;default:throw nt(new Error,Nt.DEFAULT_BULK_LOAD_ERR,Gt.BAD_REQUEST,Un.LOG_LEVELS.ERROR,Nt.INVALID_FILE_EXT_ERR(e))}return Lv(t.records,t.number_written)}catch(t){throw So(t)}}a(vg,"fileLoad");async function wv(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 yf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&yv(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let u=nt(c);r(u)}}a(wv,"validateChunk");async function Iv(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;wa.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!wa.isEmpty(c)&&!wa.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await Nv.callOperationFunctionAsAwait(Dv,c,null);t.records+=u.records,t.number_written+=u.number_written,s&&s.resume()}catch(c){let u=nt(c,po(Nt.INSERT_CSV_ERR),Gt.INTERNAL_SERVER_ERROR,Un.LOG_LEVELS.ERROR,Nt.INSERT_CSV_ERR+" - "+c);r(u)}}a(Iv,"insertChunk");async function K7(e){let t={records:0,number_written:0},r=Cv(e.schema,e.table);try{let n=new Pg,s=Pn.createReadStream(e.file_path,{highWaterMark:Av});s.setEncoding("utf8"),await Lg.parsePromise(s,wv.bind(null,e,n),Mg.bind(null,r));let i=n.getPermsResponse();if(i)throw nt(new Error,i,Gt.BAD_REQUEST);return s=Pn.createReadStream(e.file_path,{highWaterMark:Av}),s.setEncoding("utf8"),await Lg.parsePromise(s,Iv.bind(null,e,t),Mg.bind(null,r)),s.destroy(),t}catch(n){throw nt(n,po(Nt.PAPA_PARSE_ERR),Gt.INTERNAL_SERVER_ERROR,Un.LOG_LEVELS.ERROR,Nt.PAPA_PARSE_ERR+n)}}a(K7,"callPapaParse");function Cv(e,t){let r=P7[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>v7(i,s));return n}a(Cv,"createTransformMap");function Mg(e,t,r){let n=e.get(r);return n?n(t):wa.autoCast(t)}a(Mg,"typeFunction");async function W7(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new Pg,s=mv([Pn.createReadStream(e.file_path,{encoding:"utf-8"}),pv.withParser(),c=>c.value,new Sv({batchSize:Ov}),Tv(async c=>{await wv(e,n,r,c)})]);await new Promise((c,u)=>{gv(s,_=>{_?u(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw nt(new Error,i,Gt.BAD_REQUEST);let o=mv([Pn.createReadStream(e.file_path,{encoding:"utf-8"}),pv.withParser(),c=>c.value,new Sv({batchSize:Ov}),Tv(async c=>{await Iv(e,t,r,c)})]);return await new Promise((c,u)=>{gv(o,_=>{_?u(_):c()}),o.resume()}),t}catch(n){throw nt(n,po(Nt.INSERT_JSON_ERR),Gt.INTERNAL_SERVER_ERROR,Un.LOG_LEVELS.ERROR,Nt.INSERT_JSON_ERR+n)}}a(W7,"insertJson");async function Dv(e){let t={};try{e.data&&e.data.length>0&&Q7(e.data[0])?t=await z7(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Ia.info(t.message))}catch(r){throw So(r)}return t}a(Dv,"callBulkFileLoad");function Q7(e){let t=Object.keys(e);for(let r of t)if(!B7.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Q7,"validateColumnNames");async function z7(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=yf.insert;break;case"update":i=yf.update;break;case"upsert":i=yf.upsert;break;default:throw nt(new Error,Nt.INVALID_ACTION_PARAM_ERR(n),Gt.BAD_REQUEST,Un.LOG_LEVELS.ERROR,Nt.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 l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=wa.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw So(o)}}a(z7,"bulkFileLoad");function Lv(e,t){return`successfully loaded ${t} of ${e} records`}a(Lv,"buildResponseMsg");function So(e){return nt(e,po(Nt.DEFAULT_BULK_LOAD_ERR),Gt.INTERNAL_SERVER_ERROR,Un.LOG_LEVELS.ERROR,Nt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(So,"buildTopLevelErrMsg")});var Pv=T((DEe,Uv)=>{"use strict";var xg=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};Uv.exports=xg});var Hv=T((MEe,Bv)=>{"use strict";var J7=U(),vv=require("moment"),X7=require("uuid").v4,Fg=class{static{a(this,"JobObject")}constructor(){this.id=X7(),this.type=void 0,this.start_datetime=vv().valueOf(),this.created_datetime=vv().valueOf(),this.end_datetime=void 0,this.status=J7.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};Bv.exports=Fg});var qg=T((PEe,Vv)=>{"use strict";var j7=require("uuid").v4,qv=Zr(),Gv=jr(),Z7=Qn(),eee=Xo(),tee=Pv(),st=U(),ree=Hv(),nee=gS(),ln=W(),see=wc(),Ca=J(),{promisify:iee}=require("util"),To=require("moment"),oee=af(),Df=yg(),xv=Rm(),{deleteTransactionLogsBeforeValidator:aee}=xT(),{handleHDBError:cee,hdb_errors:uee}=ee(),{HTTP_STATUS_CODES:lee}=uee,Fv=Gv.searchByValue,_ee=Gv.searchByHash,dee=qv.insert,fee=iee(oee.evaluateSQL),Eee=qv.update;Vv.exports={addJob:pee,updateJob:Tee,handleGetJob:hee,handleGetJobsByStartDate:mee,getJobById:kv};async function hee(e){try{let t=await kv(e.id);return Ca.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 ln.error("There was an error getting job",t),new Error(r)}}a(hee,"handleGetJob");async function mee(e){try{let t=await See(e);if(ln.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=To(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=To(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 ln.error(r),new Error(r)}}a(mee,"handleGetJobsByStartDate");async function pee(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Ca.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return ln.info(l),t.error=l,t}if(!st.JOB_TYPE_ENUM[e.operation])return ln.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case st.OPERATIONS_ENUM.CSV_FILE_LOAD:n=Df.fileObject(e);break;case st.OPERATIONS_ENUM.CSV_URL_LOAD:n=Df.urlObject(e);break;case st.OPERATIONS_ENUM.CSV_DATA_LOAD:n=Df.dataObject(e);break;case st.OPERATIONS_ENUM.IMPORT_FROM_S3:n=Df.s3FileObject(e);break;case st.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case st.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=xv(e,"date");break;case st.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=xv(e,"timestamp");break;case st.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=aee(e);break;default:break}if(n)throw cee(n,n.message,lee.BAD_REQUEST,void 0,void 0,!0);let s=new ree;s.type=e.operation===st.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?st.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new Z7(st.SYSTEM_SCHEMA_NAME,st.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await Fv(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return ln.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=j7();try{o=await Fv(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return ln.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return ln.error("Error creating a job, could not find a unique job id."),t}s.request=e;let u=new see(st.SYSTEM_SCHEMA_NAME,st.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await dee(u)}catch(l){return ln.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let l=`Created a job with type ${s.type} and id ${s.id}`;t.message=l,t.createdJob=s,t.success=!0,ln.trace(l)}return t}a(pee,"addJob");async function See(e){let t=To(e.from_date,To.ISO_8601),r=To(e.to_date,To.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 tee(n,e.hdb_user);try{return await fee(s)}catch(i){throw ln.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(See,"getJobsInDateRange");async function kv(e){if(Ca.isEmptyOrZeroLength(e))return Ca.errorizeMessage("Invalid job ID specified.");let t=new eee(st.SYSTEM_SCHEMA_NAME,st.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await _ee(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return ln.error(n),Ca.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(kv,"getJobById");async function Tee(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Ca.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===st.JOB_STATUS_ENUM.COMPLETE||e.status===st.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=To().valueOf());let t=new nee(st.SYSTEM_SCHEMA_NAME,st.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Eee(t),r}a(Tee,"updateJob")});var zv=T((BEe,Qv)=>{"use strict";var $v=J(),hr=U(),gee=require("moment"),Lf=Bg(),Mf=W(),Yv=qg(),Kv=cf(),Wv=ki(),Ree=Ze(),Aee=ef(),Gg=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Oee(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($v.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if($v.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case hr.JOB_TYPE_ENUM.csv_file_load:await Ms(e,Lf.csvFileLoad);break;case hr.JOB_TYPE_ENUM.csv_url_load:await Ms(e,Lf.csvURLLoad);break;case hr.JOB_TYPE_ENUM.csv_data_load:await Ms(e,Lf.csvDataLoad);break;case hr.JOB_TYPE_ENUM.import_from_s3:await Ms(e,Lf.importFromS3);break;case hr.JOB_TYPE_ENUM.empty_trash:break;case hr.JOB_TYPE_ENUM.export_local:await Ms(e,Kv.export_local);break;case hr.JOB_TYPE_ENUM.export_to_s3:await Ms(e,Kv.export_to_s3);break;case hr.JOB_TYPE_ENUM.delete_files_before:case hr.JOB_TYPE_ENUM.delete_records_before:await Ms(e,Wv.deleteFilesBefore);break;case hr.JOB_TYPE_ENUM.delete_audit_logs_before:await Ms(e,Wv.deleteAuditLogsBefore);break;case hr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Ms(e,Aee.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(Oee,"parseMessage");async function Ms(e,t){try{e.job.status=hr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=gee().valueOf(),await Yv.updateJob(e.job),await bee(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):Mf.error(`There was an error running ${t.name} job with id ${e.job.id}`),Mf.error(n),e.job.message=n,e.job.status=hr.JOB_STATUS_ENUM.ERROR;try{await Yv.updateJob(e.job)}catch(s){throw Mf.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Ms,"runJob");async function bee(e){Mf.trace("launching job thread:",e),Ree.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[hr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(bee,"launchJobThread");Qv.exports={parseMessage:Oee,RunnerMessage:Gg}});var Xv=T((xEe,Jv)=>{"use strict";var kg=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};Jv.exports=kg});var E0=T((qEe,Qg)=>{"use strict";var Bf=jr(),Yg=af(),Uf=Bg(),Us=sd(),Pf=Hi(),Xu=ki(),Nee=iS(),Ju=en(),vf=ES(),kt=HT(),yt=W(),yee=pS(),wee=Rd(),jv=ZS(),Iee=Od(),Cee=eT(),Dee=tT(),Lee=sT(),Mee=oT(),Vg=uT(),Zv=cf(),Uee=sf(),Kg=qg(),q=U(),{hdb_errors:Zu,handleHDBError:ju}=ee(),{HTTP_STATUS_CODES:e0}=Zu,$g=ET(),t0=Hd(),l0=require("util"),Da=Zr(),Pee=Js(),vee=ca(),r0=zv(),n0=fu(),s0=(Vd(),te(Du)),i0=Ir(),o0=ef(),a0=Qd(),{setServerUtilities:Bee}=(Cf(),te(Hg)),{CONTEXT:Hee}=(An(),te(lp)),{_assignPackageExport:xee}=require("../../index"),{transformReq:Fee}=J(),{server:qee}=(jt(),te(Ii)),Gee=wg(),c0=Bf.searchByHash,kee=Bf.searchByValue,Vee=l0.promisify(Bf.search),$ee=l0.promisify(Yg.evaluateSQL),Yee={[q.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[q.OPERATIONS_ENUM.CREATE_TABLE]:!0,[q.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[q.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[q.OPERATIONS_ENUM.DROP_TABLE]:!0,[q.OPERATIONS_ENUM.DROP_SCHEMA]:!0},V=Xv();async function _0(e,t){try{if(e.body.operation!=="read_log"&&(yt.log_level===q.LOG_LEVELS.INFO||yt.log_level===q.LOG_LEVELS.DEBUG||yt.log_level===q.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;yt.info(o)}}catch(n){yt.error(n)}let r=await Gee.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Yee[e.body.operation]&&Pee.setSchemaDataToGlobal(n=>{n&&yt.error(n)}),r}a(_0,"processLocalTransaction");var u0=Wee();Qg.exports={chooseOperation:d0,getOperationFunction:f0,operation:Wg,processLocalTransaction:_0};Bee(Qg.exports);qee.operation=Wg;function d0(e){let t;try{t=f0(e)}catch(s){throw yt.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=Yg.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Yg.checkASTPermissions(e,i);if(o)throw yt.error(`${e0.FORBIDDEN} from operation ${e.operation}`),yt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),ju(new Error,o,Zu.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==q.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==q.OPERATIONS_ENUM.LOGIN&&e.operation!==q.OPERATIONS_ENUM.LOGOUT){let 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=Uee.verifyPerms(i,s);if(o)throw yt.error(`${e0.FORBIDDEN} from operation ${e.operation}`),yt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),ju(new Error,o,Zu.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw ju(s,"There was an error when trying to choose an operation path")}return r}a(d0,"chooseOperation");function f0(e){if(yt.trace(`getOperationFunction with operation: ${e.operation}`),u0.has(e.operation))return u0.get(e.operation);throw ju(new Error,Zu.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Zu.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(f0,"getOperationFunction");xee("operation",Wg);function Wg(e,t){e.hdb_user=this[Hee]?.user,e.bypass_auth=!t;let r=d0(e);return _0({body:e},r)}a(Wg,"operation");async function Kee(e){yt.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[q.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case q.OPERATIONS_ENUM.INSERT:o=await Da.insert(i);break;case q.OPERATIONS_ENUM.UPDATE:o=await Da.update(i);break;case q.OPERATIONS_ENUM.UPSERT:o=await Da.upsert(i);break;case q.OPERATIONS_ENUM.DELETE:o=await Xu.deleteRecord(i);break;default:yt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){yt.info("Invalid operation in transaction"),yt.error(o)}}a(Kee,"catchup");async function ss(e){Fee(e);let t,r;try{r=await Kg.addJob(e),t=r.createdJob,yt.info("addJob result",r);let n=new r0.RunnerMessage(t,e);return await r0.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 yt.error(s),ju(n,s)}}a(ss,"executeJob");function Wee(){let e=new Map;return e.set(q.OPERATIONS_ENUM.INSERT,new V(Da.insert)),e.set(q.OPERATIONS_ENUM.UPDATE,new V(Da.update)),e.set(q.OPERATIONS_ENUM.UPSERT,new V(Da.upsert)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new V(Bf.searchByConditions)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_HASH,new V(c0)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_ID,new V(c0)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_VALUE,new V(kee)),e.set(q.OPERATIONS_ENUM.SEARCH,new V(Vee)),e.set(q.OPERATIONS_ENUM.SQL,new V($ee)),e.set(q.OPERATIONS_ENUM.CSV_DATA_LOAD,new V(ss,Uf.csvDataLoad)),e.set(q.OPERATIONS_ENUM.CSV_FILE_LOAD,new V(ss,Uf.csvFileLoad)),e.set(q.OPERATIONS_ENUM.CSV_URL_LOAD,new V(ss,Uf.csvURLLoad)),e.set(q.OPERATIONS_ENUM.IMPORT_FROM_S3,new V(ss,Uf.importFromS3)),e.set(q.OPERATIONS_ENUM.CREATE_SCHEMA,new V(Us.createSchema)),e.set(q.OPERATIONS_ENUM.CREATE_DATABASE,new V(Us.createSchema)),e.set(q.OPERATIONS_ENUM.CREATE_TABLE,new V(Us.createTable)),e.set(q.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new V(Us.createAttribute)),e.set(q.OPERATIONS_ENUM.DROP_SCHEMA,new V(Us.dropSchema)),e.set(q.OPERATIONS_ENUM.DROP_DATABASE,new V(Us.dropSchema)),e.set(q.OPERATIONS_ENUM.DROP_TABLE,new V(Us.dropTable)),e.set(q.OPERATIONS_ENUM.DROP_ATTRIBUTE,new V(Us.dropAttribute)),e.set(q.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new V(Pf.describeSchema)),e.set(q.OPERATIONS_ENUM.DESCRIBE_DATABASE,new V(Pf.describeSchema)),e.set(q.OPERATIONS_ENUM.DESCRIBE_TABLE,new V(Pf.describeTable)),e.set(q.OPERATIONS_ENUM.DESCRIBE_ALL,new V(Pf.describeAll)),e.set(q.OPERATIONS_ENUM.DELETE,new V(Xu.deleteRecord)),e.set(q.OPERATIONS_ENUM.ADD_USER,new V(Ju.addUser)),e.set(q.OPERATIONS_ENUM.ALTER_USER,new V(Ju.alterUser)),e.set(q.OPERATIONS_ENUM.DROP_USER,new V(Ju.dropUser)),e.set(q.OPERATIONS_ENUM.LIST_USERS,new V(Ju.listUsersExternal)),e.set(q.OPERATIONS_ENUM.LIST_ROLES,new V(vf.listRoles)),e.set(q.OPERATIONS_ENUM.ADD_ROLE,new V(vf.addRole)),e.set(q.OPERATIONS_ENUM.ALTER_ROLE,new V(vf.alterRole)),e.set(q.OPERATIONS_ENUM.DROP_ROLE,new V(vf.dropRole)),e.set(q.OPERATIONS_ENUM.USER_INFO,new V(Ju.userInfo)),e.set(q.OPERATIONS_ENUM.READ_LOG,new V(yee)),e.set(q.OPERATIONS_ENUM.ADD_NODE,new V(wee)),e.set(q.OPERATIONS_ENUM.UPDATE_NODE,new V(jv)),e.set(q.OPERATIONS_ENUM.SET_NODE_REPLICATION,new V(jv)),e.set(q.OPERATIONS_ENUM.REMOVE_NODE,new V(Iee)),e.set(q.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new V(Cee)),e.set(q.OPERATIONS_ENUM.PURGE_STREAM,new V(Dee)),e.set(q.OPERATIONS_ENUM.SET_CONFIGURATION,new V(i0.setConfiguration)),e.set(q.OPERATIONS_ENUM.CLUSTER_STATUS,new V(Lee.clusterStatus)),e.set(q.OPERATIONS_ENUM.CLUSTER_NETWORK,new V(Mee)),e.set(q.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new V(Vg.setRoutes)),e.set(q.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new V(Vg.getRoutes)),e.set(q.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new V(Vg.deleteRoutes)),e.set(q.OPERATIONS_ENUM.EXPORT_TO_S3,new V(ss,Zv.export_to_s3)),e.set(q.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new V(ss,Xu.deleteFilesBefore)),e.set(q.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new V(ss,Xu.deleteFilesBefore)),e.set(q.OPERATIONS_ENUM.EXPORT_LOCAL,new V(ss,Zv.export_local)),e.set(q.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new V(Kg.handleGetJobsByStartDate)),e.set(q.OPERATIONS_ENUM.GET_JOB,new V(Kg.handleGetJob)),e.set(q.OPERATIONS_ENUM.GET_FINGERPRINT,new V($g.getFingerprint)),e.set(q.OPERATIONS_ENUM.SET_LICENSE,new V($g.setLicense)),e.set(q.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new V($g.getRegistrationInfo)),e.set(q.OPERATIONS_ENUM.RESTART,new V(t0.restart)),e.set(q.OPERATIONS_ENUM.RESTART_SERVICE,new V(t0.restartService)),e.set(q.OPERATIONS_ENUM.CATCHUP,new V(Kee)),e.set(q.OPERATIONS_ENUM.SYSTEM_INFORMATION,new V(vee.systemInformation)),e.set(q.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new V(ss,Xu.deleteAuditLogsBefore)),e.set(q.OPERATIONS_ENUM.READ_AUDIT_LOG,new V(Nee)),e.set(q.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new V(n0.createTokens)),e.set(q.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new V(n0.refreshOperationToken)),e.set(q.OPERATIONS_ENUM.LOGIN,new V(s0.login)),e.set(q.OPERATIONS_ENUM.LOGOUT,new V(s0.logout)),e.set(q.OPERATIONS_ENUM.GET_CONFIGURATION,new V(i0.getConfiguration)),e.set(q.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new V(kt.customFunctionsStatus)),e.set(q.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new V(kt.getCustomFunctions)),e.set(q.OPERATIONS_ENUM.GET_COMPONENT_FILE,new V(kt.getComponentFile)),e.set(q.OPERATIONS_ENUM.GET_COMPONENTS,new V(kt.getComponents)),e.set(q.OPERATIONS_ENUM.SET_COMPONENT_FILE,new V(kt.setComponentFile)),e.set(q.OPERATIONS_ENUM.DROP_COMPONENT,new V(kt.dropComponent)),e.set(q.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new V(kt.getCustomFunction)),e.set(q.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new V(kt.setCustomFunction)),e.set(q.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new V(kt.dropCustomFunction)),e.set(q.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new V(kt.addComponent)),e.set(q.OPERATIONS_ENUM.ADD_COMPONENT,new V(kt.addComponent)),e.set(q.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new V(kt.dropCustomFunctionProject)),e.set(q.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new V(kt.packageComponent)),e.set(q.OPERATIONS_ENUM.PACKAGE_COMPONENT,new V(kt.packageComponent)),e.set(q.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new V(kt.deployComponent)),e.set(q.OPERATIONS_ENUM.DEPLOY_COMPONENT,new V(kt.deployComponent)),e.set(q.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new V(o0.readTransactionLog)),e.set(q.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new V(ss,o0.deleteTransactionLogsBefore)),e.set(q.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new V(a0.installModules)),e.set(q.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new V(a0.auditModules)),e.set(q.OPERATIONS_ENUM.GET_BACKUP,new V(Us.getBackup)),e}a(Wee,"initializeOperationFunctionMap")});var xf=T((kEe,p0)=>{"use strict";var zg=U(),Qee=J(),el=W(),{handleHDBError:Jg,hdb_errors:Hf}=ee(),{isMainThread:zee}=require("worker_threads"),{Readable:Jee}=require("stream"),h0=require("os"),Xee=require("util"),jee=IS(),Zee=Xee.promisify(jee.authorize),m0=E0(),{createGzip:ete,constants:tte}=require("zlib");function rte(e){let t=`Found an uncaught exception with message: ${e.message}. ${h0.EOL}Stack: ${e.stack} ${h0.EOL}Terminating ${zee?"HDB":"thread"}.`;console.error(t),el.fatal(t),process.exit(1)}a(rte,"handleServerUncaughtException");function nte(e,t,r){if(el[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:Hf.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(nte,"serverErrorHandler");function ste(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=Jg(new Error,"Invalid JSON.",Hf.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(Qee.isEmpty(e.body.operation)){let n=Jg(new Error,"Request body must include an 'operation' property.",Hf.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(ste,"reqBodyValidationHandler");function ite(e,t,r){let n;e.body.operation!==zg.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==zg.OPERATIONS_ENUM.LOGIN&&e.body.operation!==zg.OPERATIONS_ENUM.LOGOUT?Zee(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{el.warn(s),el.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(Jg(s,i,Hf.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(ite,"authHandler");async function ote(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=m0.chooseOperation(e.body);let s=await m0.processLocalTransaction(e,n);if(s instanceof Jee&&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(ete({level:tte.Z_BEST_SPEED})))}return s}catch(s){throw el.error(s),s}}a(ote,"handlePostRequest");p0.exports={authHandler:ite,handlePostRequest:ote,handleServerUncaughtException:rte,serverErrorHandler:nte,reqBodyValidationHandler:ste}});var R0=T(($Ee,g0)=>{"use strict";var ate=require("fastify-plugin"),{handlePostRequest:S0,authHandler:cte,reqBodyValidationHandler:ute}=xf();async function lte(e){e.decorate("hdbCore",{preValidation:[ute,cte],request:t=>T0(S0(t,response)),requestWithoutAuthentication:(t,r)=>T0(S0(t,r,!0))})}a(lte,"hdbCore");async function T0(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(T0,"convertAsyncIterators");g0.exports=ate(lte)});var b0=T((WEe,O0)=>{"use strict";var KEe=require("fs"),Xg=Z();Xg.initSync();var{CONFIG_PARAMS:A0}=U(),_te=1024*1024*1024;function dte(e){let t=Xg.get(A0.HTTP_TIMEOUT),r=Xg.get(A0.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:_te,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(dte,"getServerOptions");O0.exports=dte});var w0=T((zEe,y0)=>{"use strict";var jg=Z();jg.initSync();var{CONFIG_PARAMS:N0}=U();function fte(){let e=jg.get(N0.HTTP_CORSACCESSLIST),t=jg.get(N0.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(fte,"getCORSOptions");y0.exports=fte});var D0=T((XEe,C0)=>{"use strict";var I0=Z();I0.initSync();var Ete=U();function hte(){return I0.get(Ete.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(hte,"getHeaderTimeoutConfig");C0.exports=hte});var eR={};ke(eR,{customFunctionsServer:()=>Ste,ready:()=>Y0,start:()=>pte});function pte(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Ps||(Ps=$0(t),je.http((await Ps).server));let o=await Ps,c=(0,Zg.dirname)(s),u=(0,Zg.dirname)(n);if(u.startsWith("/")&&(u=u.slice(1)),!L0.has(c)){L0.add(c);try{o.register(gte(c,u))}catch(_){if(_.message==="Root plugin has already booted")Ge.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:Y0}}async function Ste(){try{Ge.info("In Custom Functions Fastify server"+process.cwd()),Ge.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ge.debug(`Custom Functions server process ${process.pid} starting up.`),await Tte();let e=H0.get(x0.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Ps=await $0(e)}catch(r){throw Ge.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ge.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ge.error(`Custom Functions ${process.pid} Error: ${e}`),Ge.error(e),process.exit(1)}}async function Tte(){try{Ge.info("Custom Functions starting configuration."),await F0.setUsersToGlobal(),Ge.info("Custom Functions completed configuration.")}catch(e){Ge.error(e)}}function gte(e,t){return async function(r){try{Ge.info("Custom Functions starting buildRoutes"),Ge.trace("Loading fastify routes folder "+e),(0,M0.existsSync)(e)&&r.register(B0.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Ge.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Ge.error(s.message):s&&Ge.error(s),o()})}catch(n){Ge.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function $0(e){Ge.info("Custom Functions starting buildServer.");let t=(0,q0.default)(e),r=(0,U0.default)(t);r.server.headersTimeout=(0,k0.default)(),r.setErrorHandler(V0.serverErrorHandler);let n=(0,G0.default)();return n&&r.register(P0.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(v0.default),await r.register(mte),await r.after(),ag(r),Ge.info("Custom Functions completed buildServer."),r}function Y0(){if(Ps)return Ps.then?Ps.then(e=>e.ready()):Ps.ready()}var Zg,M0,U0,P0,v0,B0,H0,x0,Ge,mte,F0,q0,G0,k0,V0,Ps,L0,K0=Oe(()=>{Zg=require("path"),M0=require("fs"),U0=x(require("fastify")),P0=x(require("@fastify/cors")),v0=x(gg()),B0=x(require("@fastify/autoload")),H0=x(Z()),x0=x(U()),Ge=x(W()),mte=x(R0()),F0=x(en()),q0=x(b0()),G0=x(w0()),k0=x(D0()),V0=x(xf());ha();jt();L0=new Set;a(pte,"start");a(Ste,"customFunctionsServer");a(Tte,"setUp");a(gte,"buildRouteFolder");a($0,"buildServer");a(Y0,"ready")});var tR={};ke(tR,{start:()=>Rte});function Rte(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,X0.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){Q0||(Q0=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=W0.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,z0.default)(s,(0,J0.realpathSync)(o))}}return i(s)},{runFirst:!0})),W0.set(r,n)}}}var z0,J0,X0,W0,Q0,j0=Oe(()=>{z0=x(require("send")),J0=require("fs"),X0=x(require("serve-static")),W0=new Map;a(Rte,"start")});function bte(e,t=1,r){if(rR++,(0,go.startWorker)("server/threads/threadServer.js",{name:Gf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function u(_){_.type===Gf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",u),o(n))}a(u,"onMessage"),n.on("message",u),n.on("error",c)});Ote.push(s),await s,La.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=qf.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=La.indexOf(n);o>-1&&La.splice(o,1)}if(a(i,"removeWorker"),Ma){let o=Ma;Ma=[];for(let c of o)rB[c.localPort](null,c)}}}),r){let n=setInterval(()=>{nR?nR=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,go.shutdownWorkers)(),rR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function nB(e=0,t){if(typeof e=="string")try{(0,kf.existsSync)(e)&&(0,kf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Nte:r=yte(t):r=iR;let n=(0,Ua.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=rB[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),nR=!0,r(o,(c,u)=>{if(!c){if(Z0){let l=o._socket||new Ua.Socket({handle:o,writable:!0,readable:!0});Z0.deliverSocket(l,e,u),l.resume()}else rR>0?(Ma.length===0&&setTimeout(()=>{Ma.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,Ma.push(o)):(console.log("start up a dynamic thread to handle request"),bte(0));Br(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new Ua.Socket({handle:o,writable:!0,readable:!0});Dte(l,c,e)}Br(!0,"socket-routed")})};let s=Xc();sR.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 iR(e,t){let r,n=0;for(let s of La){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Ff)return Ff=i,t(r);n=i}Ff=0,t(r)}function Nte(e,t){let r={};e.getpeername(r);let n=r.address,s=Pa.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);iR(e,o=>{Pa.set(n,{worker:o,lastUsed:i}),t(o)})}function yte(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Ua.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let u=o.toString("latin1").match(t)?.[1],_=Pa.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,s(_.worker);iR(n,d=>{Pa.set(u,{worker:d,lastUsed:l}),s(d,o)})})}a(r,"findByHeaderAffinity")}function Ite(){Ff=0;for(let e of La)e.expectedIdle=e.recentELU.idle+wte,e.requests=1;La.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Dte(e,t,r){let n=Cte++;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(),qf.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")),qf.delete(n)),s.event=="destroy"&&(e.destroy(),qf.delete(n))})}var go,Ua,Gf,sR,kf,tB,Ate,La,Ma,rB,Z0,rR,Ote,nR,Ff,eB,Pa,wte,qf,Cte,sB=Oe(()=>{go=x(Ze()),Ua=require("net"),Gf=x(U()),sR=x(W()),kf=require("fs");As();tB=require("worker_threads"),Ate=x(Vi()),La=[],Ma=[],rB=[],rR=0,Ote=[];tB.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(bte,"startHTTPWorker");a(nB,"startSocketServer");Ff=0;a(iR,"findMostIdleWorker");eB=36e5,Pa=new Map;a(Nte,"findByRemoteAddressAffinity");a(yte,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Pa)r.lastUsed+eB<e&&Pa.delete(t)},eB).unref();wte=1e3;a(Ite,"updateWorkerIdleness");(0,go.setMonitorListener)(Ite);qf=new Map,Cte=1;a(Dte,"proxySocket")});var uR={};ke(uR,{Request:()=>oR,createReuseportFd:()=>Vf});var iB,oR,aR,cR,Vf,$f=Oe(()=>{iB=require("os"),oR=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 cR(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 aR(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},aR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},cR=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,iB.platform)()!="win32"&&(Vf=require("node-unix-socket").createReuseportFd)});var uB=T((dhe,cB)=>{"use strict";var Lte=require("cluster"),Ro=Z();Ro.initSync();var aB=U(),ahe=require("util"),vs=W(),che=require("fs"),Mte=require("fastify"),uhe=Xc(),Ute=require("@fastify/cors"),Pte=require("@fastify/compress"),vte=require("@fastify/static"),Bte=gg(),Hte=require("path"),{PACKAGE_ROOT:xte}=U(),Fte=Js(),qte=J(),Gte=en(),kte=Vi(),{server:Vte}=(jt(),te(Ii)),{node_request_key:lhe}=($f(),te(uR)),{authHandler:$te,handlePostRequest:Yte,serverErrorHandler:Kte,reqBodyValidationHandler:Wte}=xf(),_he=require("net"),{registerContentHandlers:Qte}=(ha(),te(YP)),zte=6e4,Jte=1024*1024*1024,Xte="TRUE",{CONFIG_PARAMS:tl}=aB,va;cB.exports={hdbServer:oB,start:oB};async function oB(e){try{vs.info("In Fastify server"+process.cwd()),vs.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),vs.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Lte.isMaster,await jte();let t=e.securePort>0;va=Zte(t),await va.ready(),e||(e={}),e.isOperationsServer=!0;try{Vte.http(va.server,e),va.server.closeIdleConnections||await va.listen({port:0,host:"::"})}catch(r){throw va.close(),vs.error(r),vs.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),vs.fatal(t),process.exit(1)}}a(oB,"operationsServer");async function jte(){vs.trace("Configuring HarperDB process."),Fte.setSchemaDataToGlobal(),await Gte.setUsersToGlobal(),await kte.getLicense()}a(jte,"setUp");function Zte(e){vs.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=ere(e),r=Mte(t);r.server.headersTimeout=rre(),r.setErrorHandler(Kte);let n=tre();n&&r.register(Ute,n),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Bte),r.register(Pte),r.register(vte,{root:Hte.join(xte,"studio/build-local")}),Qte(r);let s=Ro.get(aB.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!qte.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Wte,$te],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Yte(i,o)}),r.get("/health",()=>"HarperDB is running."),vs.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Zte,"buildServer");function ere(e){let t=Ro.get(tl.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ro.get(tl.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Jte,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(ere,"getServerOptions");function tre(){let e=Ro.get(tl.OPERATIONSAPI_NETWORK_CORS),t=Ro.get(tl.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Xte)&&(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(tre,"getCORSOpts");function rre(){return Ro.get(tl.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??zte}a(rre,"getHeaderTimeoutConfig")});var TB=T((phe,SB)=>{"use strict";var{decode:nre}=require("msgpackr"),{isMainThread:Ehe,parentPort:sre,threadId:hhe}=require("worker_threads"),_R=At(),Bs=tt(),ire=U(),mi=W(),lB=Z(),dB=U();Ze();var ore=ps(),{recordAction:are,recordActionBinary:cre}=(As(),te(tu)),{publishToStream:ure}=_R,{ConsumerEvents:lre}=require("nats"),mhe={durable:Bs.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Bs.WORK_QUEUE_CONSUMER_NAMES.deliver_group},_re,dre,fre,fB,EB;SB.exports={initialize:dR,workQueueListener:pB,setSubscription:Ere,setIgnoreOrigin:mre,getDatabaseSubscriptions:hre};async function dR(){EB=!0,mi.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await _R.getNATSReferences();_re=e,dre=e.info.server_name,fre=t,fB=r}a(dR,"initialize");var Kf=new Map;function Ere(e,t,r){let n=Kf.get(e);n||Kf.set(e,n=new Map),n.set(t,r),EB||dR().then(pB)}a(Ere,"setSubscription");function hre(){return Kf}a(hre,"getDatabaseSubscriptions");var hB;function mre(e){hB=e}a(mre,"setIgnoreOrigin");var mB=100,_B=new Array(mB),Yf=0;async function pB(){let e=await fB.consumers.get(Bs.WORK_QUEUE_CONSUMER_NAMES.stream_name,Bs.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(sre?.on("message",async n=>{let{type:s}=n;s===dB.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===lre.HeartbeatsMissed){let s=n.data;mi.trace(`${s} clustering ingest consumer heartbeats missed`),s===2&&(mi.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let n of r)await _B[Yf],_B[Yf]=pre(n).catch(s=>{mi.error(s)}),++Yf>=mB&&(Yf=0)}catch(n){mi.error("Error consuming clustering ingest, restarting consumer",n)}_R.clearClientCache(),await dR()}}a(pB,"workQueueListener");async function pre(e){let t=nre(e.data);are(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,n=!1,s=lB.get(ire.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Bs.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Bs.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Bs.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!hB),cre(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Bs.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;mi.trace("processing message:",o,c,_,(l?"records: "+l.map(R=>R?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),mi.trace(`messageProcessor nats msg id: ${e.headers.get(Bs.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:O}=f||{},g=Kf.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(l.length===1&&!u)g.send({type:lR(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:O});else{let R=l.map((B,H)=>({type:lR(o),value:B,expiresAt:E,id:d?.[H],table:_}));for(;u;)R.push({type:lR(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;g.send({type:"transaction",writes:R,table:_,timestamp:p,onCommit:h,user:S,nodeName:O})}lB.get(dB.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&ure(e.subject.split(".").slice(0,-1).join("."),ore.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){mi.error(o)}e.ack()}a(pre,"messageProcessor");function lR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(lR,"convertOperation")});var SR={};ke(SR,{disableNATS:()=>Tre,publishToStream:()=>Xf,setNATSReplicator:()=>fR,setPublishToStream:()=>gre,setSubscription:()=>pR,start:()=>Sre});function Sre(){Qf.default.get(zf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Are()}function Tre(e=!0){bB=e}function gre(e,t){Xf=e,pR=t}function Are(){if(bB||process.env._DISABLE_NATS)return;let e=In(),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];fR(s,r,i)}}TR((r,n)=>{fR(r.tableName,r.databaseName,r),n&&yB(r)}),!gB&&(gB=!0)}function fR(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 vt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Me],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Me]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Me],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Me],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Me]})}static defineSchema(i){yB(i)}static subscribe(){let i=new Rn;return pR(t,e,i),i}static subscribeOnThisThread(i){return i<Rre}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 Wf(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=NB;return i}a(n,"getNATSTransaction")}function yB(e){let t=Qf.default.get(zf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Xf(`${hR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,mR.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 RB,hR,mR,AB,OB,Qf,zf,Jf,bB,Xf,pR,Rre,NB,gB,Wf,ER,wB=Oe(()=>{be();An();RB=x(At()),hR=x(tt()),mR=x(ps());fc();AB=x(TB()),OB=x(Cr()),Qf=x(Z()),zf=x(U()),Jf=x(W());a(Sre,"start");a(Tre,"disableNATS");Xf=RB.publishToStream,pR=AB.setSubscription;a(gre,"setPublishToStream");Rre=2;a(Are,"assignReplicationSource");a(fR,"setNATSReplicator");a(yB,"publishSchema");Wf=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=Qf.default.get(zf.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,f=l.operation=="put"?"upsert":l.operation;u||(Jf.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&n.push(Xf(`${hR.SUBJECT_PREFIXES.TXN}.${s}.${u.table}`,(0,mR.createNatsTableStreamName)(s,u.table),void 0,u)?.catch(l=>{throw Jf.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(n)}},ER=class extends Wf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,OB.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};NB=new ER});var GB=T(Ao=>{"use strict";var{isMainThread:Ore,parentPort:nl,threadId:jf}=require("worker_threads"),{Socket:bre,createServer:Nre}=require("net"),{createServer:yre,IncomingMessage:wre}=require("http"),{createServer:Ire}=require("https"),{readFileSync:Ba,unlinkSync:IB,existsSync:Cre}=require("fs"),_n=W(),He=Z(),mr=U(),{server:tE}=(jt(),te(Ii)),{WebSocketServer:Dre}=require("ws"),{createServer:Lre}=require("tls"),{getTicketKeys:Mre,restartNumber:Ure,getWorkerIndex:CB}=Ze(),{Headers:PB}=(Fd(),te(hU)),{recordAction:rl,recordActionBinary:Pre}=(As(),te(tu)),{Request:vB,createReuseportFd:DB}=($f(),te(uR)),{checkMemoryLimit:vre}=Vi(),BB=require("tls"),LB=BB.createSecureContext;BB.createSecureContext=function(e){if(!e.cert||!e.key)return LB(e);let t={...e};delete t.key,delete t.cert;let r=LB(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){Ure<=1&&_n.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:bhe,CONFIG_PARAMS:Bre}=mr;He.initSync();var Hre=He.get(Bre.HTTP_SESSIONAFFINITY),is={};Ao.registerServer=bR;Ao.httpServer=NR;Ao.deliverSocket=OR;Ao.startServers=HB;Ao.when_components_loaded=null;tE.http=NR;tE.request=Gre;tE.socket=kre;tE.ws=Vre;var gR={},Zf={},xre,pi={},eE={},Fre=[],RR=[];function HB(){return Ao.when_components_loaded=yR().loadRootComponents(!0).then(()=>{nl?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)OR(n,r,s);else if(t.requestId)qre(t);else if(t.type===mr.ITC_EVENT_TYPES.SHUTDOWN){_n.trace("received shutdown request",jf);for(let i in is){let o=is[i],c;if(o.closeIdleConnections){let _=Object.getOwnPropertySymbols(o).find(f=>f.description.includes("connections")),l=0,d=setInterval(()=>{l++;let f=l>=100,E=o[_][f?"all":"idle"]();if(E.length===0){f&&clearInterval(d);return}l===1?_n.info(`Closing ${E.length} idle connections`):f&&_n.warn(`Forcefully closing ${E.length} active connections`);for(let h=0,p=E.length;h<p;h++){let S=E[h].socket;S._httpMessage&&!S._httpMessage.finished&&!f||(f?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
26
+ `},compressible:!1,q:.8});Pt.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()}});QP={type:"application/json",serializeStream:pc,serialize:Ku,deserialize:W9,q:.8};Pt.set("*/*",QP);Pt.set("",QP);a(W9,"tryJSONParse");a(ug,"registerContentHandlers");Q9=require("fastify-plugin"),z9=Q9(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=_f(n.raw);s.type(c),s.serializer(function(u){return(o.serializeStream||o.serialize)(u,{headers:{set:(_,l)=>{s.header(_,l)}}})})}),r()},{name:"content-type-negotiation"});a(_f,"findBestSerializer");VP=ig.default.get(og.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(df,"serialize");a(di,"serializeMessage");a(J9,"streamToBuffer");a(po,"getDeserializer");a($P,"deserializerUnknownType");a(X9,"transformIterable")});function dg(e,t,r,n,s,i,o,c){let u=e[0];if(t==="or"){let d=_(u);for(let E=1;E<e.length;E++){let h=e[E],p=_(h);d=d.concat(p)}let f=new Set;return d.filter(E=>{let h=E.key??E;return f.has(h)?!1:(f.add(h),!0)})}else{let d=_(u),f=l(e.slice(1),!0,u.estimated_count);return f.length>0?o(d,f):d}function _(d){return d.conditions?dg(d.conditions,d.operator,r,n,s,i,o,c):ya(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(_,"executeCondition");function l(d,f,E){return d.map((h,p)=>{if(h.conditions){let R=h.operator==="or",g=l(h.conditions,!R,E);return R?(P,H)=>g.some(v=>v(P,H)):(P,H)=>g.every(v=>v(P,H))}let S=(h.attribute||h[0])===r.primaryKey,O=Eg(h,r,i,c,S,E);return f&&p<d.length-1&&E&&(E=o7(r.primaryStore,h.estimated_count,E)),O}).filter(Boolean)}a(l,"mapConditionsToFilters")}function ya(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,u=e.comparator;if(Array.isArray(o)){let R=o[0],g=Ls(n.attributes,R);if(g.relationship){if(o.length<2)throw new qr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let P=g.definition?.tableClass||g.elements?.definition?.tableClass,H=new Map,v=ya({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,P,s,H);if(g.relationship.to){i[o[0]]=H;let L=!!Ls(P.attributes,g.relationship.to)?.elements;v=r7(v,g,P.primaryStore,L,H)}if(g.relationship.from){let L=a($=>ya({attribute:g.relationship.from,value:$},t,r,n,s,H),"searchEntry");g.elements?(i[o[0]]=H,v=n7(v,g,P.primaryStore,H,L)):v=v.flatMap(L)}return v}else if(o.length===1)o=o[0];else throw new qr.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,f;c instanceof Date&&(c=c.getTime());let E;switch(fg[u]||u){case"lt":_=!0,l=c;break;case"le":_=!0,l=c,d=!0;break;case"gt":_=c,f=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,l=c.slice(0),l[l.length-1]=ss.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),l=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),l=c[1],l instanceof Date&&(l=l.getTime()),d=!0;break;case"equals":case void 0:_=c,l=c,d=!0;break;case"ne":if(c===null){_=c,f=!0;break}case"sort":case"contains":case"ends_with":_=!0,E=!0;break;default:throw new qr.ClientError(`Unknown query comparator "${u}"`)}if(r){let R=_;_=l,l=R,R=!f,f=!d,d=R}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===!1&&!p)throw new qr.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&E)throw new qr.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(p?.isIndexing)throw new qr.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!p.indexNulls)throw new qr.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(S=Eg(e),!S)throw new qr.ClientError(`Unknown search operator ${e.comparator}`)}let O={start:_,end:l,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let R=p.getRange(O).map(S?function({key:g,value:P}){return this.isSync?P&&S(P)?g:hi.SKIP:new Promise((H,v)=>setImmediate(()=>{try{H(P&&S(P)?g:hi.SKIP)}catch(L){v(L)}}))}:g=>g.value==null?hi.SKIP:g);return R.hasEntries=!0,R}else return p?p.getRange(O).map(S?function({key:R,value:g}){return this.isSync?S({[o]:R})?g:hi.SKIP:new Promise((P,H)=>setImmediate(()=>{try{P(S({[o]:R})?g:hi.SKIP)}catch(v){H(v)}}))}:({value:R})=>R):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:R,value:g}){return this.isSync?g&&S(g)?R:hi.SKIP:new Promise((P,H)=>setImmediate(()=>{try{P(g&&S(g)?R:hi.SKIP)}catch(v){H(v)}}))})}function Ls(e,t){if(Array.isArray(t))if(t.length>1){let r=Ls(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?Ls(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 r7(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;s.hasMappings=!0;let o;return{next(){if(!i){let u=t.relationship.to,_=a((l,d)=>{let f=l;Array.isArray(l)&&(f=Mn(l),o=!0);let E=s.get(f);E?E.push(d):s.set(f,E=[d]),l!==f&&(E.key=l)},"add_entry");for(let l of e){let d=l.value??r.get(l.key??l),f=d?.[u];if(f!=null&&!s.filters?.some(E=>!E(d)))if(n)for(let E=0;E<f.length;E++)_(f[E],l);else _(f,l)}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 n7(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let u;if(o)for(;u=o.next(),!u.done;){let _=Mn(u.value);if(!c.has(_))return c.add(_),u}if(!i){let _=new Map;n.fromRecord=l=>l[t.relationship.from]?.filter?.(d=>_.has(Mn(d)));for(let l of e){if(n.filters){let d=r.get(l);if(n.filters.some(f=>!f(d)))continue}_.set(Mn(l),l)}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 Eg(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,u=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let l=c[0],d=Ls(t.attributes,l),f=d.definition?.tableClass||d.elements.definition?.tableClass,E=n?.[l],h=Eg({attribute:c.length>2?c.slice(1):c[1],value:u,comparator:o},f,r,E?.[l]?.joined,c[1]===f.primaryKey,i);if(!h)return;if(E){E.filters||(E.filters=[]),E.filters.push(h);return}let p=t.propertyResolvers?.[l],S,O=a((R,g)=>{let P,H;if(p){if(p.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let L of h.idFilter.idSet)e={attribute:p.from,value:L};S=_(p.from,h.idFilter,!0,!0)}else S=_(p.from,h.idFilter,!1,!0);let v=S(R);return S.idFilter&&(O.idFilter=S.idFilter),v}H=p(R,r,g),P=H?.value}else P=R[l];return P?Array.isArray(P)?P.some(h):h(P,H):!1},"recordFilter");return O}}switch(u instanceof Date&&(u=u.getTime()),fg[o]||o){case lg.SEARCH_TYPES.EQUALS:case void 0:return _(c,l=>l===u,!0);case"contains":return _(c,l=>l?.toString().includes(u));case"ends_with":return _(c,l=>l?.toString().endsWith(u));case"starts_with":return _(c,l=>typeof l=="string"&&l.startsWith(u),!0);case"prefix":return Array.isArray(u)?u[u.length-1]==null&&(u=u.slice(0,-1)):u=[u],_(c,l=>{if(!Array.isArray(l))return!1;for(let d=0,f=u.length;d<f;d++)if(l[d]!==u[d])return!1;return!0},!0);case"between":return u[0]instanceof Date&&(u[0]=u[0].getTime()),u[1]instanceof Date&&(u[1]=u[1].getTime()),_(c,l=>(0,ss.compareKeys)(l,u[0])>=0&&(0,ss.compareKeys)(l,u[1])<=0,!0);case"gt":return _(c,l=>(0,ss.compareKeys)(l,u)>0);case"ge":return _(c,l=>(0,ss.compareKeys)(l,u)>=0);case"lt":return _(c,l=>(0,ss.compareKeys)(l,u)<0);case"le":return _(c,l=>(0,ss.compareKeys)(l,u)<=0);case"ne":return _(c,l=>(0,ss.compareKeys)(l,u)!==0);case"sort":return()=>!0;default:throw new qr.ClientError(`Unknown query comparator "${o}"`)}function _(l,d,f,E){let h;f=f&&!s&&t?.indices[l]&&i>3,f&&(e.estimated_count==null&&Ef(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(f=!1));let p=0,S=3;function O(R){let g=R[l],P;if(typeof g!="object"||!g||E?P=d(g):Array.isArray(g)?P=g.some(d):g instanceof Date&&(P=d(g.getTime())),f&&(S++,!P&&!O.idFilter&&++p/S*(i-S)>h)){let H=ya(e,r.transaction.getReadTxn(),!1,t).map(Mn),v=new Set(H);O.idFilter=L=>v.has(Mn(L)),O.idFilter.idSet=v}return P}return a(O,"recordFilter"),s&&(O.idFilter=d),O}a(_,"attributeComparator")}function Ef(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/Ds(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=fg[n]||n,n===lg.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=Ls(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=Ef(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),u=e.indices[i.relationship.from];r.estimated_count=c+(u?c*Ds(e.indices[i.relationship.from])/(Ds(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=Ds(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=e7*Ds(e.primaryStore)+1:n==="between"?r.estimated_count=Z9*Ds(e.primaryStore)+1:n==="sort"?r.estimated_count=Ds(e.primaryStore)+1:r.estimated_count=j9*Ds(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function hf(e){if(e)if(mi=e,ba.lastIndex=0,s7.test(e))try{let t=Qu(new Na,"");if(pr!==mi.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 '${mi}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Qu(e,t){let r=ba,n,s,i,o,c,u=decodeURIComponent,_;for(;n=r.exec(mi);){pr=r.lastIndex;let[,l,d]=n;if(o){if(l)throw new SyntaxError(`expected operator, but encountered '${l}'`);o=!1,c=!1}else c=!0;let f;switch(d){case"=":if(s){if(l.length<=2)i=l;else throw new SyntaxError(`invalid FIQL operator ${l}`);u=JP}else{if(u=decodeURIComponent,i="equals",!l)throw new SyntaxError("attribute must be specified before equality comparator");s=zu(l)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=t7[d],u=_g[i]?JP:decodeURIComponent,!l)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=zu(l);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:u(l)};i==="eq"&&XP(h,l),ff(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(zu(l)),s=void 0;break;case"(":ba.lastIndex=pr;let E=Qu(l?[]:new Na,")");switch(l){case"":ff(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=jP(E);break;default:throw new SyntaxError(`unknown query function call ${l}`)}mi[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(!l)throw new SyntaxError("property sets must have a defined parent property name");ba.lastIndex=pr,f=Qu([],"}"),f.name=l,e.push(f),mi[pr]===","?r.lastIndex=++pr:o=!0;break;case"[":ba.lastIndex=pr,l?(f=Qu(new Na,"]"),f.name=l):f=Qu(e.conditions?new Na:[],"]"),e.conditions?(ff(e,_),e.conditions.push(f),s=null):e.push(f),mi[pr]===","?r.lastIndex=++pr:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let h={comparator:i||"equals",attribute:s,value:u(l)};i==="eq"&&XP(h,l),ff(e,_),e.conditions.push(h)}else if(l)throw new SyntaxError("no attribute or comparison specified")}else(l||e.length>0&&c)&&e.push(zu(l));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?i7:ba,r.lastIndex=pr),pr===mi.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function ff(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 zu(e){return e.indexOf(".")>-1?e.split(".").map(zu):decodeURIComponent(e)}function JP(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(decodeURIComponent(r));if(t==="string")return decodeURIComponent(r);throw new qr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function XP(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new qr.ClientError("wildcard can only be used at the end of a string")}function jP(e){let t=ZP(e[0]);return e.length>1&&(t.next=jP(e.slice(1))),t}function ZP(e){if(Array.isArray(e)){let t=ZP(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 Mn(e){return Array.isArray(e)?e.join("\0"):e}function Ds(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function o7(e,t,r){return t*r/Ds(e)}var qr,lg,ss,hi,j9,Z9,e7,t7,_g,fg,s7,ba,i7,pr,mi,Na,mf=Re(()=>{qr=x(re()),lg=x(_t()),ss=require("ordered-binary"),hi=require("lmdb"),j9=.3,Z9=.1,e7=.05,t7={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},_g={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(dg,"executeConditions");a(ya,"searchByIndex");a(Ls,"findAttribute");a(r7,"joinTo");a(n7,"joinFrom");fg={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(Eg,"filterByType");a(Ef,"estimateCondition");s7=/[()[\]|!<>.]|(=\w*=)/,ba=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,i7=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(hf,"parseQuery");a(Qu,"parseBlock");a(ff,"assignOperator");a(zu,"decodeProperty");a(JP,"typedDecoding");a(XP,"wildcardDecoding");a(jP,"toSortObject");a(ZP,"toSortEntry");Na=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(Mn,"flattenKey");a(Ds,"estimatedEntryCount");a(o7,"intersectionEstimate")});function sv(e){let t={openapi:a7,info:{title:"HarperDB HTTP REST interface",version:(0,nv.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:u}=n.Resource;if(c=c??"id",!c)continue;let _={},l=[];if(o)for(let{type:g,name:P,elements:H,relationship:v,definition:L}of o){if(v)g==="array"?_[P]={type:"array",items:{$ref:pi+H.type}}:_[P]={$ref:pi+g};else{let $=L??H?.definition;if($){if(!t.components.schemas[$.type]){let Y={};$.properties.forEach(z=>{Y[z.name]=new Sg(hg[z.type],z.type)}),t.components.schemas[$.type]=new rv(Y)}g==="array"?_[P]={type:"array",items:{$ref:pi+$.type}}:_[P]={$ref:pi+$.type}}else g==="array"?H.type==="Any"||H.type=="ID"?_[P]={type:"array",items:{format:H.type}}:_[P]={type:"array",items:new Sg(hg[H.type],H.type)}:g==="Any"||g=="ID"?_[P]={format:g}:_[P]=new Sg(hg[g],g)}l.push(new Tg(P,"query",_[P]))}let d=Object.keys(_),f=new Tg(c,"path",{format:"ID"});f.required=!0,f.description="primary key of record";let E=new Tg("property","path",{enum:d});E.required=!0,t.components.schemas[i]=new rv(_);let h=u.post!==Resource.prototype.post||u.update,p=typeof u.put=="function",S=typeof u.get=="function",O=typeof u.delete=="function",R="/"+s+"/";h&&(t.paths[R]={},t.paths[R].post=new c7(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[R]||(t.paths[R]={}),t.paths[R].get=new mg(l,r,{200:new pg({$ref:pi+i})},"search for records by the specified property name and value pairs")),O&&(t.paths[R]||(t.paths[R]={}),t.paths[R].delete=new tv(l,r,"delete all the records that match the provided query",{204:new ev})),R="/"+s+"/{"+c+"}",S&&(t.paths[R]={},t.paths[R].get=new mg([f],r,{200:new pg({$ref:pi+i})},"retrieve a record by its primary key")),p&&(t.paths[R]||(t.paths[R]={}),t.paths[R].put=new u7([f],r,i,"create or update the record with the URL path that maps to the record's primary key")),O&&(t.paths[R]||(t.paths[R]={}),t.paths[R].delete=new tv([f],r,"delete a record with the given primary key",{204:new ev})),S&&E.schema.enum.length>0&&(R="/"+s+"/{"+c+"}.{property}",t.paths[R]={},t.paths[R].get=new mg([f,E],r,{200:new pg({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function c7(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:pi+e}}}},this.security=t,this.responses={200:{description:gg,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function mg(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function pg(e){this.description=gg,this.content={"application/json":{schema:e}}}function ev(){this.description="successfully processed request, no content returned to client"}function u7(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:pi+r}}}},this.responses={200:{description:gg}}}function tv(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function rv(e){this.type="object",this.properties=e}function Sg(e,t){this.type=e,this.format=t}function Tg(e,t,r){this.name=e,this.in=t,this.schema=r}var nv,a7,hg,pi,gg,iv=Re(()=>{nv=x(Sd()),a7="3.0.3",hg={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},pi="#/components/schemas/",gg="successful operation";a(sv,"generateJsonApi");a(c7,"Post");a(mg,"Get");a(pg,"Response200");a(ev,"Response204");a(u7,"Put");a(tv,"Delete");a(rv,"ResourceSchema");a(Sg,"Type");a(Tg,"Parameter")});var Sf={};$e(Sf,{start:()=>d7});async function _7(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&hf(e);let s=new _i;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==ov){let h=pf.getMatch(i);if(!h)return t(e);e.handlerPath=h.path,o={url:h.relativeURL,async:!0},c=h.Resource}let u=r["cache-control"];if(u){u=u.toLowerCase();let h=u.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),u.includes("only-if-cached")&&(e.onlyIfCached=!0),u.includes("no-cache")&&(e.noCache=!0),u.includes("no-store")&&(e.noCacheStore=!0),u.includes("stale-if-error")&&(e.staleIfError=!0),u.includes("must-revalidate")&&(e.mustRevalidate=!0)}let _=await ze(e,()=>{if(n==="POST"||n==="PUT"||n==="PATCH"||n==="QUERY")try{e.data=po(r["content-type"],!0)(e.body)}catch(h){throw new wa.ClientError(h,400)}if(e.authorize=!0,i===ov&&n==="GET"){if(e?.user?.role?.permission?.super_user)return sv(pf);throw new wa.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 wa.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new wa.ServerError(`Method ${n} is not recognized`,501)}}),l=200,d;if(_==null)l=n==="GET"||n==="HEAD"?404:204,Rg.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){l7[0]=d;let h=String.fromCharCode(34,(kt[0]&63)+62,(kt[0]>>6)+(kt[1]<<2&63)+62,(kt[1]>>4)+(kt[2]<<4&63)+62,(kt[2]>>2)+62,(kt[3]&63)+62,(kt[3]>>6)+(kt[4]<<2&63)+62,(kt[4]>>4)+(kt[5]<<4&63)+62,(kt[5]>>2)+62,(kt[6]&63)+62,(kt[6]>>6)+(kt[7]<<2&63)+62,34),p=r["if-none-match"];p&&h==p?(_?.onDone&&_.onDone(),l=304,_=void 0):s.setIfNone("ETag",h),Rg.lastModified&&s.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(l=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let f={status:l,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=df(_,e,f),n==="HEAD"&&(f.body=void 0)),f}catch(i){i.statusCode?i.statusCode===500?So.warn(i):So.info(i):So.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=df(i.contentType?i:i.toString(),e,o),o}}function d7(e){Rg=e,!av&&(av=!0,pf=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return _7(t,r)}),e.server.ws(async(t,r,n)=>{Ju++;let s=new An;cv||(cv=!0,ru(l=>{Ju>0&&l.push({metric:"ws-connections",connections:Ju,byThread:!0})}));let i;t.on("error",l=>{i=!0,So.warn(l)});let o;t.on("message",a(function(d){o||(o=po(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{Ju--,rn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let u=r.url.slice(1),_=pf.getMatch(u);if(rn(!!_,"connection","ws","connect"),!_)t.send(di(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,vr(h=>({count:h.count,total:Ju}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await ze(r,()=>d.connect(l,s,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=di(E.value,r);t.send(h),vr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var So,wa,kt,l7,Rg,ov,av,pf,cv,Ju,uv=Re(()=>{pa();Os();So=x(W()),wa=x(re());mf();hc();ji();Uu();iv();kt=new Uint8Array(8),l7=new Float64Array(kt.buffer,0,1),Rg={},ov="openapi";a(_7,"http");Ju=0;a(d7,"start")});var Ag=T((SEe,lv)=>{var{recordAction:Tf,recordActionBinary:f7}=(Os(),ne(nu)),E7=require("fastify-plugin"),h7=200;lv.exports=E7(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(),u=s.request.routeOptions,_,l,d;u.config?.isOperation?(_=n.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),Tf(o,"duration",_,d,l),f7(s.raw.statusCode<400,"success",_,d,l);let f=h7;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Tf(performance.now()-c,"transfer",_,d,l),Tf(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Tf(f,"bytes-sent",_,d,l));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var Ig=T((REe,Ev)=>{var Of=require("clone"),bf=je(),m7=J(),Rf=M(),TEe=W(),Og=require("fs"),Ng=require("joi"),{string:Af}=Ng.types(),{hdb_errors:p7,handleHDBError:gf}=re(),{HDB_ERROR_MSGS:gEe,HTTP_STATUS_CODES:bg}=p7,{common_validators:Ia}=Yn(),_v=" is required",S7=["insert","update","upsert"],yg={database:{presence:!1,format:Ia.schema_format,length:Ia.schema_length},schema:{presence:!1,format:Ia.schema_format,length:Ia.schema_length},table:{presence:!0,format:Ia.schema_format,length:Ia.schema_length},action:{inclusion:{within:S7,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},T7={schema:Af.required(),table:Af.required(),action:Af.valid("insert","update","upsert")},{AWS_ACCESS_KEY:g7,AWS_SECRET:R7,AWS_BUCKET:A7,AWS_FILE_KEY:O7,REGION:b7}=Rf.S3_BUCKET_AUTH_KEYS,N7={s3:{presence:!0},[`s3.${g7}`]:{presence:!0,type:"String"},[`s3.${R7}`]:{presence:!0,type:"String"},[`s3.${A7}`]:{presence:!0,type:"String"},[`s3.${O7}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${b7}`]:{presence:!0,type:"String"}},dv=Of(yg);dv.data.presence={message:_v};var fv=Of(yg);fv.file_path.presence={message:_v};var y7=Object.assign(Of(yg),N7),wg=Of(T7);wg.csv_url=Af.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();wg.passthrough_headers=Ng.object();function w7(e){let t=bf.validateObject(e,dv);return Nf(e,t)}a(w7,"dataObject");function I7(e){let t=bf.validateBySchema(e,Ng.object(wg));return Nf(e,t)}a(I7,"urlObject");function C7(e){let t=bf.validateObject(e,fv);return Nf(e,t)}a(C7,"fileObject");function D7(e){let t=bf.validateObject(e,y7);return Nf(e,t)}a(D7,"s3FileObject");function Nf(e,t){if(!t){let r=m7.checkGlobalSchemaTable(e.schema,e.table);if(r)return gf(new Error,r,bg.BAD_REQUEST);if(e.operation===Rf.OPERATIONS_ENUM.CSV_FILE_LOAD)try{Og.accessSync(e.file_path,Og.constants.R_OK|Og.constants.F_OK)}catch(n){return n.code===Rf.NODE_ERROR_CODES.ENOENT?gf(n,`No such file or directory ${n.path}`,bg.BAD_REQUEST):n.code===Rf.NODE_ERROR_CODES.EACCES?gf(n,`Permission denied ${n.path}`,bg.BAD_REQUEST):gf(n)}}return t}a(Nf,"postValidateChecks");Ev.exports={dataObject:w7,urlObject:I7,fileObject:C7,s3FileObject:D7}});var Cg=T((OEe,hv)=>{"use strict";var Xu=W(),yf=M();async function L7(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===yf.OPERATIONS_ENUM.INSERT||t.operation===yf.OPERATIONS_ENUM.UPDATE||t.operation===yf.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===yf.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Xu.info(i.message),i):i.http_resp_msg?(Xu.error(`Error calling operation: ${e.name}`),Xu.error(i.http_resp_msg),i):(Xu.error(`Error calling operation: ${e.name}`),Xu.error(i),i)}}a(L7,"callOperationFunctionAsAwait");hv.exports={callOperationFunctionAsAwait:L7}});var pv=T((NEe,mv)=>{"use strict";var Dg=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}},Lg=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};mv.exports={BulkLoadFileObject:Dg,BulkLoadDataObject:Lg}});var Tv=T((wEe,Sv)=>{"use strict";var Ug=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};Sv.exports=Ug});var xg=T((MEe,Bv)=>{"use strict";var wf=en(),Cf=Ig(),U7=require("needle"),Pn=M(),CEe=rt(),Ca=J(),{handleHDBError:st,hdb_errors:Iv}=re(),{HTTP_STATUS_CODES:Vt,HDB_ERROR_MSGS:Nt,CHECK_LOGS_WRAPPER:go}=Iv,Da=W(),Mg=require("papaparse");Ca.promisifyPapaParse();var vn=require("fs-extra"),M7=require("path"),{chain:gv}=require("stream-chain"),Rv=require("stream-json/streamers/StreamArray"),Av=require("stream-json/utils/Batch"),Ov=require("stream-chain/utils/comp"),{finished:bv}=require("stream"),P7=te(),Cv=Cg(),v7=tg(),{BulkLoadFileObject:vg,BulkLoadDataObject:B7}=pv(),Bg=YT(),{verifyBulkLoadAttributePerms:Dv}=of(),DEe=Tv(),LEe=At(),UEe=Ss(),{databases:H7}=(Ae(),ne(qe)),{coerceType:x7}=(Df(),ne(Fg)),Nv="No records parsed from csv file.",To=`${P7.get("HDB_ROOT")}/tmp`,{schema_regex:F7}=Yn(),yv=1024*1024*2,wv=5e3,q7={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};Bv.exports={csvDataLoad:G7,csvURLLoad:k7,csvFileLoad:V7,importFromS3:$7};async function G7(e,t){let r=Cf.dataObject(e);if(r)throw st(r,r.message,Vt.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=Mv(e.schema,e.table),i=Mg.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Pg.bind(null,s),dynamicTyping:!1}),o=new Bg;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&Dv(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 st(new Error,c,Vt.BAD_REQUEST,void 0,void 0,!0);let u=new B7(e.action,e.schema,e.table,i.data);return n=await Cv.callOperationFunctionAsAwait(Pv,u,null),n.message===Nv?Nv:vv(n.records,n.number_written)}catch(s){throw Ro(s)}}a(G7,"csvDataLoad");async function k7(e){let t=Cf.urlObject(e);if(t)throw st(t,t.message,Vt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${To}/${r}`;try{await Y7(e,r)}catch(s){throw Da.error(Nt.DOWNLOAD_FILE_ERR(r)+" - "+s),st(s,go(Nt.DOWNLOAD_FILE_ERR(r)))}try{let s=new vg(this.job_operation_function.name,e.action,e.schema,e.table,n,Pn.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Hg(s);return await If(n),i}catch(s){throw await If(n),Ro(s)}}a(k7,"csvURLLoad");async function V7(e){let t=Cf.fileObject(e);if(t)throw st(t,t.message,Vt.BAD_REQUEST,void 0,void 0,!0);let r=new vg(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Pn.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Hg(r)}catch(n){throw Ro(n)}}a(V7,"csvFileLoad");async function $7(e){let t=Cf.s3FileObject(e);if(t)throw st(t,t.message,Vt.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=M7.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${To}/${s}`;let i=new vg(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await K7(s,e);let o=await Hg(i);return await If(r),o}catch(n){throw await If(r),Ro(n)}}a($7,"importFromS3");async function Y7(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await U7("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 st(n,s,n.statusCode,Pn.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Q7(r,e.csv_url),await W7(t,r.raw)}a(Y7,"downloadCSVFile");async function K7(e,t){try{let r=`${To}/${e}`;await vn.mkdirp(To),await vn.writeFile(`${To}/${e}`,"",{flag:"a+"});let n=await vn.createWriteStream(r),s=await v7.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(){Da.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Da.error(Nt.S3_DOWNLOAD_ERR+" - "+r),st(r,go(Nt.S3_DOWNLOAD_ERR))}}a(K7,"downloadFileFromS3");async function W7(e,t){try{await vn.mkdirp(To),await vn.writeFile(`${To}/${e}`,t)}catch(r){throw Da.error(Nt.WRITE_TEMP_FILE_ERR),st(r,go(Nt.DEFAULT_BULK_LOAD_ERR))}}a(W7,"writeFileToTempFolder");async function If(e){if(e)try{await vn.access(e),await vn.unlink(e)}catch{Da.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(If,"deleteTempFile");function Q7(e,t){if(e.statusCode!==Iv.HTTP_STATUS_CODES.OK)throw st(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Vt.BAD_REQUEST);if(!q7[e.headers["content-type"]])throw st(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Vt.BAD_REQUEST);if(!e.raw)throw st(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Vt.BAD_REQUEST)}a(Q7,"validateURLResponse");async function Hg(e){try{let t;switch(e.file_type){case Pn.VALID_S3_FILE_TYPES.CSV:t=await z7(e);break;case Pn.VALID_S3_FILE_TYPES.JSON:t=await J7(e);break;default:throw st(new Error,Nt.DEFAULT_BULK_LOAD_ERR,Vt.BAD_REQUEST,Pn.LOG_LEVELS.ERROR,Nt.INVALID_FILE_EXT_ERR(e))}return vv(t.records,t.number_written)}catch(t){throw Ro(t)}}a(Hg,"fileLoad");async function Lv(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 wf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&Dv(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let u=st(c);r(u)}}a(Lv,"validateChunk");async function Uv(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Ca.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Ca.isEmpty(c)&&!Ca.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await Cv.callOperationFunctionAsAwait(Pv,c,null);t.records+=u.records,t.number_written+=u.number_written,s&&s.resume()}catch(c){let u=st(c,go(Nt.INSERT_CSV_ERR),Vt.INTERNAL_SERVER_ERROR,Pn.LOG_LEVELS.ERROR,Nt.INSERT_CSV_ERR+" - "+c);r(u)}}a(Uv,"insertChunk");async function z7(e){let t={records:0,number_written:0},r=Mv(e.schema,e.table);try{let n=new Bg,s=vn.createReadStream(e.file_path,{highWaterMark:yv});s.setEncoding("utf8"),await Mg.parsePromise(s,Lv.bind(null,e,n),Pg.bind(null,r));let i=n.getPermsResponse();if(i)throw st(new Error,i,Vt.BAD_REQUEST);return s=vn.createReadStream(e.file_path,{highWaterMark:yv}),s.setEncoding("utf8"),await Mg.parsePromise(s,Uv.bind(null,e,t),Pg.bind(null,r)),s.destroy(),t}catch(n){throw st(n,go(Nt.PAPA_PARSE_ERR),Vt.INTERNAL_SERVER_ERROR,Pn.LOG_LEVELS.ERROR,Nt.PAPA_PARSE_ERR+n)}}a(z7,"callPapaParse");function Mv(e,t){let r=H7[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>x7(i,s));return n}a(Mv,"createTransformMap");function Pg(e,t,r){let n=e.get(r);return n?n(t):Ca.autoCast(t)}a(Pg,"typeFunction");async function J7(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new Bg,s=gv([vn.createReadStream(e.file_path,{encoding:"utf-8"}),Rv.withParser(),c=>c.value,new Av({batchSize:wv}),Ov(async c=>{await Lv(e,n,r,c)})]);await new Promise((c,u)=>{bv(s,_=>{_?u(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw st(new Error,i,Vt.BAD_REQUEST);let o=gv([vn.createReadStream(e.file_path,{encoding:"utf-8"}),Rv.withParser(),c=>c.value,new Av({batchSize:wv}),Ov(async c=>{await Uv(e,t,r,c)})]);return await new Promise((c,u)=>{bv(o,_=>{_?u(_):c()}),o.resume()}),t}catch(n){throw st(n,go(Nt.INSERT_JSON_ERR),Vt.INTERNAL_SERVER_ERROR,Pn.LOG_LEVELS.ERROR,Nt.INSERT_JSON_ERR+n)}}a(J7,"insertJson");async function Pv(e){let t={};try{e.data&&e.data.length>0&&X7(e.data[0])?t=await j7(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Da.info(t.message))}catch(r){throw Ro(r)}return t}a(Pv,"callBulkFileLoad");function X7(e){let t=Object.keys(e);for(let r of t)if(!F7.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(X7,"validateColumnNames");async function j7(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=wf.insert;break;case"update":i=wf.update;break;case"upsert":i=wf.upsert;break;default:throw st(new Error,Nt.INVALID_ACTION_PARAM_ERR(n),Vt.BAD_REQUEST,Pn.LOG_LEVELS.ERROR,Nt.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 l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=Ca.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Ro(o)}}a(j7,"bulkFileLoad");function vv(e,t){return`successfully loaded ${t} of ${e} records`}a(vv,"buildResponseMsg");function Ro(e){return st(e,go(Nt.DEFAULT_BULK_LOAD_ERR),Vt.INTERNAL_SERVER_ERROR,Pn.LOG_LEVELS.ERROR,Nt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ro,"buildTopLevelErrMsg")});var xv=T((vEe,Hv)=>{"use strict";var qg=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};Hv.exports=qg});var Gv=T((HEe,qv)=>{"use strict";var Z7=M(),Fv=require("moment"),eee=require("uuid").v4,Gg=class{static{a(this,"JobObject")}constructor(){this.id=eee(),this.type=void 0,this.start_datetime=Fv().valueOf(),this.created_datetime=Fv().valueOf(),this.end_datetime=void 0,this.status=Z7.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};qv.exports=Gg});var kg=T((FEe,Wv)=>{"use strict";var tee=require("uuid").v4,$v=en(),Yv=Zr(),ree=zn(),nee=Zo(),see=xv(),it=M(),iee=Gv(),oee=RS(),_n=W(),aee=Cc(),La=J(),{promisify:cee}=require("util"),Ao=require("moment"),uee=cf(),Lf=Ig(),kv=Am(),{deleteTransactionLogsBeforeValidator:lee}=qT(),{handleHDBError:_ee,hdb_errors:dee}=re(),{HTTP_STATUS_CODES:fee}=dee,Vv=Yv.searchByValue,Eee=Yv.searchByHash,hee=$v.insert,mee=cee(uee.evaluateSQL),pee=$v.update;Wv.exports={addJob:gee,updateJob:Aee,handleGetJob:See,handleGetJobsByStartDate:Tee,getJobById:Kv};async function See(e){try{let t=await Kv(e.id);return La.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 _n.error("There was an error getting job",t),new Error(r)}}a(See,"handleGetJob");async function Tee(e){try{let t=await Ree(e);if(_n.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=Ao(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Ao(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 _n.error(r),new Error(r)}}a(Tee,"handleGetJobsByStartDate");async function gee(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||La.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return _n.info(l),t.error=l,t}if(!it.JOB_TYPE_ENUM[e.operation])return _n.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case it.OPERATIONS_ENUM.CSV_FILE_LOAD:n=Lf.fileObject(e);break;case it.OPERATIONS_ENUM.CSV_URL_LOAD:n=Lf.urlObject(e);break;case it.OPERATIONS_ENUM.CSV_DATA_LOAD:n=Lf.dataObject(e);break;case it.OPERATIONS_ENUM.IMPORT_FROM_S3:n=Lf.s3FileObject(e);break;case it.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case it.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=kv(e,"date");break;case it.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=kv(e,"timestamp");break;case it.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=lee(e);break;default:break}if(n)throw _ee(n,n.message,fee.BAD_REQUEST,void 0,void 0,!0);let s=new iee;s.type=e.operation===it.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?it.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new ree(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await Vv(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return _n.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=tee();try{o=await Vv(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return _n.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return _n.error("Error creating a job, could not find a unique job id."),t}s.request=e;let u=new aee(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await hee(u)}catch(l){return _n.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let l=`Created a job with type ${s.type} and id ${s.id}`;t.message=l,t.createdJob=s,t.success=!0,_n.trace(l)}return t}a(gee,"addJob");async function Ree(e){let t=Ao(e.from_date,Ao.ISO_8601),r=Ao(e.to_date,Ao.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 see(n,e.hdb_user);try{return await mee(s)}catch(i){throw _n.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(Ree,"getJobsInDateRange");async function Kv(e){if(La.isEmptyOrZeroLength(e))return La.errorizeMessage("Invalid job ID specified.");let t=new nee(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Eee(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return _n.error(n),La.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Kv,"getJobById");async function Aee(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(La.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===it.JOB_STATUS_ENUM.COMPLETE||e.status===it.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Ao().valueOf());let t=new oee(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await pee(t),r}a(Aee,"updateJob")});var Zv=T((GEe,jv)=>{"use strict";var Qv=J(),Sr=M(),Oee=require("moment"),Uf=xg(),Mf=W(),zv=kg(),Jv=uf(),Xv=Yi(),bee=et(),Nee=tf(),Vg=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function yee(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(Qv.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Qv.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Sr.JOB_TYPE_ENUM.csv_file_load:await Us(e,Uf.csvFileLoad);break;case Sr.JOB_TYPE_ENUM.csv_url_load:await Us(e,Uf.csvURLLoad);break;case Sr.JOB_TYPE_ENUM.csv_data_load:await Us(e,Uf.csvDataLoad);break;case Sr.JOB_TYPE_ENUM.import_from_s3:await Us(e,Uf.importFromS3);break;case Sr.JOB_TYPE_ENUM.empty_trash:break;case Sr.JOB_TYPE_ENUM.export_local:await Us(e,Jv.export_local);break;case Sr.JOB_TYPE_ENUM.export_to_s3:await Us(e,Jv.export_to_s3);break;case Sr.JOB_TYPE_ENUM.delete_files_before:case Sr.JOB_TYPE_ENUM.delete_records_before:await Us(e,Xv.deleteFilesBefore);break;case Sr.JOB_TYPE_ENUM.delete_audit_logs_before:await Us(e,Xv.deleteAuditLogsBefore);break;case Sr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Us(e,Nee.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(yee,"parseMessage");async function Us(e,t){try{e.job.status=Sr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Oee().valueOf(),await zv.updateJob(e.job),await wee(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):Mf.error(`There was an error running ${t.name} job with id ${e.job.id}`),Mf.error(n),e.job.message=n,e.job.status=Sr.JOB_STATUS_ENUM.ERROR;try{await zv.updateJob(e.job)}catch(s){throw Mf.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Us,"runJob");async function wee(e){Mf.trace("launching job thread:",e),bee.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Sr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(wee,"launchJobThread");jv.exports={parseMessage:yee,RunnerMessage:Vg}});var t0=T((VEe,e0)=>{"use strict";var $g=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};e0.exports=$g});var S0=T((YEe,Jg)=>{"use strict";var Hf=Zr(),Wg=cf(),Pf=xg(),Ms=od(),vf=qi(),Zu=Yi(),Iee=oS(),ju=tn(),Bf=hS(),$t=FT(),yt=W(),Cee=SS(),Dee=Od(),r0=eT(),Lee=Nd(),Uee=tT(),Mee=rT(),Pee=iT(),vee=aT(),Yg=lT(),n0=uf(),Bee=of(),Qg=kg(),F=M(),{hdb_errors:tl,handleHDBError:el}=re(),{HTTP_STATUS_CODES:s0}=tl,Kg=hT(),i0=Fd(),E0=require("util"),Ua=en(),Hee=Xs(),xee=la(),o0=Zv(),a0=hu(),c0=($d(),ne(Mu)),u0=wr(),l0=tf(),_0=zd(),{setServerUtilities:Fee}=(Df(),ne(Fg)),{CONTEXT:qee}=(On(),ne(_p)),{_assignPackageExport:Gee}=require("../../index"),{transformReq:kee}=J(),{server:Vee}=(tr(),ne(Li)),$ee=Cg(),d0=Hf.searchByHash,Yee=Hf.searchByValue,Kee=E0.promisify(Hf.search),Wee=E0.promisify(Wg.evaluateSQL),Qee={[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},V=t0();async function h0(e,t){try{if(e.body.operation!=="read_log"&&(yt.log_level===F.LOG_LEVELS.INFO||yt.log_level===F.LOG_LEVELS.DEBUG||yt.log_level===F.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;yt.info(o)}}catch(n){yt.error(n)}let r=await $ee.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Qee[e.body.operation]&&Hee.setSchemaDataToGlobal(n=>{n&&yt.error(n)}),r}a(h0,"processLocalTransaction");var f0=Jee();Jg.exports={chooseOperation:m0,getOperationFunction:p0,operation:zg,processLocalTransaction:h0};Fee(Jg.exports);Vee.operation=zg;function m0(e){let t;try{t=p0(e)}catch(s){throw yt.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=Wg.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Wg.checkASTPermissions(e,i);if(o)throw yt.error(`${s0.FORBIDDEN} from operation ${e.operation}`),yt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),el(new Error,o,tl.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=Bee.verifyPerms(i,s);if(o)throw yt.error(`${s0.FORBIDDEN} from operation ${e.operation}`),yt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),el(new Error,o,tl.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw el(s,"There was an error when trying to choose an operation path")}return r}a(m0,"chooseOperation");function p0(e){if(yt.trace(`getOperationFunction with operation: ${e.operation}`),f0.has(e.operation))return f0.get(e.operation);throw el(new Error,tl.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),tl.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(p0,"getOperationFunction");Gee("operation",zg);function zg(e,t){e.hdb_user=this[qee]?.user,e.bypass_auth=!t;let r=m0(e);return h0({body:e},r)}a(zg,"operation");async function zee(e){yt.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 Ua.insert(i);break;case F.OPERATIONS_ENUM.UPDATE:o=await Ua.update(i);break;case F.OPERATIONS_ENUM.UPSERT:o=await Ua.upsert(i);break;case F.OPERATIONS_ENUM.DELETE:o=await Zu.deleteRecord(i);break;default:yt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){yt.info("Invalid operation in transaction"),yt.error(o)}}a(zee,"catchup");async function is(e){kee(e);let t,r;try{r=await Qg.addJob(e),t=r.createdJob,yt.info("addJob result",r);let n=new o0.RunnerMessage(t,e);return await o0.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 yt.error(s),el(n,s)}}a(is,"executeJob");function Jee(){let e=new Map;return e.set(F.OPERATIONS_ENUM.INSERT,new V(Ua.insert)),e.set(F.OPERATIONS_ENUM.UPDATE,new V(Ua.update)),e.set(F.OPERATIONS_ENUM.UPSERT,new V(Ua.upsert)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new V(Hf.searchByConditions)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_HASH,new V(d0)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_ID,new V(d0)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_VALUE,new V(Yee)),e.set(F.OPERATIONS_ENUM.SEARCH,new V(Kee)),e.set(F.OPERATIONS_ENUM.SQL,new V(Wee)),e.set(F.OPERATIONS_ENUM.CSV_DATA_LOAD,new V(is,Pf.csvDataLoad)),e.set(F.OPERATIONS_ENUM.CSV_FILE_LOAD,new V(is,Pf.csvFileLoad)),e.set(F.OPERATIONS_ENUM.CSV_URL_LOAD,new V(is,Pf.csvURLLoad)),e.set(F.OPERATIONS_ENUM.IMPORT_FROM_S3,new V(is,Pf.importFromS3)),e.set(F.OPERATIONS_ENUM.CREATE_SCHEMA,new V(Ms.createSchema)),e.set(F.OPERATIONS_ENUM.CREATE_DATABASE,new V(Ms.createSchema)),e.set(F.OPERATIONS_ENUM.CREATE_TABLE,new V(Ms.createTable)),e.set(F.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new V(Ms.createAttribute)),e.set(F.OPERATIONS_ENUM.DROP_SCHEMA,new V(Ms.dropSchema)),e.set(F.OPERATIONS_ENUM.DROP_DATABASE,new V(Ms.dropSchema)),e.set(F.OPERATIONS_ENUM.DROP_TABLE,new V(Ms.dropTable)),e.set(F.OPERATIONS_ENUM.DROP_ATTRIBUTE,new V(Ms.dropAttribute)),e.set(F.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new V(vf.describeSchema)),e.set(F.OPERATIONS_ENUM.DESCRIBE_DATABASE,new V(vf.describeSchema)),e.set(F.OPERATIONS_ENUM.DESCRIBE_TABLE,new V(vf.describeTable)),e.set(F.OPERATIONS_ENUM.DESCRIBE_ALL,new V(vf.describeAll)),e.set(F.OPERATIONS_ENUM.DELETE,new V(Zu.deleteRecord)),e.set(F.OPERATIONS_ENUM.ADD_USER,new V(ju.addUser)),e.set(F.OPERATIONS_ENUM.ALTER_USER,new V(ju.alterUser)),e.set(F.OPERATIONS_ENUM.DROP_USER,new V(ju.dropUser)),e.set(F.OPERATIONS_ENUM.LIST_USERS,new V(ju.listUsersExternal)),e.set(F.OPERATIONS_ENUM.LIST_ROLES,new V(Bf.listRoles)),e.set(F.OPERATIONS_ENUM.ADD_ROLE,new V(Bf.addRole)),e.set(F.OPERATIONS_ENUM.ALTER_ROLE,new V(Bf.alterRole)),e.set(F.OPERATIONS_ENUM.DROP_ROLE,new V(Bf.dropRole)),e.set(F.OPERATIONS_ENUM.USER_INFO,new V(ju.userInfo)),e.set(F.OPERATIONS_ENUM.READ_LOG,new V(Cee)),e.set(F.OPERATIONS_ENUM.ADD_NODE,new V(Dee)),e.set(F.OPERATIONS_ENUM.UPDATE_NODE,new V(r0)),e.set(F.OPERATIONS_ENUM.SET_NODE_REPLICATION,new V(r0)),e.set(F.OPERATIONS_ENUM.REMOVE_NODE,new V(Lee)),e.set(F.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new V(Uee)),e.set(F.OPERATIONS_ENUM.PURGE_STREAM,new V(Mee)),e.set(F.OPERATIONS_ENUM.SET_CONFIGURATION,new V(u0.setConfiguration)),e.set(F.OPERATIONS_ENUM.CLUSTER_STATUS,new V(Pee.clusterStatus)),e.set(F.OPERATIONS_ENUM.CLUSTER_NETWORK,new V(vee)),e.set(F.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new V(Yg.setRoutes)),e.set(F.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new V(Yg.getRoutes)),e.set(F.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new V(Yg.deleteRoutes)),e.set(F.OPERATIONS_ENUM.EXPORT_TO_S3,new V(is,n0.export_to_s3)),e.set(F.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new V(is,Zu.deleteFilesBefore)),e.set(F.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new V(is,Zu.deleteFilesBefore)),e.set(F.OPERATIONS_ENUM.EXPORT_LOCAL,new V(is,n0.export_local)),e.set(F.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new V(Qg.handleGetJobsByStartDate)),e.set(F.OPERATIONS_ENUM.GET_JOB,new V(Qg.handleGetJob)),e.set(F.OPERATIONS_ENUM.GET_FINGERPRINT,new V(Kg.getFingerprint)),e.set(F.OPERATIONS_ENUM.SET_LICENSE,new V(Kg.setLicense)),e.set(F.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new V(Kg.getRegistrationInfo)),e.set(F.OPERATIONS_ENUM.RESTART,new V(i0.restart)),e.set(F.OPERATIONS_ENUM.RESTART_SERVICE,new V(i0.restartService)),e.set(F.OPERATIONS_ENUM.CATCHUP,new V(zee)),e.set(F.OPERATIONS_ENUM.SYSTEM_INFORMATION,new V(xee.systemInformation)),e.set(F.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new V(is,Zu.deleteAuditLogsBefore)),e.set(F.OPERATIONS_ENUM.READ_AUDIT_LOG,new V(Iee)),e.set(F.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new V(a0.createTokens)),e.set(F.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new V(a0.refreshOperationToken)),e.set(F.OPERATIONS_ENUM.LOGIN,new V(c0.login)),e.set(F.OPERATIONS_ENUM.LOGOUT,new V(c0.logout)),e.set(F.OPERATIONS_ENUM.GET_CONFIGURATION,new V(u0.getConfiguration)),e.set(F.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new V($t.customFunctionsStatus)),e.set(F.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new V($t.getCustomFunctions)),e.set(F.OPERATIONS_ENUM.GET_COMPONENT_FILE,new V($t.getComponentFile)),e.set(F.OPERATIONS_ENUM.GET_COMPONENTS,new V($t.getComponents)),e.set(F.OPERATIONS_ENUM.SET_COMPONENT_FILE,new V($t.setComponentFile)),e.set(F.OPERATIONS_ENUM.DROP_COMPONENT,new V($t.dropComponent)),e.set(F.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new V($t.getCustomFunction)),e.set(F.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new V($t.setCustomFunction)),e.set(F.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new V($t.dropCustomFunction)),e.set(F.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new V($t.addComponent)),e.set(F.OPERATIONS_ENUM.ADD_COMPONENT,new V($t.addComponent)),e.set(F.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new V($t.dropCustomFunctionProject)),e.set(F.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new V($t.packageComponent)),e.set(F.OPERATIONS_ENUM.PACKAGE_COMPONENT,new V($t.packageComponent)),e.set(F.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new V($t.deployComponent)),e.set(F.OPERATIONS_ENUM.DEPLOY_COMPONENT,new V($t.deployComponent)),e.set(F.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new V(l0.readTransactionLog)),e.set(F.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new V(is,l0.deleteTransactionLogsBefore)),e.set(F.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new V(_0.installModules)),e.set(F.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new V(_0.auditModules)),e.set(F.OPERATIONS_ENUM.GET_BACKUP,new V(Ms.getBackup)),e}a(Jee,"initializeOperationFunctionMap")});var Ff=T((WEe,R0)=>{"use strict";var Xg=M(),Xee=J(),rl=W(),{handleHDBError:jg,hdb_errors:xf}=re(),{isMainThread:jee}=require("worker_threads"),{Readable:Zee}=require("stream"),T0=require("os"),ete=require("util"),tte=CS(),rte=ete.promisify(tte.authorize),g0=S0(),{createGzip:nte,constants:ste}=require("zlib");function ite(e){let t=`Found an uncaught exception with message: ${e.message}. ${T0.EOL}Stack: ${e.stack} ${T0.EOL}Terminating ${jee?"HDB":"thread"}.`;console.error(t),rl.fatal(t),process.exit(1)}a(ite,"handleServerUncaughtException");function ote(e,t,r){if(rl[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:xf.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(ote,"serverErrorHandler");function ate(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=jg(new Error,"Invalid JSON.",xf.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(Xee.isEmpty(e.body.operation)){let n=jg(new Error,"Request body must include an 'operation' property.",xf.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(ate,"reqBodyValidationHandler");function cte(e,t,r){let n;e.body.operation!==Xg.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Xg.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Xg.OPERATIONS_ENUM.LOGOUT?rte(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{rl.warn(s),rl.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(jg(s,i,xf.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(cte,"authHandler");async function ute(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=g0.chooseOperation(e.body);let s=await g0.processLocalTransaction(e,n);if(s instanceof Zee&&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(nte({level:ste.Z_BEST_SPEED})))}return s}catch(s){throw rl.error(s),s}}a(ute,"handlePostRequest");R0.exports={authHandler:cte,handlePostRequest:ute,handleServerUncaughtException:ite,serverErrorHandler:ote,reqBodyValidationHandler:ate}});var N0=T((zEe,b0)=>{"use strict";var lte=require("fastify-plugin"),{handlePostRequest:A0,authHandler:_te,reqBodyValidationHandler:dte}=Ff();async function fte(e){e.decorate("hdbCore",{preValidation:[dte,_te],request:t=>O0(A0(t,response)),requestWithoutAuthentication:(t,r)=>O0(A0(t,r,!0))})}a(fte,"hdbCore");async function O0(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(O0,"convertAsyncIterators");b0.exports=lte(fte)});var I0=T((jEe,w0)=>{"use strict";var XEe=require("fs"),Zg=te();Zg.initSync();var{CONFIG_PARAMS:y0}=M(),Ete=1024*1024*1024;function hte(e){let t=Zg.get(y0.HTTP_TIMEOUT),r=Zg.get(y0.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Ete,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(hte,"getServerOptions");w0.exports=hte});var L0=T((ehe,D0)=>{"use strict";var eR=te();eR.initSync();var{CONFIG_PARAMS:C0}=M();function mte(){let e=eR.get(C0.HTTP_CORSACCESSLIST),t=eR.get(C0.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(mte,"getCORSOptions");D0.exports=mte});var P0=T((rhe,M0)=>{"use strict";var U0=te();U0.initSync();var pte=M();function Ste(){return U0.get(pte.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Ste,"getHeaderTimeoutConfig");M0.exports=Ste});var rR={};$e(rR,{customFunctionsServer:()=>Rte,ready:()=>z0,start:()=>gte});function gte(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Ps||(Ps=Q0(t),Ze.http((await Ps).server));let o=await Ps,c=(0,tR.dirname)(s),u=(0,tR.dirname)(n);if(u.startsWith("/")&&(u=u.slice(1)),!v0.has(c)){v0.add(c);try{o.register(Ote(c,u))}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:z0}}async function Rte(){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 Ate();let e=G0.get(k0.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Ps=await Q0(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 Ate(){try{ke.info("Custom Functions starting configuration."),await V0.setUsersToGlobal(),ke.info("Custom Functions completed configuration.")}catch(e){ke.error(e)}}function Ote(e,t){return async function(r){try{ke.info("Custom Functions starting buildRoutes"),ke.trace("Loading fastify routes folder "+e),(0,B0.existsSync)(e)&&r.register(q0.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 Q0(e){ke.info("Custom Functions starting buildServer.");let t=(0,$0.default)(e),r=(0,H0.default)(t);r.server.headersTimeout=(0,K0.default)(),r.setErrorHandler(W0.serverErrorHandler);let n=(0,Y0.default)();return n&&r.register(x0.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(F0.default),await r.register(Tte),await r.after(),ug(r),ke.info("Custom Functions completed buildServer."),r}function z0(){if(Ps)return Ps.then?Ps.then(e=>e.ready()):Ps.ready()}var tR,B0,H0,x0,F0,q0,G0,k0,ke,Tte,V0,$0,Y0,K0,W0,Ps,v0,J0=Re(()=>{tR=require("path"),B0=require("fs"),H0=x(require("fastify")),x0=x(require("@fastify/cors")),F0=x(Ag()),q0=x(require("@fastify/autoload")),G0=x(te()),k0=x(M()),ke=x(W()),Tte=x(N0()),V0=x(tn()),$0=x(I0()),Y0=x(L0()),K0=x(P0()),W0=x(Ff());pa();tr();v0=new Set;a(gte,"start");a(Rte,"customFunctionsServer");a(Ate,"setUp");a(Ote,"buildRouteFolder");a(Q0,"buildServer");a(z0,"ready")});var nR={};$e(nR,{start:()=>bte});function bte(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,tB.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){j0||(j0=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=X0.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,Z0.default)(s,(0,eB.realpathSync)(o))}}return i(s)},{runFirst:!0})),X0.set(r,n)}}}var Z0,eB,tB,X0,j0,rB=Re(()=>{Z0=x(require("send")),eB=require("fs"),tB=x(require("serve-static")),X0=new Map;a(bte,"start")});function wte(e,t=1,r){if(sR++,(0,Oo.startWorker)("server/threads/threadServer.js",{name:kf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function u(_){_.type===kf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",u),o(n))}a(u,"onMessage"),n.on("message",u),n.on("error",c)});yte.push(s),await s,Ma.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=Gf.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=Ma.indexOf(n);o>-1&&Ma.splice(o,1)}if(a(i,"removeWorker"),Pa){let o=Pa;Pa=[];for(let c of o)oB[c.localPort](null,c)}}}),r){let n=setInterval(()=>{iR?iR=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Oo.shutdownWorkers)(),sR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function aB(e=0,t){if(typeof e=="string")try{(0,Vf.existsSync)(e)&&(0,Vf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Ite:r=Cte(t):r=aR;let n=(0,va.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=oB[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),iR=!0,r(o,(c,u)=>{if(!c){if(nB){let l=o._socket||new va.Socket({handle:o,writable:!0,readable:!0});nB.deliverSocket(l,e,u),l.resume()}else sR>0?(Pa.length===0&&setTimeout(()=>{Pa.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,Pa.push(o)):(console.log("start up a dynamic thread to handle request"),wte(0));vr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new va.Socket({handle:o,writable:!0,readable:!0});Mte(l,c,e)}vr(!0,"socket-routed")})};let s=Zc();oR.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 aR(e,t){let r,n=0;for(let s of Ma){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=qf)return qf=i,t(r);n=i}qf=0,t(r)}function Ite(e,t){let r={};e.getpeername(r);let n=r.address,s=Ba.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);aR(e,o=>{Ba.set(n,{worker:o,lastUsed:i}),t(o)})}function Cte(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new va.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let u=o.toString("latin1").match(t)?.[1],_=Ba.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,s(_.worker);aR(n,d=>{Ba.set(u,{worker:d,lastUsed:l}),s(d,o)})})}a(r,"findByHeaderAffinity")}function Lte(){qf=0;for(let e of Ma)e.expectedIdle=e.recentELU.idle+Dte,e.requests=1;Ma.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Mte(e,t,r){let n=Ute++;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(),Gf.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")),Gf.delete(n)),s.event=="destroy"&&(e.destroy(),Gf.delete(n))})}var Oo,va,kf,oR,Vf,iB,Nte,Ma,Pa,oB,nB,sR,yte,iR,qf,sB,Ba,Dte,Gf,Ute,cB=Re(()=>{Oo=x(et()),va=require("net"),kf=x(M()),oR=x(W()),Vf=require("fs");Os();iB=require("worker_threads"),Nte=x(Ki()),Ma=[],Pa=[],oB=[],sR=0,yte=[];iB.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(wte,"startHTTPWorker");a(aB,"startSocketServer");qf=0;a(aR,"findMostIdleWorker");sB=36e5,Ba=new Map;a(Ite,"findByRemoteAddressAffinity");a(Cte,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ba)r.lastUsed+sB<e&&Ba.delete(t)},sB).unref();Dte=1e3;a(Lte,"updateWorkerIdleness");(0,Oo.setMonitorListener)(Lte);Gf=new Map,Ute=1;a(Mte,"proxySocket")});var _R={};$e(_R,{Request:()=>cR,createReuseportFd:()=>$f});var uB,cR,uR,lR,$f,Yf=Re(()=>{uB=require("os"),cR=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 lR(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new uR(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},uR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},lR=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,uB.platform)()!="win32"&&($f=require("node-unix-socket").createReuseportFd)});var fB=T((phe,dB)=>{"use strict";var Pte=require("cluster"),bo=te();bo.initSync();var _B=M(),dhe=require("util"),vs=W(),fhe=require("fs"),vte=require("fastify"),Ehe=Zc(),Bte=require("@fastify/cors"),Hte=require("@fastify/compress"),xte=require("@fastify/static"),Fte=Ag(),qte=require("path"),{PACKAGE_ROOT:Gte}=M(),kte=Xs(),Vte=J(),$te=tn(),Yte=Ki(),{server:Kte}=(tr(),ne(Li)),{node_request_key:hhe}=(Yf(),ne(_R)),{authHandler:Wte,handlePostRequest:Qte,serverErrorHandler:zte,reqBodyValidationHandler:Jte}=Ff(),mhe=require("net"),{registerContentHandlers:Xte}=(pa(),ne(zP)),jte=6e4,Zte=1024*1024*1024,ere="TRUE",{CONFIG_PARAMS:nl}=_B,Ha;dB.exports={hdbServer:lB,start:lB};async function lB(e){try{vs.info("In Fastify server"+process.cwd()),vs.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),vs.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Pte.isMaster,await tre();let t=e.securePort>0;Ha=rre(t),await Ha.ready(),e||(e={}),e.isOperationsServer=!0;try{Kte.http(Ha.server,e),Ha.server.closeIdleConnections||await Ha.listen({port:0,host:"::"})}catch(r){throw Ha.close(),vs.error(r),vs.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),vs.fatal(t),process.exit(1)}}a(lB,"operationsServer");async function tre(){vs.trace("Configuring HarperDB process."),kte.setSchemaDataToGlobal(),await $te.setUsersToGlobal(),await Yte.getLicense()}a(tre,"setUp");function rre(e){vs.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=nre(e),r=vte(t);r.server.headersTimeout=ire(),r.setErrorHandler(zte);let n=sre();n&&r.register(Bte,n),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Fte),r.register(Hte),r.register(xte,{root:qte.join(Gte,"studio/build-local")}),Xte(r);let s=bo.get(_B.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Vte.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Jte,Wte],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Qte(i,o)}),r.get("/health",()=>"HarperDB is running."),vs.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(rre,"buildServer");function nre(e){let t=bo.get(nl.OPERATIONSAPI_NETWORK_TIMEOUT),r=bo.get(nl.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Zte,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(nre,"getServerOptions");function sre(){let e=bo.get(nl.OPERATIONSAPI_NETWORK_CORS),t=bo.get(nl.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===ere)&&(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(sre,"getCORSOpts");function ire(){return bo.get(nl.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??jte}a(ire,"getHeaderTimeoutConfig")});var OB=T((Ahe,AB)=>{"use strict";var{decode:ore}=require("msgpackr"),{isMainThread:The,parentPort:are,threadId:ghe}=require("worker_threads"),fR=At(),Bs=rt(),cre=M(),Si=W(),EB=te(),mB=M();et();var ure=Ss(),{recordAction:lre,recordActionBinary:_re}=(Os(),ne(nu)),{publishToStream:dre}=fR,{ConsumerEvents:fre}=require("nats"),Rhe={durable:Bs.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Bs.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Ere,hre,mre,pB,SB;AB.exports={initialize:ER,workQueueListener:RB,setSubscription:pre,setIgnoreOrigin:Tre,getDatabaseSubscriptions:Sre};async function ER(){SB=!0,Si.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await fR.getNATSReferences();Ere=e,hre=e.info.server_name,mre=t,pB=r}a(ER,"initialize");var Wf=new Map;function pre(e,t,r){let n=Wf.get(e);n||Wf.set(e,n=new Map),n.set(t,r),SB||ER().then(RB)}a(pre,"setSubscription");function Sre(){return Wf}a(Sre,"getDatabaseSubscriptions");var TB;function Tre(e){TB=e}a(Tre,"setIgnoreOrigin");var gB=100,hB=new Array(gB),Kf=0;async function RB(){let e=await pB.consumers.get(Bs.WORK_QUEUE_CONSUMER_NAMES.stream_name,Bs.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(are?.on("message",async n=>{let{type:s}=n;s===mB.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===fre.HeartbeatsMissed){let s=n.data;Si.trace(`${s} clustering ingest consumer heartbeats missed`),s===2&&(Si.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let n of r)await hB[Kf],hB[Kf]=gre(n).catch(s=>{Si.error(s)}),++Kf>=gB&&(Kf=0)}catch(n){Si.error("Error consuming clustering ingest, restarting consumer",n)}fR.clearClientCache(),await ER()}}a(RB,"workQueueListener");async function gre(e){let t=ore(e.data);lre(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,n=!1,s=EB.get(cre.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Bs.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Bs.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Bs.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!TB),_re(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Bs.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;Si.trace("processing message:",o,c,_,(l?"records: "+l.map(g=>g?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Si.trace(`messageProcessor nats msg id: ${e.headers.get(Bs.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:O}=f||{},R=Wf.get(c)?.get(_);if(!R)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,R.send(t);else if(l.length===1&&!u)R.send({type:dR(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:O});else{let g=l.map((P,H)=>({type:dR(o),value:P,expiresAt:E,id:d?.[H],table:_}));for(;u;)g.push({type:dR(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;R.send({type:"transaction",writes:g,table:_,timestamp:p,onCommit:h,user:S,nodeName:O})}EB.get(mB.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&dre(e.subject.split(".").slice(0,-1).join("."),ure.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){Si.error(o)}e.ack()}a(gre,"messageProcessor");function dR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(dR,"convertOperation")});var gR={};$e(gR,{disableNATS:()=>Are,publishToStream:()=>jf,setNATSReplicator:()=>hR,setPublishToStream:()=>Ore,setSubscription:()=>TR,start:()=>Rre});function Rre(){zf.default.get(Jf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Nre()}function Are(e=!0){IB=e}function Ore(e,t){jf=e,TR=t}function Nre(){if(IB||process.env._DISABLE_NATS)return;let e=Cn(),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];hR(s,r,i)}}RR((r,n)=>{hR(r.tableName,r.databaseName,r),n&&DB(r)}),!bB&&(bB=!0)}function hR(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 Ht{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Le],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Le]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Le],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Le],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Le]})}static defineSchema(i){DB(i)}static subscribe(){let i=new An;return TR(t,e,i),i}static subscribeOnThisThread(i){return i<bre}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 Qf(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=CB;return i}a(n,"getNATSTransaction")}function DB(e){let t=zf.default.get(Jf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);jf(`${pR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,SR.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 NB,pR,SR,yB,wB,zf,Jf,Xf,IB,jf,TR,bre,CB,bB,Qf,mR,LB=Re(()=>{Ae();On();NB=x(At()),pR=x(rt()),SR=x(Ss());hc();yB=x(OB()),wB=x(Ir()),zf=x(te()),Jf=x(M()),Xf=x(W());a(Rre,"start");a(Are,"disableNATS");jf=NB.publishToStream,TR=yB.setSubscription;a(Ore,"setPublishToStream");bre=2;a(Nre,"assignReplicationSource");a(hR,"setNATSReplicator");a(DB,"publishSchema");Qf=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=zf.default.get(Jf.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,f=l.operation=="put"?"upsert":l.operation;u||(Xf.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&n.push(jf(`${pR.SUBJECT_PREFIXES.TXN}.${s}.${u.table}`,(0,SR.createNatsTableStreamName)(s,u.table),void 0,u)?.catch(l=>{throw Xf.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(n)}},mR=class extends Qf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,wB.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};CB=new mR});var $B=T(No=>{"use strict";var{isMainThread:yre,parentPort:il,threadId:Zf}=require("worker_threads"),{Socket:wre,createServer:Ire}=require("net"),{createServer:Cre,IncomingMessage:Dre}=require("http"),{createServer:Lre}=require("https"),{readFileSync:xa,unlinkSync:UB,existsSync:Ure}=require("fs"),Gr=W(),He=te(),Jt=M(),{server:rE}=(tr(),ne(Li)),{WebSocketServer:Mre}=require("ws"),{createServer:Pre}=require("tls"),{getTicketKeys:vre,restartNumber:Bre,getWorkerIndex:bR}=et(),{Headers:HB,appendHeader:Hre}=(Uu(),ne(TM)),{recordAction:sl,recordActionBinary:xre}=(Os(),ne(nu)),{Request:xB,createReuseportFd:MB}=(Yf(),ne(_R)),{checkMemoryLimit:Fre}=Ki(),FB=require("tls"),PB=FB.createSecureContext;FB.createSecureContext=function(e){if(!e.cert||!e.key)return PB(e);let t={...e};delete t.key,delete t.cert;let r=PB(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var AR=He.get(Jt.CONFIG_PARAMS.THREADS_DEBUG);if(AR){let e=(typeof AR=="number"?AR:9229)+(bR()??-1)+1;try{require("inspector").open(e)}catch(t){Gr.trace(`Could not start debugging on port ${e}, you may already be debugging:`,t.message)}}else if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){Bre<=1&&Gr.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:Che,CONFIG_PARAMS:qre}=Jt;He.initSync();var Gre=He.get(qre.HTTP_SESSIONAFFINITY),os={};No.registerServer=IR;No.httpServer=CR;No.deliverSocket=wR;No.startServers=qB;No.when_components_loaded=null;rE.http=CR;rE.request=Yre;rE.socket=Kre;rE.ws=Wre;var OR={},eE={},kre,Ti={},tE={},Vre=[],NR=[];function qB(){return No.when_components_loaded=DR().loadRootComponents(!0).then(()=>{il?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)wR(n,r,s);else if(t.requestId)$re(t);else if(t.type===Jt.ITC_EVENT_TYPES.SHUTDOWN){Gr.trace("received shutdown request",Zf);for(let i in os){let o=os[i],c;if(o.closeIdleConnections){let _=Object.getOwnPropertySymbols(o).find(f=>f.description.includes("connections")),l=0,d=setInterval(()=>{l++;let f=l>=100,E=o[_][f?"all":"idle"]();if(E.length===0){f&&clearInterval(d);return}l===1?Gr.info(`Closing ${E.length} idle connections`):f&&Gr.warn(`Forcefully closing ${E.length} active connections`);for(let h=0,p=E.length;h<p;h++){let S=E[h].socket;S._httpMessage&&!S._httpMessage.finished&&!f||(f?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
27
27
  Connection: close\r
28
28
  \r
29
- `))}},25).unref()}o.close?.(()=>{if(He.get(mr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&CB()==0)try{IB(He.get(mr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,jf),o.cantCleanupProperly||_n.warn("Had to forcefully exit the thread",jf),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(DB&&!Hre)for(let t in is){let r=is[t];if(isNaN(t)&&CB()==0){Cre(t)&&IB(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),_n.info("Domain socket listening on "+t)}).on("error",i)}));continue}let n;try{n=DB(+t,"::")}catch(s){console.error(`Unable to bind to port ${t}`,s);continue}e.push(new Promise((s,i)=>{r.listen({fd:n},()=>{s(),_n.trace("Listening on port "+t,jf)}).on("error",i)}))}Promise.all(e).then(()=>{nl?.postMessage({type:mr.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(HB,"startServers");Ore||HB();function OR(e,t,r){let n=e?.read?e:new bre({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=is[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=is[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(_n.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(OR,"deliverSocket");var MB=new Map;function qre(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=MB.get(s),r){case"connection":i=OR(void 0,t),MB.set(s,i),i.write=(c,u,_)=>(nl.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(nl.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),nl.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(qre,"proxyRequest");function bR(e,t,r=!0){!+t&&t!==He.get(mr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(He.get(mr.CONFIG_PARAMS.HTTP_PORT),10));let n=is[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",UB),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else is[t]=e;e.on("unhandled",UB)}a(bR,"registerServer");function xB(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=[],He.get(mr.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:He.get(mr.CONFIG_PARAMS.HTTP_PORT),secure:He.get(mr.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),He.get(mr.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:He.get(mr.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&He.get(mr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:He.get(mr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(xB,"getPorts");function NR(e,t){for(let{port:r,secure:n}of xB(t))FB(r,n,t?.isOperationsServer),typeof e=="function"?RR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,bR(e,r,!1)),eE[r]=AR(RR,r),xre=AR(Fre,r)}a(NR,"httpServer");function FB(e,t,r){if(!pi[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:He.get(n+"_keepAliveTimeout"),headersTimeout:He.get(n+"_headersTimeout"),requestTimeout:He.get(n+"_timeout")},i=He.get(n+"_mtls"),o=He.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let u=He.get(n+"tls_privateKey"),_=He.get(n+"tls_certificate"),l=He.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:Ba(u),ciphers:He.get("tls_ciphers"),cert:Ba(_),ca:l&&Ba(l),rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:Mre()})}let c=vre();pi[e]=(t?Ire:yre)(s,async(u,_)=>{try{let d=performance.now(),f=new vB(u,_);r&&(f.isOperationsServer=!0);let E=await eE[e](f);if(!E){if(f._nodeResponse.statusCode)return;E=qB(f)}if(c?E.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):E.headers?.set?.("Server","HarperDB"),E.status===-1){for(let H of E.headers||[])_.setHeader(H[0],H[1]);return u.baseRequest=f,_.baseResponse=E,pi[e].emit("unhandled",u,_)}let h=E.status||200,p=performance.now(),S=p-d,O=E.body,g;if(!E.handlesHeaders){let H=E.headers||new PB;if(O?O.length>=0&&(typeof O=="string"?H.set("Content-Length",Buffer.byteLength(O)):H.set("Content-Length",O.length),g=!0):(H.set("Content-Length","0"),g=!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)),g&&_.end(O)}let R=f.handlerPath,B=f.method;if(rl(S,"duration",R,B,E.wasCacheMiss==null?void 0:E.wasCacheMiss?"cache-miss":"cache-hit"),Pre(h<400,"success",R,B),!g)if(O?.pipe){O.pipe(_),O.destroy&&_.on("close",()=>{O.destroy()});let H=0;O.on("data",v=>{H+=v.length}),O.on("end",()=>{rl(performance.now()-p,"transfer",R,B),rl(H,"bytes-sent",R,B)})}else O?.then?O.then(H=>{_.end(H)},l):_.end(O)}catch(d){l(d)}function l(d){let f=d.headers;_.writeHead(d.statusCode||500,f&&(f[Symbol.iterator]?Array.from(f):f)),_.end(d.toString()),d.statusCode?d.statusCode===500?_n.warn(d):_n.info(d):_n.error(d)}a(l,"onError")}),i&&(pi[e].mtlsConfig=i),t&&(pi[e].on("secureConnection",u=>{u._parent.startTime&&rl(performance.now()-u._parent.startTime,"tls-handshake",e),rl(u.isSessionReused(),"tls-reused",e)}),pi[e].isSecure=!0),bR(pi[e],e)}return pi[e]}a(FB,"getHTTPServer");function AR(e,t){let r=qB;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(AR,"makeCallbackChain");function qB(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new PB}}a(qB,"unhandled");function Gre(e,t){NR(e,{requestOnly:!0,...t})}a(Gre,"onRequest");function kre(e,t){let r;if(t.securePort){let n=He.get("tls_privateKey"),s=He.get("tls_certificate"),i=t.mtls?.certificateAuthority||He.get("tls_certificateAuthority");r=Lre({ciphers:He.get("tls_ciphers"),key:Ba(n),cert:Ba(s),ca:i&&Ba(i),rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls},e),is[t.securePort]=r}return t.port&&(r=Nre(e),is[t.port]=r),r}a(kre,"onSocket");Object.defineProperty(wre.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 Vre(e,t){let r;for(let{port:n,secure:s}of xB(t)){Zf[n]||(Zf[n]=new Dre({server:r=FB(n,s)}),Zf[n].on("connection",async(c,u)=>{try{let _=new vB(u);_.isWebSocket=!0;let l=eE[n](_),d=u.headers["sec-websocket-protocol"]||"",f=gR[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,_,l))}if(E)return}for(let E=0;E<f.length;E++){let h=f[E];h.protocol||h.listener(c,_,l)}}catch(_){_n.warn("Error handling WebSocket connection",_)}}),Zf[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=gR[n];o||(o=gR[n]=[]),o.push({listener:e,protocol:i}),eE[n]=AR(RR,n)}return r}a(Vre,"onWebSocket");function UB(e,t){t.writeHead(404),t.end(`Not found
30
- `)}a(UB,"defaultNotFound")});async function YB({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await wR.getResource(e,{});s=new DR(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await wR.get(e);i&&i.delete()}s=new nE(e,t)}return n&&(n.id=e,n.user={username:t?.username},sl.put(n)),s}function IR(){return rE++,rE>65500&&(rE=1),rE}function CR(e,t,r=e){let{topic:n,retain:s}=e;e.data=t,e.async=!0,e.authorize=!0;let i=ui.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 Ke(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var kB,Oo,VB,$B,wR,sl,rE,nE,DR,KB=Oe(()=>{be();Cu();kB=x(Cr()),Oo=x(W());zi();VB=x(Ze()),$B=x(GB());jt();wR=ot({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"}]}}]}),sl=ot({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,VB.getWorkerIndex)()===0&&(async()=>{await $B.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of sl.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await je.getUser(r.user.username)),Ke(r,()=>{try{CR(r,t)}finally{sl.delete(e.id,r)}})}})();a(YB,"getSession");rE=1;a(IR,"getNextMessageId");nE=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("?"),u,_;if(c>-1?(u=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 l=this.subscriptions.find(O=>O.topic===s),d;l?(d=i>0,l.end(),this.subscriptions.splice(this.subscriptions.indexOf(l),1)):d=i===2;let f={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Oo.trace)("Resuming subscription from",s,"from",o);let E=ui.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 g=O.split("/"),R;for(let v=0;v<g.length;v++)if(g[v].indexOf("+")>-1)if(g[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;g[g.length-1]==="#"&&(g.length--,B=!1),R&&(n=a(v=>{let M=v.id;if(!Array.isArray(M)||B&&M.length!==g.length)return!1;for(let $=0;$<g.length;$++)if(g[$]!=="+"&&g[$]!==M[$])return!1;return!0},"filter"));let H=g.indexOf("+");f.url="/"+(H>-1?g.slice(0,H):g).concat("").join("/")}}let h=E.path,p=E.Resource,S=await Ke(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 g of O)try{let R;if(g.type&&g.type!=="put"&&g.type!=="delete"&&g.type!=="message"&&g.type!=="patch"||n&&!n(g))continue;r?(g.topic=s,R=this.needsAcknowledge(g)):(g.acknowledge?.(),R=IR());let B=g.id;Array.isArray(B)&&(B=Ea(B)),B==null&&(B=""),this.listener(h+"/"+B,g.value,R,t)}catch(R){(0,Oo.warn)(R)}})(),O});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=IR();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,CR(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};Ke(r,async()=>{if(!t){let n=await sl.get(this.sessionId,r);n?.doesExist()&&await CR(n,n.data,r)}await sl.delete(this.sessionId,r)}).catch(n=>{(0,Oo.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(CR,"publish");DR=class extends nE{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=IR(),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,Oo.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,kB.getNextMonotonicTime)()),(0,Oo.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),wR.put(this.sessionRecord)),t.qos}}});var LR={};ke(LR,{bypassAuth:()=>$re,start:()=>Yre});function $re(){XB=!0}function Yre({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i,sessions:new Set},c,u=r?.mtls;return n&&(c=e.ws((_,l,d)=>{if(_.protocol==="mqtt"){let{onMessage:f,onClose:E}=zB(_,(h,p)=>{if(_.send(h),p&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},l,Promise.resolve(d).then(()=>l?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{(0,pr.info)("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let l;if(u){if(_.authorized)try{let E=u.user;E!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),l=await e.getUser(E,null,null))}catch(E){(0,pr.error)(E)}else if(u.required)return(0,pr.info)(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!l&&XB&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,JB.getSuperUser)());let{onMessage:d,onClose:f}=zB(_,E=>_.write(E),null,l,o);_.on("data",d),_.on("close",f),_.on("error",E=>{(0,pr.info)("Socket error",E)})},{port:t,securePort:s,mtls:u})),c}function zB(e,t,r,n,s){QB||(QB=!0,eu(d=>{sE>0&&d.push({metric:"mqtt-connections",connections:sE,byThread:!0})}));let i;sE++;let o,c={protocolVersion:4},u=(0,oE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){sE--,i||(i=!0,o?.disconnect(),s.sessions.delete(o),tn(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.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 je.getUser(d.username,d.password.toString(),r),(0,iE.get)(os.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&WB.notify({username:n.username,status:os.AUTH_AUDIT_STATUS.SUCCESS,type:os.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,iE.get)(os.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&WB.error({username:n.username,status:os.AUTH_AUDIT_STATUS.FAILURE,type:os.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return tn(!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=Eo(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?R(d.will.payload):void 0,delete d.will.payload}o=YB({user:n,...d}),o=await o,s.sessions.add(o)}catch(R){return(0,pr.error)(R),tn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:R.code||5,returnCode:R.code||128})}tn(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((R,B,H,v)=>{try{let M=R.indexOf("/",1),$=M>0?R.slice(0,M):R;f({cmd:"publish",topic:R,payload:E(B),messageId:H||Math.floor(Math.random()*1e8),qos:v.qos},$)}catch(M){(0,pr.error)(M),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,pr.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=Eo(r?.headers.get?.("content-type"))),O=d.payload?.length>0?S(d.payload):void 0,g;try{g=await o.publish(d,O)}catch(R){(0,pr.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: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),tn(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,pr.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,oE.generate)(h,c);t(S),Br(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return _i(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var oE,JB,iE,os,pr,WB,XB,QB,sE,jB=Oe(()=>{oE=require("mqtt-packet");KB();JB=x(en());ha();As();jt();iE=x(Z()),os=x(U()),pr=x(W()),WB=(0,pr.loggerWithTag)("auth-event"),XB=(0,iE.get)(os.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a($re,"bypassAuth");a(Yre,"start");sE=0;a(zB,"onSocket")});var Xd={};ke(Xd,{component_errors:()=>xa,loadComponent:()=>aE,loadComponentDirectories:()=>aH,setErrorReporter:()=>zre});function aH(e,t){t&&(UR=t),e&&(PR=e);let r=[];if((0,vn.existsSync)(MR)){let s=(0,vn.readdirSync)(MR,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,pt.join)(MR,o);r.push(aE(c,UR,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(aE(n,UR,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{oH=!0})}function zre(e){ol=e}async function aE(e,t,r,n,s,i){if(!eH.has(e)){eH.set(e,!0),s&&(PR=s);try{let o;n&&(xa=new Map);let c=(0,pt.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,vn.existsSync)(c)?o=n?(0,iH.getConfigObj)():(0,tH.parseDocument)((0,vn.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=vR;let u=[],_=n;for(let l in o){let d=o[l];if(xa.set(n?l:(0,pt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let g=e,R;for(;!(0,vn.existsSync)(R=(0,pt.join)(g,"node_modules",l));)if(g=(0,pt.dirname)(g),g.length<(0,sH.getHdbBasePath)().length){R=null;break}if(R)f=await aE(R,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Qre[l];if(!f)continue;u.push(f);let h=a(g=>(g.origin=r,ot(g)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,O=!p?.https&&p?.port;if(Ha.isMainThread&&(f=await f.startOnMainThread?.({server:je,ensureTable:h,port:O,securePort:S,resources:t,...d})||f,n&&p))for(let g of[O,S])try{if(+g&&!ZB.includes(g)){let R=BR.get(HR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);R&&il.default.warn("Session affinity is not recommended and may cause memory leaks"),(R||!Vf)&&(ZB.push(g),nB(g,R))}}catch(R){console.error("Error listening on socket",g,R,l)}if(t.isWorker&&(f=await f.start?.({server:je,ensureTable:h,port:O,securePort:S,resources:t,...d})||f),PR.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,nH.handleHDBError)("Can not reference parent directories");let g=(0,pt.join)(e,d.files).replace(/\\/g,"/"),R=g.indexOf("/*");if(R>-1&&d.files!==vR[l]?.files&&!(0,vn.existsSync)(g.slice(0,R)))throw new Error(`The path '${g.slice(0,R)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let B=(0,pt.basename)(e),H=d.path||"/";H=H.startsWith("/")?H:H.startsWith("./")?"/"+B+H.slice(2):H==="."?"/"+B:"/"+B+"/"+H;let v,M,$;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",M=(0,pt.join)(e,z)}else($=g.indexOf("/*"))>-1&&(M=g.slice(0,$+1),v=(0,pt.relative)(e,M));let K=!1;if(Ha.isMainThread&&f.setupDirectory&&(K=await f.setupDirectory?.(H,M,t)),t.isWorker&&f.handleDirectory&&(K=await f.handleDirectory?.(H,M,t)),K)continue;for(let z of await(0,rH.default)(g,{onlyFiles:!1,objectMode:!0})){let{path:se,dirent:Te}=z;_=!0;let oe=(0,pt.relative)(e,se).replace(/\\/g,"/");if(v)if(oe.startsWith(v))oe=oe.slice(v.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${oe}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let xe=H+(H.endsWith("/")?"":"/")+oe;try{if(Te.isFile()){let de=await Wre(se);Ha.isMainThread&&await f.setupFile?.(de,xe,se,t),t.isWorker&&await f.handleFile?.(de,xe,se,t)}else Ha.isMainThread&&await f.setupDirectory?.(xe,se,t),t.isWorker&&await f.handleDirectory?.(xe,se,t)}catch(de){de.message=`Could not load ${Te.isFile()?"file":"directory"} '${se}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${de.message}`,ol?.(de),((0,Fa.getWorkerIndex)()===0?console:il.default).error(de),t.set(d.path||"/",new al(de)),xa.set(n?l:(0,pt.basename)(e),de.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,pt.basename)(e)}' due to: ${h.message}`,ol?.(h),((0,Fa.getWorkerIndex)()===0?console:il.default).error(h),t.set(d.path||"/",new al(h),null,!0),xa.set(n?l:(0,pt.basename)(e),h.message)}}if(Ha.isMainThread&&!oH&&i&&(0,Fa.watchDir)(e,async()=>aH()),o.extensionModule)return await Wl((0,pt.join)(e,o.extensionModule));if(!_&&t.isWorker){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;ol?.(new Error(l)),((0,Fa.getWorkerIndex)()===0?console:il.default).error(l),xa.set((0,pt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,ol?.(o),t.set("",new al(o))}}}var vn,pt,Ha,tH,BR,HR,rH,Fa,il,nH,sH,Kre,iH,Wre,MR,PR,oH,UR,xa,Qre,vR,ZB,eH,ol,al,jd=Oe(()=>{vn=require("fs"),pt=require("path"),Ha=require("worker_threads"),tH=require("yaml"),BR=x(Z()),HR=x(U());jO();rb();nb();iv();K0();j0();rH=x(require("fast-glob")),Fa=x(Ze()),il=x(W());Th();jt();nH=x(ee());An();be();sB();sH=x(Z()),Kre=x(uB());Vd();wB();jB();iH=x(Ir());$f();({readFile:Wre}=vn.promises),MR=BR.get(HR.CONFIG_PARAMS.COMPONENTSROOT),PR=new Map,xa=new Map;a(aH,"loadComponentDirectories");Qre={REST:pf,rest:pf,graphqlSchema:Sh,jsResource:Rh,fastifyRoutes:eR,login:Oh,static:tR,operationsApi:Kre,customFunctions:{},http:{},clustering:SR,authentication:Du,mqtt:LR},vR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(vR,"static",{value:{files:"web/**"}});ZB=[],eH=new Map;a(zre,"setErrorReporter");a(aE,"loadComponent");al=class extends vt{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 yR=T((Jhe,uH)=>{var{isMainThread:cH}=require("worker_threads"),{getTables:Jre}=(be(),te(Fe)),{loadComponentDirectories:Xre,loadComponent:jre}=(jd(),te(Xd)),{resetResources:Zre}=(Cu(),te(EU)),ene=PT(),tne=Ir(),{dirname:rne}=require("path"),{getConnection:nne}=At(),sne=Z(),ine=U(),xR=new Map;async function one(e=!1){!cH&&sne.get(ine.CONFIG_PARAMS.CLUSTERING_ENABLED)&&nne();try{cH&&await ene()}catch(n){console.error(n)}let t=Zre();Jre(),t.isWorker=e,await jre(rne(tne.getConfigFilePath()),t,"hdb",!0,xR),await Xre(xR,t);let r=[];for(let[n]of xR)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(one,"loadRootComponents");uH.exports.loadRootComponents=one});var Ze=T((jhe,Ti)=>{"use strict";var{Worker:ane,MessageChannel:cne,parentPort:as,isMainThread:VR,threadId:une,workerData:Hs}=require("worker_threads"),{PACKAGE_ROOT:lne}=U(),{join:fH,isAbsolute:_ne,extname:dne}=require("path"),{server:EH}=(jt(),te(Ii)),{watch:fne,readdir:Ene}=require("fs/promises"),{totalmem:lH}=require("os"),cl=U(),hH=Z(),xs=W(),{randomBytes:hne}=require("crypto"),{_assignPackageExport:mne}=require("../../index"),pne=U(),_H=1024*1024,Si=[],dn=[],Sne=50,$R=1e4,Tne="restart",mH="request_thread_info",pH="resource_report",SH="thread_info",TH="added-port",gne="ack",FR;mne("threads",dn);Ti.exports={startWorker:qR,restartWorkers:KR,shutdownWorkers:Nne,workers:Si,setMonitorListener:Une,onMessageFromWorkers:yne,onMessageByType:yH,broadcast:Ine,broadcastWithAcknowledgement:Dne,setChildListenerByType:bne,getWorkerIndex:gH,getWorkerCount:RH,getTicketKeys:OH,setMainIsWorker:Ane,setTerminateTimeout:Rne,restartNumber:Hs?.restartNumber||1};dn.onMessageByType=yH;dn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=dn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var YR;function Rne(e){$R=e}a(Rne,"setTerminateTimeout");function gH(){return Hs?Hs.workerIndex:YR?0:void 0}a(gH,"getWorkerIndex");function RH(){return Hs?Hs.workerCount:YR?1:void 0}a(RH,"getWorkerCount");function Ane(e){YR=e}a(Ane,"setMainIsWorker");var AH=1,cE;function OH(){return cE||(cE=VR?hne(48):Hs.ticketKeys,cE)}a(OH,"getTicketKeys");Object.defineProperty(EH,"workerIndex",{get(){return gH()}});Object.defineProperty(EH,"workerCount",{get(){return RH()}});var bH={[mH](e,t){Lne(t)},[pH](e,t){Mne(t,e)}};function qR(e,t={}){let r=process.constrainedMemory?.()||lH();r=Math.min(r,lH(),2e4*_H);let n=hH.get(cl.CONFIG_PARAMS.MAXHEAPMEMORY)??Math.max(Math.floor(r/_H/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let u of dn){let _=new cne;_.existingPort=u,i.push(_),o.push(_.port2)}dne(e)||(e+=".js");let c=new ane(_ne(e)?e:fH(lne,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:AH=t.threadCount,name:t.name,restartNumber:Ti.exports.restartNumber,ticketKeys:OH()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:TH,port:u,threadId:c.threadId},[u]);return lE(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>qR(e,t),c.on("error",u=>{console.error("Worker error:",u),xs.error("Worker error:",u)}),c.on("exit",u=>{Si.splice(Si.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Sne?(t.unexpectedRestarts=c.unexpectedRestarts+1,qR(e,t)):xs.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{bH[u.type]?.(u,c)}),Si.push(c),vne(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(qR,"startWorker");var One=[cl.THREAD_TYPES.HTTP];async function KR(e=null,t=Math.max(AH>3,1),r=!0){if(VR){if(r){let{loadRootComponents:o}=yR();await o()}Ti.exports.restartNumber++,t<1&&(t=t*Si.length);let n=[],s=[];for(let o of Si.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;xs.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Ti.exports.restartNumber,type:cl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=One.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),$R*2).unref();o.on("exit",()=>{clearTimeout(l),n.splice(n.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(n.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===pne.ITC_EVENT_TYPES.CHILD_STARTED&&(xs.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(l)),_.off("message",f))},"startListener");xs.trace("Waiting for worker to start",_.threadId),_.on("message",f)});s.push(l),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}=Hd();r&&(e==="http"||!e)&&hH.get(cl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else as.postMessage({type:Tne,workerType:e})}a(KR,"restartWorkers");function bne(e,t){bH[e]=t}a(bne,"setChildListenerByType");function Nne(e){return KR(e,1/0,!1)}a(Nne,"shutdownWorkers");var NH=[];function yne(e){NH.push(e)}a(yne,"onMessageFromWorkers");var GR=new Map;function yH(e,t){let r=GR.get(e);r||GR.set(e,r=[]),r.push(t)}a(yH,"onMessageByType");var wne=10;async function Ine(e){let t=0;for(let r of dn)try{r.postMessage(e),t++>wne&&(t=0,await new Promise(setImmediate))}catch(n){xs.error("Unable to send message to worker",n)}}a(Ine,"broadcast");var uE=new Map,Cne=1;function Dne(e){return new Promise(t=>{let r=0;for(let n of dn)try{let s=Cne++,i=a(()=>{uE.delete(s),--r===0&&t(),n!==as&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,uE.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of uE)o.port===n&&o()})),n.postMessage(e),r++}catch(s){xs.error("Unable to send message to worker",s)}r===0&&t()})}a(Dne,"broadcastWithAcknowledgement");function Lne(e){e.postMessage({type:SH,workers:wH()})}a(Lne,"sendThreadInfo");function wH(){let e=Date.now();return Si.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(wH,"getChildWorkerInfo");function Mne(e,t){e.resources=t,e.resources.updated=Date.now()}a(Mne,"recordResourceReport");var kR;function Une(e){kR=e}a(Une,"setMonitorListener");var Pne=1e3,dH=!1;function vne(){dH||(dH=!0,setInterval(()=>{for(let e of Si){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}kR&&kR()},Pne).unref())}a(vne,"startMonitoring");var Bne=1e3;if(as){lE(as);for(let e=0,t=Hs.addPorts.length;e<t;e++){let r=Hs.addPorts[e];r.threadId=Hs.addThreadIds[e],lE(r)}setInterval(()=>{let e=process.memoryUsage();as.postMessage({type:pH,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Bne).unref(),FR=a(()=>new Promise((e,t)=>{as.on("message",r),as.postMessage({type:mH});function r(n){n.type===SH&&(as.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else FR=wH;Ti.exports.getThreadInfo=FR;function lE(e,t){dn.push(e),e.on("message",r=>{if(r.type===TH)r.port.threadId=r.threadId,lE(r.port);else if(r.type===gne){let n=uE.get(r.id);n&&n()}else{for(let s of NH)s(r,e);let n=GR.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){xs.error(i)}}}).on("close",()=>{dn.splice(dn.indexOf(e),1)}).on("exit",()=>{dn.splice(dn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(lE,"addPort");if(VR){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await Ene(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(fH(n,i.name));try{for await(let{filename:i}of fne(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await KR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");Ti.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else as.on("message",async e=>{let{type:t}=e;t===cl.ITC_EVENT_TYPES.SHUTDOWN&&(Ti.exports.restartNumber=e.restartNumber,as.unref(),setTimeout(()=>{xs.warn("Thread did not voluntarily terminate",une),process.exit(0)},$R).unref())})});var YI={};ke(YI,{AUDIT_STORE_OPTIONS:()=>HH,createAuditEntry:()=>jl,openAuditStore:()=>EE,readAuditEntry:()=>Lt,setAuditRetention:()=>xne,transactionKeyEncoder:()=>BH});function EE(e){let t=e.auditStore=e.openDB(UH.AUDIT_STORE_NAME,HH);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=_E){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed")return;let o=0,c;try{for(let{key:u,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-WR})){if((_[0]&15)===JR){let l=Lt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=Hne){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,WR/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,fE.getWorkerIndex)()===(0,fE.getWorkerCount)()-1&&s(_E),t}function xne(e,t=_E){WR=e,_E=t}function jl(e,t,r,n,s,i,o){let c=xH[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let u=1;n&&(n>1?qa.setFloat64(0,n):fn.set(qh),u=9),f(0),f(t),d(r),qa.setFloat64(u,e),u+=8,s?d(s):fn[u++]=0,fn[n?8:0]=c;let l=fn.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,Ga.writeKey)(E,fn,u);let p=u-h-1;p>127?p>16383?(jR.error("Key or username was too large for audit entry",E),u=h+1,fn[h]=0):(fn.copyWithin(h+2,h+1,u),qa.setUint16(h,p|32768),u++):fn[h]=p}function f(E){E<128?fn[u++]=E:E<16384?(qa.setUint16(u,E|32768),u+=2):E<1056964608?(qa.setUint32(u,E|3221225472),u+=4):(fn[u]=255,qa.setUint32(u+1,E),u+=5)}}function Lt(e){try{let t=e.dataView||(e.dataView=new XR(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,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:xH[n&7],tableId:i,get recordId(){return MH(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?MH(e,l,d):void 0},getValue(f,E,h){if(n&QR||n&zR&&!E)return f.decoder.decode(e.subarray(t.position));if(n&zR&&h)return ZR(f.getEntry(this.recordId),h,f)}}}catch{return jR.error("Reading audit entry error",e),{}}}function MH(e,t,r){let n=e.subarray(t,r);return(0,Ga.readKey)(n,0,r-t)}var Ga,dE,UH,PH,fE,vH,jR,fn,qa,BH,HH,WR,Hne,_E,QR,zR,IH,JR,CH,DH,LH,xH,XR,Ui=Oe(()=>{Ga=require("ordered-binary"),dE=x(Z()),UH=x(lt()),PH=x(U()),fE=x(Ze()),vH=x(J());Bo();jR=x(W());hE();(0,dE.initSync)();fn=Buffer.alloc(1024),qa=new DataView(fn.buffer,fn.byteOffset,1024),BH={writeKey(e,t,r){return e===Tc?(t.set(Tc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Ga.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,Ga.readKey)(e,t,r)}},HH={encoding:"binary",keyEncoder:BH},WR=(0,vH.convertToMS)((0,dE.get)(PH.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Hne=1e3,_E=1e4;a(EE,"openAuditStore");a(xne,"setAuditRetention");QR=16,zR=32,IH=1,JR=2,CH=3,DH=4,LH=5,xH={put:IH|QR,[IH]:"put",delete:JR,[JR]:"delete",message:CH|QR,[CH]:"message",invalidate:DH,[DH]:"invalidate",patch:LH|zR,[LH]:"patch"};a(jl,"createAuditEntry");a(Lt,"readAuditEntry");XR=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(MH,"readKeySafely")});var eA={};ke(eA,{add:()=>mE,applyReverse:()=>FH,getRecordAtTime:()=>ZR,rebuildUpdateBefore:()=>pE});function mE(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function pE(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,mE(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function FH(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=Fne[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=qH}}function ZR(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let u=n.get(i),_=Lt(u);switch(_.type){case"put":s=_.getValue(r);break;case"patch":FH(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let u in s)s[u]===qH&&(o[u]=!0,c++);for(;c>0&&i>0;){let u=n.get(i),_=Lt(u),l;switch(_.type){case"put":l=_.getValue(r);break;case"patch":l=_.getValue(r);break}for(let d in l)o[d]&&(s[d]=l[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let u in o)s[u]=null;return s}var Fne,qH,hE=Oe(()=>{Ui();a(mE,"add");mE.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};Fne={add:mE};a(pE,"rebuildUpdateBefore");a(FH,"applyReverse");qH={};a(ZR,"getRecordAtTime")});function Gr(e){return e[wt]||(e[wt]=Object.create(null))}function AE(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,u,_;if(o.resolve)_={get(){return o.resolve(this,this[Ne])},set(l){return o.set(this,l)},configurable:!0};else{switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be a string, attempt to assign ${l}`);Gr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be a string, attempt to assign ${l}`);Gr(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be a number, attempt to assign ${l}`);Gr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new En.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Gr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new En.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Gr(this)[c]=l},"set");break;case"BigInt":u=a(function(l){if(!(typeof l=="bigint"||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=BigInt(l);else throw new En.ClientError(`${c} must be a number, attempt to assign ${l}`);Gr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Gr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new En.ClientError(`${c} must be a Date, attempt to assign ${l}`);Gr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Gr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Gr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be an object, attempt to assign ${l}`);Gr(this)[c]=l},"set")}_={get(){let l=this[wt];if(l&&c in l){let f=l[c];if(f?.__op__){let E=this[he]?.[c];return f.update(E)}return f}let d=this[he]?.[c];if(d&&typeof d=="object"){let f=kH(d,o);if(f)return l||(l=this[wt]=Object.create(null)),l[c]=f}return d},set:u,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 u=this[wt];return u?.[o]!==void 0?u[o]:this[he]?.[o]}),i("set",function(o,c){let u=n[o];if(u)return u.set.call(this,c);if(t.sealed)throw new En.ClientError("Can not add a property to a sealed table schema");Gr(this)[o]=c}),i("deleteProperty",function(o){Gr(this)[o]=void 0}),i("toJSON",function(){let o=this[wt],c;for(let _ in o){c||(c=Object.assign({},this[he]));let l=o[_];if(l?.__op__){let d=c[_];l=l.update(d)}c[_]=l}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[he])),Object.assign(c,this)),c||this[he]}),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 kH(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?.[he])throw new Error("Can not track an already tracked object, check for circular references");this[he]=s}},AE(r,t)),new r(e)):new SE(e);case Array:let n=new gE(e.length);n[he]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=kH(o,t?.elements)),n[s]=o}return n;default:return e}}function k_(e){let t=e[wt],r;for(let s in t){r||(r=Object.assign({},e[he]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=k_(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[he])),Object.assign(r,e)),r||e[he]}function No(e,t=e[wt]){let r;if(GH.call(e,he)&&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=No(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[he]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=eA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=No(s);r[n]=s}return r?Object.freeze(r):GH.call(e,he)?e[he]:e}function TE(e){let t=e[he];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[bo]||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?.[he]===s){if(TE(i))return!0}else return!0}}else{let r=e[wt];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[he]===i){if(TE(s))return!0}else return!0}else return!0}}return!1}var En,wt,SE,GH,bo,gE,RE,V_=Oe(()=>{An();En=x(ee());hE();wt=Symbol("own-data");a(Gr,"getChanges");a(AE,"assignTrackedAccessors");a(kH,"trackObject");SE=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[he])throw new Error("Can not track an already tracked object, check for circular references");this[he]=t}};AE(SE,{});a(k_,"collapseData");GH=Object.prototype.hasOwnProperty;a(No,"deepFreeze");a(TE,"hasChanges");bo=Symbol.for("has-array-changes"),gE=class extends Array{static{a(this,"TrackedArray")}[bo];constructor(t){super(t)}splice(...t){return this[bo]=!0,super.splice(...t)}push(...t){return this[bo]=!0,super.push(...t)}pop(){return this[bo]=!0,super.pop()}unshift(...t){return this[bo]=!0,super.unshift(...t)}shift(){return this[bo]=!0,super.shift()}};gE.prototype.constructor=Array;RE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var lp={};ke(lp,{CONTEXT:()=>Ne,ID_PROPERTY:()=>Me,IS_COLLECTION:()=>hn,RECORD_PROPERTY:()=>he,Resource:()=>vt,snake_case:()=>Gne,transformForSelect:()=>bE});function Gne(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function VH(e,t){if(ul=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(ul=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new rA;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){ul=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function kr(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,u,_,l;if(r?(o?(l=i,o=o[Ne]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(l=s,c=l[this.primaryKey]??null,o=i[Ne]||i):l=i:(l=s,c=l[Me]??l[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[Ne]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(u=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]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let E=c.indexOf("?");if(E>-1){let p=this.parseQuery(c.slice(E+1));u?u=Object.assign(p,u):u=p,c=c.slice(0,E)}let h=this.parsePath(c,o,u);h?.id!==void 0?(h.query&&(u?u=Object.assign(h.query,u):u=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(u?.ensureLoaded!=null||u?.async||_?(d=Object.assign({},t),u?.ensureLoaded!=null&&(d.ensureLoaded=u.ensureLoaded),u?.async&&(d.async=u.async),_&&(d.isCollection=!0)):d=t,o.transaction){let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)}else return d.resetTransaction=!0,Ke(o,()=>{let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)},d);function f(E){if(o.authorize){o.authorize=!1;let h=t.type==="read"?E.allowRead(o.user,u,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,l,o):E.allowUpdate(o.user,l,o):t.type==="create"?E.allowCreate(o.user,l,o):E.allowDelete(o.user,u,o);if(h?.then)return h.then(p=>{if(!p)throw new OE(o.user);return typeof l?.then=="function"?l.then(S=>e(E,u,o,S)):e(E,u,o,l)});if(!h)throw new OE(o.user)}return typeof l?.then=="function"?l.then(h=>e(E,u,o,h)):e(E,u,o,l)}a(f,"authorizeActionOnResource")}}function Vr(e,t){let r=new KH.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 tA(e,t,r){let n=e[he];if(n){let s=e[wt];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 bE(e,t){let r=t?.propertyResolvers,n=t[Ne],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):tA(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(c);let _=[],l=i(tA(u,r,n));for(let d of e)_.push(l(d));return _},"transform");let o=e.forceNulls;return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(f=>f&&typeof f=="object"?c(f):f);let _={},l=i(tA(u,r,n)),d;for(let f of e){let E=l(f);E===void 0&&o&&(E=null),E?.then?(d||(d=[]),d.push(E.then(h=>_[f.name||f]=h))):_[f.name||f]=E}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let u=s[c.name];if(!u){let l=r[c.name]?.definition?.tableClass;u=s[c.name]=bE(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var $H,YH,KH,Ne,Me,hn,he,qne,vt,OE,ul,rA,An=Oe(()=>{$H=require("crypto");fc();YH=require("../../index"),KH=x(ee());V_();zi();hf();Ne=Symbol.for("context"),Me=Symbol.for("primary-key"),hn=Symbol("is-collection"),he=Symbol("stored-record"),qne={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},vt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Me]=t;let n=r?.[Ne];this[Ne]=n!==void 0?n:r||null}static get=kr(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null&&!c.selectApplied){let _=bE(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=kr(function(t,r,n,s){if(Array.isArray(s)&&t[hn]){let i=[],o=n.authorize;for(let c of s){let u=t.constructor,_=u.getResource(c[u.primaryKey],n,{async:!0});_.then?i.push(_.then(l=>l.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):Vr(t,"put")},{hasContent:!0,type:"update"});static patch=kr(function(t,r,n,s){return t.patch?t.patch(s,r):Vr(t,"patch")},{hasContent:!0,type:"update"});static delete=kr(function(t,r,n,s){return t.delete?t.delete(r):Vr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,$H.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),Ke(n,()=>{let i=new this(s,n),o=i.update?i.update(r):Vr(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=kr(function(t,r,n,s){return t.invalidate?t.invalidate(r):Vr(t,"delete")},{hasContent:!1,type:"update"});static post=kr(function(t,r,n,s){return t[Me]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=kr(function(t,r,n,s){return t.connect?t.connect(s,r):Vr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=kr(function(t,r,n,s){return t.subscribe?t.subscribe(r):Vr(t,"subscribe")},{type:"read"});static publish=kr(function(t,r,n,s){return t[Me]!=null&&t.update?.(),t.publish?t.publish(s,r):Vr(t,"publish")},{hasContent:!0,type:"create"});static search=kr(function(t,r,n,s){let i=t.search?t.search(r):Vr(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=bE(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=kr(function(t,r,n,s){return t.search?t.search(s,r):Vr(t,"search")},{hasContent:!0,type:"read"});static copy=kr(function(t,r,n,s){return t.copy?t.copy(s,r):Vr(t,"copy")},{type:"create"});static move=kr(function(t,r,n,s){return t.move?t.move(s,r):Vr(t,"move")},{type:"delete"});post(t){if(this[hn])return this.constructor.create(this[Me],t,this[Ne]);Vr(this,"post")}static isCollection(t){return t?.[hn]}static coerceId(t){return t}static parseQuery(t){return Ef(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&&qne[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:VH(t,this),isCollection:ul}}let i=VH(t,this);return ul?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Ne],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(s=_?.find(l=>l.constructor===c),s)return s;_||u.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=u.find(_=>_[Me]===t&&_.constructor===c),s)return s;if(u.push(s=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Me],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[hn]=!0),s}subscribe(t){return new Rn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Rn}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[Me]}getContext(){return this[Ne]}};vt.prototype[Ne]=null;(0,YH._assignPackageExport)("Resource",vt);a(Gne,"snake_case");OE=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(VH,"pathToId");rA=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(kr,"transactional");a(Vr,"missingMethod");a(tA,"selectFromObject");a(bE,"transformForSelect")});function QH(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;ka||((0,NE.onMessageByType)(WH,l=>{zH(l.path)}),ka=Object.create(null));let o=ka[s]||(ka[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=Ea(t);let u=new sA(r);u.startTime=n;let _=c.get(t);return _?_.push(u):(c.set(t,_=[u]),_.tables=c,_.key=t),u.subscriptions=_,u}function zH(e,t){if(!ka)return;let r=ka[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=Lt(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=Ea(o.recordId),d=0;do{let f=c.get(l);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=s){(0,nA.info)("omitting",u,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(u,o,s,p)}catch(p){console.error(p),(0,nA.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E):l=null,d++}while(!0)}if(n)for(let s of n)s.txnInProgress=null,s.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function JH(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,NE.broadcast)({type:WH,path:s}),zH(s,!0)})}}var nA,NE,WH,ka,gme,sA,XH=Oe(()=>{nA=x(W()),NE=x(Ze());fc();Cu();Ui();WH="transaction",gme=Buffer.alloc(4096);a(QH,"addSubscription");sA=class extends Rn{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(zH,"notifyFromTransactionData");a(JH,"listenToCommits")});var Hg={};ke(Hg,{coerceType:()=>yE,makeTable:()=>CE,setServerUtilities:()=>Jne,updateResource:()=>wE});function CE(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:p}=e;p||(p=[]),JH(i,u);let S=Vh(i,n,u),O=0,g,R,B={},H=Promise.resolve(),v,M,$;for(let Y of p)(Y.assignCreatedTime||Y.name==="__createdtime__")&&(v=Y),(Y.assignUpdatedTime||Y.name==="__updatedtime__")&&(M=Y),Y.expiresAt&&($=Y),Y.isPrimaryKey&&(B=Y);let K,z=[],se=[],Te=1,oe=2,xe={},de={},It=864e5,bl,Nl,ks,TA=!1,kE,Yx=i.getRange({start:!1,end:!1}).constructor,Kx=10,Wx=6;E&&AA();class We extends vt{static name=s;static primaryStore=i;static auditStore=u;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=M;static propertyResolvers;static sources=[];static get expirationMS(){return d}static dbisDB=l;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 I=a(w=>{let y=this.sources.slice(0,-1);if(y=y.filter(P=>P[w]&&(!P[w].reliesOnPrototype||P.prototype[w])),y.length>0)if(y.length===1){let P=y[0];return(L,D,F)=>{if(L?.source!==P)return P[w](D,F,L)}}else return(P,L,D)=>{let F=[];for(let G of y){if(P?.source===G)break;F.push(G[w](L,D,P))}return Promise.all(F)}},"getApplyToIntermediateSource"),b=this.sources[this.sources.length-1],N=a(w=>{if(b[w]&&(!b[w].reliesOnPrototype||b.prototype[w]))return(y,P,L)=>{if(!y?.source)return b[w](P,L,y)}},"getApplyToCanonicalSource");return xe={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish")},de={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish"),invalidate:I("invalidate")},(async()=>{let w=!1,y=a(async(P,L)=>{let D=P.value,F=P.table?et[c][P.table]:We;if(c===Bn.SYSTEM_SCHEMA_NAME&&(P.table===Bn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||P.table===Bn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(w=!0),P.id===void 0&&(P.id=D[F.primaryKey],P.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(P));P.source=m;let G=await F.getResource(P.id,L,Va);switch(P.type){case"put":return G._writeUpdate(D,!0,Va);case"patch":return G._writeUpdate(D,!1,Va);case"delete":return G._writeDelete(Va);case"publish":return G._writePublish(D,Va);case"invalidate":return G.invalidate(Va);default:ze.error("Unknown operation",P.type,P.id)}},"writeUpdate");try{let P=m.subscribe;P&&h==null&&(h=!0);let L=m.subscribeOnThisThread?m.subscribeOnThisThread((0,wo.getWorkerIndex)()):(0,wo.getWorkerIndex)()===0,D=P&&L&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(D){let F;for await(let G of D)try{if(!(G.type==="transaction"?G.writes[0]:G)){ze.error("Bad subscription event",G);continue}if(G.source=m,F)if(G.beginTxn)F.resolve();else{y(G,F);continue}if(G.type==="end_txn")continue;let ae=Ke(G,()=>{if(G.type==="transaction"){let re=[];for(let ce of G.writes)try{re.push(y(ce,G))}catch(ve){throw ve.message+=" writing "+JSON.stringify(ce)+" of event "+JSON.stringify(G),ve}return Promise.all(re)}else if(G.type==="define_schema"){let re=this.attributes.slice(0),ce;for(let ve of G.attributes)re.find(ne=>ne.name===ve.name)||(re.push(ve),ce=!0);ce&&(ot({table:s,database:c,attributes:re,origin:"cluster"}),ml.signalSchemaChange(new pl.SchemaEventMsg(process.pid,Bn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return G.beginTxn?(F=G,y(G,G),new Promise(re=>{F.resolve=re})):y(G,G)});w&&(await ae,ml.signalUserChange(new pl.UserEventMsg(process.pid))),G.onCommit&&(ae?.then?ae.then(G.onCommit):G.onCommit())}catch(ie){ze.error("error in subscription handler",ie)}}}catch(P){ze.error(P)}})(),this}static getResource(m,A,I){let b=super.getResource(m,A,I);if(m!=null){Qa(m);try{if(b.hasOwnProperty(he))return b;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let N=!I?.async||i.cache?.get(m),w=gr(A),y=w.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return VE(m,A,{transaction:y},N,P=>{if(P?wE(b,P):b[he]=null,A.onlyIfCached&&A.noCacheStore){if(!b.doesExist())throw new mn.ServerError("Entry is not cached",504)}else if(I?.ensureLoaded){let L=$E(m,P,A,b);if(L)return w?.disregardReadTxn(),b[iA]=!0,aA(L,D=>(wE(b,D),b))}return b})}catch(N){throw N.message.includes("Unable to serialize object")&&(N.message+=": "+JSON.stringify(m)),N}}return b}ensureLoaded(){let m=$E(this[Me],this[$r],this[Ne]);if(m)return this[iA]=!0,aA(m,A=>{this[$r]=A,this[he]=A.value,this[El]=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,It=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");It=It||(d+f)/4,KE()}static enableAuditing(m=!0){E=m,m&&AA(),We.audit=m}static coerceId(m){return m===""?null:yE(m,B)}static async dropTable(){if(delete et[c][s],c===o){for(let m of p)l.remove(We.tableName+"/"+m.name),r[m.name]?.drop();l.remove(We.tableName+"/"),i.drop(),await l.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));ml.signalSchemaChange(new pl.SchemaEventMsg(process.pid,Bn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[hn])return this.search(m);if(this[Me]===null){if(m?.conditions)return this.search(m);let A=We.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[Ne]?.returnNonexistent)return this}allowRead(m,A){let I=wl(m);if(I?.read){if(I.isSuperUser)return!0;let b=I.attribute_permissions,N=A?.select;if(b?.length>0||TA&&N){if(A||(A={}),N){let w=b?.length>0&&oA(b,"read");A.select=N.map(y=>{let P=y.name||y;if(!w||w[P]){let L=ks[P]?.definition?.tableClass;if(L){if(y.name||(y={name:y}),!L.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else A.select=b.filter(w=>w.read&&!ks[w.attribute_name]).map(w=>w.attribute_name);return A}else return!0}}allowUpdate(m,A){let I=wl(m);if(I?.update){let b=I.attribute_permissions;if(b?.length>0){let N=oA(b,"update");for(let w in A)if(!N[w])return!1;for(let w of b){let y=w.attribute_name;!w.update&&!(y in A)&&(A[y]=this.getProperty(y))}}return!0}}allowCreate(m,A){if(this[hn]){let I=wl(m);if(I?.insert){let b=I.attribute_permissions;if(b?.length>0){let N=oA(b,"insert");for(let w in A)if(!N[w])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return wl(m)?.delete}update(m,A){if(!gr(this[Ne]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let b;return typeof m=="object"&&m&&(A?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[he]={},this[wt]=m):(b=this[wt],b&&(m=Object.assign(b,m)),this[wt]=b=m)),this._writeUpdate(this[wt],A),this}addTo(m,A){if(typeof A=="number")this[ll]===ZH?this.set(m,(+this.getProperty(m)||0)+A):(this[ll]||this.update(),this.set(m,new RE(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[Ne],I=this[Me];Qa(I),gr(this[Ne]).addWrite({key:I,store:i,invalidated:!0,entry:this[$r],nodeName:this[Ne]?.nodeName,before:xe.invalidate?.bind(this,A,I),beforeIntermediate:de.invalidate?.bind(this,A,I),commit:(N,w)=>{if(w?.version>N)return;let y=null;for(let P in r)y||(y={}),y[P]=this.getProperty(P);S(I,y,this[$r],N,_l,E,this[Ne],0,"invalidate")}})}static evict(m,A,I){let b=this.Source,N;if(!((R||E)&&(!A||(N=i.getEntry(m),!N||!A)||N.version!==I))){if(R){if(i.hasLock(m,N.version))return;let w;for(let y in r)w||(w={}),w[y]=A[y];if(w)return S(m,w,N,I,dl,null,null,0,null,!0)}return i.ifVersion(I,()=>{yl(m,A,null)}),E?S(m,null,N,I,dl,null,null,0,null,!0):i.remove(m,I)}}lock(){throw new Error("Not yet implemented")}static operation(m,A){return m.table||=s,m.schema||=c,ix.operation(m,A)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,A,I){let b=this[Ne],N=gr(b),w=this[Me];Qa(w);let y=this[$r];this[ll]=A?ZH:Wne;let P={key:w,store:i,entry:y,nodeName:b?.nodeName,validate:L=>{m||(m=this[wt]),A||m&&TE(m)?(this.validate(m,!A),b?.source||(M&&(m[M.name]=M.type==="Date"?new Date(L):M.type==="String"?new Date(L).toISOString():L),A&&(t&&m[t]!==w&&(m[t]=w),v&&(y?.value?m[v.name]=y?.value[v.name]:m[v.name]=v.type==="Date"?new Date(L):v.type==="String"?new Date(L).toISOString():L),m=No(m)))):N.removeWrite(P)},before:A?xe.put?()=>xe.put(b,w,m):null:xe.patch?()=>xe.patch(b,w,m):xe.put?()=>xe.put(b,w,No(this)):null,beforeIntermediate:A?de.put?()=>de.put(b,w,m):null:de.patch?()=>de.patch(b,w,m):de.put?()=>de.put(b,w,No(this)):null,commit:(L,D,F)=>{if(F){if(b&&D?.version>(b.lastModified||0)&&(b.lastModified=D.version),this[$r]=D,D?.value?.[he])throw new Error("Can not assign a record to a record, check for circular references");A||(this[he]=D?.value??null)}this[wt]=m,this[El]=L;let G=D?.value,ie=m;if(this[ll]=0,D?.version>=L)if(E){let ve=D.localTime,ne=D.version;for(;ie&&(ve>L||ne>=L&&ve>0);){let fe=u.get(ve),j=Lt(fe);if(ne=j.version,ne>L){if(j.type==="patch"){let le=j.getValue(i);ie=pE(ie,le)}else if(j.type==="put"||j.type==="delete")return}else if(ne===L)return;ve=j.previousLocalTime}}else{if(A)return;ie=pE(ie,G)}let ae;if(A?ae=ie:(this[he]=G,ae=A?ie:No(this,ie)),this[he]=ae,ae?.[he])throw new Error("Can not assign a record to a record, check for circular references");let re;A||(re=m),yl(w,G,ae);let ce=A?"put":"patch";S(w,ae,D,L,0,E,b,b.expiresAt||(d?d+Date.now():0),ce,!1,re)}};N.addWrite(P)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[hn]){for await(let A of this.search(m))(await We.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[he]?this._writeDelete(m):!1}_writeDelete(m){let A=gr(this[Ne]),I=this[Me];Qa(I);let b=this[Ne];return A.addWrite({key:I,store:i,resource:this,nodeName:b?.nodeName,before:xe.delete?.bind(this,b,I),beforeIntermediate:de.delete?.bind(this,b,I),commit:(N,w,y)=>{let P=w?.value;y&&(b&&w?.version>(b.lastModified||0)&&(b.lastModified=w.version),wE(this,w)),!(w?.version>N)&&(yl(this[Me],P),ze.trace("Write delete entry",I,N),E||h?(S(I,null,this[$r],N,0,E,this[Ne],0,"delete"),E||KE()):i.remove(this[Me]))}}),!0}search(m){let A=this[Ne],I=gr(A);if(!m)throw new Error("No query provided");let b=m.conditions;b?b.length===void 0&&(b=b[Symbol.iterator]?Array.from(b):[b]):b=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Me]&&(b=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(b));let N,w={};function y(j,le){let St;switch(le){case"and":case void 0:if(j.length<1)throw new Error('An "and" operator requires at least one condition');St=!0;break;case"or":if(j.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+le)}let Hn=St&&{},xn;for(let Qe of j){if(Qe.conditions){Qe.conditions=y(Qe.conditions,Qe.operator);continue}let Rr=Qe[0]??Qe.attribute,zr=Rr==null?B:Ls(p,Rr);if(zr){if(St){let Ar=Mn(Rr),Fn=Hn[Ar];Fn?(Fn.push(Qe),xn=!0):Hn[Ar]=[Qe]}(zr.type||ug[Qe.comparator])&&(Qe[1]===void 0?Qe.value=L(Qe.value,zr):Qe[1]=L(Qe[1],zr))}else if(Rr!=null)throw(0,mn.handleHDBError)(new Error,`${Rr} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return j;if(xn)for(let Qe in Hn){let Rr=Hn[Qe],zr=Rr.length;if(zr>1)for(let Ar=0;Ar<zr;Ar++){let Fn=Rr[Ar];if(Fn.comparator==="ge"||Fn.comparator==="greater_than_equal")for(let Vs=0;Vs<zr;Vs++){let Do=Rr[Vs];(Do.comparator==="le"||Do.comparator==="less_than_equal")&&(Fn.comparator="between",Fn.value=[Fn.value,Do.value],j.splice(j.indexOf(Do),1))}if(Fn.comparator==="equals"||!Fn.comparator){for(let Vs=0;Vs<zr;Vs++)if(Vs!==Ar){let Do=Rr[Vs];j.splice(j.indexOf(Do),1)}break}}}return j}a(y,"prepareConditions");function P(j,le){if(m.enforceExecutionOrder)return j;for(let St of j)St.conditions&&(St.conditions=P(St.conditions,St.operator));return j.length>1&&le!=="or"?(0,sx.sortBy)(j,ff(We)):j}a(P,"orderConditions");function L(j,le){return Array.isArray(j)?j.map(St=>yE(St,le)):yE(j,le)}a(L,"coerceTypedValues");let D=m.operator;(b.length>0||D)&&(b=y(b,D));let F=typeof m.sort=="object"&&m.sort,G;if(F&&D!=="or"){let j=F.attribute;if(N=b.find(le=>Mn(le.attribute)===Mn(j)),!N){if(!Ls(p,j))throw(0,mn.handleHDBError)(new Error,`${Array.isArray(j)?j.join("."):j} is not a defined attribute`,404);N={attribute:j,comparator:"sort"},b.push(N)}N.descending=!!F.descending}b=P(b,D),F&&(b[0]===N?F.next&&(G={dbOrderedAttribute:F.attribute,attribute:F.next.attribute,descending:F.next.descending,next:F.next.next}):(N&&b.splice(b.indexOf(N),1),G=F));let ie=m.select;if(b.length===0&&(b=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:b,operator:D,postOrdering:G,selectApplied:!!ie};let ae=I.useReadTxn(),re=lg(b,D,We,ae,m,A,(j,le)=>gA(j,ie,A,le),w),ce=m.ensureLoaded!==!1;G||(re=fe(re));let ve=We.transformEntryForSelect(ie,A,w,ce,!0),ne=We.transformToOrderedSelect(re,ie,G,A,ve);function fe(j){return m.offset||m.limit!==void 0?j.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):j}return a(fe,"applyOffset"),G&&(ne=fe(ne)),ne.onDone=()=>{ne.onDone=null,I.doneReadTxn()},ne.selectApplied=!0,ne.getColumns=()=>{if(ie){let j=[];for(let le of ie)le==="*"?j.push(...p.map(St=>St.name)):j.push(le.name||le);return j}return p.map(j=>j.name)},ne}static transformToOrderedSelect(m,A,I,b,N){let w=new Yx;if(I){m=gA(m,A,b,null);let y;w.iterate=function(){let L,D=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),F,G=I.dbOrderedAttribute,ie,ae,re=!0;function ce(ne){let fe=ne.next&&ce(ne.next),j=ne.descending;return(le,St)=>{let Hn=YE(le,ne.attribute,b),xn=YE(St,ne.attribute,b),Qe=j?(0,Io.compareKeys)(xn,Hn):(0,Io.compareKeys)(Hn,xn);return Qe===0?fe?.(le,St)||0:Qe}}a(ce,"createComparator");let ve=ce(I);return{async next(){let ne;if(L)if(ne=L.next(),ne.done){if(F)return w.onDone&&w.onDone(),ne}else return{value:await N(ne.value)};y=[],ie&&y.push(ie);do if(ne=await D.next(),ne.done){if(F=!0,y.length)break;return w.onDone&&w.onDone(),ne}else{let fe=ne.value;if(fe?.then&&(fe=await fe),G){let j=YE(fe,G,b);if(re)re=!1,ae=j;else if(j!==ae){ae=j,ie=fe;break}}y.push(fe)}while(!0);return I.isGrouped,y.sort(ve),L=y[Symbol.iterator](),ne=L.next(),ne.done?(w.onDone&&w.onDone(),ne):{value:await N(ne.value)}},return(){w.onDone&&w.onDone(),D.return()},throw(){w.onDone&&w.onDone(),D.throw()}}};let P=a(L=>{if(typeof A=="object"&&Array.isArray(L.attribute))for(let D=0;D<A.length;D++){let F=A[D],G;if(F.name===L.attribute[0]){for(G=F.sort||(F.sort={});G.next;)G=G.next;G.attribute=L.attribute.slice(1),G.descending=L.descending}else F===L.attribute[0]&&(A[D]=G={name:F,sort:{attribute:L.attribute.slice(1),descending:L.descending}})}L.next&&P(L.next)},"applySortingOnSelect");P(I)}else w.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),w=w.map(N);return w}static transformEntryForSelect(m,A,I,b,N){if(m&&(m===t||m?.length===1&&m[0]===t)){let L=a(D=>D?.key??D,"transform");return m===t?L:m.asArray?D=>[L(D)]:D=>({[t]:L(D)})}let w;b&&R&&!m?.every(L=>{let D;return typeof L=="object"?D=L.name:D=L,r[D]||D===t})&&(w=!0);let y,P=a(L=>{let D;if(L!=null){if(kE=L,D=L.value||L.deref?.(),!D&&(L.key===void 0||L.deref)){if(L=VE(L.key??L,A,{transaction:gr(A).getReadTxn(),lazy:m?.length<4},!1,F=>F),L?.then)return L.then(P);D=L?.value}if(w&&(L.metadataFlags&(_l|dl)||L.expiresAt&&L.expiresAt<Date.now())){let F=$E(L.key??L,L,A);if(F?.then)return F.then(P)}}if(D==null)return N?yo.SKIP:D;if(m&&!(m[0]==="*"&&m.length===1)){let F,G=a((ae,re)=>{let ce;typeof ae=="object"?ce=ae.name:ce=ae;let ve=ks?.[ce],ne;if(ve){let fe=I?.[ce];if(fe)if(fe.hasMappings){let le=ve.from?D[ve.from]:Mn(L.key);ne=fe.get(le),ne||(ne=[])}else ne=fe.fromRecord?.(D);else ne=ve(D,A,L);let j=a(le=>{if(le&&typeof le=="object"){let St=ve.definition?.tableClass||We;y||(y={});let Hn=y[ce]||(y[ce]=St.transformEntryForSelect(ce===ae?null:ae.select||(Array.isArray(ae)?ae:null),A,fe,b));if(Array.isArray(le)){let xn=[],Qe=St.transformToOrderedSelect(le,ae.select,typeof ae.sort=="object"&&ae.sort,A,Hn)[Symbol.asyncIterator](),Rr=a(Ar=>{for(;!Ar.done;){if(Ar?.then)return Ar.then(Rr);xn.push(Ar.value),Ar=Qe.next()}re(xn,ce)},"nextValue"),zr=Rr(Qe.next());zr&&(F||(F=[]),F.push(zr));return}else if(le=Hn(le),le?.then){F||(F=[]),F.push(le.then(xn=>re(xn,ce)));return}}re(le,ce)},"handleResolvedValue");ne?.then?(F||(F=[]),F.push(ne.then(j))):j(ne);return}else ne=D[ce],ne&&typeof ne=="object"&&ce!==ae&&(ne=this.transformEntryForSelect(ae.select||ae,A,null)({value:ne}));re(ne,ce)},"selectAttribute"),ie;if(typeof m=="string")G(m,ae=>{ie=ae});else if(Array.isArray(m))if(m.asArray)ie=[],m.forEach((ae,re)=>{ae==="*"?m[re]=D:G(ae,ce=>ie[re]=ce)});else{ie={};let ae=m.forceNulls;for(let re of m)if(re==="*")for(let ce in D)ie[ce]=D[ce];else G(re,(ce,ve)=>{ce===void 0&&ae&&(ce=null),ie[ve]=ce})}else throw new mn.ClientError("Invalid select"+m);return F?Promise.all(F).then(()=>ie):ie}return D},"transform");return P}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||ot({table:s,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let A=!m.rawEvents,I=QH(We,this[Me]??null,function(y,P,L,D){try{let F=P.getValue?.(i,A);if(!F&&P.type==="patch"&&A){let G=i.getEntry(y);G?.version===P.version?F=G.value:F=P.getValue?.(i,!0,L),P.type="put"}this.send({id:y,timestamp:L,value:F,version:P.version,type:P.type,beginTxn:D})}catch(F){ze.error(F)}},m.startTime||0,this[hn]);this[hn]&&(I.includeDescendants=!0,m.onlyChildren&&(I.onlyChildren=!0)),m.crossThreads===!1&&(I.crossThreads=!1),m.supportsTransactions&&(I.supportsTransactions=!0);let b=this[Me],N=m.previousCount;N>1e3&&(N=1e3);let w=m.startTime;if(this[hn]){if(w){if(N)throw new mn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:P}of u.getRange({start:w,exclusiveStart:!0})){let L=Lt(P);if(L.tableId!==n)continue;let D=L.recordId;(b==null||rx(b,D))&&I.send({id:D,timestamp:y,...L}),I.startTime=y}}else if(N){let y=[];for(let{key:P,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let D=Lt(L);if(D.tableId!==n)continue;let F=D.recordId;if(b==null||rx(b,F)){let G=D.getValue(i,A,P);if(y.push({id:F,timestamp:P,value:G,version:D.version,type:D.type}),--N<=0)break}}catch(D){ze.error("Error getting history entry",P,D)}for(let P=y.length;P>0;)I.send(y[--P]);y[0]&&(I.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:P,version:L,localTime:D}of i.getRange({start:b??!1,end:b==null?void 0:[b,Io.MAXIMUM_KEY],versions:!0}))P&&I.send({id:y,version:L,timestamp:D,value:P})}else{N&&!w&&(w=0);let y=this[$r]?.localTime;if(y===kh&&(i.cache?.delete(b),this[$r]=i.getEntry(b),ze.trace("re-retrieved record",y,this[$r]?.localTime),y=this[$r]?.localTime),ze.trace("Subscription from",w,"from",b,y),w<y){let P=[],L=y;do{let D=u.get(L);if(D){m.omitCurrent=!0;let F=Lt(D),G=F.getValue(i,A,L);A&&(F.type="put"),P.push({id:b,value:G,timestamp:L,...F}),L=F.previousLocalTime}else break;N&&N--}while(L>w&&N!==0);for(let D=P.length;D>0;)I.send(P[--D]);I.startTime=y}!m.omitCurrent&&this.doesExist()&&I.send({id:b,version:this[El],timestamp:y,value:this})}return m.listener&&I.on("data",m.listener),I}doesExist(){return!!(this[he]||this[ll])}publish(m,A){this._writePublish(m,A)}_writePublish(m,A){let I=gr(this[Ne]),b=this[Me]||null;Qa(b);let N=this[Ne];I.addWrite({key:b,store:i,entry:this[$r],nodeName:N?.nodeName,validate:()=>{this.validate(m)},before:xe.publish?.bind(this,N,b,m),beforeIntermediate:de.publish?.bind(this,N,b,m),commit:(w,y,P)=>{y===void 0&&h&&!E&&KE(),S(b,y?.value??null,y,y?.version||w,0,!0,N,y?.expiresAt,"message",!1,m)}})}validate(m,A){let I,b=a((N,w,y)=>{if(w.type&&N!=null)if(A&&N.__op__&&(N=N.value),w.properties){typeof N!="object"&&(I||(I=[])).push(`Property ${y} must be an object${w.type?" ("+w.type+")":""}`);let P=w.properties;for(let L=0,D=P.length;L<D;L++){let F=P[L],G=b(N[F.name],F,y+"."+F.name);G&&(N[F.name]=G)}}else switch(w.type){case"Int":(typeof N!="number"||N>>0!==N)&&(I||(I=[])).push(`Property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof N!="number"||!(Math.floor(N)===N&&Math.abs(N)<=9007199254740992))&&(I||(I=[])).push(`Property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof N!="number"&&(I||(I=[])).push(`Property ${y} must be a number`);break;case"ID":typeof N=="string"||N?.length>0&&N.every?.(P=>typeof P=="string")||(I||(I=[])).push(`Property ${y} must be a string, or an array of strings`);break;case"String":typeof N!="string"&&(I||(I=[])).push(`Property ${y} must be a string`);break;case"Boolean":typeof N!="boolean"&&(I||(I=[])).push(`Property ${y} must be a boolean`);break;case"Date":if(!(N instanceof Date)){if(typeof N=="string"||typeof N=="number")return new Date(N);(I||(I=[])).push(`Property ${y} must be a Date`)}break;case"BigInt":if(typeof N!="bigint"){if(typeof N=="string"||typeof N=="number")return BigInt(N);(I||(I=[])).push(`Property ${y} must be a bigint`)}break;case"Bytes":N instanceof Uint8Array||(I||(I=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(N)){if(w.elements)for(let P=0,L=N.length;P<L;P++){let D=N[P],F=b(D,w.elements,y+"[*]");F&&(N[P]=F)}}else(I||(I=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break}w.nullable===!1&&N==null&&(I||(I=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let N=0,w=p.length;N<w;N++){let y=p[N];if(!y.relationship&&(!A||y.name in m)){let P=b(m[y.name],y,y.name);P&&(m[y.name]=P)}}if(I)throw new mn.ClientError(I.join(". "))}getUpdatedTime(){return this[El]}wasLoadedFromSource(){return R?!!this[iA]:void 0}static async addAttributes(m){let A=p.slice(0);for(let I of m){if(!I.name)throw new mn.ClientError("Attribute name is required");if(I.name.match(/[`/]/))throw new mn.ClientError("Attribute names cannot include backticks or forward slashes");A.push(I)}return ot({table:s,database:c,schemaDefined:_,attributes:A}),We.indexingOperation}static async removeAttributes(m){let A=p.filter(I=>!m.includes(I.name));return ot({table:s,database:c,schemaDefined:_,attributes:A}),We.indexingOperation}static getRecordCount(m){let A=i.getStats().entryCount,I=5e3,b=1e3,N;A>I&&!m?.exactCount&&(N=b);let w=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:N}))y!=null&&w++;if(N){let y=w;w=0;for(let{value:ce}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:N}))ce!=null&&w++;let P=N*2,L=(w+y)/P,D=Math.pow((w-y+1)/N/2,2)+L*(1-L)/P,F=Math.max(Math.sqrt(D)*A,1),G=Math.round(L*A),ie=Math.max(G-1.96*F,0),ae=Math.min(G+1.96*F,A),re=Math.pow(10,Math.round(Math.log10(F)));return re>G&&(re=re/10),w=Math.round(G/re)*re,{recordCount:w,estimatedRange:[Math.round(ie),Math.round(ae)]}}return{recordCount:w}}static updatedAttributes(){ks=this.propertyResolvers={$id:(m,A,I)=>({value:I.key}),$updatedtime:(m,A,I)=>I.version,$record:(m,A,I)=>I?{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)"),TA=!0,A.to)m.elements?.definition?(ks[m.name]=m.resolve=(I,b,N)=>{let w=I[A.from?A.from:t],y=m.elements.definition.tableClass;return N?ba({attribute:A.to,value:w},gr(b).getReadTxn(),!1,y).asArray:y.search([{attribute:A.to,value:w}],b).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 I=m.definition||m.elements?.definition;I?(ks[m.name]=m.resolve=(b,N,w)=>{let y=b[A.from];if(y!==void 0){if(m.elements){let P,L=y.map(D=>{let F=w?I.tableClass.primaryStore.getEntry(D,{transaction:gr(N).getReadTxn()}):I.tableClass.get(D,N);return F?.then&&(P=!0),F});return A.filterMissing?P?Promise.all(L).then(D=>D.filter(nx)):L.filter(nx):P?Promise.all(L):L}return w?I.tableClass.primaryStore.getEntry(y,{transaction:gr(N).getReadTxn()}):I.tableClass.get(y,N)}},m.set=(b,N)=>{if(Array.isArray(N)){let w=N.map(y=>y[Me]||y[I.tableClass.primaryKey]);b[A.from]=w}else{let w=N[Me]||N[I.tableClass.primaryKey];b[A.from]=w}},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`)}AE(this,this)}static async deleteHistory(m=0){let A;for(let{key:I,value:b}of u.getRange({start:0,end:m}))await fl(),Lt(b).tableId===n&&(A=u.remove(I));await A}static async*getHistory(m=0,A=1/0){for(let{key:I,value:b}of u.getRange({start:m,end:A})){await fl();let N=Lt(b);N.tableId===n&&(yield{id:N.recordId,localTime:I,version:N.version,type:N.type,value:N.getValue(i,!0,I),user:N.user})}}static async getHistoryOfRecord(m){let A=[];if(m==null)throw new Error("An id is required");let I=i.getEntry(m);if(!I)return A;let b=I.localTime;if(!b)throw new Error("The entry does not have a local audit time");let N=0;do{await fl();let w=u.get(b);if(w){let y=Lt(w);A.push({id:y.recordId,localTime:b,version:y.version,type:y.type,value:y.getValue(i,!0,b),user:y.user}),b=y.previousLocalTime}else break}while(N<1e3&&b);return A.reverse()}static cleanup(){K?.remove()}}We.updatedAttributes();let Qx=We.prototype;return Qx[Kne]=!0,d&&We.setTTLExpiration(d/1e3),$&&zx(),We;function yl(Y,m,A){let I;for(let b in r){let N=r[b],w=N.isIndexing,y=A?.[b],P=m?.[b];if(y===P&&!w)continue;I=!0;let L=N.indexNulls,D=(0,hl.getIndexedValues)(P,L);if(D){jH&&N.prefetch(D.map(F=>({key:F,value:Y})),tx);for(let F=0,G=D.length;F<G;F++)N.remove(D[F],Y)}if(D=(0,hl.getIndexedValues)(y,L),D){jH&&N.prefetch(D.map(F=>({key:F,value:Y})),tx);for(let F=0,G=D.length;F<G;F++)N.put(D[F],Y)}}return I}a(yl,"updateIndices");function Qa(Y){switch(typeof Y){case"number":return!0;case"string":if(Y.length<659)return!0;if(Y.length>ex)throw new Error("Primary key size is too large: "+Y.length);break;case"object":if(Y===null)return!0;break;case"bigint":if(Y<2n**64n&&Y>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof Y)}if((0,Io.writeKey)(Y,Qne,0)>ex)throw new Error("Primary key size is too large: "+Y.length);return!0}a(Qa,"checkValidId");function VE(Y,m,A,I,b){let N=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),A.transaction?.isDone)return b(null,Y);let w=i.getEntry(Y,A);return w&&m&&(w?.version>(m.lastModified||0)&&(m.lastModified=w.version),w?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=w.localTime)),b(w,Y)},"whenPrefetched");return I?N():Te>0?(Te--,N()):new Promise((w,y)=>{Te===0?(Te--,i.prefetch([Y],()=>{P(),L()})):(z.push(Y),se.push(L),z.length>Wx&&(Te--,P()));function P(){if(z.length>0){let D=se;i.prefetch(z,()=>{Te===-1?P():Te++;for(let F of D)F()}),z=[],se=[],oe>2&&oe--}else Te=oe,oe<Kx&&oe++}a(P,"prefetch");function L(){try{w(N())}catch(D){y(D)}}a(L,"load")})}a(VE,"loadLocalRecord");function wl(Y){if(!Y?.role)return;let m=Y.role.permission;if(m.super_user)return zne;let A=m[c],I,b=A?.tables;if(b)return b[s];if(c==="data"&&(I=m[s])&&!I.tables)return I}a(wl,"getTablePermissions");function $E(Y,m,A,I){if(R){let b;if(A.noCache?b=!0:(m?(!m.value||m.metadataFlags&(_l|dl)||m.expiresAt&&m.expiresAt<Date.now())&&(b=!0):b=!0,tn(!b,"cache-hit",s)),b){let N=RA(Y,m,A).then(w=>(w?.value?.[he]&&ze.error("Can not assign a record with a record property"),A&&(w?.version>(A.lastModified||0)&&(A.lastModified=w.version),A.lastRefreshed=Date.now()),w));if(A?.onlyIfCached||m?.value&&I?.allowStaleWhileRevalidate?.(m,Y)){if(N.catch(w=>ze.warn(w)),A?.onlyIfCached&&!I.doesExist())throw new mn.ServerError("Entry is not cached",504);return}else return N}}}a($E,"ensureLoadedFromSource");function gr(Y){let m=Y?.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 Qi,m.lmdbDb=i,m;m=A}while(!0)}else return new q_}a(gr,"txnForContext");function YE(Y,m,A){if(!Y)return;kE=Y;let I=Y.value||Y.deref?.()||(kE=i.getEntry(Y.key))?.value;if(typeof m=="object"){let N=ks,w=I;for(let y=0,P=m.length;y<P;y++){let L=m[y],D=N?.[L];w=D&&w?D(w,A,!0)?.value:w?.[L],N=D?.definition?.tableClass?.propertyResolvers}return w}let b=ks[m];return b?b(I,A):I[m]}a(YE,"getAttributeValue");function gA(Y,m,A,I){let b=gr(A).getReadTxn(),N=I?.length,w={transaction:b,lazy:N>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},y;function P(L,D){let F=L?.value;if(!F)return yo.SKIP;for(let G=0;G<N;G++)if(!y?.includes(G)&&!I[G](F,L))return yo.SKIP;return D!==void 0&&(L.key=D),L}if(a(P,"processEntry"),N>0||!Y.hasEntries){let L=Y.map(D=>{if(y=null,typeof D=="object"&&D.key!==void 0)return N>0?P(D):D;if(D==null)return yo.SKIP;for(let F=0;F<N;F++){let ie=I[F].idFilter;if(ie){if(!ie(D))return yo.SKIP;y||(y=[]),y.push(F)}}return VE(D,A,w,!1,P)});return Array.isArray(Y)&&(L=L.filter(D=>D!==yo.SKIP)),L.hasEntries=!0,L}return Y}a(gA,"transformToEntries");async function RA(Y,m,A){let I=m?.metadataFlags,b=m?.version,N,w;if(!i.attemptLock(Y,b,()=>{clearTimeout(w);let D=i.getEntry(Y);!D||!D.value||D.metadataFlags&(_l|dl)?N(RA(Y,i.getEntry(Y),A)):N(D)}))return new Promise(D=>{N=D,w=setTimeout(()=>{i.unlock(Y,b)},Yne)});let y=m?.value,P={requestContext:A,replacingRecord:y,replacingVersion:b,source:null,resourceCache:A?.resourceCache},L=A?.responseHeaders;return new Promise((D,F)=>{let G;aA(Ke(P,async ie=>{let ae=performance.now(),re,ce,ve;try{for(let le of We.sources)if(le.get&&(!le.get.reliesOnPrototype||le.prototype.get)&&(P.source=le,re=await le.get(Y,P),re))break;ve=I&_l;let fe=P.lastModified||ve&&b;ce=ve||fe>b||!y,fe||(fe=(0,hl.getNextMonotonicTime)());let j=performance.now()-ae;if(Br(j,"cache-resolution",s),L&&L.append("Server-Timing",`cache-resolve;dur=${j.toFixed(2)}`),ie.timestamp=fe,d&&!P.expiresAt&&(P.expiresAt=Date.now()+d),re){if(typeof re!="object")throw new Error("Only objects can be cached and stored in tables");typeof re.toJSON=="function"&&(re=re.toJSON()),t&&re[t]!==Y&&(re[t]=Y)}G=!0,D({version:fe,value:re})}catch(fe){fe.message+=` while resolving record ${Y} for ${s}`,y&&((fe.code==="ECONNRESET"||fe.code==="ECONNREFUSED"||fe.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(fe.statusCode===500||fe.statusCode===502||fe.statusCode===503||fe.statusCode===504))?(D({version:b,value:y}),ze.trace(fe.message,"(returned stale record)")):F(fe),P.transaction.abort();return}if(A?.noCacheStore){P.transaction.abort();return}gr(P).addWrite({key:Y,store:i,entry:m,nodeName:"source",commit:(fe,j)=>{if(j?.version!==b)return;let le=yl(Y,y,re);re?(de.put?.(P,Y,re),S(Y,re,j,fe,0,E&&ce||null,P,P.expiresAt,"put",!!ve)):(de.delete?.(P,Y),E||h?S(Y,null,j,fe,0,E&&ce||null,P,0,"delete",!!ve):i.remove(Y,b))}})}),()=>{i.unlock(Y,b)},ie=>{i.unlock(Y,b),G&&ze.error("Error committing cache update",ie)})})}a(RA,"getFromSource");function KE(){if(It!==bl&&(bl=It,(0,wo.getWorkerIndex)()===(0,wo.getWorkerCount)()-1)){if(Nl&&clearTimeout(Nl),!It)return;let Y=new Date;Y.setMonth(0),Y.setDate(1),Y.setHours(0),Y.setMinutes(0),Y.setSeconds(0);let m=Math.ceil((Date.now()-Y.getTime())/It)*It+Y.getTime(),A=a(I=>{ze.trace(`Scheduled next cleanup scan at ${new Date(I)}ms`),Nl=setTimeout(()=>H=H.then(async()=>{if(A(Math.max(I+It,Date.now())),i.rootStore.status!=="open"){clearTimeout(Nl);return}let b=50,N=new Array(b),w=0;ze.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:P,value:L,version:D,expiresAt:F}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let G;L===null&&!E&&D+$ne<Date.now()?G=i.remove(P,D):F&&F+f<Date.now()&&(G=We.evict(P,L,D),y++),G&&(await N[w],N[w]=G.catch(ie=>{ze.error("Cleanup error",ie)}),++w>=b&&(w=0)),await fl()}ze.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){ze.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");A(m)}}a(KE,"scheduleCleanup");function AA(){K=u?.addDeleteRemovalCallback(n,Y=>{let m=i.getEntry(Y);m?.value===null&&i.remove(Y,m.version)})}a(AA,"addDeleteRemoval");function zx(){(0,wo.getWorkerIndex)()===0&&setInterval(async()=>{try{let Y=$.name,m=r[Y];if(!m)throw new Error(`expiresAt attribute ${$} must be indexed`);for(let{value:A}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let I=i.getEntry(A);I?.value?.[Y]<Date.now()&&We.evict(A,I.value,I.version),await fl()}}catch(Y){ze.error("Error in evicting old records",Y)}},Vne).unref()}a(zx,"runRecordExpirationEviction")}function oA(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 tx(){}function Jne(e){ix=e}function yE(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"&&!Xne.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,IE.autoCast)(e):e}function rx(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 aA(e,t,r){return e?.then?e.then(t,r):t(e)}function wE(e,t){e[$r]=t,e[he]=t?.value??null,e[El]=t?.version}function nx(e){return e!=null}var Bn,yo,hl,sx,Sl,mn,ml,pl,ze,Io,wo,IE,kne,ix,Vne,$ne,jH,Yne,El,Kne,$r,ll,ZH,Wne,iA,Va,_l,dl,Qne,ex,zne,Hme,Xne,fl,Cf=Oe(()=>{Bn=x(U()),yo=require("lmdb"),hl=x(Cr()),sx=require("lodash");An();Mp();Sl=x(Z());XH();mn=x(ee()),ml=x(Ss()),pl=x(yn());be();hf();ze=x(W());V_();zi();Io=require("ordered-binary"),wo=x(Ze());Ui();IE=x(J());Bo();As();hE();kne=new Uint8Array(9);kne[8]=192;Vne=6e4,$ne=864e5;Sl.initSync();jH=Sl.get(Bn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Yne=1e4,El=Symbol.for("version"),Kne=Symbol.for("incremental-update"),$r=Symbol("entry"),ll=Symbol("is-saving"),ZH=1,Wne=2,iA=Symbol("loaded-from-source"),Va={isNotification:!0,ensureLoaded:!1},_l=1,dl=8,Qne=Buffer.allocUnsafeSlow(8192),ex=1978,zne={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},Hme=(0,IE.convertToMS)(Sl.get(Bn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(CE,"makeTable");a(oA,"attributesAsObject");a(tx,"noop");a(Jne,"setServerUtilities");Xne=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(yE,"coerceType");a(rx,"isDescendantId");fl=a(()=>new Promise(setImmediate),"rest");a(aA,"when");a(wE,"updateResource");a(nx,"exists")});var Fe={};ke(Fe,{database:()=>Wc,databases:()=>et,dropDatabase:()=>Hp,dropTableMeta:()=>nse,getDatabases:()=>In,getTables:()=>jne,onUpdatedTable:()=>TR,readMetaDb:()=>Tl,resetDatabases:()=>Zne,table:()=>ot,tables:()=>Dr});function jne(){return PE||In(),Dr||{}}function In(){if(PE)return et;PE=!0,Ka=new Map;let e=(0,Qt.getHdbBasePath)()&&(0,Je.join)((0,Qt.getHdbBasePath)(),Kr.DATABASES_DIR_NAME),t=(0,Qt.get)(Kr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Qt.get)(Kr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Yr.existsSync)(e)?e:(0,Je.join)((0,Qt.getHdbBasePath)(),Kr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Yr.existsSync)(e))for(let r of(0,Yr.readdirSync)(e,{withFileTypes:!0})){let n=(0,Je.basename)(r.name,".mdb");r.isFile()&&(0,Je.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Tl((0,Je.join)(e,r.name),null,n)}if((0,Yr.existsSync)((0,Ya.getBaseSchemaPath)())){for(let r of(0,Yr.readdirSync)((0,Ya.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Je.join)((0,Ya.getBaseSchemaPath)(),r.name),s=(0,Je.join)((0,Ya.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Yr.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Je.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Je.join)(s,i.name);Tl((0,Je.join)(n,i.name),(0,Je.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,Yr.existsSync)(s))for(let o of(0,Yr.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,Je.extname)(o.name).toLowerCase()===".mdb"&&Tl((0,Je.join)(s,o.name),(0,Je.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],u=(0,Je.join)(c.path,(0,Je.basename)(o+".mdb"));(0,Yr.existsSync)(u)&&Tl(u,o,r,null,!0)}}for(let r in et){let n=Ka.get(r);if(n){let s=et[r];r.includes("delete")&&pn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(pn.trace(`delete table class ${i}`),delete s[i])}else if(delete et[r],r==="data"){for(let s in Dr)delete Dr[s];delete Dr[vE]}}return Ka=null,et}}function Zne(){PE=!1;for(let[,e]of gi)e.needsDeletion=!0;In();for(let[e,t]of gi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),gi.delete(e));return et}function Tl(e,t,r=lA,n,s){let i=new cA.default(e,!1);try{let o=gi.get(e);o?o.needsDeletion=!1:(o=(0,LE.open)(i),gi.set(e,o));let c=new Co.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(DE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,Yr.existsSync)(n)&&(i.path=n,_=(0,LE.open)(i),_.isLegacy=!0):_=EE(o));let l=ux(r),d=l[vE],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let 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){pn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let O=l[E],g={},R=[],B,H,v=typeof S.audit=="boolean"?S.audit:(0,Qt.get)(Kr.CONFIG_PARAMS.LOGGING_AUDITLOG),M=S.trackDeletes,$=S.expiration,K=S.eviction;if(O)g=O.indices,R=O.attributes,O.schemaVersion++;else{B=S.tableId,B?B>=(u.get($a)||0)&&u.putSync($a,B+1):(S.tableId=B=u.get($a),B||(B=1),u.putSync($a,B+1),u.putSync(S.key,S));let z=new Co.default(!S.is_hash_attribute,S.is_hash_attribute);H=e_(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(!g[z.name]){let Te=new Co.default(!z.is_hash_attribute,z.is_hash_attribute);g[z.name]=o.openDB(z.key,Te),g[z.name].indexNulls=z.indexNulls}let se=R.find(Te=>Te.name===z.name);se?R.splice(R.indexOf(se),1,z):R.push(z)}}catch(se){pn.error("Error trying to update attribute",z,R,g,se)}}if(!O){O=lx(l,E,CE({primaryStore:H,auditStore:_,audit:v,expirationMS:$&&$*1e3,evictionMS:K&&K*1e3,trackDeletes:M,tableName:E,tableId:B,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:g,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),O.schemaVersion=1;for(let z of _A)z(O)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function ux(e){let t=et[e];if(t||(e==="data"?t=et[e]=Dr:e==="system"?Object.defineProperty(et,"system",{value:t=Object.create(null),configurable:!0}):t=et[e]=Object.create(null)),Ka&&!Ka.has(e)){let r=new Set;t[vE]=r,Ka.set(e,r)}return t}function lx(e,t,r){return e[t]=r,r}function Wc({database:e,table:t}){e||(e=lA),In();let r=ux(e),n=(0,Je.join)((0,Qt.getHdbBasePath)(),Kr.DATABASES_DIR_NAME),s=(0,Qt.get)(Kr.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,Qt.get)(Kr.CONFIG_PARAMS.STORAGE_PATH)||((0,Yr.existsSync)(n)?n:(0,Je.join)((0,Qt.getHdbBasePath)(),Kr.LEGACY_DATABASES_DIR_NAME));let o=(0,Je.join)(n,(i?t:e)+".mdb"),c=gi.get(o);if(!c){let u=new cA.default(o,!1);c=(0,LE.open)(u),gi.set(o,c)}return c}async function Hp(e){if(!et[e])throw new Error("Schema does not exist");let t=et[e];for(let r in t){let s=t[r].primaryStore.rootStore;gi.delete(s.path),s.status==="open"&&(await s.close(),await ox.remove(s.path))}if(e==="data"){for(let r in Dr)delete Dr[r];delete Dr[vE]}delete et[e]}function ot({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=lA);let l=Wc({database:t,table:e}),d=et[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;u==null&&(u=!0);let O=new Co.default(!1);for(let M of i)M.attribute?(M.name=M.attribute,M.indexed=!0):M.attribute=M.name,M.expiresAt&&(M.indexed=!0);let g,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 M=l.auditStore;M||(M=EE(l)),h=i.find(se=>se.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,Qt.get)(Kr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),n&&(h.eviction=n),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),pn.trace(`${e} table loading, opening primary store`);let $=new Co.default(!1,!0),K=e+"/",z=e_(l.openDB(K,$));z.rootStore=l,S=l.dbisDb=l.openDB(DE.INTERNAL_DBIS_NAME,O),z.tableId=S.get($a),z.tableId||(z.tableId=1),S.putSync($a,z.tableId+1),h.tableId=z.tableId,f=lx(d,e,CE({primaryStore:z,auditStore:M,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:u,dbisDB:S})),f.schemaVersion=1,g=!0,v(),S.put(K,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(DE.INTERNAL_DBIS_NAME,O)),f.dbisDB=S;let B=[];for(let{key:M,value:$}of S.getRange({start:!0})){let[K,z]=M.toString().split("/");if(z===""&&(z=$.name),z){if(K!==e)continue}else z=K;if(!i.find(Te=>Te.name===z)?.indexed&&$.indexed&&!$.isPrimaryKey){v(),g=!0,S.remove(M);let Te=f.indices[K];Te&&B.push(Te)}}let H=[];try{for(let M of i||[]){if(M.relationship)continue;let $=e+"/"+(M.name||"");Object.defineProperty(M,"key",{value:$,configurable:!0});let K=S.get($);if(M.isPrimaryKey){if(K=K||S.get($=e+"/")||{},o!==f.audit||(+r||void 0)!==(+K.expiration||void 0)||(+n||void 0)!==(+K.eviction||void 0)){let se=Object.assign({},K);typeof o=="boolean"&&(o&&f.enableAuditing(o),se.audit=o),r&&(se.expiration=+r),n&&(se.eviction=+n),g=!0,v(),S.put($,se)}continue}K?.attribute&&!K.name&&(K.indexed=!0);let z=!K||K.type!==M.type||K.indexed!==M.indexed||JSON.stringify(K.attributes)!==JSON.stringify(M.attributes)||JSON.stringify(K.elements)!==JSON.stringify(M.elements);if(M.indexed){let se=new Co.default(!0,!1),Te=l.openDB($,se);(z||K.indexingPID&&K.indexingPID!==process.pid||K.restartNumber<gl.workerData?.restartNumber)&&(g=!0,v(),K=S.get($),(z||K.indexingPID&&K.indexingPID!==process.pid||K.restartNumber<gl.workerData?.restartNumber)&&(g=!0,M.lastIndexedKey=K?.lastIndexedKey||!1,M.indexingPID=process.pid,Te.isIndexing=!0,Object.defineProperty(M,"dbi",{value:Te}),M.indexNulls===void 0&&(M.indexNulls=!0),H.push(M)),S.put($,M)),K?.indexNulls&&M.indexNulls===void 0&&(M.indexNulls=!0),Te.indexNulls=M.indexNulls,p[M.name]=Te}else z&&(g=!0,v(),S.put($,M))}}finally{R&&R()}if(g&&(f.schemaVersion++,f.updatedAttributes()),pn.trace(`${e} table loading, running index`),H.length>0||B.length>0?f.indexingOperation=rse(f,H,B):g&&ME.signalSchemaChange(new UE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,g)for(let M of _A)M(f,_!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),pn.trace(`${e} table loaded`),f;function v(){R||l.transactionSync(()=>({then(M){R=M}}))}a(v,"startTxn")}async function rse(e,t,r){try{let n=e.schemaVersion;await ME.signalSchemaChange(new UE.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,s=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,ax.getIndexedValues)(l[h]);if(p)for(let S=0,O=p.length;S<O;S++)E.dbi.put(p[S],_)}}),s.then(()=>u--,f=>{u--,pn.error(f)}),gl.workerData&&gl.workerData.restartNumber!==cx.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>ese?await s:u>tse&&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 ME.signalSchemaChange(new UE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){pn.error("Error in indexing",n)}}function nse({table:e,database:t}){let r=Wc({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function TR(e){_A.push(e)}var Qt,DE,LE,Je,Yr,Ya,Co,cA,Kr,ox,uA,ax,ME,UE,gl,pn,cx,lA,vE,Dr,et,$a,_A,PE,gi,Ka,ese,tse,be=Oe(()=>{Qt=x(Z()),DE=x(lt()),LE=require("lmdb"),Je=require("path"),Yr=require("fs"),Ya=x(Ye());Cf();Co=x(t_()),cA=x(n_()),Kr=x(U()),ox=x(require("fs-extra")),uA=require("../../index"),ax=x(Cr()),ME=x(Ss()),UE=x(yn()),gl=require("worker_threads"),pn=x(W()),cx=x(Ze());Ui();Bo();lA="data",vE=Symbol("defined-tables");(0,Qt.initSync)();Dr=Object.create(null),et=Object.create(null);(0,uA._assignPackageExport)("databases",et);(0,uA._assignPackageExport)("tables",Dr);$a=Symbol.for("next-table-id"),_A=[],gi=new Map;a(jne,"getTables");a(In,"getDatabases");a(Zne,"resetDatabases");a(Tl,"readMetaDb");a(ux,"ensureDB");a(lx,"setTable");a(Wc,"database");a(Hp,"dropDatabase");a(ot,"table");ese=1e3,tse=10;a(rse,"runIndexing");a(nse,"dropTableMeta");a(TR,"onUpdatedTable")});var J=T((Kme,bx)=>{"use strict";var Ri=require("path"),hx=require("fs-extra"),Sr=W(),_x=require("fs-extra"),BE=require("os"),sse=require("net"),ise=require("recursive-iterator"),it=U(),ose=tO(),dx=require("papaparse"),HE=require("moment"),{inspect:ase}=require("util"),fx=require("is-number"),Yme=require("lodash"),cse=require("minimist"),use=require("https"),lse=require("http"),{hdb_errors:xE}=ee(),_se=/^((\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)))$/,mx=require("util").promisify(setTimeout),dse=100,fse=5,Ese="",hse=4,Ex={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};bx.exports={isEmpty:Wr,isEmptyOrZeroLength:cs,arrayHasEmptyValues:Sse,arrayHasEmptyOrZeroLengthValues:Tse,buildFolderPath:gse,isBoolean:px,errorizeMessage:mse,stripFileExtension:Ase,autoCast:Ose,autoCastJSON:Sx,autoCastJSONDeep:fA,removeDir:bse,compareVersions:Nse,isCompatibleDataVersion:yse,escapeRawValue:wse,unescapeValue:Ise,stringifyProps:Cse,timeoutPromise:Lse,isClusterOperation:Use,getClusterUser:vse,checkGlobalSchemaTable:Pse,getHomeDir:gx,getPropsFilePath:Dse,promisifyPapaParse:Bse,removeBOM:Rx,createEventPromise:Hse,checkProcessRunning:xse,checkSchemaTableExist:Fse,checkSchemaExists:Ax,checkTableExists:Ox,getStartOfTomorrowInSeconds:qse,getLimitKey:Gse,isObject:Rse,isNotEmptyAndHasValue:pse,autoCasterIsNumberCheck:Tx,backtickASTSchemaItems:kse,isPortTaken:Mse,createForkArgs:Vse,autoCastBoolean:$se,async_set_timeout:mx,getTableHashAttribute:Yse,doesSchemaExist:Kse,doesTableExist:Wse,stringifyObj:Qse,ms_to_time:zse,changeExtension:Jse,getEnvCliRootPath:EA,noBootFile:Xse,httpRequest:jse,transformReq:Zse,convertToMS:eie,PACKAGE_ROOT:it.PACKAGE_ROOT};function mse(e){return e instanceof Error?e:new Error(e)}a(mse,"errorizeMessage");function Wr(e){return e==null}a(Wr,"isEmpty");function pse(e){return!Wr(e)&&(e||e===0||e===""||px(e))}a(pse,"isNotEmptyAndHasValue");function cs(e){return Wr(e)||e.length===0||e.size===0}a(cs,"isEmptyOrZeroLength");function Sse(e){if(Wr(e))return!0;for(let t=0;t<e.length;t++)if(Wr(e[t]))return!0;return!1}a(Sse,"arrayHasEmptyValues");function Tse(e){if(cs(e))return!0;for(let t=0;t<e.length;t++)if(cs(e[t]))return!0;return!1}a(Tse,"arrayHasEmptyOrZeroLengthValues");function gse(...e){try{return e.join(Ri.sep)}catch{console.error(e)}}a(gse,"buildFolderPath");function px(e){return Wr(e)?!1:e===!0||e===!1}a(px,"isBoolean");function Rse(e){return Wr(e)?!1:typeof e=="object"}a(Rse,"isObject");function Ase(e){return cs(e)?Ese:e.slice(0,-hse)}a(Ase,"stripFileExtension");function Ose(e){return Wr(e)||e===""||typeof e!="string"?e:Ex[e]!==void 0?Ex[e]:Tx(e)===!0?Number(e):_se.test(e)?new Date(e):e}a(Ose,"autoCast");function Sx(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Sx,"autoCastJSON");function fA(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=fA(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=fA(r);n!==r&&(e[t]=n)}return e}else return Sx(e)}a(fA,"autoCastJSONDeep");function Tx(e){if(e.startsWith("0.")&&fx(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&fx(e))}a(Tx,"autoCasterIsNumberCheck");async function bse(e){if(cs(e))throw new Error(`Directory path: ${e} does not exist`);try{await _x.emptyDir(e),await _x.remove(e)}catch(t){throw Sr.error(`Error removing files in ${e} -- ${t}`),t}}a(bse,"removeDir");function Nse(e,t){if(cs(e)){Sr.info("Invalid current version sent as parameter.");return}if(cs(t)){Sr.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("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(Nse,"compareVersions");function yse(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(yse,"isCompatibleDataVersion");function wse(e){if(Wr(e))return e;let t=String(e);return t==="."?it.UNICODE_PERIOD:t===".."?it.UNICODE_PERIOD+it.UNICODE_PERIOD:t.replace(it.FORWARD_SLASH_REGEX,it.UNICODE_FORWARD_SLASH)}a(wse,"escapeRawValue");function Ise(e){if(Wr(e))return e;let t=String(e);return t===it.UNICODE_PERIOD?".":t===it.UNICODE_PERIOD+it.UNICODE_PERIOD?"..":String(e).replace(it.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Ise,"unescapeValue");function Cse(e,t){if(Wr(e))return Sr.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+BE.EOL}!cs(n)&&n[0]===";"?r+=" "+n+s+BE.EOL:cs(n)||(r+=n+"="+s+BE.EOL)}catch{Sr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(Cse,"stringifyProps");function gx(){let e;try{e=BE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(gx,"getHomeDir");function Dse(){let e=Ri.join(gx(),it.HDB_HOME_DIR_NAME,it.BOOT_PROPS_FILE_NAME);return hx.existsSync(e)||(e=Ri.join(__dirname,"../","hdb_boot_properties.file")),e}a(Dse,"getPropsFilePath");function Lse(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(Lse,"timeoutPromise");async function Mse(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=sse.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(Mse,"isPortTaken");function Use(e){try{return it.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Sr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Use,"isClusterOperation");function Pse(e,t){let r=(be(),te(Fe)).getDatabases();if(!r[e])return xE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return xE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Pse,"checkGlobalSchemaTable");function vse(e,t){if(Wr(t)){Sr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Wr(e)||cs(e)){Sr.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){Sr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Sr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(vse,"getClusterUser");function Bse(){dx.parsePromise=function(e,t,r){return new Promise(function(n,s){dx.parse(e,{header:!0,transformHeader:Rx,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Bse,"promisifyPapaParse");function Rx(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Rx,"removeBOM");function Hse(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Sr.info(`Got cluster status event response: ${ase(s)}`);try{i.cancel()}catch{Sr.error("Error trying to cancel timeout.")}n(s)})})}a(Hse,"createEventPromise");async function xse(e){let t=!0,r=0;do await mx(dse*r++),(await ose.findPs(e)).length>0&&(t=!1);while(t&&r<fse);if(t)throw new Error(`process ${e} was not started`)}a(xse,"checkProcessRunning");function Fse(e,t){let r=Ax(e);if(r)return r;let n=Ox(e,t);if(n)return n}a(Fse,"checkSchemaTableExist");function Ax(e){let{getDatabases:t}=(be(),te(Fe));if(!t()[e])return xE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Ax,"checkSchemaExists");function Ox(e,t){let{getDatabases:r}=(be(),te(Fe));if(!r()[e][t])return xE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Ox,"checkTableExists");function qse(){let e=HE().utc().add(1,it.MOMENT_DAYS_TAG).startOf(it.MOMENT_DAYS_TAG).unix(),t=HE().utc().unix();return e-t}a(qse,"getStartOfTomorrowInSeconds");function Gse(){return HE().utc().format("DD-MM-YYYY")}a(Gse,"getLimitKey");function kse(e){try{let t=new ise(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){Sr.error("Got an error back ticking items."),Sr.error(t)}}a(kse,"backtickASTSchemaItems");function Vse(e){return[e]}a(Vse,"createForkArgs");function $se(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a($se,"autoCastBoolean");function Yse(e,t){let{getDatabases:r}=(be(),te(Fe)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(Yse,"getTableHashAttribute");function Kse(e){let{getDatabases:t}=(be(),te(Fe));return t()[e]!==void 0}a(Kse,"doesSchemaExist");function Wse(e,t){let{getDatabases:r}=(be(),te(Fe));return r()[e]?.[t]!==void 0}a(Wse,"doesTableExist");function Qse(e){try{return JSON.stringify(e)}catch{return e}}a(Qse,"stringifyObj");function zse(e){let t=HE.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(zse,"ms_to_time");function Jse(e,t){let r=Ri.basename(e,Ri.extname(e));return Ri.join(Ri.dirname(e),r+t)}a(Jse,"changeExtension");function EA(){if(process.env[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=cse(process.argv);if(e[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(EA,"getEnvCliRootPath");var dA;function Xse(){if(dA)return dA;let e=EA();EA()&&hx.pathExistsSync(Ri.join(e,it.HDB_CONFIG_FILE))&&(dA=!0)}a(Xse,"noBootFile");function jse(e,t){let r;return e.protocol==="http:"?r=lse:r=use,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(jse,"httpRequest");function Zse(e){if(!e.schema&&!e.database){e.schema=it.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Zse,"transformReq");function eie(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(eie,"convertToMS")});var Dx=T((Qme,Cx)=>{"use strict";var Qr=Z(),tie=Vi(),Se=U(),Rl=tt(),Fs=require("path"),{PACKAGE_ROOT:qE}=U(),Nx=Z(),FE=J(),Wa="/dev/null",rie=Fs.join(qE,"launchServiceScripts"),yx=Fs.join(qE,"utility/scripts"),nie=Fs.join(yx,Se.HDB_RESTART_SCRIPT),wx=Fs.resolve(qE,"dependencies",`${process.platform}-${process.arch}`,Rl.NATS_BINARY_NAME);function Ix(){let t=tie.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 FE.noBootFile()&&(n[Se.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=FE.getEnvCliRootPath()),{name:Se.PROCESS_DESCRIPTORS.HDB,script:Se.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:qE}}a(Ix,"generateMainServerConfig");var sie=9930;function iie(){Qr.initSync(!0);let e=Qr.get(Se.CONFIG_PARAMS.ROOTPATH),t=Fs.join(e,"clustering",Rl.NATS_CONFIG_FILES.HUB_SERVER),r=Fs.join(Qr.get(Se.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Se.LOG_NAMES.HDB),n=Nx.get(Se.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Rl.LOG_LEVEL_FLAGS[Qr.get(Se.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Se.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==sie?"-"+n:""),script:wx,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 Qr.get(Se.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Wa,i.error_file=Wa),i}a(iie,"generateNatsHubServerConfig");var oie=9940;function aie(){Qr.initSync(!0);let e=Qr.get(Se.CONFIG_PARAMS.ROOTPATH),t=Fs.join(e,"clustering",Rl.NATS_CONFIG_FILES.LEAF_SERVER),r=Fs.join(Qr.get(Se.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Se.LOG_NAMES.HDB),n=Nx.get(Se.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Rl.LOG_LEVEL_FLAGS[Qr.get(Se.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==oie?"-"+n:""),script:wx,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 Qr.get(Se.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Wa,i.error_file=Wa),i}a(aie,"generateNatsLeafServerConfig");function cie(){Qr.initSync();let e=Fs.join(Qr.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:rie,autorestart:!1};return Qr.get(Se.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Wa,t.error_file=Wa),t}a(cie,"generateClusteringUpgradeV4ServiceConfig");function uie(){let e={[Se.PROCESS_NAME_ENV_PROP]:Se.PROCESS_DESCRIPTORS.RESTART_HDB};return FE.noBootFile()&&(e[Se.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=FE.getEnvCliRootPath()),{...{name:Se.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:yx},script:nie}}a(uie,"generateRestart");function lie(){return{apps:[Ix()]}}a(lie,"generateAllServiceConfigs");Cx.exports={generateAllServiceConfigs:lie,generateMainServerConfig:Ix,generateRestart:uie,generateNatsHubServerConfig:iie,generateNatsLeafServerConfig:aie,generateClusteringUpgradeV4ServiceConfig:cie}});var wT=T((Xme,Vx)=>{"use strict";var Ue=U(),_ie=J(),qs=RT(),Al=At(),us=tt(),Ai=Dx(),GE=Z(),Oi=W(),die=Os(),{startWorker:Lx,onMessageFromWorkers:fie}=Ze(),Eie=ca(),Jme=require("util"),hie=require("child_process"),mie=require("fs"),{execFile:pie}=hie,Ie;Vx.exports={enterPM2Mode:Sie,start:bi,stop:hA,reload:Ux,restart:Px,list:mA,describe:Bx,connect:Gs,kill:Oie,startAllServices:bie,startService:pA,getUniqueServicesList:Hx,restartAllServices:Nie,isServiceRegistered:xx,reloadStopStart:Fx,restartHdb:vx,deleteProcess:Rie,startClusteringProcesses:Gx,startClusteringThreads:kx,isHdbRestartRunning:Aie,isClusteringRunning:wie,stopClustering:yie,reloadClustering:Iie};var Ol=!1;fie(e=>{e.type==="restart"&&GE.initSync(!0)});function Sie(){Ol=!0}a(Sie,"enterPM2Mode");function Gs(){return Ie||(Ie=require("pm2")),new Promise((e,t)=>{Ie.connect((r,n)=>{Oi.setupConsoleLogging(),r&&t(r),e(n)})})}a(Gs,"connect");var Tr,Tie=10,Mx;function bi(e,t=!1){if(Ol)return gie(e);let r=pie(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Tr.indexOf(r);o>-1&&Tr.splice(o,1),!Mx&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Tie&&(mie.existsSync(qs.getHubConfigPath())?bi(e):(await qs.generateNatsConfig(!0),bi(e),await new Promise(c=>setTimeout(c,3e3)),await qs.removeNatsConfig(Ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await qs.removeNatsConfig(Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=GE.get(Ue.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&us.LOG_LEVEL_HIERARCHY[o]>=us.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===us.LOG_LEVELS.ERR||l===us.LOG_LEVELS.WRN?Oi.OUTPUTS.STDERR:Oi.OUTPUTS.STDOUT;Oi.logCustomLevel(l||"info",E,n,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=us.LOG_LEVELS[f]}if(us.LOG_LEVEL_HIERARCHY[o]>=us.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===us.LOG_LEVELS.ERR||l===us.LOG_LEVELS.WRN?Oi.OUTPUTS.STDERR:Oi.OUTPUTS.STDOUT;Oi.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),Tr=[],!Tr&&!t){let i=a(()=>{Mx=!0,Tr&&(Tr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}Tr.push(r)}a(bi,"start");function gie(e){return new Promise(async(t,r)=>{try{await Gs()}catch(n){r(n)}Ie.start(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(gie,"startWithPM2");function hA(e){if(!Ol){for(let t of Tr||[])t.name===e&&(Tr.splice(Tr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Gs()}catch(n){r(n)}Ie.stop(e,async(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.delete(e,(i,o)=>{i&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(o)})})})}a(hA,"stop");function Ux(e){return new Promise(async(t,r)=>{try{await Gs()}catch(n){r(n)}Ie.reload(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(Ux,"reload");function Px(e){if(!Ol)for(let t of Tr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Gs()}catch(n){r(n)}Ie.restart(e,(n,s)=>{Ie.disconnect(),t(s)})})}a(Px,"restart");function Rie(e){return new Promise(async(t,r)=>{try{await Gs()}catch(n){r(n)}Ie.delete(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(Rie,"deleteProcess");async function vx(){await bi(Ai.generateRestart())}a(vx,"restartHdb");async function Aie(){let e=await mA();for(let t in e)if(e[t].name===Ue.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Aie,"isHdbRestartRunning");function mA(){return new Promise(async(e,t)=>{try{await Gs()}catch(r){t(r)}Ie.list((r,n)=>{r&&(Ie.disconnect(),t(r)),Ie.disconnect(),e(n)})})}a(mA,"list");function Bx(e){return new Promise(async(t,r)=>{try{await Gs()}catch(n){r(n)}Ie.describe(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(Bx,"describe");function Oie(){if(!Ol){for(let e of Tr||[])e.kill();Tr=[];return}return new Promise(async(e,t)=>{try{await Gs()}catch(r){t(r)}Ie.killDaemon((r,n)=>{r&&(Ie.disconnect(),t(r)),Ie.disconnect(),e(n)})})}a(Oie,"kill");async function bie(){try{await Gx(),await kx(),await bi(Ai.generateAllServiceConfigs())}catch(e){throw Ie?.disconnect(),e}}a(bie,"startAllServices");async function pA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ue.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Ai.generateMainServerConfig();break;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Ai.generateNatsIngestServiceConfig();break;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Ai.generateNatsReplyServiceConfig();break;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Ai.generateNatsHubServerConfig(),await bi(r,t),await qs.removeNatsConfig(e);return;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Ai.generateNatsLeafServerConfig(),await bi(r,t),await qs.removeNatsConfig(e);return;case Ue.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Ai.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await bi(r)}catch(r){throw Ie?.disconnect(),r}}a(pA,"startService");async function Hx(){try{let e=await mA(),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 Ie?.disconnect(),e}}a(Hx,"getUniqueServicesList");async function Nie(e=[]){try{let t=!1,r=await Hx();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===Ue.PROCESS_DESCRIPTORS.HDB?t=!0:await Px(o))}t&&await Fx(Ue.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ie?.disconnect(),t}}a(Nie,"restartAllServices");async function xx(e){if(Tr?.find(r=>r.name===e))return!0;let t=await Eie.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(xx,"isServiceRegistered");async function Fx(e){let t=e===Ue.PROCESS_DESCRIPTORS.HDB?GE.get(Ue.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):GE.get(Ue.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Bx(e),n=_ie.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await hA(e),await pA(e)):e===Ue.PROCESS_DESCRIPTORS.HDB?await vx():await Ux(e)}a(Fx,"reloadStopStart");var qx;async function Gx(e=!1){for(let t in Ue.CLUSTERING_PROCESSES){let r=Ue.CLUSTERING_PROCESSES[t];await pA(r,e)}}a(Gx,"startClusteringProcesses");async function kx(){qx=Lx(Ue.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ue.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Al.createWorkQueueStream(us.WORK_QUEUE_CONSUMER_NAMES),await Al.updateIngestStreamConsumer(),await Al.updateLocalStreams();let e=await die.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ue.PRE_4_0_0_VERSION){Oi.info("Starting clustering upgrade 4.0.0 process"),Lx(Ue.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(kx,"startClusteringThreads");async function yie(){for(let e in Ue.CLUSTERING_PROCESSES)if(e!==Ue.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ue.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await qx.terminate();else{let t=Ue.CLUSTERING_PROCESSES[e];await hA(t)}}a(yie,"stopClustering");async function wie(){for(let e in Ue.CLUSTERING_PROCESSES){let t=Ue.CLUSTERING_PROCESSES[e];if(await xx(t)===!1)return!1}return!0}a(wie,"isClusteringRunning");async function Iie(){await qs.generateNatsConfig(!0),await Al.reloadNATSHub(),await Al.reloadNATSLeaf(),await qs.removeNatsConfig(Ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await qs.removeNatsConfig(Ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Iie,"reloadClustering")});var SA=wT(),$x=U();a(async function(){try{let t=await SA.describe($x.PROCESS_DESCRIPTORS.HDB);for(let r of t)await SA.reload(r.pm_id);await SA.deleteProcess($x.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();
29
+ `))}},25).unref()}o.close?.(()=>{if(He.get(Jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&bR()==0)try{UB(He.get(Jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,Zf),o.cantCleanupProperly||Gr.warn("Had to forcefully exit the thread",Zf),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(MB&&!Gre)for(let t in os){let r=os[t];if(isNaN(t)&&bR()==0){Ure(t)&&UB(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),Gr.info("Domain socket listening on "+t)}).on("error",i)}));continue}let n;try{n=MB(+t,"::")}catch(s){console.error(`Unable to bind to port ${t}`,s);continue}e.push(new Promise((s,i)=>{r.listen({fd:n},()=>{s(),Gr.trace("Listening on port "+t,Zf)}).on("error",i)}))}Promise.all(e).then(()=>{il?.postMessage({type:Jt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(qB,"startServers");yre||qB();function wR(e,t,r){let n=e?.read?e:new wre({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=os[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=os[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Gr.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(wR,"deliverSocket");var vB=new Map;function $re(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=vB.get(s),r){case"connection":i=wR(void 0,t),vB.set(s,i),i.write=(c,u,_)=>(il.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(il.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),il.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($re,"proxyRequest");function IR(e,t,r=!0){!+t&&t!==He.get(Jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(He.get(Jt.CONFIG_PARAMS.HTTP_PORT),10));let n=os[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",BB),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else os[t]=e;e.on("unhandled",BB)}a(IR,"registerServer");function GB(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=[],He.get(Jt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:He.get(Jt.CONFIG_PARAMS.HTTP_PORT),secure:He.get(Jt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),He.get(Jt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:He.get(Jt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&He.get(Jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:He.get(Jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(GB,"getPorts");function CR(e,t){for(let{port:r,secure:n}of GB(t))kB(r,n,t?.isOperationsServer),typeof e=="function"?NR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,IR(e,r,!1)),tE[r]=yR(NR,r),kre=yR(Vre,r)}a(CR,"httpServer");function kB(e,t,r){if(!Ti[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:He.get(n+"_keepAliveTimeout"),headersTimeout:He.get(n+"_headersTimeout"),requestTimeout:He.get(n+"_timeout")},i=He.get(n+"_mtls"),o=He.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let u=He.get(n+"tls_privateKey"),_=He.get(n+"tls_certificate"),l=He.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:xa(u),ciphers:He.get("tls_ciphers"),cert:xa(_),ca:l&&xa(l),rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:vre()})}let c=Fre();Ti[e]=(t?Lre:Cre)(s,async(u,_)=>{try{let d=performance.now(),f=new xB(u,_);r&&(f.isOperationsServer=!0);let E=await tE[e](f);if(!E){if(f._nodeResponse.statusCode)return;E=VB(f)}if(c?E.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):E.headers?.set?.("Server","HarperDB"),E.status===-1){for(let H of E.headers||[])_.setHeader(H[0],H[1]);return u.baseRequest=f,_.baseResponse=E,Ti[e].emit("unhandled",u,_)}let h=E.status||200,p=performance.now(),S=p-d,O=E.body,R;if(!E.handlesHeaders){let H=E.headers||new HB;O?O.length>=0&&(typeof O=="string"?H.set("Content-Length",Buffer.byteLength(O)):H.set("Content-Length",O.length),R=!0):(H.set("Content-Length","0"),R=!0);let v=`hdb;dur=${S.toFixed(2)}`;E.wasCacheMiss&&(v+=", miss"),Hre(H,"Server-Timing",v,!0),_.writeHead(h,H&&(H[Symbol.iterator]?Array.from(H):H)),R&&_.end(O)}let g=f.handlerPath,P=f.method;if(sl(S,"duration",g,P,E.wasCacheMiss==null?void 0:E.wasCacheMiss?"cache-miss":"cache-hit"),xre(h<400,"success",g,P),!R)if(O?.pipe){O.pipe(_),O.destroy&&_.on("close",()=>{O.destroy()});let H=0;O.on("data",v=>{H+=v.length}),O.on("end",()=>{sl(performance.now()-p,"transfer",g,P),sl(H,"bytes-sent",g,P)})}else O?.then?O.then(H=>{_.end(H)},l):_.end(O)}catch(d){l(d)}function l(d){let f=d.headers;_.writeHead(d.statusCode||500,f&&(f[Symbol.iterator]?Array.from(f):f)),_.end(d.toString()),d.statusCode?d.statusCode===500?Gr.warn(d):Gr.info(d):Gr.error(d)}a(l,"onError")}),i&&(Ti[e].mtlsConfig=i),t&&(Ti[e].on("secureConnection",u=>{u._parent.startTime&&sl(performance.now()-u._parent.startTime,"tls-handshake",e),sl(u.isSessionReused(),"tls-reused",e)}),Ti[e].isSecure=!0),IR(Ti[e],e)}return Ti[e]}a(kB,"getHTTPServer");function yR(e,t){let r=VB;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(yR,"makeCallbackChain");function VB(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new HB}}a(VB,"unhandled");function Yre(e,t){CR(e,{requestOnly:!0,...t})}a(Yre,"onRequest");function Kre(e,t){let r;if(t.securePort){let n=He.get("tls_privateKey"),s=He.get("tls_certificate"),i=t.mtls?.certificateAuthority||He.get("tls_certificateAuthority");r=Pre({ciphers:He.get("tls_ciphers"),key:xa(n),cert:xa(s),ca:i&&xa(i),rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls},e),os[t.securePort]=r}return t.port&&(r=Ire(e),os[t.port]=r),r}a(Kre,"onSocket");Object.defineProperty(Dre.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 Wre(e,t){let r;for(let{port:n,secure:s}of GB(t)){eE[n]||(eE[n]=new Mre({server:r=kB(n,s)}),eE[n].on("connection",async(c,u)=>{try{let _=new xB(u);_.isWebSocket=!0;let l=tE[n](_),d=u.headers["sec-websocket-protocol"]||"",f=OR[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,_,l))}if(E)return}for(let E=0;E<f.length;E++){let h=f[E];h.protocol||h.listener(c,_,l)}}catch(_){Gr.warn("Error handling WebSocket connection",_)}}),eE[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=OR[n];o||(o=OR[n]=[]),o.push({listener:e,protocol:i}),tE[n]=yR(NR,n)}return r}a(Wre,"onWebSocket");function BB(e,t){t.writeHead(404),t.end(`Not found
30
+ `)}a(BB,"defaultNotFound")});async function QB({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await LR.getResource(e,{});s=new PR(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await LR.get(e);i&&i.delete()}s=new sE(e,t)}return n&&(n.id=e,n.user={username:t?.username},ol.put(n)),s}function UR(){return nE++,nE>65500&&(nE=1),nE}function MR(e,t,r=e){let{topic:n,retain:s}=e;e.data=t,e.async=!0,e.authorize=!0;let i=li.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 YB,gi,KB,WB,LR,ol,nE,sE,PR,zB=Re(()=>{Ae();Lu();YB=x(Ir()),gi=x(W());ji();KB=x(et()),WB=x($B());tr();LR=at({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"}]}}]}),ol=at({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,KB.getWorkerIndex)()===0&&(async()=>{await WB.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of ol.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await Ze.getUser(r.user.username)),ze(r,()=>{try{MR(r,t)}catch{(0,gi.warn)("Failed to publish will",t)}ol.delete(e.id,r)})}})();a(QB,"getSession");nE=1;a(UR,"getNextMessageId");sE=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("?"),u,_;if(c>-1?(u=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 l=this.subscriptions.find(O=>O.topic===s),d;l?(d=i>0,l.end(),this.subscriptions.splice(this.subscriptions.indexOf(l),1)):d=i===2;let f={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,gi.trace)("Resuming subscription from",s,"from",o);let E=li.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 R=O.split("/"),g;for(let v=0;v<R.length;v++)if(R[v].indexOf("+")>-1)if(R[v]==="+")g=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&g)throw new Error("Filters can not be combined");let P=!0;R[R.length-1]==="#"&&(R.length--,P=!1),g&&(n=a(v=>{let L=v.id;if(!Array.isArray(L)||P&&L.length!==R.length)return!1;for(let $=0;$<R.length;$++)if(R[$]!=="+"&&R[$]!==L[$])return!1;return!0},"filter"));let H=R.indexOf("+");f.url="/"+(H>-1?R.slice(0,H):R).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 R of O)try{let g;if(R.type&&R.type!=="put"&&R.type!=="delete"&&R.type!=="message"&&R.type!=="patch"||n&&!n(R))continue;r?(R.topic=s,g=this.needsAcknowledge(R)):(R.acknowledge?.(),g=UR());let P=R.id;Array.isArray(P)&&(P=ma(P)),P==null&&(P=""),this.listener(h+"/"+P,R.value,g,t)}catch(g){(0,gi.warn)(g)}})(),O});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=UR();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,MR(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};ze(r,async()=>{if(!t){let n=await ol.get(this.sessionId,r);n?.doesExist()&&await MR(n,n.data,r)}await ol.delete(this.sessionId,r)}).catch(n=>{(0,gi.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(MR,"publish");PR=class extends sE{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=UR(),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,gi.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,YB.getNextMonotonicTime)()),(0,gi.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),LR.put(this.sessionRecord)),t.qos}}});var vR={};$e(vR,{bypassAuth:()=>Qre,start:()=>zre});function Qre(){eH=!0}function zre({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i,sessions:new Set},c,u=r?.mtls;return n&&(c=e.ws((_,l,d)=>{if(_.protocol==="mqtt"){let{onMessage:f,onClose:E}=jB(_,(h,p)=>{if(_.send(h),p&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},l,Promise.resolve(d).then(()=>l?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{(0,Tr.info)("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let l;if(u){if(_.authorized)try{let E=u.user;E!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),l=await e.getUser(E,null,null))}catch(E){(0,Tr.error)(E)}else if(u.required)return(0,Tr.info)(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!l&&eH&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,ZB.getSuperUser)());let{onMessage:d,onClose:f}=jB(_,E=>_.write(E),null,l,o);_.on("data",d),_.on("close",f),_.on("error",E=>{(0,Tr.info)("Socket error",E)})},{port:t,securePort:s,mtls:u})),c}function jB(e,t,r,n,s){XB||(XB=!0,ru(d=>{iE>0&&d.push({metric:"mqtt-connections",connections:iE,byThread:!0})}));let i;iE++;let o,c={protocolVersion:4},u=(0,aE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){iE--,i||(i=!0,o?.disconnect(),s.sessions.delete(o),rn(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.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 Ze.getUser(d.username,d.password.toString(),r),(0,oE.get)(as.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&JB.notify({username:n.username,status:as.AUTH_AUDIT_STATUS.SUCCESS,type:as.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,oE.get)(as.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&JB.error({username:n.username,status:as.AUTH_AUDIT_STATUS.FAILURE,type:as.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return rn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let g=e.deserialize||(e.deserialize=po(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?g(d.will.payload):void 0,delete d.will.payload}o=QB({user:n,...d}),o=await o,s.sessions.add(o)}catch(g){return(0,Tr.error)(g),rn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:g.code||5,returnCode:g.code||128})}rn(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((g,P,H,v)=>{try{let L=g.indexOf("/",1),$=L>0?g.slice(0,L):g;f({cmd:"publish",topic:g,payload:E(P),messageId:H||Math.floor(Math.random()*1e8),qos:v.qos},$)}catch(L){(0,Tr.error)(L),o?.disconnect(),s.sessions.delete(o)}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let g of d.subscriptions){let P;try{P=(await o.addSubscription(g,g.qos>=1)).qos||0}catch(H){(0,Tr.error)(H),P=c.protocolVersion<5?128:H.statusCode===403?135:H.statusCode===404?143:128}h.push(P)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let g=[];for(let P of d.unsubscriptions)g.push(o.removeSubscription(P)?0:17);f({cmd:"unsuback",granted:g,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=po(r?.headers.get?.("content-type"))),O=d.payload?.length>0?S(d.payload):void 0,R;try{R=await o.publish(d,O)}catch(g){(0,Tr.warn)(g),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:R===!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),rn(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Tr.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,aE.generate)(h,c);t(S),vr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return di(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var aE,ZB,oE,as,Tr,JB,eH,XB,iE,tH=Re(()=>{aE=require("mqtt-packet");zB();ZB=x(tn());pa();Os();tr();oE=x(te()),as=x(M()),Tr=x(W()),JB=(0,Tr.loggerWithTag)("auth-event"),eH=(0,oE.get)(as.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Qre,"bypassAuth");a(zre,"start");iE=0;a(jB,"onSocket")});var jd={};$e(jd,{component_errors:()=>qa,loadComponent:()=>cE,loadComponentDirectories:()=>lH,setErrorReporter:()=>Zre});function lH(e,t){t&&(HR=t),e&&(xR=e);let r=[];if((0,Bn.existsSync)(BR)){let s=(0,Bn.readdirSync)(BR,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,St.join)(BR,o);r.push(cE(c,HR,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(cE(n,HR,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{uH=!0})}function Zre(e){cl=e}async function cE(e,t,r,n,s,i){if(!nH.has(e)){nH.set(e,!0),s&&(xR=s);try{let o;n&&(qa=new Map);let c=(0,St.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,Bn.existsSync)(c)?o=n?(0,cH.getConfigObj)():(0,sH.parseDocument)((0,Bn.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=FR;let u=[],_=n;for(let l in o){let d=o[l];if(qa.set(n?l:(0,St.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let R=e,g;for(;!(0,Bn.existsSync)(g=(0,St.join)(R,"node_modules",l));)if(R=(0,St.dirname)(R),R.length<(0,aH.getHdbBasePath)().length){g=null;break}if(g)f=await cE(g,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=jre[l];if(!f)continue;u.push(f);let h=a(R=>(R.origin=r,at(R)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,O=!p?.https&&p?.port;if(Fa.isMainThread&&(f=await f.startOnMainThread?.({server:Ze,ensureTable:h,port:O,securePort:S,resources:t,...d})||f,n&&p))for(let R of[O,S])try{if(+R&&!rH.includes(R)){let g=qR.get(GR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);g&&al.default.warn("Session affinity is not recommended and may cause memory leaks"),(g||!$f)&&(rH.push(R),aB(R,g))}}catch(g){console.error("Error listening on socket",R,g,l)}if(t.isWorker&&(f=await f.start?.({server:Ze,ensureTable:h,port:O,securePort:S,resources:t,...d})||f),xR.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,oH.handleHDBError)("Can not reference parent directories");let R=(0,St.join)(e,d.files).replace(/\\/g,"/"),g=R.indexOf("/*");if(g>-1&&d.files!==FR[l]?.files&&!(0,Bn.existsSync)(R.slice(0,g)))throw new Error(`The path '${R.slice(0,g)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let P=(0,St.basename)(e),H=d.path||"/";H=H.startsWith("/")?H:H.startsWith("./")?"/"+P+H.slice(2):H==="."?"/"+P:"/"+P+"/"+H;let v,L,$;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",L=(0,St.join)(e,z)}else($=R.indexOf("/*"))>-1&&(L=R.slice(0,$+1),v=(0,St.relative)(e,L));let Y=!1;if(Fa.isMainThread&&f.setupDirectory&&(Y=await f.setupDirectory?.(H,L,t)),t.isWorker&&f.handleDirectory&&(Y=await f.handleDirectory?.(H,L,t)),Y)continue;for(let z of await(0,iH.default)(R,{onlyFiles:!1,objectMode:!0})){let{path:se,dirent:me}=z;_=!0;let ce=(0,St.relative)(e,se).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 xe=H+(H.endsWith("/")?"":"/")+ce;try{if(me.isFile()){let le=await Xre(se);Fa.isMainThread&&await f.setupFile?.(le,xe,se,t),t.isWorker&&await f.handleFile?.(le,xe,se,t)}else Fa.isMainThread&&await f.setupDirectory?.(xe,se,t),t.isWorker&&await f.handleDirectory?.(xe,se,t)}catch(le){le.message=`Could not load ${me.isFile()?"file":"directory"} '${se}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${le.message}`,cl?.(le),((0,Ga.getWorkerIndex)()===0?console:al.default).error(le),t.set(d.path||"/",new ul(le)),qa.set(n?l:(0,St.basename)(e),le.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,St.basename)(e)}' due to: ${h.message}`,cl?.(h),((0,Ga.getWorkerIndex)()===0?console:al.default).error(h),t.set(d.path||"/",new ul(h),null,!0),qa.set(n?l:(0,St.basename)(e),h.message)}}if(Fa.isMainThread&&!uH&&i&&(0,Ga.watchDir)(e,async()=>lH()),o.extensionModule)return await zl((0,St.join)(e,o.extensionModule));if(!_&&t.isWorker){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;cl?.(new Error(l)),((0,Ga.getWorkerIndex)()===0?console:al.default).error(l),qa.set((0,St.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,cl?.(o),t.set("",new ul(o))}}}var Bn,St,Fa,sH,qR,GR,iH,Ga,al,oH,aH,Jre,cH,Xre,BR,xR,uH,HR,qa,jre,FR,rH,nH,cl,ul,Zd=Re(()=>{Bn=require("fs"),St=require("path"),Fa=require("worker_threads"),sH=require("yaml"),qR=x(te()),GR=x(M());rb();ob();ab();uv();J0();rB();iH=x(require("fast-glob")),Ga=x(et()),al=x(W());gh();tr();oH=x(re());On();Ae();cB();aH=x(te()),Jre=x(fB());$d();LB();tH();cH=x(wr());Yf();({readFile:Xre}=Bn.promises),BR=qR.get(GR.CONFIG_PARAMS.COMPONENTSROOT),xR=new Map,qa=new Map;a(lH,"loadComponentDirectories");jre={REST:Sf,rest:Sf,graphqlSchema:Th,jsResource:Ah,fastifyRoutes:rR,login:bh,static:nR,operationsApi:Jre,customFunctions:{},http:{},clustering:gR,authentication:Mu,mqtt:vR},FR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(FR,"static",{value:{files:"web/**"}});rH=[],nH=new Map;a(Zre,"setErrorReporter");a(cE,"loadComponent");ul=class extends Ht{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 DR=T((tme,dH)=>{var{isMainThread:_H}=require("worker_threads"),{getTables:ene}=(Ae(),ne(qe)),{loadComponentDirectories:tne,loadComponent:rne}=(Zd(),ne(jd)),{resetResources:nne}=(Lu(),ne(SM)),sne=BT(),ine=wr(),{dirname:one}=require("path"),{getConnection:ane}=At(),cne=te(),une=M(),kR=new Map;async function lne(e=!1){!_H&&cne.get(une.CONFIG_PARAMS.CLUSTERING_ENABLED)&&ane();try{_H&&await sne()}catch(n){console.error(n)}let t=nne();ene(),t.isWorker=e,await rne(one(ine.getConfigFilePath()),t,"hdb",!0,kR),await tne(kR,t);let r=[];for(let[n]of kR)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(lne,"loadRootComponents");dH.exports.loadRootComponents=lne});var et=T((nme,Ai)=>{"use strict";var{Worker:_ne,MessageChannel:dne,parentPort:cs,isMainThread:WR,threadId:fne,workerData:Hs}=require("worker_threads"),{PACKAGE_ROOT:Ene}=M(),{join:mH,isAbsolute:hne,extname:mne}=require("path"),{server:pH}=(tr(),ne(Li)),{watch:pne,readdir:Sne}=require("fs/promises"),{totalmem:fH}=require("os"),ll=M(),SH=te(),xs=W(),{randomBytes:Tne}=require("crypto"),{_assignPackageExport:gne}=require("../../index"),Rne=M(),EH=1024*1024,Ri=[],dn=[],Ane=50,QR=1e4,One="restart",TH="request_thread_info",gH="resource_report",RH="thread_info",AH="added-port",bne="ack",VR;gne("threads",dn);Ai.exports={startWorker:$R,restartWorkers:JR,shutdownWorkers:Cne,workers:Ri,setMonitorListener:Hne,onMessageFromWorkers:Dne,onMessageByType:CH,broadcast:Une,broadcastWithAcknowledgement:Pne,setChildListenerByType:Ine,getWorkerIndex:OH,getWorkerCount:bH,getTicketKeys:yH,setMainIsWorker:yne,setTerminateTimeout:Nne,restartNumber:Hs?.restartNumber||1};dn.onMessageByType=CH;dn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=dn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var zR;function Nne(e){QR=e}a(Nne,"setTerminateTimeout");function OH(){return Hs?Hs.workerIndex:zR?0:void 0}a(OH,"getWorkerIndex");function bH(){return Hs?Hs.workerCount:zR?1:void 0}a(bH,"getWorkerCount");function yne(e){zR=e}a(yne,"setMainIsWorker");var NH=1,uE;function yH(){return uE||(uE=WR?Tne(48):Hs.ticketKeys,uE)}a(yH,"getTicketKeys");Object.defineProperty(pH,"workerIndex",{get(){return OH()}});Object.defineProperty(pH,"workerCount",{get(){return bH()}});var wH={[TH](e,t){vne(t)},[gH](e,t){Bne(t,e)}};function $R(e,t={}){let r=process.constrainedMemory?.()||fH();r=Math.min(r,fH(),2e4*EH);let n=SH.get(ll.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/EH/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let u of dn){let _=new dne;_.existingPort=u,i.push(_),o.push(_.port2)}mne(e)||(e+=".js");let c=new _ne(hne(e)?e:mH(Ene,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:NH=t.threadCount,name:t.name,restartNumber:Ai.exports.restartNumber,ticketKeys:yH()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:AH,port:u,threadId:c.threadId},[u]);return _E(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>$R(e,t),c.on("error",u=>{console.error("Worker error:",u),xs.error("Worker error:",u)}),c.on("exit",u=>{Ri.splice(Ri.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Ane?(t.unexpectedRestarts=c.unexpectedRestarts+1,$R(e,t)):xs.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{wH[u.type]?.(u,c)}),Ri.push(c),Fne(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a($R,"startWorker");var wne=[ll.THREAD_TYPES.HTTP];async function JR(e=null,t=Math.max(NH>3,1),r=!0){if(WR){if(r){let{loadRootComponents:o}=DR();await o()}Ai.exports.restartNumber++,t<1&&(t=t*Ri.length);let n=[],s=[];for(let o of Ri.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;xs.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Ai.exports.restartNumber,type:ll.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=wne.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),QR*2).unref();o.on("exit",()=>{clearTimeout(l),n.splice(n.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(n.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===Rne.ITC_EVENT_TYPES.CHILD_STARTED&&(xs.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(l)),_.off("message",f))},"startListener");xs.trace("Waiting for worker to start",_.threadId),_.on("message",f)});s.push(l),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}=Fd();r&&(e==="http"||!e)&&SH.get(ll.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else cs.postMessage({type:One,workerType:e})}a(JR,"restartWorkers");function Ine(e,t){wH[e]=t}a(Ine,"setChildListenerByType");function Cne(e){return JR(e,1/0,!1)}a(Cne,"shutdownWorkers");var IH=[];function Dne(e){IH.push(e)}a(Dne,"onMessageFromWorkers");var YR=new Map;function CH(e,t){let r=YR.get(e);r||YR.set(e,r=[]),r.push(t)}a(CH,"onMessageByType");var Lne=10;async function Une(e){let t=0;for(let r of dn)try{r.postMessage(e),t++>Lne&&(t=0,await new Promise(setImmediate))}catch(n){xs.error("Unable to send message to worker",n)}}a(Une,"broadcast");var lE=new Map,Mne=1;function Pne(e){return new Promise(t=>{let r=0;for(let n of dn)try{let s=Mne++,i=a(()=>{lE.delete(s),--r===0&&t(),n!==cs&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,lE.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of lE)o.port===n&&o()})),n.postMessage(e),r++}catch(s){xs.error("Unable to send message to worker",s)}r===0&&t()})}a(Pne,"broadcastWithAcknowledgement");function vne(e){e.postMessage({type:RH,workers:DH()})}a(vne,"sendThreadInfo");function DH(){let e=Date.now();return Ri.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(DH,"getChildWorkerInfo");function Bne(e,t){e.resources=t,e.resources.updated=Date.now()}a(Bne,"recordResourceReport");var KR;function Hne(e){KR=e}a(Hne,"setMonitorListener");var xne=1e3,hH=!1;function Fne(){hH||(hH=!0,setInterval(()=>{for(let e of Ri){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}KR&&KR()},xne).unref())}a(Fne,"startMonitoring");var qne=1e3;if(cs){_E(cs);for(let e=0,t=Hs.addPorts.length;e<t;e++){let r=Hs.addPorts[e];r.threadId=Hs.addThreadIds[e],_E(r)}setInterval(()=>{let e=process.memoryUsage();cs.postMessage({type:gH,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},qne).unref(),VR=a(()=>new Promise((e,t)=>{cs.on("message",r),cs.postMessage({type:TH});function r(n){n.type===RH&&(cs.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else VR=DH;Ai.exports.getThreadInfo=VR;function _E(e,t){dn.push(e),e.on("message",r=>{if(r.type===AH)r.port.threadId=r.threadId,_E(r.port);else if(r.type===bne){let n=lE.get(r.id);n&&n()}else{for(let s of IH)s(r,e);let n=YR.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){xs.error(i)}}}).on("close",()=>{dn.splice(dn.indexOf(e),1)}).on("exit",()=>{dn.splice(dn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(_E,"addPort");if(WR){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await Sne(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(mH(n,i.name));try{for await(let{filename:i}of pne(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await JR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");Ai.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else cs.on("message",async e=>{let{type:t}=e;t===ll.ITC_EVENT_TYPES.SHUTDOWN&&(Ai.exports.restartNumber=e.restartNumber,cs.unref(),setTimeout(()=>{xs.warn("Thread did not voluntarily terminate",fne),process.exit(0)},QR).unref())})});var zI={};$e(zI,{AUDIT_STORE_OPTIONS:()=>qH,createAuditEntry:()=>e_,openAuditStore:()=>hE,readAuditEntry:()=>Lt,setAuditRetention:()=>kne,transactionKeyEncoder:()=>FH});function hE(e){let t=e.auditStore=e.openDB(BH.AUDIT_STORE_NAME,qH);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=dE){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed")return;let o=0,c;try{for(let{key:u,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-XR})){if((_[0]&15)===eA){let l=Lt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=Gne){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,XR/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,EE.getWorkerIndex)()===(0,EE.getWorkerCount)()-1&&s(dE),t}function kne(e,t=dE){XR=e,dE=t}function e_(e,t,r,n,s,i,o){let c=GH[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let u=1;n&&(n>1?ka.setFloat64(0,n):fn.set(Gh),u=9),f(0),f(t),d(r),ka.setFloat64(u,e),u+=8,s?d(s):fn[u++]=0,fn[n?8:0]=c;let l=fn.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,Va.writeKey)(E,fn,u);let p=u-h-1;p>127?p>16383?(rA.error("Key or username was too large for audit entry",E),u=h+1,fn[h]=0):(fn.copyWithin(h+2,h+1,u),ka.setUint16(h,p|32768),u++):fn[h]=p}function f(E){E<128?fn[u++]=E:E<16384?(ka.setUint16(u,E|32768),u+=2):E<1056964608?(ka.setUint32(u,E|3221225472),u+=4):(fn[u]=255,ka.setUint32(u+1,E),u+=5)}}function Lt(e){try{let t=e.dataView||(e.dataView=new tA(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,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:GH[n&7],tableId:i,get recordId(){return vH(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?vH(e,l,d):void 0},getValue(f,E,h){if(n&jR||n&ZR&&!E)return f.decoder.decode(e.subarray(t.position));if(n&ZR&&h)return nA(f.getEntry(this.recordId),h,f)}}}catch{return rA.error("Reading audit entry error",e),{}}}function vH(e,t,r){let n=e.subarray(t,r);return(0,Va.readKey)(n,0,r-t)}var Va,fE,BH,HH,EE,xH,rA,fn,ka,FH,qH,XR,Gne,dE,jR,ZR,LH,eA,UH,MH,PH,GH,tA,Bi=Re(()=>{Va=require("ordered-binary"),fE=x(te()),BH=x(_t()),HH=x(M()),EE=x(et()),xH=x(J());xo();rA=x(W());mE();(0,fE.initSync)();fn=Buffer.alloc(1024),ka=new DataView(fn.buffer,fn.byteOffset,1024),FH={writeKey(e,t,r){return e===Rc?(t.set(Rc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Va.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,Va.readKey)(e,t,r)}},qH={encoding:"binary",keyEncoder:FH},XR=(0,xH.convertToMS)((0,fE.get)(HH.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Gne=1e3,dE=1e4;a(hE,"openAuditStore");a(kne,"setAuditRetention");jR=16,ZR=32,LH=1,eA=2,UH=3,MH=4,PH=5,GH={put:LH|jR,[LH]:"put",delete:eA,[eA]:"delete",message:UH|jR,[UH]:"message",invalidate:MH,[MH]:"invalidate",patch:PH|ZR,[PH]:"patch"};a(e_,"createAuditEntry");a(Lt,"readAuditEntry");tA=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(vH,"readKeySafely")});var sA={};$e(sA,{add:()=>pE,applyReverse:()=>kH,getRecordAtTime:()=>nA,rebuildUpdateBefore:()=>SE});function pE(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function SE(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,pE(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function kH(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=Vne[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=VH}}function nA(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let u=n.get(i),_=Lt(u);switch(_.type){case"put":s=_.getValue(r);break;case"patch":kH(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let u in s)s[u]===VH&&(o[u]=!0,c++);for(;c>0&&i>0;){let u=n.get(i),_=Lt(u),l;switch(_.type){case"put":l=_.getValue(r);break;case"patch":l=_.getValue(r);break}for(let d in l)o[d]&&(s[d]=l[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let u in o)s[u]=null;return s}var Vne,VH,mE=Re(()=>{Bi();a(pE,"add");pE.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};Vne={add:pE};a(SE,"rebuildUpdateBefore");a(kH,"applyReverse");VH={};a(nA,"getRecordAtTime")});function kr(e){return e[wt]||(e[wt]=Object.create(null))}function OE(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,u,_;if(o.resolve)_={get(){return o.resolve(this,this[Oe])},set(l){return o.set(this,l)},configurable:!0};else{switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be a string, attempt to assign ${l}`);kr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be a string, attempt to assign ${l}`);kr(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be a number, attempt to assign ${l}`);kr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new En.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);kr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new En.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);kr(this)[c]=l},"set");break;case"BigInt":u=a(function(l){if(!(typeof l=="bigint"||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=BigInt(l);else throw new En.ClientError(`${c} must be a number, attempt to assign ${l}`);kr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be a boolean, attempt to assign ${l}`);kr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new En.ClientError(`${c} must be a Date, attempt to assign ${l}`);kr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);kr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){kr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new En.ClientError(`${c} must be an object, attempt to assign ${l}`);kr(this)[c]=l},"set")}_={get(){let l=this[wt];if(l&&c in l){let f=l[c];if(f?.__op__){let E=this[de]?.[c];return f.update(E)}return f}let d=this[de]?.[c];if(d&&typeof d=="object"){let f=YH(d,o);if(f)return l||(l=this[wt]=Object.create(null)),l[c]=f}return d},set:u,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 u=this[wt];return u?.[o]!==void 0?u[o]:this[de]?.[o]}),i("set",function(o,c){let u=n[o];if(u)return u.set.call(this,c);if(t.sealed)throw new En.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[wt],c;for(let _ in o){c||(c=Object.assign({},this[de]));let l=o[_];if(l?.__op__){let d=c[_];l=l.update(d)}c[_]=l}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[de])),Object.assign(c,this)),c||this[de]}),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 YH(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?.[de])throw new Error("Can not track an already tracked object, check for circular references");this[de]=s}},OE(r,t)),new r(e)):new TE(e);case Array:let n=new RE(e.length);n[de]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=YH(o,t?.elements)),n[s]=o}return n;default:return e}}function $_(e){let t=e[wt],r;for(let s in t){r||(r=Object.assign({},e[de]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=$_(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[de])),Object.assign(r,e)),r||e[de]}function wo(e,t=e[wt]){let r;if($H.call(e,de)&&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=wo(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[de]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=sA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=wo(s);r[n]=s}return r?Object.freeze(r):$H.call(e,de)?e[de]:e}function gE(e){let t=e[de];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[yo]||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?.[de]===s){if(gE(i))return!0}else return!0}}else{let r=e[wt];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[de]===i){if(gE(s))return!0}else return!0}else return!0}}return!1}var En,wt,TE,$H,yo,RE,AE,Y_=Re(()=>{On();En=x(re());mE();wt=Symbol("own-data");a(kr,"getChanges");a(OE,"assignTrackedAccessors");a(YH,"trackObject");TE=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[de])throw new Error("Can not track an already tracked object, check for circular references");this[de]=t}};OE(TE,{});a($_,"collapseData");$H=Object.prototype.hasOwnProperty;a(wo,"deepFreeze");a(gE,"hasChanges");yo=Symbol.for("has-array-changes"),RE=class extends Array{static{a(this,"TrackedArray")}[yo];constructor(t){super(t)}splice(...t){return this[yo]=!0,super.splice(...t)}push(...t){return this[yo]=!0,super.push(...t)}pop(){return this[yo]=!0,super.pop()}unshift(...t){return this[yo]=!0,super.unshift(...t)}shift(){return this[yo]=!0,super.shift()}};RE.prototype.constructor=Array;AE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var _p={};$e(_p,{CONTEXT:()=>Oe,ID_PROPERTY:()=>Le,IS_COLLECTION:()=>hn,RECORD_PROPERTY:()=>de,Resource:()=>Ht,snake_case:()=>Yne,transformForSelect:()=>NE});function Yne(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function KH(e,t){if(_l=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(_l=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new oA;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){_l=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function Vr(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,u,_,l;if(r?(o?(l=i,o=o[Oe]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(l=s,c=l[this.primaryKey]??null,o=i[Oe]||i):l=i:(l=s,c=l[Le]??l[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[Oe]||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(u=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]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let E=c.indexOf("?");if(E>-1){let p=this.parseQuery(c.slice(E+1));u?u=Object.assign(p,u):u=p,c=c.slice(0,E)}let h=this.parsePath(c,o,u);h?.id!==void 0?(h.query&&(u?u=Object.assign(h.query,u):u=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(u?.ensureLoaded!=null||u?.async||_?(d=Object.assign({},t),u?.ensureLoaded!=null&&(d.ensureLoaded=u.ensureLoaded),u?.async&&(d.async=u.async),_&&(d.isCollection=!0)):d=t,o.transaction){let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)}else return 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,u,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,l,o):E.allowUpdate(o.user,l,o):t.type==="create"?E.allowCreate(o.user,l,o):E.allowDelete(o.user,u,o);if(h?.then)return h.then(p=>{if(!p)throw new bE(o.user);return typeof l?.then=="function"?l.then(S=>e(E,u,o,S)):e(E,u,o,l)});if(!h)throw new bE(o.user)}return typeof l?.then=="function"?l.then(h=>e(E,u,o,h)):e(E,u,o,l)}a(f,"authorizeActionOnResource")}}function $r(e,t){let r=new zH.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 iA(e,t,r){let n=e[de];if(n){let s=e[wt];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 NE(e,t){let r=t?.propertyResolvers,n=t[Oe],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):iA(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(c);let _=[],l=i(iA(u,r,n));for(let d of e)_.push(l(d));return _},"transform");let o=e.forceNulls;return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(f=>f&&typeof f=="object"?c(f):f);let _={},l=i(iA(u,r,n)),d;for(let f of e){let E=l(f);E===void 0&&o&&(E=null),E?.then?(d||(d=[]),d.push(E.then(h=>_[f.name||f]=h))):_[f.name||f]=E}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let u=s[c.name];if(!u){let l=r[c.name]?.definition?.tableClass;u=s[c.name]=NE(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var WH,QH,zH,Oe,Le,hn,de,$ne,Ht,bE,_l,oA,On=Re(()=>{WH=require("crypto");hc();QH=require("../../index"),zH=x(re());Y_();ji();mf();Oe=Symbol.for("context"),Le=Symbol.for("primary-key"),hn=Symbol("is-collection"),de=Symbol("stored-record"),$ne={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Ht=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Le]=t;let n=r?.[Oe];this[Oe]=n!==void 0?n:r||null}static get=Vr(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null&&!c.selectApplied){let _=NE(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Vr(function(t,r,n,s){if(Array.isArray(s)&&t[hn]){let i=[],o=n.authorize;for(let c of s){let u=t.constructor,_=u.getResource(c[u.primaryKey],n,{async:!0});_.then?i.push(_.then(l=>l.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):$r(t,"put")},{hasContent:!0,type:"update"});static patch=Vr(function(t,r,n,s){return t.patch?t.patch(s,r):$r(t,"patch")},{hasContent:!0,type:"update"});static delete=Vr(function(t,r,n,s){return t.delete?t.delete(r):$r(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,WH.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):$r(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=Vr(function(t,r,n,s){return t.invalidate?t.invalidate(r):$r(t,"delete")},{hasContent:!1,type:"update"});static post=Vr(function(t,r,n,s){return t[Le]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=Vr(function(t,r,n,s){return t.connect?t.connect(s,r):$r(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Vr(function(t,r,n,s){return t.subscribe?t.subscribe(r):$r(t,"subscribe")},{type:"read"});static publish=Vr(function(t,r,n,s){return t[Le]!=null&&t.update?.(),t.publish?t.publish(s,r):$r(t,"publish")},{hasContent:!0,type:"create"});static search=Vr(function(t,r,n,s){let i=t.search?t.search(r):$r(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=NE(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Vr(function(t,r,n,s){return t.search?t.search(s,r):$r(t,"search")},{hasContent:!0,type:"read"});static copy=Vr(function(t,r,n,s){return t.copy?t.copy(s,r):$r(t,"copy")},{type:"create"});static move=Vr(function(t,r,n,s){return t.move?t.move(s,r):$r(t,"move")},{type:"delete"});post(t){if(this[hn])return this.constructor.create(this[Le],t,this[Oe]);$r(this,"post")}static isCollection(t){return t?.[hn]}static coerceId(t){return t}static parseQuery(t){return hf(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&&$ne[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:KH(t,this),isCollection:_l}}let i=KH(t,this);return _l?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Oe],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 u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(s=_?.find(l=>l.constructor===c),s)return s;_||u.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=u.find(_=>_[Le]===t&&_.constructor===c),s)return s;if(u.push(s=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Le],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[hn]=!0),s}subscribe(t){return new An}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new An}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[Le]}getContext(){return this[Oe]}};Ht.prototype[Oe]=null;(0,QH._assignPackageExport)("Resource",Ht);a(Yne,"snake_case");bE=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(KH,"pathToId");oA=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Vr,"transactional");a($r,"missingMethod");a(iA,"selectFromObject");a(NE,"transformForSelect")});function XH(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;$a||((0,yE.onMessageByType)(JH,l=>{jH(l.path)}),$a=Object.create(null));let o=$a[s]||($a[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=ma(t);let u=new cA(r);u.startTime=n;let _=c.get(t);return _?_.push(u):(c.set(t,_=[u]),_.tables=c,_.key=t),u.subscriptions=_,u}function jH(e,t){if(!$a)return;let r=$a[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=Lt(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=ma(o.recordId),d=0;do{let f=c.get(l);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=s){(0,aA.info)("omitting",u,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(u,o,s,p)}catch(p){console.error(p),(0,aA.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E):l=null,d++}while(!0)}if(n)for(let s of n)s.txnInProgress=null,s.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function ZH(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,yE.broadcast)({type:JH,path:s}),jH(s,!0)})}}var aA,yE,JH,$a,Nme,cA,ex=Re(()=>{aA=x(W()),yE=x(et());hc();Lu();Bi();JH="transaction",Nme=Buffer.alloc(4096);a(XH,"addSubscription");cA=class extends An{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(jH,"notifyFromTransactionData");a(ZH,"listenToCommits")});var Fg={};$e(Fg,{coerceType:()=>wE,makeTable:()=>DE,setServerUtilities:()=>ese,updateResource:()=>IE});function DE(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:p}=e;p||(p=[]),ZH(i,u);let S=$h(i,n,u),O=0,R,g,P={},H=Promise.resolve(),v,L,$;for(let K of p)(K.assignCreatedTime||K.name==="__createdtime__")&&(v=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(L=K),K.expiresAt&&($=K),K.isPrimaryKey&&(P=K);let Y,z=[],se=[],me=1,ce=2,xe={},le={},It=864e5,yl,wl,ks,OA=!1,VE,Qx=i.getRange({start:!1,end:!1}).constructor,zx=10,Jx=6;E&&yA();class We extends Ht{static name=s;static primaryStore=i;static auditStore=u;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=L;static propertyResolvers;static sources=[];static get expirationMS(){return d}static dbisDB=l;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),g=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let w=a(D=>{let y=this.sources.slice(0,-1);if(y=y.filter(U=>U[D]&&(!U[D].reliesOnPrototype||U.prototype[D])),y.length>0)if(y.length===1){let U=y[0];return(G,C,B)=>{if(G?.source!==U)return U[D](C,B,G)}}else return(U,G,C)=>{let B=[];for(let q of y){if(U?.source===q)break;B.push(q[D](G,C,U))}return Promise.all(B)}},"getApplyToIntermediateSource"),N=this.sources[this.sources.length-1],b=a(D=>{if(N[D]&&(!N[D].reliesOnPrototype||N.prototype[D]))return(y,U,G)=>{if(!y?.source)return N[D](U,G,y)}},"getApplyToCanonicalSource");return xe={put:b("put"),patch:b("patch"),delete:b("delete"),publish:b("publish")},le={put:w("put"),patch:w("patch"),delete:w("delete"),publish:w("publish"),invalidate:w("invalidate")},(async()=>{let D=!1,y=a(async(U,G)=>{let C=U.value,B=U.table?tt[c][U.table]:We;if(c===xn.SYSTEM_SCHEMA_NAME&&(U.table===xn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||U.table===xn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),U.id===void 0&&(U.id=C[B.primaryKey],U.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(U));U.source=m;let q=await B.getResource(U.id,G,Ya);switch(U.type){case"put":return q._writeUpdate(C,!0,Ya);case"patch":return q._writeUpdate(C,!1,Ya);case"delete":return q._writeDelete(Ya);case"publish":return q._writePublish(C,Ya);case"invalidate":return q.invalidate(Ya);default:Je.error("Unknown operation",U.type,U.id)}},"writeUpdate");try{let U=m.subscribe;U&&h==null&&(h=!0);let G=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Co.getWorkerIndex)()):(0,Co.getWorkerIndex)()===0,C=U&&G&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let B;for await(let q of C)try{if(!(q.type==="transaction"?q.writes[0]:q)){Je.error("Bad subscription event",q);continue}if(q.source=m,B)if(q.beginTxn)B.resolve();else{y(q,B);continue}if(q.type==="end_txn")continue;let be=ze(q,()=>{if(q.type==="transaction"){let Z=[];for(let Ue of q.writes)try{Z.push(y(Ue,q))}catch(oe){throw oe.message+=" writing "+JSON.stringify(Ue)+" of event "+JSON.stringify(q),oe}return Promise.all(Z)}else if(q.type==="define_schema"){let Z=this.attributes.slice(0),Ue;for(let oe of q.attributes)Z.find(Fe=>Fe.name===oe.name)||(Z.push(oe),Ue=!0);Ue&&(at({table:s,database:c,attributes:Z,origin:"cluster"}),Sl.signalSchemaChange(new Tl.SchemaEventMsg(process.pid,xn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return q.beginTxn?(B=q,y(q,q),new Promise(Z=>{B.resolve=Z})):y(q,q)});D&&(await be,Sl.signalUserChange(new Tl.UserEventMsg(process.pid))),q.onCommit&&(be?.then?be.then(q.onCommit):q.onCommit())}catch(ie){Je.error("error in subscription handler",ie)}}}catch(U){Je.error(U)}})(),this}static getResource(m,A,w){let N=super.getResource(m,A,w);if(m!=null){Ja(m);try{if(N.hasOwnProperty(de))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),D=Sn(A),y=D.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return $E(m,A,{transaction:y},b,U=>{if(U?IE(N,U):N[de]=null,A.onlyIfCached&&A.noCacheStore){if(!N.doesExist())throw new mn.ServerError("Entry is not cached",504)}else if(w?.ensureLoaded){let G=YE(m,U,A,N);if(G)return D?.disregardReadTxn(),N[uA]=!0,_A(G,C=>(IE(N,C),N))}return N})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(m)),b}}return N}ensureLoaded(){let m=YE(this[Le],this[Yr],this[Oe]);if(m)return this[uA]=!0,_A(m,A=>{this[Yr]=A,this[de]=A.value,this[ml]=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,It=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");It=It||(d+f)/4,WE()}static enableAuditing(m=!0){E=m,m&&yA(),We.audit=m}static coerceId(m){return m===""?null:wE(m,P)}static async dropTable(){if(delete tt[c][s],c===o){for(let m of p)l.remove(We.tableName+"/"+m.name),r[m.name]?.drop();l.remove(We.tableName+"/"),i.drop(),await l.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Sl.signalSchemaChange(new Tl.SchemaEventMsg(process.pid,xn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[hn])return this.search(m);if(this[Le]===null){if(m?.conditions)return this.search(m);let A=We.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[Oe]?.returnNonexistent)return this}allowRead(m,A){let w=Cl(m);if(w?.read){if(w.isSuperUser)return!0;let N=w.attribute_permissions,b=A?.select;if(N?.length>0||OA&&b){if(A||(A={}),b){let D=N?.length>0&&lA(N,"read");A.select=b.map(y=>{let U=y.name||y;if(!D||D[U]){let G=ks[U]?.definition?.tableClass;if(G){if(y.name||(y={name:y}),!G.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else A.select=N.filter(D=>D.read&&!ks[D.attribute_name]).map(D=>D.attribute_name);return A}else return!0}}allowUpdate(m,A){let w=Cl(m);if(w?.update){let N=w.attribute_permissions;if(N?.length>0){let b=lA(N,"update");for(let D in A)if(!b[D])return!1;for(let D of N){let y=D.attribute_name;!D.update&&!(y in A)&&(A[y]=this.getProperty(y))}}return!0}}allowCreate(m,A){if(this[hn]){let w=Cl(m);if(w?.insert){let N=w.attribute_permissions;if(N?.length>0){let b=lA(N,"insert");for(let D in A)if(!b[D])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return Cl(m)?.delete}update(m,A){if(!Sn(this[Oe]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let N;return typeof m=="object"&&m&&(A?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[de]={},this[wt]=m):(N=this[wt],N&&(m=Object.assign(N,m)),this[wt]=N=m)),this._writeUpdate(this[wt],A),this}addTo(m,A){if(typeof A=="number")this[dl]===rx?this.set(m,(+this.getProperty(m)||0)+A):(this[dl]||this.update(),this.set(m,new AE(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[Oe],w=this[Le];Ja(w),Sn(this[Oe]).addWrite({key:w,store:i,invalidated:!0,entry:this[Yr],nodeName:this[Oe]?.nodeName,before:xe.invalidate?.bind(this,A,w),beforeIntermediate:le.invalidate?.bind(this,A,w),commit:(b,D)=>{if(D?.version>b)return;let y=null;for(let U in r)y||(y={}),y[U]=this.getProperty(U);S(w,y,this[Yr],b,fl,E,this[Oe],0,"invalidate")}})}static evict(m,A,w){let N=this.Source,b;if(!((g||E)&&(!A||(b=i.getEntry(m),!b||!A)||b.version!==w))){if(g){if(i.hasLock(m,b.version))return;let D;for(let y in r)D||(D={}),D[y]=A[y];if(D)return S(m,D,b,w,El,null,null,0,null,!0)}return i.ifVersion(w,()=>{Il(m,A,null)}),E?S(m,null,b,w,El,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,cx.operation(m,A)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,A,w){let N=this[Oe],b=Sn(N),D=this[Le];Ja(D);let y=this[Yr];this[dl]=A?rx:Xne;let U={key:D,store:i,entry:y,nodeName:N?.nodeName,validate:G=>{m||(m=this[wt]),A||m&&gE(m)?(this.validate(m,!A),N?.source||(L&&(m[L.name]=L.type==="Date"?new Date(G):L.type==="String"?new Date(G).toISOString():G),A&&(t&&m[t]!==D&&(m[t]=D),v&&(y?.value?m[v.name]=y?.value[v.name]:m[v.name]=v.type==="Date"?new Date(G):v.type==="String"?new Date(G).toISOString():G),m=wo(m)))):b.removeWrite(U)},before:A?xe.put?()=>xe.put(N,D,m):null:xe.patch?()=>xe.patch(N,D,m):xe.put?()=>xe.put(N,D,wo(this)):null,beforeIntermediate:A?le.put?()=>le.put(N,D,m):null:le.patch?()=>le.patch(N,D,m):le.put?()=>le.put(N,D,wo(this)):null,commit:(G,C,B)=>{if(B){if(N&&C?.version>(N.lastModified||0)&&(N.lastModified=C.version),this[Yr]=C,C?.value?.[de])throw new Error("Can not assign a record to a record, check for circular references");A||(this[de]=C?.value??null)}this[wt]=m,this[ml]=G;let q=C?.value,ie=m;if(this[dl]=0,C?.version>=G)if(E){let oe=C.localTime,Fe=C.version;for(;ie&&(oe>G||Fe>=G&&oe>0);){let ee=u.get(oe),X=Lt(ee);if(Fe=X.version,Fe>G){if(X.type==="patch"){let ge=X.getValue(i);ie=SE(ie,ge)}else if(X.type==="put"||X.type==="delete")return}else if(Fe===G)return;oe=X.previousLocalTime}}else{if(A)return;ie=SE(ie,q)}let be;if(A?be=ie:(this[de]=q,be=A?ie:wo(this,ie)),this[de]=be,be?.[de])throw new Error("Can not assign a record to a record, check for circular references");let Z;A||(Z=m),Il(D,q,be);let Ue=A?"put":"patch";S(D,be,C,G,0,E,N,N.expiresAt||(d?d+Date.now():0),Ue,!1,Z)}};b.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[hn]){for await(let A of this.search(m))(await We.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[de]?this._writeDelete(m):!1}_writeDelete(m){let A=Sn(this[Oe]),w=this[Le];Ja(w);let N=this[Oe];return A.addWrite({key:w,store:i,resource:this,nodeName:N?.nodeName,before:xe.delete?.bind(this,N,w),beforeIntermediate:le.delete?.bind(this,N,w),commit:(b,D,y)=>{let U=D?.value;y&&(N&&D?.version>(N.lastModified||0)&&(N.lastModified=D.version),IE(this,D)),!(D?.version>b)&&(Il(this[Le],U),Je.trace("Write delete entry",w,b),E||h?(S(w,null,this[Yr],b,0,E,this[Oe],0,"delete"),E||WE()):i.remove(this[Le]))}}),!0}search(m){let A=this[Oe],w=Sn(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[Le]&&(N=[{attribute:null,comparator:"prefix",value:this[Le]}].concat(N));let b,D={};function y(X,ge){let ve;switch(ge){case"and":case void 0:if(X.length<1)throw new Error('An "and" operator requires at least one condition');ve=!0;break;case"or":if(X.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ge)}let Fn=ve&&{},Vs;for(let Ve of X){if(Ve.conditions){Ve.conditions=y(Ve.conditions,Ve.operator);continue}let vt=Ve[0]??Ve.attribute,Jr=vt==null?P:Ls(p,vt);if(Jr){if(ve){let qn=Mn(vt),Bt=Fn[qn];Bt?(Bt.push(Ve),Vs=!0):Fn[qn]=[Ve]}(Jr.type||_g[Ve.comparator])&&(Ve[1]===void 0?Ve.value=G(Ve.value,Jr):Ve[1]=G(Ve[1],Jr))}else if(vt!=null)throw(0,mn.handleHDBError)(new Error,`${vt} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return X;if(Vs)for(let Ve in Fn){let vt=Fn[Ve],Jr=vt.length;if(Jr>1)for(let qn=0;qn<Jr;qn++){let Bt=vt[qn];if(Bt.comparator==="ge"||Bt.comparator==="greater_than_equal")for(let $s=0;$s<Jr;$s++){let Uo=vt[$s];(Uo.comparator==="le"||Uo.comparator==="less_than_equal")&&(Bt.comparator="between",Bt.value=[Bt.value,Uo.value],X.splice(X.indexOf(Uo),1))}if(Bt.comparator==="equals"||!Bt.comparator){for(let $s=0;$s<Jr;$s++)if($s!==qn){let Uo=vt[$s];X.splice(X.indexOf(Uo),1)}break}}}return X}a(y,"prepareConditions");function U(X,ge){if(m.enforceExecutionOrder)return X;for(let ve of X)ve.conditions&&(ve.conditions=U(ve.conditions,ve.operator));return X.length>1&&ge!=="or"?(0,ax.sortBy)(X,Ef(We)):X}a(U,"orderConditions");function G(X,ge){return Array.isArray(X)?X.map(ve=>wE(ve,ge)):wE(X,ge)}a(G,"coerceTypedValues");let C=m.operator;(N.length>0||C)&&(N=y(N,C));let B=typeof m.sort=="object"&&m.sort,q;if(B&&C!=="or"){let X=B.attribute;if(b=N.find(ge=>Mn(ge.attribute)===Mn(X)),!b){if(!Ls(p,X))throw(0,mn.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not a defined attribute`,404);b={attribute:X,comparator:"sort"},N.push(b)}b.descending=!!B.descending}N=U(N,C),B&&(N[0]===b?B.next&&(q={dbOrderedAttribute:B.attribute,attribute:B.next.attribute,descending:B.next.descending,next:B.next.next}):(b&&N.splice(N.indexOf(b),1),q=B));let ie=m.select;if(N.length===0&&(N=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:N,operator:C,postOrdering:q,selectApplied:!!ie};let be=w.useReadTxn(),Z=dg(N,C,We,be,m,A,(X,ge)=>bA(X,ie,A,be,ge),D),Ue=m.ensureLoaded!==!1;q||(Z=ee(Z));let oe=We.transformEntryForSelect(ie,A,be,D,Ue,!0),Fe=We.transformToOrderedSelect(Z,ie,q,be,A,oe);function ee(X){return m.offset||m.limit!==void 0?X.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):X}return a(ee,"applyOffset"),q&&(Fe=ee(Fe)),Fe.onDone=()=>{Fe.onDone=null,w.doneReadTxn()},Fe.selectApplied=!0,Fe.getColumns=()=>{if(ie){let X=[];for(let ge of ie)ge==="*"?X.push(...p.map(ve=>ve.name)):X.push(ge.name||ge);return X}return p.map(X=>X.name)},Fe}static transformToOrderedSelect(m,A,w,N,b,D){let y=new Qx;if(w){m=bA(m,A,N,b,null);let U;y.iterate=function(){let C,B=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),q,ie=w.dbOrderedAttribute,be,Z,Ue=!0;function oe(ee){let X=ee.next&&oe(ee.next),ge=ee.descending;return(ve,Fn)=>{let Vs=KE(ve,ee.attribute,N),Ve=KE(Fn,ee.attribute,N),vt=ge?(0,Do.compareKeys)(Ve,Vs):(0,Do.compareKeys)(Vs,Ve);return vt===0?X?.(ve,Fn)||0:vt}}a(oe,"createComparator");let Fe=oe(w);return{async next(){let ee;if(C)if(ee=C.next(),ee.done){if(q)return y.onDone&&y.onDone(),ee}else return{value:await D.call(this,ee.value)};U=[],be&&U.push(be);do if(ee=await B.next(),ee.done){if(q=!0,U.length)break;return y.onDone&&y.onDone(),ee}else{let X=ee.value;if(X?.then&&(X=await X),ie){let ge=KE(X,ie,N);if(Ue)Ue=!1,Z=ge;else if(ge!==Z){Z=ge,be=X;break}}U.push(X)}while(!0);return w.isGrouped,U.sort(Fe),C=U[Symbol.iterator](),ee=C.next(),ee.done?(y.onDone&&y.onDone(),ee):{value:await D.call(this,ee.value)}},return(){y.onDone&&y.onDone(),B.return()},throw(){y.onDone&&y.onDone(),B.throw()}}};let G=a(C=>{if(typeof A=="object"&&Array.isArray(C.attribute))for(let B=0;B<A.length;B++){let q=A[B],ie;if(q.name===C.attribute[0]){for(ie=q.sort||(q.sort={});ie.next;)ie=ie.next;ie.attribute=C.attribute.slice(1),ie.descending=C.descending}else q===C.attribute[0]&&(A[B]=ie={name:q,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&G(C.next)},"applySortingOnSelect");G(w)}else y.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),y=y.map(D);return y}static transformEntryForSelect(m,A,w,N,b,D){if(m&&(m===t||m?.length===1&&m[0]===t)){let C=a(B=>B?.key??B,"transform");return m===t?C:m.asArray?B=>[C(B)]:B=>({[t]:C(B)})}let y;b&&g&&!m?.every(C=>{let B;return typeof C=="object"?B=C.name:B=C,r[B]||B===t})&&(y=!0);let U,G=a(function(C){let B;if(C!=null){if(VE=C,B=C.value||C.deref?.(),!B&&(C.key===void 0||C.deref)){if(C=$E(C.key??C,A,{transaction:w,lazy:m?.length<4},this.isSync,q=>q),C?.then)return C.then(G.bind(this));B=C?.value}if(y&&(C.metadataFlags&(fl|El)||C.expiresAt&&C.expiresAt<Date.now())){let q=YE(C.key??C,C,A);if(q?.then)return q.then(G)}}if(B==null)return D?Io.SKIP:B;if(m&&!(m[0]==="*"&&m.length===1)){let q,ie=a((Z,Ue)=>{let oe;typeof Z=="object"?oe=Z.name:oe=Z;let Fe=ks?.[oe],ee;if(Fe){let X=N?.[oe];if(X)if(X.hasMappings){let ve=Fe.from?B[Fe.from]:Mn(C.key);ee=X.get(ve),ee||(ee=[])}else ee=X.fromRecord?.(B);else ee=Fe(B,A,C);let ge=a(ve=>{if(ve&&typeof ve=="object"){let Fn=Fe.definition?.tableClass||We;U||(U={});let Vs=U[oe]||(U[oe]=Fn.transformEntryForSelect(oe===Z?null:Z.select||(Array.isArray(Z)?Z:null),A,w,X,b));if(Array.isArray(ve)){let Ve=[],vt=Fn.transformToOrderedSelect(ve,Z.select,typeof Z.sort=="object"&&Z.sort,A,w,Vs)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Jr=a(Bt=>{for(;!Bt.done;){if(Bt?.then)return Bt.then(Jr);Ve.push(Bt.value),Bt=vt.next()}Ue(Ve,oe)},"nextValue"),qn=Jr(vt.next());qn&&(q||(q=[]),q.push(qn));return}else if(ve=Vs.call(this,ve),ve?.then){q||(q=[]),q.push(ve.then(Ve=>Ue(Ve,oe)));return}}Ue(ve,oe)},"handleResolvedValue");ee?.then?(q||(q=[]),q.push(ee.then(ge))):ge(ee);return}else ee=B[oe],ee&&typeof ee=="object"&&oe!==Z&&(ee=We.transformEntryForSelect(Z.select||Z,A,w,null)({value:ee}));Ue(ee,oe)},"selectAttribute"),be;if(typeof m=="string")ie(m,Z=>{be=Z});else if(Array.isArray(m))if(m.asArray)be=[],m.forEach((Z,Ue)=>{Z==="*"?m[Ue]=B:ie(Z,oe=>be[Ue]=oe)});else{be={};let Z=m.forceNulls;for(let Ue of m)if(Ue==="*")for(let oe in B)be[oe]=B[oe];else ie(Ue,(oe,Fe)=>{oe===void 0&&Z&&(oe=null),be[Fe]=oe})}else throw new mn.ClientError("Invalid select"+m);return q?Promise.all(q).then(()=>be):be}return B},"transform");return G}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||at({table:s,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let A=!m.rawEvents,w=XH(We,this[Le]??null,function(y,U,G,C){try{let B=U.getValue?.(i,A);if(!B&&U.type==="patch"&&A){let q=i.getEntry(y);q?.version===U.version?B=q.value:B=U.getValue?.(i,!0,G),U.type="put"}this.send({id:y,timestamp:G,value:B,version:U.version,type:U.type,beginTxn:C})}catch(B){Je.error(B)}},m.startTime||0,this[hn]);this[hn]&&(w.includeDescendants=!0,m.onlyChildren&&(w.onlyChildren=!0)),m.crossThreads===!1&&(w.crossThreads=!1),m.supportsTransactions&&(w.supportsTransactions=!0);let N=this[Le],b=m.previousCount;b>1e3&&(b=1e3);let D=m.startTime;if(this[hn]){if(D){if(b)throw new mn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:U}of u.getRange({start:D,exclusiveStart:!0})){let G=Lt(U);if(G.tableId!==n)continue;let C=G.recordId;(N==null||ix(N,C))&&w.send({id:C,timestamp:y,...G}),w.startTime=y}}else if(b){let y=[];for(let{key:U,value:G}of u.getRange({start:"z",end:!1,reverse:!0}))try{let C=Lt(G);if(C.tableId!==n)continue;let B=C.recordId;if(N==null||ix(N,B)){let q=C.getValue(i,A,U);if(y.push({id:B,timestamp:U,value:q,version:C.version,type:C.type}),--b<=0)break}}catch(C){Je.error("Error getting history entry",U,C)}for(let U=y.length;U>0;)w.send(y[--U]);y[0]&&(w.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:U,version:G,localTime:C}of i.getRange({start:N??!1,end:N==null?void 0:[N,Do.MAXIMUM_KEY],versions:!0}))U&&w.send({id:y,version:G,timestamp:C,value:U})}else{b&&!D&&(D=0);let y=this[Yr]?.localTime;if(y===Vh&&(i.cache?.delete(N),this[Yr]=i.getEntry(N),Je.trace("re-retrieved record",y,this[Yr]?.localTime),y=this[Yr]?.localTime),Je.trace("Subscription from",D,"from",N,y),D<y){let U=[],G=y;do{let C=u.get(G);if(C){m.omitCurrent=!0;let B=Lt(C),q=B.getValue(i,A,G);A&&(B.type="put"),U.push({id:N,value:q,timestamp:G,...B}),G=B.previousLocalTime}else break;b&&b--}while(G>D&&b!==0);for(let C=U.length;C>0;)w.send(U[--C]);w.startTime=y}!m.omitCurrent&&this.doesExist()&&w.send({id:N,version:this[ml],timestamp:y,value:this})}return m.listener&&w.on("data",m.listener),w}doesExist(){return!!(this[de]||this[dl])}publish(m,A){this._writePublish(m,A)}_writePublish(m,A){let w=Sn(this[Oe]),N=this[Le]||null;Ja(N);let b=this[Oe];w.addWrite({key:N,store:i,entry:this[Yr],nodeName:b?.nodeName,validate:()=>{this.validate(m)},before:xe.publish?.bind(this,b,N,m),beforeIntermediate:le.publish?.bind(this,b,N,m),commit:(D,y,U)=>{y===void 0&&h&&!E&&WE(),S(N,y?.value??null,y,y?.version||D,0,!0,b,y?.expiresAt,"message",!1,m)}})}validate(m,A){let w,N=a((b,D,y)=>{if(D.type&&b!=null)if(A&&b.__op__&&(b=b.value),D.properties){typeof b!="object"&&(w||(w=[])).push(`Value ${Hn(b)} in property ${y} must be an object${D.type?" ("+D.type+")":""}`);let U=D.properties;for(let G=0,C=U.length;G<C;G++){let B=U[G],q=N(b[B.name],B,y+"."+B.name);q&&(b[B.name]=q)}}else switch(D.type){case"Int":(typeof b!="number"||b>>0!==b)&&(w||(w=[])).push(`Value ${Hn(b)} in 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(`Value ${Hn(b)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(w||(w=[])).push(`Value ${Hn(b)} in property ${y} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(U=>typeof U=="string")||(w||(w=[])).push(`Value ${Hn(b)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(w||(w=[])).push(`Value ${Hn(b)} in property ${y} must be a string`);break;case"Boolean":typeof b!="boolean"&&(w||(w=[])).push(`Value ${Hn(b)} in 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(`Value ${Hn(b)} in 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(`Value ${Hn(b)} in property ${y} must be a bigint`)}break;case"Bytes":b instanceof Uint8Array||(w||(w=[])).push(`Value ${Hn(b)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(b)){if(D.elements)for(let U=0,G=b.length;U<G;U++){let C=b[U],B=N(C,D.elements,y+"[*]");B&&(b[U]=B)}}else(w||(w=[])).push(`Value ${Hn(b)} in property ${y} must be a Buffer or Uint8Array`);break}D.nullable===!1&&b==null&&(w||(w=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let b=0,D=p.length;b<D;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 mn.ClientError(w.join(". "))}getUpdatedTime(){return this[ml]}wasLoadedFromSource(){return g?!!this[uA]:void 0}static async addAttributes(m){let A=p.slice(0);for(let w of m){if(!w.name)throw new mn.ClientError("Attribute name is required");if(w.name.match(/[`/]/))throw new mn.ClientError("Attribute names cannot include backticks or forward slashes");A.push(w)}return at({table:s,database:c,schemaDefined:_,attributes:A}),We.indexingOperation}static async removeAttributes(m){let A=p.filter(w=>!m.includes(w.name));return at({table:s,database:c,schemaDefined:_,attributes:A}),We.indexingOperation}static getRecordCount(m){let A=i.getStats().entryCount,w=5e3,N=1e3,b;A>w&&!m?.exactCount&&(b=N);let D=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:b}))y!=null&&D++;if(b){let y=D;D=0;for(let{value:Ue}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:b}))Ue!=null&&D++;let U=b*2,G=(D+y)/U,C=Math.pow((D-y+1)/b/2,2)+G*(1-G)/U,B=Math.max(Math.sqrt(C)*A,1),q=Math.round(G*A),ie=Math.max(q-1.96*B,0),be=Math.min(q+1.96*B,A),Z=Math.pow(10,Math.round(Math.log10(B)));return Z>q&&(Z=Z/10),D=Math.round(q/Z)*Z,{recordCount:D,estimatedRange:[Math.round(ie),Math.round(be)]}}return{recordCount:D}}static updatedAttributes(){ks=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)"),OA=!0,A.to)m.elements?.definition?(ks[m.name]=m.resolve=(w,N,b)=>{let D=w[A.from?A.from:t],y=m.elements.definition.tableClass;return b?ya({attribute:A.to,value:D},Sn(N).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:A.to,value:D}],N).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,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?(ks[m.name]=m.resolve=(N,b,D)=>{let y=N[A.from];if(y!==void 0){if(m.elements){let U,G=y.map(C=>{let B=D?w.tableClass.primaryStore.getEntry(C,{transaction:Sn(b).getReadTxn()}):w.tableClass.get(C,b);return B?.then&&(U=!0),B});return A.filterMissing?U?Promise.all(G).then(C=>C.filter(ox)):G.filter(ox):U?Promise.all(G):G}return D?w.tableClass.primaryStore.getEntry(y,{transaction:Sn(b).getReadTxn()}):w.tableClass.get(y,b)}},m.set=(N,b)=>{if(Array.isArray(b)){let D=b.map(y=>y[Le]||y[w.tableClass.primaryKey]);N[A.from]=D}else{let D=b[Le]||b[w.tableClass.primaryKey];N[A.from]=D}},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`)}OE(this,this)}static async deleteHistory(m=0){let A;for(let{key:w,value:N}of u.getRange({start:0,end:m}))await hl(),Lt(N).tableId===n&&(A=u.remove(w));await A}static async*getHistory(m=0,A=1/0){for(let{key:w,value:N}of u.getRange({start:m,end:A})){await hl();let b=Lt(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 hl();let D=u.get(N);if(D){let y=Lt(D);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()}}We.updatedAttributes();let Xx=We.prototype;return Xx[Jne]=!0,d&&We.setTTLExpiration(d/1e3),$&&jx(),We;function Il(K,m,A){let w;for(let N in r){let b=r[N],D=b.isIndexing,y=A?.[N],U=m?.[N];if(y===U&&!D)continue;w=!0;let G=b.indexNulls,C=(0,pl.getIndexedValues)(U,G);if(C){tx&&b.prefetch(C.map(B=>({key:B,value:K})),sx);for(let B=0,q=C.length;B<q;B++)b.remove(C[B],K)}if(C=(0,pl.getIndexedValues)(y,G),C){tx&&b.prefetch(C.map(B=>({key:B,value:K})),sx);for(let B=0,q=C.length;B<q;B++)b.put(C[B],K)}}return w}a(Il,"updateIndices");function Ja(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>nx)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)return!0;break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,Do.writeKey)(K,jne,0)>nx)throw new Error("Primary key size is too large: "+K.length);return!0}a(Ja,"checkValidId");function $E(K,m,A,w,N){let b=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),A.transaction?.isDone)return N(null,K);let D=i.getEntry(K,A);return D&&m&&(D?.version>(m.lastModified||0)&&(m.lastModified=D.version),D?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=D.localTime)),N(D,K)},"whenPrefetched");return w?b():me>0?(me--,b()):new Promise((D,y)=>{me===0?(me--,i.prefetch([K],()=>{U(),G()})):(z.push(K),se.push(G),z.length>Jx&&(me--,U()));function U(){if(z.length>0){let C=se;i.prefetch(z,()=>{me===-1?U():me++;for(let B of C)B()}),z=[],se=[],ce>2&&ce--}else me=ce,ce<zx&&ce++}a(U,"prefetch");function G(){try{D(b())}catch(C){y(C)}}a(G,"load")})}a($E,"loadLocalRecord");function Cl(K){if(!K?.role)return;let m=K.role.permission;if(m.super_user)return Zne;let A=m[c],w,N=A?.tables;if(N)return N[s];if(c==="data"&&(w=m[s])&&!w.tables)return w}a(Cl,"getTablePermissions");function YE(K,m,A,w){if(g){let N;if(A.noCache?N=!0:(m?(!m.value||m.metadataFlags&(fl|El)||m.expiresAt&&m.expiresAt<Date.now())&&(N=!0):N=!0,rn(!N,"cache-hit",s)),N){let b=NA(K,m,A).then(D=>(D?.value?.[de]&&Je.error("Can not assign a record with a record property"),A&&(D?.version>(A.lastModified||0)&&(A.lastModified=D.version),A.lastRefreshed=Date.now()),D));if(A?.onlyIfCached||m?.value&&w?.allowStaleWhileRevalidate?.(m,K)){if(b.catch(D=>Je.warn(D)),A?.onlyIfCached&&!w.doesExist())throw new mn.ServerError("Entry is not cached",504);return}else return b}}}a(YE,"ensureLoadedFromSource");function Sn(K){let m=K?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let A=m.next;if(!A)return m=m.next=new Xi,m.lmdbDb=i,m;m=A}while(!0)}else return new k_}a(Sn,"txnForContext");function KE(K,m,A){if(!K)return;VE=K;let w=K.value||K.deref?.()||(VE=i.getEntry(K.key))?.value;if(typeof m=="object"){let b=ks,D=w;for(let y=0,U=m.length;y<U;y++){let G=m[y],C=b?.[G];D=C&&D?C(D,A,!0)?.value:D?.[G],b=C?.definition?.tableClass?.propertyResolvers}return D}let N=ks[m];return N?N(w,A):w[m]}a(KE,"getAttributeValue");function bA(K,m,A,w,N){let b=N?.length,D={transaction:w,lazy:b>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},y;function U(G,C){let B=G?.value;if(!B)return Io.SKIP;for(let q=0;q<b;q++)if(!y?.includes(q)&&!N[q](B,G))return Io.SKIP;return C!==void 0&&(G.key=C),G}if(a(U,"processEntry"),b>0||!K.hasEntries){let G=K.map(C=>{if(y=null,typeof C=="object"&&C.key!==void 0)return b>0?U(C):C;if(C==null)return Io.SKIP;for(let B=0;B<b;B++){let ie=N[B].idFilter;if(ie){if(!ie(C))return Io.SKIP;y||(y=[]),y.push(B)}}return $E(C,A,D,!1,U)});return Array.isArray(K)&&(G=G.filter(C=>C!==Io.SKIP)),G.hasEntries=!0,G}return K}a(bA,"transformToEntries");async function NA(K,m,A){let w=m?.metadataFlags,N=m?.version,b,D;if(!i.attemptLock(K,N,()=>{clearTimeout(D);let C=i.getEntry(K);!C||!C.value||C.metadataFlags&(fl|El)?b(NA(K,i.getEntry(K),A)):b(C)}))return new Promise(C=>{b=C,D=setTimeout(()=>{i.unlock(K,N)},zne)});let y=m?.value,U={requestContext:A,replacingRecord:y,replacingVersion:N,source:null,resourceCache:A?.resourceCache},G=A?.responseHeaders;return new Promise((C,B)=>{let q;_A(ze(U,async ie=>{let be=performance.now(),Z,Ue,oe;try{for(let ge of We.sources)if(ge.get&&(!ge.get.reliesOnPrototype||ge.prototype.get)&&(U.source=ge,Z=await ge.get(K,U),Z))break;oe=w&fl;let ee=U.lastModified||oe&&N;Ue=oe||ee>N||!y,ee||(ee=(0,pl.getNextMonotonicTime)());let X=performance.now()-be;if(vr(X,"cache-resolution",s),G&&MT(G,"Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`,!0),ie.timestamp=ee,d&&!U.expiresAt&&(U.expiresAt=Date.now()+d),Z){if(typeof Z!="object")throw new Error("Only objects can be cached and stored in tables");typeof Z.toJSON=="function"&&(Z=Z.toJSON()),t&&Z[t]!==K&&(Z[t]=K)}q=!0,C({version:ee,value:Z})}catch(ee){ee.message+=` while resolving record ${K} for ${s}`,y&&((ee.code==="ECONNRESET"||ee.code==="ECONNREFUSED"||ee.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(ee.statusCode===500||ee.statusCode===502||ee.statusCode===503||ee.statusCode===504))?(C({version:N,value:y}),Je.trace(ee.message,"(returned stale record)")):B(ee),U.transaction.abort();return}if(A?.noCacheStore){U.transaction.abort();return}Sn(U).addWrite({key:K,store:i,entry:m,nodeName:"source",commit:(ee,X)=>{if(X?.version!==N)return;let ge=Il(K,y,Z);Z?(le.put?.(U,K,Z),S(K,Z,X,ee,0,E&&Ue||null,U,U.expiresAt,"put",!!oe)):(le.delete?.(U,K),E||h?S(K,null,X,ee,0,E&&Ue||null,U,0,"delete",!!oe):i.remove(K,N))}})}),()=>{i.unlock(K,N)},ie=>{i.unlock(K,N),q&&Je.error("Error committing cache update",ie)})})}a(NA,"getFromSource");function WE(){if(It!==yl&&(yl=It,(0,Co.getWorkerIndex)()===(0,Co.getWorkerCount)()-1)){if(wl&&clearTimeout(wl),!It)return;let K=new Date;K.setMonth(0),K.setDate(1),K.setHours(0),K.setMinutes(0),K.setSeconds(0);let m=Math.ceil((Date.now()-K.getTime())/It)*It+K.getTime(),A=a(w=>{Je.trace(`Scheduled next cleanup scan at ${new Date(w)}ms`),wl=setTimeout(()=>H=H.then(async()=>{if(A(Math.max(w+It,Date.now())),i.rootStore.status!=="open"){clearTimeout(wl);return}let N=50,b=new Array(N),D=0;Je.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:U,value:G,version:C,expiresAt:B}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let q;G===null&&!E&&C+Qne<Date.now()?q=i.remove(U,C):B&&B+f<Date.now()&&(q=We.evict(U,G,C),y++),q&&(await b[D],b[D]=q.catch(ie=>{Je.error("Cleanup error",ie)}),++D>=N&&(D=0)),await hl()}Je.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){Je.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(w-Date.now(),2147483647)).unref()},"startNextTimer");A(m)}}a(WE,"scheduleCleanup");function yA(){Y=u?.addDeleteRemovalCallback(n,K=>{let m=i.getEntry(K);m?.value===null&&i.remove(K,m.version)})}a(yA,"addDeleteRemoval");function jx(){(0,Co.getWorkerIndex)()===0&&setInterval(async()=>{try{let K=$.name,m=r[K];if(!m)throw new Error(`expiresAt attribute ${$} 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?.[K]<Date.now()&&We.evict(A,w.value,w.version),await hl()}}catch(K){Je.error("Error in evicting old records",K)}},Wne).unref()}a(jx,"runRecordExpirationEviction")}function lA(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 sx(){}function ese(e){cx=e}function wE(e,t){let r=t?.type;return e===null?e:e===""&&r&&r!=="String"&&r!=="Any"?null:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Boolean"?e==="true"?!0:e==="false"?!1:e:r==="Date"?(typeof e!="number"&&!tse.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,CE.autoCast)(e):e}function ix(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 _A(e,t,r){return e?.then?e.then(t,r):t(e)}function IE(e,t){e[Yr]=t,e[de]=t?.value??null,e[ml]=t?.version}function ox(e){return e!=null}function Hn(e){try{return JSON.stringify(e)}catch{return e}}var xn,Io,pl,ax,gl,mn,Sl,Tl,Je,Do,Co,CE,Kne,cx,Wne,Qne,tx,zne,ml,Jne,Yr,dl,rx,Xne,uA,Ya,fl,El,jne,nx,Zne,Vme,tse,hl,Df=Re(()=>{xn=x(M()),Io=require("lmdb"),pl=x(Ir()),ax=require("lodash");On();Mp();gl=x(te());ex();mn=x(re()),Sl=x(Ts()),Tl=x(wn());Ae();mf();Je=x(W());Y_();ji();Do=require("ordered-binary"),Co=x(et());Bi();CE=x(J());xo();Os();mE();Uu();Kne=new Uint8Array(9);Kne[8]=192;Wne=6e4,Qne=864e5;gl.initSync();tx=gl.get(xn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),zne=1e4,ml=Symbol.for("version"),Jne=Symbol.for("incremental-update"),Yr=Symbol("entry"),dl=Symbol("is-saving"),rx=1,Xne=2,uA=Symbol("loaded-from-source"),Ya={isNotification:!0,ensureLoaded:!1},fl=1,El=8,jne=Buffer.allocUnsafeSlow(8192),nx=1978,Zne={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},Vme=(0,CE.convertToMS)(gl.get(xn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(DE,"makeTable");a(lA,"attributesAsObject");a(sx,"noop");a(ese,"setServerUtilities");tse=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(wE,"coerceType");a(ix,"isDescendantId");hl=a(()=>new Promise(setImmediate),"rest");a(_A,"when");a(IE,"updateResource");a(ox,"exists");a(Hn,"stringify")});var qe={};$e(qe,{database:()=>zc,databases:()=>tt,dropDatabase:()=>xp,dropTableMeta:()=>ase,getDatabases:()=>Cn,getTables:()=>rse,onUpdatedTable:()=>RR,readMetaDb:()=>Rl,resetDatabases:()=>nse,table:()=>at,tables:()=>Cr});function rse(){return vE||Cn(),Cr||{}}function Cn(){if(vE)return tt;vE=!0,Qa=new Map;let e=(0,Xt.getHdbBasePath)()&&(0,Xe.join)((0,Xt.getHdbBasePath)(),Wr.DATABASES_DIR_NAME),t=(0,Xt.get)(Wr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Xt.get)(Wr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Kr.existsSync)(e)?e:(0,Xe.join)((0,Xt.getHdbBasePath)(),Wr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Kr.existsSync)(e))for(let r of(0,Kr.readdirSync)(e,{withFileTypes:!0})){let n=(0,Xe.basename)(r.name,".mdb");r.isFile()&&(0,Xe.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Rl((0,Xe.join)(e,r.name),null,n)}if((0,Kr.existsSync)((0,Wa.getBaseSchemaPath)())){for(let r of(0,Kr.readdirSync)((0,Wa.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Xe.join)((0,Wa.getBaseSchemaPath)(),r.name),s=(0,Xe.join)((0,Wa.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Kr.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Xe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Xe.join)(s,i.name);Rl((0,Xe.join)(n,i.name),(0,Xe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,Kr.existsSync)(s))for(let o of(0,Kr.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,Xe.extname)(o.name).toLowerCase()===".mdb"&&Rl((0,Xe.join)(s,o.name),(0,Xe.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],u=(0,Xe.join)(c.path,(0,Xe.basename)(o+".mdb"));(0,Kr.existsSync)(u)&&Rl(u,o,r,null,!0)}}for(let r in tt){let n=Qa.get(r);if(n){let s=tt[r];r.includes("delete")&&pn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(pn.trace(`delete table class ${i}`),delete s[i])}else if(delete tt[r],r==="data"){for(let s in Cr)delete Cr[s];delete Cr[BE]}}return Qa=null,tt}}function nse(){vE=!1;for(let[,e]of Oi)e.needsDeletion=!0;Cn();for(let[e,t]of Oi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Oi.delete(e));return tt}function Rl(e,t,r=EA,n,s){let i=new dA.default(e,!1);try{let o=Oi.get(e);o?o.needsDeletion=!1:(o=(0,UE.open)(i),Oi.set(e,o));let c=new Lo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(LE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,Kr.existsSync)(n)&&(i.path=n,_=(0,UE.open)(i),_.isLegacy=!0):_=hE(o));let l=dx(r),d=l[BE],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let 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){pn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let O=l[E],R={},g=[],P,H,v=typeof S.audit=="boolean"?S.audit:(0,Xt.get)(Wr.CONFIG_PARAMS.LOGGING_AUDITLOG),L=S.trackDeletes,$=S.expiration,Y=S.eviction;if(O)R=O.indices,g=O.attributes,O.schemaVersion++;else{P=S.tableId,P?P>=(u.get(Ka)||0)&&u.putSync(Ka,P+1):(S.tableId=P=u.get(Ka),P||(P=1),u.putSync(Ka,P+1),u.putSync(S.key,S));let z=new Lo.default(!S.is_hash_attribute,S.is_hash_attribute);H=r_(o.openDB(S.key,z)),H.rootStore=o,H.tableId=P}for(let z of p){z.attribute=z.name;try{if(!z.is_hash_attribute&&(z.indexed||z.attribute&&!z.name)){if(!R[z.name]){let me=new Lo.default(!z.is_hash_attribute,z.is_hash_attribute);R[z.name]=o.openDB(z.key,me),R[z.name].indexNulls=z.indexNulls}let se=g.find(me=>me.name===z.name);se?g.splice(g.indexOf(se),1,z):g.push(z)}}catch(se){pn.error("Error trying to update attribute",z,g,R,se)}}if(!O){O=fx(l,E,DE({primaryStore:H,auditStore:_,audit:v,expirationMS:$&&$*1e3,evictionMS:Y&&Y*1e3,trackDeletes:L,tableName:E,tableId:P,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:R,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),O.schemaVersion=1;for(let z of hA)z(O)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function dx(e){let t=tt[e];if(t||(e==="data"?t=tt[e]=Cr:e==="system"?Object.defineProperty(tt,"system",{value:t=Object.create(null),configurable:!0}):t=tt[e]=Object.create(null)),Qa&&!Qa.has(e)){let r=new Set;t[BE]=r,Qa.set(e,r)}return t}function fx(e,t,r){return e[t]=r,r}function zc({database:e,table:t}){e||(e=EA),Cn();let r=dx(e),n=(0,Xe.join)((0,Xt.getHdbBasePath)(),Wr.DATABASES_DIR_NAME),s=(0,Xt.get)(Wr.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,Xt.get)(Wr.CONFIG_PARAMS.STORAGE_PATH)||((0,Kr.existsSync)(n)?n:(0,Xe.join)((0,Xt.getHdbBasePath)(),Wr.LEGACY_DATABASES_DIR_NAME));let o=(0,Xe.join)(n,(i?t:e)+".mdb"),c=Oi.get(o);if(!c){let u=new dA.default(o,!1);c=(0,UE.open)(u),Oi.set(o,c)}return c}async function xp(e){if(!tt[e])throw new Error("Schema does not exist");let t=tt[e];for(let r in t){let s=t[r].primaryStore.rootStore;Oi.delete(s.path),s.status==="open"&&(await s.close(),await ux.remove(s.path))}if(e==="data"){for(let r in Cr)delete Cr[r];delete Cr[BE]}delete tt[e]}function at({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=EA);let l=zc({database:t,table:e}),d=tt[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;u==null&&(u=!0);let O=new Lo.default(!1);for(let L of i)L.attribute?(L.name=L.attribute,L.indexed=!0):L.attribute=L.name,L.expiresAt&&(L.indexed=!0);let R,g;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 L=l.auditStore;L||(L=hE(l)),h=i.find(se=>se.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,Xt.get)(Wr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),n&&(h.eviction=n),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),pn.trace(`${e} table loading, opening primary store`);let $=new Lo.default(!1,!0),Y=e+"/",z=r_(l.openDB(Y,$));z.rootStore=l,S=l.dbisDb=l.openDB(LE.INTERNAL_DBIS_NAME,O),z.tableId=S.get(Ka),z.tableId||(z.tableId=1),S.putSync(Ka,z.tableId+1),h.tableId=z.tableId,f=fx(d,e,DE({primaryStore:z,auditStore:L,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:u,dbisDB:S})),f.schemaVersion=1,R=!0,v(),S.put(Y,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(LE.INTERNAL_DBIS_NAME,O)),f.dbisDB=S;let P=[];for(let{key:L,value:$}of S.getRange({start:!0})){let[Y,z]=L.toString().split("/");if(z===""&&(z=$.name),z){if(Y!==e)continue}else z=Y;if(!i.find(me=>me.name===z)?.indexed&&$.indexed&&!$.isPrimaryKey){v(),R=!0,S.remove(L);let me=f.indices[Y];me&&P.push(me)}}let H=[];try{for(let L of i||[]){if(L.relationship)continue;let $=e+"/"+(L.name||"");Object.defineProperty(L,"key",{value:$,configurable:!0});let Y=S.get($);if(L.isPrimaryKey){if(Y=Y||S.get($=e+"/")||{},o!==f.audit||(+r||void 0)!==(+Y.expiration||void 0)||(+n||void 0)!==(+Y.eviction||void 0)){let se=Object.assign({},Y);typeof o=="boolean"&&(o&&f.enableAuditing(o),se.audit=o),r&&(se.expiration=+r),n&&(se.eviction=+n),R=!0,v(),S.put($,se)}continue}Y?.attribute&&!Y.name&&(Y.indexed=!0);let z=!Y||Y.type!==L.type||Y.indexed!==L.indexed||Y.nullable!==L.nullable||JSON.stringify(Y.attributes)!==JSON.stringify(L.attributes)||JSON.stringify(Y.elements)!==JSON.stringify(L.elements);if(L.indexed){let se=new Lo.default(!0,!1),me=l.openDB($,se);(z||Y.indexingPID&&Y.indexingPID!==process.pid||Y.restartNumber<Al.workerData?.restartNumber)&&(R=!0,v(),Y=S.get($),(z||Y.indexingPID&&Y.indexingPID!==process.pid||Y.restartNumber<Al.workerData?.restartNumber)&&(R=!0,L.lastIndexedKey=Y?.lastIndexedKey||!1,L.indexingPID=process.pid,me.isIndexing=!0,Object.defineProperty(L,"dbi",{value:me}),L.indexNulls===void 0&&(L.indexNulls=!0),H.push(L)),S.put($,L)),Y?.indexNulls&&L.indexNulls===void 0&&(L.indexNulls=!0),me.indexNulls=L.indexNulls,p[L.name]=me}else z&&(R=!0,v(),S.put($,L))}}finally{g&&g()}if(R&&(f.schemaVersion++,f.updatedAttributes()),pn.trace(`${e} table loading, running index`),H.length>0||P.length>0?f.indexingOperation=ose(f,H,P):R&&ME.signalSchemaChange(new PE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,R)for(let L of hA)L(f,_!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),pn.trace(`${e} table loaded`),f;function v(){g||l.transactionSync(()=>({then(L){g=L}}))}a(v,"startTxn")}async function ose(e,t,r){try{let n=e.schemaVersion;await ME.signalSchemaChange(new PE.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,s=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,lx.getIndexedValues)(l[h]);if(p)for(let S=0,O=p.length;S<O;S++)E.dbi.put(p[S],_)}}),s.then(()=>u--,f=>{u--,pn.error(f)}),Al.workerData&&Al.workerData.restartNumber!==_x.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>sse?await s:u>ise&&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 ME.signalSchemaChange(new PE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){pn.error("Error in indexing",n)}}function ase({table:e,database:t}){let r=zc({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 RR(e){hA.push(e)}var Xt,LE,UE,Xe,Kr,Wa,Lo,dA,Wr,ux,fA,lx,ME,PE,Al,pn,_x,EA,BE,Cr,tt,Ka,hA,vE,Oi,Qa,sse,ise,Ae=Re(()=>{Xt=x(te()),LE=x(_t()),UE=require("lmdb"),Xe=require("path"),Kr=require("fs"),Wa=x(Qe());Df();Lo=x(n_()),dA=x(i_()),Wr=x(M()),ux=x(require("fs-extra")),fA=require("../../index"),lx=x(Ir()),ME=x(Ts()),PE=x(wn()),Al=require("worker_threads"),pn=x(W()),_x=x(et());Bi();xo();EA="data",BE=Symbol("defined-tables");(0,Xt.initSync)();Cr=Object.create(null),tt=Object.create(null);(0,fA._assignPackageExport)("databases",tt);(0,fA._assignPackageExport)("tables",Cr);Ka=Symbol.for("next-table-id"),hA=[],Oi=new Map;a(rse,"getTables");a(Cn,"getDatabases");a(nse,"resetDatabases");a(Rl,"readMetaDb");a(dx,"ensureDB");a(fx,"setTable");a(zc,"database");a(xp,"dropDatabase");a(at,"table");sse=1e3,ise=10;a(ose,"runIndexing");a(ase,"dropTableMeta");a(RR,"onUpdatedTable")});var J=T((jme,wx)=>{"use strict";var bi=require("path"),Sx=require("fs-extra"),gr=W(),Ex=require("fs-extra"),HE=require("os"),cse=require("net"),use=require("recursive-iterator"),ot=M(),lse=iO(),hx=require("papaparse"),xE=require("moment"),{inspect:_se}=require("util"),mx=require("is-number"),Xme=require("lodash"),dse=require("minimist"),fse=require("https"),Ese=require("http"),{hdb_errors:FE}=re(),hse=/^((\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)))$/,Tx=require("util").promisify(setTimeout),mse=100,pse=5,Sse="",Tse=4,px={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};wx.exports={isEmpty:Qr,isEmptyOrZeroLength:us,arrayHasEmptyValues:Ase,arrayHasEmptyOrZeroLengthValues:Ose,buildFolderPath:bse,isBoolean:gx,errorizeMessage:gse,stripFileExtension:yse,autoCast:wse,autoCastJSON:Rx,autoCastJSONDeep:pA,removeDir:Ise,compareVersions:Cse,isCompatibleDataVersion:Dse,escapeRawValue:Lse,unescapeValue:Use,stringifyProps:Mse,timeoutPromise:vse,isClusterOperation:Hse,getClusterUser:Fse,checkGlobalSchemaTable:xse,getHomeDir:Ox,getPropsFilePath:Pse,promisifyPapaParse:qse,removeBOM:bx,createEventPromise:Gse,checkProcessRunning:kse,checkSchemaTableExist:Vse,checkSchemaExists:Nx,checkTableExists:yx,getStartOfTomorrowInSeconds:$se,getLimitKey:Yse,isObject:Nse,isNotEmptyAndHasValue:Rse,autoCasterIsNumberCheck:Ax,backtickASTSchemaItems:Kse,isPortTaken:Bse,createForkArgs:Wse,autoCastBoolean:Qse,async_set_timeout:Tx,getTableHashAttribute:zse,doesSchemaExist:Jse,doesTableExist:Xse,stringifyObj:jse,ms_to_time:Zse,changeExtension:eie,getEnvCliRootPath:SA,noBootFile:tie,httpRequest:rie,transformReq:nie,convertToMS:sie,PACKAGE_ROOT:ot.PACKAGE_ROOT};function gse(e){return e instanceof Error?e:new Error(e)}a(gse,"errorizeMessage");function Qr(e){return e==null}a(Qr,"isEmpty");function Rse(e){return!Qr(e)&&(e||e===0||e===""||gx(e))}a(Rse,"isNotEmptyAndHasValue");function us(e){return Qr(e)||e.length===0||e.size===0}a(us,"isEmptyOrZeroLength");function Ase(e){if(Qr(e))return!0;for(let t=0;t<e.length;t++)if(Qr(e[t]))return!0;return!1}a(Ase,"arrayHasEmptyValues");function Ose(e){if(us(e))return!0;for(let t=0;t<e.length;t++)if(us(e[t]))return!0;return!1}a(Ose,"arrayHasEmptyOrZeroLengthValues");function bse(...e){try{return e.join(bi.sep)}catch{console.error(e)}}a(bse,"buildFolderPath");function gx(e){return Qr(e)?!1:e===!0||e===!1}a(gx,"isBoolean");function Nse(e){return Qr(e)?!1:typeof e=="object"}a(Nse,"isObject");function yse(e){return us(e)?Sse:e.slice(0,-Tse)}a(yse,"stripFileExtension");function wse(e){return Qr(e)||e===""||typeof e!="string"?e:px[e]!==void 0?px[e]:Ax(e)===!0?Number(e):hse.test(e)?new Date(e):e}a(wse,"autoCast");function Rx(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Rx,"autoCastJSON");function pA(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=pA(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=pA(r);n!==r&&(e[t]=n)}return e}else return Rx(e)}a(pA,"autoCastJSONDeep");function Ax(e){if(e.startsWith("0.")&&mx(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&mx(e))}a(Ax,"autoCasterIsNumberCheck");async function Ise(e){if(us(e))throw new Error(`Directory path: ${e} does not exist`);try{await Ex.emptyDir(e),await Ex.remove(e)}catch(t){throw gr.error(`Error removing files in ${e} -- ${t}`),t}}a(Ise,"removeDir");function Cse(e,t){if(us(e)){gr.info("Invalid current version sent as parameter.");return}if(us(t)){gr.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("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(Cse,"compareVersions");function Dse(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(Dse,"isCompatibleDataVersion");function Lse(e){if(Qr(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(Lse,"escapeRawValue");function Use(e){if(Qr(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(Use,"unescapeValue");function Mse(e,t){if(Qr(e))return gr.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+HE.EOL}!us(n)&&n[0]===";"?r+=" "+n+s+HE.EOL:us(n)||(r+=n+"="+s+HE.EOL)}catch{gr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(Mse,"stringifyProps");function Ox(){let e;try{e=HE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Ox,"getHomeDir");function Pse(){let e=bi.join(Ox(),ot.HDB_HOME_DIR_NAME,ot.BOOT_PROPS_FILE_NAME);return Sx.existsSync(e)||(e=bi.join(__dirname,"../","hdb_boot_properties.file")),e}a(Pse,"getPropsFilePath");function vse(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(vse,"timeoutPromise");async function Bse(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=cse.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(Bse,"isPortTaken");function Hse(e){try{return ot.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){gr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Hse,"isClusterOperation");function xse(e,t){let r=(Ae(),ne(qe)).getDatabases();if(!r[e])return FE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return FE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(xse,"checkGlobalSchemaTable");function Fse(e,t){if(Qr(t)){gr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Qr(e)||us(e)){gr.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){gr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){gr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Fse,"getClusterUser");function qse(){hx.parsePromise=function(e,t,r){return new Promise(function(n,s){hx.parse(e,{header:!0,transformHeader:bx,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(qse,"promisifyPapaParse");function bx(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(bx,"removeBOM");function Gse(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;gr.info(`Got cluster status event response: ${_se(s)}`);try{i.cancel()}catch{gr.error("Error trying to cancel timeout.")}n(s)})})}a(Gse,"createEventPromise");async function kse(e){let t=!0,r=0;do await Tx(mse*r++),(await lse.findPs(e)).length>0&&(t=!1);while(t&&r<pse);if(t)throw new Error(`process ${e} was not started`)}a(kse,"checkProcessRunning");function Vse(e,t){let r=Nx(e);if(r)return r;let n=yx(e,t);if(n)return n}a(Vse,"checkSchemaTableExist");function Nx(e){let{getDatabases:t}=(Ae(),ne(qe));if(!t()[e])return FE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Nx,"checkSchemaExists");function yx(e,t){let{getDatabases:r}=(Ae(),ne(qe));if(!r()[e][t])return FE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(yx,"checkTableExists");function $se(){let e=xE().utc().add(1,ot.MOMENT_DAYS_TAG).startOf(ot.MOMENT_DAYS_TAG).unix(),t=xE().utc().unix();return e-t}a($se,"getStartOfTomorrowInSeconds");function Yse(){return xE().utc().format("DD-MM-YYYY")}a(Yse,"getLimitKey");function Kse(e){try{let t=new use(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){gr.error("Got an error back ticking items."),gr.error(t)}}a(Kse,"backtickASTSchemaItems");function Wse(e){return[e]}a(Wse,"createForkArgs");function Qse(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Qse,"autoCastBoolean");function zse(e,t){let{getDatabases:r}=(Ae(),ne(qe)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(zse,"getTableHashAttribute");function Jse(e){let{getDatabases:t}=(Ae(),ne(qe));return t()[e]!==void 0}a(Jse,"doesSchemaExist");function Xse(e,t){let{getDatabases:r}=(Ae(),ne(qe));return r()[e]?.[t]!==void 0}a(Xse,"doesTableExist");function jse(e){try{return JSON.stringify(e)}catch{return e}}a(jse,"stringifyObj");function Zse(e){let t=xE.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(Zse,"ms_to_time");function eie(e,t){let r=bi.basename(e,bi.extname(e));return bi.join(bi.dirname(e),r+t)}a(eie,"changeExtension");function SA(){if(process.env[ot.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[ot.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=dse(process.argv);if(e[ot.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[ot.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(SA,"getEnvCliRootPath");var mA;function tie(){if(mA)return mA;let e=SA();SA()&&Sx.pathExistsSync(bi.join(e,ot.HDB_CONFIG_FILE))&&(mA=!0)}a(tie,"noBootFile");function rie(e,t){let r;return e.protocol==="http:"?r=Ese:r=fse,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(rie,"httpRequest");function nie(e){if(!e.schema&&!e.database){e.schema=ot.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(nie,"transformReq");function sie(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(sie,"convertToMS")});var Mx=T((epe,Ux)=>{"use strict";var zr=te(),iie=Ki(),he=M(),Ol=rt(),Fs=require("path"),{PACKAGE_ROOT:GE}=M(),Ix=te(),qE=J(),za="/dev/null",oie=Fs.join(GE,"launchServiceScripts"),Cx=Fs.join(GE,"utility/scripts"),aie=Fs.join(Cx,he.HDB_RESTART_SCRIPT),Dx=Fs.resolve(GE,"dependencies",`${process.platform}-${process.arch}`,Ol.NATS_BINARY_NAME);function Lx(){let t=iie.licenseSearch().ram_allocation||he.RAM_ALLOCATION_ENUM.DEFAULT,r=he.MEM_SETTING_KEY+t,n={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return qE.noBootFile()&&(n[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=qE.getEnvCliRootPath()),{name:he.PROCESS_DESCRIPTORS.HDB,script:he.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:GE}}a(Lx,"generateMainServerConfig");var cie=9930;function uie(){zr.initSync(!0);let e=zr.get(he.CONFIG_PARAMS.ROOTPATH),t=Fs.join(e,"clustering",Ol.NATS_CONFIG_FILES.HUB_SERVER),r=Fs.join(zr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),n=Ix.get(he.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Ol.LOG_LEVEL_FLAGS[zr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==cie?"-"+n:""),script:Dx,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return zr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=za,i.error_file=za),i}a(uie,"generateNatsHubServerConfig");var lie=9940;function _ie(){zr.initSync(!0);let e=zr.get(he.CONFIG_PARAMS.ROOTPATH),t=Fs.join(e,"clustering",Ol.NATS_CONFIG_FILES.LEAF_SERVER),r=Fs.join(zr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),n=Ix.get(he.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Ol.LOG_LEVEL_FLAGS[zr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==lie?"-"+n:""),script:Dx,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return zr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=za,i.error_file=za),i}a(_ie,"generateNatsLeafServerConfig");function die(){zr.initSync();let e=Fs.join(zr.get(he.CONFIG_PARAMS.LOGGING_ROOT),he.LOG_NAMES.HDB),t={name:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:he.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:oie,autorestart:!1};return zr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=za,t.error_file=za),t}a(die,"generateClusteringUpgradeV4ServiceConfig");function fie(){let e={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.RESTART_HDB};return qE.noBootFile()&&(e[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=qE.getEnvCliRootPath()),{...{name:he.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:Cx},script:aie}}a(fie,"generateRestart");function Eie(){return{apps:[Lx()]}}a(Eie,"generateAllServiceConfigs");Ux.exports={generateAllServiceConfigs:Eie,generateMainServerConfig:Lx,generateRestart:fie,generateNatsHubServerConfig:uie,generateNatsLeafServerConfig:_ie,generateClusteringUpgradeV4ServiceConfig:die}});var IT=T((npe,Kx)=>{"use strict";var Pe=M(),hie=J(),qs=AT(),bl=At(),ls=rt(),Ni=Mx(),kE=te(),yi=W(),mie=bs(),{startWorker:Px,onMessageFromWorkers:pie}=et(),Sie=la(),rpe=require("util"),Tie=require("child_process"),gie=require("fs"),{execFile:Rie}=Tie,we;Kx.exports={enterPM2Mode:Aie,start:wi,stop:TA,reload:Bx,restart:Hx,list:gA,describe:Fx,connect:Gs,kill:wie,startAllServices:Iie,startService:RA,getUniqueServicesList:qx,restartAllServices:Cie,isServiceRegistered:Gx,reloadStopStart:kx,restartHdb:xx,deleteProcess:Nie,startClusteringProcesses:$x,startClusteringThreads:Yx,isHdbRestartRunning:yie,isClusteringRunning:Lie,stopClustering:Die,reloadClustering:Uie};var Nl=!1;pie(e=>{e.type==="restart"&&kE.initSync(!0)});function Aie(){Nl=!0}a(Aie,"enterPM2Mode");function Gs(){return we||(we=require("pm2")),new Promise((e,t)=>{we.connect((r,n)=>{yi.setupConsoleLogging(),r&&t(r),e(n)})})}a(Gs,"connect");var Rr,Oie=10,vx;function wi(e,t=!1){if(Nl)return bie(e);let r=Rie(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Rr.indexOf(r);o>-1&&Rr.splice(o,1),!vx&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Oie&&(gie.existsSync(qs.getHubConfigPath())?wi(e):(await qs.generateNatsConfig(!0),wi(e),await new Promise(c=>setTimeout(c,3e3)),await qs.removeNatsConfig(Pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await qs.removeNatsConfig(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=kE.get(Pe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&ls.LOG_LEVEL_HIERARCHY[o]>=ls.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===ls.LOG_LEVELS.ERR||l===ls.LOG_LEVELS.WRN?yi.OUTPUTS.STDERR:yi.OUTPUTS.STDOUT;yi.logCustomLevel(l||"info",E,n,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=ls.LOG_LEVELS[f]}if(ls.LOG_LEVEL_HIERARCHY[o]>=ls.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===ls.LOG_LEVELS.ERR||l===ls.LOG_LEVELS.WRN?yi.OUTPUTS.STDERR:yi.OUTPUTS.STDOUT;yi.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),Rr=[],!Rr&&!t){let i=a(()=>{vx=!0,Rr&&(Rr.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)}Rr.push(r)}a(wi,"start");function bie(e){return new Promise(async(t,r)=>{try{await Gs()}catch(n){r(n)}we.start(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(bie,"startWithPM2");function TA(e){if(!Nl){for(let t of Rr||[])t.name===e&&(Rr.splice(Rr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Gs()}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(TA,"stop");function Bx(e){return new Promise(async(t,r)=>{try{await Gs()}catch(n){r(n)}we.reload(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(Bx,"reload");function Hx(e){if(!Nl)for(let t of Rr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Gs()}catch(n){r(n)}we.restart(e,(n,s)=>{we.disconnect(),t(s)})})}a(Hx,"restart");function Nie(e){return new Promise(async(t,r)=>{try{await Gs()}catch(n){r(n)}we.delete(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(Nie,"deleteProcess");async function xx(){await wi(Ni.generateRestart())}a(xx,"restartHdb");async function yie(){let e=await gA();for(let t in e)if(e[t].name===Pe.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(yie,"isHdbRestartRunning");function gA(){return new Promise(async(e,t)=>{try{await Gs()}catch(r){t(r)}we.list((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(gA,"list");function Fx(e){return new Promise(async(t,r)=>{try{await Gs()}catch(n){r(n)}we.describe(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(Fx,"describe");function wie(){if(!Nl){for(let e of Rr||[])e.kill();Rr=[];return}return new Promise(async(e,t)=>{try{await Gs()}catch(r){t(r)}we.killDaemon((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(wie,"kill");async function Iie(){try{await $x(),await Yx(),await wi(Ni.generateAllServiceConfigs())}catch(e){throw we?.disconnect(),e}}a(Iie,"startAllServices");async function RA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Pe.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Ni.generateMainServerConfig();break;case Pe.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Ni.generateNatsIngestServiceConfig();break;case Pe.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Ni.generateNatsReplyServiceConfig();break;case Pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Ni.generateNatsHubServerConfig(),await wi(r,t),await qs.removeNatsConfig(e);return;case Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Ni.generateNatsLeafServerConfig(),await wi(r,t),await qs.removeNatsConfig(e);return;case Pe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Ni.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await wi(r)}catch(r){throw we?.disconnect(),r}}a(RA,"startService");async function qx(){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 we?.disconnect(),e}}a(qx,"getUniqueServicesList");async function Cie(e=[]){try{let t=!1,r=await qx();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===Pe.PROCESS_DESCRIPTORS.HDB?t=!0:await Hx(o))}t&&await kx(Pe.PROCESS_DESCRIPTORS.HDB)}catch(t){throw we?.disconnect(),t}}a(Cie,"restartAllServices");async function Gx(e){if(Rr?.find(r=>r.name===e))return!0;let t=await Sie.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(Gx,"isServiceRegistered");async function kx(e){let t=kE.get(Pe.CONFIG_PARAMS.THREADS_COUNT)??kE.get(Pe.CONFIG_PARAMS.THREADS),r=await Fx(e),n=hie.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await TA(e),await RA(e)):e===Pe.PROCESS_DESCRIPTORS.HDB?await xx():await Bx(e)}a(kx,"reloadStopStart");var Vx;async function $x(e=!1){for(let t in Pe.CLUSTERING_PROCESSES){let r=Pe.CLUSTERING_PROCESSES[t];await RA(r,e)}}a($x,"startClusteringProcesses");async function Yx(){Vx=Px(Pe.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Pe.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await bl.createWorkQueueStream(ls.WORK_QUEUE_CONSUMER_NAMES),await bl.updateIngestStreamConsumer(),await bl.updateLocalStreams();let e=await mie.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Pe.PRE_4_0_0_VERSION){yi.info("Starting clustering upgrade 4.0.0 process"),Px(Pe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(Yx,"startClusteringThreads");async function Die(){for(let e in Pe.CLUSTERING_PROCESSES)if(e!==Pe.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Pe.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await Vx.terminate();else{let t=Pe.CLUSTERING_PROCESSES[e];await TA(t)}}a(Die,"stopClustering");async function Lie(){for(let e in Pe.CLUSTERING_PROCESSES){let t=Pe.CLUSTERING_PROCESSES[e];if(await Gx(t)===!1)return!1}return!0}a(Lie,"isClusteringRunning");async function Uie(){await qs.generateNatsConfig(!0),await bl.reloadNATSHub(),await bl.reloadNATSLeaf(),await qs.removeNatsConfig(Pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await qs.removeNatsConfig(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Uie,"reloadClustering")});var AA=IT(),Wx=M();a(async function(){try{let t=await AA.describe(Wx.PROCESS_DESCRIPTORS.HDB);for(let r of t)await AA.reload(r.pm_id);await AA.deleteProcess(Wx.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();